Makefile:安装可从 CLI 或打包系统使用的目标吗?
给定我的 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)
我只需以 root 身份执行 make install
(或使用 sudo
),它就会完美安装。 作为 foo(非特权)用户,调用 make install
将返回错误(-o 选项需要超级用户)。
我需要更改此设置,以便我可以 sudo make install
、make install DESTDIR=/tmp/foo
甚至将其打包到 .deb 或 .rpm 中,然后调用从我的 Makefile 安装目标。
对我来说最好的解决方案是什么?替换对 cp 的安装调用?删除 -o 并放置 chown/chmod ?
谢谢。
given this simple install target for my 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)
I can simply do make install
as root (or use sudo
) and it will beautifully install.
As foo (unprivileged) user, calling make install
will returns an error (-o option needs super-user).
I need to change this so that I can both sudo make install
, make install DESTDIR=/tmp/foo
or even package this into .deb or .rpm and just call the install target from my Makefile.
What will be the best solution for me ? Replace install calls to cp ? Remove -o and put a chown/chmod ?
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以将 install 命令设置为一个可以在 make 命令行上覆盖的变量,就像
我希望打包系统能够处理您的 makefile 一样,因为这是其他人的事情已经写了。 Debian 软件包构建以 root 身份运行(或者通常通过 fakeroot 假装以 root 身份运行),因此它将允许并看到所有权的变化。
请注意,Debian 政策将不允许您设置的权限,因为它要求所有文件都由 root 拥有,除非有一个令人信服的理由不这样做。我看不到任何文件由 mysql 拥有的原因(或者我是否错过了插件和配置文件不能由 root 拥有的一些特定于 mysql 的原因?)。原因是安全问题:如果有人设法将文件覆盖为
mysql
,他们不应该能够将代码注入到可执行文件和配置文件中。由于发行版维护者可能想要覆盖您设置的权限,因此不要为此烦恼。
You can make install command a variable that can be overridden on the
make
command line, something likeI'd expect packaging systems to be able to cope with your makefile anyway, because it's the kind of things other people have written. Debian package building runs as root (or rather usually pretends to run as root, through fakeroot), so it will allow and see the ownership changes.
Note that Debian policy would not allow the permissions you set, since it requires all files to be owned by root unless there is a compelling reason not to. I can't see a reason for any of the files to be owned by
mysql
(or have I missed some mysql-specific reason why the plugins and configuration files can't be owned by root?). The reason is a security issue: if someone manages to overwrite files asmysql
, they should not be able to inject code into executables and configuration files.Since distribution maintainers may want to override the permissions you set anyway, don't agonize over this.