ほぼ雑記的メモ
標準のオプションでコンパイルしていないportsを利用しているときとか自分専用のpkgサイトがあると便利ですよね。例えば弊社ではDOVECOT2のオプションをONにしてpostfixをビルドしています。その作り方をかなり前に社内の掲示板に書いたのですが、それをブログに転載します。
普通にportsからpostfixをコンパイル、インストールする。
pkgコマンドでpackageにする。
pkg -vv で ABIを確認しておくとVersion毎にディレクトリをわけなくてよいので楽。
とりあえず
/usr/ports/packages/FreeBSD:10:amd64
をパッケージの保存先とする。dovecot2,cyrus-sasl,pcreも依存しているのでいれておく
# pkg create -o /usr/ports/packages/FreeBSD:10:amd64 postfix
レポジトリを作る
# pkg repo /usr/ports/packages/FreeBSD:10:amd64/
ローカルファイルから持ってくるだけならこれで完成である
/usr/local/etc/pkg/repos/test.conf
というファイルに
test: { url: file:/usr/ports/packages/${ABI} enable: yes priority: 1 }
と書いておけばよい。pkg -vvで確認できる。その後
# pkg install -r test postfix
でインストールできることを確認できる。
# pkg install -rtest postfix Updating test repository catalogue... test repository is up-to-date. All repositories are up-to-date. The following 2 packages will be affected (of 0 checked): New packages to be INSTALLED: postfix: 2.11.3_3,1 [test] dovecot2: 2.2.15_2 [test] The process will require 27 MB more space. 5 MB to be downloaded. Proceed with this action? [y/N]:
man pkg.confによると URLは
http://, https://, ftp://, file://, ssh://
が使えるようである。SSHは
ssh: { url: ssh://user@ssh.example.com/usr/ports/packages/${ABI} enable: yes priority: 1 }
と書いておけばよい。httpもftpも同様。
ftp: { url: ftp://ftp.example.com/pub/packages/${ABI} enable: yes priority: 1 }
当然 sshや ftpのサーバをセットアップしておかないといけない
デフォルトの設定 /etc/pkg/FreeBSD.conf を覗くと、
/etc/pkg/FreeBSD.conf
url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
と書いてある。これはDNSのSRVレコードを使って効率よく ミラー等を利用するための記法である。drillや digコマンドを使って
# drill _http._tcp.pkg.freebsd.org. srv
と調べてみるとよいであろう。
ここまでの手順で作成したものには署名がない。個人的に使う分にはこれでよいだろうが、 一般公開をするためには署名があったほうがよいであろう。 (もちろん署名があるだけでは不十分で通信そのものがSSLなどで保護されているべきである) 署名の方法は公開鍵とフィンガープリントの二種類用意されている。
opensslで公開鍵のペアを作り公開鍵を提示する手法。
% man pkg-repo
に詳しく書いてある。まず鍵を作成する
% openssl genrsa -out repo.key 2048 % chmod 0400 repo.key % openssl rsa -in repo.key -out repo.pub -pubout
repo.keyが秘密鍵で、repo.pubが公開鍵である。公開鍵はなんらか方法でクライアント(pkgを利用するサイト)に送っておく
次にその秘密鍵で署名をしてレポジトリを作成する
# pkg repo /usr/ports/packages/FreeBSD:10:amd64/ repo.key
クライアント側では設定ファイルに公開鍵のパスを指定する
test: { url: http://www.example.com/pub/packages/${ABI} enable: yes priority: 1 signature_type: pubkey pubkey: /usr/local/etc/pkg/repos/repo.pub }
man pkg-repoを参考に署名をするためのscriptを作成する。 sign.shとでもして作成をしておく
man pkg-repo
#!/bin/sh read -t 2 sum [ -z "$sum" ] && exit 1 echo SIGNATURE echo -n $sum | /usr/bin/openssl dgst -sign repo.key -sha256 -binary echo echo CERT cat repo.pub echo END
その後
# pkg repo /usr/ports/packages/FreeBSD:10:amd64/ signing_command: ./sign.sh
を実行する。
インストールする側に署名ファイルを置いておく必要がある。ここでは
/usr/local/etc/pkg/repos
とし、その下に revokedと trustedというディレクトリを用意する。 fingerprintを
# sha256 -q repo.pub
で求めておき、truestedの下に適当なファイル名で
function: sha256 fingerprint: ae9f016190512cc2107f2555c070c5ab2bad1ef73a370edc96f1b1b18022cdc1
のように置いておく。
クライアント側の設定は以下のようにする。
test: { url: http://www.example.com/pub/packages/${ABI} enable: yes priority: 1 signature_type: fingerprints pubkey: /usr/local/etc/pkg/repos }
Powered by Red Leaf ( Rev. c78c769f2 ), © Issei Numata, 2007-2021