0

deb バイナリ パッケージをゼロから作成する perl スクリプトを作成しました。データ、コントロールなどを作成しましたが、deb パッケージで dpkg -i を実行すると、データからファイルを作成できないと不平を言います。例: '.dpkg-new' を作成できません ('' の処理中): そのようなファイルまたはディレクトリはありません。

確認するためにいくつかの .deb パッケージをダウンロードしましたが、ディレクトリ構造の作成に preinst スクリプトを使用していません。

preinst に独自のディレクトリを作成する必要があると考えていますが、正しくないようです...おそらく何か不足していますか?

データからのファイルが preinst sh にコピーされるディレクトリを作成する必要がありますか、それとも dpkg で作成する必要がありますか?

4

5 に答える 5

4

私が書いたRubyスクリプトでも同じ問題がありました。

data.tar.gz アーカイブを構築するときに、tar に渡すファイルのリストを生成していました。アーカイブを手動で unzip して untar すると、正常に圧縮されますが、dpkg は失敗します。

ファイルのリストには、作成する各ディレクトリも含める必要があることがわかりました。

data.tar.gz を作成したとき、dpkg-1.15.8.11 ソースの dpkg-deb/build.c とほぼ同じオプションでビルドしたことに注意してください。

execlp(TAR, "tar", "-cf", "-", "--format=gnu", "--null", "-T", "-", "--no-recursion", NULL);

代わりに私が使用した

IO.popen("gnutar -czf - --format=gnu -T - --no-recursion", "r+")

于 2012-01-19T09:15:54.470 に答える
2

@Arrowmaster の発言に加えて、http: //www.debian.org/doc/debian-policy/でファイルの詳細な説明を確認してください。パッケージ自体をビルドした後、lintianツールでチェックして、見落としている可能性のある明らかなものがないかどうかを確認できます。

于 2011-01-22T22:15:03.440 に答える
2

問題の解決策を探している場合は、
「rpm 仕様ファイルから deb パッケージをビルドしてください。」
ここを見てください http://www.deepnet.cx/debbuild/

私は独自の perl ビルド スクリプトを前述のスクリプトよりもはるかにシンプルにして、簡単に維持できるようにしました。

プロセスで得られたいくつかの有用な知識:
0. deb は 3 つのファイルを含む ar アーカイブであり、ファイルの順序が重要です。
1. control.tar.gz のスクリプトを実行可能にする必要があります。
2. ディレクトリが存在しない場合にディレクトリを作成するプレインストール スクリプトがあると便利です。
3. dpkg が zip を解凍することを決定することがあります (これは、zip が data.tar.gz 内の唯一のファイルである場合に発生します)。ポストインストール スクリプトでそれを確認します。
4. いくつかのファイルを tar.gz するときは、tar のディレクトリ構造を含むディレクトリに chmod してください。

于 2011-02-02T05:10:58.377 に答える
1

手動で.debバイナリパッケージを作成しようとしないでください。Debian New Maintainers'Guideは、正しいツールを使用してDebianパッケージの作成を開始する方法をカバーしています。

手作りのパッケージはあなたには正しいように見えるかもしれませんが、インストールされていないため、気づかなかったマイナーな方法、またはあなたには見えないより深刻な方法のいずれかで明らかに欠陥があります(たとえば、ほとんどの人は気づいていません) .debは実際にはarアーカイブです)。

于 2011-01-22T06:03:44.147 に答える
1

これには多くの理由があります。あなたは本当に実行する必要があります:

dpkg -i -D1110 mydeb.deb

そして、結果を投稿して、誰かが問題を解決できるという希望を持ってください。

于 2012-06-20T02:01:15.270 に答える