© 2006 - 2024 | Tobias Powalowski | Arch Linux Developer tpowa
Last update: 13.09.2024 11:23
Archboot is a most advanced, modular Arch Linux boot/install image creation utility to generate
reproducible bootable media for UKI/CD/USB/PXE, designed for installation or rescue operation.
The additional ISOs and UKIs focus on being small, fast and (power)user friendly.
Arch Linux Distribution | Release | B2SUM | Archive | Forum |
---|---|---|---|---|
ARM - aarch641 | Packages | Check | Browse | Check |
RISC-V - riscv642 | Packages | Check | Browse | |
X64 - x86_643 | Packages | Check | Browse | Check |
1 Supports aarch64, Apple Mac M1 and higher for virtual machines eg. Parallels Desktop, UTM and VMware
2 Supports riscv64 and needs U-Boot to launch. Recommended only for testing in a virtual machine.
3 Supports x86_64. Use it for real machines and/or virtual machines.
Location | Main Mirrors | Download |
---|---|---|
United States - MA | archboot.com | aarch64 | riscv64 | x86_64 |
Europe - France | archboot.eu | aarch64 | riscv64 | x86_64 |
Asia - Indonesia | archboot.net | aarch64 | riscv64 | x86_64 |
Location | User Hosted Mirrors | Download |
---|---|---|
Germany | pagenotfound.de | aarch64 | riscv64 | x86_64 |
Type | RAM to boot |
WiFi support |
LAN support |
Package cache for installation |
---|---|---|---|---|
date | 830M | ✔ | ✔ | ✖ |
date-latest | 2300M | ✖ | local DHCP server needed |
>= 4G RAM needed |
date-local | 3000M | ✔ | ✔ | ✔ |
Boot Mode | AARCH64 | RISCV64 | X86_64 |
---|---|---|---|
UEFI/UEFI_CD booting with GRUB |
✔ | ✖ | ✔ |
UEFI_MIX* booting with GRUB |
✖ | ✖ | ✔ |
Secure Boot with the included fedora signed shim |
✔ | ✖ | ✔ |
MBR BIOS with GRUB |
✖ | ✖ | ✔ |
MBR with U-Boot |
✖ | ✔ | ✖ |
* Firmware 32bit / OS 64bit
A hybrid image file is a standard CD/DVD-burnable image and also a raw disk image.
Use this command with USB thumb drive: |
---|
# dd if=<image> of=/dev/<device> bs=1M |
Caveat: |
---|
|
Please read Roderick Smith’s guide for initial shim setup first.
The included tools for key management: mokutil, sbsigntools, sbctl and mkkeys.sh
On initial Secure Boot setup MOK manager is launched:
Add the hash of grub and kernel from ISO in MOK manager: |
---|
/EFI/BOOT/GRUB<ARCH>.EFI and /boot/vmlinuz-<ARCH> |
The setup script supports the following Secure Boot layout:
Create and backup your own keys with Microsoft certificates: |
---|
# secureboot-keys.sh -name=<yournametoembed> <directory> |
In order to reset the MOK setup:
Reset MOK: |
---|
# mokutil --reset |
VC 1-4 | VC 5 | VC 6 | VC 11 | VC 12 | |
---|---|---|---|---|---|
Usage | Login Consoles | Network Status | System Status | Log Messages | Systemd Journal |
Terminal Keys | ALT+F1-F4 | ALT+F5 | ALT+F6 | ALT+F11 | ALT+F12 |
Graphical Keys | CTRL+ALT+F1-F6 | CTRL+ALT+F5 | CTRL+ALT+F6 | CTRL+ALT+F11 | CTRL+ALT+F12 |
Use left/right SUPER | Windows | Command | Search | Apple key or ALT+⇽ or ALT+⇾ to toggle consoles.
Serial console is enabled on ttyS0, ttyAMA0 and ttyUSB0.
Access the terminal with OpenSSH.
Parameter | Value |
---|---|
Default Key | embedded in Release.txt or $ /etc/archboot/ssh/archboot-key |
Default Passphrase | Archboot |
Port | 11838 |
Connect with ssh as root user (don't touch users known_hosts file): |
---|
$ ssh -i <yourkeyfile> -p 11838 -o StrictHostKeychecking=no \
-o UserKnownHostsFile=/dev/null root@archboot.local |
GNU screen is launched on login and last session will be reattached.
Parameter | Value |
---|---|
Favourite Browser | http://archboot.local:7681 |
Default Passphrase | Archboot |
GNU screen is launched on login and last session will be reattached.
The interactive scripts are launched on first login.
Your locale, console font and keymap will be configured by the localize script.
Pacman will be configured by the pacsetup script.
Gnome, Plasma, Sway and Xfce are supported.
VNC Client | |
---|---|
Connect | archboot.local |
Xorg Password | archboot |
Wayland Password | <none> |
Quickinst experts installation: |
---|
# quickinst <directory> |
You can always bump your image to latest available possibilities.
For all options use: |
---|
# update -help |
A custom autorun script at the end of bootup can be executed with the following options:
Archboot provides 2 additional scripts for doing those tasks.
internal backup / copying using tar: |
---|
# copy-mountpoint.sh -h |
internal or external backup / copying using rsync: |
---|
# rsync-backup.sh -h |
Attention: This will render all data on your device inaccessible! |
---|
# restore-usbstick.sh <device> |
You can use clean-blockdevice.sh for cleaning partition table and filesystem signatures of any blockdevice.
Attention: This will render all data on your device inaccessible! |
---|
# clean-blockdevice.sh <device(s)> |
You can also run archboot-setup.sh for system configuration on an installed system.
Install your corresponding Archboot package for getting the archboot-setup.sh script.
Please check the forum threads or project page for posted fixes and workarounds.
Get latest fixes from GIT: |
---|
# update -update |
radeon.modeset=0
, i915.modeset=0
, amdgpu.modeset=0
or nouveau.modeset=0
noapic
, nolapic
, acpi=off
, pci=routeirq
, pci=nosmp
or pci=nomsi
Archboot | Archiso | |
---|---|---|
Developer(s) | tpowa | arch-releng team |
Arch Install Scripts | ✔ | ✔ |
Interactive Basic Setup / Installation | ✔ | ✖ |
Archinstall | ✖ | ✔ |
Unified Kernel Image UKI system provided |
✔ | ✖ |
Secure Boot MOK support with Microsoft certificates supported by fedora's signed shim |
✔ | ✖ |
OpenSSH public key support | ✔ | ✖ |
HTTP Browser Terminal - TTYD | ✔ | ✖ |
Systemd on early userspace | ✔ | ✖ |
Offline installation support1 | ✔ | ✖ |
Internal update feature | ✔ | ✖ |
Accessibility support | ✖ | ✔ |
Mobile broadband modem management service (modemmanager) |
✖ | ✔ |
EXT2/3, F2FS, JFS, NILFS support | ✖ | ✔ |
BCACHEFS support | ✔ | ✖ |
Swap File Support | ✔ | ✖ |
Default Shell Switch Bash or Zsh |
✔ | ✖ |
Man/Info Pages | ★ | ✔ |
Real Machine boot to prompt2 | 37 seconds | 79 seconds |
Virtual Machine boot to prompt3 | 17 seconds | 22 seconds |
Virtual Machine systemd-analyze3 | 16 seconds | 57 seconds |
Minimum RAM to boot in MiB3 | 800 | 560 |
Free RAM on system in MiB3 | 3084 | 2730 |
Imagesize in MiB | 266 - 993 | 1182 |
ROOTFS size in MiB | 771 | 1900 |
ROOTFS packages | 226 | 419 |
ROOTFS Type | Btrfs on ZRAM | Squashfs |
Default Shell | Bash | Zsh |
Nano editor with syntax highlighting | ✔ | ✖ |
Neovim editor with lastplace plugin | ✔ | ✖ |
Detect high resolution screen size | ✔ | ✖ |
Show journal on Virtual Console 12 | ✔ | ✖ |
Enable windowkeys on Virtual Consoles | ✔ | ✖ |
Text browser | Elinks | Lynx |
Text browser preconfigured | ✔ | ✖ |
Chromium browser | ✔ | ✖ |
Firefox browser | ✔ | ✖ |
GParted partitioner | ✔ | ✖ |
Gnome desktop | ✔ | ✖ |
KDE/Plasma desktop | ✔ | ✖ |
Sway Wayland compositor | ✔ | ✖ |
Xfce desktop | ✔ | ✖ |
VNC installation support | ✔ | ✖ |
Rust CLI Tools: 3cpio, bandwhich, bat, bottom, choose, dog, dust, dysk, eza, fd, fzf, miniserve, netscanner, ouch, procs, ripgrep, rustscan, sd, trippy, zoxide |
✔ | ✖ |
Default Font Terminus | ✔ | ✖ |
Release build speed | 4 min 58 sec 3 ISOs & 3 UKIs |
5 min 56 sec 1 ISO |
Image assembling | grub-mkrescue | xorriso |
UEFI bootloader | Grub | Systemd-boot |
BIOS bootloader | Grub | Syslinux |
Reproducibility | ✔ | ✖ |
Easy custom live CD creation | ✖ | ✔ |
★ Optional | 1 Only local image | 2 Acer R11 Chromebook 4GB RAM
3 QEMU (4GB RAM, kvm and virtio backend), normal image
Add archboot repository to /etc/pacman.conf: |
---|
[archboot] # United States Server = https://pkg.archboot.com # Europe Server = https://pkg.archboot.eu # Asia Server = https://pkg.archboot.net |
If you want to build aarch64 or riscv64 images replace x86_64 with the architecture of your choice in the commands and files below.
Create the initrd with your chosen profile: |
---|
# archboot-cpio.sh -c /etc/archboot/<profile>.conf -g initrd.img |
Add your used kernel and initrd to your bootloader.
In order to build images you will need around 3G free space on disk.
This script creates every installation media with latest available core/extra packages and boot/ directory with kernel and initrds.
Custom OpenSSH Key: Place your public key to /etc/archboot/ssh/archboot-key.pubBuilding a new release: |
---|
# archboot-x86_64-release.sh <directory> |
Rebuilding a release (reproducibility): |
---|
# sed -n '12,19p' Release.txt >archboot.key |
Explanation of the image tools / toolchain.
Create an Archboot container for image creation: |
---|
# archboot-x86_64-create-container.sh <directory> |
To enter the container run: |
---|
# systemd-nspawn -D <directory> |
Modify your container to your needs. Then run archboot-x86_64-iso.sh for image creation in container.
3cpio can be used to examine/extract/list the initramfs files.
Part | Function |
---|---|
1 | All directories |
2 | All already compressed files |
3 | ZSTD compressed rootfs |
Option | Explanation |
---|---|
_KERNEL="" | defines used kernel |
_HOOKS=() | Array that defines the used hooks |
Function | Explanation |
---|---|
_map <function> <args> | redo <function> on <args> |
_dir <directory> | Only creates <directory> on <rootfs> |
_full_dir <directory> | Copies the <full directory> as is to <rootfs> |
_binary <binary> | Adds <binary> to rootfs, PATH is added, libraries are detected, symlinks are resolved |
_file <file> | Adds <file> as is to rootfs, symlinks are resolved |
_file_rename <file> <file_rootfs> | Adds <file> as is to rootfs <file_rootfs> |
_symlink <linkname> <linkedfile> | Adds symlink <linkname> to <linkedfile> on <rootfs> |
_mod <module> | Adds kernel <module> to <rootfs> |
_all_mods -f <exclude_pattern> <pattern> | Adds all kernel modules <pattern> to <rootfs>, use -f flag to exclude modules |
Script for ISO creation from running system or for use in Archboot container.
ISO Type | Run command: |
---|---|
Normal | # archboot-x86_64-iso.sh -g |
Latest | # archboot-x86_64-iso.sh -p=x86_64-latest -g |
Local | # archboot-x86_64-iso.sh -p=x86_64-local -g |
Script for UKI creation from running system or for use in Archboot container.
UKI Type | Run command: |
---|---|
Normal | # archboot-x86_64-uki.sh -g |
Latest | # archboot-x86_64-uki.sh -p=x86_64-latest -g |
Local | # archboot-x86_64-uki.sh -p=x86_64-local -g |
You need to configure all your settings in the configuration file: /etc/archboot/defaults
Create server release: |
---|
# archboot-x86_64-server-release.sh |
Create pacman container tarball: |
---|
# archboot-pacman-aarch64-container.sh <build-directory> |
# archboot-pacman-riscv64-container.sh <build-directory> |
Afterwards you only have to run for each release:
Create server release: |
---|
# archboot-aarch64-server-release.sh |
# archboot-riscv64-server-release.sh |
The /etc/archboot/server-update.conf file defines architectures and update trigger packages.
Enable systemd timer at 02:00:00 AM: |
---|
# systemctl enable archboot-server-update.timer |
# systemctl start archboot-server-update.timer |
You can skip the automatic generation, by adding a MASK file to the directory, which includes the containers.
You can run QEMU tests at different stages of ISO creation.
Install the edk2-armvirt package.
UEFI GPT mode: |
---|
$ qemu-system-aarch64 -drive file=<isofile>,if=virtio,format=raw \ |
MBR mode: |
---|
$ qemu-system-riscv64 -M virt \ |
Use ssh root@localhost -p 2222 to connect to machine from your running host.
kernel and initrd testing: |
---|
$ qemu-system-x86_64 -kernel <kernel> -initrd <initrd> \ |
BIOS MBR mode: |
---|
$ qemu-system-x86_64 -drive file=<isofile>,if=virtio,format=raw \ |
64bit UEFI / 64bit running system: |
---|
$ qemu-system-x86_64 -drive file=<isofile>,if=virtio,format=raw \ |
32bit UEFI / 64bit running system: |
---|
$ qemu-system-x86_64 -drive file=<isofile>,if=virtio,format=raw \ |
Copy OVMF_VARS.secboot_<arch>.fd to a place the user has access to it: |
---|
# cp /usr/share/archboot/ovmf/OVMF_VARS_x64.secboot.fd <directory>
# cp /usr/share/archboot/ovmf/OVMF_VARS_ia32.secboot.fd <directory>
|
The file already includes a basic set of keys from fedora ovmf package.
64bit UEFI / 64bit running system: |
---|
$ qemu-system-x86_64 -drive file=<isofile>,if=virtio,format=raw \ |
32bit UEFI / 64bit running system: |
---|
$ qemu-system-x86_64 -drive file=<isofile>,if=virtio,format=raw \ |
KVM virtio network for tap0: |
---|
-device virtio-net-device,netdev=eth0 \ |
KVM virtio harddisk: |
---|
-drive file=yourimagefile,if=virtio,format=raw |
QXL Video device with 800x600 resolution: |
---|
-device qxl-vga,xres=800,yres=600 |
Start a hwsid SSID for wireless testing purposes: |
---|
# archboot-hwsim.sh <SSID> |