# -*- mode: yaml; indent-tabs-mode: nil; tab-width: 2; coding: utf-8-unix -*-
---
- name: "DEBUG: ansible-gentoo_install bootloader"
  debug:
    verbosity: 1
    msg: "DEBUG: ansible-gentoo_install bootloader"

- name: test we are in the chroot
  shell: |
    df | grep {{AGI_install_disk}} && exit 1
  check_mode: false

- name: install grub or syslinx
  portage:
    package: sys-boot/{{AGI_install_bootloader}}
    state: installed

- block:

  - name: setup syslinux
    shell: |
      [ -d /boot/syslinux ] || mkdir  /boot/syslinux
      [ ! -d /usr/share/syslinux/ ] || \
        for elt in {{' '.join(AGI_install_syslinux_c32)}}; do
          [ -f /boot/syslinux/$elt ] && continue
          cp -np /usr/share/syslinux/$elt /boot/syslinux
         done
      exit 0

  - name: setup syslinux.cfg
    template: |
      dest: /boot/syslinux/syslinux.cfg
      src: boot/syslinux/syslinux.cfg
      force: no
      newline_sequence: '\r\n'
      owner: root
      mode: '0644'

  - name: do syslinux install manually
    shell: |
        df | grep {{AGI_install_disk}} && \
            echo ERROR: somethings wrong - {{AGI_install_disk}} isnt mounted
            && exit 1
        # should unmount it?
        dd if={{AGI_install_disk}}p1 count=440 bs=1|strings|grep SYSLINUX
        [ $? -eq 0 ] && exit 0
        echo HALT: YOU MUST INSTALL THE MBR YOURSELF - do this
        echo dd if=/usr/share/syslinux/mbr.bin of={{AGI_install_disk}}p1 count=440 bs=1 conv=notrunc
        echo HALT: YOU MUST INSTALL SYSLINUX YOURSELF - do this
        syslinux -d syslinux --install {{AGI_install_disk}}p1
        exit 999
    register: syslinux_out
    failed_when: false

  - name: install syslinux install manually
    fail:
      msg: "HALT: install syslinux install manually"
    when: syslinux_out.rc != 0

  when: AGI_install_bootloader == 'syslinux'

- block:
    
  - name: install grub to MBR
    command: grub-install {{ AGI_install_disk }}
    args:
      creates: /boot/grub
  
  - name: generate grub config
    shell: grub-mkconfig -o /boot/grub/grub.cfg
    args:
      creates: /boot/grub/grub.cfg
  
  - name: edit grub config
    shell: |
      [ -f /etc/default/grub.dst ] || cp -p /etc/default/grub /etc/default/grub.dst
      a=$(cat /proc/cmdline | sed -e 's/ BOOT_IMAGE=[^ ]*/ /' \
                                  -e 's/ initrd=[^ ]*/ /'
                                  -e 's/ resume=[^ ]*/ /'
                                  -e 's/ root=[^ ]*/ /')
      sed -e "s/^#*GRUB_CMDLINE_LINUX=\"\"/GRUB_CMDLINE_LINUX=\"$a\"/" \
          -i /etc/default/grub
      grub-script-check  /etc/default/grub

  - name: roles/ansible-gentoo_install/tasks/
    shell: |
      LINE="rd.skipfsck=1  ipv6.disable=1 console=ttys0 lang=en keymap=us "
      # LINE="$LINE pti=on doscsi iommu=pt  amd_iommu=on debugfs=off efi=disable_early_pci_dma extra_latent_entropy init_on_free=1 kvm.nx_huge_pages=force l1tf=full,force mce=0 mds=full,nosmt nosmt=force page_alloc.shuffle=1 pti=on random.trust_cpu=off slab_nomerge slub_debug=FZ spec_store_bypass_disable=on spectre_v2=on tsx_async_abort=full,nosmt vsyscall=none "
      LINE="$LINE intel_iommu=on vga=0x315 text
      df | grep /boot || mount /dev/vda1 /boot
      [ -d /boot/grub ] || exit 2
      [ -f /boot/grub/grub.cfg ] || exit 3
      cd /
      # boot/initramfs-pentoo-x86_64-6.1.52-pentoo_2023_09_30.img

  - name: /etc/default/grub
    lineinfile:
      dest: /etc/default/grub
      line: '{{item.from}}="{{item.to}}"'
      regexp: '^#*{{item.from}}=.*'
      owner: root
      mode: '0644'
    with_items:
      # Append parameters to the linux kernel command line for non-recovery entries
      - from: GRUB_CMDLINE_LINUX_DEFAULT
        to: " rd.skipfsck=1 ipv6.disable=1 console=ttyS0 lang=en keymap=us intel_iommu=on vga=0x315 text"
      # The resolution used on graphical terminal.
    # Note that you can use only modes which your graphic card supports via VBE.
    # You can see them in real GRUB with the command `vbeinfo'.
      - from: GRUB_GFXMODE
        to: 640x480
      # Set to 'text' to force the Linux kernel to boot in normal text
      - from: GRUB_GFXPAYLOAD_LINUX
        to: text
      # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to kernel
      - from: GRUB_DISABLE_LINUX_UUID
        to: true

    - name: grub.cfg from roles/ansible-gentoo_install/tasks/
      shell: |
        LINE="{{' '.join(AGI_install_syslinux_kernel_line)}}"
        # LINE="$LINE pti=on doscsi iommu=pt  amd_iommu=on debugfs=off efi=disable_early_pci_dma extra_latent_entropy init_on_free=1 kvm.nx_huge_pages=force l1tf=full,force mce=0 mds=full,nosmt nosmt=force page_alloc.shuffle=1 pti=on random.trust_cpu=off slab_nomerge slub_debug=FZ spec_store_bypass_disable=on spectre_v2=on tsx_async_abort=full,nosmt vsyscall=none "
        grep  /boot /etc/fstab || exit 1
        df | grep /boot || mount /boot || exit 2
        [ -d /boot/grub ] || exit 3
        [ -f /boot/grub/grub.cfg ] || exit 4
        [ -f /boot/grub/grub.cfg.dst ] || cp -p /boot/grub/grub.cfg /boot/grub/grub.cfg.dst
        sed -e 's@ ro *$@ '"$LINE"' ro@' -i /boot/grub/grub.cfg
      ignore_errors: true
    
    when: AGI_install_bootloader == 'grub:2'
  
- name: fstab root
  lineinfile:
    dest: /etc/fstab
    line: '{{AGI_container_disk}}3		/	ext4	defaults,noatime	0	1'
    regexp: '^{{AGI_container_disk}}3'
    owner: root
    mode: '0644'

- name: fstab boot
  lineinfile:
    dest: /etc/fstab
    line: '{{AGI_container_disk}}1		/boot	ext3	defaults,noatime	0	1'
    regexp: '^{{AGI_container_disk}}3'
    owner: root
    mode: '0644'

- name: fstab swap
  lineinfile:
    dest: /etc/fstab
    line: '{{AGI_container_disk}}2 	none 			swap 	nofail,sw 		0 0'
    regexp: '^{{AGI_container_disk}}2'
    owner: root
    mode: '0644'

- name: fstab shm
  lineinfile:
    dest: /etc/fstab
    line: 'tmpfs                   /run/shm                tmpfs   defaults,noexec,size=5%        0 0'
    regexp: '^tmpfs	*/run/shm'
    owner: root
    mode: '0644'

# linuxPen19	/mnt/linuxPen19         virtiofs    defaults,dirsync        0 0

- name: /etc/security/passwdqc.conf
  lineinfile:
    dest: /etc/security/passwdqc.conf
    line: 'enforce=none'
    regexp: '^enforce=.*'
    owner: root
    mode: '0644'

- name: /etc/security/passwdqc.conf
  lineinfile:
    dest: /etc/security/passwdqc.conf
    line: 'enforce=none'
    regexp: '^enforce=.*'
    owner: root
    mode: '0644'

- name: /etc/conf.d/consolefont
  lineinfile:
    dest: /etc/conf.d/consolefont
    line: 'consolefont="ter-v{{AGI_consolefont_font_size}}b"'
    regexp: '^consolefont=.*'
    owner: root
    mode: '0644'
 
- name: consolefont
  shell: |
    grep -q /etc/init.d/consolefont /etc/rc.local || \
      cat >> /etc/rc.local << EOF
    #!/bin/sh
    /etc/init.d consolefont stop
    /etc/init.d consolefont start
    # these are right for ter-v28b consolefont
    if tty|grep -q /dev/ttyS0 ; then   
        stty cols 80 rows 34
    elif tty|grep -q /dev/tty[1-6] ; then
        stty cols 80 rows 22
    fi 
    EOF
    chmod 755 /etc/rc.local
  ignore_errors: true

- name: rc-update add bootlogd boot
  shell: |
    [ -d /etc/modules-load.d ] || mkdir /etc/modules-load.d
    [ -f /etc/modules-load.d/virtio.conf ] || \
        echo "{{'\n'.join(AGI_bootstrap_modules)}}" \
        > /etc/modules-load.d/virtio.conf
    rc-update add consolefont
    rc-update | grep -q 'bootlogd .* boot' || \
      rc-update add bootlogd boot
    grep -q '^s0:' /etc/inittab || \
        sed -e 's/^#s0:/s0:/' /etc/inittab


    exit 0

