Diese Frage wurde vor fast 7 Jahren gestellt, aber ich bin darauf gestoßen bei einer Google-Suche nach einem ähnlichen Problem und dachte, ich würde trotzdem eine Antwort posten, da die Frage eine Antwort hat, die nicht wirklich eine Lösung ist.
Die folgende Frage ist ebenfalls relevant (bezieht sich jedoch auf /usr/local anstelle von /opt) und kann ähnlich gelöst werden:
dpkg: warning: while removing directory /usr/local not empty so not removed
Ich konnte dieses Problem mit folgender Technik lösen.
Ein Debian-Paket (.deb) ist nur eine "ar" Archivdatei mit 3 Mitgliedern:
$ ar t package.deb
debian-binary
control.tar.gz
data.tar.xz
Das data.tar.xz-Mitglied kann je nach Alter des *.deb auch data.tar.gz genannt werden. Passen Sie die Befehle entsprechend an.
Die Dateien, die auf das Zielsystem installiert werden, sind im data.tar.xz-Mitglied enthalten. Wenn Sie das data.tar.xz-Mitglied extrahieren und seine Inhalte auflisten, sehen Sie beispielsweise Folgendes.
$ ar p package.deb data.tar.xz | unzx -c | tar t
./
./opt/
./opt/myCompany/
./opt/myCompany/myProgram
Das Entfernen des ./opt/-Verzeichnismitglieds (aber nicht seiner Inhalte) aus der data.tar.xz-Datei verhindert, dass dpkg versucht, das /opt-Verzeichnis zu entfernen, wenn das Paket deinstalliert wird.
$ ar x package.deb data.tar.xz
$ unzx data.tar.xz
$ tar --delete --occurrence -f data.tar ./opt/
$ #tar --delete --occurrence -f data.tar ./usr/local/
Jetzt sollten Sie bei Auflistung der Inhalte der data.tar-Datei Folgendes sehen:
$ tar tf data.tar
./
./opt/myCompany/
./opt/myCompany/myProgram
- Beachten Sie, dass das ./opt/-Mitglied entfernt wurde.
Der letzte Schritt besteht darin, die data.tar-Datei neu zu komprimieren und das data.tar.xz-Mitglied im deb durch das modifizierte zu ersetzen.
Hier ist ein Beispiel für den vollständigen Vorgang zum Entfernen des ./opt/-Eintrags aus der tar-Archivdatei und zum Ersetzen der tar-Archivdatei im deb durch die modifizierte:
$ ar x package.deb data.tar.xz
$ unzx data.tar.xz
$ tar --delete --occurrence -f data.tar ./opt/
$ xz data.tar
$ ar r package.deb data.tar.xz
$ rm data.tar.xz
Jetzt wird dpkg beim Entfernen/Deinstallieren des deb nicht versuchen, das /opt-Verzeichnis zu entfernen.