建立Ubuntu安裝包服務鏡像的腳本

建立Ubuntu安裝包服務鏡像的腳本

爲了建立一個可靠的鏡像服務,須要包含全部的文件,以及在正確的時候。 'File not found'-錯誤會引發不少問題,給使用者帶來煩惱。這裏提供了一個腳原本同步鏡像文件,而且防止出現 404 錯誤(http的文件找不到的錯誤碼)。ubuntu

鏡像建立與使用流程

建立Ubuntu安裝包服務鏡像能夠加速Ubuntu的安裝包安裝速度,避免重複下載,節約出口網絡帶寬。通常包括:安全

  • 鏡像安裝包原始文件,由於一些設置,直接rsync可能沒法使用,可使用這裏的腳本。
  • 建立鏡像服務。
  • 客戶機設置,將apt-get的安裝源指向新的服務URL。
    • 編輯/etc/apt/sources.list文件,將其中的地址替換爲新的地址。
  • 按期更新鏡像文件,能夠經過設定任務來完成。

ubumirror

可使用 ubumirror project 來保持鏡像同步,或者使用下面的腳本。網絡

該項目已經 packaged since Lucid onwards, 請報告建議和問題到 against it.網站

Archive mirrors

爲了存檔mirrors, 在 Packages.gz-文件更新前不要刪除 packages是很是重要的,該文件保存了packages可用的不少種重要信息。所以,須要 'Two stage sync'。意味着,首先下載新的packages, 而後再下載Packages.gz 。 下載完 Packages.gz後, 再刪除 old packages就是安全的。spa

The script

#/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

對於 Releases mirrors, 事情就沒有那麼複雜了。由於 files之間沒有依賴, 能夠直接使用rsync。.net

The script

#/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)
相關文章
相關標籤/搜索