2010-08-19 59 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

相關問題