etckeeper를 사용하여 / etc 외부의 구성 파일을 추적 할 수 있습니까?


11

특히 내 grub.conf( /boot/grub/grub.conf) 및 일부 oracle 파일 (ie /db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora) 을 추적하고 싶습니다 .

링크를 사용하려고했습니다. 그러나 etckeeper / git은 실제 내용이 아닌 링크가 가리키는 위치 만 추적합니다. 파일이 다른 볼륨에 있으므로 하드 링크를 만들 수 없습니다.

다른 GIT 저장소를 설정할 수 있다는 것을 알고 있지만 오히려 etckeeper 내에 모두 있습니다.

최신 정보

nealmcb의 답변을 바탕으로 다음 스크립트를 작성했습니다.

#!/bin/sh
set -e

# Based on nealmcb's idea/script from http://serverfault.com/questions/211425/

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

MIRROR_ROOT=/etc/etckeeper.mirror.d
echo "etckeeper: mirroring outside files to $MIRROR_ROOT/:"

mirror_dir() {
   LOCAL_PATH=$1
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$LOCAL_PATH
   rsync -a $LOCAL_PATH/ $MIRROR_ROOT/$LOCAL_PATH
}


mirror_dir "/boot/grub"
mirror_dir "/root"  

경로를 추가하거나 제거 mirror_dir하려면 하단에 통화를 추가하거나 제거하면 됩니다.


실제 답변은 아니지만 위의 의견은 허용되지 않으므로 (최소한) 주석을 공유하지 마십시오. . (저는 댓글을 달 수 없기 때문에 여기에 참조를 게시 해
주셔서 감사합니다

답변:


6

일반 파일도 포함하도록 위 스크립트를 편집했습니다.

어쩌면 누군가 외부 스크립트 (etckeeper 구성에서?)를 구성하고 joey hess에 패치로 보낼 가능성을 추가해야합니까?

#!/bin/sh
set -e

# Based on nealmcb's + ErebusBat's script from http://serverfault.com/questions/211425/

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

MIRROR_ROOT=/etc/etckeeper.mirror.d
echo "etckeeper: mirroring outside files to $MIRROR_ROOT/:"

mirror_dir() {
   LOCAL_PATH=$1
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$LOCAL_PATH
   rsync -a --del $LOCAL_PATH/ $MIRROR_ROOT/$LOCAL_PATH
}

mirror_file() {
   LOCAL_PATH=$1
   DIRPATH=`dirname $LOCAL_PATH | head -n 1`
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$DIRPATH
   rsync -a --del $LOCAL_PATH $MIRROR_ROOT/$DIRPATH
}
mirror_file "/var/srv/foo_bar/blog/config.py"
mirror_file "/var/srv/foo_bar_another_host/trac/conf/trac.ini"
mirror_file "/tmp/wildcards/*.jpg"

3

etckeeper를 사용하면 다른 시스템과 통합 할 수 있습니다.

또한 / boot에서 update-grub의 변경 사항을 추적하고 싶기 때문에 아래 코드를 /etc/etckeeper/commit.d/20mirror-outside-files

이런 식으로 etckeeper가 다른 이유로 호출 될 때마다 (때로는 야간에 소프트웨어를 설치할 때) 최신 grub 구성의 개정을 파악하고 추적합니다.

예를 들어 / etc / Mirror / path-to-outside-file 에이 내용을 넣는 컨벤션을 만들었습니다.하지만 다른 컨벤션에 앞서 /etc/Mirror/boot/grub/grub.cfg다른 사람이 있다면 이에 대해 듣고 싶습니다.

#!/bin/sh
set -e

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

echo etckeeper: mirroring outside files

mkdir -p /etc/Mirror/boot/grub
cp -p /boot/grub/grub.cfg /etc/Mirror/boot/grub

최신 정보:

어떤 이유로 인해 etckeeper는 예를 들어 오래된 커널을 삭제하기 위해 apt-get remove 또는 purge를 수행 할 때 이것을 실행하지 않습니다. 홀수 .... 그러나이 sudo etckeeper commit경우 또는 수동 후에 수동으로 실행할 수 있습니다 update-grub.


3

etckeeper는 이제 -d어떤 디렉토리에서 작동해야 하는지를 표시 하는 옵션이 있습니다.

etckeeper를 트리거하는 후크는 일반적으로 construct as etckeeper pre-install, ...를 사용하지만 etckeeper pre-install -d /boot/grub대신 사용 하는 후크를 추가해야합니다 . 이렇게하면 접근 방식에서 파일 중복을 피할 수 있습니다.

systemd 대상, 서비스, ..., 파일이 구성 파일이라고 생각하면 (아래의 파일은 아래의 파일 /lib/systemd과 다르지 않습니다 /etc/init.d)이 -d옵션을 사용하면 발생하는 상황을 추적하는 데 도움이됩니다 /lib/systemd.


1

시놉시스에서 : etckeeper init -d /directory

그러나 조심하십시오! 다음에 실행할 때 또는 다음 주에 잊어 버린 경우 -d path의 기본 위치를 사용하여 새로운 독립형 로컬 저장소를 만들 수 있습니다 /etc.

따라서이 중요한 세부 사항을 etckeeper.conf의 구성에 커밋하는 것이 좋습니다. 빠른는 grep /etc \``which etckeeper\``, 계시 : ETCKEEPER_DIR=/etc및 그래서 그냥 etckeeper.conf에서이 변수를 사용합니다.

sed -i '1 i\ETCKEEPER_DIR=/' /etc/etckeeper/etckeeper.conf

다른 것들을 "유지"하려는 욕구에서 파일 속성이 포함되어 etckeeper init -d / 나를 위해 일했지만 나중에 세부 사항을 잊어 버리는 것은 성가시다. 이 세부 정보를 저장하는 것이 가장 좋습니다. 또한 uninitVCS를 사용하여 실행 취소하지 않고 전체 로컬 저장소 만 삭제합니다.


0

나는 etckeeper가 이것을 할 것이라고 생각하지 않지만 몇 가지 해결책이 있습니다.

  1. 링크를 되 돌리십시오 : 파일 시스템에 링크를 / etc /에있는 파일로 보내십시오.

  2. 해당 파일을 / etc (백업) 및 / etc (복원)에 복사하는 스크립트를 작성하십시오. 그런 다음 해당 스크립트를 주기적으로 또는 적절한 git hook에서 사용하십시오.


2
역방향 링크는 좋은 생각이지만, 경우에 따라 작동하지 않는 경우가 있습니다. 특히 역방향 링크를 시도하지 마십시오. 그렇지 않으면 grub.conf부팅 할 수 없습니다.
Zoredache

@ 조르 데슈-정확합니다. 그러나 리버스 링크는 아마도 내 Oracle 파일에서 작동 할 것입니다. 그리고 @pjz의 복사 방법은 부팅시 (grub + kernel conf) 무엇이든 작동합니다. 나는 다음 주에 이것을 시도 할 것입니다.
ErebusBat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.