Schroot kasutamine operatsioonisüsteemiga Debian
Sissejuhatus
schroot tarkvara hõlbustab nn unix chroot instrumendi abil virtuaalsete operatsioonisüsteemide pidamist. Võrreldes vanilla chroot kasutamisega võimaldab schroot
- kirjeldada süstemaatiliselt seadistusfailide abil virtuaalsete arvutite keskkonnad
- käivitada ja kasutada virtualiseeritud keskkondi
- virtualiseeritud keskkondades hallatakse automaatselt /proc, /sys jt pseudofailisüsteemide kasutamine
- virtualiseeritud keskkonna failisüsteem saab põhineda nt tavalisel failisüsteemi kataloogil, LVM voluumil
- virtualiseeritud keskkondi saab käivitada ajutiste snapshottidena (kasutades LVM snapshotti, aufs failisüsteemi)
schroot töötab olemasoleva os juurfailisüsteemiga ja iseenesest ei paku vahendeid sellise juurfailisüsteemi moodustamiseks. Kasutamiseks sobiv juurfailisüsteem võib olla
- debootstrap abil host arvutisse moodustatud kataloog
- mõnest teisest arvutist kasutada oleval plokkseadmel asuv failisüsteem (kõvaketas, iscsi, nfs)
Kuna schroot põhineb unix chroot kasutamisel, siis tuleb pigem sellesse suhtuda kui erinevate operatsioonisüsteemide eksemplaride koos pidamise instrumenti ja mitte kui üksteisest isoleeritud operatsioonisüsteemi eksemplaride halduse vahendisse. Nt oleks sobivaks kasutusel töökohaarvutis mingite katsetuste tegemine sooviga ära hoida põhilise os failisüsteemi risustamine. Tõsisema isoleerituse saavutamiseks sobib kasutada nt Docker, Xen jms tehnoloogiaid.
schroot kasutamisega kaasnevad tuntud chroot piirangud
- schroot töötab põhiliselt failisüsteemi kasutamise piirangutel, mitte protsesside, võrguressursside, mälu jms piirangutel
- virtuaalses arvuti shutdown -h now ütlemisel tõenäoliselt seiskub kõik
- schroot abil saab käivitada 64 bit keskkonas 32 bit virtuaalseid operatsioonisüsteeme, aga mitte vastupidi
- schroot abil saab virtualiseerida linux operatsioonisüsteeme, mitte bsd, solaris, windows vms
Chroot ja schroot kasutamise teeb nö eriliseks asjaolu, et seda saab kasutada OpenVZ-sarnaste virtuaalsete arvutite peal. schroot kasutamisel kasutatavad mount'id on paista ka teenusepakkujale ja tõenäoliselt on viisakas schroot kasutamine teenusepakkujaga eelnevalt kooskõlastada.
Tööpõhimõte
schroot (ja chroot üldiselt) keskkonnas käivitatakse suhteliselt nn lõppkasutaja programme, üldiselt käivitatakse bash shell. Ja sellest shellist edasi programme mida tarvis. Oluline, et schroot keskkonnas ei toimu tavalist init programmi kasutamise ega /etc/rc2.d käivituskriptide läbimist. Ei tööta systemd utiliidid, programme tuleb käivitada /etc/init.d/programminimi käivitusskripti abil.
Samuti ei ole asjakohane teha schroot keskkonnas rebooti ega shutdowni.
Tarkvara paigaldamine
schroot tarkvara paigaldamiseks sobib öelda, Debian v. 7 Wheezy ja v. 8 Jessie paketihalduses on schroot v. 1.6
# apt-get install schroot
mille tulemusena tekib failisüsteemi
- /etc/schroot/schroot.conf - põhiline seadistusfail
- /etc/schroot/chroot.d - kataloogis asuvad include'tud seadistusfailid
- /etc/schroot/{default,desktop,minimal} - erinevad nö profiilid (mis failisüsteeme külge ühendada jms)
drwxr-xr-x 2 root root 4096 Jun 20 14:11 /etc/schroot/default drwxr-xr-x 2 root root 4096 May 26 19:32 /etc/schroot/desktop drwxr-xr-x 2 root root 4096 May 26 19:32 /etc/schroot/minimal
- /etc/default/schroot - TODO
- /etc/init.d/schroot - TODO
Kuigi olemasolevate chroot keskkondade käivitamiseks piisab schroot tarkvarast, on uusi chroot keskkondi mõnus tekitada nt debootstrap programmiga, selle paigaldamiseks sobib öelda
# apt-get install debootstrap
schroot kasutamisel tuleb arvestada, et nt Debian v. 6 Squeeze paketihalduses on schroot v. 1.4 ja selle seadistamisel ja kasutamisel on mõned olulised erisused.
Chroot keskkonna ettevalmistamine
Põhilise operatsioonisüsteemi kataloogi virtualiseeritud operatsioonisüsteemi juurfailisüsteemile vastava kataloogi moodustamiseks sobib öelda nt
# mkdir /srv/chroot/squeeze # debootstrap --variant=buildd --arch i386 squeeze /srv/chroot/squeeze http://ftp.ee.debian.org/debian/
kus
- /srv/chroot/squeeze - millisesse kataloogi juurfailisüsteem tekitatakse
- --variant=buildd - lisaks paigaldatakse build-essential pakette
- --arch i386 - kataloogi tekitatakse 32 bit arhitektuurile vastav sisu
- mirrori aadressi võib aga ei pea näitama
Seadistamine
schroot keskkondade seadistamine toimub kataloogis /etc/schroot/chroot.d kirjeldatud seadistufailide abil, ühe virtuaalse keskkonna kirjeldab seadistusfaili üks [nimi] sektsioon, nt
# cat /etc/schroot/chroot.d/chroot_keskkond_squeeze [squeeze_web] description=Debian Squeeze 32-bit Web type=directory directory=/srv/chroot/squeeze_web personality=linux32 root-users=imre profile=default setup.services=apache2,ssh [squeeze_pgsql] description=Debian Squeeze 32-bit PostgreSQL type=directory directory=/srv/chroot/squeeze_pgsql personality=linux32 root-users=imre profile=default setup.services=postgresql,ssh
kus
- [sqeeze_web] - virtuaalse keskkonna nimi
- type=directory - virtuaalse arvuti failisüsteem asub kataloogis
- directory=/srv/chroot/squeeze_web - millises kataloogis virtuaalse arvuti failisüsteem asub
- personality=linux32 - virtaalne arvuti on 32 bit
- root-users=imre - põhikeskkonna kasutaja imre saab käivitada ja kasutada virtuaalset arvutit
- profile - virtuaalse arvuti profiil (millised host arvuti failisüsteemid ühendatakse külge virutaalse alla; millised virtaalse arvuti seadistusfailid kirjutatakse virtuaalse arvuti käivitamisel üle vastavate host arvuti failide sisuga)
- setup.services=apache2,ssh - virtuaalse arvuti käivitamisel käivitatakse automaatselt näidatud teenused (st deemonid, protsessid)
Profiili failide kasutamine
- /etc/schroot/default/copyfiles - millised virtaalse arvuti seadistusfailid kirjutatakse virtuaalse arvuti käivitamisel üle vastavate host arvuti failide sisuga
- /etc/schroot/default/fstab - millised host arvuti failisüsteemid ühendatakse külge virutaalse alla
- /etc/schroot/default/nssdatabases - millised virtaalse arvuti seadistusfailid kirjutatakse virtuaalse arvuti käivitamisel üle vastavate host arvuti failide sisuga
Kasutamine
Lihtsalt ühekordselt chroot keskkonda sisenemiseks ja selle keskkonna root kasutaja prompti saamiseks sobib öelda
imre@pv-zabbix:~$ schroot -c squeeze -u root I: 70services: Starting web server: apache2. I: 70services: Starting OpenBSD Secure Shell server: sshd. (squeeze)root@virt-arvuti-hostname:~#
kus
- -c keskkonna nimi
- -u root - millise kasutaja prompti jõutakse, antud juhul root
- I - tähistab programmi väljundis, millised teenused chroot keskkonnas automaatselt käivitatakse
- prompti algusse kirjutatakse sulgudesse (squeeze_web) see-tõttu, et schroot tekitab mingil hetkel faili ja seda kasutatakse prmopt moodustamisel /etc/bash.bashrc jt poolt
# cat /etc/debian_chroot squeeze_web
Sessiooni (st sellisel viisil käivitamine, et keskkond jääb käima taustal) nimega 'test' alustamine (-b - begin-session, -n - sessioni nimi, ilma genereeritakse nimi automaatselt)
$ schroot -b -n test -c squeeze_web -u root I: 70services: Starting web server: apache2. I: 70services: Starting OpenBSD Secure Shell server: sshd. test $
Olemasolevale sessioonile külgeühendumiseks (-r - run)
$ schroot -r -c test
Sessiooni lõpetamine (-e - end)
$ schroot -e -c test I: 70services: Stopping OpenBSD Secure Shell server: sshd. I: 70services: Stopping web server: apache2 ... waiting ..
Virtuaalse arvuti töötamise ajal on külge ühendatud hulka failisüsteeme, nt nii vaadata host arvutis
# df -a | grep schroot /dev/xvdb 41153856 33410712 5629608 86% /var/lib/schroot/mount/squeeze_web proc 0 0 0 - /var/lib/schroot/mount/squeeze_web/proc sysfs 0 0 0 - /var/lib/schroot/mount/squeeze_web/sys udev 10240 0 10240 0% /var/lib/schroot/mount/squeeze_web/dev devpts 0 0 0 - /var/lib/schroot/mount/squeeze_web/dev/pts
Töötava virtuaalse arvuti kohta info küsimine
# schroot -i -c session:squeeze_web ─── Session ─── Name squeeze_web Description Debian Squeeze 32-bit Web (session chroot) Type directory Message Verbosity normal Users root ...
Töötava virtuaalse arvuti seadistuste küsimine
# schroot --config -c session:squeeze_web # schroot configuration generated by schroot 1.6.10 on 21 Jun 2015 [squeeze_web] aliases= command-prefix= description=Debian Squeeze 32-bit (session chroot) directory=/srv/chroot/squeeze_web ...
Host arvuti rebootimisel chroot keskkondade käivitamist kontrollib seadistusfail
# cat /etc/default/schroot STOP_ACTION="none" START_ACTION="recover"
Praktiliselt tähendab see, et host arvuti shutdown või reboot puhul seisatakse virtuaalsetest arvutites protsessid ning host arvuti käivitamisel need protsessid käivitatakse automaatselt.
Ajutise sisuga virtuaalse arvuti kasutamine
Kõige otsekohesemal juhtumil käivitab schroot tarkvara mingilt juurfailisüsteemilt virtuaalse arvuti. Selle arvutiga töötamisel tehakse muudatusi selles failisüsteemis. Ning peale seiskamist ning uuesti käivitamist on muudatused alles ning saab jätkata muudatuste tegemist. Sedasi saab käivitada failisüsteemile vastava ühe virtuaalse arvuti.
Lisaks võimaldab schroot tarkvara teha kõik nagu just kirjeldatud, kuid tekitatud virtuaalse arvuti failisüsteemi kasutamine toimub selliselt, et seal tehtud muudatused on ajutised, st kehtivad ainult virtuaalse arvuti töötamise ajal. Kui virtuaalse arvuti juurfailisüsteem põhineb LVMil, siis saavutatkse seda LVM snapshot abil; kui virtaalse arvuti juurfailisüsteem põhineb kataloogil, siis saavutatase seda mingi Union failisüsteemi abil, nt AUFS. Sedasi saab käivitada failisüsteemile vastavaid mitu üksteisest sõltumatut virtuaalset arvutit.
Seadistamine
Failisüsteemil põhineva virtuaalse arvuti puhul sobib selleks kaustada virtuaalse arvuti seadistuse sektsioonis täiendavalt rida
union-type=aufs
Vastava source arvuti kasutamise ligipääsude näitamine toimub sarnaselt 'users' parameetrile, aga parameetriga source-users
source-root-users=imre
Kasutamine
Kui selliselt seadistatud arvutite kohta küsida nimekirja, siis saab vastuseks kaks rida
# schroot -l chroot:squeeze source:squeeze
kus
- chroot:squeeze - esimesel real kasutatud prefix chroot tähistab asjaolu, et tegu on objektiga, mille kasutamisel käivitatakse ajutise failisüsteemiga arvuteid (katsetuste tegemiseks)
- source:squeeze - teisel real kasutatud prefix source tähistab asjaolu, et tegu on objektiga, mille kasutamisel käivitatakse ajutiste arvutite aluseks oleva juurfailisüsteemiga arvuti (seal tehtud muudatused on püsivad, nt uuenduste tegemiseks)
Nt kolme ajutise sisuga virtuaalse arvuti käivitamiseks (session nimed genereeritakse)
# schroot -b -c squeeze squeeze-7a15f006-fa78-4f33-bfaa-33da86222570 # schroot -b -c squeeze squeeze-35ad0028-330d-4462-8085-827a10b1c721 # schroot -b -c squeeze squeeze-e11687a8-0eb4-4969-9c17-c27ec5d53a31
ja küsida kõigi nimekirja, ajutiste arvutite nimed algavad prefixiga 'session'
# schroot -l -a chroot:squeeze session:squeeze-35ad0028-330d-4462-8085-827a10b1c721 session:squeeze-7a15f006-fa78-4f33-bfaa-33da86222570 session:squeeze-e11687a8-0eb4-4969-9c17-c27ec5d53a31 source:squeeze
Selleks, et muuta aluseks oleva failisüsteemi sisu tuleb käivitada virutaalne arvuti selliselt
# schroot -c source:squeeze
ja seejärel tehtud muudatus kajastub koheselt ajutiste failisüsteemidega arvutites.
Ajutise virtuaalse arvuti töötamisel paistavad tehtud muudatused sellises kataloogis
# find /var/lib/schroot/union/overlay/squeeze-35ad0028-330d-4462-8085-827a10b1c721 -type f -mmin -50 -ls 1898738 0 -rw-r--r-- 1 root root 0 Jun 21 17:15 /var/lib/schroot/union/overlay/squeeze-35ad0028-330d-4462-8085-827a10b1c721/tmp/test 1899176 4 -rw------- 1 root root 77 Jun 21 17:15 /var/lib/schroot/union/overlay/squeeze-35ad0028-330d-4462-8085-827a10b1c721/root/.bash_history 1836648 0 -r--r--r-- 1 root root 0 Jun 21 17:13 /var/lib/schroot/union/overlay/squeeze-35ad0028-330d-4462-8085-827a10b1c721.wh..wh.aufs 1898708 4 -rw-r--r-- 1 root root 10 Jun 21 17:13 /var/lib/schroot/union/overlay/squeeze-35ad0028-330d-4462-8085-827a10b1c721/etc/debian_chroot
Debian v. 8 Jessie kasutamine Debian v. 6 Squeeze keskkonnas
Tundub, et debootstrap kasutamiseks tuleb tekitada vastav link (nb! kõik olemasolevad st squeeze, wheezy jt on ka lingid sid peale)
# cd /usr/share/debootstrap/scripts/ root@im:/usr/share/debootstrap/scripts# ln -s sid /usr/share/debootstrap/scripts/jessie
Kuna Debian v. 6 keskkonnas on schroot suhteliselt vana schroot v. 1.4, tuleb arvestada selliste erisustega
# cp -a /etc/schroot/default /etc/schroot/normal
ning tekitada kataloogides olevatesse failidesse sellised muudatused
- /etc/schroot/normal/config - asendada path'is 'default' -> 'normal'
- /etc/schroot/normal/copyfiles - kustutada sisu
- /etc/schroot/normal/fstab - jätta alles sellised read
/proc /proc none rw,rbind 0 0 /sys /sys none rw,rbind 0 0 /dev /dev none rw,rbind 0 0
- /etc/schroot/normal/nssdatabases - kustutada sisu
Moodustada fail /etc/schroot/chroot.d/arendus sisuga
# cat /etc/schroot/chroot.d/arendus [jessie] description=Debian Jessie 64-bit type=directory directory=/srv/chroot-arendus-debian-v8 personality=linux root-users=imre script-config=normal/config
- Millegipärast paistab schroot keskkondade jms nimekiri selline
# schroot -l -a chroot:chroot-arendus-debian-v8 chroot:chroot-arendus-debian-v8-0222017d-4ba7-45a1-96ed-579a4fe223b0 session:chroot-arendus-debian-v8-0222017d-4ba7-45a1-96ed-579a4fe223b0
- Nt tarkvara paigaldamisel vahel öeldakse
E: Can not write log (Is /dev/pts mounted?) - posix_openpt (2: No such file or directory)
samas tundub, et /dev/pts on monteeritud, siiski see vist probleeme ei tekita üldiselt
# mount /srvdata/vz/template:/data01/562/fs on / type vzfs (rw,relatime) proc on /proc type proc (rw,relatime) sysfs on /sys type sysfs (rw,relatime) /srvdata/vz/template:/data01/562/fs on /dev type vzfs (rw,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,relatime) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600,ptmxmode=000)
- Tundub, et schroot v. 1.4 tarkvara ei sisalda chroot keskkonnas service'ite st deemonite startimist, käsitsi piisab nt selliste startimiseks, kui piisab (seejuures peab vaatama, et ssh, mysql ja apache pordid ei lähe konflikti teiste OS all töötavate eksemplaridega)
# /etc/init.d/rsyslog start # /etc/init.d/ssh start # /etc/init.d/mysql start # /etc/init.d/apache2 start
Debian v. 8 Stretch kasutamine Debian v. 8 Jessie keskkonnas
Debian v. 9 kasutamise teeb eriliseks asjalu, et mõlemad operatsioonisüsteemid kasutavad systemd lahendust.
Märkused
- nt Apache käivitusskripti võib mõnel juhul eksitada, et protsessitabelis on näha selliseid protsesse, millega ei ole seostatud pid faili (need on mõnes muus virtaalis või host arvutis töötavad protsessid)
- virtuaalses arvutis öeldud reboot reboodib host arvuti
- OpenVZ keskkonna pidaja jaoks paistab schroot kasutamine välja tänu tehtud mountidele, nt
# diff /tmp/vz-tootab /tmp/vz-tootab-schroot-tootab 22a23,28 > /var/lib/vz/private/166 on /var/lib/vz/root/166/var/lib/schroot/mount/jessie-b1a8377f-2cbc-465b-a73a-9d24f2c54496 type simfs (rw,relatime) > proc on /var/lib/vz/root/166/var/lib/schroot/mount/jessie-b1a8377f-2cbc-465b-a73a-9d24f2c54496/proc type proc (rw,relatime) > sysfs on /var/lib/vz/root/166/var/lib/schroot/mount/jessie-b1a8377f-2cbc-465b-a73a-9d24f2c54496/sys type sysfs (rw,relatime) > /var/lib/vz/private/166 on /var/lib/vz/root/166/var/lib/schroot/mount/jessie-b1a8377f-2cbc-465b-a73a-9d24f2c54496/dev type \ simfs (rw,relatime) > tmpfs on /var/lib/vz/root/166/var/lib/schroot/mount/jessie-b1a8377f-2cbc-465b-a73a-9d24f2c54496/dev/shm type \ tmpfs (rw,nosuid,nodev,relatime,size=524288k,nr_inodes=131072) > devpts on /var/lib/vz/root/166/var/lib/schroot/mount/jessie-b1a8377f-2cbc-465b-a73a-9d24f2c54496/dev/pts type \ devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000
- Vaikimisi võib paistab df väljund virtuaalses arvutis selline
# df df: cannot read table of mounted file systems: No such file or directory
Tundub, et asja parandab /proc/mounts peale teha /etc/mtab juurest link
(jessie_64)root@moraal:~# ln -s /proc/mounts /etc/mtab (jessie_64)root@moraal:~# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/xvdb 41153856 33410908 5629412 86% / udev 10240 0 10240 0% /dev
- MySQL serveri käivitusskript /etc/init.d/mysql kontrollib kui palju on vaba ruumi ja kui df käsk ei anna normaalset väljundit, saab hoiatuse. Tundub, et sobib on kasutad virtuaalses arvutis faili sisuga
# cat /etc/mtab tmpfs /tmp tmpfs rw 0 0
- Tundub, et logimine on seotud /dev/log ja systemd spetsiifiliste vahenditega. Tundub, et praktiliselt piisab chroot keskkonnas käivitada rsyslog deemon tavalisel viisil kuigi tulemusena ta logib ka baas-süsteemi sündmusi.
Kasulikud lisamaterjalid
- https://johnlewis.ie/using-schroot-instead-of-lxc-containers/
- https://wiki.debian.org/Schroot
- http://kevingoodsell.github.io/2011-06-19/debian-chroots-with-schroot.html
- https://www.digitalocean.com/community/tutorials/how-to-configure-chroot-environments-for-testing-on-an-ubuntu-12-04-vps
- https://wiki.ubuntu.com/DebootstrapChroot