posts/archiso-portable.md: added
This commit is contained in:
parent
2e93eaaee9
commit
f06869c69a
81
posts/archiso-portable.md
Normal file
81
posts/archiso-portable.md
Normal file
@ -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)
|
BIN
public/img/archiso-portable-desktop.jpg
Normal file
BIN
public/img/archiso-portable-desktop.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 54 KiB |
Loading…
Reference in New Issue
Block a user