mok@imsb.au.dk
and Peter von der Ahé, pahe+rhcd@daimi.au.dk
dag@wieers.com
Er kunnen verschillende redenen zijn om je eigen CD te maken. Misschien betaal je liever geen $50 voor een echte Red Hat distributie. Of misschien heb je liever een Red Hat distributie met je eigen programma's en eigen updates.
In dezelfde 'sfeer' van de Linux gemeenschap maakt Red Hat zijn distributie beschikbaar voor verschillende platformen op hun FTP site.
De top level directory voor Red Hat Linux release 5.1 ( pub/redhat/redhat-5.1) bevat distributies voor de verschillende platformen en een directory die de updates van verschillende packages bevat die verspreid werden nadat de CD op de markt kwam.
SRPMS/ alpha/ i386/ sparc/ updates/
In dit dokument gebruiken we de i386 distributie als voorbeeld. De procedure die in dit dokument staan werkt ongeveer ook zo voor alle andere platformen die Red Hat support (Alpha, Sparc, ppc, etc.), maar is enkel getest voor het i386-platform (de auteurs zijn erg ge-interesseerd in bijkomende informatie voor andere platformen). De root van de i386 directory ziet er zo uit:
-rw-r--r-- 8 ftpuser ftpusers 19686 May 27 1997 COPYING -rw-r--r-- 1 ftpuser ftpusers 3023 May 7 09:58 README -rw-r--r-- 10 ftpuser ftpusers 2751 Sep 18 1997 RPM-PGP-KEY drwxr-xr-x 5 ftpuser ftpusers 96 Jul 15 08:34 RedHat/ drwxr-xr-x 5 ftpuser ftpusers 8192 Jul 15 08:35 doc/ drwxr-xr-x 5 ftpuser ftpusers 8192 Jul 15 08:35 dosutils/ drwxr-xr-x 5 ftpuser ftpusers 8192 Jul 15 08:33 gnome/ drwxr-xr-x 2 ftpuser ftpusers 96 Jun 7 02:47 images/ drwxr-xr-x 4 ftpuser ftpusers 96 Jun 5 12:24 misc/
De doc
directory bevat een groot deel van informatie. Heel belangrijk is de Red Hat
installatie handleiding (in het Engels) in HTML-formaat in de directory
doc/rhmanual/manual/.
Vervolgens staan er een aantal FAQs en tenslotte de hele HOWTO en mini-HOWTO verzameling.
De images
directory bevat boot floppy images die gekopieerd worden naar diskette. In
de recentste distributie (5.1), zijn er 2 disk images beschikbaar. De boot-image noemt
boot.img
, die is nodig als de installatie gebeurd rechtstreeks van CDROM. Als je
installeert van local hard disk, NFS gemounted disks or FTP dan is de bijkomende disk
image supp.img
waarschijlijk nodig.
De misc
directory bevat broncode en programma's die nodig zijn voor de installatie.
Het belangrijkste deel van de directory tree is de RedHat
directory:
drwxr-xr-x 2 ftpuser ftpusers 24576 Jul 15 08:35 RPMS/ drwxr-xr-x 2 ftpuser ftpusers 8192 Jul 15 08:32 base/ -rw-rw-rw- 59 ftpuser ftpusers 0 Aug 15 14:21 i386 drwxr-xr-x 4 ftpuser ftpusers 96 Jun 5 12:24 instimage/
De RPMS
directory bevat the grote deel van de Red Hat distributie bestaande uit RPM
(Red Hat Package Manager) files. Een RPM package bestaat uit binaries (gecompileerde
programma's) samen met alle relevante configuratiefiles en documentatie. Zie de sektie
RPM packages voor meer informatie.
De base
directory bevat verschillende registratie-files die nodig zijn tijdens het
installatie-proces, bv. de comps
file, die definieert de components (groep van
packages) dat gebruikt wordt tijdens de fase "Choose packages to install".
Een andere belangrijk bestand in de base
directory is het bestand
hdlist
die het meeste van de header-fields van de RPM's in de
RPMS
directory bevat.
Dit betekent dat al de 'dependencies' tussen packages achterhaald kunnen worden
door gewoon de hdlist
te lezen zonder dat elk package afzonderlijk
gelezen moet worden. Wat interessant is voor oa. FTP-installaties.
hdlist
wordt ook gebruikt voor de 'mapping' van packages tot file-names.
(bv perl
naar perl-5.004-6.i386.rpm
. Dit betekent dat als je updates
wil toevoegen aan je eigen CD (zie sektie
Updates toevoegen) je de
hdlist
zal moeten wijzigen. Dit proces wordt beschreven in sektie
Een nieuwe hdlist-file genereren.
De instimage
directory bevat een 'life filesystem' met een reeks programma's en
gesharede libraries die nodig zijn tijdens het installatie-proces.
Het grootste deel van de Red Hat distributie bestaat uit een reeks RPM (Red Hat Package
Manager) bestanden. Een RPM package bevat voornamelijk binaries (gecompileerd programma's)
samen met relevante configuratie-bestanden en documentatie.
Het
rpm
programma is een krachtige package
manager, die kan gebruikt worden om packages te installeren, query'n, verifieren, updaten,
verwijderen en zelf bouwen in het RPM-formaat. Rpm
houdt een database bij van alle
geinstalleerde software packages zodat informatie over deze geinstalleerde software ten
alle tijde beschikbaar is.
De binary RPM bestanden in de distributie zijn gebouwd op een systeem dat
de distributie zelf gebruikte. Dit is belangrijk, want de meeste programma's
in deze packages hangen af van gesharede libraries. Sinds Red Hat versie
5.0 werd de nieuwe versie 2 van de GNU standaard C library (die 64-bit clean
is, dus werkt op 64bit systemen) gebruikt. Deze
versie van de library wordt meestal glibc
of libc6
genoemd. Alle executables in
de distributie zijn gelinked aan deze library. Als je probeert binaries te installeren van
andere distributies dan is de kans groot dat het niet zal werken, tenzij je het
libc5-package installeert voor backward compatibility.
De namen van de RPM packages bevatten de suffix .arch.
rpm
, waarbij
arch de architectuur (of het platform) is. Dit kan i386
zijn voor Intel systemen.
De packages die je wil installeren moeten overeenkomen met jouw systeem, en dus meer
bepaald jouw versie van shared libraries die op je systeem geinstalleerd zijn.
Het
rpm
programma is meestal vrij goed om
te voorkomen dat je fouten begaat, maar let op. Er zijn manier om toch dingen te doen die
je beter niet doet en je moet zeker weten wat je doen als je bepaalde packages forceert
bij installatie. Zolang je gebruik maakt van je eigen distributie (en files die op je CD
staan) mag je er zeker van zijn dat je weinig fouten maakt.
Als je RPM packages ontdekt die niet geinstalleerd werden tijdens het installatie-proces dan is dat geen enkel probleem. Je kan op elk moment (als root) RPM-packages installeren op volgende manier:
rpm --install WindowMaker-0.18-1b.i386.rpm
Je kan zelfs rechtstreeks van Internet installeren, als jet het URL kent van het package tenminste:
rpm --install ftp://rufus.w3.org/redhat-contrib/noarch/mirror-2.9-2.noarch.rpm
Een andere versie van een RPM package bevat de originele source-code die nodig is om een
package zelf te bouwen. Deze packages hebben de extentie .src.rpm
en bevinden
zich in de SRPMS
directory. Deze packages zijn niet nodig op de installatie CD, en
er is eigenlijk niet eens genoeg plaats op een 74 minuten CD ervoor. Natuurlijk kan je
een eigen CD maken met enkel source-packages.
Je hebt een kopie nodig van de distributie op een beschrijfbare schijf die toegankelijk is vanaf de komputer met de CD writer (duh!). Als je de laatste updates, dan zal die directory ook toegankelijk moeten zijn vanaf diezelfde machine, ofwel een lokale schijf, ofwel een NFS-gemounte partitie op een andere komputer of een JAZ-disk.
Je kan de distributie kopieren van een Red Hat CD, of je kan hem afhalen via FTP.
Als je voor FTP kiest, dan is de beste manier om een korrekte kopie van de distributie
te verkijgen, gebruik te maken van het mirror package
.
Mirror is een gesofistikeerde perl-script dat de inhoud van een directory vergelijkt met een server op afstand. Het gebruikt FTP om de files van de remote site af te halen die niet lokaal staan, en verwijdert files die lokaal wel staan maar niet remote. Het mirror-programma is geconfigureerd dmv. een configuratie-file. Het mirror package is verkrijgbaar als een RPM van rufus.w3.org.
Maak je lokale kopie mirror.redhat
van de mirror configuratie file en
verander de relevante informatie vanboven in de file. Na het default gedeelte,
definieer deze packages:
package=updates site=ftp.sunsite.auc.dk exclude_patt=(alpha/|sparc/) remote_dir=/disk1/ftp.redhat.com/pub/redhat/redhat-5.1/updates local_dir=/jaz/redhat-5.1/updates package=dist site=ftp.sunsite.auc.dk exclude_patt=(alpha/|sparc/) remote_dir=/disk1/ftp.redhat.com/pub/redhat/redhat-5.1/i386 local_dir=/jaz/redhat-5.1/i386
Het volgende commando zal een kopie van de gehele Red Hat tree afhalen en plaatsen op je lokale schijf. *Denk na* voordat je dit doet, je staat op het punt ongeveer 350Mb data af te halen.
mirror -pdist mirror.redhat
Dit zal de Red Hat FTP site mirroren naar je lokale schijf. De inhoud van een Red Hat
distributie verandert niet tussen releases, so you only need to download this package
ONCE. Al de wijzigingen aan de distributie vind je in de updates
directory.
Dus, als je een up-to-date mirror van de Red Hat distributie wil hebben, moet je enkel
de updates
directory vernieuwen. Dat doe je met het volgende commando:
mirror -pupdates mirror.redhat
Je kan dit regelmatig starten, bijvoorbeeld eenmaal per week, via een cron scriptje. De Red Hat distributie is beschikbaar op een groot aantal FTP-servers verspreid over de hele wereld, die dagelijks ge-update worden van de hoofdsite op ftp://ftp.redhat.com/pub. Je neemt best een FTP-site dicht bij jou, zie ook de Red Hat FAQ.
Om updates toe te voegen, heb je write-access nodig op dedistributie-directory, met een werkende versie van rpm. Er zijn 3 stappen die je moet volgen:
Als je een mirror onderhoudt van de updates
directory, dan kan je op ieder
moment een CD produceren met de nieuwe updates door deze drie stappen te herhalen.
Tijdens het installatie process worden sommige programma's rechtstreeks van CD gestart.
Spijtig genoeg behoudt een FTP programma niet altijd de file permissies van de files en
directory's die hij afhaalt. Daarom is het belangrijk dat je ervoor zorgt dat de
execute-permissie wordt gegeven aan programma's, shellscripts en shared libraries,
voordat het geheel op CD wordt gezet. Dit wordt gedaan door het runnen van het
updatePerm
script op je lokale kopier van de distributie:
#!/bin/bash RHVERSION=5.1 LIST=/tmp/er3hd3w25 CDDIR=/jaz/redhat-${RHVERSION} # Zoek naar alle directory's en zorg dat ze allen de +x permissie hebben find $CDDIR -type d -exec chmod -c 755 {} \; # Zoek naar alle bestanden die uitvoerbaar, shell- of perlscripts zijn find $CDDIR -type f | file -f - | grep -v RPM \ | egrep -i 'executable|perl|bourne|shell' | cut -f1 -d: > $LIST # Zoek naar gedeelde library's find $CDDIR -name \*.so >> $LIST # Maak ze uitvoerbaar while read file do if [ ! -x $file ] ; then chmod -c 755 $file fi done < $LIST /bin/rm $LIST exit 0
Het volgende scriptje met de naam updateDC
kopieert alle files van de update
directory naar de RPMS-directory. Het script gebruikt rpm om te achterhalen welk
package nieuwer is in de update directory. Oudere packages worden verplaatst naar
${OLD}
directory.
#! /bin/bash # This script updates rpms in a RedHat distribution found in $RPMDIR. # The old rpms will be placed in $OLDDIR. # The new rpms should be located in $UPDDIR. # The architechture is $ARCH. RHVERSION=5.1 ARCH=i386 CDDIR=/jaz/redhat-${RHVERSION} RPMDIR=${CDDIR}/${ARCH}/RedHat/RPMS UPDDIR=${CDDIR}/updates/${ARCH} OLDDIR=${CDDIR}/old if [ ! -d $OLDDIR ] ; then echo making directory $OLDDIR mkdir $OLDDIR fi allow_null_glob_expansion=1 for rpm in ${UPDDIR}/*.rpm ; do NAME=`rpm --queryformat "%{NAME}" -qp $rpm` unset OLDNAME for oldrpm in ${RPMDIR}/${NAME}*.rpm ; do if [ `rpm --queryformat "%{NAME}" -qp $oldrpm` = "$NAME" ]; then OLDNAME=$oldrpm; break fi done if [ -z "$OLDNAME" ]; then echo $NAME is new cp -pv $rpm $RPMDIR else if [ `basename $rpm` != `basename $OLDNAME` ]; then mv $OLDNAME $OLDDIR cp -pv $rpm $RPMDIR fi fi done # Kopieer de nieuwe boot image bestanden naar de juiste plek... for newfile in ${UPDDIR}/images/* ; do file=${CDDIR}$/${ARCH}/images/$(basename ${newfile}) if [ $newfile -nt $file ] ; then cp -pv $newfile $file fi done exit 0
Als je installeert van CD dan heeft het installatie programma op CD de file
RedHat/base/hdlist
nodig. Deze file beschrijft welke RPM
packages beschikbaar zijn op de CD. De hdlist
file kan gegenereerd
worden door het programma misc/src/install/genhdlist
.
Het programma moet worden gestart met de 'root name' van de distributie als
het enige argument. Hier is de updateHdlist
script die dat programma
aanroept:
#!/bin/bash RHVERSION=5.1 ARCH=i386 echo generating hdlist... CDDIR=/jaz/redhat-${RHVERSION} GENHDDIR=${CDDIR}/${ARCH}/misc/src/install chmod u+x ${GENHDDIR}/genhdlist chmod 644 ${CDDIR}/${ARCH}/RedHat/base/hdlist ${GENHDDIR}/genhdlist ${CDDIR}/${ARCH} || echo "*** GENHDLIST FAILED ***" exit 0
OPMERKING: Nadat je de updates hebt toegevoegd in de RedHat/RPMS
directory,
is je kopie van de distributie niet langer een mirror van de Red Hat distributie
site. Eigenlijk is het meer up-to-date! Daarom zal je, als je opnieuw de distributie
gaat mirroren, weer de oude versie van de updates afhalen, en zullen de updates
verwijderd worden.
Zoals bij Red Hat 5.2 en vroeger meegeleverd was, CRASHTE genhdlist
als er
files in de RedHat/RPMS
directory stonden die niet RPM files waren!
Dit zorgt voor problemen, want in de 5.2 distributie zijn er een paar non-RPM files
die ls-lR
en ls-lR.gz
heten. Daarom veeg je best all non-RPM files weg uit
die directory.
Als we veronderstellen dat je een werken CD-write op je systeem hebt, en als je weet hoe die te gebruiken, slaan we meteen de details over mbt. het branden van CD's. Als je je CD's brandt op een Linux-systeem, kan je het excellente XCDroast package installeren. In XCDRoast, zet de Rock Ridge extentie aan, en de kreatie van TRANS.TBL files.
Kijk even na of de top directory van de CD op zijn minst de volgende files en directory's bevat:
COPYING RPM-PGP-KEY README RedHat/
De volgende directory's zijn handig:;
doc/ gnome/ misc/ dosutils/ images/
(Dit gedeelte is dankzij Dawn Endico dawn@math.wayne.edu). Aangezien XCDRoast
geen ondersteuning heeft voor bootable disks, heb je een andere tool nodig, bv.
mkisofs
en
cdrecord
.
Haal de laatste RPMs voor deze packages van
ftp://contrib.redhat.com.
Je zal een image file moeten maken die naar CD wordt geschreven. Deze file is ongeveer
500Mb groot, dus best zoek je een partitie met genoeg vrije plaats en verander het path
voor redhat.img
in het volgende commando indien nodig. Je zal root moeten zijn om
mount
en cdrecord
te gebruiken.
Verander de directory naar de plaats in je mirror dat de root zal zijn van je CD. bijvoorbeeld redhat-5.2/i386.
mkisofs -v -r -T -J -V "Red Hat 5.2" -b images/boot.img -c misc/boot/boot.cat -o /tmp/redhat.img .
Als je paranoide bent, test je best je nieuwe disk image door het te mounten. Als je vergat de file permissies te veranderen of vergat de Rock Ridge extentie aan te zetten dan zal de fout wel duidelijk worden, aangezien de filenames en directory structure fout zullen zijn.
mount -t iso9660 -o ro,loop /tmp/redhat.img /mnt/cdrom
Als je klaar bent, vergeet niet te unmounten.
umount /mnt/cdrom
Kijk na of je wel de juiste snelheid van je CD-writer instelt. Dit commando is voor een 4x CDR. Jij hebt misschien een 1x, 2x of 6x.
cdrecord -v speed=4 dev=0,0 /tmp/redhat.img
De SGML code van de meest recente versie van dit dokument kan je vinden op http://imsb.au.dk/~mok/linux/doc/RedHat-CD.sgml.
Ed Schlunder <zilym@asu.edu> heeft een programma gschreven, genaamd fix-rhcd
dat je toelaat je Red Hat Linux distributie mirror te vergelijken naar filesize,
names, permissies en symlinks tov. een 'ls -lNr' listing van een officiele Red Hat
ftp site. Iedere permissie die verkeerd is wordt veranderd in dat van de ls listing.
Zie ook de
fix-rhcd homepage.
Dank aan de volgende personen voor hun waardevolle bijdrage:
While the given information in this document is believed to be correct, the authors assume no responsibility whatsoever for any damage to hardware and/or software, or any loss of data resulting from the procedures outlined in this document.