1

ファイルの tar ボール、制御ファイル、および postinst ファイルを含む、作成した debian パッケージがあります。dpkg-deb を使用してビルドされ、dpkg を使用して適切にインストールされます。

変更したいのは、deb ファイルに対して dpkg -i を実行したときに設定される環境変数に基づいて、実行時にファイルのインストール ディレクトリを決定することです。postinst スクリプトで環境変数をエコーアウトすると、正しく設定されていることがわかります。

私の質問:

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

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

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

前もって感謝します!

4

3 に答える 3

2

これが、この問題について過去数週間でわかったことです。

事前にパッケージ化されたバイナリでは、実行時に動的に決定される宛先ディレクトリを使用して debian パッケージをビルドすることはできません。configureを使用してインストールディレクトリを設定できるソースからビルドされたパッケージをインストールすると、これが可能になると思います。ただし、この場合、これらは組み込みの Ubuntu マシンであるため、作成されていないため、そのようなオプションを追求しませんでした。インストールするための非伝統的な方法(ハック)を考え出しましたが、それはうまくいきました。debian パッケージには / を基準とした tar ボールが含まれているだけなので、/tmp の下のディレクトリを基準にしてパッケージをビルドするだけです。その後、postinst スクリプトで、ファイルをアーカイブから永続的な場所にコピーする場所を決定できます。

再起動後、/tmp の下のサブディレクトリが自動的に削除された後、dpkg はファイル パッケージの存在を認識しない可能性があると予想していました。これは問題ではありませんでした。「dpkg -l myapp」を実行すると、まだインストールされていると表示されました。dpkg/apt-get を使用したパッケージの更新も問題なく機能しました。

私が見つけたのは、「dpkg -r myapp」を使用してパッケージを削除しようとすると、dpkg が /tmp を削除しようとするが、これは良くないということです。ただし、 /tmp は簡単に削除できないため、成功しませんでした。さらに、私たちの状況では、パッケージを削除することはなく、単にアップグレードするだけです。

ソースのコードの違いにより、プラットフォームごとに再コンパイルする必要があるため、最終的にユニバーサルパッケージを放棄する必要がありましたが、このままにしておけばうまくいきました。

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

于 2012-01-28T00:01:54.027 に答える
0

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

于 2013-05-09T17:28:34.727 に答える