dh_usrlocalが実際にすること

dh_usrlocalが実際にすること

これdh_usrlocal マンページ私にとっては少し不思議なようです。

パッケージビルドディレクトリでusr / localのサブディレクトリを見つけて削除し、管理者スクリプトの一部に置き換えて(-nを使用しない限り)インストール時にディレクトリを作成し、パッケージが削除されたときに一致する方法で削除します。 Debian ポリシー。これらのフラグメントは、dh_installdebによってメンテナンススクリプトに挿入されます。 debhelper管理者スクリプトの部分については、dh_installdeb(1)を参照してください。

管理者のスクリプト、スニペット、-n...良い、しかしそれは何ですか?目的?実際に(空の?)ディレクトリを作成しますか?

誰かが私にもっと実用的な方法で親切に説明できますか?ポリシーのどの部分を読むべきですか?アプリがインストールされていることを確認する必要がありますかPREFIX=/usr

ベストアンサー1

目的は、パッケージがポリシーに準拠するのを助けることです。 Debianポリシー(およびIIRC、ファイルシステム階層標準、またはFHS)公式のDebianパッケージは次のとおりです。許可されていません次のファイルまたはディレクトリを所有します。/usr/local- このディレクトリツリーはローカルシステム管理者に属します。

~からhttps://www.debian.org/doc/debian-policy/ch-opersys.html#s9.1.2:

(太い強調は私が追加しました)

9.1.2。現場別計画

FHS規制によると、パッケージ/usr/localにファイルを配置できません。またはdpkgで解凍するためにファイルシステムアーカイブに入れるか、管理者スクリプトで操作します。

しかし、パッケージは/usr/localの下に空のディレクトリを作成できます。システム管理者がサイト固有のファイルをどこに配置するかを知ることができます。これは/usr/localのディレクトリではなく、/usr/localのディレクトリのサブディレクトリです。これらのディレクトリ(/usr/local/*/dir/)が空の場合は、パッケージを削除するときに削除する必要があります。

これは、/usr/local のディレクトリではなく、/usr/local の下のディレクトリにのみ適用されます。パッケージは、FHSセクション4.5にリストされているディレクトリを除いて、/usr/localディレクトリ自体にサブディレクトリを作成しないでください。ただし、必要に応じて以下にディレクトリを作成できます。 4.5にリストされたディレクトリを作成しても削除できません。

/ usr / localはリモートサーバーから読み取り専用でマウントできるため、これらのディレクトリはpostinstおよびprermメンテナンススクリプトによって作成および削除する必要があり、.debアーカイブに含めることはできません。これらの操作のいずれかが失敗しても、これらのスクリプトは失敗しないでください。

たとえば、emacsen-common パッケージには次の内容を含めることができます。

if [ ! -e /usr/local/share/emacs ]; then
    if mkdir /usr/local/share/emacs 2>/dev/null; then
        if chown root:staff /usr/local/share/emacs; then
            chmod 2775 /usr/local/share/emacs || true
        fi
    fi
fi

postinstスクリプトから

rmdir /usr/local/share/emacs/site-lisp 2>/dev/null || true
rmdir /usr/local/share/emacs 2>/dev/null || true

prermスクリプトから。 (このフォームは、スクリプトが中断されたときに/usr/local/share/emacsディレクトリを削除し続けるためのものです。)

ローカルにパッケージを追加するために/usr/localにディレクトリを作成する場合は、/usr/localの設定が/usrの対応する設定よりも優先されるようにする必要があります。

ただし、/usr/localとその内容はローカル管理者のみが使用できるため、パッケージは適切な操作のために/usr/local内のファイルまたはディレクトリの存在に依存することはできません。

/usr/local ディレクトリ自体と、このパッケージによって生成されるすべてのサブディレクトリは、(デフォルトで) 権限 2775 (グループ書き込み可能およびグループ ID 設定) を持ち、root:staff が所有する必要があります。

また、見ることができますhttps://wiki.debian.org/FilesystemHierarchyStandard

dh_usrlocalポリシーに記載されている例に従って、インストール/削除時にそのディレクトリをパッケージから削除し、パッケージスクリプト(.postinstおよびスクリプト)のコードに置き換えて、そのディレクトリを作成/削除します。.prerm

ディレクトリはインストール時に作成され、削除時に削除されるため、これはあまり違いがないように見えるかもしれませんが、Debianはパッケージのポリシー準拠の失敗を他のエラーと同じくらい深刻と見なします。ポリシーを一貫して厳密に遵守することは Debian の一部です。パッケージ品質保証の主な要素。

おすすめ記事