精華區beta FreeBSD 關於我們 聯絡資訊
[HOWTO] mirror CVSup Server ====== 授權方式 ====== 姓名標示-非商業性-相同方式分享 2.5 (Attribution-NonCommercial-ShareAlike 2.5) http://creativecommons.org/licenses/by-nc-sa/2.5/ ====== 前言 ====== 本文適用環境:當你所管的機器或所屬單位的機器大約 20 台以上, 上百、甚至千台以上的 FreeBSD Box 的話.. 這時,建議你直接在自己部門找台機器來 mirror 以分散 cvsup*.tw.FreeBSD.org 甚至 cvsup*.FreeBSD.org 主機的負荷 同時也節省對外頻寬 比如:ISP業者、區網中心、縣網中心、大/中型機構 建議硬體: CVSup Server :不考慮加入 GNATS,www,mailing list 的話, 目前 CVSup Sever 大約會佔用 2.7 GB 來當 src/ports/doc repository 的空間。 由於 cvsupd/rsyncd 都是比較耗 CPU, Disk I/O 的,建議主機選好一點的 例子中要架的那台是 CPU: Xeon 3.4 GHz * 2 RAM: 4GB IP: 假設為 aaa.bbb.ccc.ddd ====== CVSup Server ====== ■ CVSup Server 的建立 ● 首先先弄 Server 端: 1.安裝: 安裝前,若 /etc/make.conf 有設 BATCH=YES, BATCH=YO, BATCH=1 之類的 請先註解起來(因為安裝方式是採互動式的) # cd /usr/ports/net/cvsup-mirror ; make install clean 安裝過程會問你: 想要更新的上游來源站,當然你要能 access 得到 route/firewall,如果不行的話, 請先找一台機器上來架 Proxy(方式下面有介紹) 再把全部機器需求導向到該台上 預設是 cvsup-master.freebsd.org 這台, 也可以改為國內距離你較快的,若想知道這個答案, 請裝 sysutils/fastest_cvsup 然後打 fastest_cvsup -c tw 這樣就會知道了 :) Master site for your updates [cvsup-master.freebsd.org]? 更新的頻率為幾小時一次? 如果填 8 則實際上就是每隔 8 小時更新一次 這裡我們填 24 ,原因後面再講,當然也可以填其他,但請千萬不要用預設的 1 How many hours between updates of your files [1]?24 是否要更新 src/ports tree? 如果你只要 mirror WWW 部分請選 n ,而在 WWW 那邊選 y Do you wish to mirror the main source repository [y]? 上面選 y 後,要把那些 src/ports/doc source tree 的 repository 放在哪邊 Where would you like to put it [/home/ncvs]? 同樣的,下面三者若有選 y 也是會問你要放在哪邊 下面是問是否要另外再 mirror www/GNATS/mailing list Do you wish to mirror the installed World Wide Web data [y]?請按 n Do you wish to mirror the GNATS bug tracking database [y]?請按 n Do you wish to mirror the mailing list archive [y]?請按 n 設定用來要跑 cvsup client 跟上游要 mirror 用的 UID/GID Unique unprivileged user ID for running the client [cvsupin]? Unique unprivileged group ID for running the client [cvsupin]? 設定用來要跑 cvsup server 本身的 UID/GID Unique unprivileged user ID for running the server [cvsup]? Unique unprivileged group ID for running the server [cvsup]? 設定 syslog 內記錄 cvsupd 的對應 facility 為 daemon Syslog facility for the server log [daemon]? 這邊設定允許最多可同時連線的 client 數量,預設是 8,這要看你機器的能耐而定 Maximum simultaneous client connections [8]? ↑ 到上面這步驟前,如果中途不小心選錯了,可以按 Ctrl + C 中斷,或事後再調整 You need a group "cvsup". Would you like me to create it [y]? Done. You need a user "cvsup". Would you like me to create it [y]? Done. You need a group "cvsupin". Would you like me to create it [y]? Done. You need a user "cvsupin". Would you like me to create it [y]? Done. Would you like me to create cvsupin's home directory (/home/cvsupin) [y]? Would you like me to set up the syslog logging [y]? Would you like me to set up your crontab for updates every 24 hours [y]? 2. 補充說明: 目前國內 cvsup{,2,3,4,5,6,7,8,9,10,11,12,13}.tw.FreeBSD.org 這 13 台 頻率大致以每隔 8 小時, 時間點每台錯開, 一天三次更新頻率,相當密集 所以目前 .tw 大概不太需要新增 public 的 cvsupd server :p 自己用的話建議更新頻率,一天大約 1 次,最多三次(每隔8小時)就很夠用了 如果更新頻率過高,請事先告知對方(你 mirror 的上游)請求允許,以免被鎖 裝好後,第一次嘛...要有心理準備,總是比較久一點 + loading 會稍微高些 之後就順暢多了.. :) ● 接下來是 client 端的設定 使用 CVSup 時,又有三種方式:  ◆方法一: 修改 /etc/make.conf 加上 SUPHOST= aaa.bbb.ccc.ddd SUP_UPDATE= yes SUP= /usr/local/bin/cvsup SUPFLAGS= -g -L 2 SUPFILE= /usr/share/examples/cvsup/stable-supfile PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile # 當然 *-supfile 可以放其他地方,這裡也要跟著改設定才行  ◆方法二: 請把 *-supfile 內的 *default host 改成 aaa.bbb.ccc.ddd 即可,例如: # Defaults that apply to all the collections *default host=aaa.bbb.ccc.ddd  ◆方法三:cvsup -g -L2 -h aaa.bbb.ccc.ddd 你的 *-supfile 比如:# cvsup -g -L2 -h aaa.bbb.ccc.ddd \ /usr/share/examples/cvsup/stable-supfile ====== rsync ====== 如果上面方法真的不行的話, 或是你要裝 port (需要實際 tar ball 檔)用上面方式又抓不到時... ■ rsync 的方式 ● 首先先弄 Server 端: 1. 安裝 rsync # cd /usr/ports/net/rsync ; make install clean 2. 設定 rsync ,修改 /usr/local/etc/rsyncd.conf 加上下面這段 [ports] path = /usr/ports comment = FreeBSD port tree 3. 設定啟動方式(這裡我是以 standalone 方式啟動,之前介紹的是 inetd 方式) 修改 /etc/rc.conf 加上 rsyncd_enable="YES" (這樣日後重開機的話,就會啟動) 然後,打 /usr/local/etc/rc.d/rsyncd.sh start 來跑 rsyncd 4.把 rsync 的 tarball檔 複製一份到 Apache 預設的 DocumentRoot 也就是 /usr/local/www/data 內, # cp /usr/ports/distfiles/rsync-2.6.6.tar.gz \ /usr/local/www/data/rsync.tar.gz 註: 至於檔名直接取名為 rsync.tar.gz 則是避免要去強記下版本 >_< 而用 cp 不用 symbolic link 則是怕有時若在 Server 端有砍掉 distfile 的話 就會... 404 了 :p 5. 在常用的 port 上打 make fetch-recursive 然後這樣子一些基本常用的就會 存在你的 /usr/ports/distfiles 內了,也就是所謂的 tar ball 檔啦.. ● 接下來是 client 端的設定 1. 先抓 rsync # cd /tmp ; fetch http://aaa.bbb.ccc.ddd/rsync.tar.gz 2. 接著解開壓縮檔,並開始編譯 rsync # tar zxvf rsync.tar.gz ; cd rsync-2.6.6 ; ./configure ; make 3. 編譯成功後,就開始同步抓取 aaa.bbb.ccc.ddd 上的 /usr/ports 目錄了 # /tmp/rsync-2.6.6/rsync -rtlzv --delete aaa.bbb.ccc.ddd::ports \ /usr/ports 這樣就會 sync aaa.bbb.ccc.ddd 那台上的 port tree 以及一些基本的 distfiles (tar ball檔) 註: 只跑 client 端的也可以不用 rsync client 而改用 net/zsync 效率會更好 :) ====== SSH Tunnel ====== 請參考 cfreddy 的文章 (◇ [CVSup] Port 5999被擋住的解決方式) 請 google "[CVSup] Port 5999被擋住的解決方式" 不過,大量機器的話好像...應該要整理清單,以免增加日後接手者的困難 ~__~" ====== NFS ====== ■ NFS方式 ? 呃..我使用下,似乎有些不穩,可能個人功力淺薄搞不太定, 暫時不考慮... ====== OpenSSH SCP/SFTP ====== ■ scp方式 這個的話,就得要先到來源站那邊, 所以成立要件是對方要有開給你 shell account 用法: scp 要拷貝的檔案 自己帳號@自己主機:要放在哪 比如 scp TAKAKO.conf [email protected]:. 這樣會把 TAKAKO.conf 複製到位於 aaa.bbb.ccc.ddd 上面 chinsan 的家目錄內 基本上這招算是有時候會蠻常用到的,當某些 PATCHFILES 抓不到 或該軟體沒有在 port tree 內時。 ====== 結語 ====== 當然,不管是 rsync 或是 cvsup , 都請各家 client 若有丟入 crontab 的話,  務必把每台機器排程時間錯開,以避免 aaa.bbb.ccc.ddd 上不必要的負擔(暴走)。~_~" -- 靜中見真境,淡中識本然 -- ◢◣ - ● - ◢██◣◢◣ ` Origin: 宜蘭資教.山水蘭陽 telnet://yilan.twbbs.org ~~ ﹌ ~﹌ From : 220-135-110-151.HINET-IP.hinet.net