我有以下结构:
./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
到目前为止,一切都很好。
我想要实现的是在安装后让其ls
拥有root
并设置 setuid 位。这是我这样做的众多尝试之一:
./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
然后,为了确保文件存储为 root 所有,请dpkg-deb
运行fakeroot
:
fakeroot dpkg-deb -b ~/test/inst ~/test
dpkg-deb -c
使用should show检查生成的包内容
-rwsr-xr-x root/root ... ./opt/test/ls