インターネットに接続されていないなどの理由で、公式のpkgレポジトリからpkgをダウンロードできないマシンのpkgをどのように世話するか。
インターネットに接続できるマシンでpkgをインストールしておき、そのマシンからpkgを取得する。
手順
・ターゲットとなるマシン(以下、ターゲット)と同じ構成でVM(以下、コピーマシン)を作る。
・コピーマシンに必要なpkgをインストールする。
・コピーマシン上のどこかでインストール済みpkgを作る。
・同じ場所にrepoカタログを作成する。
・ターゲットと同じLANに繋ぎかえる。
・pkgのあるディレクトリをwebサーバで公開し、pkgをインストールする。
以下、詳細手順
ターゲットと同じ構成でVMを作る
RELEASEバージョンを合わせておけばよいでしょう。
割愛。
コピーマシンに必要なpkgをインストールする
タイトルの通り。
なにもわざわざインストールしなくても、という意見もあるだろうが、動作確認も必要だし。
割愛。
pkgを作る
適当な場所にディレクトリを掘り、以下のコマンドを叩く。
pkg create -a -f tgz -o ./ -n
-aは、インストール済みのすべてのpkgを指定、という意味。all。
-fは、圧縮フォーマットの指定。右から左へ移すだけだからtgzでよい。tbzだと時間がかかる。
-o ./は、作成したpkgを置く場所。
-nは、作成済みのpkgを作らない、という意味。付けると処理のスピードアップが望めるが、逆に更新のあったpkgを作り忘れる、という危険性もあるかも。
以下の例では-nを使っていない。
$ cd /usr/home/vanilla/pkgrepo/
$ sudo pkg create -f tgz -o ./ -a
Loading the package list...
Creating package for GentiumBasic-110_1
Creating package for ImageMagick-6.8.9.3,1
Creating package for ORBit2-2.14.19_1
(略)
repoカタログを作成する
pkg repoにディレクトリを指定すればよい。
$ cd /usr/home/vanilla/pkgrepo/
$ sudo pkg repo /usr/home/vanilla/pkgrepo/
Generating repository catalog in /usr/home/vanilla/pkgrepo/: done!
$
そうすると以下の二つのファイルができる。
digests.txz packagesite.txz
つまり今回の例でいえば、/usr/home/vanilla/pkgrepo/に作成したpkgと二つのファイルが格納されているわけ。
以上でコピーマシンでの作業は完了。
ターゲットでの準備
ターゲットにpkg一式をコピーし、webサーバを立ち上げる。
そのまえに、ターゲットでレポジトリの設定ファイルを修正しておくこと。
具体的には、①公式のpkgレポジトリを無効にし、②自前のpkgレポジトリの設定を加えることである。
①公式pkgレポジトリの無効化
/etc/pkg/pkg/FreeBSD.confでenabledをnoにする。
# $FreeBSD: release/10.0.0/etc/pkg/FreeBSD.conf 258710 2013-11-28 14:24:26Z gjb
$
FreeBSD: {
url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkg",
enabled: no
}
②自前レポジトリの設定
/usr/local/etc/pkg/repos/localpkg.confとして以下のようなファイルを作る。
urlは、後ほど設定するwebサーバと合わせる事。
localpkg: {
url: "http://localhost:8000/",
mirror_type: "http",
enabled: yes
}
pkg -vvとしてみる。
repo FreeBSDのenabledがno, repo localpkgのenabledがyesになっていることを確認。
Repositories:
FreeBSD: {
url : "pkg+http://pkg.FreeBSD.org/freebsd:10:x86:32/latest",
enabled : no,
mirror_type : "SRV",
signature_type : "FINGERPRINTS",
fingerprints : "/usr/share/keys/pkg"
}
localpkg: {
url : "http://localhost:8000/",
enabled : yes,
mirror_type : "HTTP"
}
webサーバでpkgを公開、インストールする。
rsyncでもなんでも使って、ターゲットにpkg一式をコピーする。
/home/vanilla/10.0/pkgにコピーしたとして、webサーバでこのディレクトリを公開すればよい。
ここでは手早くpythonで公開する。
以下のようにするとカレントディレクトリをルートとするwebサーバが立ちあがる。ポートは8000である。
$ cd /home/vanilla/10.0/pkg
$ python -m SimpleHTTPServer
同じくターゲットでpkg udpate。
pkg repoで作成したdigests.txz, packagesite.txzを参照できていることを確認したら、pkg upgradeすればよい。
$ sudo pkg update
Updating repository catalogue
digests.txz 100% 29KB 29.3KB/s 29.3KB/s 00:00
packagesite.txz 100% 136KB 135.9KB/s 135.9KB/s 00:00
Incremental update completed, 613 packages processed:
0 packages updated, 0 removed and 613 added.
以上です。