나는 그것을 사용하는 방법을 알고 있지만 /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
자신의 항목을 연결하거나 데비안 파일을 변환하려는 경우 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
이는 때때로 다양한 버그 추적기에 표시되는 것 같습니다.데비안 #46049,데비안 #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 데이터베이스더 일찍. 따라서 누군가가버클리 데이터베이스추가 서비스 이름이 있는 데이터베이스가 /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
참고: 하나 더 있습니다.libnss 추가 사용자패키지에서는 NSS에 대한 추가 파일을 제공하는 것으로 보이지만 passwd
, shadow
및 group
정보만 제공합니다.
답변3
불행히도 이를 수행할 수 있는 방법이 없습니다. 한 가지 옵션은 netbase
패키지가 자동으로 업데이트되지 않도록 "유지"하는 것입니다 .
echo "netbase hold" | dpkg --set-selections
또 다른 옵션은 패치를 선언 하고 해당 파일을 자체 파일과 병합하기 위해 관리자 /etc/services.local
에게 제출하는 것입니다 . 주석 처리된 줄을 이해하기 위해 정렬/병합을 수정해야 하는 경우가 아니면 이것이 그리 어렵지 않을 것이라고 생각합니다 .netbase
/etc/services
#