2010-08-19 60 views
0

给出的这个简单的安装目标为我的Makefile:Makefile:从CLI或包装系统安装目标是否可用?

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(或使用sudo),它会安装精美。 由于foo(非特权)用户,调用make install将返回一个错误(-o选项需要超级用户)。

我需要改变它,以便我可以sudo make install,make install DESTDIR=/tmp/foo甚至将其打包为.deb或.rpm,并且只需从我的Makefile中调用安装目标即可。

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

谢谢。

回答

1

您可以安装命令,可以在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 policynot allow the permissions you set,因为它需要所有文件归根,除非有令人信服的理由不。我无法看到任何文件被mysql拥有的原因(或者我错过了某些特定于mysql的原因,为什么插件和配置文件不能由root拥有?)。原因是一个安全问题:如果有人设法覆盖文件为mysql,他们不应该能够将代码注入到可执行文件和配置文件中。

由于发行版维护者可能想重写您设置的权限,请不要为此而苦恼。

+0

我知道在Debian上,构建一个包可以伪造成root。我不确定的是,这是如何用RPMbuild系统完成的。 mysql:据我所知,我们的环境和mysql-zrm产品都需要mysql。 – 2010-08-19 09:23:33

相关问题