2012-01-19 10 views
1

ビルドしたdebianパッケージには、ファイルのtarボール、制御ファイル、postinstファイルが含まれています。 dpkg-debを使用してビルドされ、dpkgを使用して正しくインストールされます。debianパッケージの内容のランタイムインストールディレクトリ

私が作ってみたいのは、ファイルのインストールディレクトリが、dpkg -iがdebファイルで実行されるときに設定される環境変数に基づいて実行時に決定されることです。私postinstスクリプトの環境変数をエコーし​​、私は適切にそのセットを見ることができます。

私の質問:

1)は、実行時に動的にインストールディレクトリを決定することが可能ですか?

2)どうすれば可能ですか? rulesファイルとmypackage.installファイルについて読んだことがありますが、どちらかがこれを達成できるかどうかわかりません。

ファイルをposinstスクリプト内のターゲットの場所にコピーすることで、ファイルをハックする可能性がありますが、可能であれば正しい方法で実行することをお勧めします。

ありがとうございます!

+0

インストールに '/ usr'以外のルートを使用するために' dpkg'に渡すことができるオプションがあります。 'deb'パッケージにはその意味での"インストールディレクトリ "がありません。あなたが今持っているものの例とそれを望むものを追加しておけば助けになります。理論的には、あなたの 'postinst'スクリプトから何かを移動することができますが、私はあなたを強く落胆させます。 – tripleee

+0

良いアイデア。私は--instdir =を使って試してみましたが、ファイルをコピーしましたがpostinstは--instdirがchrootを実行してから実行されないので、そこにdpkg adminディレクトリもなければなりません。私はまた、2つのディレクトリを分割できるかどうかを調べるために--rootと--admindirを組み合わせて試してみました。 rpmには再配置フラグがあるので、パッケージの場所を移動できます。このパッケージは2つの異なる組み込みLinuxディストリビューション上の異なる場所になければならないので、私は動的ディレクトリを持たなければなりません。例として、異なるマシン上の異なる場所に存在する1つのファイルをtarball内に仮定します。 –

+0

ファイルがconffileでない限り、私は単純に2つの異なる 'deb'パッケージを作成します。例はまだ助けになります。典型的なパッケージ管理ファイルは、 '/ usr/lib/yourpackage.so'と典型的なconffileのようなものです。 '/ etc/yourpackage.cfg'を実行します。 – tripleee

答えて

1

これは私がこの数週間前にこの問題について知ったことです。

パッケージ化されたバイナリでは、実行時に決定された宛先ディレクトリのdynamicallでdebianパッケージを構築することはできません。 configureを使用してインストールディレクトリを設定できるソースからビルドされたパッケージをインストールすると、これが可能である可能性があります。しかし、この場合、これらはUbuntuマシンに埋め込まれているのでmakeを持たないので、私はそのようなオプションを追求しませんでした。私はそれが動作したインストールのための非伝統的な方法(ハック)を試してみました。 debianパッケージには単に/ tmpに関連するタールボールが入っているだけなので、/ tmpの下にあるディレクトリに対してパッケージをビルドするだけです。 postinstスクリプトでは、アーカイブから永続的な場所にファイルをコピーする場所を決定できます。

リブートした後、/ tmp下のサブディレクトリを自動削除すると、dpkgはファイルパッケージが存在していない可能性があります。これは問題ではありませんでした。私が 'dpkg -l myapp'を実行したとき、それはまだインストールされているように見えました。 dpkg/apt-getを使ってパッケージを更新することも、問題なく動作しました。

「dpkg -r myapp」を使用してパッケージを削除しようとすると、dpkgが/ tmpを削除しようとしていることがわかりました。しかし、/ tmpは簡単には削除されないため、成功しませんでした。私たちの状況では、パッケージを削除することは決してありません。

ソースコードの違いにより、プラットフォームごとに再コンパイルする必要があるため、最終的に汎用パッケージを放棄しなければなりませんでしたが、私はこのようにしてしまい、動作しました。

--instdirを使用してパッケージのインストールディレクトリを変更しようとしましたが、ファイルを再配置しましたが、dpkgファイルが新しいinstdirに対して相対的に見つかりません。 --instdirはchrootのようなものです。私は--admindirと--rootをさまざまな組み合わせで試して、/と相対的にdpkgシステムを使用できるかどうかを確認しましたが、ファイルを再インストールしても動作しませんでした。 rpmには、Ubuntuではなく動作する再配置オプションがあると思います。

0

異なる環境でdpkg-debを6回実行して6種類のパッケージを生成するスクリプトを作成することもできます。変更を加えたら、スクリプトを実行するだけで、6つのパッケージがすべて生成され、postinstのハッキングを避けてマシンにインストールすることができます!

0

標準的な場所にインストールし、単にpostinstスクリプトを使用して目的の場所へのシンボリックリンクを作成するのはなぜですか?これははるかにクリーンで、dpk -Iの何かを壊すべきではありません。

関連する問題