FreeBSD8.4: pkg : No valid repository found

先日、FreeBSD portsパッケージの管理を pkgng に変更しましたが、pkg update コマンドなどを実行しようとすると、“No valid repository found” となり、ローカルにビルドする方式でのアップグレードは可能なものの、ビルド済みバイナリーをサーバーからダウンロードしてインストールするタイプの pkg コマンドを使う事は出来なかったというメモを書きました。
これは、repository サーバーが設定されていないためと推測でき、私の場合はバイナリーインストールよりもローカルビルドが向いていると思うため出来なくてもportsメンテナンスは可能ですが、一応使い心地を体験しておきたいと思いいろいろ調べてみました。

3台のFreeBSD 8.4サーバーを pkgng による管理に変更したのですが、不思議な事に1台だけは  pkg update や pkg upgrade が何事もなく使えます。2台が「No valid repository found」となります。
メッセージからも推測できるとおり、原因はパッケージ元サーバーのホスト情報が無いためだと考えられます。

repo サーバーにアクセス出来るマシンと出来ないマシンで何が違うのかと etc ディレクトリをチェックしまくりました。
/usr/local/etc の下には pkg ディレクトリも pkg.conf もなし。pkg.conf.sample は存在しているので、コピーして pkg.conf を作ってみたものの効果無し。
ようやく、pkg update が使えるマシンにだけ /etc/pkg ディレクトリが存在し、そこに FreeBSD.conf というファイルが置かれている事を発見。ディレクトリの日付を見たら 6月25日からそこに存在している事になっていました。Create日も確認したので間違いないでしょうが、何と一緒に入ったんだろう?

中身は、

# cat FreeBSD.conf
# $FreeBSD$
#
# To disable this repository, instead of modifying or removing this file,
# create a /usr/local/etc/pkg/repos/FreeBSD.conf file:
#
# mkdir -p /usr/local/etc/pkg/repos
# echo "FreeBSD: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf
#
FreeBSD: {
 url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
 mirror_type: "srv",
 signature_type: "fingerprints",
 fingerprints: "/usr/share/keys/pkg",
 enabled: yes
}

となっています。
同じディレクトリ構成とFreeBSD.conf ファイルを”No valid repository found.”となるホストに作ったら、動くようになりました。ただし、本来 /etc/pkg/FreeBSD.conf は最終的に参照されるconfファイルのようで、repository を使いたくない場合は、このファイルを消すのではなく、/usr/local/etc/pkg/repos を使えと書いてありますので、/etc/pkg を消して /usr/local/etc/pkg/repos/FreeBSD.conf を使う事にします。

目的のファイル名が分かったので、man コマンドで pkg.conf を確認してみると、FreeBSD.conf ファイルのサンプルがありました。

man pkg.conf

ENVIRONMENT
An environment variable with the same name as the option in the configu-
ration file always overrides the value of an option set in the file.

EXAMPLES
Repository configuration file:

FreeBSD: {
url: "pkg+http://pkg.freebsd.org/${ABI}/latest",
enabled: true,
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkg",
mirror_type: "srv"
}
Example for pkg.conf

pkg_dbdir: "/var/db/pkg"
pkg_cachedir: "/var/cache/pkg"
portsdir: "/usr/ports"
handle_rc_scripts: false
assume_always_yes: false
repos_dir: [
"/etc/pkg",
"/usr/local/etc/pkg/repos",
]
syslog: true

上記太字の部分を /usr/local/etc/pkg/repos/FreeBSD.conf にコピーして保存したところ、これで”No valid repository found” は出なくなりました。ただし、”/usr/share/keys/pkg” が存在しないので、別のエラーになります。

# pkg update
Updating FreeBSD repository catalogue...
Fetching meta.txz: 100% 968 B 1.0k/s 00:01
pkg: Error loading trusted certificates
pkg: repository FreeBSD has no meta file, using default settings
Fetching digests.txz: 100% 2 MB 1.0M/s 00:02
pkg: Error loading trusted certificates
pkg: Unable to update repository FreeBSD

よくよく確認してみると、pkg update が使えるOSは、

FreeBSD 8.4-RELEASE-p11

で、使えないOSは

FreeBSD 8.4-RELEASE-p9

原因はこれかい!

早速、エラーが出るOSで、

# freebsd-update fetch

を実行してみると、以下のような感じで、pkgがらみのファイルがたくさんインストールされる見込み。

The following files will be added as part of updating to 8.4-RELEASE-p16:
/etc/pkg
/etc/pkg/FreeBSD.conf
/usr/share/keys/pkg/trusted/pkg.freebsd.org.2013102301
/usr/src/etc/pkg
/usr/src/etc/pkg/FreeBSD.conf
/usr/src/etc/pkg/Makefile
/usr/src/share/keys
/usr/src/share/keys/Makefile
/usr/src/share/keys/pkg
/usr/src/share/keys/pkg/Makefile
/usr/src/share/keys/pkg/trusted
/usr/src/share/keys/pkg/trusted/Makefile
/usr/src/share/keys/pkg/trusted/pkg.freebsd.org.2013102301
# freebsd-update install
Installing updates... done.
# pkg update
Updating FreeBSD repository catalogue...
Fetching meta.txz: 100% 968 B 1.0k/s 00:01
Fetching digests.txz: 100% 2 MB 1.0M/s 00:02
Fetching packagesite.txz: 100% 5 MB 1.1M/s 00:05

“pkg update” コマンドを実行すると、先ほどエラーが出た部分は通過し作業が始まりました。 /usr/local/etc/pkg を新たに追加していますが、これも不要かも。

pkg コマンドが”No valid repository found”となる原因は、FreeBSD 8.4 のパッチレベルが低かったためというのが原因のようです。手作業で、conf ファイルを追加したり、キーを生成する事も出来るでしょうが、freebsd-update コマンドで最新パッチレベルへ更新するのが簡単そうです。上記の出力は freebsd-update 後のOSリブートを行っていない状態で行いましたが、リブートを行いカーネルもちょっと新しくなりました。

FreeBSD 8.4-RELEASE-p16

pkg upgrade コマンドを実行したら、出るわ出るわ。

# pkg upgrade
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Checking for upgrades (241 candidates): 0%
pkg: portupgrade has a missing dependency: db48
Checking for upgrades (241 candidates): 100%
The following 93 packages will be affected (of 0 checked):

New packages to be INSTALLED:
db5: 5.3.28_2
apache24: 2.4.10_1
p5-IO-Socket-INET6: 2.69
p5-Socket6: 0.25_1

Installed packages to be REINSTALLED:
zip-3.0 (options changed)
xv-3.10a_15 (options changed)
perl5-5.16.3_11 (options changed)
autoconf-2.69 (direct dependency changed)
m4-1.4.17_1,1 (options changed)
automake-1.14 (direct dependency changed)
automake14-1.4.6_6 (direct dependency changed)
autoconf213-2.13.000227_6 (direct dependency changed)
gettext-0.18.3.1_1 (direct dependency changed)
gmake-3.82_1 (options changed)
libX11-1.6.2_2,1 (direct dependency changed)
libxcb-1.10_2 (options changed)
ja-xv-3.10a_15 (options changed)
libXext-1.3.2_2,1 (direct dependency changed)
libXt-1.1.4_2,1 (direct dependency changed)
libXpm-3.5.11_2 (direct dependency changed)
libXp-1.0.2_2,1 (direct dependency changed)
ja-kterm-6.2.0_13 (direct dependency changed)
libXmu-1.1.2_2,1 (direct dependency changed)
xload-1.1.2 (direct dependency changed)
libXaw-1.0.12_2,2 (direct dependency changed)
libXi-1.7.4,1 (direct dependency changed)
libXfixes-5.0.1_2 (direct dependency changed)
libXdamage-1.1.4_2 (direct dependency changed)
libXxf86vm-1.1.3_2 (direct dependency changed)
libXrandr-1.4.2_2 (direct dependency changed)
libXrender-0.9.8_2 (direct dependency changed)
libgd-2.1.0_4,1 (direct dependency changed)
fontconfig-2.11.0_3,1 (options changed)
webalizer-2.23.8_2 (direct dependency changed)
tiff-4.0.3_4 (options changed)
jasper-1.900.1_14 (options changed)
netpbm-10.35.92_1 (options changed)
cadaver-0.23.3_2 (options changed)
neon29-0.29.6_6 (direct dependency changed)
curl-7.38.0_1 (direct dependency changed)
ruby19-bdb-0.6.6_4 (direct dependency changed)
ruby19-date2-4.0.19 (options changed)
ruby-1.9.3.547_3,1 (direct dependency changed)
portupgrade-2.4.12_2,2 (direct dependency changed)
libexecinfo-1.1_3 (options changed)
apr-1.5.1.1.5.3_4 (options changed)
mysql55-client-5.5.39 (needed shared library changed)
php5-extensions-1.7 (direct dependency changed)
gnugrep-2.20 (direct dependency changed)
mod_php5-5.4.32,1 (direct dependency changed)
apache22-2.2.29 (direct dependency changed)
gdbm-1.11_2 (direct dependency changed)
sqlite3-3.8.6 (options changed)
libltdl-2.4.2_3 (direct dependency changed)
p5-BerkeleyDB-0.54_1 (direct dependency changed)
fastresolve-2.10_5 (direct dependency changed)
adns-1.4_1 (options changed)
wget-1.15_2 (options changed)
bind99-9.9.5P1_5 (options changed)
p5-Net-HTTP-6.07 (direct dependency changed)
p5-WebService-Dropbox-1.18 (direct dependency changed)
dropbox-api-command-1.13,1 (direct dependency changed)
p5-Net-SSLeay-1.66 (direct dependency changed)
p5-LWP-Protocol-https-6.06 (direct dependency changed)
p5-Crypt-SSLeay-0.72 (direct dependency changed)
p5-libwww-6.08 (options changed)
p5-Net-DNS-0.79 (options changed)
p5-Net-LibIDN-0.12_2 (direct dependency changed)
p5-HTTP-Message-6.06_2 (direct dependency changed)
p5-HTTP-Cookies-6.01 (direct dependency changed)
p5-HTTP-Daemon-6.01 (direct dependency changed)
p5-HTTP-Negotiate-6.01 (direct dependency changed)
p5-Params-Validate-1.13 (direct dependency changed)
p5-DateTime-Locale-0.45 (direct dependency changed)
p5-Class-Load-0.21 (direct dependency changed)
p5-DateTime-Format-Strptime-1.55,1 (direct dependency changed)
p5-Package-Stash-0.36 (direct dependency changed)
py27-setuptools27-5.5.1 (direct dependency changed)
python27-2.7.8_5 (options changed)
xcb-proto-1.10_1 (direct dependency changed)
python2-2_3 (direct dependency changed)
python-2.7_2,2 (direct dependency changed)
py27-libxml2-2.9.1 (direct dependency changed)
libdrm-2.4.17_2,1 (options changed)
libxslt-1.1.28_4 (direct dependency changed)
help2man-1.43.3_1 (direct dependency changed)
p5-Locale-gettext-1.05_3 (direct dependency changed)
bison-2.7.1,1 (options changed)
p5-Data-Dump-1.22 (options changed)
p5-Data-Random-0.11 (direct dependency changed)
ncftp-3.2.5 (options changed)
libtool-2.4.2_3 (direct dependency changed)
ja-gawk-3.0.6 (options changed)

The process will require 69 MB more space.
72 MB to be downloaded.

Proceed with this action? [y/N]:

結論は、「pkg コマンドで “No valid repository found.” となる場合は、 freebsd-update コマンドでパッチレベルを最新にせよ。」ということのようです。

コメントを残す