この質問は約7年前に尋ねられましたが、Google検索で同様の問題を見つけて、とにかく答えを投稿しようと思いました。質問には実際には解決策ではない答えがあるからです。
次の質問も関連しており(ただし、/optではなく/usr / localに関係します)、同様に解決できます。
dpkg:警告:ディレクトリ/ usr / localの削除中は空ではないため、削除されません
この問題は、次の手法で解決できました。
Debianパッケージ(.deb)は、3つのメンバーを持つ単なる「ar」アーカイブファイルです。
$ ar t package.deb
debian-binary
control.tar.gz
data.tar.xz
data.tar.xzメンバーは、*。debの経過時間に応じてdata.tar.gzという名前になる場合があります。それに応じてコマンドを調整します。
ターゲットシステムにインストールされるファイルは、data.tar.xzメンバーに含まれています。data.tar.xzメンバーを抽出してその内容を一覧表示すると、たとえば次のようなものが表示されます。
$ ar p package.deb data.tar.xz | unzx -c | tar t
./
./opt/
./opt/myCompany/
./opt/myCompany/myProgram
data.tar.xzファイルから./opt/ディレクトリメンバー(その内容ではない)を削除すると、パッケージがアンインストールされたときにdpkgが/optディレクトリを削除しようとするのを防ぐことができます。
$ 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/
ここで、data.tarファイルの内容を一覧表示すると、次のように表示されます。
$ tar tf data.tar
./
./opt/myCompany/
./opt/myCompany/myProgram
- ./opt/メンバーが削除されていることに注意してください。
最後のステップは、data.tarファイルを再圧縮し、debのdata.tar.xzメンバーを変更されたメンバーに置き換えることです。
tarファイルアーカイブから./opt/エントリを削除し、deb内のtarファイルアーカイブを変更されたものに置き換える完全なプロセスの一例を次に示します。
$ 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
これで、debがシステムから削除/アンインストールされたときに、dpkgは/optディレクトリを削除しようとしません。