Dein Suse-Linux-System baut auch auf den CDRoms diverser Suseversionen auf?
Mit diesem Tool hat man ein dickes Problem weniger...
Welches Problem? Das Problem, diejenige CD zu finden, auf der sich ein
gesuchtes Paket in gesuchter Version befindet, ohne zum DJ zu werden.
Die Idee besteht darin, mit einem Script den Inhalt der CDROMs (z.B. Suse
6.0 Vollversion, CD 1,2,3,4, und Suse Demo 6.1) zu archivieren, um dann auf
der Suche nach der richtigen CD einfach dieses Archiv zu durchsuchen.
Wenn ich zum Beispiel nach einem aktuellen joe-Paket suche, gebe ich einfach ein:
woist joe
Die Ausgabe enthält dann den Hinweis, auf welcher CDROM joe in welcher Version
(und in welchem Verzeichnis) zu finden ist.
Neben zwei Bash-Scripten setze ich ein GAWK-Script ein. GAWK ist eine lustige
Programmiersprache, so eine Art Mischung aus BASIC und C... :-)
Folgende drei Scripte erledigen die gestellte Aufgabe:
- cdeinlesen: Einlesen der Daten einer neuen CDROM
- cut55.awk: Formatieren einer Zeile
- woist: Durchsuchen des Archivs
Erstes Script: cdeinlesen
#!/bin/sh
# Einlesen aller Pakete auf einer SUSE-CDROM,
# zum schnellen finden eines Pakets und der
# passenden CDROM...
# Autor: Tjabo Kloppenburg
if test $UID = 0 ; then
BASEDIR="/root/.cdbase"
else
echo "Du musst Ruth heißen! :-)"
exit 0
# BASEDIR="$HOME/.cdbase"
fi
DATA=$BASEDIR"/alldata"
TMPFILE=$BASENAME"/liste.tmp"
if ! test -d $BASEDIR ; then
if ! mkdir $BASEDIR ; then
echo "Konnte $BASEDIR nicht anlegen. :-("
exit;
fi
fi
if ! test -e $DATA ; then
if ! touch $DATA ; then
echo "Konnte $DATA nicht anlegen. :-("
exit;
fi
fi
echo " -+-- Einlesen der Paketnamen einer Suse-CDROM: "
echo " "
echo " Datenbank: $DATA"
echo " "
echo "Bitte CDROM einlegen und auf RETURN hauen:"
read RETURN
echo "mounte CDROM..."
if mount /cdrom ; then
echo "lese Paketdaten ein..."
cd /cdrom/full-names/i386
ls -l --color=none >$TMPFILE
cd
cd .cdbase
echo "daten gelesen. unmounte /cdrom ..."
umount /cdrom
echo "ok soweit..."
echo " "
echo "CDROM-Kuerzel eingeben (z.B. Suse60_demo): "
read PREFIX
echo "frisiere die Liste..."
cat $TMPFILE | cut55.awk |
sed -e "s/^/$PREFIX\:\ \ /g" >>alldata
rm $TMPFILE
echo "kopiere alldata nach /home/hansolo/.cdbase/"
cp alldata /home/hansolo/.cdbase
chown hansolo /home/hansolo/.cdbase/alldata
chgrp users /home/hansolo/.cdbase/alldata
echo "fettich!"
echo " "
echo "Suche nach Paketen: \"woist name\"."
else
echo "Fehler beim Mounten. Keine CDROM drin?";
fi
Zweites Script: cut55.awk
#!/usr/bin/awk -f
{
zeile = $0;
zeile = substr(zeile,56,length(zeile)-55);
pfeilpos = index(zeile," -> ");
links = substr(zeile,1,pfeilpos-1);
if (length(links) > 0) {
while (length(links) < 35) {
links = links " ";
}
rechts = substr(zeile,pfeilpos+4+5,length(zeile)-pfeilpos-4+1-5)
print links " -> " rechts;
}
}
Drittes Script: woist
#!/bin/sh
# Finden eines Pakets und der zugehoerigen CDROM
# Datenbank verändern mit "cdeinlesen"
# Autor: Tjabo Kloppenburg
if test $UID = 0 ; then
BASEDIR="/root/.cdbase"
else
BASEDIR="$HOME/.cdbase"
fi
DATA=$BASEDIR"/alldata"
grep $1 $DATA
|