make install
Wie kann bei Verwendung des Autotools-Build-Systems und bei der Installation vermieden werden, dass vorhandene Konfigurationsdateien überschrieben werden?
Ich habe eine Konfigurationsdatei wie Makefile.am
folgt definiert:
dist_sysconf_DATA = $(top_srcdir)/server.conf
Wie ist es möglich, Datendateien so zu definieren, dass make install
eine vorhandene Version dadurch nicht beeinträchtigt wird?
Antwort1
Sie können Ihr Installationsziel so einrichten, dass die Datei nicht kopiert wird, wenn sie bereits vorhanden ist, oder sie unter einem anderen Namen kopieren. Hier ist ein Beispiel vonman-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
Am besten wäre es jedoch, eine strikte Trennung zwischen installierten Dateien und Benutzeranpassungen beizubehalten, sodass Benutzer niemals eine verteilte Datei ändern müssen. Sorgen Sie dafür, dass Ihre Anwendung ihre Konfiguration sowohl aus als auch liest /etc/myapp.conf
, /usr/share/myapp/default.conf
sodass eine leere Datei unter /etc
zum Standardverhalten führt und die Einstellungen unter /etc
diejenigen unter überschreiben /usr
.