2010-12-30 15 views
0

私はdebバイナリパッケージを最初から作成するperlスクリプトを作った。 データ、コントロールなどを作成しました 私のdebパッケージでdpkg -iを実行すると、データからファイルを作成できないという不満があります。 例: '.dpkg-new'( ''の処理中)を作成できません:そのようなファイルまたはディレクトリはありません。ファイルに「作成できません」と表示され、インストール時に私の手でdebパッケージが作成されないのはなぜですか?

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

私は何か間違っていると思っています。私はpreinstで自分のディレクトリを作成しなければならないと考えていますが、そうは思わしくないかもしれません。

データからの私のファイルがpreinst shでコピーされるディレクトリを作成する必要がありますか、またはdpkgがそれを行い、何か間違っていますか?

答えて

1

手作業で.debバイナリパッケージを手作業で作成しないでください。 Debian New Maintainers' Guideは、正しいツールを使用してDebianパッケージを作成する方法について説明しています。

手作りのパッケージはあなたには正しいと思われるかもしれませんが、インストールされていないため、気づいていない小さな方法や、あなたには見えないより深刻な方法で明らかに欠陥があります。 .debが実際にarアーカイブであることを認識していない)。

+6

「do not do it」と言っても、dpkgの仕組みを知りたいという問題は本当に解決しません。 –

2

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

2

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

を見て私はそう、私は簡単にそれを維持することができます言及した1その後、私自身のperlのビルド・スクリプトがはるかに簡単にしています。

プロセスで得られた有益な情報:
0. debは3つのファイルを含むARアーカイブであり、ファイルの順序は重要です。
1. control.tar.gzのスクリプトを実行可能にする必要があります。
2.ディレクトリが存在しない場合は、ディレクトリを作成するためのプリインストールスクリプトを用意しておくとよいでしょう。
3. dpkgがジップを解凍することを決定する場合があります(これは、zipがdata.tar.gz内の唯一のファイルだった場合に起こります)ので、postinstallスクリプトで確認してください。
4.いくつかのファイルをtar.gzするときは、あなたのtarのディレクトリ構造を含むディレクトリにchmodを実行してください。

4

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

私は、data.tar.gzアーカイブを構築するときにtarに渡すファイルのリストを生成していました。アーカイブを手動で解凍して解凍すると、それはうまく収縮しますが、dpkgは失敗します。

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

私がdata.tar.gzを作成したとき、私はdpkg-deb/buildとほぼ同じオプションでビルドしました。cはdpkg-1.15.8.11ソースで実行されます。

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

代わりに、私はその理由の多くがあります

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

1

を使用。

dpkg -i -D1110 mydeb.deb 

そして、誰かが問題を解決できるようにするために結果を投稿してください。

関連する問題