pkgngが復活したと言ったな。(proxy越しの奴にとって)あれは嘘だ。(SRVレコードの罠)

Pocket

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でよいでしょう。

2 comments

  1. ピンバック: [報告]pkg-1.2.3でproxy越しのレポジトリ接続が可能に | Nobwak's Lair
  2. ピンバック: [報告]pkg-1.2.3でproxy越しのレポジトリ接続が可能に | Nobwak's Lair

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください