先日、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 コマンドでパッチレベルを最新にせよ。」ということのようです。