<!DOCTYPE LINUXDOC SYSTEM>
<article>

<title>De Burning a Red Hat CD mini-HOWTO

<author>
Morten Kjeldgaard, <tt/mok@imsb.au.dk/ 
and Peter von der Ahé, <tt/pahe+rhcd@daimi.au.dk/
/ Vertaald door Dag Wie&euml;rs, <tt/dag@wieers.com/
</author>
<date>v1.18, 27 December 1998

<abstract>
Dit dokument beschrijft hoe je je eigen Red Hat CD's kan schrijven, net zoals de 
commerciele CD's zoals Red Hat ze verkoopt. De struktuur van de distributie wordt
beschreven, net zoals de procedure om nieuwe RPM's eraan toe te voegen.
</abstract>

<toc>

<!--  -->
<sect>
<heading>Introduktie</heading>

Er kunnen verschillende redenen zijn om je eigen CD te maken. Misschien betaal je liever 
geen $50 voor een echte <url url="http://www.redhat.com/" name="Red Hat distributie">. 
Of misschien heb je liever een Red Hat distributie met je eigen programma's en eigen 
updates.
</sect>

<sect>
<heading>Anatomie van de Red Hat FTP site</heading>

In dezelfde 'sfeer' van de Linux gemeenschap maakt Red Hat zijn distributie beschikbaar 
voor verschillende platformen op hun FTP site.

<sect1>
<heading>De top level directory</heading>

De top level directory voor Red Hat Linux release 5.1 
(<url url="ftp://ftp.redhat.com/pub/redhat/redhat-5.1/" name="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.  

<verb> 
SRPMS/     alpha/     i386/      sparc/     updates/
</verb>

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:

<verb> 
-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/
</verb>

De <tt/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 
<url url="ftp://ftp.redhat.com/pub/redhat/redhat-5.1/i386/doc/rhmanual/manual/doc000.htm" name="doc/rhmanual/manual/">.  
Vervolgens staan er een aantal FAQs en tenslotte de hele HOWTO en mini-HOWTO verzameling.

De <tt/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 
<tt/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 <tt/supp.img/ waarschijlijk nodig. Zie sektie 
<ref id="sec-install" name="Installeren van CD">.

De <tt/misc/ directory bevat broncode en programma's die nodig zijn voor de installatie.
</sect1>

<sect1>
<heading>De "RedHat" directory -- het hart van de distributie</heading>
 
Het belangrijkste deel van de directory tree is de <tt/RedHat/ directory:

<verb> 
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/
</verb>

De <tt/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 
<ref id="sec-rpm" name="RPM packages"> voor meer informatie.

De <tt/base/ directory bevat verschillende registratie-files die nodig zijn tijdens het 
installatie-proces, bv. de <tt/comps/ file, die definieert de <em/components/ (groep van
packages) dat gebruikt wordt tijdens het "Choose packages to install" fase. Een andere 
belangrijke file in de <tt/base/ directory is de <tt/hdlist/ file die het meeste van de 
header-fields van de RPMs in de <tt/RPMS/ directory bevat.

Dit betekent dat al de 'dependencies' tussen packages achterhaald kan worden door gewoon
de <tt/hdlist/ te lezen zonder dat elk package afzonderlijk gelezen moet worden. Wat 
interessant is voor oa. FTP-installaties.

<tt/hdlist/ wordt ook gebruikt voor de 'mapping' van packages tot file-names. (bv 
<tt/perl/ naar <tt/perl-5.004-6.i386.rpm/. Dit betekent dat als je updates wil toevoegen
aan je eigen CD (zie sektie <ref id="sec-updates" name="Updates toevoegen">) je de 
<tt/hdlist/ zal moeten wijzigen. Dit proces wordt beschreven in sektie 
<ref id="sec-new-hdlist" name="Een nieuwe hdlist-file genereren">.

De <tt/instimage/ directory bevat een 'life filesystem' met een reeks programma's en 
gesharede libraries die nodig zijn tijdens het installatie-proces.
</sect1>
</sect>

<sect>
<heading>RPM packages<label id="sec-rpm"></heading>

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 <tt><url url="http://www.rpm.org" name="rpm"></tt> 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. <tt/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 <tt/glibc/ of <tt/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 .<em>arch</em>.<tt/rpm/, waarbij 
<em/arch/ de architectuur (of het platform) is. Dit kan <tt/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 <tt><url url="http://www.rpm.org" name="rpm"></tt> 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:

<verb>
rpm --install  WindowMaker-0.18-1b.i386.rpm
</verb>

Je kan zelfs rechtstreeks van Internet installeren, als jet het URL kent van het package
tenminste:

<verb>
rpm --install ftp://rufus.w3.org/redhat-contrib/noarch/mirror-2.9-2.noarch.rpm
</verb>

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 <tt>.src.rpm</tt> en bevinden
zich in de <tt/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.
</sect>

<sect>
<heading>Je eigen kopie van de distributie bekomen</heading>

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 <tt/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 
<url url="http://rufus.w3.org/linux/RPM/mirror.html" name="rufus.w3.org">.

Maak je lokale kopie <tt/mirror.redhat/ van de mirror configuratie file en
verander de relevante informatie vanboven in de file. Na het default gedeelte,
definieer deze packages:

<verb> 
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
</verb>

Het volgende commando zal een kopie van de gehele Red Hat tree afhalen en plaatsen
op je lokale schijf. <em/*Denk na*/ voordat je dit doet, je staat op het punt ongeveer
350Mb data af te halen.

<verb> 
mirror -pdist mirror.redhat 
</verb>

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 
<em/ONCE/. Al de wijzigingen aan de distributie vind je in de <tt/updates/ directory.
Dus, als je een up-to-date mirror van de Red Hat distributie wil hebben, moet je enkel
de <tt/updates/ directory vernieuwen. Dat doe je met het volgende commando:

<verb> 
mirror -pupdates mirror.redhat 
</verb>

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 
<url url="ftp://ftp.redhat.com/pub">. Je neemt best een FTP-site dicht bij jou, zie ook
de <url name="Red Hat FAQ" url="http://www.redhat.com/support/docs/rhl/RedHat-FAQ/RedHat-FAQ-12.html#ss12.1">.
</sect>

<sect>
<heading>Toevoegen van updates<label id=sec-updates></heading>

Om updates toe te voegen, heb je write-access nodig op dedistributie-directory, met een
werkende versie van <url url="http://www.rpm.org" name="rpm">. Er zijn 3 stappen die je
moet volgen:

<enum> 
<item>Pas de file permissies aan.
<item>Vervang de updated RPMs.
<item>Genereer een nieuwe hdlist file.
</enum>

Als je een mirror onderhoudt van de <tt/updates/ directory, dan kan je op ieder 
moment een CD produceren met de nieuwe updates door deze drie stappen te herhalen.

<sect1>
<heading>Pas de file permissies aan</heading>

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
directories 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
<tt/updatePerm/ script op je lokale kopier van de distributie:

<code>
#!/bin/bash

RHVERSION=5.1

LIST=/tmp/er3hd3w25
CDDIR=/jaz/redhat-${RHVERSION}

# Find all directories, and make sure they have +x permission
find $CDDIR -type d -exec chmod -c 755 {} \;

# Find all files that are executables, shell or perl scripts
find $CDDIR -type f | file -f - | grep -v RPM \
   | egrep -i 'executable|perl|bourne|shell' | cut -f1 -d: > $LIST

# Find shared libraries
find $CDDIR -name \*.so >> $LIST

# Make them executable
while read file
do
   if [ ! -x $file ] ; then
      chmod -c 755 $file
   fi
done < $LIST

/bin/rm $LIST

exit 0
</code>
</sect1>

<sect1>
<heading>Vervang de updated RPMS</heading>

Het volgende scriptje met de naam <tt/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
<tt/${OLD}/ directory.

<code>
#! /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


# Copy new boot image files to the right place...
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
</code>
</sect1>

<sect1>
<heading>Genereer een nieuwe hdlist file<label id=sec-new-hdlist></heading>

Als je installeert van CD dan heeft het installatie programma op CD de file
<tt><file>RedHat/base/hdlist</file></tt> nodig. Deze file beschrijft welke RPM
packages beschikbaar zijn op de CD. De <tt>hdlist</tt> file kan gegenereerd
worden door het programma <tt><file>misc/src/install/genhdlist</file></tt>.
Het programma moet worden gestart met de 'root name' van de distributie als
het enige argument. Hier is de <tt/updateHdlist/ script die dat programma
aanroept:

<code>
#!/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
</code>

OPMERKING: Nadat je de updates hebt toegevoegd in de <tt>RedHat/RPMS</tt> 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.

<sect2>
<heading>Belangrijke opmerking voor Red Hat 5.2</heading>

Zoals bij Red Hat 5.2 en vroeger meegeleverd was, CRASHTE <tt>genhdlist</tt> als er 
files in de <tt>RedHat/RPMS</tt> directory stonden die <em>niet</em> RPM files waren!
Dit zorgt voor problemen, want in de 5.2 distributie zijn er een paar non-RPM files
die <tt/ls-lR/ en <tt/ls-lR.gz/ heten. Daarom veeg je best all non-RPM files weg uit 
die directory. 
</sect2>
</sect1>
</sect>

<sect>
<heading>Uiteindelijk: de CD branden</heading>

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 
<url url="http://www.fh-muenchen.de/rz/xcdroast" name="XCDroast"> package installeren.
In XCDRoast,  zet de Rock Ridge extentie aan, en de kreatie van TRANS.TBL files.

Kijk even na of de <em>top</em> directory van de CD op zijn minst de volgende files en directories bevat:

<verb> 
COPYING      RPM-PGP-KEY README       RedHat/
</verb>

De volgende directories zijn handig:;

<verb> 
doc/         gnome/      misc/        dosutils/    images/
</verb>

<sect1>
<heading>Het maken van een bootable CD</heading>

(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.
<tt><url url="ftp://tsx-11.mit.edu/pub/linux/packages/mkisofs/" name="mkisofs"></tt>
en <tt><url url="http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html" name="cdrecord"></tt>.  
Haal de laatste RPMs voor deze packages van <url url="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 <tt/redhat.img/ in het volgende commando indien nodig. Je zal root moeten zijn om
<tt/mount/ en <tt/cdrecord/ te gebruiken.

<sect2>
<heading>Maak de disk image</heading>

Verander de directory naar de plaats in je mirror dat de root zal zijn van je CD.
bijvoorbeeld redhat-5.2/i386.

<verb> 
mkisofs -v -r -T -J -V "Red Hat 5.2" -b images/boot.img -c misc/boot/boot.cat -o /tmp/redhat.img . 
</verb>

</sect2>

<sect2>
<heading>Test de image</heading>

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.

<verb> 
mount -t iso9660 -o ro,loop /tmp/redhat.img /mnt/cdrom
</verb>

Als je klaar bent, vergeet niet te unmounten.

<verb> 
umount /mnt/cdrom 
</verb>
</sect2>

<sect2>
<heading>Brand de CD</heading>

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.

<verb> 
cdrecord -v speed=4 dev=0,0 /tmp/redhat.img 
</verb>
</sect2>
</sect1>
</sect>

<sect>
<heading>Dit dokument...</heading>

De SGML code van de meest recente versie van dit dokument kan je vinden op
<url url="http://imsb.au.dk/~mok/linux/doc/RedHat-CD.sgml">.


<sect1>
<heading>Verwante dokumentatie</heading>

Ed Schlunder &lt;zilym@asu.edu&gt; heeft een programma gschreven, genaamd <tt/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 <url url="http://www.ajusd.org/~edward/fix-rhcd/" name="fix-rhcd homepage">.
</sect1>

<sect1>
<heading>Acknowledgements</heading>

Dank aan de volgende personen voor hun waardevolle bijdrage:

<itemize>
 <item>Lars Christensen &lt;larsch@cs.auc.dk&gt;
 <item>Thomas Duffy &lt;tbd@cs.brown.edu&gt;
 <item>Dawn Endico &lt;dawn@math.wayne.edu&gt;
 <item>Seva &lt;seva@null.cc.uic.edu&gt;
</itemize>
</sect1>
</sect>

<sect>
<heading>DISCLAIMER<label id="sec-disclaimer"></heading>

<bf>
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.
</bf>
</sect>
</article>
