web-dev-qa-db-ja.com

パッケージのアップグレード時にdpkgがシンボリックリンクを削除しないようにする

ファイルを/usr/local/Java/jre/lib/extにインストールするdebianパッケージがあります。ここで、/usr/local/Javaは、jvmが実際にインストールされている場所(この場合は/usr/lib/jvm/Java-6-Sun)へのシンボリックリンクです。

このパッケージの新しいバージョンは、jarを別の場所にインストールします。問題は、新しいバージョンをインストールすると、dpkgがそれ自体の後で整理しようとし、最終的に/usr/local/Javaシンボリックリンクが削除されることです。

これは、一時的であっても、非常に望ましくない状態です。

シンボリックリンクをそのままにしておくように説得するdpkgのフラグを見つけることができませんでした。また、シンボリックリンクに不変ビットを設定することはできないようです。

Debianパッケージ設定の変更は次のとおりです。

diff --git a/debian/dirs b/debian/dirs
--- a/debian/dirs
+++ b/debian/dirs
@@ -1 +1 @@
-usr/local/Java/jre/lib/ext
+usr/share/Java
diff --git a/debian/rules b/debian/rules
--- a/debian/rules
+++ b/debian/rules
@@ -30,7 +30,7 @@ install: build

        # Add here commands to install the package into debian/tmp.
        # $(MAKE) pure_install
-       cp thejar.jar $(TMP)/usr/local/Java/jre/lib/ext
+       cp thejar.jar $(TMP)/usr/share/Java

 # Build architecture-independent files here.
 binary-indep: build install

usr/local/Java/jre/lib/extdirsに残しておくと望ましい効果が得られると思いますが、これは問題を解決するだけです。このパッケージがシンボリックリンクの維持に責任を負わないようにしたいと思います。

だから:私のオプションは何ですか?

3
ryanm

シンボリックリンクはパッケージがインストールする単なるファイルであるため、通常の動作が適用されます。これらは私が考えることができるオプションです:

  • シンボリックリンクを設定ファイルとしてマークします。これがサポートされているかどうかはわかりませんが、サポートされている場合は、パッケージがパージされた場合にのみシンボリックリンクを削除する必要があります。
  • シンボリックリンクをファイルとしてインストールするのではなく、postinstスクリプトで作成します。
  • パッケージの一部としてではなく、手動でシンボリックリンクを作成するだけです。

古いバージョンがアンインストールされると、シンボリックリンクが指すものはすべて削除されるため、これによってどのように改善されるかはわかりません。

1
mgorven

Dpkg> 1.15.8の場合は、/etc/dpkg/dpkg.cfg.d/excludesに次のデータを入力してみてください。

path-exclude=/usr/local/Java/jre/lib/ext

出典: dpkgで不要なファイルを除外してディスク容量を節約|RaphaëlHertzog

Archユーザーの場合、/ etc /pacman.confでNoExtract =を使用し、パスから先頭のスラッシュを除外します。 ArchWiki またはman pacman.confを参照してください。

0
Casey Jones