Copyright © 1996, 2002 Dynamicro Consulting Limited
v1.2, 9 maart 2002
De procedure die in dit document wordt gebruikt om te proberen je van een handleiding te voorzien is als zodanig gevaarlijk voor de programma's en gegevens die op je computer zijn opgeslagen. Je voert een dergelijke procedure geheel op eigen risico uit. De stappen die in dit document zijn beschreven, werkte voor de auteur; er is geen garantie dat ze voor jou ook zullen werken, noch de garantie dat je ze kunt proberen te volgen zonder ernstige schade aan de programma's en/of data op je computer. Je bent geheel op jezelf aangewezen bij elk gebruik dat je maakt van de hierin gepresenteerde informatie, en de auteur zal niet op energelei wijze aansprakelijk kunnen worden gesteld voor de schade of het ongemak in wat voor zin dan ook dat je kunt hebben van het gebruik van dit document.
Dit document is auteursrechtelijk beschermd � 1996, 2000 Dynamicro Consulting Limited, en wordt uitgegeven onder de voorwaarden van de GNU General Public Licentie. Dit betekent voornamelijk dat je het naar wens mag kopiëren en aanpassen, maar anderen niet kunt beletten ditzelfde te doen.
Opmerkingen en vragen kunnen naar de auteur worden gestuurd. Vooral welkom voor gebruik in toekomstige revisies zijn verslagen van succesvolle upgrades van complexe systemen.
Naar docbook geconverteerd
Wat verouderde informatie gecorrigeerd
De historie sectie toegevoegd
Toegevoegd Zolt�n Hidv�gi's suggestie over mtime en ctime. Bedankt Zolt�n!
Toegevoegd sectie Erkenningen
Het doel van dit document is tips te bieden als hulp bij het verwijderen en herinstalleren van een Linux systeem. Het is in geen enkele zin een onfeilbaar middel, maar ik hoop dat het zal dienen als een indicatie, waar je aan moet denken, en de volgorde waarin te handelen. Het zou mij van hulp zijn geweest, als iemand anders iets dergelijks eerder had geschreven toen ik mijn eerste upgrade uitvoerde; dus ik hoop het het jou van hulp zal zijn, als je een linux machine opnieuw wilt opbouwen.
Beschouw het echter niet als heilig. Zelfs de namen van directory's in dit document kunnen anders zijn dan die jij moet gebruiken; een aantal mensen maakt bijvoorbeeld gebruik van /usr/home in plaats van /home; anderen noemen het /u, en een aantal plaatst hun gebruikers zelfs onder /usr zelf! Ik kan niet specificiek zijn over je systeem, dus ik heb de namen gebruikt zoals ze op mijn systeem voorkomen.
Je zult ook bemerken dat ik gebruik maak van Slackware distributies, en dat ik veronderstel dat je voldoende RAM en harddiskruimte hebt om de broncode van een linux kernel te installeren en je eigen kernel te bouwen. Als je systeem er anders uitziet, zullen een aantal van mijn aanbevelingen niet van toepassing zijn; maar ik hoop dat je de algemene uiteenzetting kunt gebruiken bij het opnieuw opzetten van je systeem.
Goede vraag! Doe het niet als het mogelijk te vermijden is! (Dat is de allerbelangrijkste aanbeveling in dit document!!!). Toen deze leidraad voor het eerst werd geschreven, waren er niet veel mensen met harddisks die groot genoeg waren om twee hele Linux installaties te herbergen. Tegenwoordig is dat niet meer zo ongewoon. Bouw je nieuwe systeem in een aparte partitie (of groep partities) opnieuw op als je ook maar enigszins kan, waarbij je de oude intact laat totdat je tevreden bent met de nieuwe precies zoals je het wilt. Als je het kunt voorkomen om het oude systeem af te breken om ruimte te maken voor het nieuwe systeem, voorkom dit dan!! Maar er zijn keren dat je geen keuze hebt.
(Deze voorbeelden zijn een beetje gedateerd, maar ze dienen ter illustratie)
Toen ik bijvoorbeeld een 4Gb harddisk installeerde bemerkte ik dat Slackware 2.0 vintage linux niet wist dat een harddisk een grotere capaciteit kon hebben dan 2Gb, en raakte het hopeloos in de war. Dus moest ik upgraden naar de toen huidige Slackware 2.3. Die upgrade was een harde ervaring, en deels daarom schrijf ik deze notities op. Ik deed zo ongeveer alles fout, en alleen goed geluk en het feit dat ik een andere draaiende Linux box naast me had, voorkwam een ramp.
Nog een voorbeeld: ik bemerkte dat het samenstellen van een werkende a.out linuxkernel in de 1.3 serie met een kant-en-klare Slackware 2.3 installatie me niet lukte (een andere machine, niet die ik eerder verprutste). Ik waagde de sprong, kocht Slackware 3.0 op CDROM en converteerde het naar ELF. Dit keer ging de herinstallatie beter, dankzij de eerdere bittere ervaring, en het diende als grondlegger voor de meeste idee¨n die ik je hier van de hand doe.
Zie hiervoor. Als je het je kunt permitteren je nieuwe systeem samen te stellen op een disk met lege ruimte, doe dit dan! In de rest van dit document wordt er echter van uitgegaan dat dit een van die keren is dat die optie niet beschikbaar is; je moet of ter plaatse bovenop het bestaande systeem een herinstallatie uitvoeren of je moet de gevolgen onder ogen zien en je systeem vanaf het begin af aan opnieuw opbouwen.
Vreemd genoeg is dat laatste veiliger. Als je bovenop een bestaand linux systeem een installatie uitvoert, bestaat de kans dat je oude en nieuwe binaire bestanden, oude en nieuwe configuratiebestanden en gewoonlijk een rommeltje om te beheren doorelkaar krijgt. Het systeem opschonen en dan alleen terugzetten wat je nu nodig hebt is drastisch, maar een effectieve manier om een zuiver resultaat te krijgen. (Uiteraard hebben we het hier over het installeren van een geheel nieuwe linux distributie, niet over het upgraden van één of twee packages! De beste manier om een volledige herinstallatie te voorkomen is, precies, de individuele programma's -- vooral gcc en library's, en binutils recent te houden. Als hetgeen je gebruikt redelijk up-to-date is, en je kunt dit zo houden, zonodig zo nu en dan door compilatie van nieuwe code, dan is een massale upgrade niet nodig.)
Hangt er uiteraard vanaf hoe complex je systeem is. Maar ik schat in dat ik voor een succesvolle upgrade (dat andere? -- niet aan mij vragen! :) ongeveer tien uur kwijt was aan het maken van backups, zes uur aan het weer opbouwen van het systeem tot aan het punt waar ik logins kon activeren, en nog een halve dag daaromtrent voor het terugzetten van de minder kritieke bestanden. Naarmate de tijd verstreek bleef ik kleine dingen ontdekken die nog steeds niet zo zijn zoals ik ze werkelijk hebben wil -- ik zal dit corrigeren zodra ik ze tegenkom -- maar over het geheel zou twintig uur genoeg moeten zijn voor een redelijk complexe heropbouw. Misschien minder als je een herinstallatie vanaf harddisk uitvoert (ik gebruikte een CDROM) of meer als je vanaf diskettes moet installeren. Misschien minder als je een snelle Pentium hebt, meer als het een 386'r is. 't Is maar om je een idee te geven.
Dat waren de slechtere tijden. Met de nu snellere disks en snellere machines en CD-writers gaat het allemaal wat beter. Mijn notebook werd in december 2002 gestolen en toen er een nieuwe kwam, was ik na ongeveer zever uur werk klaar en was het vrijwel compleet, ondanks dat ik het oude systeem kwijtraakte zonder de kans te hebben gehad de laatste wijzigingen te bewaren.
Tot zover de introductie. Zodra je hebt besloten dat de klus moet worden geklaard, kun je in dit document lezen hoe je het kunt doen. Wapen jezelf met vastberadenheid en Jolt of iets dergelijks en:
Het is van groot belang dat je bijhoudt wat je hebt gedaan tijdens het proces waarbij je de voorbereiding en uitvoering van de omschakeling uitvoert. Vooral van belang is een lijst met backups die je zult gaan maken als voorbereiding op de vernietiging van je bestaande systeem.
Over het algemeen genomen, worden grote backups weggeschreven op media welke sequentieel toegankelijk is. Je zult deze volledige backup vast niet willen gebruiken voor het terugzetten van een veelbetekenend aantal bestanden; het bevat te veel bestanden welke je niet wilt. Je kunt beter kleine backups maken van individuele segmenten waarvan je weet dat je ze in z'n geheel terug gaat zetten. Ik zal hier later veel voorbeelden van geven.
Waarom zou je dan beginnen met een volledige backup? Twee basisredenen: ten eerste zal in geval van een rampzalig falen bij de installatie van het nieuwe systeem, er geen enkele manier zijn met minimale moeite terug te keren naar het aanvangspunt. Ten tweede, ongeacht hoe zorgvuldig je de nieuwe installatie voorbereidt, bestaat een zeer grote kans dat één of twee belangrijke bestanden over het hoofd zullen worden gezien. In dat geval zal de onhandigheid bij het herstellen van die één of twee bestanden vanaf de volledige backup voorkeur hebben boven het ongemak van het zonder deze bestanden te moeten doen.
Om tijd en ruimte te besparen, zou je alleen van die bestanden een backup kunnen maken waarvan de mtime of ctime recenter is dan de datum van de oorspronkelijke installatie, als je het distributiemedium van je oude linux versie nog hebt.
Dit is het andere uiterste: je gaat deze bestanden niet terugzetten (voor het overgrote deel in elk geval); je gaat ze vergelijken met de nieuwe bestanden die worden aangemaakt tijdens de installatie. Waarom? Omdat in de nieuwe bestanden gegevens kunnen staan die niet in de oude bestanden stond, of waarbij de oude gegevens op een andere manier worden uitgedrukt. Wijzigingen in protocollen, toevoegingen van nieuwe tools, of de implementatie van nieuwe features in bestaande tools kunnen allen wijzigingen in de opmaak van configuratiebestanden en opstartscripts in de /etc structuur met zich meebrengen, en zeer waarschijnlijk moet je de oude gegevens in deze bestanden bewerken om de nieuwe formaten te behouden en voordeel te hebben van de verbeteringen.
Dit is het meest variabele deel van het werk, en het enige wat ik werkelijk kan doen als hulp is beschrijven hoe ik het op mijn systeem deed, in de hoop dat het als een grove leidraad zal dienen. Voornamelijk dien je elke directory te bekijken met daarin:
bestanden die geen onderdeel uitmaken van je standaard linux installatie, of
bestanden die echt nieuwer zijn dan de bestanden die je zult installeren wanneer je de nieuwe linux installatie uitvoert.
en alleen die bestanden apart houdt die je wilt overbrengen op het nieuwe systeem.
(Een andere mogelijke strategie is een backup te maken van alle bestanden waarbij de mtime of ctime recenter is dan de dag van de vorige linux installatie, zoals hiervoor genoemd en die terug te zetten. Als je dat doet, moet je er rekening mee houden dat de nieuwe linux distributie wellicht versies bevat van een aantal bestanden die nieuwer zijn dan die je hebt bewaard.)
In mijn geval maakte ik een .tgz bestand op het backupmedium voor alle bestanden in
/usr/lib/rn
/usr/lib/smail
/usr/lib/trn (de rest van /usr/lib wordt opnieuw geïnstalleerd)
/usr/local/src
/usr/local/bin
/usr/local/lib
/usr/local/lpfont
/usr/local/man
/usr/local/sbin
/usr/local/thot (andere /usr/local bestanden had ik niet nodig)
/usr/openwin
/usr/src/lilo-17 (omdat mijn nieuwe Slackware nog steeds was voorzien van versie 16)
/usr/src/linux-1.2.13 (omdat ik wat aanpassingen had gemaakt)
/usr/X11R6/lib/X11/app-defaults
/usr/X11R6/lib/X11/initrc (de rest van XFree86 werd opnieuw geïnstalleerd)
/var/named
/var/openwin
/var/texfonts
Mijn machine was relatief eenvoudig in die zin dat er geen spoolbestanden waren om me zorgen om te maken. Ik heb geen newsspool op deze box, en aangezien er slechts twee gebruikers zijn, was het 't eenvoudigst alle mail te lezen voordat het systeem zou worden afgesloten. Anders zou op het laatste moment nog een backup moeten worden gemaakt van de /var/spool directory's. (en uiteraard ook van de news library en site directory's!)
Met een beetje geluk, is in je nieuwe package een opstartbare CD opgenomen en is deze stap niet nodig. Als je geen cd-romstation hebt of er niet van kunt booten, dan zijn details over het aanmaken van de diskettes te vinden in de installatiehandleiding van je distributie.
Je hebt twee diskettes nodig, éé voor elk.
Als je hier eenmaal mee klaar bent, is het grote moment aangebroken. De volgende stap verwijdert het systeem voor productie.
Dit is het laatste wat op het oude systeem moet gebeuren voordat je het gaat verwijderen, om de meest bijgewekte gebruikers- en rootinformatie over te brengen. Om logins te beletten, geef je gewoon de opdracht "getting ready for upgrade" >/etc/nologin (uiteraard als root).
Of als je die mogelijkheid hebt, met de installatie-CD zelf.
In de installatiehandleiding zal worden uitgelegd hoe je dit doet. Hiermee zal het oude systeem worden verwijderd. Van nu af aan ben je afhankelijk van de kwaliteit van de backups die je in de eerdere stappen hebt gemaakt! Je bent gewaarschuwd!
Er zijn reeds verscheidene goede documenten waarin dit wordt beschreven, dus ga ik hier niet in detail op in. Ga verder met waar het nieuwe systeem van de harddisk kan booten.
Zorg ondertussen ook dat je een diskette hebt waarmee je kunt booten, aangezien de kernel die de linux setup installeert, moet worden vervangen en tijdens dat proces ongelukken kunnen gebeuren. Zorg ervoor dat je de ontwikkelaarspackages en de kernelbroncode installeert.
Zoals hiervoor beschreven kun je niet zomaar alle oude bestanden in /etc terugzetten en daarna verwachten dat alles juist werkt. Met een aantal bestanden kun je dat wel doen; bijvoorbeeld met /etc/XF86Config (zolang je dezelfde versie van XFree86 gebruikt met dezelfde videohardware in de nieuwe installatie als in de oude installatie). Voor het overgrote deel echter kun je het beste diff gebruiken om de oude en nieuwe bestanden voor het kopiëren met elkaar te vergelijken. Kijk vooral uit voor belangrijke wijzigingen in de bestanden in /etc/rc.d en dergelijke, wat in zou kunnen houden dat je de oude configuratie terug moet brengen door deze bestanden handmatig te wijzigen, in plaats van het kopiëren van de oude rc-scripts vanaf je backup. Start het systeem opnieuw op als je hiermee klaar bent.
Zelfs als je dit niet beslist hoeft te doen om een kernel te verkrijgen die je hardware ondersteunt, is dit het wel waard om het te doen om een kernel te krijgen die geen massa's drivers bevat voor zaken die waarmee je machine niet is uitgerust. En nog belangrijker, om een goed begrip te krijgen van hoe je configuratie-opties van invloed zijn op het functioneren van je systeem! Aangezien linux blijft uitbreiden, is de mogelijkheid voor distributieverkopers om een kernel te configureren die voor iedereen voldoet zeer beperkt geworden. Zie de Kernel HOWTO voor details hoe je dit doet; het lijkt in eerste instantie gecompliceerd, maar het valt uiteindelijk wel mee; doe het gewoon stap voor stap.
Installeer de gecompileerde kernel eerst op een diskette; zodra je daar goed mee kunt booten, installeer je het op de harddisk. Start lilo op als je daar gebruik van maakt en start de computer opnieuw op.
Een aantal binary's moet wellicht opnieuw vanuit de directory's met broncode worden geïnstalleerd; ik moest dit bijvoorbeeld doen met lilo, omdat mijn versie nieuwer was dan die van de Slackware installatie en ik had geen moeite gedaan de binary in /sbin te bewaren. Controleer de teruggezette programma's en bevestig daarvan het bestaan en de juistheid van configuratiebestanden, library's enzovoort. In een aantal gevallen moet je wellicht wat zaken in een specifieke volgorde terugplaatsen; je hebt toch wel notities gemaakt tijdens de backup? ;-)
Toen ik dit schreef was deze stap van belang, maar niet kritiek; het Internet was zelfs in 1996 een vriendelijker plaats dan het tegenwoordig is. Als je vanaf je machine toegang hebt tot het Internet, is deze stap volkomen noodzakelijk, en er zijn volledige boeken aan gewijd om dit op orde te krijgen; ik kan hier niets meer doen dan een paar basisaanwijzingen bieden:
Controleer bestandspermissies en directorypermissies om er zeker van te zijn dat de toegang ertoe noch te beperkt noch te makkelijk is. Ik vind dat Slackware neigt naar een meer open omgeving dan ik graag wil, dus wijzig ik de permissie 755 voor binary's in 711 in de ../bin directory's en dergelijke. Of zelfs in 700 voor de bestanden in .../sbin. Speciale aandacht is nodig als je ftp, telnet of webserver hebt getransporteerd; maar als je die draaide, dan hebt je dat vast reeds overdacht. :)
Kijk in /etc/inetd.conf of /etc/xinetd.conf en zorg dat je geen Internet services actief hebt die je niet nodig hebt. Doorloop met hetzelfde doel ook de bootscripts in /etc/rc.d en dergelijke. Controleer je firewall rules als je box een Internet gateway is of toegang heeft tot Internet.
Nog even en je bent waarschijnlijk details aan het opschonen; maar de bulk van het werk is klaar. Veel plezier!