Makefile: установить цель, используемую из CLI или системы упаковки? - PullRequest
0 голосов
/ 19 августа 2010

учитывая эту простую цель установки для моего 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 install как root (или использовать sudo), и он будет прекрасно установлен.Для пользователя foo ( непривилегированный ) вызов make install вернет ошибку (опция -o требует суперпользователя).

Мне нужно изменить это, чтобы я мог sudo make install, make install DESTDIR=/tmp/foo или даже упаковать это в .deb или .rpm и просто вызвать цель установки из моего Makefile.

Чтобудет лучшим решением для меня?Заменить установочные вызовы на cp?Удалить -o и поставить chown / chmod?

Спасибо.

1 Ответ

1 голос
/ 19 августа 2010

Вы можете сделать команду установки переменной, которую можно переопределить в командной строке make, например,

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

Я бы ожидал, что системы упаковки в любом случае смогут справиться с вашим make-файлом, потому что это такие вещи, которые написали другие люди. Сборка пакетов Debian запускается от имени пользователя root (или, скорее, обычно претендует на запуск от имени пользователя root через fakeroot ), поэтому он разрешит и увидит изменения владельца.

Обратите внимание, что Политика Debian будет не разрешать права доступа, которые вы устанавливаете , так как требует, чтобы все файлы принадлежали пользователю root, если нет веских причин не делать этого. Я не вижу причины для того, чтобы какой-либо из файлов принадлежал mysql (или я пропустил какую-то специфическую для mysql причину, по которой плагины и файлы конфигурации не могут принадлежать пользователю root?). Причина заключается в проблеме безопасности: если кому-то удастся перезаписать файлы как mysql, им не удастся внедрить код в исполняемые файлы и файлы конфигурации.

Так как сопровождающие могут захотеть переопределить установленные вами разрешения, не мучайтесь из-за этого.

...