From f06869c69a018e382df020a4ff611103c974032e Mon Sep 17 00:00:00 2001 From: dogeystamp Date: Wed, 7 Jun 2023 21:40:43 -0400 Subject: [PATCH] posts/archiso-portable.md: added --- posts/archiso-portable.md | 81 ++++++++++++++++++++++++ public/img/archiso-portable-desktop.jpg | Bin 0 -> 55522 bytes 2 files changed, 81 insertions(+) create mode 100644 posts/archiso-portable.md create mode 100644 public/img/archiso-portable-desktop.jpg diff --git a/posts/archiso-portable.md b/posts/archiso-portable.md new file mode 100644 index 0000000..ca4c5f5 --- /dev/null +++ b/posts/archiso-portable.md @@ -0,0 +1,81 @@ +# making custom arch linux live ISOs without arch linux + +2023-06-07 + +If you've ever installed any Linux distro, you probably had to do it using a live install environment. +Once you flashed the USB drive, you could boot off it and you'd be greeted with a Linux system. + +I've always found it fascinating that you could pack the entire OS onto a stick and bring it around with you. +However, something even more enticing is being able to customize that system. + +This is where archiso comes in handy: +it's a tool that can be used to generate ISOs with Arch Linux on them. +You can flash these ISOs to USB drives to make portable Arch Linux systems. +archiso is also incredibly flexible, and you can customize it very well. +In fact, it's the tool that Arch's maintainers use to generate the official live installation images. + +The one issue I have, though is that you need to be running Arch Linux to run archiso: + +> Currently creating the images is only supported on Arch Linux but may work on other operating systems as well. + +As I run another distro on my laptop, I could not use archiso. +So, in the last few days, I set out to make archiso run on my system. +The final results of this endeavour can be found [on GitHub](https://github.com/dogeystamp/archiso-portable). + +## pacstrap + +One of the essential dependencies of archiso is pacstrap. +Essentially, what pacstrap does is that it creates a small Arch Linux system in a folder. +This is the bootstrapped root filesystem (root FS). +Later, archiso takes that folder, compresses it, and puts it in the final ISO file. + +The problem is that pacstrap needs your host system to be Arch Linux so that it can bootstrap a new Arch system. +In fact, if you look at the [source code](https://github.com/archlinux/arch-install-scripts/blob/master/pacstrap.in), +you'll find that the host system uses its own pacman to install everything to the bootstrapped system: + + pacman -r "$newroot" "${pacman_args[@]}" + +pacstrap only has to create a few directories, but the rest is done by installing the `base` metapackage through pacman. +`base` includes both `filesystem` and `pacman`. +As far as I understand, this means that all the important files in an Arch Linux system come from installing the `filesystem` package. +Once the host pacman installs `base` in the bootstrapped system, we have a full Arch Linux root FS, including its own pacman. + +However, since I do not have pacman to bootstrap this way, I needed another way to obtain an Arch root FS. +I came across [archstrap](https://github.com/wick3dr0se/archstrap), which does exactly that. +archstrap downloads a pre-built Arch Linux root FS as a tarball, then installs packages to it just like regular pacstrap. +Cleverly, this script removes the need for arch-chroot on the host system: +it runs the arch-chroot inside the downloaded Arch filesystem. + +Somewhat annoyingly though, archstrap does not operate exactly the same way pacstrap does: +I had to patch it to get it working with archiso. +Also, I patched archiso itself to remove some flags archstrap doesn't parse. + +## other changes + +The other main dependency missing in archiso is pacman, Arch's package manager. +Since we aren't running Arch, we of course do not have it on our host system. +However, the bootstrapped Arch root FS we downloaded earlier does have pacman inside of it. +Therefore, I replaced all invocations of pacman inside archiso with invocations of the bootstrapped pacman. + +archiso also includes a small script to test your generated ISOs in a QEMU virtual machine. +I added a check to it that switches some hard-coded paths. +In Arch, the path is `/usr/share/edk2-ovmf/x64`, +but on my system it was at `/usr/share/edk2-ovmf`. + +## conclusion + +It turns out that modifying open source software isn't that difficult. +Given that archiso's maintainers wrote very structured and organized code, +it's surprisingly easy to navigate around the script to patch things. + +Of course, I definitely ruined the quality of archiso by doing this: +there's missing features and everything is untested and unlinted. +Then again, this isn't going to be production-grade software; +I just wanted to make a custom portable Arch USB while using Gentoo on my PC. + +Anyways, if you want to make your own custom Arch USBs but don't have Arch, +check out [archiso-portable](https://github.com/dogeystamp/archiso-portable) on GitHub. + +As a bonus, here's a screenshot of the Arch Linux live environment I made earlier on a Gentoo system: + +![preview](/public/img/archiso-portable-desktop.jpg) diff --git a/public/img/archiso-portable-desktop.jpg b/public/img/archiso-portable-desktop.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d8fd1779696748c6f7d91a1b56ea801153276822 GIT binary patch literal 55522 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