Ziŝkonsiletoj 3-a: Ŝanĝradikighelpiloj

Esperanto · English
la 26-an de septembro 2018
Laste ĝisdatigita: la 28-an de septembro 2018

Ni ridas pri tio, kion ni ne povas toleri por alfronti.
―Aristotelo

Teĥnologioj kiel Dakero, QEMU, kaj VirtualBox estas bonegaj iloj kiam procezojn oni volas kurigi 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 sur 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.

Enhavotabelo

Superrigardo

Kelkfoje komandojn de aliaj sistemoj mi bezonas rapide kurigi, 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 sur nia disko ni bezonas. Por tion fari, je bootstrap ni bezonas.

Per Nixpkgs:

% nix-env -i debootstrap

Per APT:

% sudo apt-get install -y debootstrap

Por la aferojn fluigi, la saman uzantnomon kaj uzantnumeron de la gasgita sistemo ni uzos:

% id -un; id -u

Instalo

Unue la celan dosierujon ni kreu:

% sudo mkdir -p /home/chrt/ubuntu

Sekve, ni diru al debootstrap, ke specifan ubuntan distribuon ĝi devas instali:

% sudo debootstrap xenial /home/chrt/ubuntu http://archive.ubuntu.com/ubuntu

Kiam ĝ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/pts

Agordo

Por ke la ŝanĝradikigmedio funkcias ĝuste, enen ni devas iri kaj ŝanĝojn fari:

% sudo chroot /home/chrt/ubuntu

En ĉi tiu punkto, oni estas ensalutita kiel la ĉefuzanto per Baŝo. Kelkajn ilojn ni instalu:

# apt-get install -y zsh sudo

Tiam la ŝanĝradikigmedian specifan konton ni kreu. Ĝin ni devas akordigi al la tiu, kiun oni nune uzas. Ni supozu, ke la aktuala uzantnomo estas vakelo kun la uzantnumero 1000.

# useradd -u 1000 -m vakelo
# passwd vakelo

Tiam, la uzanton vakelo ni aligu parto de la sudo grupo:

# usermod -aG sudo vakelo

Tiam, ni diru al sudo, ke nin ĝi ne devas invitigi por la pasvorto. Por tion fari, je visudo ni devas uzi:

# visudo

Visudo 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) ALL

al

%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

La redaktilon fermu. Post tio, ankaŭ eliru de la ŝanĝradikigmedio:

# exit

La komandojn difini

De nun ni estas reen sur 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 [email protected]
}

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 [email protected]
  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 kurigu por ke la novaj komandoj estu legitaj de la startiga dosiero.

Elprovado

La daton el la ŝanĝradikigmedio ni akiru:

% cr date

La daton de la uname-komando ni ankaŭ vidu:

% cr uname -a

Je cr oni ankaŭ povas kurigi por eniri al ŝelo:

% cr

Ene ĉi tiu ŝelo, aliron al la ekstermedio la aktuala medio havas, inkluzive la hejmdosierujon. Onin ĉi tio permesas por apojn instali kiu la datumon en la gastiga maŝina medio povas aliri.

Se la ŝanĝradikigmedion oni volas malŝalti eksplicite, kurigu:

% cru

Finrimarkoj

Medion havante por programojn testi kaj programojn kurigi kiuj estas ekskluzivaj al tiu platformo, en malpli peza medio, certe estas helpema aldono.