Gentoo Linux rsync 鏡像方針
1.
硬體需求
捐贈主機
Gentoo Linux 依賴兩種不同的鏡像:主要鏡像以及社群鏡像。主要鏡像是專門處理鏡像的
主機,並且負責處理大量的鏡像流量。所有的主要鏡像執行 Gentoo Linux 並且由
Gentoo 發展團隊的成員維護。社群鏡像是由社群成員提供的主機。這些主機可能是,也可
能不是專門處理鏡像的主機。也不一定執行 Gentoo Linux。
目前,我們有足夠的社群鏡像,並且積極的尋求主要鏡像,主要鏡像的需求包括:
- 最少是 2GHz Pentium 4 處理器(或相同等級的處理器)
- 至少要 1GB RAM (最好是 1.5GB - 2GB)
- 要有 10GB 的硬碟空間(IDE 也可以)
如果您有網路頻寬和網路連接的空間的話,您可以提供給伺服器使用。否則,我們可以提
供,您可以把機器交給我們的網路機房。消耗的頻寬平均約 7Mbps (約每個月 2 TB)。隨
著主要鏡像的增加,這個數字會逐漸降低。
如果您想要捐贈您的機器,請聯絡
Jeffrey Forman 告訴他相關的資訊。
2.
簡短 FAQ (提供給目前的鏡像站管理員當參考文件)
Q:關於 rsync 的事情我應該連絡誰?
A:前往 http://bugs.gentoo.org 然後在 "Rsync" 分類底下送出錯誤回報。
Q:我為我的公司維護一個私人的 rsync 鏡像,我還能夠使用
rsync1.us.gentoo.org 來鏡像嗎?
A:因為我們的資源是有限的,我們需要確保使用者可以取得最大的利益。因此,我們限制
只有公開鏡像站才可以連接我們主要的 rsync 和 distfile 鏡像站。歡迎使用者使用我們
一般的鏡像系統來建立私人鏡像站,不過要遵守基本的
rsync 禮儀指南。
Q:伺服器一小時同步兩次很重要嗎?
A:是的,這很重要。您不一定要在 :00 和 :30 執行。但是您應該再下面的時間間格之間
執行:
- :00 and :10
- :30 and :40
此外,設定您的時間間隔是 30 分鐘。例如說,您第一次同步是在 :08,那第二次同步要
排在 :38。
Q:我如何找到離我最近的鏡像站
A:netselect 就是為您做這個工作。如果您不曾執行 emerge netselect 的話,
先執行他。然後輸入: netselect rsync.gentoo.org。在大約一分鐘之後
netselect 會列出一個 IP 位置。在這個位置後面加上兩個冒號,然後當作 rsync 的參數
。例如說: rsync 1.2.3.4::。您應該可以從標題的訊息找到 IP 位置。用這個設
定您的 /etc/make.conf。
Q:當我對 rsync1.us.gentoo.org 同步時可以用壓縮嗎?
A:不行,壓縮功能耗去伺服器太多的資源,所以我們強制關閉
rsync1.us.gentoo.org 的壓縮功能。請不要在同步時嘗試使用壓
縮。
Q:我發現很多執行很久,可能已經死掉的 rsync 程序,我要如何清除他們?
A:請參閱指令稿範例。
Q:有許多使用者很頻繁連到我的 rsync 伺服器,有的時候甚至造成 DoS,有任何
方法可以避免嗎?
A:一樣,請參閱指令稿範例。
3.
指令稿範例
注意:
您可以在 gentoo-rsync-mirror 套件中找到設定檔範例及指令稿範例。只要做
emerge gentoo-rsync-mirror
|
目前,鏡像 Portage tree 大約要 250Mb,因此不會耗費太大空間。保留至少 500Mb 的空
間以為未來的增加做準備。建立 Portage tree 鏡像相當容易 -- 首先,確定您的主機安
裝好 rsync,然後,設定 rsyncd.conf 檔案,這看起來像這樣:
原始碼 3.1: rsyncd.conf |
uid = nobody
gid = nobody
use chroot = yes
max connections = 15
pid file = /var/run/rsyncd.pid
motd file = /etc/rsync/rsyncd.motd
log file = /var/log/rsync.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[gentoo-x86-portage]
#this entry is for compatibility
path = /gentoo/rsync
comment = Gentoo Linux Portage tree
[gentoo-portage]
#modern versions of portage use this entry
path = /gentoo/rsync
comment = Gentoo Linux Portage tree mirror
exclude = distfiles
|
如上所示,gentoo-x86-portage 指向和 gentoo-portage 相同的位置。雖然我們最近更改
我們的鏡像正式名稱為 gentoo-portage,但是為了向下相容,gentoo-x86-portage 還是
需要的,所以這兩段都包含在內。
為了安全,使用 chrooted 的環境是必要的!
現在,您需要鏡像 Gentoo Linux Portage tree。您可以使用底下的指令稿來達成:
原始碼 3.2: rsync-gentoo-portage.sh |
#!/bin/bash
RSYNC="/usr/bin/rsync"
OPTS="--quiet --recursive --links --perms --times --devices --delete --timeout=300"
#Uncomment the following line only if you have been granted access to rsync1.us.gentoo.org
#SRC="rsync://rsync1.us.gentoo.org/gentoo-portage"
#If you are waiting for access to our master mirror, select one of our mirrors to mirror from:
SRC="rsync://rsync2.de.gentoo.org/gentoo-portage"
DST="/space/gentoo/rsync/"
echo "Started update at" `date` >> $0.log 2>&1
logger -t rsync "re-rsyncing the gentoo-portage tree"
${RSYNC} ${OPTS} ${SRC} ${DST} >> $0.log 2>&1
echo "End:"`date` >> $0.log 2>&1
|
原始碼 3.3: /etc/init.d/rsyncd |
#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header:/var/cvsroot/gentoo-x86/net-misc/rsync/files/rsyncd.init.d,v 1.2 2004/05/02 22:45:02 mholzer Exp $
depend() {
need net
}
# FYI:--sparce seems to cause problems.
RSYNCOPTS="--daemon --safe-links --timeout=300"
start() {
ebegin "Starting rsync daemon"
start-stop-daemon --start --quiet --pidfile /var/run/rsyncd.pid --nicelevel 15 --exec /usr/bin/rsync -- ${RSYNCOPTS}
eend $?
}
stop() {
ebegin "Stopping rsync daemon"
start-stop-daemon --stop --quiet --pidfile /var/run/rsyncd.pid
eend $?
}
|
您的 rsyncd.motd 應該要包含 IP 位址還有其他有關這個鏡像站的資訊,例如說這部機器
的位置,以及聯絡方法。在您的站認可為正式的 rsync 鏡像站後,您有一個這種形式的主
機別名:rsync[num].[country code].gentoo.org
下面這行指令可以幫助您清除因為連線問題而執行很久的 rsync 程序。因為這些在統計
"最大連線數" 也會被視為有效的連線,所以清除他們是非常重要的動作。您可以透過
crontab 每小時執行一次,這樣可以搜尋且清除超過一小時的 rsync 程序。
原始碼 3.4: 清除執行很久的 rsync 程序 |
/bin/kill -9 `/bin/ps --no-headers -Crsync -o etime,user,pid,command|/bin/grep nobody | \
/bin/grep "[0-9]\{2\}:[0-9]\{2\}:" |/bin/awk '{print $3}'`
|
在一些情況,有一些不考慮別人的使用者同步超過一天兩次,不當使用 rsync 鏡像。在
一些極端的情況,使用者排定大約每隔 15 分鐘同步一次。這通常會佔據其他使用者可
以用的連線而造成阻斷服務攻擊。為了預防這種情況,您可以使用這個
perl
script 來掃描 rsync 紀錄檔,取出一天內連線超過 N 次的使用者,然後
動態產生 rsyncd.conf 檔案,把這些 IP 加入 'hosts deny' 列表中。底下這行控制
N 是多少:
原始碼 3.5: 定義每一個 IP 的最大連線數 |
@badhosts=grep {$hash{$_}>4} keys %hash;
|
如果您使用這個指令稿,確定您的 rsync 紀錄檔有每天清除,並且修改他符合您的
rsyncd.conf 檔案位置。這個指令稿在 Gentoo Linux 測試過了,但是應該在其他有
rsync 和 perl 支援的系統也能工作。
4.
建立您自己的本地鏡像站
介紹
大部份使用者在數個機器執行 Gentoo,並且需要在每一台都執行 emerge --sync。
使用公開鏡像站很間單但是浪費雙方的頻寬。只把公開鏡像站同步到一台電腦,然後其
他電腦對這台電腦鏡像,這樣可以省下 Gentoo 鏡像站的資源還有使用者的頻寬。
您所要做的是選擇一台機器作為您的鏡像站然後設定。您應該選擇一台可以應付 rsync 時
所需的 CPU 和磁碟負載。您的本地鏡像站也需要在任何其他電腦在做同步時可以使用。
此外,他應該有一個固定 IP,或是隨時可以連到您的主機的名稱。設定 DHCP 和 DNS 伺
服器超出這份指南的範圍了。
設定本地鏡像站
需要的套件都裝在您的電腦中,所以您不需要在安裝額外的套件了。設定您自己的本地鏡
像只要設定 rsyncd 服務讓 /usr/portage 可以被同步。建立如以
下的 /etc/rsyncd.conf 設定檔:
原始碼 4.1: /etc/rsyncd.conf 範例 |
pid file = /var/run/rsyncd.pid
max connections = 5
use chroot = yes
uid = nobody
gid = nobody
hosts allow = 192.168.0.1 192.168.0.2 192.168.1.0/24
hosts deny = *
[gentoo-portage]
path=/usr/portage
comment=Gentoo Portage
exclude=distfiles/ packages/
|
您並不一定要用 hosts allow 和 hosts deny 兩個選項,所有客戶端預設
都允許連線。您輸入的順序並沒有差別,伺服器都會先檢查 hosts allow 設定,
如果連線的機器符合其中之一的形式,就允許他連線。接下來會檢查 hosts deny
,如果發現有符合的,他就會被拒絕連線。兩種都不符合的話也會允許連線。閱讀手冊頁
(man rsyncd.conf) 可以得到更多資訊。
現在,以 root 的身分輸入下面的指令來啟動 rsync 服務:
原始碼 4.2: 啟動 rsync 服務 |
# /etc/init.d/rsyncd start
# rc-update add rsyncd default
|
來試試您的 rsync 鏡像站。雖然您不一定要從另外一台電腦來測試,但這樣做是一個好方
法。如果您其他電腦不了解伺服器的電腦名稱,您可以使用 IP 位址來替代。
原始碼 4.3: 測試 rsync 鏡像站 |
# rsync 192.168.0.1::
gentoo-portage Gentoo Portage
# rsync your_server_name::gentoo-portage
|
您的 rsync 鏡像站現在已經設好了。固定執行 emerge --sync 讓您的伺服器保持在
最新。
注意:
請注意大部份的公開鏡像站管理員認為一天超過兩次同步是過度使用。
|
設定客戶端
現在,讓您其他的電腦使用您自己的 rsync 鏡像站,而不要使用公開的。編輯
/etc/make.conf 讓 SYNC 變數設定到您自己的伺服器。
原始碼 4.4: 定義 /etc/make.conf 中的 SYNC |
SYNC="rsync://192.168.0.1/gentoo-portage"
SYNC="rsync://your_server_name/gentoo-portage"
|
您可以檢查您的電腦已經設定妥當,而且開始對您的伺服器做第一次的 sync:
原始碼 4.5: 檢查和執行 sync |
# emerge --info|grep SYNC
SYNC="rsync://your_server_name/gentoo-portage"
# emerge --sync
|
就是這樣!您所有的電腦現在每一次執行 emerge --sync 時,都使用您自己的
rsync 鏡像站。
這份文件是以
Creative Commons - 姓名標示-相同方式分享 授權條款發布
|