私はそれを使用する方法を知っていますが/etc/services
、それを変更してinetd
後でパッケージをapt-get
新しいデフォルトパッケージに更新すると変更が消えます(apt-get dist-upgrade
Debian 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 #46049、Debian #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用の追加ファイルを提供するようですがpasswd
、shadow
およびgroup
情報のみを提供します。
答え3
残念ながら、これを行う方法はありません。 1つのオプションは、netbase
パッケージが自動的に更新されないように「維持」することです。
echo "netbase hold" | dpkg --set-selections
別のオプションは、パッチを宣言し、そのファイルを独自のファイルとマージするために管理者/etc/services.local
に送信することです。注釈付きの行を理解するためにソート/マージを変更する必要がない限り、これはそれほど難しくないと思います。netbase
/etc/services
#