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
Hosztnév
[szerkesztés]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.
Logolás
[szerkesztés]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
Audit
[szerkesztés]A csomag az audit üzeneteket írja konzol helyett /var/log/audit/audit.log-ba.
dnf install auditd
systemctl start auditd
Swap
[szerkesztés]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)
Jegyzetek
[szerkesztés]- ↑ How to install Fedora on top of ZFS (Rudd-O.com) Fedora 16.
- ↑ HOWTO install EL7 (CentOS RHEL) to a Native ZFS Root Filesystem (GitHub)
- ↑ A ZFS csak üres könyvtárba képes mountolni.
- ↑ 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.
Forrás
[szerkesztés]- Bootstrapping Centos or Fedora from Debian or Ubuntu (Lucas Nussbaum’s Blog)
- ZFS on Fedora (GitHub)
- Fedora Draft Documentation (Fedora)