로컬로 빌드하고 싶은 패키지가 있습니다. 패키지의 특정 파일은 해당 사용자가 처음 생성된 시스템에 설치됩니다. 이러한 파일은 이 사용자가 소유해야 합니다.
/usr/share/foo/protected.file
예를 들어, 내 서버에 "foo"라는 사용자가 있고 권한이 있는 파일 u=r
(즉, 해당 사용자만 파일을 읽을 수 있음)이 포함된 패키지 를 생성한다고 가정해 보겠습니다 .
내 파일에서 수행하려는 작업은 debian/rules
다음과 같이 설정됩니다.
override_dh_fixperms:
dh_fixperms
...
chmod 400 debian/foo/usr/share/foo/protected.file
chown foo:foo debian/foo/usr/share/foo/protected.file
...
내 문제는 패키지를 빌드하는 데 사용하는 컴퓨터에 "foo"라는 사용자가 없어서 chown
실패한다는 것입니다. 나는 그 컴퓨터에 "foo" 사용자를 생성하고 싶지 않습니다.
빌드 프로세스 중에 이 작업을 수행할 수 있는 방법이 있습니까(즉, 결과 .tar 파일을 해킹할 수 있다는 것을 알고 있지만 그러고 싶지는 않습니다).
다음 명령을 사용하여 로컬 빌드를 실행합니다.
dpkg-buildpackage -us -uc
답변1
기술적으로 말하자면, 원하는 방식으로 패키지를 구축할 수 있습니다. 파일 에 관한 한 , 패키지 구축의 마지막 단계에서 예상되는 모든 것은 .deb
상위 디렉터리에 debian/rules binary
올바른 이름을 가진 유효한 파일이 남아 있는 것입니다 . .deb
따라서 dh_builddeb
존재하지 않는 사용자가 소유한 파일로 tarball을 생성하도록 재정의할 수 있습니다.
그러나 비표준 사용자를 다루는 데비안 패키지는 이를 수행하지 않습니다. postinst
거기에서 사용자 생성도 처리합니다. 사용자가 존재하지 않으면 실행하기 전에 생성합니다 chown
. 이렇게 하면 기존 사용자에 관계없이 패키지를 설치할 수 있습니다.
귀하의 의견에서 언급한 경쟁 조건은 실제로 중요하지 않습니다. dpkg -i
성공하면 파일이 dpkg -i
완료되기 전에 올바른 소유권을 갖게 되며, 실패하면 패키지를 사용할 수 없는 것으로 간주되어야 합니다.
답변2
소유자를 이름으로 변경 하지 않으면 chown
숫자(이름이 매핑되는 UID)로 변경됩니다.
대상 시스템에서 특정 UID(및 GID)를 사용하여 사용자를 생성하고 해당 숫자를 사용하도록 명령을 변경해야 할 수도 있습니다.
chown 9876:9876 debian/foo/usr/share/foo/protected.file