本頁目錄

SVN 管理主機設定檔異動狀態

1 環境確認

rpm -q subversion
subversion-1.1.4-2.ent

如果不存在就用 yum install subversion 安裝

2 管理主機建立各台 Server 的相對應目錄

2.1 先建立一個 SVN專案目錄 servercfg

su - root
cd /var/www/svn
svnadmin create servercfg
chown -R apache:apache servercfg

2.2 在 servercfg 內建立各台 server 的管理目錄

可以使用 svn client 軟體先 checkout servercfg 下來之後, 再建立各台 server 的管理目錄, add/commit 上去就可以.

3 各台 Server 將相關的設定檔納入管理

以下是以 PD-920 為例作說明

3.1 先將 / 與 svn server 的 /servercfg/PD-920 做連結

su - root
export LANG=C
cd /
svn co http://mail.ichiayi.com/repos/servercfg/PD-920 /

會出現以下的訊息:

[root@pd920 /]# svn co http://mail.ichiayi.com/repos/servercfg/PD-920 /
Authentication realm: <http://mail.ichiayi.com:80> Authorization Realm
Password for 'root': 
Authentication realm: <http://mail.ichiayi.com:80> Authorization Realm
Username: svnbot
Password for 'svnbot': 
Checked out revision 508.
[root@pd920 /]# 

這樣就開始針對主機 / 建立可納入 svn 的範圍(使用 svnbot 當預設的 svn user)

3.2 再將要內入管理的設定檔一一納入

su - root
export LANG=C
cd /
svn add -N /etc /home /var /root
cd /etc
svn add aliases crontab fstab group hosts issue logrotate.conf modprobe.conf my.cnf named.conf nsswitch.conf ntp.conf passwd php.ini resolv.conf sensors.conf services shadow smartd.conf sysctl.conf webalizer.conf xinetd.conf yum.conf
svn add -N cron.d httpd mrtg samba snmp sysconfig yum.repos.d ssh
cd cron.d
svn add mrtg sysstat
cd /etc/httpd
svn add -N conf conf.d
cd conf
svn add httpd.conf
cd /etc/httpd/conf.d
svn add subversion.conf mrtg.conf
cd /etc/mrtg 
svn add *
cd /etc/samba 
svn add smbpasswd smb.conf
cd /etc/snmp 
svn add snmpd.conf 
cd /etc/sysconfig 
svn add iptables network 
svn add -N network-scripts
cd network-scripts
svn add ifcfg-eth0 ifcfg-eth1
cd /etc/yum.repos.d 
svn add CentOS-Base.repo
cd /etc/ssh
svn add sshd_config ssh_config
cd /home 
cd /var 
svn add -N lib named www
cd /var/lib
cd /var/named 
cd /var/www
svn add passwdfile
cd /root
svn ci -m "First Add config files" /
如果不小心將整個目錄加入, 可以使用以下語法清除

  1. 在 /var 下本來應該下 svn add -N lib 卻不小心下了 svn add lib
  2. 這時候會將 lib 底下所有檔案目錄加入 svn 內.
  3. 使用以下語法可以將每個 lib 底下建立的 .svn 目錄刪除
  4. cd lib
  5. find . -name '.svn' -print0 | xargs -r -0 rm -rf
  6. 然後再將正確的語法加入
  7. cd ..
  8. svn add -N lib
  9. 此時如果出現 lib 已經加入過的訊息, 就編輯 .svn/entries 將 lib 的 entry 刪除
  10. 之後在執行一次 svn add -N lib
:
<entry
   name="lib"
   kind="dir"
   schedule="add"/>
:

3.3 設定自動將設定檔 commit 到 svn server

3.3.1 編輯自動 commit 的 perl script

vi /root/updsvnfile.pl 

updsvnfile.pl

 1: #!/usr/bin/perl
 2: #
 3: # 2006/4/3 上午 01:07
 4: # Jonathan Tsai
 5: # Ver 1.00
 6: #
 7: # 自動 commit svn 更動檔案
 8: #
 9: # 1.00 (2006/4/3) 第一版啟用
10:
11: $prgname = substr($0, rindex($0,"/")+1);
12: $ver = "1.00 (2006/4/3)";
13:
14: $updfiles = `/usr/bin/svn status -q /`;
15:
16: if (length($updfiles)>0) {
17:         $cimsg = "$prgname $ver Auto Commit";
18:         $ciresult = `/usr/bin/svn ci -m \"$cimsg\" /`;
19:
20:         # Display Result
21:         print("\n[$cimsg]:\n");
22:         print("$ciresult\n");
23: }

3.3.2 設定每小時自動執行一次

chmod a+x /root/updsvnfile.pl 
vi /etc/crontab 

/etc/crontab

:
# auto svn commit
0 * * * * root /root/updsvnfile.pl > /var/tmp/updsvnfile.log
service crond restart