2009-05-26 28 views
6

私はdebianディレクトリ(rulescontrolなど)にproject.initファイルがあり、rulesファイル(binary-archルール)にdh_installinitがあります。package.initがインストールされていません

dpkg-buildpackageが完了すると、initスクリプトがdebian/project/etc/init.d/projectにコピーされ、さまざまなプレ/ポストスクリプトが作成されました。

しかし、私が実際に.deb(dpkg -i)をインストールすると、init.dスクリプトがインストールされないので、このプロセスの一部が欠けているはずです。 "New Maintainer's Guide"はinit.dの詳細にはあまりありません(あまりにも進んでいるので、基本的には使用しないように言います)。

dh_installinitコマンドの冗長出力は次のとおりです。

dh_installinit 
    install -p -m755 debian/project.init debian/project/etc/init.d/project 
    echo "# Automatically added by dh_installinit">> debian/project.postinst.debhelper 
    sed "s/#SCRIPT#/project/;s/#INITPARMS#/defaults/;s/#ERROR_HANDLER#/exit \$?/" /usr/share/debhelper/autoscripts/postinst-init >> debian/project.postinst.debhelper 
    echo '# End automatically added section' >> debian/project.postinst.debhelper 
    echo "# Automatically added by dh_installinit">> debian/project.prerm.debhelper 
    sed "s/#SCRIPT#/project/;s/#INITPARMS#/defaults/;s/#ERROR_HANDLER#/exit \$?/" /usr/share/debhelper/autoscripts/prerm-init >> debian/project.prerm.debhelper 
    echo '# End automatically added section' >> debian/project.prerm.debhelper 
    echo "# Automatically added by dh_installinit">> debian/project.postrm.debhelper 
    sed "s/#SCRIPT#/project/;s/#INITPARMS#/defaults/;s/#ERROR_HANDLER#/exit \$?/" /usr/share/debhelper/autoscripts/postrm-init >> debian/project.postrm.debhelper 
    echo '# End automatically added section' >> debian/project.postrm.debhelper 
+2

を使用すると、「インストールされません」により、正確に何を意味するのですか? debには存在せず、/etc/init.dにインストールされていないか、開始/停止リンクが作成されていませんか? –

+0

私はそれが.debにあるかどうかをテストする方法がわかりません。 /etc/init.dには表示されません(そして、明らかに開始/停止リンクは作成されません)。 –

+0

私は非常に似た問題を抱えていました。起動スクリプトがパッケージに含まれていました(dpkg -cでリストされていてもそれを見ることができます)が、インストールされません。私は最終的にcompatバージョンを変更しようとしました(7を使用して8に切り替えました)。 –

答えて

1

私が作成された.debファイルの内容を確認します。その目的のためにdpkg-deb -cを使うことができます。

initスクリプトは.debファイル内にある場合、それはちょうどこのように、/etc/init.dの中にインストールされるはずです:あなたは、Debianの、あなたのコンテンツの最新バージョンを実行する場合

 
... 
drwxr-xr-x root/root   0 2009-06-03 14:01 ./etc/ 
drwxr-xr-x root/root   0 2009-06-03 14:01 ./etc/init.d/ 
-rwxr-xr-x root/root  2558 2009-02-13 11:27 ./etc/init.d/balance 
... 

あなたが期待しているようにdebian/projectの代わりにdebian/tmpからパッケージを生成するかもしれません。 dh_installを使用してdebian/projetからdebian/tmpにファイルを移動することができます。

+0

良い理論ですが、私の場合、 'dpkg-deb -c'はファイルが' .deb'にあることを示しています。 – Mikel

+0

パッケージを解凍すると、initスクリプトも同様に表示されますか? 'mkdir/tmp/fooのようなもの。 dpkg -x packge.deb/tmp/foo; ls -l/tmp/foo/etc/init.d' –

0

他のdh_ *スクリプトに-Pオプションを使用していますが、このスクリプトは使用していませんか?このオプションを使用する場合は、すべてのdh_ *スクリプトでそれを使用する必要があります。

2

私は/etc/init.d/のシンボリックリンクを作成/削除するユーティリティスクリプト "update-rc.d"を見ているべきだと思います。

このスクリプトは、DEBIAN制御ファイル "postinst" & "postrm"で使用します。

など。 'postinst'の場合: update-rc.d mswitch start 20 2 3 4 5。ストップ0 1 6。

など。 'postrm'の場合: update-rc.d mswitch remove

+1

私はdownvoterではありませんでしたが、これは正解ではないので、おそらくこれを打ち切りました。 'dh_installinit'ツールはpostinstとpostrmに適切な' update-rc.d'呼び出しを挿入します。これには適切な状態遷移中にメンテナースクリプトが呼び出されていることが含まれます。 –

+0

「ポール」と言ってくれてありがとう。この手順は私のために働いたが、私は良い方法があることに注意する。 – jldupont

8

パッケージにはConffilesブロックのinitスクリプトのエントリが/var/lib/dpkg/statusにありますか?

Package: <project> 
... 
Conffiles: 
/etc/init.d/<project> d41d8cd98f00b204e9800998ecf8427e 

/etc/init.d/<project>/var/lib/dpkg/info/<project>.conffiles含まれているのですか?ここで

は、彼らが/etcの下で暮らすため、

initスクリプトは、デフォルトでは、設定ファイルとしてマークされている...何が起こっているのです。

私はあなたがパッケージをインストールしたと思いますが、initファイルを削除してパッケージを再インストールしました。

この場合、初期化ファイルを削除すると、となります。dpkgは、「構成ファイル」を上書きすることを拒否します。

Conffilesセクションを/var/lib/dpkg/statusから削除すると問題を解決できるはずです。

注:

  1. conffiles - Debian New Maintainer's Guide
  2. 私は唯一のプロジェクトを入れたときに、私は、成功していた空のファイルがのMD5sum d41d8cd98f00b204e9800998ecf8427eを持っていますが、任意の非マッチングのチェックサムが同じ行動
+1

conffilesのエントリを削除するのではなく、予想される動作を変更するのではなく、 'apt'にconffilesのインストールを強制するのが良いでしょう。' sudo apt-get -o Dpkg :: Options :: = " - force- confmiss "install --reinstall ' –

+0

dpkg-scanpackgesとapt-get update/install(--force-confnewフラグ付き)を使ってカスタムパッケージをインストールしました。それから、apt-get removeを使ってアンインストールしました。その後、設定/ログファイルを削除しました。その後、同じ方法でパッケージを再インストールしましたが、設定ファイルはまったくインストールされませんでした。 Conffilesセクションを削除すると、私の問題も解決しました。ありがとうございます! – wrapperapps

+1

@RaelGugelminCunhaのように、私の初期化スクリプトを削除した後にインストールされていない、同様の問題を解決するために、 "--force-confmiss"を追加で使用しました – wrapperapps

0

の原因となります.initファイルをdebian-folderに置き換え、を実行しないでください。は、rulesファイルに特別な制約を追加しません。この手順が完了したら、特別な制約が追加されていることをテストします。 debian-フォルダcat *.postinst.debhelperの成功を制御するに

は含まれています

# Automatically added by dh_installinit 
if [ -x "/etc/init.d/<packagename>" ]; then 
    if [ ! -e "/etc/init/<packagename>.conf" ]; then 
     update-rc.d <packagename> defaults >/dev/null 
    fi 
    invoke-rc.d <packagename> start || exit $? 
fi 
関連する問題