本格堅守四不一沒有政治主張:不知道、不清楚、不瞭解、不明白、沒有意見!
[ start | index | login or register ]

實作 Subversion 檔案庫自動備份機制

Created by Ada. Last edited by Ada, 93 days ago. Viewed 2,188 times. #22
[diff] [history] [edit] [rdf]
labels
Parent:Subversion
attachments
initRepos.sh (5986)
svn.gmail.backup.jpg (40328)

實作 Subversion 檔案庫自動備份機制

趁著在整理公司各專案的原始文件與程式碼的機會,將 Subversion 的備份機制 中所提到的想法化為實際可行的方案,目前實作備份到 EMAIL 帳號的部份。

※ 2007-06-04 更新:新增 svnBackup.sh 中每月一日完整備份 svn 檔案庫功能。

前置準備

簡單說明個人在 Subversion 上的環境設定,基本上就是前文 試用 Subversion 中所提到的多檔案庫設定,由 svn 這個用戶負責執行 svnserve 並管理所有的檔案庫與相關的維護/備份作業。個人伺服器上設定的目錄列表大概長的像這樣,預定建立兩個分類的檔案庫:docs/ 及 projects/ 分別儲放文件類及專案類資料:
svn@www ~ $ tree /home/svn -L 2 -F --dirsfirst
/home/svn
|-- docs/                  # 儲放 docs/ 類的檔案庫
|   `-- resume/            # 這是個人的 resume ,還沒寫!
|-- projects/              # 預定儲放 projects/ 類的檔案庫
|-- authz                  # svn 權限設定對照表,所有檔案庫都會參照此檔
|-- initRepos.sh*          # 備份機制所提供的檔案庫初始化工具
|-- passwd                 # svn 帳號/密碼設定檔,所有檔案庫都會參照此檔
`-- svnserve.conf          # svnserve 的設定檔,所有檔案庫都會參照此檔

3 directories, 4 files

初始化檔案庫

檔案庫的初始化可以直接使用 svnadmin create 去建立,但是為了順便完成 hooks 的設定所以這裡提供了一個自動化作業的命令稿:initRepos.sh ,它的執行方式如下列所示,其中 repoPath 指的是檔案庫的實際目錄位址;authorization 則是要寫到 authz 檔中的權限設定項目,可以不提供,也可以提供多個。特別注意的是若 authz 中已經存在指定檔案庫的設定時,則 authorization 設定部份將全數予以忽略。
svn@www ~ $ ./initRepos.sh

Usage: initRepo.sh repoPath [authorization] [authorization] ...

repoPath: the path for your repository. [authorization]: optional, the line write into authz file.

ex: $ ./initRepo.sh ~/projects/myProject will create a repo at ~/projects/myProject

範例:建立 projects/scripts 檔案庫

projects/scripts 計劃用來保存曾寫過的 bash scripts 使用的檔案庫,其他為了系統管理或其他原因所寫的 scripts 或其他源碼也會納入對應的檔案庫中加以控管。

svn@www ~ $ ./initRepos.sh projects/scripts "ada = rw"

/home/svn/svnBackup.sh had been created, and you must change your '$RCV_EMAIL' value and execute it automatically via crontab.

前述動作的意思說明如下:
  1. 建立的檔案庫位於現行目錄下的 projects/scripts 中;
  2. 在 authz 中寫入對檔案庫 projects/scripts 的存取權限 "ada = rw",參見 tail -n 5 authz 輸出結果;
  3. 執行訊息顯示一個檔案 /home/svn/svnBackup.sh 被建立了,提醒執行者記得修改 $RCV_EMAIL 的值還有記得放到 crontab 中自動執行以確保可以將備份檔寄到指定 EMAIL 信箱去。
  4. 如果重覆執行同一命令時,初始指令稿會顯示該檔案庫已存在而終止執行。
svn@www ~ $ tail -n 5 authz
[docs/resume:/]
ada = rw

[projects/scripts:/] ada = rw

重覆執行檔案庫初始化作業時之輸出結果
svn@www ~ $ ./initRepos.sh projects/scripts "ada = rw"

Sorry, target repository was existed, script will be terminated. Here is projects/scripts contained:

總計 8 drwxr-sr-x 7 svn svn 224 2007-01-22 15:30 . drwxrwsr-x 3 svn svn 72 2007-01-22 15:30 .. drwxr-sr-x 2 svn svn 80 2007-01-22 15:30 conf drwxr-sr-x 2 svn svn 48 2007-01-22 15:30 dav drwxr-sr-x 5 svn svn 256 2007-01-22 15:30 db -r--r--r-- 1 svn svn 2 2007-01-22 15:30 format drwxr-sr-x 2 svn svn 392 2007-01-22 15:30 hooks drwxr-sr-x 2 svn svn 104 2007-01-22 15:30 locks -rw-r--r-- 1 svn svn 229 2007-01-22 15:30 README.txt

匯入檔案庫

將 projects/scripts 第一支程式匯進去

ada@www ~/scripts $ svn import . svn://localhost/projects/scripts -m "匯入 scripts 檔案庫"
新增           initRepos.sh

送交修訂版 1.

檢查異動記錄檔是否正確建立

當有 commit 事件發生時,hooks/ 內的 post-commit 會被執行,該指令稿會將 commit 的程式庫名稱及修訂版次資料寫入 ~/commit.log/commit-YYYYMMDD (多檔案庫併存時亦同)檔案中:
svn@www ~ $ ls commit.log/
commit-20070122
svn@www ~ $ cat commit.log/commit-20070122
projects/scripts 1
svn@www ~ $
發現一些小問題而做了修改,最後記錄如下:
Subversion 檔案庫狀況
ada@www ~ $ svn info svn://localhost/projects/scripts
路徑: scripts
URL: svn://localhost/projects/scripts
檔案庫根目錄: svn://localhost/projects/scripts
檔案庫 UUID: 9caff80a-9c27-0410-8ed1-a6eee95ea654
修訂版: 4
節點種類: 目錄
最後更新作者: ada
最後修改修訂版: 4
最後修改日期: 2007-01-22 16:42:08 +0800 (一, 22  1月 2007)

ada@www ~ $

svn@www ~ $ cat commit.log/commit-20070122
projects/scripts 1
projects/scripts 2
projects/scripts 3
projects/scripts 4
svn@www ~ $
驗證至此可以確定任何 commit 進 Subversion 檔案庫的動作都可以被記錄了。如果原先已建立的檔案庫的話,可在透過 initRepos.sh 建立的檔案庫下的 hooks/ 目錄中取得自動記錄異動狀態的 post-commit 命令稿,放入原檔案庫下 hooks/ 中即可。

驗證自動寄送 EMAIL 備份程序

※ 請先安裝 mpack MIME 寄信工具

建立檔案庫時有提過 initRepos.sh 要求修改 svnBackup.sh 內的 RCV_EMAIL 變數資料以便將備份檔案進行郵件投遞。為確保放入 crontab 後可以正常運行,此處可先進行測試。

修改 svnBackup.sh 內容

  1. RCV_EMAIL 變數:如果是寄給 gmail.com 時,會被改成虛擬信箱方式寄出。如前述檔案庫寄給 mysvn@gmail.com 時會變成 mysvn+projects.scripts@gmail.com 。
  2. YESTERDAY 變數:本來這個變數是自動計算出來的,不過我們可以另外指定成今天的日期 20070122 以便進行測試。
  3. 執行 svnBackup.sh 測試,一切正常的話會在指定的 EMAIL 信箱中收到異動備份檔。
  4. 測試完畢後記得把行指定的 YESTERDAY 變數拿掉以免總是收到同一天的異動備份檔。
svn@www ~ $ ./svnBackup.sh
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.
* Dumped revision 4.
projects.scripts.dump.r1-r4
svn@www ~ $
※收到的異動備份信件,可以透過 Filter 自動將檔案歸類封存。 異動備份信件

下載

請直接下載 >>initRepos.sh

其他

  1. 那個顯示目錄結構的好東西叫做 >>tree ,請多多愛用!
  2. 想要多做其他備份的可以修改 svnBackup.sh 檔。
  3. GMAIL 果然是檔案備份的居家良伴啊!
no comments | post comment

【求助】

  1. 如何指定格式化的文字
  2. 如果字太小
【SnipSnap 強化方案】
>>SnipIt 誕生
>>功能討論
>>功能確認

< November 2008 >
SunMonTueWedThuFriSat
1
2345678
9101112131415
16171819202122
23242526272829
30

【RSS 訂閱】




【雜想分類區】
美食小吃
生活雜想
職場遭遇戰
休閒娛樂
台北居、大不易
錯誤正在橫行中
廣告異聞錄
神秘事件簿
電影
健康管理
資訊電腦
科高地球
手機應用
新聞馬後炮
動漫世界
管理眾人之事
專案管理
歌曲歌詞
嘸爽啦!
部落格記錄
惡搞裝笨耍白爛
歧視非IE用戶之網頁
關於我
CSS
RSS

【與 Ada 聯絡】

【Windows 多媒體播放工具】
介紹:多功能免費媒體播放工具 MyMPC 2006 安裝介紹
下載(1):>>MyMPC 20060117 簡、繁、英三合一安裝版
下載(2):>>MyMPC 20060117 簡、繁、英三合一安裝版

【Firefox 擴充套件自動安裝服務】
>>建議擴充套件介紹
>>擴充套件分類介紹
※更新日期:2007-04-12

【有趣的 Blog】
>>什麼都破,什麼都爛,什麼都不奇怪
>>酪梨壽司的日記
>>去吧!錯誤特攻隊!
>>隨裕而安
>>荒謬大觀
>>網路黑貓
>>瑞克梅添涼 DALIREAL
>>鳥毅的blog
>>潛艦 - >>反垃圾信
>>窮留學生懶人食譜
>>約耳談軟體

【工具網站】
>>dns checker
>>美國街道電子地圖

【網路貼紙】
XHTML 1.0 validated CSS validated
RSS 2.0 validated Powered by SnipSnap
Powered by Gentoo Linux
網站使用 UTF-8 編碼 網站所在地-台灣
Onion Club 洋蔥酷樂部 Powered By PostgreSQL
我是台灣人

【網路同盟】
怠墮管理者同盟

【PCDVD 七八區 RSS】




【PCDVD 疑雜區 RSS】




【網路串連】









【參訪團】

snipsnap.org | Copyright 2000-2002 Matthias L. Jugel and Stephan J. Schmidt