Een paar weken geleden schreef ik een artikel over het uitvoeren van meerdere X-sessies zonder virtualisatie, wat aantoonde hoe je meerdere bureaublad-omgevingen tegelijkertijd op dezelfde computer kunt uitvoeren en er met een druk op de knop tussen kunt schakelen. Ik geef toe dat dit enigszins opwarmde voor de echte show - hoe je meerdere Linux-distributies tegelijk kunt uitvoeren zonder de nadelen van virtualisatiesoftware te moeten aanpakken.

Vandaag gaan we chroot gebruiken om bepaalde delen van je Linux-bestandssysteem te behandelen als (bijna) volledig geïsoleerde systemen. Hiermee kunt u allerlei interessante dingen doen, zoals een volledig Gentoo-systeem uitvoeren vanuit uw Ubuntu-systeem met weinig tot geen prestatieverlies.

Hoe het werkt

Voordat we aan de slag gaan, is het een goed idee om precies te bespreken wat we doen en hoe het allemaal werkt. Wanneer je je Linux-computer opstart, doorloop je een aantal stappen om op te starten. GRUB, jouw bootloader, laadt de kernel die gespecificeerd is in GRUB's configuratiebestand, hecht het aan je rootpartitie en voert de init-scripts uit die daar zijn opgeslagen. Vanaf dat moment wordt uw systeem vanuit die rootpartitie uitgevoerd.

We gaan een host Linux-systeem gebruiken (ik doe het van Debian maar de stappen moeten vrijwel identiek zijn ongeacht de distributie) die door dat normale opstartproces gaan, maar dan een bepaald deel van je bestandssysteem behandelen ( like / mnt / guest) als zijn eigen geïsoleerde installatie. Dat gastsysteem doorloopt niet het opstartproces, laadt geen kernel en voert geen init-scripts uit. U vertelt uw gastheer gewoon "maak verbinding met deze map alsof het de nieuwe rootpartitie is". Het onderstaande diagram zou moeten helpen laten zien wat ik bedoel.

Dit is ongeveer hoe de bestanden op je systeem worden neergezet, gewoon daar zittend als normale bestanden op een normale partitie, behandeld zoals alle andere bestanden totdat we "chroot" gebruiken om ze iets bijzonders te maken.

Maar zodra we chroot (CHange ROOT) gebruiken en naar / mnt / guest verwijzen (of waar we de bestanden in de volgende stap plaatsen), is die map nu zijn eigen rootbestandssysteem. Het wordt volledig onbewust van het gastheersysteem. Alle programma's en opdrachten die binnen die nieuwe root worden uitgevoerd, worden uitgevoerd op basis van de software in die nieuwe branch.

Als u bijvoorbeeld in chroot bent in / mnt / guest en 'ls' typt, leest u de opdracht 'ls' vanuit die chroot-omgeving, volledig onbewust van de opdracht 'ls' op het hostsysteem. Als u "firefox" typt, wordt Firefox vanaf de nieuwe hoofdmap uitgevoerd, ongeacht of Firefox op de host is geïnstalleerd.

De Guest Distro verkrijgen en gebruiken

Om dit te laten werken, heb je alleen het basisbestandssysteem van een Linux distro nodig, welke distro dat ook is. Debian heeft voor dit doel een geweldige tool genaamd debbootstrap die de basisbestanden downloadt en plaatst waar je maar wilt. Om dingen interessant te houden en te laten zien wat chroot kan doen, gaan we een Gentoo-bestandssysteem gebruiken voor onze gast. Om de dingen eenvoudig en direct te houden, ga ik de download van de tarball opnemen als een van de stappen die we zullen uitvoeren op de opdrachtregel.

Deze stappen zullen alle basisbestanden voor een Gentoo-systeem downloaden, ze extraheren naar onze doelmap (ik gebruik / mnt / guest, maar je kunt alles gebruiken wat je maar wilt) en dan chrooten in die map, zodat het wordt behandeld als nieuwe hoofdmap (/). Mogelijk hebt u root (sudo) -machtigingen nodig voor sommige van de volgende opdrachten.

 mkdir / mnt / gast cd / mnt / gastwget http://distfiles.gentoo.org/releases/x86/2008.0/stages/stage3-x86-2008.0.tar.bz2 tar -jxvf stage3-x86-2008.0.tar.bz2 chroot / mnt / gast 

Die opdrachten nemen de volgende stappen, in volgorde van regelnummer:

  1. Creëer de ruimte voor ons gastsysteem om te leven
  2. Ga die ruimte in
  3. Download de Gentoo-systeembestanden
  4. Pak ze uit
  5. Behandel deze nieuwe ruimte als de hoofdmap (/)

De volgende schermafbeelding moet helpen aantonen dat zodra we chroot hebben gebruikt om onze nieuwe map als root te verbinden, deze nu is geïsoleerd van de vorige takken in de structuur van het bestandssysteem.

Om de schermafbeelding uit te leggen, beginnen we met een normale opdrachtprompt op het hostsysteem. Ik gebruik pwd om mijn huidige directory weer te geven, waarbij alle Gentoo-bestanden als gewone oude bestanden zitten zonder speciale betekenis. Vervolgens gebruik ik chroot om deze directory als de nieuwe root te behandelen en je kunt nu visueel zien dat mijn prompt is gewijzigd omdat de opdrachtregel nu alle informatie (inclusief hoe de prompt moet worden getekend) uit de Gentoo-rootomgeving haalt. ALLE opdrachten en acties die ik neem als ik chroot in, zijn afhankelijk van de opdrachten die in die nieuwe bestandsstructuur bestaan. Wanneer ik opnieuw typ pwd, zegt het niet meer / mnt / guest, omdat voor zover die shell weet, er niets anders bestaat dan wat het in die boom ziet.

Dingen om in gedachten te houden

Zoals ik hierboven al liet doorschemeren, is dit niet 100% geïsoleerd van het hostsysteem. De chroot-omgeving is nooit "opgestart", dus heeft het nooit zijn eigen kernel geladen en heeft het nooit zijn eigen init-scripts uitgevoerd. In ons voorbeeld hebben we Gentoo uitgevoerd op de kernel die de host (in mijn geval Debian) heeft opgestart.

Deze methode is zeker geen vervanging voor virtualisatie en kan niet alles doen wat VM-software kan doen. Het gastsysteem "boot" nooit initialen of start-scripts, en het is mogelijk dat je gast-besturingssysteem enkele functies vereist die je host-kernel niet biedt.

Waarvoor?

In de tijd dat ik deze techniek heb genoemd tegen mensen in het verleden, hebben ze vaak iets gezegd in de trant van "Dat is cool, maar waar zou je het voor gebruiken?". Persoonlijk heb ik verschillende toepassingen voor chroot gevonden :

  • Test ontwikkelsoftware in een ongerepte omgeving
  • Voer software uit die is bedoeld voor een andere distributie
  • Voer software uit die een oudere of nieuwere versie van uw huidige distro nodig heeft
  • Krijg toegang tot een Linux-installatie op een andere partitie zonder opnieuw op te starten
  • Start een Live CD op en gebruik chroot om je installatie of GRUB te repareren
  • Toegang tot een station waar je de gebruiker / pass bent vergeten
  • Voer een 32-bits app uit in een 64-bits omgeving

En ik weet zeker dat er nog veel meer is waar ik nooit van heb gehoord. Heb je ooit chroot gebruikt om meerdere distributies uit te voeren? Hoe een Linux-systeem van een live-cd te repareren? Laat het ons weten in de comments.