クリーンアップ後にディレクトリを削除しない Debian パッケージの作成

クリーンアップ後にディレクトリを削除しない Debian パッケージの作成

クリーンアップ後に空のディレクトリを削除しないDebianパッケージを作成しようとしています。特に私は私が信頼するいくつかのCA証明書を含む独自のパッケージを作成しています。

私はDebianが提案した証明書のインストール方法に従います/usr/local/share/ca-certificates。私が経験している問題は、ca-certificatesパッケージがインストール時に作成され、/usr/local/share/ca-certificatesパッケージをクリアしたときにそのディレクトリを維持したいということです。

私の目標は信頼チェーンをインストールすることですが、/usr/local/share/ca-certificates/mychainDebianパッケージが削除されたらdpkgが次のことを行うことができるようにしたいと思います。いいえ/usr/local/share/ca-certificatesディレクトリが空の場合、パッケージはca-certificates明示的に作成されたため削除されます。

明確な答えを見つけるためにあちこちを見つけましたが、見つけたのは長いフォーラムの投稿と電子メールスレッドだけでした。

答え1

スクリプトを追加postrm:

#!/bin/sh

set -e

case "$1" in
  purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
    # Recreate the /usr/local/share/ca-certificates directory, since we are
    # ignoring Debian Policy by intentionally installing here. Removal of
    # ca-certificates-local removes this directory if empty.
    if [ ! -e /usr/local/share/ca-certificates ]; then
        if mkdir /usr/local/share/ca-certificates 2>/dev/null; then
            chown root:staff /usr/local/share/ca-certificates
            chmod 2775 /usr/local/share/ca-certificates
        fi
    fi
;;

*)
    echo "postrm called with unknown argument \`$1'" >&2
    exit 1
;;
esac

#DEBHELPER#

exit 0

このコードは以下で提供されます。ca - 証明書 - ローカル:

これは、ローカル/ディレクトリに仮想CA証明書を含むサンプルスタブパッケージです。仮想証明書を削除し、信頼できるローカルルートCA(PEM形式、「.crt」で終わるファイル名)をlocal /ディレクトリにコピーし、必要に応じてdebian /ディレクトリのファイルを編集して、カスタムパッケージをビルドします。します。

バラより閲覧ファイルこの例に基づいてカスタムローカルルートCAパッケージをビルドするには

したがって、これらのパッケージを作成してインストールする簡単な方法は次のとおりです。

git clone git://anonscm.debian.org/collab-maint/ca-certificates.git ~/ca-certificates
cd ~/ca-certificates/examples/ca-certificates-local/
rm local/Local_Root_CA.crt
cp <path-to-your-cert> local/
# edit debian/control: change package-name, description, etc
# install build dependencies: http://unix.stackexchange.com/questions/177505/how-to-install-parse-build-dependencies-from-debian-control/211319#211319
dpkg-buildpackage
dpkg -i ../<package-name-version>.deb

答え2

別のローカルパスにインストールし、postinstスクリプトを作成してディレクトリを作成し、/usr/localそこにファイルをコピーします。

想像できるように、これはDebianポリシーの内容と精神に違反する可能性があります。しかし、それはネットワーク、ルール、ユーザー(そして簡単に発見できる解決策)です。

より使いやすくするために、これらのファイルを構成ファイルとしてマークしてパッケージを消去すると、少なくとも削除されますが、削除するだけでそのまま残すことができます。

最も重要なのは、ファイルがdpkg不明で削除できないことです。

関連情報