パッケージが更新されたときに置き換えられない/ etc / servicesのシステム全体の「拡張」はありますか?

パッケージが更新されたときに置き換えられない/ etc / servicesのシステム全体の「拡張」はありますか?

私はそれを使用する方法を知っていますが/etc/services、それを変更してinetd後でパッケージをapt-get新しいデフォルトパッケージに更新すると変更が消えます(apt-get dist-upgradeDebian WheezyからJessieに切り替えたときに発生しました)。バックアップに保存されますが、変更を再統合する必要があります。そうしないと、パッケージマネージャで新しいデフォルトバージョンのインストールをスキップして新しいデフォルト値が見つからない可能性があります。

/etc/servicesユーザーが作成したシステム全体の「拡張」もロードし、私の変更のみを含むパッケージの更新によって構成が破損しないようにする方法はありますか?

私はDebian Jessieを調査しています(該当する場合)。

答え1

/etc/services構成ファイルしたがって、ローカルで変更し、変更されたバージョンで新しいパッケージバージョンをインストールした場合、dpkgはそのバージョンを維持するか新しいバージョンをインストールするかを尋ねます。残念ながら、変更をマージする簡単な方法は提供されていません。

あなたはできます移動するパッケージ/etc/servicesと独自のパッケージが提供されます。

dpkg-divert --add --local --rename --divert /etc/services.debian /etc/services

自分のエントリをリンクしたり、Debian ファイルを変換したい場合は、APT が操作の完了中にフックスクリプトを実行できます。スクリプトを宣言します。/etc/apt/apt.conf.d/local-etc-merge

DPkg::Post-Invoke {"cat /etc/services.local /etc/services.debian >/etc/services"}

または、次のものを使用できます。/etc/services 読み込み時にコマンドを呼び出す/etc/services.local(頻繁に修正しない限り、これは過剰です。)

答え2

これは時々さまざまなバグトラッカーに表示されるようです。Debian #46049Debian #711001右#133683。しかし、これらのどれも実装されていないようです。

要約すると:ネームサービススイッチ次の情報/etc/nsswitch.confが見つかる場所をお読みください。services

$ strace -f -e open,stat getent サービス > /dev/null
[...]
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY | O_CLOEXEC) = 3
open("/etc/nsswitch.conf", O_RDONLY | O_CLOEXEC) = 3
open("/usr/lib/libnss_db.so.2", O_RDONLY | O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY | O_CLOEXEC) = 3
open("/usr/lib/x86_64-linux-gnu/libdb-5.3.so", O_RDONLY | O_CLOEXEC) = 3
open("/var/lib/misc/DB_CONFIG", O_RDONLY) = -1 ENOENT (該当するファイルやディレクトリなし)
stat("/var/lib/misc/services.db", 0x7ffd79d77060) = -1 ENOENT(該当するファイルやディレクトリなし)
open("/etc/services", O_RDONLY | O_CLOEXEC) = 3
+++ 0で終了++++

libnss_db.so.2私がインストールしたのでこれを見つけることができましたlibnssデータベースより早く。したがって、誰かがBerkeleyデータベース追加のサービス名を持つデータベースが/var/lib/misc/services.db機能します。

修正する:(Debian / unstable here)の場合はlibnss-db実際に可能です。

$ grep ^[A-Z] /etc/default/libnss-db 
ETC = /etc/local
DBS = services
VAR_DB = /var/lib/misc
AWK = awk
MAKEDB = makedb --quiet

$ cat /etc/local/services
# Local services
foobar          1234/tcp                        # Foo
barbaz          4321/udp

$ make
services... done.

$ getent services | wc -l
559

$ getent services foobar barbaz
foobar                1234/tcp
barbaz                4321/udp

/etc/localだからこそいいえアップグレードプロセスに触れるべきではない登録済み構成ディレクトリ

それ以外の場合、これらのパス名はハードコードされているように見え、再コンパイル時にのみ変更/拡張できるため、上記のウィッシュリストチケットになります。

$ strings /lib/x86_64-linux-gnu/libnss_files.so.2 | grep services
/etc/services

注: もう 1 つあります。libnss 追加ユーザーパッケージはNSS用の追加ファイルを提供するようですがpasswdshadowおよびgroup情報のみを提供します。

答え3

残念ながら、これを行う方法はありません。 1つのオプションは、netbaseパッケージが自動的に更新されないように「維持」することです。

echo "netbase hold" | dpkg --set-selections

別のオプションは、パッチを宣言し、そのファイルを独自のファイルとマージするために管理者/etc/services.localに送信することです。注釈付きの行を理解するためにソート/マージを変更する必要がない限り、これはそれほど難しくないと思います。netbase/etc/services#

関連情報