/ / Wie erstellt man eine gefälschte Installation eines Debian-Pakets zur Verwendung beim Testen? - debian, dpkg, deb

Wie erstellt man eine gefälschte Installation eines Debian-Pakets zur Verwendung beim Testen? - debian, dpkg, deb

Dies wurde ursprünglich in stackoverflow gepostet (https://stackoverflow.com/questions/47099045/how-do-you-create-a-dpkg-admin-directory) gehört aber wohl hierher

Ich habe ein Paket, das bisher nur auf RPM-basierte Distributionen abzielte und fĂĽr das ich jetzt .deb-Pakete fĂĽr Debian-basierte Distributionen erstelle.

Ziel ist es, eine Testinstallation von zu simulierenBenutzerbereich, der von dem System, auf dem Sie aufbauen, isoliert ist. Es kann sich um einen Mehrbenutzer handeln, und Sie möchten keinen Root-Zugriff benötigen, um die Software zu erstellen. Viele unserer Tests simulieren bereits die Struktur des Installationsverzeichnisses. Dies ist der nächste Schritt, um eine tatsächliche Installation mit Hilfe von 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 so etwas wie:

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

Ich stecke jedoch ĂĽber das Ă„quivalent zum rpmdb --initdb Schritt.

Beachten Sie, dass ich das Archiv einfach entpacken kann mit:

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

Ich wäre aber lieber näher dran, wie ein echtes Paket installiert wird. Ich glaube auch nicht, dass dies funktionieren wird preinstall und postinstall Skripte.

Ähnliche Fragen haben mit vorgeschlagen deboostrap zu schaffen ein chroot Umwelt, aber dies schafft eine völlig neueInstallation. Es ist nicht nur übertrieben, sondern auch zu langsam für einen automatisierten Test. Ich beabsichtige, dies für schnelle Tests des Installationspakets zu verwenden, bevor weitere Tests in tatsächlichen Testumgebungen durchgeführt werden.

Meine bisherigen Experimente:

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

haben bestenfalls ergeben:

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

was nicht klar anzeigt was falsch ist.

Also wie machen Sie erstellen ein Dpkg Admin-Verzeichnis?


Update 24/11/2017

Ich habe versucht, mit dem Verzeichnis dpkg aus einer Umgebung zu kopieren, die von erstellt wurde cowdancer (was Deboostrap unter der Haube verwendet) oder Kopierender echte aus / var / lib / dpkg, aber ich erhalte immer noch die gleiche Fehlermeldung, so dass der Fehler (und / oder die Option --admindir) möglicherweise nicht ganz das bedeutet, was ich denke, dass es bedeutet.

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 Dir zu tun.

Ich habe auch die Frage mit dem Titel "Wie erstelle ich ein dpkg-Admin-Verzeichnis?" Betitelt, eine interessante Frage, aber die Antwort ist nicht unbedingt die Lösung meines Problems.

Antworten:

2 fĂĽr Antwort â„– 1

Dank an Guillem Jover (siehe https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=883700) und ein bisschen durch den dpkg-Quellcode graben. Ich habe jetzt eine Lösung:

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 --force-script-chrootless --log=`pwd`/fake/dpkg.log --root=`pwd`/fake --instdir `pwd`/fake --admindir=`pwd`/fake/dpkg --install *.deb

Einige Punkte zu beachten:

  • --force-not-root ist nicht genug. fakeroot ist erforderlich.

  • ldconfig und start-stop-daemon muss auf dem Weg sein. (daher PATH = / sbin: / usr / sbin: $ PATH)

  • Die Protokolldatei muss vom Standard verschoben werden /var/log/dpkg.log

  • Die Reihenfolge der Argumente ist wichtig. Wenn verwendet --root muss vorher sein --instdir und --admindir.

  • Der admindir soll ein Installationsverzeichnis als Präfix haben.

  • Wenn das Paket Pre oder Post enthältInstallationsskripte (preinst, postinst) dann --force-script-chrootless ist erforderlich, da diese Skripte normalerweise ĂĽber chroot () ausgefĂĽhrt werden, was die AusfĂĽhrung unter fakeroot unzulässig macht.