0

鉴于我的 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 installroot身份(或使用sudo),它会安装得很漂亮。作为 foo(非特权)用户,调用make install会返回错误(-o 选项需要超级用户)。

我需要更改它以便我可以两者sudo make installmake install DESTDIR=/tmp/foo甚至将它打包到 .deb 或 .rpm 中,然后从我的 Makefile 中调用安装目标。

对我来说最好的解决方案是什么?替换对 cp 的安装调用?删除 -o 并放一个 chown/chmod ?

谢谢你。

4

1 回答 1

1

您可以使 install command 成为可以在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 身份运行(或者更确切地说,通常通过fakeroot假装以 root 身份运行),因此它将允许并查看所有权更改。

请注意,Debian 政策不允许您设置权限,因为它要求所有文件都由 root 拥有,除非有令人信服的理由不这样做。我看不到任何文件被拥有的原因mysql(或者我错过了一些特定于 mysql 的为什么插件和配置文件不能被 root 拥有的原因?)。原因是一个安全问题:如果有人设法将文件覆盖为mysql.,他们应该无法将代码注入可执行文件和配置文件。

由于发行版维护者可能想要覆盖您设置的权限,因此不要为此烦恼。

于 2010-08-19T09:16:12.493 回答