users:werner:getrepolist
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
users:werner:getrepolist [2007-11-09 0750] – Link zur Perl-Version werner | users:werner:getrepolist [2007-11-09 1231] (aktuell) – syntaktische Verbesserungen :-) werner | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Repository-Suche für openSUSE ====== | ||
+ | |||
+ | Da der openSUSE-Buildservice sehr dynamisch wächst und man demzufolge keine verlässliche statische Übersicht erstellen kann, habe ich mir ein PHP-Script ausgedacht, um dynamisch die möglichen Verzeichnisse zu ermitteln. | ||
+ | |||
+ | Ich bin von einem zuverlässigen Server (ftp5.gwdg.de) ausgegangen und habe den ftp-Zugang benutzt. Man kann die gleiche URL auch mit http: benutzen, aber das Script funktioniert nur mit ftp (eine PHP-Einschränkung). Selbstverständlich kann man auch einen anderen Server benutzen oder in der fertigen Liste ein " | ||
+ | |||
+ | So, aber nun das Script (ein Ansatz in Perl findet sich auf [[users: | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Das Suchscript ===== | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | $verzname = ' | ||
+ | echo 'hier ist das Skript ', __FILE__, " | ||
+ | echo 'Es ist jetzt ', date(" | ||
+ | $logfilehandle = fopen(' | ||
+ | $fparr = array(' | ||
+ | $versionen = array(' | ||
+ | mkdir(' | ||
+ | $heute = date(" | ||
+ | foreach ($versionen as $eineVersion) { | ||
+ | $fparr[" | ||
+ | $fparr[" | ||
+ | } // foreach ($versionen as $eineVersion) | ||
+ | echo read1dir($verzname, | ||
+ | foreach ($fparr as $key => $oneHandle) | ||
+ | fclose($oneHandle); | ||
+ | echo ' | ||
+ | echo 'Es ist jetzt ', date(" | ||
+ | |||
+ | function read1dir($path2dir, | ||
+ | { | ||
+ | $basislang = strlen($basisname); | ||
+ | $arStack | ||
+ | $retval | ||
+ | if (( substr($path2dir, | ||
+ | ( substr($path2dir, | ||
+ | $ziel = ' | ||
+ | elseif (( substr($path2dir, | ||
+ | ( substr($path2dir, | ||
+ | $ziel = ' | ||
+ | elseif (( substr($path2dir, | ||
+ | ( substr($path2dir, | ||
+ | $ziel = ' | ||
+ | elseif (( substr($path2dir, | ||
+ | ( substr($path2dir, | ||
+ | $ziel = ' | ||
+ | elseif (( substr($path2dir, | ||
+ | ( substr($path2dir, | ||
+ | ( substr($path2dir, | ||
+ | $ziel = ' | ||
+ | else | ||
+ | $ziel = ' | ||
+ | $quelle = substr($path2dir, | ||
+ | $pos = strpos($quelle, | ||
+ | $usable = str_replace('/', | ||
+ | if ( ($dh = opendir($path2dir)) ) { | ||
+ | while ( ($file = readdir($dh)) !== false ) { | ||
+ | if ( ($file == ' | ||
+ | | ||
+ | continue; | ||
+ | if ( is_dir(" | ||
+ | if ((" | ||
+ | fwrite($fha[' | ||
+ | if (false === $pos) | ||
+ | fwrite($fha[" | ||
+ | else | ||
+ | fwrite($fha[" | ||
+ | if (" | ||
+ | // may be copied to / | ||
+ | $fprepo = fopen(" | ||
+ | fwrite($fprepo, | ||
+ | fwrite($fprepo, | ||
+ | fwrite($fprepo, | ||
+ | fwrite($fprepo, | ||
+ | fwrite($fprepo, | ||
+ | fwrite($fprepo, | ||
+ | fwrite($fprepo, | ||
+ | fclose($fprepo); | ||
+ | } // if (" | ||
+ | } // if suspicious :-) directory found | ||
+ | if ( !in_array(" | ||
+ | $arStack[] = " | ||
+ | } // if ( !in_array(" | ||
+ | } // if ( is_dir(" | ||
+ | } // while ( ($file=readdir($dh)) !== false ) | ||
+ | closedir($dh); | ||
+ | } // if ( ($dh=opendir($dir)) ) | ||
+ | if ( count($arStack) ) { | ||
+ | $retval += count($arStack); | ||
+ | foreach ( $arStack as $subdir ) | ||
+ | $retval += read1dir(" | ||
+ | } // if ( count($arStack) ) | ||
+ | return $retval; | ||
+ | } // function read1dir | ||
+ | |||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | Das Script durchsucht rekursiv den Buildservice-Baum nach " | ||
+ | |||
+ | < | ||
+ | Reading Package Lists... Error! | ||
+ | E: Wow, you exceeded the number of package names this APT is capable of. | ||
+ | E: Problem with MergeList / | ||
+ | E: The package lists or status file could not be parsed or opened. | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Aufbereitung für den Paketmanager Smart ===== | ||
+ | |||
+ | Wer das nicht möchte -- oder lieber '' | ||
+ | |||
+ | <code bash> | ||
+ | echo "# | ||
+ | awk '{ kurzurl = $3; | ||
+ | | ||
+ | | ||
+ | print "smart channel -y --add", | ||
+ | " | ||
+ | " | ||
+ | suse103.list >> trans2smart.sh | ||
+ | awk '{ kurzurl = $3; | ||
+ | | ||
+ | | ||
+ | print "smart channel -y --add", | ||
+ | " | ||
+ | " | ||
+ | suse103home.list >> trans2smart.sh | ||
+ | </ | ||
+ | |||
+ | Nicht schön, aber funktioniert -- aus der apt-Liste wird ein Shell-Script erstellt, das man mit '' | ||
+ | |||
+ | |||
+ | ===== Aufbereitung für den YaST-Paketmanager ===== | ||
+ | |||
+ | Die Aufbereitung für '' | ||
+ | |||
+ | <code bash> | ||
+ | echo "# | ||
+ | awk '{ kurzurl = $3; | ||
+ | | ||
+ | | ||
+ | print " | ||
+ | " | ||
+ | suse103.list >> trans2zypper.sh | ||
+ | awk '{ kurzurl = $3; | ||
+ | | ||
+ | | ||
+ | print " | ||
+ | " | ||
+ | suse103home.list >> trans2zypper.sh | ||
+ | </ | ||
+ | |||
+ | Nachteil dieser Methode: das Einspielen dauert etwas... Bei openSUSE < 10.3 fragt '' | ||
+ | |||
+ | Apropos " | ||
+ | |||
users/werner/getrepolist.txt · Zuletzt geändert: 2007-11-09 1231 von werner