Split up playbooks into host-level and guest-level

This commit is contained in:
Marty Oehme 2025-02-21 11:41:14 +01:00
parent bf1e99b197
commit 8a77b201bd
Signed by: Marty
GPG key ID: 4E535BC19C61886E
3 changed files with 105 additions and 72 deletions

54
guest.yaml Normal file
View file

@ -0,0 +1,54 @@
- name: Void prep
hosts: guest
become: true
vars:
ansible_chroot_exe: arch-chroot
disable_root_check: true
tasks:
# Prefer booster to dracut so make sure to never install it
- name: Ignore dracut
ansible.builtin.lineinfile:
path: /etc/xbps.d/ignore-dracut.conf
line: ignorepkg=dracut
state: present
create: true # create file if absent
- name: Update xbps and system
community.general.xbps:
name:
- xbps
state: latest
update_cache: true
upgrade: true
- name: Install Base system
community.general.xbps:
name:
- base-system
state: present
- name: Get rid of temporary container metapackage
community.general.xbps:
name:
- base-container-full
state: absent
- name: Install booster
community.general.xbps:
name: booster
state: present
changed_when: True
notify: installed-booster
handlers:
- name: List installed linux kernels
find:
paths: "/usr/lib/modules"
register: found_kernel
listen: installed-booster
- name: Find kernel
debug:
msg: "{{ found_kernel['files'] | map(attribute='path') | map('regex_replace', '^.*/(.*)$', '\\1') | list }}"
listen: installed-booster

32
host.yaml Normal file
View file

@ -0,0 +1,32 @@
# # The subvol collection seems to be misbehaving?
# # https://github.com/ansible-collections/community.general/issues/7098
# # (and btrfs_subvol module working)
# - name: Create void btrfs subvol
# hosts: host
# vars:
# btrfs_target: 441a90a5-3da2-46ce-9e32-987569b746c9
# mount_dir: /mnt/void
# become: true
# tasks:
# - name: Create @voidroot subvool under root
# community.general.btrfs_subvolume:
# state: present
# name: "/@"
# filesystem_uuid: "{{ btrfs_target }}"
- name: Create voidlinux guest
hosts: host
become: true
vars:
mount_dir: /mnt/void
tarball_url: "https://repo-default.voidlinux.org/live/current/void-x86_64-ROOTFS-20250202.tar.xz"
tasks:
- name: Unpack rootfs
ansible.builtin.unarchive:
remote_src: yes # we already downloaded it to the 'remote' system
src: "{{ tarball_url }}"
dest: "{{ mount_dir }}"
# ONLY run if this file does not exist (could use any rootfs file to check)
creates: "{{ mount_dir }}/etc/os-release"
# - name: Mount /boot part into voidroot mount

View file

@ -1,37 +1,6 @@
---
# # The subvol collection seems to be misbehaving?
# # https://github.com/ansible-collections/community.general/issues/7098
# # (and btrfs_subvol module working)
# - name: Create void btrfs subvol
# hosts: host
# vars:
# btrfs_target: 441a90a5-3da2-46ce-9e32-987569b746c9
# mount_dir: /mnt/void
# become: true
# tasks:
# - name: Create @voidroot subvool under root
# community.general.btrfs_subvolume:
# state: present
# name: "/@"
# filesystem_uuid: "{{ btrfs_target }}"
- name: Create voidlinux guest
hosts: host
become: true
vars:
mount_dir: /mnt/void
tarball_url: "https://repo-default.voidlinux.org/live/current/void-x86_64-ROOTFS-20250202.tar.xz"
tasks:
- name: Unpack rootfs
ansible.builtin.unarchive:
remote_src: yes # we already downloaded it to the 'remote' system
src: "{{ tarball_url }}"
dest: "{{ mount_dir }}"
# ONLY run if this file does not exist (could use any rootfs file to check)
creates: "{{ mount_dir }}/etc/os-release"
- name: Import host tasks
ansible.builtin.import_playbook: host.yaml
# Get python onto void - otherwise we can not interact through ansible
- name: Bootstrap void python
@ -43,43 +12,21 @@
register: python_install
changed_when: "'installed successfully' in python_install.stdout"
- name: Import chroot guest tasks
ansible.builtin.import_playbook: guest.yaml
- name: Void prep
hosts: guest
become: true
vars:
ansible_chroot_exe: arch-chroot
disable_root_check: true
tasks:
# Prefer booster to dracut so make sure to never install it
- name: Ignore dracut
ansible.builtin.lineinfile:
path: /etc/xbps.d/ignore-dracut.conf
line: ignorepkg=dracut
state: present
create: true # create file if absent
- name: Update xbps and system
community.general.xbps:
name:
- xbps
state: latest
update_cache: true
upgrade: true
- name: Install Base system
community.general.xbps:
name:
- base-system
state: present
- name: Get rid of temporary container metapackage
community.general.xbps:
name:
- base-container-full
state: absent
- name: Install booster
community.general.xbps:
name: booster
state: present
# - I chose to use booster instead of dracut
# - easiest way to achieve this is before installing `base-system`
# to `echo 'ignorepkg=dracut' >> /etc/xbps.d/ignore-dracut.conf`
# and manually install `booster` instead
# - Lastly, you need to manually create initramfs when in a chroot
# since booster will detect the host kernel instead. See here:
# <https://github.com/anatol/booster/issues/230>
# Essentially, run `booster build --kernel-version <krnl> myboot.img`
# with the version you want to build for.
# E.g. at time of writing, `booster build --kernel-version 6.12.13_1 myboot.img`.
# To find correct version, use the name of the `/usr/lib/modules/XYZ` XYZ dir.
#
# - do the remaining steps in the 'installation configuration' setup of the guide chroot guide
# - if wanted (and you should) uncomment wheel group in sudoers and set up a sudo-enabled user
# `useradd -m -G wheel -U -s /bin/zsh <username>` (if zsh is already installed)