Linux/Saját linux live CD készítése/Fedora telepítés

Az rpm-alapú disztribúciókban nincs debootstrap, ezért a ZFS root fájlrendszerű gép installálásához azt javasolják, hogy tegyünk fel egy minimális rendszert ext4-re vagy xfs-re, installáljuk rá a ZFS-t, azzal hozzuk létre a pool-t, és migráljuk át oda a rendszert.[1] Az ext4/xfs-est lehet USB-diszkre is installálni.[2]

Debootstrap ugyan nincs, viszont yum-mal (újabban dfn-nel) lehet chroot-ba installálni. Az így kapott rendszer nem annyira kész, mint debootstrap-pel (többet kell rajta konfigurálni), de a módszer nemcsak rpm-alapú rendszerekben, de még debianból is működik. E szócikkben ezt a módszert mutatjuk be.

Az itt leírtak felhasználhatók rpm-alapú live CD készítésére is. Ez megkönnyíti az rpm-alapú rendszerek telepítését ZFS root fájlrendszerbe, ha több ilyen rendszert akarunk készíteni.

Kiindulási helyzet

szerkesztés

Üres (virtuális) gépen vagyunk, bebootoltunk a live CD-vel, mely fel van készítve rpm-es telepítésre. (Ha mégsem, még mindig nem késő, bár a bootolás után elvész, amit csináltunk.) Bejelentkezünk ssh-val. Van egy üres diszkünk, melyen egyetlen partíciót hozunk létre a ZFS számára:

root@ZFS-live:~# cat /proc/partitions 
root@ZFS-live:~/sh# cat /proc/partitions 
major minor  #blocks  name
  11        0     271504 sr0
   8        0    8388608 sda
   8        1    8387584 sda1
   7        0     243520 loop0

A ZFS poolt és a dataseteket ugyanúgy hozzuk létre, mint a debian-alapú rendszer esetén:

NAME            USED  AVAIL  REFER  MOUNTPOINT
helyi           720K  7.69G    96K  /mnt
helyi/ROOT       96K  7.69G    96K  /mnt
helyi/tmp        96K  7.69G    96K  /mnt/tmp
helyi/var       192K  7.69G    96K  /mnt/var
helyi/var/lib    96K  7.69G    96K  /mnt/var/lib

A Fedora alaprendszer letöltése

szerkesztés
yum --installroot=/mnt install dnf       # 148 csomag

Létrehozzuk a /mnt/root/.bashrc fájlt az alábbi tartalommal, hogy a későbbiekben kevesebbet kelljen gépelni:

alias ll='ls -al'
alias dnf='dnf --releasever 28'

A fenti install nem konfigurálta a hálózatot, amire pedig szükségünk lesz chroot-ban. /mnt/etc/resolv.conf-ba:

nameserver 8.8.8.8

A szokott módon belépünk chroot-ba.

chroot-ban

szerkesztés
dnf list --installed

Ha ez nem ír ki semmit, azt jelenti, hogy a (debian) yum más verziójú adatbázist csinált, mint az installált. Így tehetjük jóvá:

dnf clean all                  # töröljük a debian által létrehozott rpm-adatbázist
rm /var/lib/rpm/* /var/lib/rpm/.dbenv.lock           # töröljük az rpm-adatbázis fájljait
dnf install dnf                # nem tud róla, hogy fenn van. 170 csomagot tesz fel (újra)

További csomagokra lesz szükségünk:

dnf install vim-minimal less dhclient passwd  # alapprogramok: 16 csomag
passwd                           # root jelszó beállítása
dnf install kernel kernel-devel  # kernel: 40 csomag

A kernel konfigurálása

szerkesztés

Rejtélyes okból a Fedora nem a /boot-ba teszi a kernelt, hanem a /boot alatt egy véletlen nevű könyvtárba, és a /lib-modules/kernel-verzió könyvtárba. Az utóbbi tartalma:

-rw-r--r--  1 root root     167 Jul 10 13:50 .vmlinuz.hmac
-rw-------  1 root root 4102839 Jul 10 13:54 System.map
-rw-r--r--  1 root root     303 Jul 10 13:55 bls.conf
lrwxrwxrwx  1 root root      39 Jul 10 13:55 build -> /usr/src/kernels/4.17.5-200.fc28.x86_64
-rw-r--r--  1 root root  196181 Jul 10 13:54 config
drwxr-xr-x 14 root root    4096 Jul 15 06:31 kernel
-rw-r--r--  1 root root 1044610 Jul 15 06:31 modules.alias
…
lrwxrwxrwx  1 root root       5 Jul 10 13:55 source -> build
drwxr-xr-x  2 root root    4096 Jul 10 13:53 updates
drwxr-xr-x  2 root root    4096 Jul 15 06:31 vdso
-rwxr-xr-x  1 root root 8540440 Jul 10 13:55 vmlinuz

A kernel helyére másolása:

VER=4.17.5-200.fc28.x86_64             # a build symlinkből
cd /lib/modules/$VER
cp -p vmlinuz /boot/vmlinuz-$VER       # kernel
cp -p config /boot/config-$VER
cp -p System.map /boot/System.map-$VER

Az initrd-vel nem törődünk, mert a ZFS miatt úgyis újra létre kell majd hozni.

A ZFS letöltése

szerkesztés

/etc/sysconfig/zfs létrehozása:

ZFS_MOUNT='yes'
ZFS_UNMOUNT='yes'
ZFS_SHARE='yes'
ZFS_UNSHARE='yes'
ZPOOL_IMPORT_ALL_VISIBLE='no'
VERBOSE_MOUNT='no'
DO_OVERLAY_MOUNTS='no'
ZPOOL_IMPORT_OPTS=""
MOUNT_EXTRA_OPTIONS=""
ZFS_DKMS_ENABLE_DEBUG='no'
ZFS_DKMS_ENABLE_DEBUG_DMU_TX='no'
ZFS_DKMS_DISABLE_STRIP='no'
ZFS_INITRD_PRE_MOUNTROOT_SLEEP='0'
ZFS_INITRD_POST_MODPROBE_SLEEP='0'
ZFS_INITRD_ADDITIONAL_DATASETS="helyi/var helyi/var/lib"

A ZFS-csomagok installálása:

dnf install http://download.zfsonlinux.org/fedora/zfs-release.fc28.noarch.rpm  # külső repo kulcsának letöltése
dnf install zfs zfs-dracut           # 182 csomag
mkinitrd -f /boot/initrd-4.17.5-200.fc28.x86_64 4.17.5-200.fc28.x86_64

A második sor lefordítja a ZFS-hez szükséges kernel-modulokat, ami eltart pár percig. A harmadik sor generálja az initrd-t, immár a ZFS-programokkal együtt.

Bootolhatóvá tétel

szerkesztés

/etc/default/grub-ba:

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Fedora`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
dnf install grub2-pc                     # 12 csomag. Mellékhatásként felteszi file-t és which-et is
cp -a /usr/lib/grub/i386-pc /boot/grub2/ # "természetesen" a grub moduljait sem teszi a helyükre
grub2-mkconfig -o /boot/grub2/grub.cfg   # grub2-pc nem csinál magától grub.cfg-t: újabb rejtély
grub2-install /dev/sda                   # diszkre írjuk a grub2 boot loadert: ettől lesz bootolható

grub2-mkconfig hibát jelez, de megcsinálja grub.cfg-t.

A /var és /var/lib könyvtár

szerkesztés

Ha az eddig készített konfigurációval bebootoljuk az új gépet, azt tapasztaljuk, hogy a /var és /var/lib könyvtár nem csatolódott fel, és a logokban az okot is megtaláljuk: nem üresek.[3] Ennek az az oka, hogy a systemd már a két könyvtár mountolása előtt indított olyan programokat, melyek írtak a két könyvtárba. Ha így jártunk, a fájlokat hiába próbáljuk letörölni, azonnal újraíródnak. (Ráadásul rendszerprocesszek megnyitották őket, azért azok befejeződése előtt egyébként sem törlődnének ténylegesen, csak a könyvtárkatalógusból.) Az egyetlen megoldás: bootolni live CD-ről, és a helyi pool importálása után törölni a fenti könyvtárakat (ügyelve rá, hogy /var-ban van egy rejtett fájl is). Ezután zfs mount -a-val ez a két könyvtár is csatolható.

Továbbra is megoldandó viszont, hogy a következő boot-nál ne járjunk így.

A fenti problémát a /etc/sysconfig/zfs fájl ZFS_INITRD_ADDITIONAL_DATASETS="helyi/var helyi/var/lib" sora lenne hivatott orvosolni az initrd futása során. Sajnálatos módon a Fedora zfs-dracut csomaggal előállított initrd-je figyelmen kívül hagyja ezt a sort, a debianban használt zfs-initramfs pedig nincs meg Fedorában.

Marad a kényszermegoldás:[4] a két könyvtár mountolását kivenni a zfs hatásköréből, és a normál mount-éba utalni, azt ui. jól kezeli az initrd.

zfs set mountpoint=legacy helyi/var
zfs set mountpoint=legacy helyi/var/lib

A mount az /etc/fstab-ot használja (ami eddig üres volt):

helyi/var               /var            zfs             defaults                0 0
helyi/var/lib           /var/lib        zfs             defaults                0 0

Ezután mount -a csatolja a két fájlrendszert.

Kilépés chroot-ból

szerkesztés

Az új gép már képes bootolni, bár néhány fontos beállítás még hátravan. Eldönthetjük, melyikkel folytassuk.

umount /proc /sys /dev
exit                                     # kilép chroot-ból
zpool export helyi                       # a ZFS lecsatolása
systemctl reboot

Bootolás után

szerkesztés

Néhány fontos beállítást el kell végeznünk, melyeket normál körülmények között a telepítő (anaconda) megtesz. Egyelőre hálózatunk sincs, így konzolról dolgozunk (vagy visszabootoljuk a live CD-t, és chroot-ban folytatjuk).

Időzóna beállítás

szerkesztés
timedatectl set-timezone Europe/Budapest
hostnamectl set-hostname hosztnév

A hálózat beállítása

szerkesztés

Ha wifi-t is akarunk használni, az alábbi konfigurálás helyett érdemes feltenni a NetworkManager csomagot.

/etc/sysconfig/network:

NETWORKING=yes

A hálókártya nevét a ip addr list paranccsal kérdezhetjük le. (Rejtély, miért jó, de nagy vívmány, hogy kiszámíthatatlan.) Feltéve, hogy a név enp0s3:

/etc/sysconfig/network-scripts/ifcfg-enp0s3:

BOOTPROTO=dhcp
ONBOOT=yes
DEVICE=enp0s3

(A fenti fájlban dhcp helyett statikus IP-cím is megadható.)

systemctl restart network      # a hálózat indítása
systemctl enable network       # hogy boot után is induljon

Hálózati szolgáltatások még nincsenek (ss -antp). Az ssh-t mindenképpen érdemes telepíteni:

dnf install openssh-server
systemctl start sshd

Ezután root jelszóval be lehet jelentkezni másik gépről.

Linuxban két logoló program használatos: a hagyományos unix loggal felfelé kompatibilis rsyslog, és a teljesen újragondolt, magyar eredetű syslog-ng. Az utóbbit javasoljuk:

dnf install syslog-ng
systemctl start syslog-ng

A csomag az audit üzeneteket írja konzol helyett /var/log/audit/audit.log-ba.

dnf install auditd
systemctl start auditd

Néhány fontos csomag

szerkesztés

Az alábbi csomagok szinte minden rendszerben kellenek:

dnf install man-db          # man parancs
dnf install lsof psmisc sudo openssh-clients

Néhány további hasznos csomag:

dnf install mlocate         # locate parancs
updatedb                    # adatbázis létrehozás locate számára
dnf install gpm             # egér karakteres konzolon
systemctl start gpm         # install utáni indítás. Boot után automatikus.
dnf install parted          # partprobe parancs
dnf install rsync           # fájlmásolás
dnf install redhat-lsb-core # szabványos linux-parancsok (pl. mailx, at, lsb_release)
  1. How to install Fedora on top of ZFS (Rudd-O.com) Fedora 16.
  2. HOWTO install EL7 (CentOS RHEL) to a Native ZFS Root Filesystem (GitHub)
  3. A ZFS csak üres könyvtárba képes mountolni.
  4. Hacsak nem akarjuk a dracut parancsot erőszakkal lecserélni initramfs-tool-ra, vagy a systemd service-k függőségeit javítani, esetleg kézzel belejavítani a dracut/zfs-dracut által előállított initrd-be.

További információk

szerkesztés