make로 설치할 때 구성 파일이 손상되는 것을 방지하려면 어떻게 해야 합니까?

make로 설치할 때 구성 파일이 손상되는 것을 방지하려면 어떻게 해야 합니까?

autotools 빌드 시스템을 사용하고 설치할 때 make install기존 구성 파일이 손상되는 것을 방지하는 방법은 무엇입니까?

다음과 같이 구성 파일을 정의했습니다 Makefile.am.

dist_sysconf_DATA = $(top_srcdir)/server.conf

make install기존 버전을 방해하지 않는 방식으로 데이터 파일을 정의하는 것이 어떻게 가능합니까 ?

답변1

파일이 이미 있는 경우 설치 대상이 해당 파일을 복사하지 않도록 하거나 다른 이름으로 복사할 수 있습니다. 다음은man-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.

관련 정보