logo

Suletuxe.de
Linux - Nutzer
helfen
Linux - Nutzern

Willkommen, Gast. Bitte Login oder Registrieren.
24. November 2024, 14:49:51
Übersicht Hilfe Suche Login Registrieren

Amateurfunk Sulingen
Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe  |  allgemeine Kategorie  |  Installation & Einrichtung  |  Thema: lokales Repository « zurück vorwärts »
Seiten: [1] nach unten Drucken
   Autor  Thema: lokales Repository  (Gelesen 922 mal)
Andreas
Administrator
*****

Offline

Einträge: 1319



Linux von Innen

Profil anzeigen
lokales Repository
« 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  . Also habe ich angefangen ein Bash-Script dafür zu schreiben:
Zitat:
#!/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
« Letzte Änderung: 17. Juni 2023, 08:09:31 von Andreas » Gespeichert

Wissen ist das einzige Gut, das mehr wird, wenn man es teilt - wenn es Menschen gibt, die es teilen, und es Menschen gibt, die bereit sind, dieses Geschenk auch mit eigenem Einsatz anzunehmen.


Freiheit zu erkämpfen reicht nicht. Man muss sie auch verteidigen.


Ohne IT-Kompetenz ist man heutzutage ein willkommenes Opfer und Spielball anderer, egal, welches System oder Gerät man nutzt. Nur Wissen schützt vor Schaden!
Andreas
Administrator
*****

Offline

Einträge: 1319



Linux von Innen

Profil anzeigen
Re:lokales Repository
« Antwort #1 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
Gespeichert

Wissen ist das einzige Gut, das mehr wird, wenn man es teilt - wenn es Menschen gibt, die es teilen, und es Menschen gibt, die bereit sind, dieses Geschenk auch mit eigenem Einsatz anzunehmen.


Freiheit zu erkämpfen reicht nicht. Man muss sie auch verteidigen.


Ohne IT-Kompetenz ist man heutzutage ein willkommenes Opfer und Spielball anderer, egal, welches System oder Gerät man nutzt. Nur Wissen schützt vor Schaden!
Sebastian
Sr. Member
****

Offline

Einträge: 487





Profil anzeigen
Re:lokales Repository
« Antwort #2 am: 18. Juni 2023, 19:43:09 »

Zitat:
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:

pacman -Slq <Reponame>


Gibt alle Paketnamen, aus die sich in diesem Repo befinden.

LG
Sebastian
Gespeichert

Richtig um Hilfe bitten
Andreas
Administrator
*****

Offline

Einträge: 1319



Linux von Innen

Profil anzeigen
Re:lokales Repository
« Antwort #3 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  ...

LG
Andreas
Gespeichert

Wissen ist das einzige Gut, das mehr wird, wenn man es teilt - wenn es Menschen gibt, die es teilen, und es Menschen gibt, die bereit sind, dieses Geschenk auch mit eigenem Einsatz anzunehmen.


Freiheit zu erkämpfen reicht nicht. Man muss sie auch verteidigen.


Ohne IT-Kompetenz ist man heutzutage ein willkommenes Opfer und Spielball anderer, egal, welches System oder Gerät man nutzt. Nur Wissen schützt vor Schaden!
Seiten: [1] nach oben Drucken 
Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe  |  allgemeine Kategorie  |  Installation & Einrichtung  |  Thema: lokales Repository « zurück vorwärts »
Gehe zu: 


Login mit Username, Passwort und Session Länge

 Es wird die Verwendung "Blink"-basierter Browser und mindestens 1024x768 Pixel Bildschirmauflösung
für die beste Darstellung empfohlen
 
freie Software für freie Menschen!
Powered by MySQL Powered by PHP Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe | Powered by YaBB SE
© 2001-2004, YaBB SE Dev Team. All Rights Reserved.
- modified by Andreas Richter (DF8OE)
Valid XHTML 1.0! Valid CSS!