Titel: lokales Repository
Beitrag von: Andreas am 17. Juni 2023, 08:07:23
Ich habe auf meinem Schul-Server ein lokales Repository eingerichtet. In diesem befinden sich alle aktuellen Pakete die auf den Schülergeräten installiert sind - auch AUR-Pakete die auf dem Schul-Server gebaut wurden befinden sich dort als fertig gebaute Pakete. Der Sinn ist dass 1) auf den Schülergeräten keine zeitintensiven Bauprozesse bei einem Update notwendig sind 2) alle Pakete für alle Schülergeräte lediglich innerhalb des eigenen Netzwerkes bewegt werden müssen. Klar: es setzt voraus dass sich das lokale Repository immer auf dem aktuellen Stand befindet wenn auf den Schülergeräten ein Update angestoßen wird. Das ist aber gewährleistet.
Dazu gibt es die beiden helper "repo-add" und "repo-remove". Ich habe auch ein bash-Script geschrieben das bei einem Update neu hinzugekommene Pakete automatisch in die Paketdatenbank einfügt.
Um die Pflege der Datenbank des lokalen Repos zu optimieren würde ich gerne alle Pakete finden die zwar in der Datenbank sind aber nicht mehr als physische Paketdatei existieren, und auch alle in der Datenbank fehlenden Pakete die aber als physische Paketdatei existieren. Es scheint dafür keine Befehle zu geben :o :o :o. Also habe ich angefangen ein Bash-Script dafür zu schreiben:#!/bin/bash
echo "The following packages are listed in repository database but missing in fact:" tar --exclude=*/* -tvf /home/local_repository/repo.db.tar.gz | cut -d ":" -f 2 | cut -d " " -f 2 | sed 's:/*$::' > /tmp/localrepofiles
while read -r line do if [ $(find /home/local_repository -name $line*) == "" ];then echo $line fi done < /tmp/localrepofiles rm /tmp/localrepofiles
echo "The following packages are present in repository but missing in database:"
|
| Der Teil mir alle Pakete anzeigen zu lassen die in der Datenbank sind aber nicht mehr als Paketdatei existieren ist fertig und tut so in etwa was ich will. Perfekt ist es nicht: es wird nicht der Paketname sondern die angehängte Version mit angezeigt. Ideal wäre wenn ich nur den Paketnamen ohne die Versionsnummer bzw. Architektur angezeigt bekäme (dann könnte ich das Paket mittels repo-remove ggf. gleich automatisch aus der Datenbank entfernen) - das ist aber nicht so einfach weil es kein eindeutiges Merkmal gibt was zum Paketnamen gehört und was nicht.
Was sich mir als Fragen aufdrängt: 1) Gibt es wirklich keinen Befehl der mir alle Pakete auflistet die in einem Repository sind? Wie gesagt ALLE nicht nur aus diesem Repo installierte...
2) Gibt es vielleicht schon helper die ich nicht kenne die eine Datenbankprüfung eines Repos machen (mir also Pakete anzeigen bei denen die Konsistenz Datenbank / Dateien gestört ist?
Ich kenne zur Pflege eines lokalen Repos aktuell repo-add und repo-remove...
LG Andreas |
Titel: Re:lokales Repository
Beitrag von: Andreas am 17. Juni 2023, 13:42:24
Ich habe ein Bash-Script geschrieben das alles kann:
/usr/local/sbin/repo-list_missing_packages Code:
#!/bin/bash
# configuration PATH_TO_REPODB=/home/local_repository/repo.db.tar.gz PATH_TO_REPO=/home/local_repository
# do not change anything behind this line
tar --exclude=*/* -tvf $PATH_TO_REPODB | cut -d ":" -f 2- | cut -d " " -f 2 | sed 's:/*$::' > /tmp/localrepofiles ls $PATH_TO_REPO/*.zst | rev | cut -d "/" -f 1 | rev | sed 's/-any.pkg.tar.zst//g' | sed 's/-x86_64.pkg.tar.zst//g' | sed 's/.pkg.tar.zst//g' > /tmp/localfiles
t1=0 t2=0
echo "...checking local repository for inconsistences..." echo ""
while read -r line do if [ $(find $PATH_TO_REPO -name $line*) == "" ];then ((t1=t1+1)) if [ $t1 == 1 ];then echo "The following packages are listed in repository database but missing in fact:" fi echo $line fi done < /tmp/localrepofiles
while read -r line do if [ $(grep $line /tmp/localrepofiles) == "" ];then ((t2=t2+1)) if [ $t2 == 1 ];then echo "The following packages are present in repository but missing in database:" fi echo $line fi done < /tmp/localfiles
if [ $t1 == 0 ] && [ $t2 == 0 ];then echo "local repository is clean." fi echo "ready."
rm /tmp/localrepofiles rm /tmp/localfiles
|
| Frei zur Verwendung.
LG Andreas |
Titel: Re:lokales Repository
Beitrag von: Sebastian am 18. Juni 2023, 19:43:09
1) Gibt es wirklich keinen Befehl der mir alle Pakete auflistet die in einem Repository sind? Wie gesagt ALLE nicht nur aus diesem Repo installierte...
|
|
Grade nicht viel Zeit deswegen nur was mir auf die Schnelle einfällt
Code:
Gibt alle Paketnamen, aus die sich in diesem Repo befinden.
LG Sebastian |
Titel: Re:lokales Repository
Beitrag von: Andreas am 19. Juni 2023, 10:19:06
Ausgezeichnet. Ich hatte die Manpages mehrfach durchsucht, aber ich habe wohl nicht genau genug gelesen. Es waren einfach zu viele Seiten ;D...
LG Andreas |
Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe | Powered by YaBB SE
© 2001-2003, YaBB SE Dev Team. All Rights Reserved.
|