オフライン環境でapt-getを普通に使うapt-mirror 、セットアップしてみた。

オフライン環境でapt-getを普通に使うには、リポジトリをミラーリングすれば良いということがわかった。 http://hamakichitaro.hatenablog.com/entry/2013/07/23/064647

さっそく、試した。

できた!!

 

1.前準備

sudo apt-get update

sudo apt-get upgrade

sudo apt-get lubuntu-desktop #好み  lubuntuで入り直して、動作を軽くしよう。

sudo apt-get emacs23 #好み

 

2.apt-mirror インストール

sudo apt-get install apt-mirror

 

3.apt-mirrorの設定変更

/etc/apt/mirror.list

backportsのデータ取得がコメントアウトされているのを外して、有効にする。

proposalはコメントアウトのままでいく。

/etc/apt/sources.list と /etc/apt/sources.list.d/ubuntu-ja.list を見て、必要な行を追加する。

※デフォルトのmirror.listの内容とsources.list、ubuntu-ja.listの内容が違う。apt-getで参照するものがミラーリングされていれば良いので、sources.list、ubuntu-ja.listを「正」としてmirror.listに追加修正するのが正しいと思う。

4.i18n対応を設定

apt-mirror ではi18n系のパッケージがダウンロードされないらしい。クライアントからこのミラーサイトにアクセスしてパッケージを取得するときに、i18n関係で 404 Not Found が返ってきてしまうそうです。これを修正するためには、i18n系のパッケージを手動でダウンロードする設定を入れるとのこと。

apt-mirror のポストミラースクリプト /var/spool/apt-mirror/var/postmirror.sh に書く。
 

#!/bin/bash
RSYNC="rsync --recursive --times --links --hard-links --delete --delete-after"
SOURCE="rsync://ftp.jaist.ac.jp/pub/Linux/ubuntu"
TARGET="/var/spool/apt-mirror/mirror/archive.ubuntu.com/ubuntu" 
dists=(raring raring-security raring-updates raring-backports)

for dist in "${dists[@]}"; do 
${RSYNC} ${SOURCE}/dists/${dist}/main/i18n/ ${TARGET}/dists/${dist}/main/i18n/
${RSYNC} ${SOURCE}/dists/${dist}/multiverse/i18n/ ${TARGET}/dists/${dist}/multiverse/i18n/
${RSYNC} ${SOURCE}/dists/${dist}/restricted/i18n/ ${TARGET}/dists/${dist}/restricted/i18n/
${RSYNC} ${SOURCE}/dists/${dist}/universe/i18n/ ${TARGET}/dists/${dist}/universe/i18n/
done

 

5.apt-mirror実行

sudo apt-mirror

sudo /var/spool/apt-mirror/var/clean.sh

 

ミラーデータが更新される。

apt-mirrorの処理の最後に/var/spool/apt-mirror/var/postmirror.shが実行される。clean.shは不要になったデータを削除するスクリプト。apt-mirrorではこのスクリプトが更新されるだけで、実行されない様子。実行は手動でやれとメッセージが出る。

 

 

6.定期更新をcronに設定

 /etc/cron.d/apt-mirror にコメントアウトでサンプルがあるので、コメントアウトを外して、望む設定をする。

※今回は除外

※設定するときは、clean.shの実行もcron設定する必要がある?

7.HTTPサーバーを設定

今回はapache2にした。

sudo apt-get install apache2

sites-availableに新ファイルを作成。今回はサイト名 3種類に分けて、ファイルを作成した。

 /etc/apache2/sites-available/archive.ubuntu.XXXXXXXX.jp

 /etc/apache2/sites-available/security.ubuntu.XXXXXXXX.jp

 /etc/apache2/sites-available/archive.ubuntulinux.XXXXXXXX.jp

※もちろん、XXXXXXXXはダミーです。

ファイルの中身

  ServerName archive.ubuntu.XXXXXXXX.jp
  DocumentRoot /var/spool/apt-mirror/mirror/archive.ubuntu.com
  ServerAdmin admin@XXXXXXXX

 ※同じように3種類のファイルを作成する。Servername と DocumentRottを対応させる。

sites-enabledにシンボリックリンクを貼って、リロードする。

sudo a2ensite archive.ubuntu.XXXXXXXX.jp

sudo a2ensite security.ubuntu.XXXXXXXX.jp

sudo a2ensite archive.ubuntulinux.XXXXXXXX.jp

sudo service apache2 reload

 

以下、WEBサービスの動作確認

hostsファイルに記述して、仮想ホスト名でWEBサービスにアクセスできるようにする。

ブラウザでhttp:/archive.ubuntu.XXXXXXXX.jp/にアクセスして、ミラーサイトに元サイトと同じ内容が表示されればOK。

 

 

 

 


ここからはミラーリポジトリにアクセスする、apt-getクライアント側

 

 

 

 

8.aptのパッケージ取得先を変更

/etc/apt/sources.listの中身を一括置き換え

 一括置き換え対象:http://archive.ubuntu.com/ubuntu/

 一括置き換え後 :http://archive.ubuntu.XXXXXXXX.jp/ubuntu/

 ※同じように3種類置き換える。

 

hostsファイルで、名前解決を設定する。

 192.168.0.XXX  archive.ubuntu.XXXXXXXX.jp

 192.168.0.XXX  security.ubuntu.XXXXXXXX.jp

 192.168.0.XXX  archive.ubuntulinux.XXXXXXXX.jp

※ブラウザでhttp:/archive.ubuntu.XXXXXXXX.jp/ など3種類でアクセスして、ミラーサイトに元サイトと同じ内容が表示されればOK。

 

9.apt-get で更新確認

sudo apt-get update

できた。Good!!

 

 

※apt-getで無視ってメッセージ出るけど、なんで無視するんだろ?

※apt-mirrorでclean.shが更新されるけど、これ実行しないでapt-mirrorを再実行したらどうなるんだろ? rm文を上書きしないで追記する感じにしてくれないと、上書きされたら二度と消せなくなるのでは? もしかして、毎回ミラー元とファイルリストを突合して、差分をrm文にして載せてくれてるのかな。今度試そう。

今回、参考にしたサイト

http://yosida95.hatenablog.com/entry/2013/05/19/003744

とっても参考になった。感謝!!