2010-08-19 25 views
0

compte tenu de cette installation simple cible pour mon Makefile:Makefile: installation d'une cible utilisable depuis la CLI ou un système de conditionnement?

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) 

Je peux simplement faire make install comme racine (ou utilisez sudo) et il va très bien installer. En tant qu'utilisateur foo (non privilégié), l'appel make install renvoie une erreur (option -o a besoin de super-utilisateur).

J'ai besoin de changer cela afin que je puisse à la fois sudo make install, make install DESTDIR=/tmp/foo ou même empaqueter ceci en .deb ou .rpm et juste appeler la cible d'installation à partir de mon Makefile.

Quelle sera la meilleure solution pour moi? Remplacer les appels d'installation à cp? Supprimer -o et mettre un chown/chmod?

Merci.

Répondre

1

Vous pouvez faire installer commande une variable qui peut être remplacée sur la ligne de commande make, quelque chose comme

INSTALL_USER = mysql 
INSTALL_GROUP = mysql 
INSTALL = install -d -m 0755 -o $(INSTALL_USER) -g $(INSTALL_GROUP) 
INSTALL_DIR = $(INSTALL) -d 

J'attends des systèmes d'emballage pour pouvoir faire face à votre makefile de toute façon, parce que c'est le genre des choses que d'autres ont écrites. La construction du paquet Debian s'exécute en tant que root (ou plutôt fait semblant de s'exécuter en tant que root, par l'intermédiaire de fakeroot), donc il permettra et verra les changements de propriété.

Notez que Debian policy serait not allow the permissions you set, car il nécessite que tous les fichiers appartiennent à root, sauf s'il y a une raison impérieuse de ne pas le faire. Je ne vois pas de raison pour que l'un des fichiers soit la propriété de mysql (ou ai-je oublié une raison spécifique à mysql pour laquelle les plugins et les fichiers de configuration ne peuvent pas appartenir à root?). La raison en est un problème de sécurité: si quelqu'un parvient à remplacer les fichiers par mysql, ils ne devraient pas être en mesure d'injecter du code dans les exécutables et les fichiers de configuration.

Étant donné que les responsables de la distribution peuvent vouloir remplacer les autorisations que vous avez définies de toute façon, ne vous inquiétez pas.

+0

Je sais que sur Debian, construire un paquet peut être falsifié en tant que root. Ce dont je ne suis pas sûr, c'est comment cela se fait avec le système RPMbuild. Mysql: mysql est requis dans notre environnement et par le produit mysql-zrm autant que je sache. –