Archiso is a small set of bash scripts that is capable of building fully functional Arch Linux based live CDs. It is a very generic tool, so it could potentially be used to generate anything from rescue systems, to install disks, to special interest live CD systems, and who knows what else. Simply put, if it involves Arch on a shiny coaster, it can do it.
You have two options to get Archiso:
- Get the archiso-git AUR package
- Get it from the Git repo yourself:
$ git clone git://projects.archlinux.org/archiso.git $ cd archiso/archiso $ sudo make install $ sudo pacman -S mkinitcpio cdrkit squashfs-tools devtools aufs2-util
Note: As of the current date, the archiso in the official repos is not up-to-date enough to follow this guide and is therefore not recommended.
The heart and soul of Archiso is mkarchiso. All of its options are documented in its usage output, so we won't go into detail here. Instead, let's go over the general process.
The first thing you should probably do is create a directory to work in, and cd to it. This'll help keep things organized. Next, you'll want to create a mkinitcpio config file that suits your needs. Typically this means modifying whatever hooks you want.
$ mkdir my-archiso && cd my-archiso $ vim mkinitcpio.conf
A typical set of hooks for archiso looks something like this:
HOOKS="base udev boot-cd archiso ide scsi sata usb fw filesystems"
If you're creating an image for a bootable usb device, you'll want to use boot-usb instead of boot-cd. It's probably worth mentioning that hardware autodetection and things of that nature do not belong here. Only what's necessary to get the system on its feet, and out of the initcpio really belong here, fancier stuff can be done on the booted system anyway.
You'll also want to create a list of packages you want installed on your live CD system. A file full of package names, one-per-line, is the format for this. Typically you'll want BASE and a kernel as a bare minimum, but you're free to install whatever else you want. This is great for special interest live CDs, just specify packages you want and gogogo.
$ vim packages.list
You may want to put some of the following into there:
base bash coreutils cpio dhcpcd dnsutils file fuse kernel26 vi
For some suggestions for different configurations, see the included examples. Remember that you can put ANY packages in there as long as they are in the repositories. You can also add a local repository for the purpose of preparing slightly modified packages. Just add your local repository at the first position of your build machine's pacman.conf and you are good to go!
The last item of importance is what are called addons. Basically this means any other crap you might want to include on your live CD, including binary package repos, special configurations, random files, we don't know, be creative. mkarchiso expects them all to be put in a single directory, with an fstab-like config file. Currently two types of addons are supported, squashfs images that get layered onto the root union, and plain directories which can be bind mounted anywhere under the root.
If you want to add a squashfs union layer: - Set up whatever you want to include in a separate directory someplace,
as if that directory was / . Then run mksquahfs on it, and copy the created image to your addons directory.
- Add an entry to your addons config file (which must be named 'config',
by the way). Typical squashfs entries look like this: live_overlay.sqfs / squashfs Where the first component is the path to the image relative to your addons directory, the second is the mountpoint (irrelevant for squashfs, they will all get layered at /) and of course the third component is the type.
- Be aware that the order of entries on the config matters! Entries will
be layered on top of one another, later entries are mounted _UNDER_ earlier entries (an unfortunate counterintuitive result of the way we have to mount the unions).
If you want to add plain directories to bind mount: - Set up your directory somewhere, and copy it to your addon directory. - Add an entry to your addons config file, example entry:
core /packages bind where the first component is the path to the directory relative to your addons directory, the second component is where you'd like it bind-mounted relative to the live CD's root filesystem, and the last component is the type.