Child pages
  • Jailed template
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

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:

Parancssor
[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:

Parancssor
[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/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:

Parancssor
[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
[root@freebsd:/usr/src]$ ln -s /tmp /jails/template/usr/ports/distfiles

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):

Parancssor
[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):

/etc/ipnat.rules
map bge0 192.168.1.0/24 -> 91.83.48.130/32

Ezek után

Parancssor
[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:

Parancssor
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:

Parancssor
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:

Parancssor
[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


      
      
Page viewed times
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
  • No labels