
Etckeeper는 /etc/의 변경 사항을 Git, Mercurial, Bazaar 또는 Darcs 저장소에 기록하는 도구 모음이다. Arch Linux에서는 패키지 설치·업데이트·삭제 때 pacman 훅이 변경 사항을 자동 커밋하며, 파일 권한도 추적한다.
설치와 초기 설정
etckeeper 패키지를 설치한 뒤 /etc/etckeeper/etckeeper.conf에서 버전 관리 시스템과 기타 옵션을 설정한다. 기본 버전 관리 시스템은 Git이며, pacman을 LOWLEVEL_PACKAGE_MANAGER와 HIGHLEVEL_PACKAGE_MANAGER로 지정할 수 있다.
저장소를 초기화하고 첫 커밋을 만들어야 자동 동작을 사용할 수 있다.
# etckeeper init
# etckeeper commit "first commit"
/etc/passwd에서 root 사용자의 주석 필드(5번째 필드)는 root로 채워야 커밋이 실패하지 않는다. etckeeper 1.18.3-1부터는 패키지 설치·업데이트·삭제 시 pacman의 사전·사후 설치 훅이 자동 실행되므로 별도의 래퍼 스크립트가 필요하지 않다. 그 외 /etc/ 변경은 직접 커밋하거나 아래와 같은 자동화 방법을 사용할 수 있다. 명령어는 etckeeper(8) 매뉴얼을 참고한다.
변경 사항 자동 기록
패키지에는 systemd 서비스와 타이머가 포함돼 있다. etckeeper.timer를 활성화하면 된다. 제공된 유닛을 수정하려면 systemd 유닛 편집 안내를 참고한다.
cron을 쓰려면 소스 배포판의 일일 스크립트를 /etc/cron.daily/script_name에 두고 root가 실행할 수 있도록 권한을 설정한다. cron이 설치돼 있고 활성화돼 있어야 한다.
incron을 이용하면 /etc/의 파일이 수정될 때 커밋을 만들 수 있다. 이 방법은 incron 버전 5.10에만 해당하며, 하위 디렉터리는 감시하지 않는다. 하위 디렉터리도 감시하려면 각각 별도 항목을 추가해야 한다. 최상위 파일이 바뀌어 커밋이 실행되면 변경된 내용 전체가 커밋된다.
incron을 설치하고 etckeeper 저장소를 초기화한 다음, root가 incron 스크립트를 실행할 수 있도록 설정한다.
# echo root >> /etc/incron.allow
# incrontab -e
열린 편집기에 다음 내용을 추가한다. [message]에는 커밋 메시지를 지정할 수 있으며, 예를 들어 "modified $#"에서 $#는 수정된 파일 이름으로 바뀐다.
# /etc IN_MODIFY /bin/etckeeper commit "[message]"
자세한 내용은 incron 문서와 incrond(8) 매뉴얼을 참고한다.
원격 저장소와 주의 사항
커밋할 때마다 원격 저장소로 자동 전송하도록 설정할 수도 있다. 다만 공개 저장소에 올리면 비밀번호 해시나 개인 키 같은 민감한 정보가 노출될 수 있으므로 주의해야 한다. 원격 저장소를 추가하는 예시는 다음과 같다.
# etckeeper vcs remote add backup https://github.com/user/repo.git
etckeeper가 제공하는 훅을 쓰려면 /etc/etckeeper/etckeeper.conf에서 PUSH_REMOTE에 원격 저장소 이름을 지정한다. 공백으로 구분해 여러 저장소를 지정할 수 있다.
PUSH_REMOTE="backup"
대신 사용자 정의 훅을 만들 수도 있다.
#!/bin/sh
set -e
if [ "$VCS" = git ] && [ -d .git ]; then
cd /etc/
git push backup master
fi
Git의 checkout, rebase, merge, cherry-pick 등은 파일 권한을 깨뜨려 SSH나 sudo 로그인을 막을 수 있다. Git은 파일 권한을 직접 저장하지 않고 etckeeper가 이를 처리하므로, checkout 뒤에는 etckeeper init을 다시 실행해 권한을 복구해야 한다. 대안으로 systemd-tmpfiles를 이용해 권한을 보존할 수 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요