Wie erstellt man eine falsche Installation eines Debian-Pakets zur Verwendung beim Testen?

892
Bruce Adams

Dies wurde ursprünglich in stackoverflow ( https://stackoverflow.com/questions/47099045/how-do-you-create-a-dpkg-admin-directory ) veröffentlicht, gehört jedoch wahrscheinlich hierher

Ich habe ein Paket, das bisher nur auf RPM-basierte Distros abzielte, für die ich jetzt .deb-Pakete für Debian-basierte Distros baue.

Ziel ist es, eine Testinstallation aus dem Benutzerraum zu simulieren, die vom System, auf dem Sie arbeiten, isoliert ist. Möglicherweise handelt es sich um mehrere Benutzer, und Sie möchten keinen Root-Zugriff nur zum Erstellen der Software. Viele unserer Tests simulieren bereits die Installationsverzeichnisstruktur. Dies ist der nächste Schritt, um eine tatsächliche Installation mit erstellten Paketen zu simulieren.

Für die RPM-Pakete konnte ich Testinstallationen erstellen mit:

WSDIR=/where/I/want/my/tests/to/run rpmdb --initdb --dbpath "$WSDIR"/rpmdb rpm --relocate /opt="$WSDIR"/opt --dbpath $WSDIR/rpmdb -i <package>.rpm  

Das Äquivalent in der Debian-Welt ist ungefähr so:

dpkg --force-not-root --admindir=$WSDIR/dpkg --root=$WSDIR/install --install "$DEB" 

Ich bin jedoch dem Äquivalent des rpmdb --initdbSchrittes überlegen.

Beachten Sie, dass ich das Archiv einfach entpacken kann:

dpkg-deb -x "$DEB" $WSDIR/install 

Aber ich würde es vorziehen, näher zu sein, wie ein echtes Paket installiert wird. Ich glaube auch nicht, dass das laufen wird preinstallund postinstallSkripte.

Ähnliche Fragen haben die Verwendung deboostrapeiner chrootUmgebung zum Erstellen vorgeschlagen, dies führt jedoch zu einer vollständigen Neuinstallation. Es ist nicht nur ein Overkill, sondern auch zu langsam für einen automatisierten Test. Ich beabsichtige, dies für schnelle Tests des Installationspakets vor weiteren Tests in tatsächlichen Testumgebungen zu verwenden.

Meine bisherigen Versuche:

(cd $WSDIR/dpkg && mkdir alternatives info parts triggers updates) cp /var/lib/dpkg/status $WSDIR/dpkg/status 

am besten resultiert in:

dpkg: error: unable to access dpkg status area: No such file or directory 

was nicht klar zeigt, was falsch ist.

Also, wie Sie erstellen Sie ein dpkg admin - Verzeichnis?


Aktualisierung 24.11.2017

Ich habe versucht, das dpkg dir aus einer Umgebung zu kopieren, die von cowdancer erstellt wurde (die deboostrap unter der Haube verwendet) oder das echte aus / var / lib / dpkg zu kopieren, aber ich bekomme immer noch die gleiche Fehlermeldung, so dass der Fehler (und / oder die Option --admindir) bedeutet nicht ganz das, was ich denke.

Beachten Sie, dass:

sudo dpkg --force-not-root --root=$WSDIR/install --admindir=/var/lib/dpkg --install "$DEB" 

funktioniert. Es hat also etwas mit dem Admind-Verzeichnis zu tun.

Ich habe auch die Frage umbenannt, da "Wie erstellt man ein Dpkg-Admin-Verzeichnis" eine interessante Frage ist, aber die Antwort ist nicht notwendigerweise die Lösung für mein Problem.

1
Beachten Sie, dass die ursprüngliche Frage derzeit eine offene Prämie hat. Bruce Adams vor 6 Jahren 0
Hmm. Können Sie einfach `debootstrap` oder` cdebootstrap` verwenden, um eine Chroot mit einer minimalen "echten" Installation zu erstellen und dann das Paket dort zu installieren? Sie können den Inhalt des Zielverzeichnisses nach dem Bootstrapping schnappen und dann mit den Ergebnissen der Installation des Testpakets vergleichen. Es gibt eine spezielle Lösung [cowdancer] (https://wiki.ubuntu.com/CowdancerHowto), die diesen Prozess durch das "Preimaging" des debootstrapped-Verzeichnisses erheblich beschleunigen kann. kostix vor 6 Jahren 0
Ansonsten können Sie sich `fakeroot` anschauen - die zum Erstellen von Debian-Paketen verwendeten Stammwerkzeuge verwenden es, um einen Aufruf zum` make install` zu "virtualisieren", so dass sie denken, dass er von root aufgerufen wurde und in einem echten Dateisystem installiert wird Verzeichnisse mit eingeschränktem Zugriff (wie zum Beispiel `/ usr / bin`), während sie tatsächlich in ein dediziertes Verzeichnis umgeleitet werden, das vom normalen Benutzer, der die` fakeroot`-Verschlüsselung ausführt, beschrieben werden kann. kostix vor 6 Jahren 0

1 Antwort auf die Frage

0
Bruce Adams

Dank Guillem Jover habe ich jetzt eine Lösung - siehe https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=883700

mkdir fake mkdir fake/install mkdir -p fake/dpkg/info mkdir -p fake/dpkg/updates touch fake/dpkg/status PATH=/sbin:/usr/sbin:$PATH fakeroot dpkg --log=`pwd`/fake/dpkg.log --root=`pwd`/fake --instdir `pwd`/fake/install --admindir=`pwd`/fake/dpkg --install *.deb 

Es scheint, dass --force-not-rootdas nicht genug ist. fakerootWird benötigt. ldconfigund start-stop-daemonmuss auf dem Weg sein. Die Protokolldatei muss aus dem Standard verschoben werden. /var/log/dpkg.log Die Reihenfolge der Argumente ist ebenfalls wichtig. Wenn verwendet --rootmuss vor --instdirund sein--admindir