Schroot kasutamine operatsioonisüsteemiga Debian

Allikas: Imre kasutab arvutit

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 Jessie v. 8 kasutamine Debian v. 6 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

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