make install
Как можно избежать затирания существующих файлов конфигурации при использовании системы сборки autotools и установке с ее помощью ?
Я определил файл конфигурации следующим образом Makefile.am
:
dist_sysconf_DATA = $(top_srcdir)/server.conf
Как можно определить файлы данных таким образом, чтобы make install
не затирать существующую версию?
решение1
Вы можете сделать так, чтобы ваша цель установки не копировала файл, если он уже есть, или скопировала его под другим именем. Вот пример изчеловек-db.
# We deliberately leave the configuration file in place on uninstall, since
# it may contain local customisations.
distuninstallcheck_listfiles = \
find . -type f -print | grep -v 'etc/man_db\.conf'
noinst_DATA = man_db.conf
install-data-hook:
@if test -f $(DESTDIR)$(config_file); then \
echo "$(DESTDIR)$(config_file) already exists; overwrite manuall
else \
test -z "$(config_file_dirname)" || $(MKDIR_P) "$(DESTDIR)$(conf
echo " $(INSTALL_DATA) man_db.conf $(DESTDIR)$(config_file)"; \
$(INSTALL_DATA) man_db.conf $(DESTDIR)$(config_file); \
fi
Но лучше всего было бы строго разделить установленные файлы и пользовательскую настройку, чтобы пользователям никогда не приходилось менять распространяемый файл. Заставьте свое приложение считывать свою конфигурацию из обоих /etc/myapp.conf
и /usr/share/myapp/default.conf
, так что пустой файл в /etc
приводит к поведению по умолчанию, а настройки в /etc
переопределяют настройки в /usr
.