Miután az előző fejezet végén eltakarítottuk a nyomokat magunk után, megejtjük a klónozást, és csinálunk egy jail-t, amelynek rövid életében feladata annyi lesz, hogy kipróbáljuk a jail lehetőségeit:
$ zfs clone dpool/jails/v8.1.0/template@base dpool/jails/v8.1.0/httpd
$ zfs get compression dpool/jails/v8.1.0/httpd
NAME PROPERTY VALUE SOURCE
dpool/jails/v8.1.0/httpd compression off default
$ zfs set compression=on dpool/jails/v8.1.0/httpd
$ zfs get compression dpool/jails/v8.1.0/httpd
NAME PROPERTY VALUE SOURCE
dpool/jails/v8.1.0/httpd compression on local
Nem kötelező a tömörített jail fájlrendszer, de én két dolog miatt szeretem:
- ránézésre látom, hogy a tömörített mentés mennyi helyet fog elfoglalni.
- több hely marad és teljesítményben sem roszabb, mivel a programokat csak egyszer kell betölteni – a jail indulásakor.
Ha megtekintjük az elfoglalt helyet, akkor látszik igazán, hogy mire képes a ZFS klónozás: a template fájlrendszerből létrehozott httpd fájlrendszer egyelőre 0 bájt helyet foglal el, mivel minden egyes fájl és könyvtár hivatkozik a template megfelelő állományára:
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
[...]
dpool/jails/v8.1.0 254M 3.40G 21K /dpool/jails/v8.1.0
dpool/jails/v8.1.0/httpd 0 3.40G 254M /dpool/jails/v8.1.0/httpd
dpool/jails/v8.1.0/template 254M 3.40G 254M /dpool/jails/v8.1.0/template
dpool/jails/v8.1.0/template@base 0 - 254M -
A létrehozott jail még nem üzemképes, ahhoz fel kell vennünk a /etc/rc.conf állományba a jail támogatást:
jail_enable="YES"
jail_devfs_enable="YES"
jail_procfs_enable="YES"
jail_list="httpd"
jail_httpd_rootdir="/dpool/jails/v8.1.0/httpd"
jail_httpd_hostname="httpd.jails.javaforum.hu"
jail_httpd_ip="192.168.2.6"
A jail IP címe megér pár mondatot, hiszen a jail csak hálózaton keresztül tud a külvilággal kommunikálni. Minden jail rendelkezik egy és csakis egy IP címmel, amely lehet egy publikus IP cím is, ha a jail-nek érintkeznie kell a külvilággal, ha csak egy bizonyos szolgáltatás a célja, akkor célszerű az alias használata, amelyet már az előző fejezetben létrehoztunk, de csak parancssorból:
$ ifconfig bge1 alias 192.168.2.6 netmask 255.255.255.0
$ ifconfig bge1
bge1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether 00:1a:64:6f:0e:d8
inet 192.168.2.254 netmask 0xffffff00 broadcast 255.255.255.0
inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
inet 192.168.2.6 netmask 0xffffff00 broadcast 192.168.2.255
media: Ethernet autoselect (none)
status: no carrier
Az alias megőrzéséhez módosítani kell a /etc/rc.conf állományt:
ifconfig_bge1_alias0="inet 192.168.2.6 netmask 255.255.255.0"
Visszatérve a httpd nevű – amúgy üres – jail használatára, most már el tudjuk indítani:
$ /etc/rc.d/jail start httpd
Configuring jails:.
Starting jails: httpd.jails.javaforum.hu.
$ jls
JID IP Address Hostname Path
24 192.168.2.6 httpd.jails.javaforum.hu /dpool/jails/v8.1.0/httpd
$ ssh root@192.168.2.6
The authenticity of host '192.168.2.6 (192.168.2.6)' can't be established.
DSA key fingerprint is a4:ac:e7:f0:4a:43:16:3b:ce:d0:4b:68:7d:2b:eb:c4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.2.6' (DSA) to the list of known hosts.
Password:
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 8.1-STABLE (JAVAFORUM) #0: Sat Nov 20 09:45:09 CET 2010
[root@httpd:~]$ df
Filesystem 1K-blocks Used Avail Capacity Mounted on
dpool/jails/v8.1.0/httpd 3823104 259968 3563136 7% /
[root@httpd:~]$ ps aux
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
root 38827 0.0 0.0 13792 1388 ?? SsJ 3:04PM 0:00.00 /usr/local/sbin/syslog-ng -p /var/run/syslog.pid
root 38867 0.0 0.2 23812 8264 ?? SsJ 3:04PM 0:00.01 /usr/local/sbin/munin-node (perl)
root 38910 0.0 0.1 22876 2724 ?? SsJ 3:04PM 0:00.00 /usr/sbin/sshd
root 38916 0.0 0.1 10732 2836 ?? SsJ 3:04PM 0:00.00 sendmail: accepting connections (sendmail)
smmsp 38920 0.0 0.1 10732 2944 ?? IsJ 3:04PM 0:00.00 sendmail: Queue runner@00:30:00 for /var/spool/clientmqueue (sendmail)
root 38926 0.0 0.0 6744 1184 ?? SsJ 3:04PM 0:00.00 /usr/sbin/cron -s
root 39440 0.0 0.1 33768 3456 ?? SsJ 3:05PM 0:00.02 sshd: root@ttyp2 (sshd)
root 39446 0.0 0.0 9012 1996 p2 SsJ 3:05PM 0:00.01 -bash (bash)
root 39449 0.0 0.0 6788 988 p2 R+J 3:05PM 0:00.00 ps aux
[root@httpd:~]$ exit
logout
Connection to 192.168.2.6 closed.
[root@freebsd:~]$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
dpool/jails/v8.1.0 255M 3.40G 21K /dpool/jails/v8.1.0
dpool/jails/v8.1.0/httpd 773K 3.40G 254M /dpool/jails/v8.1.0/httpd
dpool/jails/v8.1.0/template 254M 3.40G 254M /dpool/jails/v8.1.0/template
dpool/jails/v8.1.0/template@base 0 - 254M -
Mint látszik, mindössze 773kBájt helyet foglal a futó jail, amelyben működik a cron, a sendmail, az sshd, a munin-node és a syslog-ng is, egy dolog hiányzik: a ports fájlrendszer, amelyet – frissítés után – gyorsan be is csatolunk, majd belépünk a friss és ropogós httpd jail-be, és megnézzük van-e valami frissítenivaló:
$ zfs set mountpoint=/dpool/jails/v8.1.0/httpd/usr/ports/ dpool/jails/ports
$ ssh root@192.168.2.6
Password:
Last login: Sat Jan 17 15:05:10 2009 from 192.168.2.6
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 8.1-STABLE (JAVAFORUM) #0: Sat Nov 20 09:45:09 CET 2010
[root@httpd:~]$ portupgrade -i -a
---> Session started at: Sat, 17 Jan 2009 15:09:35 +0100
[Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... - 71 packages found (-1 +1) (...). done]
** None has been installed or upgraded.
---> Session ended at: Sat, 17 Jan 2009 15:09:45 +0100 (consumed 00:00:10)
[root@httpd:~]$ portaudit -F
auditfile.tbz 100% of 53 kB 49 kBps
New database installed.
[root@httpd:~]$ portaudit
0 problem(s) in your installed packages found.
Szerencsére nincs semmi frissítenivaló és biztonsági hibát hordozó csomagunk sincs.
Az Apache telepítése
A httpd nevű jail azzal a céllal jött létre, hogy kipróbáljuk a jail lehetőségeit, ezért egy kezdetleges webszolgáltatást hozunk létre, amely látványos lehet, mégis egyszerű beállítani. Kiszolgáló programként az Apache httpd szerverét fogjuk használni, annak is a 2.2 verzióját. A telepítéshez egyszerűen be kell lépnünk a jail-be, és a portinstall használatával fel kell telepítenünk:
$ portinstall -i apache
---> Session started at: Sat, 17 Jan 2009 15:13:52 +0100
---> Found 3 ports matching 'apache':
www/apache13
www/apache20
www/apache22
Install 'www/apache13'? [yes] n
Install 'www/apache20'? [yes] n
Install 'www/apache22'? [yes]
[Gathering depends for www/apache22 ..................... done]
---> Fresh installation of devel/autoconf-wrapper started at: Sat, 17 Jan 2009 15:13:56 +0100
[...]
+ www/apache22
---> Packages processed: 7 done, 0 ignored, 0 skipped and 0 failed
---> Session ended at: Sat, 17 Jan 2009 15:19:37 +0100 (consumed 00:05:44)
[root@httpd:~]$ exit
logout
Connection to 192.168.2.6 closed.
$ rm -Rf /dpool/jails/v8.1.0/httpd/tmp/*
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
[...]
dpool/jails/v8.1.0 263M 3.39G 21K /dpool/jails/v8.1.0
dpool/jails/v8.1.0/httpd 9.17M 3.39G 260M /dpool/jails/v8.1.0/httpd
dpool/jails/v8.1.0/template 254M 3.39G 254M /dpool/jails/v8.1.0/template
dpool/jails/v8.1.0/template@base 0 - 254M -
Ha a telepítés után kilépünk, majd letöröljük a felesleges fájlokat, akkor láthatjuk, hogy egy webszervert tartalmazó jail mindössze ~10MBájtot foglal el.
Az Apache beállítása
Lépjünk vissza a jail-be és üzemeljük be a feltelepített Apache kiszolgálót. Első dolgunk, hogy a /etc/rc.conf állományban engedélyezzük az Apache 2.2 futását:
apache22_enable="YES"
A httpd.conf állományt a /usr/local/etc/apache22 könyvtár alatt találjuk, első körben nem kell hozzányúlnunk, bár az Apache panaszkodni fog, de ezzel ne törődjünk, lépjünk ki a jail-ből és indítsuk újra azt, s ellenőrizzük a httpd processzek elindulását:
$ exit
logout
Connection to 192.168.2.6 closed.
$ /etc/rc.d/jail restart httpd
Stopping jails: httpd.jails.javaforum.hu.
Configuring jails:.
Starting jails: httpd.jails.javaforum.hu.
$ ssh root@192.168.2.6
Password:
Last login: Sat Jan 17 15:23:29 2009 from 192.168.2.6
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 8.1-STABLE (JAVAFORUM) #0: Sat Nov 20 09:45:09 CET 2010
[root@httpd:~]$ ps aux | grep httpd
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
www 46999 1.0 0.1 73180 5488 ?? SJ 3:25PM 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
www 47000 1.0 0.1 73180 5504 ?? SJ 3:25PM 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
www 47001 1.0 0.1 73180 5504 ?? SJ 3:25PM 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
www 47002 1.0 0.1 73180 5516 ?? SJ 3:25PM 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
www 47003 1.0 0.1 73180 5520 ?? SJ 3:25PM 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
root 46954 0.6 0.1 73180 5488 ?? SsJ 3:25PM 0:00.09 /usr/local/sbin/httpd -DNOHTTPACCEPT
Működni látszik, de egyelőre a gép publikus IP címén nem érhetjük el, mivel a jail egy privát IP címet használ, ezért lépjünk ki a jail parancssorából, és oldjuk meg a problémát.
A portforward beállítása
Meg kell írnunk a portforward utasítását, amelyet a /etc/ipnat.rules fájlba kell írnunk:
rdr bge0 91.83.48.130/32 port 80 -> 192.168.2.6 port 80 tcp
Már csak el kell indítanunk az ipnat szolgáltatást:
$ /etc/rc.d/ipnat reload
9 entries flushed from NAT table
1 entries flushed from NAT list
És már készen is vagyunk:

Van egy ~10MBájt helyet foglaló Apache alapú webszolgáltatást nyújtó jail-ünk, amely a feladatát megbízhatóan és gyorsan végzi… törüljük le, majd később újra létrehozzuk, már kicsit több hozzáértéssel és több lehetőséggel…
$ /etc/rc.d/jail stop httpd
Stopping jails: httpd.jails.javaforum.hu.
$ zfs set mountpoint=/usr/ports dpool/jails/ports
$ zfs destroy dpool/jails/v8.1.0/httpd