Ziŝaj Konsiletoj 3-a: Ŝanĝradikighelpiloj
Ni ridas pri tio, kion ni ne povas toleri alfronti.
—Aristotelo

Enhavotabelo
Enkonduko
Teĥnologioj kiel Dakero, QEMU, kaj VirtualBox estas bonegaj iloj kiam procezojn oni volas ruli aparte de la gastiga sistemo. Tute izolitajn mediojn ĉi tiuj teĥnikoj provizas al ni kiuj la reprodukteblecon de kodo plifaciligas testi. Tamen, estas okazoj en kiu ĉi tiuj solvoj tro pezas, kaj ion malplipezan ni bezonas. Eniras ŝanĝradikigado. Male al siaj pliplezaj amikoj, ŝanĝradikigado sidas ie proksima al la dosiersistemo, kie la risurcojn de la medio kiun ĝin alvokas ĝi povas facile aliri.
En ĉi tiu artikolo, mi parolos kiel ŝanĝradikigmedion agordi en linukso per ziŝo. Teĥnike, ĉi tio estas kunmeto de diskutoj pri ŝelo kaj sistemadministrado, sed pro kapablojn kiuj estas ekskluzivaj al ziŝo mi uzas—aŭ alie malfacila por fari en aliaj ŝeloj—tiun paĝtitolon mi uzis.
Kelkfoje komandojn de aliaj sistemoj mi bezonas rapide ruli, ekzemple, de Ubunto, por ke mian programaron mi povu testi, kun daŭra konservaj mekanismoj kaj aliro al sistemduumdosieroj. Aliaj opcioj estas laborintensivaj kaj la taskojn mi povas kuri rapide, kaj nun.
Antaŭkondiĉoj
Por la efektivan disan medion krei, manieron por ĝin elŝuti kaj instali ĉe la disko ni bezonas. Por tion fari, je Bootstrap ni bezonas.
Per Nixpkgs:
% nix-env -i debootstrapPer APT:
% sudo apt-get install -y debootstrapPor la aferojn fluigi, la saman uzantnomon kaj uzantnumeron de la gasgita sistemo ni uzos:
% id -un; id -uInstalo
Unue la celan dosierujon ni kreu:
% sudo mkdir -p /home/chrt/ubuntuSekve, ni diru al debootstrap, ke specifan ubuntan distribuon ĝi devas instali:
% sudo debootstrap xenial /home/chrt/ubuntu http://archive.ubuntu.com/ubuntuKiam ĝi finis kuri, la bindsurmetojn de la sistemo al la cela sistemo ni devas krei:
% sudo mount --bind /proc /home/chrt/ubuntu/proc
% sudo mount --bind /sys /home/chrt/ubuntu/sys
% sudo mount --bind /tmp /home/chrt/ubuntu/tmp
% sudo mount --bind /home /home/chrt/ubuntu/home
% sudo mount --bind /dev /home/chrt/ubuntu/dev
% sudo mount --bind /dev/pts /home/chrt/ubuntu/dev/ptsAgordo
Por ke la ŝanĝradikigmedio funkciu ĝuste, enen ni devas iri kaj ŝanĝojn fari:
% sudo chroot /home/chrt/ubuntuEn ĉi tiu punkto, oni estas ensalutita kiel la ĉefuzanto per Baŝo. Kelkajn ilojn ni instalu:
# apt-get install -y zsh sudoTiam la ŝanĝradikigmedian specifan konton ni kreu. Ĝin ni devas akordigi al tiu, kiun oni nune uzas. Ni supozu, ke la aktuala uzantnomo estas vakelo kun la uzantnumero 1000.
# useradd -u 1000 -m vakelo
# passwd vakeloTiam, la uzanton vakelo ni aligu parto de la sudo grupo:
# usermod -aG sudo vakeloTiam, ni diru al sudo, ke nin ĝi ne devas invitigi por la pasvorto. Por tion fari, je visudo ni devas uzi:
# visudoVisudo estas agrabla kovrilo por la sudo-agorddosieron redakti tial, ke okaze erarojn ni faris, nin ĝi informos pri tio, kaj ne pluigas kun la ŝanĝoj, invitante al ni por ĝin ripari. Por nia kazo, ni devas instrui al sudo, ke la inviton por la pasvorto ni ne bezonas. La jenan linion ŝanĝu:
%sudo ALL=(ALL:ALL) ALLal
%sudo ALL=(ALL:ALL) NOPASSWD: ALLLa redaktilon fermu. Post tio, ankaŭ eliru de la ŝanĝradikigmedio:
# exitLa komandojn difini
De nun ni estas reen ĉe la gastiga maŝino. La komandojn kiuj estas efektive uzitaj por interagi al la ŝanĝradikigmedio ni devas difini. La dosieron ~/.zshenv ni malfermu per la redaktilo, tiam la jenan metu:
CHROOT=/home/chrt/ubuntu
function crmount () {
for i (proc sys tmp home dev) {
if [[ ! -d $1/$i ]]; then
mkdir -p $1/$i
fi
sudo mount --bind /$i $1/$i
}
sudo mount --bind /dev/pts $1/dev/pts
}
function crumount () {
for i (proc sys tmp home dev) {
sudo umount -fl $1/$i
}
}
function crm () {
crmount $1
}
function cru () {
crumount $CHROOT 2> /dev/null
}
function crch () {
sudo chroot $@
}
function crr () {
if ! mount | grep -q $1; then
crm $1
fi
crch $1 ${argv[2,-1]}
}
function crs () {
crr $1 /usr/bin/sudo -i -u $USER ${argv[2,-1]}
}
function cre () {
if [[ -e $CHROOT ]]; then
crs $CHROOT $@
fi
}
function cr () {
if (( ! $#@ )); then
cr ${${SHELL:t}:-sh}
else
cre zsh -c "cd \"$PWD\"; exec $*"
fi
}
La ŝanĝojn konservu, tiam la redaktilon fermu. Post tio, novan ŝelon rulu por ke la novaj komandoj estu legitaj de la startiga dosiero.
Elprovado
La daton el la ŝanĝradikigmedio ni akiru:
% cr dateLa daton de la uname-komando ni ankaŭ vidu:
% cr uname -aJe cr oni ankaŭ povas ruli por eniri al ŝelo:
% crEne ĉi tiu ŝelo, aliron al la ekstermedio la aktuala medio havas, inkluzive la hejmdosierujon. Ĉi tio ebligas onin por instali apojn kiuj povas aliri la datumon en la gastiga maŝina medio.
Se la ŝanĝradikigmedion oni volas malŝalti eksplicite, rulu:
% cruFinrimarkoj
Medion havante por programojn testi kaj programojn ruli kiuj estas ekskluzivaj al tiu platformo, en malpli peza medio, certe estas helpema aldono.