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
[HOWTO] mirror CVSup Server
====== 授權方式 ======
姓名標示-非商業性-相同方式分享 2.5 (Attribution-NonCommercial-ShareAlike 2.5)