portsのアップデートに関するメモ

基本的にはTAKE-LABOさんのサイトに準じた内容です。 感謝。

portsのファイル入手

オーストラリアなら (でも、"36428 KB 2007/02/23 0:00:00"だったりするので古くないか?ここは)

ftp://ftp.au.freebsd.org/pub/freebsd/ports/ports/ports.tar.gz

日本ならここ ("38506 KB 2007/12/08 1:08:00"で割と新しい)

ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz

本場(米国) ("38657 KB 2007/12/30 1:09:00" ここだとやっぱり新しい)

ftp://ftp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz

とにかく回線速度と日付と相談して適当にports.tar.gzを入手。

root権限で

CODE:
  1. # tar -zxvf ports.tar.gz -C /usr/

して/usr/portsに展開。

portupgrade
次にportsを最新の状態に保つために portupgrade をインストール。
この際にperlの最新版(5.8.8_1)とRuby(1.8.6.111_1,1)が一緒にインストールされました。
(注: "sysutils/portupgrade" ではなく "ports-mgmt/portupgrade" に場所が変わってます。)

CODE:
  1. # mkdir /var/log/ports
  2. # cd /usr/ports/ports-mgmt/portupgrade
  3. # make | tee -a /var/log/ports/portupgrade.log
  4. # make install | tee -a /var/log/ports/portupgrade.log
  5. # make clean | tee -a /var/log/ports/portupgrade.log
  6. # source ~/.cshrc
  7. # mkdir /usr/ports/packages
  8. # mkdir /usr/ports/packages/All

これで今後は make ではなく portinstall / portupgrade を使ってportsのインストールやアップグレードをすることになります。その際にログを残すために /usr/local/etc/pkgtools.conf の最後の部分を

CODE:
  1. PORTUPGRADE_ARGS = ENV['PORTUPGRADE'] || \
  2. '-v -D -L /var/log/ports/'

のように書き換えておきます。

portaudit
portsのセキュリティチェックをするためにportauditのインストール。
単に

CODE:
  1. # portinstall portaudit

でOKです。portsツリーのどこにあるか分からなくても探してインストールしてくれます。
ちなみに、以前は security/portaudit にありましたが、今は ports-mgmt/portaudit に変わっています。

cvsup-without-gui
portsツリーを最新状態に保つために非gui版のcvsupをインストール

CODE:
  1. # portinstall cvsup-without-gui
  2. #mkdir /etc/cvsup
  3. # mkdir /var/db/sup
  4. # mkdir /var/log/cvsup
  5. # mkdir /var/log/cvsup/ports
  6. # mkdir /var/log/cvsup/pkg

fastest_cvsup

CODE:
  1. # portinstall fastest_cvsup

cvsupの設定
まず、fastest_cvsup で近所のcvsupサーバーを探します。
まずは日本のサーバーを確認。

CODE:
  1. # fastest_cvsup -c jp
  2. >>  Querying servers in countries: jp
  3. --> Connecting to cvsup.jp.freebsd.org [210.224.172.75]...
  4. - server replied: OK 17 0 SNAP_16_1h CVSup server ready
  5. - time taken: 347.93 ms
  6. --> Connecting to cvsup2.jp.freebsd.org [203.216.196.85]...
  7. - server replied: OK 17 0 SNAP_16_1h CVSup server ready
  8. - time taken: 311.99 ms
  9. --> Connecting to cvsup3.jp.freebsd.org [59.106.2.11]...
  10. - server replied: OK 17 0 SNAP_16_1h CVSup server ready
  11. - time taken: 318.56 ms
  12. --> Connecting to cvsup4.jp.freebsd.org [133.1.240.15]...
  13. - server replied: OK 17 0 SNAP_16_1h CVSup server ready
  14. - time taken: 325.13 ms
  15. --> Connecting to cvsup5.jp.freebsd.org [210.161.150.4]...
  16. - server replied: OK 17 0 SNAP_16_1h CVSup server ready
  17. - time taken: 309.39 ms
  18. --> Connecting to cvsup6.jp.freebsd.org [59.106.2.11]...
  19. - server replied: OK 17 0 SNAP_16_1h CVSup server ready
  20. - time taken: 307.73 ms
  21.  
  22. >>  Speed Daemons:
  23. - 1st: cvsup6.jp.freebsd.org
  24. - 2nd: cvsup5.jp.freebsd.org
  25. - 3rd: cvsup2.jp.freebsd.org

さすがに豪州からだとjpは遠いです。次に豪州のサーバーを探します。

CODE:
  1. # fastest_cvsup -c au
  2. >>  Querying servers in countries: au
  3. --> Connecting to cvsup.au.freebsd.org [203.16.234.32]...
  4. - server replied: OK 17 0 SNAP_16_1h CVSup server ready
  5. - time taken: 62.51 ms
  6. --> Connecting to cvsup2.au.freebsd.org [150.101.48.30]...
  7. - server replied: ! Access limit exceeded; try again later
  8. - time taken: 87.69 ms
  9. --> Connecting to cvsup3.au.freebsd.org [150.101.48.30]...
  10. - server replied: ! Access limit exceeded; try again later
  11. - time taken: 85.96 ms
  12. --> Connecting to cvsup4.au.freebsd.org [203.16.234.31]...
  13. - server replied: OK 17 0 SNAP_16_1h CVSup server ready
  14. - time taken: 62.23 ms
  15. --> Connecting to cvsup5.au.freebsd.org [150.101.48.30]...
  16. - server replied: ! Access limit exceeded; try again later
  17. - time taken: 84.68 ms
  18. --> Connecting to cvsup6.au.freebsd.org [203.16.234.32]...
  19. - server replied: OK 17 0 SNAP_16_1h CVSup server ready
  20. - time taken: 61.53 ms
  21. --> Connecting to cvsup7.au.freebsd.org [202.158.214.106]...
  22. * error: connect: Invalid argument
  23.  
  24. >>  Speed Daemons:
  25. - 1st: cvsup6.au.freebsd.org
  26. - 2nd: cvsup4.au.freebsd.org
  27. - 3rd: cvsup.au.freebsd.org

au.freebsd.orgなサイトはさすがに近いですがちゃんと最新のがあるのかいまいち不安。(笑

ともかく、cvsupサーバーを決めたらsupfileを用意します。

/etc/cvsup/ports-supfile の中身。

CODE:
  1. # 利用する CVSup サーバーを fastest_cvsup の結果から選択
  2. #*default host=cvsup.jp.FreeBSD.org
  3. #*default host=cvsup2.jp.FreeBSD.org
  4. #*default host=cvsup3.jp.FreeBSD.org
  5. #*default host=cvsup4.jp.FreeBSD.org
  6. #*default host=cvsup5.jp.FreeBSD.org
  7. #*default host=cvsup6.jp.FreeBSD.org
  8. *default host=cvsup6.au.FreeBSD.org #<--これが選んだcvsupサーバー
  9. *default base=/var/db # 作業ディレクトリ
  10. *default prefix=/usr  # /usr/ports に展開
  11. *default release=cvs tag=.
  12. *default delete use-rel-suffix
  13.  
  14. ports-all # ports 全てを同期

最新のportsに
cvsupは非gui版なのでコマンドラインから

CODE:
  1. # cvsup -g -L 2 /etc/cvsup/ports-supfile | tee -a /var/log/cvsup/ports/20071231.log
  2. # portsdb -Fu
  3. # portaudit -Fda

"20071231.log"は単に今日の日付です。portsdb で INDEX を更新。 portaudit でセキュリティ上問題のある ports をリストアップ。

cronによる自動化
今までの手順をそのまま自動化するスクリプトをTAKE-LABOさんの所から落としてきて /root/bin/cvsup-ports.sh に置いてchmod 700しておきます。
ただし、50行目の

CODE:
  1. if SERVER=`$bin_fastest_cvsup -q -c jp`; then

の部分は "jp" を "au" に変更しておきます。
あとは /etc/crontab に

CODE:
  1. 11     5      *      *      *      root   /root/bin/cvsup-ports.sh

を追記すれば毎日5時11分にcvsupしてくれます。時間は適宜変更のこと。