Tux der Baumeister

Willkommen bei ARGLinux, der Bauanleitung für die eigene, auf Arch Linux basierende Live-Distribution.

Es gibt die verschiedensten Gründe, eine selbst zusammengestellte Livedistribution zu erstellen. Ein bestimmter Einsatzzweck, auf spezielle Hardware angepasste Treiber oder auch einfach nur die technische Machbarkeit. Der Grund für ARGLinux ist letzteres.

Was man braucht

Ein installiertes Arch Linux, archiso und etwas Geduld.

Wie es funktioniert

Zuerst einmal wird die Grundlage geschaffen.

mkarchiso -v init

Hierdurch wird ein Grundsystem in den Arbeitsordner work installiert. Danach können nach Belieben Programme aus den Arch-Linux-Paketquellen installiert werden. Als Beispiel neben dem Grundsystem der XServer, OpenBox als Fenstermanager, Chromium als Browser, das lxterminal als Terminal-Emulator, feh zum Zeichnen des Hintergrunds, lxdm als Loginmanager für den Autologin für die Livesession und noch ein paar weitere Anwendungen und Bibliotheken.

mkarchiso -v -p "xorg-server xorg-server-utils xorg-xinit mesa xf86-video-ati xf86-video-intel xf86-video-nouveau xf86-video-vesa xf86-input-evdev xf86-input-synaptics openbox obconf obmenu oblogout lxdm lxterminal chromium feh xfce4-power-manager volumeicon ttf-droid ttf-linux-libertine tint2 networkmanager usb_modeswitch network-manager-gnome evince mplayer lxmusic gpicview leafpad mc lynx openssh gksu faenza-icon-theme openbox-themes tightvnc " install

Anschließend wechselt man in das Arbeitssystem und beginnt mit der Konfiguration.

cp /etc/resolv.conf work/airootfs/etc/resolv.conf
mkarchiso -r "bash" run

Livession-User anlegen, hier unter dem Benutzernamen "arg":

useradd -m -g users -s /bin/bash arg

Passwort für den Benutzer vergeben:

passwd arg

Da die Livesession ohne Passwort nutzbar sein und sudo konfiguriert sein soll, noch den entsprechenden Eintrag in die sudoers.

echo "arg ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Zeitzone festlegen, hier Deutschland:

ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime

Hostname festlegen:

echo "arglinux" > /etc/hostname

Zeichenkodierung festlegen, hier Deutsch, UTF-8:

echo 'LANG="de_DE.UTF-8"' > /etc/locale.conf
locale-gen

Keymap festlegen, hier: Deutsche Tastaturbelegung:

echo "KEYMAP=de-latin1" > /etc/vconsole.conf

Beim Systemstart per systemd zu startende Dienste festlegen, im Beispiel den Networkmanager, den Modemmanager und den Displaymanager LXDM.

ln -s '/usr/lib/systemd/system/NetworkManager.service' '/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service'
ln -s '/usr/lib/systemd/system/NetworkManager.service' '/etc/systemd/system/multi-user.target.wants/NetworkManager.service'
ln -s '/usr/lib/systemd/system/ModemManager.service' '/etc/systemd/system/dbus-org.freedesktop.ModemManager.service'
ln -s '/usr/lib/systemd/system/ModemManager.service' '/etc/systemd/system/multi-user.target.wants/ModemManager.service'
ln -s '/usr/lib/systemd/system/lxdm.service' '/etc/systemd/system/display-manager.service'

Pacman gebrauchsfähig machen:

echo "Server = http://ftp.tu-chemnitz.de/pub/linux/archlinux/$repo/os/$arch" > /etc/pacman.d/mirrorlist
haveged &
pacman -Syy
pacman-key --init
pacman-key --populate archlinux
pkill haveged

Automatisch den Livesession-User einloggen

echo "autologin=arg" >> /etc/lxdm/lxdm.conf

Zu startende Session angeben, hier OpenBox:

echo "session=/usr/bin/openbox-session" >> /etc/lxdm/lxdm.conf"

Programme, die zusammen mit OpenBox gestartet werden sollen, in die /etc/xdg/openbox/autostart eintragen:

feh --bg-scale /usr/share/wallpapers/wallpaper.png &
tint2 &
nm-applet &
volumeicon &
xfce4-power-manager &

Den chroot verlassen.

exit

Im nächsten Schritt die hooks vorbereiten.

cp /usr/lib/initcpio/hooks/archiso work/airootfs/usr/lib/initcpio/hooks
				
cp /usr/lib/initcpio/install/archiso work/airootfs/usr/lib/initcpio/install
				

Die Datei work/airootfs/etc/mkinitcpio-archiso.conf erstellen und mit folgendem Inhalt bestücken:

HOOKS="base udev archiso modconf block filesystems usbinput"
COMPRESSION="xz"

Das Verzeichnis für das Kernelimage anlegen und den Kernel hineinschreiben:

mkdir work/airootfs/boot/x86_64
mkarchiso -r "mkinitcpio -c /etc/mkinitcpio-archiso.conf -k /boot/vmlinuz-linux -g /boot/x86_64/archiso.img" run

mkdir -p work/iso/arch/boot/x86_64
mv work/airootfs/boot/vmlinuz-linux work/iso/arch/boot/x86_64/vmlinuz
mv work/airootfs/boot/x86_64/archiso.img work/iso/arch/boot/x86_64/archiso.img
cp work/airootfs/usr/lib/syslinux/menu.c32 work/iso/arch/boot/syslinux/
mkdir work/iso/isolinux
cp work/airootfs/usr/lib/syslinux/isolinux.bin work/iso/isolinux/
cp work/airootfs/usr/lib/syslinux/isohdpfx.bin work/iso/isolinux/

Das Verzeichnis für den Bootloader erstellen:

mkdir -p work/iso/arch/boot/syslinux

Die Datei work/iso/arch/boot/syslinux/syslinux.cfg anlegen und mit folgenden Inhalt befüllen:

DEFAULT menu.c32
PROMPT 0
MENU TITLE ARGLinux
TIMEOUT 300

LABEL arch
MENU LABEL ARGLinux
LINUX /arch/boot/x86_64/vmlinuz
INITRD /arch/boot/x86_64/archiso.img
APPEND archisolabel=ARGLinux_0.8.15

ONTIMEOUT arch

Anschließend die Datei work/iso/isolinux/isolinux.cfg mit folgenden Inhalt füllen:

DEFAULT loadconfig

LABEL loadconfig
  CONFIG /arch/boot/syslinux/syslinux.cfg
  APPEND /arch/boot/syslinux/

Abschließend noch die aitab erstellen:

echo "airootfs      /                     x86_64     xz          ext4       50%" > work/iso/arch/aitab 

Das Kernelmodul loop laden.

modprobe loop

Die Erstellung des ISO-Images vorbereiten:

mkarchiso -v prepare

Nachdem die Vorbereitung abgeschlossen ist, das ISO-Image erstellen.

mkarchiso -v -L "ARGLinux_0.8.15" iso "ARGLinux_0.8.15.iso"

Die erstelle ISO-Datei ist danach im Ordner out zu finden.