Custom Arch .iso with Serial Console
In CS 326 we set up virtual machines to use during the semester. Arch Linux is a great choice for this because it is well-documented but requires students to get their hands dirty during the installation process.
Initially, I’d have students set up using a graphical console via VNC or Spice. However, this was often a bit painful: ports would need to be forwarded (our VMs are located behind a jumphost), copy and paste doesn’t work, and ultimately running GUI applications on our VM host’s amazing GPU with 16 MB of video RAM proved to be fairly miserable.
Might as well install text-only using a serial console instead; the Arch Linux installation happens all from the command line anyway. However, the installer .iso does not support this by default.
Installing Arch via Serial Console
According to the Arch Wiki, getting serial output is as easy as appending the following to the kernel command line from the bootloader menu:
…except doing this over KVM is tricky: by the time the serial console is launched, the boot timeout may have already elapsed, the menu might not display properly, and in general this can be quite confusing for students that are being thrown mercilessly into the deep end.
Serial by Default
We can build our own Arch Linux installer .iso with the serial output on by default. This also gives us the opportunity to customize the install environment (rather than only referencing the Arch Linux wiki in the MOTD, we can add a link to our class page, tips, etc.).
Doing so is easy with Archiso.
First, we’ll use the
releng profile. This is the same profile used for the monthly install image published on Arch Linux’s homepage.
# First, cd to wherever you'd like to work. $ cd work $ cp -vr /usr/share/archiso/configs/releng/ archlive ( ... lots of files copy ... ) $ cd archlive
Now we need to update the kernel command line in the bootloader configuration. Since our VMs are emulating a system with a BIOS, we need to edit
syslinux/archiso_sys.cfg and add/modify an
APPEND directive to the bootloader entry to add parameters to the command line:
APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% console=ttyS0,38400
console=ttyS0,38400 at the end is the important part!
If you are using/emulating an EFI system, then you will need to edit
efiboot/loader/entries/archiso-x86_64-usb.conf depending on your install method. Update the ‘options’ line:
options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% console=ttyS0,38400
You can also add files, packages, etc. to the live environment.
airootfs contains files that will be present in the installation environment. I like to edit
airootfs/etc/motd to add some useful information to the MOTD for students and put a copy of our installation guide in
airootfs/root in case they’re particularly command line-inclined.
Building the .iso
Now that the install environment is customized to our liking, we can build the iso. Assuming you are in the
archlive directory we created earlier, you can simply run:
mkarchiso -v .
…and the resulting .iso file will be stored in the
out directory once the process is finished.