Archboot Homepage
© Tobias Powalowski | Arch Linux Developer tpowa Last update: 08.05.2023 06:37
You like the project? I like coffee :-)
Introduction
Archboot is a most advanced, modular Arch Linux boot/install image creation utility to generatereproducible bootable media for UKI/CD/USB/PXE , designed for installation or rescue operation. The system only runs in ZRAM on a btrfs filesystem and without any other special filesystems like squashfs/erofs .
First it was used as official install medium from Arch Linux 0.7 till 2008.03 release and is developed by tpowa since 2006.
Image Releases
Latest News , Changelog , Screenshot Gallery , Sources .
Release schedule : on 10th, 20th and 30th of a month new images are released.
Hybrid images , Unified Kernel Images , kernel , initrds , and microcodes are provided.
PGP KEY : 5B7E 3FB7 1B7F 1032 9A1C 03AB 771D F662 7EDF 681F for file verification is provided.
Supported Locales : be, bg, cs, da, de, en, el, es, fi, fr, hu, it, lt, lv, mk, nl, nn, pl, pt, ro, ru, sk, sr, sv, uk
Download image files
Arch Linux ARM aarch64
Arch Linux RISC-V riscv64
The image supports riscv64 and needs U-Boot to launch. Recommended only for testing in a VM.
Arch Linux X64 x86_64
The image for Arch Linux. Use it for real machines and/or virtual machines.
Features of the images
date
700
✔
✔
✖
312
417
417
date -latest
2000
✖
DHCP server needed
✔
128
182
date -local
2700
✔
✔
✔
532
753
* in MiB
During boot, all ethernet network interfaces will try to obtain an IP address through DHCP .
With a fast ethernet internet connection and a running DHCP server, go for the latest image.
Without an internet connection for installation, you should use the local image. It includes a local package repository for installation.
Rescue system / PXE booting
Supported boot modes
It supports GRUB ’s iso loopback support:
# lsblk -o NAME,PARTUUID,UUID
iso_loop_dev=PARTUUID=12345678-1234-1234-1234-123456789ABC
iso_loop_path=/dirname/basename_of_archboot.iso
menuentry "Archboot" --class iso {
loopback loop (hdX,Y)/archboot.iso
linux (loop)/boot/vmlinuz-x86_64 iso_loop_dev=/dev/sdXY iso_loop_path=/archboot.iso
initrd (loop)/boot/initramfs-x86_64.img
}
Burning release or writing to disk
A hybrid image file is a standard CD/DVD-burnable image and also a raw disk image.
Can be burned to CD/DVD(RW) media using most CD Burning utilities.
Can be raw-written to a drive using dd or similar utilities.
# dd if=<image> of=/dev/<device> bs=1M
In Rufus for Windows use dd-Mode to write the image.
Installation with a graphical environment or VNC instead of plain console
VNC is automatically launched with starting Xorg .
Connect with your vnc client and use password:archboot
Edit /etc/archboot/defaults to change default vnc password.
On Wayland VNC is not available.
Custom environment without VNC support
Edit /etc/archboot/defaults
_CUSTOM_XORG
# update-installer -custom-xorg
_CUSTOM_WAYLAND
# update-installer -custom-wayland
Remote installation with OpenSSH
root password is not set by default! If you need security during installation set a password .
Secure Boot MOK support with fedora's signed shim package
Caveat:
This method is intended to use for dual booting with Windows, without losing the Secure Boot benefits for Windows.
This method will not make your system more secure.
It installs a bootloader which is not controlled by Arch Linux and breaks the concept of Secure Boot as is.
Please read Roderick Smith’s guide first for initial shim setup.
In order to boot in Secure Boot mode on first boot:
you need to add the hash of grub and kernel from disk:/EFI/BOOT/GRUB<ARCH>.EFI and /boot/vmlinuz-<ARCH>
Tools included for key management: KeyTool, HashTool, mokutil, sbsigntools, sbctl and mkkeys.sh
setup script supports the following Secure Boot layout:
fedora's signed shim is copied to installed system
creating new keys is supported
using existing keys from /etc/secureboot/keys in layout secureboot-keys.sh produces
MOK setup is done with personal MOK keys
adding pacman hook for automatic signing with personal keys
On first boot you need to enroll the used personal key as MOK .
Then your installed system is dual boot ready.
# secureboot-keys.sh -name=<yournametoembed> <directory>
Switch to full Arch Linux system
The Archboot system is stripped down to minimal space usage.
Though perl, python, man/info pages, includes, additional kernel modules (eg. sound) and other things are not provided by default.
# update-installer -full-system
This will also stop cleaning the system, while running other update-installer tasks.
Interactive setup
You can run each point for doing the mentioned task. If you do a fresh install, it is recommended to run each point in the order as presented.
Changing console fonts and keymap
Setup network
Select Source
Local mode :
Local package database is autodetected
Online mode :
Latest pacman mirrors will be synced and you have to select your favourite mirror.
You will be asked if you want to activate the testing repository <default=no> .
If a new kernel is online available, you can decide to load the latest archboot environment and cache packages for installation <default=no> .
Changing timezone and date
Prepare Storage drive
You setup your storage drive, filesystems and define your mountpoints.
Auto-Prepare mode, manual partitioning , GUID (GPT) support, MBR (BIOS) support,Advanced Format 4k sector drive support etc.
Persistent block device naming support: PARTUUID , PARTLABEL , UUID, LABEL and KERNEL
Creation of software RAID /RAID partitions, LVM devices and LUKS encrypted devices
Supports standard linux, RAID /RAID _partitions, dmraid/fakeraid , LVM and LUKS encrypted devices
Filesystem support: EXT2/3 /4 , BTRFS , F2FS , NILFS2, XFS , JFS , VFAT
Install Packages
You can modify the packages to install in /etc/archboot/defaults .
Pacman will install the packages for the first boot to your storage drive.
Autoconfiguration of basic system:Linux console , Bash , Keymap , Timezone , Fstab , SSD performance , Swap performance , Systemd ,Pacman , Network , Crypttab and Mdadm
You set the root password .
You set the system-wide Locale
Preconfiguration of mkinitcpio.conf and KMS mode is done by hwdetect script
Choose your editor: nano or neovim
Configuration of basic system files:hostname , Linux console , locale.conf , fstab , mkinitcpio.conf , modprobe.conf ,resolv.conf , hosts , Locale , mirrors , pacman.conf
Install Bootloader
For experts: quickinst installation
This script is for experts , who assemble the filesystems first and mount them in a directory.
quickinst will autodetect the packages to install for a minimal system.
Keep your image up to date
You can always bump your image to latest available possibilities.
Archboot provides 2 additional scripts for doing those tasks.
Restoring an USB device to FAT32 state
When you have used the .iso image to create an USB installer, your USB stick is no longer useful for anything else.
Any remaining space on the stick (supposing you used a larger-than the .img file) is inaccessible.
Check carefully which device actually is your USB stick.
# restore-usbstick.sh <device>
Quick System Setup on already installed system
You can also run archboot-setup.sh for a quick System Setup on an already installed system.
Install your corresponding archboot package for getting the archboot-setup.sh script.
FAQ, Known Issues and limitations
Please check the forum threads or project page for posted fixes and workarounds .
# update-installer -update
The screen stays blank or other weird screen issues happen?
Some hardware does not like the KMS activation. Use one of the following kernel parameters :radeon.modeset=0, i915.modeset=0, amdgpu.modeset=0 or nouveau.modeset=0
Your system hangs during the boot process ?
Any combinations of the following kernel parameters may be useful:noapic, nolapic, acpi=off, pci=routeirq, pci=nosmp or pci=nomsi
Is it possible to remove the USB/CD medium?
You can remove the used medium, with the first Welcome Archboot - Arch Linux message on systemd startup.
Package XYZ is missing in archboot environment.
Install the missing package as needed.
For example, archinstall is not included by default. It needs python3, which is a large dependency.
Parallels Desktop might have keyboard issues on AARCH64.
Workaround : Press the arrow keys up and down a few times before selecting the boot entry you want to launch.
UTM does not work with Apple virtualization on AARCH64.
The AARCH64 kernel does not seem to support this feature. This cannot be fixed on archboot side.
dmraid /fakeraid /biosraid might not work on some boards.
mdadm only supports some isw and ddf fakeraid chipsets.
GRUB cannot detect correct BIOS boot order:
It may happen that hd(x,x) entries are not correct, thus first reboot may not work.
Fix : Either change BIOS boot order or change grub.cfg to correct entries after successful boot. This cannot be fixed it is a restriction in grub!
efibootmgr setup entries are not working:
It may happen that UEFI boot entries are not correct. Thus first reboot may not work.
Fix : Add manual entries and delete wrong entries from your UEFI implementation.
How much RAM is needed to boot?
It’s an initramdisk which includes everything. The calculated size to boot the image follows the formula:
initramdisk + kernelimage + unpackedinitramdisk = minimum RAM to boot
Development: GIT repository
GIT repository can be found at Arch Linux Gitlab or Github .
Bugs
Bugtracker
Developer(s)
tpowa
arch-releng team
Arch Install Scripts
✔
✔
Archboot installer
✔
✖
Archinstall
★
✔
Unified Kernel Image UKI provided and bootloader support
✔
✖
Secure Boot MOK support with Microsoft certificates supported by fedora signed shim
✔
✖
Offline installation support*
✔
✖
Internal update feature
✔
✖
Localization Switch
✔
★
Accessibility support
✖
✔
Mobile broadband modem management service (modemmanager)
✖
✔
Man/Info Pages
★
✔
Bootup speed to prompt**
20 seconds
31 seconds
Bootup speed systemd-analyze**
17 seconds
75 seconds
Minimum RAM to boot in MiB**
700
850
Free RAM on system in MiB**
3400
2853
Imagesize in MiB
182 - 753
853
ROOTFS size in MiB**
378
1700
ROOTFS packages
199
389
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
✔
✖
Text browser
Elinks
Lynx
IRC client
Weechat
Irssi
IRC and text browser preconfigured
✔
✖
Chromium browser
★
✖
Firefox browser
✔
✖
Gnome desktop
✔
✖
Gnome Wayland
✔
✖
KDE/Plasma desktop
✔
✖
KDE/Plasma Wayland
✔
✖
Xfce desktop
✔
✖
VNC installation support
✔
✖
Default Font Terminus
✔
✖
Build speed
faster
slower
Image assembling
grub-mkrescue
xorriso
Image bootloader
Grub
Grub and Syslinux
Reproducibility
✔
✖
Easy custom live CD creation
✖
✔
★ Optional | * Only local image | ** QEMU (4GB RAM, kvm and virtio backend), normal image
Create rescue system of running system
# mkinitcpio -c /etc/archboot/<profile>.conf -g initrd.img
Add your used kernel and initrd to your bootloader.
Create image files
Installation
[archboot] Server = https://pkgbuild.com/~tpowa/archboot/pkg
Install the archboot package on x86_64 hardware.
Install the archboot-arm package on aarch64 hardware.
Install the archboot-riscv package on riscv64 hardware.
Install the qemu-user-static package for building aarch64 or riscv64 images on x86_64 hardware.
If you want to build aarch64 or riscv64 images replace x86_64 with the architecture of your choice in the commands and files below.
Requirements
Around 3GB free space on disk.
Create image files without modifications
This script creates every installation media with latest available core/extra packages and boot/ directory with kernel and initrds.
# archboot-x86_64-release.sh <directory>
# archboot-x86_64-release.sh <directory> \ https://pkgbuild.com/~tpowa/archboot/src/iso/x86_64/latest/
Create image files with modifications:
Explanation of the archboot image tools.
archboot-x86_64-create-container.sh
# archboot-x86_64-create-container.sh <directory>
# systemd-nspawn -D <directory>
Modify your container to your needs. Then run archboot-x86_64-iso.sh for image creation in container.
Configuration files for image creation:
There are the following configuration files for ISO creation:
/etc/archboot/defaults : defaults for packages, bootloader config and server setup.
/etc/archboot/presets/<profile> : presets for the images, defines which kernel and mkinitcpio.conf is used.
/etc/archboot/<profile>.conf : contains the HOOKS, which are used for the initramdisks.
archboot-cpio.sh initramfs generator:
The archboot initramfs toolchain uses its own cpio generator, which is mkinitcpio compatible and only uses the following options:
Options supported in config files:
HOOKS, COMPRESSION, COMPRESSION_OPTIONS, MODULES_DECOMPRESS
Functions supported in HOOK files:
add_dir, add_full_dir, add_binary, add_file, add_symlink, add_module, add_all_modules
archboot-x86_64-iso.sh
Script for image creation from running system or for use in archboot container.
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
Setting up an archboot image server
Configuration file
You need to configure all your settings in the configuration file: /etc/archboot/defaults
Requirements
You have a normal user, which has access to a working gpg setup with own signature.
You have a normal user with ssh access to the server, on which the images should upload.
Add the directories on the remote server, you want to upload to.
Running commands
x86_64 architecture
# archboot-x86_64-server-release.sh
aarch64/riscv64 architecture
You have to skip the tarball creation step, on aarch64 or riscv64 hardware.
Install the qemu-user-static package, for building on x86_64 hardware.
On first time setup you need to create the pacman-aarch64-chroot tarball on x86_64 hardware.
# archboot-pacman-aarch64-chroot.sh <build-directory>
# archboot-pacman-riscv64-chroot.sh <build-directory>
Afterwards you only have to run for each release:
# archboot-aarch64-server-release.sh
# archboot-riscv64-server-release.sh
Server cleanup
The /etc/archboot/defaults file defines old images purging after 2 months.
Testing image and files with QEMU
You can run QEMU tests at different stages of ISO creation.
Running AARCH64:
$ qemu-system-aarch64 -drive file=<isofile>,if=virtio,format=raw \ -usb -usbdevice tablet --enable-kvm -boot d -m <memory> \ -bios /usr/share/edk2-armvirt/aarch64/QEMU_EFI.fd \ -machine virt -cpu cortex-a57 -device virtio-gpu-pci \ -device nec-usb-xhci -device usb-tablet \ -device usb-kbd
Running RISCV64:
$ qemu-system-riscv64 -M virt \ -kernel /usr/share/archboot/u-boot/qemu-riscv64_smode/uboot.elf \ -device virtio-gpu-pci -device virtio-net-device,netdev=eth0 \ -netdev user,id=eth0,hostfwd=tcp::2222-:22 \ -device nec-usb-xhci -device usb-tablet -device usb-kbd \ -object rng-random,filename=/dev/urandom,id=rng \ -device virtio-rng-device,rng=rng \ -drive file=<yourimage>,if=virtio,format=raw -m <yourmemory>
Use ssh root@localhost -p 2222 to connect to machine from your running host.
Running X86_64:
Running kernel, BIOS MBR, UEFI GPT without Secure Boot:
$ qemu-system-x86_64 -kernel <kernel> -initrd <initramdisk> \ -append "rootfstype=ramfs" \ --enable-kvm -usb -usbdevice tablet -m <memory>
$ qemu-system-x86_64 -drive file=<isofile>,if=virtio,format=raw \ -usb -usbdevice tablet --enable-kvm -boot d -m <memory>
$ qemu-system-x86_64 -drive file=<isofile>,if=virtio,format=raw \ -usb -usbdevice tablet --enable-kvm -boot d -m <memory> \ --bios /usr/share/edk2-ovmf/x64/OVMF.fd
$ qemu-system-x86_64 -drive file=<isofile>,if=virtio,format=raw \ -usb -usbdevice tablet --enable-kvm -boot d -m <memory> \ --bios /usr/share/edk2-ovmf/ia32/OVMF.fd
# cp /usr/share/archboot/ovmf/OVMF_VARS.secboot.fd <directory>
The file already includes a basic set of keys from fedora ovmf package.
$ qemu-system-x86_64 -drive file=<isofile>,if=virtio,format=raw \ -usb -usbdevice tablet --enable-kvm -boot d -m <memory> \ -drive if=pflash,format=raw,readonly=on,file=/usr/share/ovmf/x64/OVMF_CODE.secboot.fd \ -drive if=pflash,format=raw,file=./OVMF_VARS.secboot.fd \ -global driver=cfi.pflash01,property=secure,value=on \ -machine q35,smm=on,accel=kvm \ -global ICH9-LPC.disable_s3=1
$ qemu-system-x86_64 -drive file=<isofile>,if=virtio,format=raw \ -usb -usbdevice tablet --enable-kvm -boot d -m <memory> \ -drive if=pflash,format=raw,readonly=on,file=/usr/share/ovmf/ia32/OVMF_CODE.secboot.fd \ -drive if=pflash,format=raw,file=./OVMF_VARS.secboot.fd \ -global driver=cfi.pflash01,property=secure,value=on \ -machine q35,smm=on,accel=kvm \ -global ICH9-LPC.disable_s3=1
Additional qemu parameters
-device virtio-net-device,netdev=eth0 \ -netdev tap,id=eth0,ifname=tap0,script=no,downscript=no
-drive file=yourimagefile,if=virtio,format=raw
Setting up a hwsim SSID
# archboot-hwsim.sh <SSID>
Arch Linux Wiki
Quick links Archboot
Quick links videos
References