나는 다음과 같은 구조를 가지고 있습니다 :
./inst/opt/test/ls
/bin/ls
: 단순함을 위해 바이너리의 복사본입니다 .
./inst/DEBIAN/changelog
:
test (1) unstable; urgency=low
* test 1
-- test <[email protected]> April 28, 2020
./inst/DEBIAN/control
:
Package: test
Version: 1
Architecture: amd64
Section: unknown
Priority: optional
Maintainer: test <[email protected]>
Build-Depends: debhelper (>= 8.0.0)
Standards-Version: 3.9.4
Homepage: https://www.test.com/
Depends: libappindicator1
Description: Test
./inst/DEBIAN/compat
:
9
여태까지는 그런대로 잘됐다.
내가 달성하고 싶은 것은 설치 후 setuid 비트를 ls
자체적 으로 설정하고 설정하는 것입니다 root
. 이를 수행하려는 나의 많은 시도 중 하나는 다음과 같습니다.
./inst/DEBIAN/rules
:
#!/usr/bin/make -f
%:
dh $@
override_dh_fixperms:
dh_fixperms --exclude ls
find . -name ls -exec chmod +s {} \;
하지만 이 파일이 있든 없든 결과는 전혀 변하지 않습니다.
다음 명령을 사용하여 deb 패키지를 빌드합니다.
dpkg-deb --build ~/test/inst/ ~/test/
분명히 뭔가 큰 것을 놓쳤습니다. 누구든지 나에게 무엇이든 말해 줄 수 있습니까?
이것은 postinst
나에게 선택 사항이 아닙니다.
답변1
바이너리 패키지를 직접 빌드하면 debian/rules
소스 패키지에서 빌드할 때만 처리됩니다.
setuid 비트가 있는 파일을 사용하여 바이너리 패키지를 빌드하려면( chmod +s
고정 비트가 아닌 setuid 비트 설정) 실행하기 전에 파일 시스템에서 설정하십시오 dpkg-deb
.
chmod 4755 inst/opt/test/ls
그런 다음 파일이 루트 소유로 저장되었는지 확인하려면 다음을 dpkg-deb
실행하십시오 fakeroot
.
fakeroot dpkg-deb -b ~/test/inst ~/test
dpkg-deb -c
생성된 패키지 콘텐츠를 검사하려면 표시되어야 합니다.
-rwsr-xr-x root/root ... ./opt/test/ls