2023-02-19 06:20:56 +00:00
# arch-zbm
2023-02-19 22:35:19 +01:00
Helper script to install Arch Linux with ZFSBootMenu from within a running Arch Linux live CD ISO image
2023-02-19 20:22:01 +01:00
# Prep
2023-02-19 22:35:19 +01:00
We expect minimal prep on your end. Please make sure that before execution the following conditions are met.
2023-02-19 20:22:01 +01:00
2023-02-19 22:35:19 +01:00
- Arch Linux live CD ISO image sees exactly one partition with partition type code `BF00` ("Solaris root")
- Arch Linux live CD ISO image sees exactly one partition with partition type code `EF00` ("EFI system partition")
2023-02-19 22:17:38 +01:00
- No ZFS zpool exists
The script will create a single ZFS zpool `zpool` on the `BF00` partition with dataset child `zpool/root` which itself has one child `zpool/root/archlinux` , that's where Arch Linux gets installed. Parallel to `zpool/root` it'll create `zpool/data` with a `zpool/data/home` child dataset that gets mounted at `/home` .
2023-02-19 22:35:19 +01:00
The script will use the `EF00` partition to install a ZFSBootMenu EFI executable if `efibootmgr` says that no such `ZFSBootMenu` entry exists. If ZFSBootMenu gets added to the EFI partition it'll become primary boot option.
2023-02-19 20:22:01 +01:00
# How to run this?
- Boot an Arch Linux live CD ISO image
- Run:
```
2023-02-19 22:01:00 +01:00
export SCRIPT_URL='https://quico.space/quico-os-setup/arch-zbm/raw/branch/main/setup.sh'
curl -s "${SCRIPT_URL}" | bash
2023-02-19 20:22:01 +01:00
```
2023-02-19 22:35:19 +01:00
During execution the script will call itself when it changes into its `chroot` , that's why we `export SCRIPT_URL` . Feel free to update `"${SCRIPT_URL}"` with whatever branch or revision you want to use from [quico.space/quico-os-setup/arch-zbm ](https://quico.space/quico-os-setup/arch-zbm ). Typically `.../branch/main/setup.sh` as shown above is what you want.
2023-02-19 22:17:38 +01:00
2023-02-19 20:22:01 +01:00
# Steps
The scripts takes the following installation steps.
2023-02-19 22:35:19 +01:00
1. Install ZFS tools and kernel module with [github.com/eoli3n/archiso-zfs ](https://github.com/eoli3n/archiso-zfs )
1. Create one encrypted ZFS zpool on top of `BF00` partition, password `password`
1. Create dataset for Arch Linux and `/home`
1. Install Arch Linux into pool
1. Add ZFSBootMenu to `EF00` partition if it doesn't exist already
1. Exit into Arch Linux live CD ISO image shell for you to `reboot` and frolick
# Flavor choices
We make the following opinionated flavor choices. Feel free to change them to your liking.
* Arch Linux locale is set to `en_US.UTF-8`
* Keymap is set `de-latin1`
* Consult `/etc/vconsole.conf`
* Change `zfs set org.zfsbootmenu:commandline=...`
* No X.Org Server, Wayland compositors or other GUI elements get installed
2023-02-19 23:59:04 +01:00
* Timezone is `Etc/UTC`
* Check `timedatectl set-timezone <tzdata-zone>`
2023-02-19 20:22:01 +01:00
2023-02-19 21:22:07 +01:00
# Post-run manual steps
2023-02-20 00:22:53 +01:00
After installation you're going to want to at least touch these points in your new Arch Linux install:
2023-02-19 21:22:07 +01:00
2023-02-20 00:22:53 +01:00
* Package manager hook: `pacman` does not have a hook to do ZFS snapshots
* See [this GitHub gist ](https://gist.github.com/Soulsuke/6a7d1f09f7fef968a2f32e0ff32a5c4c#file-arch_on_zfs-txt-L238 ) and [zfs-snapshotter.bash ](https://github.com/Soulsuke/arch-zfs-tools/blob/master/zfs-snapshotter.bash ) for inspiration
2023-02-19 22:35:19 +01:00
* Hostname: Installation chose a pseudo-randomly generated 8-character string with `pwgen`
2023-02-20 00:22:53 +01:00
* Unprivileged user accounts: The OS was installed `root` and unprivileged `build`
2023-02-19 21:22:07 +01:00
* Passwords
* ZFS: The password for all datasets underneath `zpool` is `password` .
* Local `root` account: The local `root` account's password is `password` .
2023-02-20 00:22:53 +01:00
* Arch User Repository (AUR) helper: We installed [paru ](https://github.com/Morganamilo/paru ) as our AUR helper, we installed from GitHub via `makepkg -si` .
2023-02-19 21:22:07 +01:00
2023-02-19 20:22:01 +01:00
# Development
## Conventional commits
This project uses [Conventional Commits ](https://www.conventionalcommits.org/ ) for its commit messages.
### Commit types
Commit _types_ besides `fix` and `feat` are:
* `build` : Project structure, directory layout, build instructions for roll-out
* `refactor` : Keeping functionality while streamlining or otherwise improving function flow
* `test` : Working on test coverage
* `docs` : Documentation for project or components
### Commit scopes
The following _scopes_ are known for this project. A Conventional Commits commit message may optionally use one of the following scopes or none:
2023-02-19 20:38:42 +01:00
* `iso` : Changing Arch Linux ISO CD
2023-02-19 20:22:01 +01:00
* `zbm` : Adjusting ZFSBootMenu's behavior
* `zfs` : A change to how ZFS interacts with the system, either a pool or a dataset
* `os` : Getting an perating system set up to correctly work in a ZFS boot environment
* `meta` : Affects the project's repo layout, readme content, file names etc.
2023-02-20 00:22:21 +01:00
# Credits
Most of what's here was shamelessly copied and slightly adapted for personal use from Jonathan Kirszling at GitHub.
Thanks to:
* Jonathan Kirszling:
* [github.com/eoli3n/arch-config/tree/master/scripts/zfs/install ](https://github.com/eoli3n/arch-config/tree/master/scripts/zfs/install )
* [github.com/eoli3n/archiso-zfs ](https://github.com/eoli3n/archiso-zfs )
* Maurizio Oliveri:
* [github.com/Soulsuke/arch-zfs-tools ](https://github.com/Soulsuke/arch-zfs-tools )
* [gist.github.com/Soulsuke/6a7d1f09f7fef968a2f32e0ff32a5c4c ](https://gist.github.com/Soulsuke/6a7d1f09f7fef968a2f32e0ff32a5c4c )
* Zach Dykstra, Andrew J. Hesford and all other [ZFSBootMenu contributors ](https://github.com/zbm-dev/zfsbootmenu/graphs/contributors ):
* Their [ZFSBootMenu testing helper scripts ](https://github.com/zbm-dev/zfsbootmenu/tree/master/testing/helpers ) ([chroot-arch.sh ](https://github.com/zbm-dev/zfsbootmenu/blob/master/testing/helpers/chroot-arch.sh ), [install-arch.sh ](https://github.com/zbm-dev/zfsbootmenu/blob/master/testing/helpers/install-arch.sh ))
* [github.com/kongkrit ](https://github.com/kongkrit ):
* [gist.github.com/kongkrit/a0585e179e33c2adf92db4050ec5171d ](https://gist.github.com/kongkrit/a0585e179e33c2adf92db4050ec5171d )