Deze mini-howto is bedoelt als een algemene inleiding voor updaten van een draaiende FreeBSD systeem naar de STABLE branche en het updaten van de ports.
Oké … je hebt dus een FreeBSD release geïnstalleerd en het draait prima … maar je hebt gehoord dat er allerlei bugs zijn gevonden die je systeem blootstellen aan allerlei exploits en andere enge dingen die je niet wilt meemaken …. wat nou ?
[pagebreak]
Er is een simpele oplossing om je systeem up-to-date te houden met de cvsup repository … Dat wil zeggen : elke keer als er een verandering in de systeem sources plaatsvindt word het naar een centrale cvs server geupload en daarna verspreid over allerlei mirrors‚ zo kan je de source downloaden en opnieuw compileren‚ dan zijn je binary’s en systeem up-to-date.
De CVS source tree kent 2 grote trees: de STABLE en CURRENT… de namen spreken voor zich.
CURRENT is niet bedoelt voor normale gebruiker of systemen die belangrijke dingen moeten doen… je kan het vergelijken met een beta-test systeem die bedoeld is voor de meer geavanceerde gebruiker en ontwikkelaar.
De STABLE daarentegen is de tree die je moet hebben om up-to-date blijven en voor alle laatste fixes tegen exploits e.d.
Als je gebruik maakt van de ports dan is het ook mogelijk (en verstandig) om de laatste ports op te halen‚ want die bevatten dan ook allerlei patches fixes en updates.
Hier ga ik een uitleg geven hoe je het snelst alles in een keer kan ophalen en installeren.
Hoe ga je te werk en wat heb je nodig :
1. Algemene kennis van FreeBSD zoals een port of package installeren en werken met een shells.
2. Een draaiende FreeBSD systeem met netwerk of dialup
3. cvsup-bin package
[b]De eerste stap … de cvsup package.[/b]
[b][i]Voor alle handelingen die hieronder beschreven staan heb je de rechten van de root gebruiker nodig[/b][/i]
[shell]# pkg_add -r cvsup-without-gui[/shell]
[b]Het bewerken van de config file voor cvsup[/b]
Nadat je de cvsup-bin package geinstalleerd hebt heb je een config file nodig om de sources naar je wens op te halen‚ voorbeelden zijn te vinden in /usr/share/examples/cvsup/ je hebt de stable-supfile nodig.
Kopieer die file naar /etc/
[shell]# cp /usr/share/examples/cvsup/stable-supfile /etc
[/shell]
en ga het bewerken met ee of vi of een editor naar je keuze
Ikzelf ga voor de ee editor die standaard met FreeBSD meegeinstalleerd word.
[shell]# ee /etc/stable-supfile
[/shell]
De file self bevat bijna alle informatie (in het engels) die je nodig hebt om het te bewerken‚ maar ik zal alles even kort doornemen:
Eerst moet je een mirror opgeven waar je de laatse sources wilt ophalen. De snelste mirrors voor nederland zijn cvsup.nl.freebsd.org, cvsup2.nl.freebsd.org en cvsup5.nl.freebsd.org.
Zo ziet je eerste regel uit :
[shell]*default host=cvsup.nl.FreeBSD.org[/shell]
[b]LET OP ! DE “*” VOOR DE REGELS MOET BLIJVEN STAAN!![/b]
Standaard worden de sources opgeslagen in /usr/src daar kun je ze ook het beste laten.
Dus de volgende 2 regels kun je ook onveranderd laten. Het kan wel handig zijn als je meerdere sourcetrees wilt opslaan bijvoorbeeld eentje van vandaag en eentje van vorige week dan kan je de paths veranderen. Aangezien wij het nu niet willen‚ laten we de volgende 2 regels zo eruitzien:
[shell]*default base=/usr
*default prefix=/usr[/shell]
daarna moet je aangeven welke branche je wilt ophalen CURRENT of STABLE en welke release tree je wilt. . We hebben de stable van de 4.0 releasetree nodig onze regel gaat er zo uitzien :
[shell]*default release=cvs tag=RELENG_4[/shell]
Als je iets conservatiever bent, dien je tag te veranderen in:
[shell]RELENG_4_9[/shell]
voor de security updates van 4.9.
Voor 4.8 is het natuurlijk RELENG_4_8
Deze regel kun je gewoon laten staan:
[shell]*default delete use-rel-suffix[/shell]
Deze regel zorgt ervoor dat de sources ingepakt naar je toe gestuurd worden zodat je het sneller kan ophalen. Het wordt dan vervolgens door jou machine weer uitgepakt‚ het is niet aan te raden om deze regel weg te halen behalve als je erg snelle verbinding hebt.
[shell]*default compress[/shell]
Dat waren de algemene instellingen voor het cvsup process nu moet je kiezen wat je wilt ophalen. Ik persoonlijk haal altijd de complete source op met “src-all” regeltje maar als je een trage verbinding hebt en je weet zeker wat je wel en niet nodig heb dan kan je specifieke keuzes maken. Bijvoorbeeld als je alleien de kernel source wilt ophalen. In deze voorbeeld zal ik het bij “src-all” houden‚ het is ook aan te raden voor iemand die het voor het eerst doet en als je niet zeker weet wat je wel en niet nodig hebt.
Dus nog een regel erbij (let op hier dus geen “*” ervoor):
[shell]src-all[/shell]
Met een extra regeltje kan je ook ervoor zorgen dat je de laatste ports ophalt‚ deze heb je niet per se nodig.
[shell]ports-all tag=.[/shell]
Nu we een complete file hebben‚ hier nog een overzicht van hoe het eruitziet in zijn geheel:
[shell]*default host=cvsup.nl.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_4
*default delete use-rel-suffix
*default compress
src-all
ports-all tag=.
[/shell]
Sla je bestand op en geef het volgende commando op in je shell (ik raad het niet aan om cvsup update onder X te laten verlopen‚ dit voorbeeld is bedoeld voor een normale shell)
[shell]# cvsup -g -L 2 /etc/stable-supfile
[/shell]
Hierna begint de cvsup process‚ afhankelijk van je verbinding en de drukte op de cvsup server kan het even duren.
Tip: als je alleen de ports wilt updaten dan kun je de regeltje met “src-all” wegquoten met een “#” ervoor zo word ie genegeerd. zelfde geld voor ports-all.
[b]De “Wereld” opnieuw bouwen. oftwel de sourcetree compileren … [/b]
Nadat je de laatste sources met success hebt opgehaald rest je nog een laatste taak je moet de source tree (inclusief de kernel) opnieuw compileren en in het systeem integreren. Het is makkelijker dan het klinkt maar het kan wel je systeem min of meer in een onbruikbare staat achterlaten als je het niet goed doet…. En het kan behoorlijk lang duren afhankelijk van de snelheid van je CPU en harde schijven. Gelukkig hoef je er niet de hele tijd bij te zijn.
Nadat cvsup helemaal klaar is met het ophalen van de sources doe je het volgende (let op als je remote via ssh werkt wordt zo de verbinding verbroken, dus voer deze stap niet uit als je niet fysiek bij server kan)
[shell]# init 1 [/shell]
Hiermee word je system naar de “single user mode” gebracht zodat je het compileren van je sources kan beginnen zonder dat je andere draiende services stoort en zonder dat andere gebruiker veel processor tijd gebruiken. Het is over algemeen aan te raden om het in single user mode te doen‚ maar het kan ook in multiuser mode.
Nadat je de “single user mode” shell voor je hebt doe het volgende:
[shell]# cd /usr/src/
# make -j4 buildworld [/shell]
De -j4 is snelste op single CPU systemen heb je dual, maak er dan -j8 van ofzo.
Dit gaat even duren‚ ga ondertussen een film kijken ofzo ….. 🙂
Zodra je “wereld” klaar is is er nog een laatste handeling die je moet doen voordat je terug kan naar je nieuwe up-to-date systeem …. Een nieuwe kernel maken … zie voor meer details de kernel howto‚ hieronder nog’s snel hoe je het kan doen als je al een kernel config file hebt:
[shell]# make buildkernel KERNCONF=KERNEL[/shell]
ik ga er vanuit dat je configfile KERNEL heet
[shell]# make installkernel KERNCONF=KERNEL[/shell]
Als alles goed gaat en je kernel is geinstalleerd
Hierna gaan we de nieuwe binary’s installeren:
[shell]# cd /usr/src
# make installworld[/shell]
Omdat config file’s geweest kunnen zijn dienen we deze ook nog bij te werken. Dit doen we met mergemaster.
[shell]#mergemaster[/shell]
Als laatste gaan we stand/sysinstall up to date brengen:
[shell]# cd /usr/src/release/sysinstall
# make all install[/shell]
Om de boel af te ronden dient er alleen nog gereboot te worden:
[shell]# reboot [/shell]
Nadat je systeem gerebot is is het up-to-date. Om snel te zien welke release je hebt kun je dit doen:
[shell]$ uname -a[/shell]
Nog een Tip : je kan je ports wekelijks laten verversen met cron‚ zie [i]man cron[/i] en[i] man crontab[/i]
Veel success !!!
Zie ook de hofdstuk over CVSUP in de FreeBSD Handbook:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html
P.S. Er zijn nog andere methoden om je source te cvsupen dan de cvsup-bin package
maar deze methode is wel de meest praktische in mijn ogen.
Deze howto is geschreven door Robert Vartanov (Fenix) en mag verandert worden door iedereen die denkt het beter te weten of laatste veranderingen of methodes wil toevoegen of wijzigen.
Graag onvang ik alle opmerkingen vragen en veranderingen per email op fenix@home.nl.
Ik ben niet verantwoordelijk voor de gevolgen die kunnen ontstaan tijdens het verrichten van de in deze howto genoemde handelingen.
Anonymous says
duidelijke howto, Fenix.
echter een vraag die zich opdringt is naar het waarom en ook een beetje de noodzaak ervan.
je hebt een freebsd installatie en wanneer ga je een nieuwe “wereld”
bouwen? na een aantal maanden? als er een nieuwe release is, bv van 4.6 naar 4.7 straks? of zijn er mensen die na iedere bug direct de hele boel gaan compileren etc.?
Fenix says
Eigenlijk heb je de vraag al zelf beantwoordt. 🙂
Anonymous says
Ik heb mijn FreeBSD box volgens deze “how to ” van 5.0 naar 5.1 ge-update
Als je een nieuwe kernel maakt kijk dan eerst in :
/usr/src/UPDATING
het kan zijn dat je joun kernel file moet worden veranderd voor de nieuwe versie van FreeBSD, tegen dat probleem liep ik zelf ook op.
Bron : http://unix.derkeiler.com/Mailing-Lists/FreeBSD/questions/2003-06/2887.html
liquid_ says
Hoi het is inderdaad een goeie HOWTO maar het is mergemaster -p en je dient de kernel eerst in single usermode te testen lijkt mij. Is maar een tip. Geen flame of iets.
Groetjes,
liquid_
Anonymous says
Volgens mij doe je voor make buildworld mergemaster -p (prebuild) en daarna gewoon mergemaster.
zo doe ik het
cd /usr/src
mergemaster -p
make -j4 buildworld
make buildkernel KERNCONF=KERNEL_NAAM
make installkernel KERNCONF=KERNEL_NAAM
shutdown now (single user mode)
cd /usr/src
make installworld
mergemaster
fastboot
Anonymous says
piet says
Alles ging goed totdat ik mergmaster ging gebruiken, wat te doen bij al die vragen die je moet beantwoorden ?