爲了建立一個可靠的鏡像服務,須要包含全部的文件,以及在正確的時候。 'File not found'-錯誤會引發不少問題,給使用者帶來煩惱。這裏提供了一個腳原本同步鏡像文件,而且防止出現 404 錯誤(http的文件找不到的錯誤碼)。ubuntu
建立Ubuntu安裝包服務鏡像能夠加速Ubuntu的安裝包安裝速度,避免重複下載,節約出口網絡帶寬。通常包括:安全
可使用 ubumirror project 來保持鏡像同步,或者使用下面的腳本。網絡
該項目已經 packaged since Lucid onwards, 請報告建議和問題到 against it.網站
爲了存檔mirrors, 在 Packages.gz-文件更新前不要刪除 packages是很是重要的,該文件保存了packages可用的不少種重要信息。所以,須要 'Two stage sync'。意味着,首先下載新的packages, 而後再下載Packages.gz 。 下載完 Packages.gz後, 再刪除 old packages就是安全的。spa
#/bin/dash fatal() { echo "$1" exit 1 } warn() { echo "$1" } # Find a source mirror near you which supports rsync on # https://launchpad.net/ubuntu/+archivemirrors # rsync://<iso-country-code>.rsync.archive.ubuntu.com/ubuntu should always work #RSYNCSOURCE=rsync://archive.ubuntu.mirror.isp.com/ubuntu # 實驗發現rsync不通了,用下面這個: RSYNCSOURCE=archive.ubuntu.com::ubuntu # Define where you want the mirror-data to be on your mirror #BASEDIR=/var/www/ubuntuarchive/ # 改爲本身的目錄: BASEDIR=/media/smw/Appdata/ipfs-export/mirrors/ubuntu echo "From:" $RSYNCSOURCE echo "To:" $BASEDIR if [ ! -d ${BASEDIR} ]; then warn "${BASEDIR} does not exist yet, trying to create it..." mkdir -p ${BASEDIR} || fatal "Creation of ${BASEDIR} failed." fi rsync --recursive --times --links --safe-links --hard-links \ --stats \ --exclude "Packages*" --exclude "Sources*" \ --exclude "Release*" --exclude "InRelease" \ ${RSYNCSOURCE} ${BASEDIR} || fatal "First stage of sync failed." rsync --recursive --times --links --safe-links --hard-links \ --stats --delete --delete-after \ ${RSYNCSOURCE} ${BASEDIR} || fatal "Second stage of sync failed." date -u > ${BASEDIR}/project/trace/$(hostname -f)
對於 Releases mirrors, 事情就沒有那麼複雜了。由於 files之間沒有依賴, 能夠直接使用rsync。.net
#/bin/dash fatal() { echo "$1" exit 1 } warn() { echo "$1" } # Find a source mirror near you which supports rsync on # https://launchpad.net/ubuntu/+cdmirrors # rsync://<iso-country-code>.rsync.releases.ubuntu.com/releases should always work RSYNCSOURCE=rsync://releases.ubuntu.mirror.isp.com/releases # Define where you want the mirror-data to be on your mirror BASEDIR=/var/www/ubuntureleases/ if [ ! -d ${BASEDIR} ]; then warn "${BASEDIR} does not exist yet, trying to create it..." mkdir -p ${BASEDIR} || fatal "Creation of ${BASEDIR} failed." fi rsync --verbose --recursive --times --links --safe-links --hard-links \ --stats --delete-after \ ${RSYNCSOURCE} ${BASEDIR} || fatal "Failed to rsync from ${RSYNCSOURCE}." date -u > ${BASEDIR}/.trace/$(hostname -f)