给出了我的Makefile的简单安装目标:
install: zrm $(CONF)
install -D -m 0755 -o mysql -g mysql conf/lvm0.conf $(DESTDIR)/$(CONFDIR)/lvm0/mysql-zrm.conf
install -D -m 0755 -o mysql -g mysql conf/inc1.conf $(DESTDIR)/$(CONFDIR)/inc1/mysql-zrm.conf
install -D -m 0755 -o mysql -g mysql conf/dump0.conf $(DESTDIR)/$(CONFDIR)/dump0/mysql-zrm.conf
install -d -m 0755 -o mysql -g mysql $(DESTDIR)/$(PLUGIN)
install -m 0755 -o mysql -g mysql post-backup-st-zrm.pl $(DESTDIR)/$(PLUGIN)
install -d -m 0755 -o root -g root $(DESTDIR)/$(BINDIR)
install -m 4755 -o root -g root zrm $(DESTDIR)/$(BINDIR)
我可以简单地make install
作为 root (或使用sudo
),它会很好地安装。
作为foo( unprivileged )用户,调用make install
将返回错误(-o选项需要超级用户)。
我需要更改它,以便我可以同时sudo make install
,make install DESTDIR=/tmp/foo
或者将它打包成.deb或.rpm,然后从我的Makefile中调用安装目标。
对我来说最好的解决方案是什么?将安装调用替换为cp?删除-o并放入chown / chmod?
谢谢。
答案 0 :(得分:1)
您可以使install命令成为可以在make
命令行上覆盖的变量,例如
INSTALL_USER = mysql
INSTALL_GROUP = mysql
INSTALL = install -d -m 0755 -o $(INSTALL_USER) -g $(INSTALL_GROUP)
INSTALL_DIR = $(INSTALL) -d
我希望包装系统能够应对你的makefile,因为它是其他人写的东西。 Debian软件包构建以root身份运行(或者通常假装以root身份运行,通过fakeroot),因此它将允许并查看所有权更改。
请注意Debian policy会not allow the permissions you set,因为它要求所有文件归root所有,除非有令人信服的理由不这样做。我看不出mysql
拥有任何文件的原因(或者我错过了一些特定于mysql的原因,为什么插件和配置文件不能由root拥有?)。原因是安全问题:如果有人设法将文件覆盖为mysql
,则他们应该无法将代码注入可执行文件和配置文件。
由于分发维护者可能希望覆盖您设置的权限,因此不要为此烦恼。