PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Skript für die Erstellung eines Indexes von rpm-Paketen um z.B. bei SuSE den Einsatz



m.o.o.
30.10.04, 22:47
Hallo Leute.
Welch ein Titel! (EDIT: & es fehlt die Hälfte: ... von YaST zu vermeiden)
Also, ich habe hier zwei kleine Skripte geschrieben, die für folgendes recht gebräuchlich sind:
Die SuSE-CDs bestehen hauptsächlich aus einem Verzeichnis mit sehr sehr sehr sehr sehr sehr vielen rpm-
Paketen darin.
Wenn man nun kein YaST verwenden kann/will/muss/darf, um solch ein Paket zu installieren, ist es immer
ziemlich umständlich die CD zu finden, auf der das richtige Paket drauf ist, das man installieren möchte.
Deshalb hier die Lösung: man erstellt einen Index der SuSE-CDs (geht auch bestimmt mit anderen Distris, die
viele Pakete in einem (oder mehreren) Verzeichnissen haben).
Hier ist das Skript zur Erstellung des Indexes (per Standard ~/.index_of_susecds):


#!/bin/sh

INDEX_FILE=~/.index_of_susecds

echo "# of cd:";
read num_cd;

echo "dirs (; = separator):";
read dirs;

IFS=";";

for DIR in $dirs; do
IFS="
";
for FILE in `ls -1 $DIR`; do
echo "indexing "$FILE" on CD #"$num_cd;
echo $num_cd":::"$FILE>>$INDEX_FILE;
done;
IFS=";";
done;

. Bei dirs kann man mehrere Verzeichnisse angeben, in der Form /bla/blub;/noch/ein/Verz;/und/nocheines ( ; =
Teiler).
WICHTIG: Die Verzeichnisse werden NICHT rekursiv durchlaufen!
Man muss das Skript für jede CD aufrufen!

Tja, dann hat man also die ganzen Paketnamen & die dazugehörige CD-Nummer in einer Datei.
Hier fehlt noch das Suchskript:


#!/bin/sh

INDEX_FILE=~/.index_of_susecds

if [ -z $1 ]; then
echo "arg required";
exit 1;
fi;

for FILE in `grep -ri $1 $INDEX_FILE`; do
echo "On CD "$FILE|sed s/:::/:\ /
done;

. Das was ihr sucht, wird als Argument benötigt, z.B. "sh search.sh bimmel_bommel".

Ich hoffe jemand nützen diese beiden kleinen Skripte!

Gruß, Florian

PS: Um den Index zu löschen: "rm ~/.index_of_susecds".

carnil
30.10.04, 23:34
Hi

Ich habe jetzt leider kein Suse, aber ich habe mir folgendes gedacht: Macht dieser Tipp eigentlich das, was das Programm/Tool, das bei Suse dabei ist, macht? Wenn ich Dich richtig verstanden habe, dann: Das Tool heisst pin und steht für Package INformation.

MfG carnil

m.o.o.
31.10.04, 16:06
Oha,
das Programm/Skript war mir neu. Ich hab mir mal schnell den Quellcode angeschaut & es scheint tatsächlich in etwa das selbe zu leisten wie meine beiden Skripte oben. pin benutzt dabei eine vorgefertigt Datei namens ARCHIVES.gz auf der SuSE-Cd.
Pin durchsucht auch die ganzen Readmes zu den verschiedenen Paketen. Außerdem durchsucht es die rpm-Datenbank nach bereits installierten Paketen.

Allerdings weiß ich jetzt nicht, ob pin auch die Cd-# ausgibt, auf der sich das Paket befindet (ich habe leider im Moment keine SuSE-Cds da, um die ARCHIVES.gz anzuschauen).

Alles in allem ist also wohl pin die bessere Lösung um ein Paket zu finden (wenn denn auch die Cd-Nummer ausgegeben wird, meine Lösung dürfte etwas schneller sein, weil nicht nach installierten Paketen gesucht wird).


Gruß, FLorian