5.2.1. 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 bpool/jails [root@freebsd:~]$ zfs create bpool/jails/v7.1.0 [root@freebsd:~]$ zfs create bpool/jails/v7.1.0/template [root@freebsd:~]$ zfs set compression=gzip-9 bpool/jails/v7.1.0/template [root@freebsd:~]$ df -h Filesystem Size Used Avail Capacity Mounted on [...] bpool/jails 3.5G 0B 3.5G 0% /bpool/jails bpool/jails/v7.1.0 3.5G 0B 3.5G 0% /bpool/jails/v7.1.0 bpool/jails/v7.1.0/template 3.5G 0B 3.5G 0% /bpool/jails/v7.1.0/template
Mint látni, létrehoztunk egy template jail könyvtárat, mégpedig a jails fájlrendszer alá, a két fájlrendszer közé pedig egy v7.1.0 fájlrendszert, amely a jail verziója. A verzió mondja meg, hogy az adott jail 7.1-es alaprendszerből készült, és az általunk "kiadott" első verzió. A template fájlrendszerbe a klasszikus módszerekkel beleteszünk egy alaprendszert:
[root@freebsd:~]$ cd /usr/src [root@freebsd:/usr/src]$ make world DESTDIR=/bpool/jails/v7.1.0/template -------------------------------------------------------------- >>> make world started on Wed Jan 14 11:54:34 CET 2009 -------------------------------------------------------------- -------------------------------------------------------------- >>> World build started on Wed Jan 14 11:54:35 CET 2009 -------------------------------------------------------------- [...] -------------------------------------------------------------- >>> make world completed on Wed Jan 14 13:16:22 CET 2009 (started Wed Jan 14 11:54:34 CET 2009) -------------------------------------------------------------- [root@freebsd:/usr/src]$ make distribution DESTDIR=/bpool/jails/v7.1.0/template [...] [root@freebsd:/usr/src]$ df -h Filesystem Size Used Avail Capacity Mounted on [...] bpool/jails/v7.1.0 3.5G 0B 3.5G 0% /bpool/jails/v7.1.0 bpool/jails/v7.1.0/template 3.5G 94M 3.5G 3% /bpool/jails/v7.1.0/template [root@freebsd:/usr/src]$ cp /etc/login.conf /bpool/jails/v7.1.0/template/etc/ [root@freebsd:/usr/src]$ cp /etc/make.conf /bpool/jails/v7.1.0/template/etc/ [root@freebsd:/usr/src]$ cp /etc/profile /bpool/jails/v7.1.0/template/etc/ [root@freebsd:/usr/src]$ cp /etc/resolv.conf /bpool/jails/v7.1.0/template/etc/ [root@freebsd:/usr/src]$ touch /bpool/jails/v7.1.0/template/etc/fstab [root@freebsd:/usr/src]$ mkdir /bpool/jails/v7.1.0/template/usr/ports [root@freebsd:/usr/src]$ echo 'keymap="hu.iso2.101keys"' >/bpool/jails/v7.1.0/template/etc/rc.conf [root@freebsd:/usr/src]$ echo 'network_interfaces=""' >>/bpool/jails/v7.1.0/template/etc/rc.conf [root@freebsd:/usr/src]$ echo 'rpcbind_enable="NO"' >>/bpool/jails/v7.1.0/template/etc/rc.conf [root@freebsd:/usr/src]$ echo '' >>/bpool/jails/v7.1.0/template/etc/rc.conf [root@freebsd:/usr/src]$ echo 'syslogd_enable="NO"' >>/bpool/jails/v7.1.0/template/etc/rc.conf [root@freebsd:/usr/src]$ echo 'syslog_ng_enable="YES"' >>/bpool/jails/v7.1.0/template/etc/rc.conf [root@freebsd:/usr/src]$ echo 'sendmail_enable="NO"' >>/bpool/jails/v7.1.0/template/etc/rc.conf [root@freebsd:/usr/src]$ echo 'munin_node_enable="YES"' >>/bpool/jails/v7.1.0/template/etc/rc.conf [root@freebsd:/usr/src]$ echo '' >>/bpool/jails/v7.1.0/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, amelyet előtte célszerű frissíteni:
[root@freebsd:/usr/src]$ zfs create bpool/jails/ports [root@freebsd:/usr/src]$ zfs set compression=gzip-9 bpool/jails/ports [root@freebsd:/usr/src]$ portsnap fetch extract -p /bpool/jails/ports/ Looking up portsnap.FreeBSD.org mirrors... 2 mirrors found. Fetching snapshot tag from portsnap1.FreeBSD.org... done. Fetching snapshot metadata... done. Updating from Wed Jan 14 14:59:46 CET 2009 to Wed Jan 14 16:09:42 CET 2009. [...] Building new INDEX files... done. [root@freebsd:/usr/src]$ zfs set mountpoint=/bpool/jails/v7.1.0/template/usr/ports/ bpool/jails/ports [root@freebsd:/usr/src]$ ln -s /tmp /bpool/jails/v7.1.0/template/usr/ports/distfiles [root@freebsd:/usr/src]$ ls -l /bpool/jails/v7.1.0/template/usr/ports/distfiles lrwxr-xr-x 1 root wheel 4 Jan 14 17:31 /bpool/jails/v7.1.0/template/usr/ports/distfiles -> /tmp
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]$ mount -t devfs devfs /jails/template/dev [root@freebsd:/usr/src]$ ifconfig bge0 alias 192.168.1.1 netmask 255.255.255.0 [root@freebsd:/usr/src]$ jail /jails/template/ template 192.168.1.1 /bin/csh template# df -h Filesystem Size Used Avail Capacity Mounted on dpool/jails/template 207G 238M 206G 0% / 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 template# exit
A jail IP címének léteznie kell, a fenti esetben a 192.168.1.1 a gép egyik létező interfészére felhúzott IP cím alias.
Láthatjuk, hogy csak magunk vagyunk, de nincs hálózatunk, amelyhez egy NAT-ot kell beállítanunk, ezt (meglepően beszédes formában) a /etc/ipnat.rules fájlban tudjuk megtenni (a bge0 az interfész neve, a 91.83.48.130 pedig az IP címe):
map bge0 192.168.1.0/24 -> 91.83.48.130/32
Ezek után
[root@freebsd:/usr/src]$ echo 'ipnat_enable="YES"' >>/etc/rc.conf [root@freebsd:/usr/src]$ /etc/rc.d/ipnat start Installing NAT rules. 0 entries flushed from NAT table 0 entries flushed from NAT list
Lépjünk bele a jail-be és 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-light bash template# portinstall -i mc-light bash ---> Session started at: Sat, 09 Aug 2008 12:55:59 +0000 Install 'misc/mc-light'? [yes] [Gathering depends for misc/mc-light ............................... done] Install 'shells/bash'? [yes] [Gathering depends for shells/bash . done] [...] ---> Packages processed: 8 done, 0 ignored, 0 skipped and 0 failed ---> Session ended at: Sat, 23 Aug 2008 07:35:56 +0000 (consumed 00:11:10) template# df -h Filesystem Size Used Avail Capacity Mounted on dpool/jails/template 207G 318M 206G 0% / template# exit
Picit felhízott a jail, amit részben az okoz, hogy legalább 15 csomagot telepítettünk fel (amelyek jó része ú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/.profile [root@freebsd:/usr/src]$ zfs list NAME USED AVAIL REFER MOUNTPOINT [...] dpool/jails 437M 206G 21K /jails dpool/jails/ports 153M 206G 18K /jails/ports dpool/jails/ports/template 153M 206G 153M /jails/template/usr/ports dpool/jails/template 284M 206G 284M /jails/template
Elkészítettünk egy közel 300MBájt helyet foglaló jail mintát, amelyet klónozva kevés helyet foglaló - különféle szolgáltatásokat futtató - jail rendszereket fogunk készíteni.
Előző fejezet Tartalomjegyzék Következő fejezet
Auth Gábor auth.gabor@javaforum.hu