pkgngの公式サイトがやっと復活した。
http://lists.freebsd.org/pipermail/freebsd-current/2013-October/046055.html
したのだが、proxy越しだと動かない事があって、俺含む一部のユーザはとてもガッカリしている。
原因ははっきりしていて、DNS上、SRVレコードを使っているからだ。
SRVレコードにしたのはしかし理由があってのものなので、単にAレコードに追加すればよいという話でもない。
公式MLでもえらく議論が続いているが、SRVレコードを使うというのは変わりそうにないようだ(2013/11/3現在)。
(2013/12/19追記)
pkg-1.2.3で問題が解消された。
(2013/12/19追記ここまで)
というわけで、公式に沿ったpkgサイトの設定のしかたと、proxy越し等で公式pkgサイトのアドレス解決が出来ない場合の回避方法を示す。
公式の設定方法
1. Ensure your pkg(8) is up-to-date. 'pkg -v' should say at least
1.1.4_8. If it does not, first upgrade from ports.
2. Remove any repository-specific configuration from
/usr/local/etc/pkg.conf, such as PACKAGESITE, MIRROR_TYPE, PUBKEY.
If this leaves your pkg.conf empty, just remove it.
3. mkdir -p /usr/local/etc/pkg/repos
4. Create the file /usr/local/etc/pkg/repos/FreeBSD.conf with:
FreeBSD: {
url: "http://pkg.FreeBSD.org/${ABI}/latest",
mirror_type: "srv",
enabled: "yes"
}
事前準備
pkg-1.1.4_8にする。
インストール済みの場合、公式などはpkg -vで確認しろというが、pkg -vで表示されるのは以下の通りで1.1.4_8かどうかはわからない。
$ pkg -v
1.1.4
なので、pkg infoで調べよう。
$ pkg info|grep pkg
pkg-1.1.4_8 New generation package manager
インストールしていなければ以下のように。
※freebsd:10:x86:64はOSに合わせて変更する。
# sh
# PACKAGESITE="http://pkg1.nyi.freebsd.org/freebsd:10:x86:64/latest/Latest/" pkg install pkg
# pkg info|grep pkg
何らかの理由でpkgが死んでてpkgそのものが使えない場合。
pkg.txzをダウンロードして、手動で展開する。
ルート(/)にゴミが残るから後で掃除しとけ。
# fetch http://pkg1.nyi.freebsd.org/freebsd%3A10%3Ax86%3A64/latest/Latest/pkg.txz
# tar -C / -xvzf ./pkg.txz
# pkg info | grep pkg
# ls /
+COMPACT_MANIFEST etc root
+MANIFEST home sbin
+MTREE_DIRS lib sys
設定ファイルの書き換え
/usr/local/etc/pkg.confは捨てて/usr/local/etc/pkg/reposの下に設定ファイルを入れることになる。
/usr/local/etc/pkg.confは捨てるかリネームする。
ディレクトリ/usr/local/etc/pkg/reposを作る。
そこにFreeBSD.confというファイルを作る。
ただ末尾が.confであれば名前はなんでもよい。
# sudo mv /usr/local/etc/pkg.conf /usr/local/etc/pkg.conf.obsolete
# mkdir -p /usr/local/etc/pkg/repos
# vi /usr/local/etc/pkg/repos/FreeBSD.conf
以下がファイル例。
コメント部分は、まあお好きに。
#
# FreeBSD official pkg site
#
# See:
# http://lists.freebsd.org/pipermail/freebsd-current/2013-October/046055.html
# http://lists.freebsd.org/pipermail/freebsd-current/2013-November/046122.html
#
# ATTENTION!
# pkg.freebsd.org is on SRV record, not on A record!
#
# $Id: FreeBSD.conf,v 1.1 2013/11/05 01:42:42 root Exp $
#
FreeBSD: {
url: "http://pkg.FreeBSD.org/${ABI}/latest",
mirror_type: "srv",
enabled: "yes"
}
準備完了
実行
問題なければ、pkg update, pkg upgradeでファイルを取得できるはず。
下記の通りであれば、毎週末~月曜くらいにpkg repositoryが更新されるようだ。
(水曜01:00(UTC)にportsのスナップショットから"a few days"かけてパッケージ作成)
Packages are built weekly from a snapshot of the Ports Collection every
Wednesday morning 01:00 UTC. They typically will be available in the
repository after a few days.
“Service Unavailable”
さて。
以下のようになったら、あなたのproxyサーバかDNSはSRVレコードに対応していないということ。
$ sudo pkg update
Updating repository catalogue
pkg: http://pkg.FreeBSD.org/freebsd:10:x86:64/latest/digests.txz: Service Unavailable
pkg: No digest falling back on legacy catalog format
pkg: http://pkg.FreeBSD.org/freebsd:10:x86:64/latest/repo.txz: Service Unavailable
対策(mirrorサイトを直接指定)
対策っても大したことはなくて、mirrorサイトを直接指定するだけ。
これで問題なく動くが、もちろん制限はある。
mirrorサイトがダウンしたときには、手動で接続先を変える必要がある。
今のところmirrorサイトは米国東西海岸、欧にしかない。
ゆくゆくは日本にもmirrorサーバが立つといいな。
さて手順。
以下に沿う。
ただ間違いがあって、そのままコピペすると失敗するので注意。
http://lists.freebsd.org/pipermail/freebsd-current/2013-November/046122.html
流れとしては、最初に作ったFreeBSD.confを無効にし、mirrorサイトを直接指定する設定ファイルを作る。
/usr/local/etc/pkg/repos/FreeBSD.confをリネームする。
(消してもいいけど、将来使うかもしれないし。)
# cd /usr/local/etc/pkg/repos
# mv FreeBSD.conf FreeBSD.conf.old
以下からmirrorサイトを選ぶ。
日本からだったらUS Westですかね。
pkg0.isc.freebsd.org (US West)
pkg1.nyi.freebsd.org (US East)
pkg0.bme.freebsd.org (Europe)
設定ファイルを作る。
例によって名前はなんでもよい。末尾が.confであれば。
# cd /usr/local/etc/pkg/repos
# vi us-west.conf
ファイルの例。
コメントはまあ適当に。
#
# freebsd pkg mirror server located on us-west
#
# $Id: us-west.conf,v 1.1 2013/11/05 00:27:05 root Exp root $
#
# Since official pkg server is on SRV record, which is not
# recognized by some of proxy servers, directly point a mirror
# server.
#
# In case of this mirror server being down, we need to point
# another mirror server from the following:
#
# pkg0.isc.freebsd.org (US West)
# pkg1.nyi.freebsd.org (US East)
# pkg0.bme.freebsd.org (Europe)
#
# See:
# http://lists.freebsd.org/pipermail/freebsd-current/2013-November/046122.html
#
# /usr/local/etc/pkg/repos/
#
us-west: {
url: "http://pkg0.isc.freebsd.org/${ABI}/latest",
enabled: "yes",
mirror_type: "none",
}
あとはpkg update, pkg upgradeでよいでしょう。