7

私はdebianディレクトリにファイルを持っており( 、、などproject.initとともに)、ファイルに(ルールで)持っています。rulescontroldh_installinitrulesbinary-arch

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
4

5 に答える 5

8

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

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

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

ここで何が起こっている...

init スクリプトは、デフォルトで設定ファイルとしてマークされています/etc1

パッケージをインストールし、init ファイルを削除してから、パッケージを再インストールしたと思います。

この場合、init ファイルを削除することはそれを変更することと見なされ2dpkg「構成ファイル」を「上書き」することを拒否します。

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

ノート:

  1. conffiles - Debian 新規メンテナガイド
  2. 空のファイルには MD5sumd41d8cd98f00b204e9800998ecf8427eがありますが、一致しないチェックサムは同じ動作を引き起こします
于 2012-09-19T21:27:37.283 に答える
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

于 2009-09-10T14:13:27.060 に答える
1

この時点で、作成された .deb ファイルの内容を確認します。そのために dpkg-deb -c を使用できます。

init スクリプトが .deb にある場合は、次のように /etc/init.d にインストールする必要があります。

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

Debian の最近のバージョンを実行している場合、パッケージのコンテンツは、予想どおり debian/project ではなく debian/tmp から生成される場合があります。dh_install を使用して、ファイルを debian/projet から debian/tmp に移動できます。

于 2009-06-03T18:02:49.363 に答える
0

project.init ファイルを debian-folder に入れるだけで、 rules-file に特別な制約を追加しないと成功しました。このステップが機能したら、テストして特別な制約を追加します。

debian-folder の成功を制御するには、次のもの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
于 2014-02-17T10:33:49.473 に答える
0

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

于 2009-06-11T13:25:16.547 に答える