Archiso
Related articles
Archiso is a small set of bash scripts capable of building fully functional Arch Linux based live CD and USB images. It is the tool used to generate the official CD/USB images, however it is a very generic tool and it could potentially be used to generate anything from rescue systems, install disks, to special interest live CD/DVD/USB systems, and who knows what else. Simply put, if it involves Arch on a shiny coaster, it can do it. The heart and soul of Archiso is mkarchiso. All of its options are documented in its usage output, so its direct usage won't be covered here. Instead, this wiki article will act as a guide for rolling your own live media in no time!
Contents
- 1 Setup
- 2 Configure our live medium
- 3 Build the ISO
- 4 Using the ISO
-
5 Installation without Internet access
- 5.1 Install the archiso to the new root
-
5.2 Chroot and configure the base system
- 5.2.1 Restore the configuration of journald
- 5.2.2 Reset the pam's configuration
- 5.2.3 Remove special udev rule
- 5.2.4 Disable and remove the services created by archiso
- 5.2.5 Remove special scripts of the Live environment
- 5.2.6 Set the password of arch
- 5.2.7 Create an initial ramdisk environment
- 5.2.8 Normal configuration
- 6 See also
Setup
Before we begin, we need to install archiso from the official repositories. Alternatively, archiso-git can be found in the AUR.
Create a directory to work within, this is where all the modifications to the live image will take place: ~/archlive
should do fine.
$ mkdir ~/archlive
The archiso scripts that were installed to the host system earlier now need to be copied over into the newly created directory you will be working within.
Archiso comes with two "profiles": releng
and baseline
.
If you wish to create a fully customised live version of Arch Linux, pre-installed with all your favourite programs and configurations, use releng.
If you just want to create the most basic live medium, with no pre-installed packages and a minimalistic configuration, use baseline.
So, depending on your needs, execute the following, replacing PROFILE
with either releng
or baseline
.
# cp -r /usr/share/archiso/configs/PROFILE/ ~/archlive
If you are using the releng
profile to make a fully customised image, then you can proceed onto #Configure our live medium.
If you are using the baseline
profile to create a bare image, then you won't be needing to do any customisations and can proceed onto #Build the ISO.
Configure our live medium
This section details configuring the image you will be creating, allowing you to define the packages and configurations you want your live image to contain.
Change into the directory we created earlier (~/archlive/releng/ if you have been following this guide), you will see a number of files and directories; we are only concerned with a few of these, mainly: packages.* - this is where you list, line by line, the packages you want to have installed, and the airootfs directory - this directory acts as an overlay and it is where you make all the customisations.
Generally, every administrative task that you would normally do after a fresh install except for package installation can be scripted into ~/archlive/releng/airootfs/root/customize-airootfs.sh
. It has to be written from the perspective of the new environment, so / in the script means the root of the live-iso which is created.
Installing packages
You will 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. This is great for special interest live CDs, just specify packages you want in packages.both and bake the image. The packages.i686 and packages.x86_64 files allow you to install software on just 32bit or 64bit, respectively.
I recommend installing "rsync" if you wish to install the system later on with no internet connection or skipping downloading it all over again. (#Installation)
Custom local repository
You can also create a custom local repository for the purpose of preparing custom packages or packages from AUR/ABS. When doing so with packages for both architectures, you should follow a certain directory order to not run into problems.
For instance:
-
~/customrepo
-
~/customrepo/x86_64
- ~/customrepo/x86_64/foo-x86_64.pkg.tar.xz
- ~/customrepo/x86_64/customrepo.db.tar.gz
- ~/customrepo/x86_64/customrepo.db (symlink created by
repo-add
)
-
~/customrepo/i686
- ~/customrepo/i686/foo-i686.pkg.tar.xz
- ~/customrepo/i686/customrepo.db.tar.gz
- ~/customrepo/i686/customrepo.db (symlink created by
repo-add
)
-
You can then add your repository by putting the following into ~/archlive/releng/pacman.conf
, above the other repository entries (for top priority):
# custom repository [customrepo] SigLevel = Optional TrustAll Server = file:///home/user/customrepo/$arch
So, the build scripts just look for the appropriate packages.
If this is not the case you will be running into error messages similar to this:
error: failed to prepare transaction (package architecture is not valid) :: package foo-i686 does not have a valid architecture
Avoid installation of packages belonging to base group
By, default /usr/bin/mkarchiso
, a script which is used by ~/archlive/releng/build.sh
, calls one of the arch-install-scripts named pacstrap
without the -i
flag, which causes Pacman to not wait for user input during the installation process.
When blacklisting base group packages by adding them to the IgnorePkg
line in ~/archlive/releng/pacman.conf
, Pacman asks if they still should be installed, which means they will when user input is bypassed. To get rid of these packages there are several options:
- Dirty: Add the
-i
flag to each line callingpacstrap
in/usr/bin/mkarchiso
.
- Clean: Create a copy of
/usr/bin/mkarchiso
in which you add the flag and adapt~/archlive/releng/build.sh
so that it calls the modified version of the mkarchiso script.
- Advanced: Create a function for
~/archlive/releng/build.sh
which explicitly removes the packages after the base installation. This would leave you the comfort of not having to type enter so much during the installation process.
Installing packages from multilib
To install packages from the multilib repository you have to create two pacman configuration files: one for x86_64 and one for i686. Copy pacman.conf
to pacmanx86_64.conf
and pacmani686.conf
. Uncomment the following lines to enable multilib in pacmanx86_64.conf
:
pacmanx86_64.conf
[multilib] SigLevel = PackageRequired Include = /etc/pacman.d/mirrorlist
Then edit build.sh
with an editor. Replace the following lines:
build.sh
run_once make_pacman_conf # Do all stuff for each airootfs for arch in i686 x86_64; do run_once make_basefs run_once make_packages run_once make_setup_mkinitcpio run_once make_customize_airootfs done
with:
build.sh
cp pacmanx86_64.conf pacman.conf run_once make_pacman_conf # Do all stuff for each airootfs for arch in x86_64; do run_once make_basefs run_once make_packages run_once make_setup_mkinitcpio run_once make_customize_airootfs done echo make_pacman_conf i686 cp -v pacman32.conf pacman.conf cp -v pacman32.conf work/pacman.conf run_once make_pacman_conf for arch in i686; do run_once make_basefs run_once make_packages run_once make_setup_mkinitcpio run_once make_customize_airootfs done
In this way packages for x86_64 and i686 will be installed with their own pacman configuration file.
Adding a user
User management can be handled the same way as during the normal installation process, except you put your commands scripted into ~/archlive/releng/airootfs/root/customize_airootfs.sh
. For further information have a look at User management.
Adding files to image
The airootfs directory acts as an overlay, think of it as root directory '/' on your current system, so any files you place within this directory will be copied over on boot-up.
So if you have a set of iptables scripts on your current system you want to be used on you live image, copy them over as such:
# cp -r /etc/iptables ~/archlive/releng/airootfs/etc
Placing files in the users home directory is a little different. Do not place them within airootfs/home, but instead create a skel directory within airootfs/ and place them there. We will then add the relevant commands to the customize_root_image.sh which we are going to use to copy them over on boot and sort out the permissions.
First, create the skel directory; making sure you are within ~/archlive/releng/airootfs/etc directory (if this is where you are working from):
# cd ~/archlive/releng/airootfs/etc && mkdir skel
Now copy the 'home' files to the skel directory, again doing everything as root! e.g for .bashrc.
# cp ~/.bashrc ~/archlive/releng/airootfs/etc/skel/
When ~/archlive/releng/airootfs/root/customize-airootfs.sh
is executed and a new user is created, the files from the skel directory will automatically be copied over to the new home folder, permissions set right.
Boot Loader
The default file should work fine, so you should not need to touch it.
Due to the modular nature of isolinux, you are able to use lots of addons since all *.c32 files are copied and available to you. Take a look at the official syslinux site and the archiso git repo. Using said addons, it is possible to make visually attractive and complex menus. See here.
Login manager
Starting X at boot is done by enabling your login manager's systemd service. If you know which .service file needs a softlink: Great. If not, you can easily find out in case you're using the same program on the system you build your iso on. Just use
# systemctl disable nameofyourloginmanager
to temporarily turn it off. Next type the same command again and replace "disable" with "enable" to activate it again. Systemctl prints information about softlink it creates. Now change to ~/archiso/releng/airootfs/etc/systemd/system and create the same softlink there.
An example (make sure you're either in ~/archiso/releng/airootfs/etc/systemd/system or add it to the command):
# ln -s /usr/lib/systemd/system/lxdm.service display-manager.service
This will enable LXDM at system start on your live system.
Changing Automatic Login
The configuration for getty's automatic login is located under airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf.
You can modify this file to change the auto login user:
[Service] ExecStart= ExecStart=-/sbin/agetty --autologin isouser --noclear %I 38400 linux
Or remove it altogether to disable auto login.
Build the ISO
Now you are ready to turn your files into the .iso which you can then burn to CD or USB: Inside the directory you are working with, either ~/archlive/releng, or ~/archlive/baseline, execute:
# ./build.sh -v
The script will now download and install the packages you specified to work/*/airootfs, create the kernel and init images, apply your customizations and finally build the iso into out/.
Rebuild the ISO
If you want to rebuild your iso again after a few modifications, you have to remove lock files in the work directory:
# rm -v work/build.make_*
Using the ISO
CD
Just burn the iso to a cd. You can follow CD Burning as you wish.
USB
See USB flash installation media.
GRUB
See Multiboot_USB_drive#Arch_Linux.
grub4dos
Grub4dos is a utility that can be used to create multiboot usbs, able to boot multiple linux distros from the same usb stick.
To boot the generated system on a usb with grub4dos already installed, loop mount the ISO and copy the entire /arch
directory to the root of the usb.
Then edit the menu.lst
file from the grub4dos (it must be on the usb root) and add these lines:
title Archlinux x86_64 kernel /arch/boot/x86_64/vmlinuz archisolabel=<your usb label> initrd /arch/boot/x86_64/archiso.img
Change the x86_64
part as necessary and put your real usb label there.
Installation without Internet access
If you wish to install the archiso(e.g. the offical monthly release) as it is without an Internet connection, or, if you don't want to download the packages you want again:
First, please follow the beginners' guide and skip some parts(like #Establish_an_internet_connection) until the #Install_the_base_system step.
Install the archiso to the new root
Instead of installing the packages with pacstrap
(as it downloads every packages from remote repository and we have no Internet access now), please copy everything in the Live environment to the new root:
# time (cp -ax /{usr,bin,lib,lib64,sbin,etc,home,opt,root,srv,var} /mnt)
Then, create some directories and copy the kernel image to the new root, in order to keep the integrity of the new system:
# mkdir -vm755 /mnt/{boot,dev,run,mnt} # cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux # mkdir -vm1777 /mnt/tmp # mkdir -vm555 /mnt/{sys,proc}
After that, please generate a fstab as described in Beginners' guide#Generate_an_fstab.
Chroot and configure the base system
Next, chroot into your newly installed system:
# arch-chroot /mnt /bin/bash
Please note that before you configure the locale,keymap,etc,... there are something necessary to do, in order to get rid of the trace of a Live environment(in other words, the customization of archiso which does not fit a non-Live environment).
Restore the configuration of journald
This customization of archiso will lead to storing the system journal in RAM, it means that the journal will not available after reboot:
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf
Reset the pam's configuration
This configuration of pam perhaps break the security of your new system, it's recommend to use the default configuration:
# nano /etc/pam.d/su
#%PAM-1.0 auth sufficient pam_rootok.so # Uncomment the following line to implicitly trust users in the "wheel" group. #auth sufficient pam_wheel.so trust use_uid # Uncomment the following line to require a user to be in the "wheel" group. #auth required pam_wheel.so use_uid auth required pam_unix.so account required pam_unix.so session required pam_unix.so
Remove special udev rule
This rule of udev starts the dhcpcd automatically if there are any wired network interfaces.
# rm /etc/udev/rules.d/81-dhcpcd.rules
Disable and remove the services created by archiso
Some service files are created for the Live environment, please disable the services and remove the file as they are unnecessary for the new system:
# systemctl disable pacman-init.service choose-mirror.service # rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d} # rm /etc/systemd/scripts/choose-mirror
Remove special scripts of the Live environment
There are some scripts installed in the live system by archiso scripts, which are unnecessary for the new system:
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf # rm /root/{.automated_script.sh,.zlogin} # rm /etc/sudoers.d/g_wheel # rm /etc/mkinitcpio-archiso.conf # rm -r /etc/initcpio
Set the password of arch
The customization script created a normal user called arch
for the Live environment. You can set a passwd for user arch
in order to login with this username(there is no passwd for arch
by default):
# passwd arch
Or, if you don't want to use this username, please remove this user:
# userdel -r arch
Create an initial ramdisk environment
Please create an initial ramdisk as described in Beginners'_guide#Create_an_initial_ramdisk_environment.
Normal configuration
After all of these, now you can follow the beginners' guide and finish the installation.