ZFS alapú jail
Minden jail alapja egy olyan FreeBSD alaprendszer, amelyhez a későbbiekben nem igazán nyúlunk hozzá, leszámítva a biztonsági frissítéseket, illetve bosszantó hibák kijavítását. Mivel a hasonlóság nagyfokú, azért jól ki tudjuk használni a ZFS fájlrendszer klónozó képességét:
[root@freebsd:~]$ zfs create dpool/jails [root@freebsd:~]$ zfs set mountpoint=/jails dpool/jails [root@freebsd:~]$ zfs create dpool/jails/template [root@freebsd:~]$ df -h Filesystem Size Used Avail Capacity Mounted on [...] dpool/jails 14G 128K 14G 0% /jails dpool/jails/template 14G 128K 14G 0% /jails/template
Mint látni, létrehoztunk egy template jail könyvtárat, mégpedig a jails fájlrendszer alá, ide a klasszikus módszerekkel beleteszünk egy alaprendszert:
[root@freebsd:~]$ cd /usr/src [root@freebsd:/usr/src]$ make world DESTDIR=/jails/template/ -------------------------------------------------------------- >>> make world started on Sat Aug 9 00:19:06 CEST 2008 -------------------------------------------------------------- [...] -------------------------------------------------------------- >>> make world completed on Sat Aug 9 01:44:34 CEST 2008 (started Sat Aug 9 00:19:06 CEST 2008) -------------------------------------------------------------- [root@freebsd:/usr/src]$ make distribution DESTDIR=/jails/template/ [...] [root@freebsd:/usr/src]$ df -h Filesystem Size Used Avail Capacity Mounted on [...] dpool/jails 14G 0B 14G 0% /jails dpool/jails/template 14G 174M 14G 1% /jails/template [root@freebsd:/usr/src]$ cp /etc/resolv.conf /jails/template/etc/ [root@freebsd:/usr/src]$ mkdir /jails/template/usr/ports [root@freebsd:/usr/src]$ cp /etc/make.conf /jails/template/etc/ [root@freebsd:/usr/src]$ touch /jails/template/etc/fstab [root@freebsd:/usr/src]$ cp /etc/profile /jails/template/etc/ [root@freebsd:/usr/src]$ cp /etc/login.conf /jails/template/etc/ [root@freebsd:/usr/src]$ echo "keymap=\"hu.iso2.101keys\" >network_interfaces=\"\" >rpcbind_enable=\"NO\"" >/jails/template/etc/rc.conf
Alapvetően kész vagyunk, elkészült az első jail fájlrendszere, amelyet nem fogunk használni, hanem egyszerűen klónozni fogjuk ezt, de előtte megtöltjük kényelmes csomagokkal, amelyeket már megismertünk az alaprendszer használata közben. Ehhez fel kell csatolnunk a ports fájlrendszert, illetve ennek egy klónját:
[root@freebsd:/usr/src]$ zfs create dpool/jails/ports [root@freebsd:/usr/src]$ zfs create dpool/jails/ports/template [root@freebsd:/usr/src]$ zfs set compression=gzip-9 dpool/jails/ports/template [root@freebsd:/usr/src]$ portsnap extract -p /jails/ports/template /jails/ports/template/.cvsignore /jails/ports/template/CHANGES [...] /jails/ports/template/x11/yelp/ /jails/ports/template/x11/zenity/ Building new INDEX files... done. [root@freebsd:/usr/src]$ zfs set mountpoint=/jails/template/usr/ports dpool/jails/ports/template
A jail elindítása egyszerű dolog, a jail parancsot tudjuk használni, s értelemszerűen a megfelelő paramétereket (jail könyvtára, a jail host neve, a jail IP címe illetve a használandó shell):
[root@freebsd:/usr/src]$ jail /jails/template/ template 192.168.195.128 /bin/csh template# df -h Filesystem Size Used Avail Capacity Mounted on dpool/jails/template 14G 174M 14G 1% / template# ps aux USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND root 25760 0,0 0,4 4504 1916 p0 SJ 11:42de 0:00,10 /bin/csh root 25793 0,0 0,2 3244 772 p0 R+J 11:44de 0:00,01 ps aux
Láthatjuk, hogy csak magunk vagyunk, próbaképpen telepítsünk fel egy portupgrade csomagot:
template# cd /usr/ports/ports-mgmt/portupgrade template# make && make install && make clean [...] ===> Registering installation for portupgrade-2.4.6,2 ===> Cleaning for ruby-1.8.6.111_4,1 ===> Cleaning for ruby18-bdb-0.6.4 ===> Cleaning for db41-4.1.25_4 ===> Cleaning for portupgrade-2.4.6,2 template# df -h Filesystem Size Used Avail Capacity Mounted on dpool/jails/template 14G 202M 14G 1% /
Tegyünk fel néhány fontosabb csomagot, ezek nem fognak túl sok helyet elfoglalni, hiszen ezeket is klónozzuk majd:
template# portinstall -i mc bash template# portinstall -i mc bash ---> Session started at: Sat, 09 Aug 2008 12:55:59 +0000 Install 'misc/mc'? [yes] [Gathering depends for misc/mc ............................... done] Install 'shells/bash'? [yes] [Gathering depends for shells/bash . done] [...] ---> Packages processed: 15 done, 0 ignored, 0 skipped and 0 failed ---> Session ended at: Sat, 09 Aug 2008 13:39:02 +0000 (consumed 00:43:03) template# df -h Filesystem Size Used Avail Capacity Mounted on dpool/jails/template 14G 412M 13G 3% / template# exit
Picit felhízott a jail, amit részben az okoz, hogy 15 csomagot telepítettünk fel (amelyek jó rész úgyis kell majd az egyedi csomagok fordításához), másrészt az okoz, hogy a /tmp alá linkeltük a /usr/ports/distfiles könyvtárat, érdemes pár dolgot kitakarítani, mielőtt klónozzuk a jail fájlrendszerét:
[root@freebsd:~]$ rm -Rf /jails/template/tmp/* [root@freebsd:~]$ rm /jails/template/root/.history [root@freebsd:~]$ rm /jails/template/.cshrc [root@freebsd:~]$ rm /jails/template/. [root@freebsd:~]$ rm /jails/template/.profile