2017年1月20日 星期五

Ubuntu 16.04 建立 APT Mirror site

最近因為配合工作所以建立了一個 APT Mirror site,順手記錄一下安裝步驟

 

由於是 Mirror site,所以要準備一個硬碟至少 300GB 的空間,因為光是 Ubuntu 官方源 amd64、i386、src .. 加一加就 200 多 GB 了

 

環境:

  • Ubuntu 16.04 xenial

  • 預備存放 packages 的空間:/deb




 

 

安裝 APT Mirror site

Step.1 先更新你的 packages database
$ apt-get update

 

Step.2 安裝 apt-mirror
$ apt-get install apt-mirror

 

Step.3 設定 apt-mirror 的 mirror list,由於我希望 apt-mirror 安裝在 /deb,所以必須修改 base_path
$ vim apt-mirror /etc/apt/mirror.list 

set base_path /deb
set mirror_path $base_path/mirror
set skel_path $base_path/skel
set var_path $base_path/var
set cleanscript $var_path/clean.sh
# set postmirror_script $var_path/postmirror.sh
set nthreads 20
set _tilde 0


  • base_path 是 apt-mirror 的根目錄路徑

  • mirror_path 是存放 packages 的地方,這裡必須硬碟空間夠大,否則會悲劇

  • cleanscript 這個是在 apt-mirror 在向外更新 packages 後會清除暫存檔,打開 clean.sh 不要懷疑,他就是沒有任何程式碼。

  • postmirror_script 這個是在 apt-mirror 向外更新完後會執行的 script,可以在這邊寫一些想要執行的動作。


大致上的設定重點在這邊

 

Step.4 mirror.list 加入 repo 源,主要分為 amd64、i386、src 三種,其中軟體分類 main, universe .. 參考 Ubuntu 套件管理
$ vim /etc/apt/mirror.list 

..
..

# Ubuntu 16.04
deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse

deb-src http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse


# Nginx
deb http://nginx.org/packages/mainline/ubuntu xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu xenial nginx

# clean
clean http://archive.ubuntu.com/ubuntu
clean http://nginx.org/packages/mainline/ubuntu

 

deb repo 的 url 組成是有意義的舉例 nginx 來說
deb http://nginx.org/packages/mainline/ubuntu xenial nginx


  • http://nginx.org/packages/mainline/ubuntu  根目錄:裡面必須由 conf, db, dists, pool 組成

  • xenial nginx 從 dists 後的目錄到 binary-amd64, binary-i386, source


 

如果要新加一個 apt-mirror 路徑為 http://shazi.info/packages/mainline/ubuntu/dists/xenial/release/apache/binary-amd64

那我的設定就會是 deb-amd64 http://shazi.info/packages/mainline/ubuntu xenial release apache

 

如果沒加 amd64, i386,就會依照 apt-mirror 這台 Server 的位元自動選擇。
apt-mirror 可以選擇就近的 free.nchc.org.tw 國網中心,也可以選擇官方的 archive.ubuntu.com (官方會替你備援這個網址)

 

Step.5 開始從鏡像 apt-mirror,如果是第一次更新,大概需要跑 3~4 個小時吧?!
$ apt-mirror

 

Step.6 安裝 apache2 提供 http 介面給 Client Server 獲取 packages
$ apt-get install apache2

 

Step.7 將鏡像回來的資料連結到網站目錄
$ mkdir -p /var/www/packages/{ubuntu,nginx} 

# softlink nginx
$ ln -fs /deb/mirror/nginx.org/packages/mainline/ubuntu /var/www/packages/nginx

# softlink ubuntu
$ ln -fs /deb/mirror/archive.ubuntu.com/ubuntu /var/www/packages/ubuntu

 

Step.8 設定 apache
$ vim /etc/apache2/site-enabled/apt-mirror.conf 

<VirtualHost *:80>
ServerAdmin shazi7804@gmail.com
DocumentRoot /var/www/packages

<Directory /var/www/packages>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

LogLevel warn
CustomLog ${APACHE_LOG_DIR}/apt-mirror_access.log combined
ErrorLog ${APACHE_LOG_DIR}/apt-mirror_error.log
</VirtualHost>

 

Step.9 重啟生效
$ /etc/init.d/apache2 restart

 

Step.10 使用 Client Server 加入 source.list
# in client server 
$ vim /etc/apt/source.list

deb http://mirrorserver/ubuntu xenial main restricted universe multiverse
deb http://mirrorserver/nginx xenial nginx

$ apt-get update

 

還可以用 apt-cache 驗證來源
$ apt-cache madison nginx 
nginx | 1.10.0-0ubuntu0.16.04.4 | http://mirrorserver/nginx xenial nginx

 

如果要定期更新,可以將 apt-mirror 寫入 crontab
01 0 * * * apt-mirror -c '/usr/bin/apt-mirror | tee /var/log/apt-mirror.log'

 

Orignal From: Ubuntu 16.04 建立 APT Mirror site

1 則留言: