「ports」タグアーカイブ

Apache-2.2.15_9へアップグレードできない

この前からapache-2.2.14_6をapache-2.2.15_9にportupgradeしようとしてエラーが出てうまくいかなかったのをApacheを止めたくないがために深く追求せずに放置したままになっていました。今日は本腰を入れてこれを調べてみた。

エラーメッセージを見ると apr-1 パッケージに問題ありそうなことが分かったのでさくっと「apache apr-1」でぐぐってみたら「portupgradeでapache- 2.2.15_9に更新できない」というそのまんまの情報がみつかりました。感謝感謝。

その記事の内容を参考にしつつ、以下の作業でアップグレードに成功。
まず、ざっくりとapache22と apr関係をアンインストール。私の環境では以下のとおり。

# pkg_delete -f apache-2.\*
# pkg_delete -f apr-ipv6-devrandom-gdbm-db42-1.4.2.1.3.9_1

次に/var/db/ports/apr のoptionsの内容をApache-2.2に合わせて変更。

WITHOUT_THREADS=true
WITHOUT_IPV6=true

最後に、Apache-2.2を再びインストール。apr関係はportsの依存関係で勝手に入る。今回入ったのは apr-nothr-devrandom-gdbm-db42-1.4.2.1.3.9_1 だった。

# portinstall apache22

これで完了。
以下はports設定ファイルの備忘録

# cat /var/db/ports/apr/options

# This file is auto-generated by ‘make config’.
# No user-servicable parts inside!
# Options for apr-ipv6-devrandom-gdbm-db42-1.4.2.1.3.9_1
_OPTIONS_READ=apr-ipv6-devrandom-gdbm-db42-1.4.2.1.3.9_1
WITHOUT_THREADS=true
WITHOUT_IPV6=true
WITH_BDB=true
WITH_GDBM=true
WITHOUT_LDAP=true
WITHOUT_MYSQL=true
WITHOUT_NDBM=true
WITHOUT_PGSQL=true
WITHOUT_SQLITE=true
WITH_DEVRANDOM=true

# cat /var/db/ports/apache22/options

# This file is auto-generated by ‘make config’.
# No user-servicable parts inside!
# Options for apache-2.2.15_9
_OPTIONS_READ=apache-2.2.15_9
WITHOUT_THREADS=true
WITH_MYSQL=true
WITHOUT_PGSQL=true
WITHOUT_SQLITE=true
WITHOUT_IPV6=true
WITHOUT_BDB=true
WITH_AUTH_BASIC=true
WITH_AUTH_DIGEST=true
WITH_AUTHN_FILE=true
WITHOUT_AUTHN_DBD=true
WITH_AUTHN_DBM=true
WITH_AUTHN_ANON=true
WITH_AUTHN_DEFAULT=true
WITH_AUTHN_ALIAS=true
WITH_AUTHZ_HOST=true
WITH_AUTHZ_GROUPFILE=true
WITH_AUTHZ_USER=true
WITH_AUTHZ_DBM=true
WITH_AUTHZ_OWNER=true
WITH_AUTHZ_DEFAULT=true
WITH_CACHE=true
WITH_DISK_CACHE=true
WITH_FILE_CACHE=true
WITHOUT_MEM_CACHE=true
WITH_DAV=true
WITH_DAV_FS=true
WITHOUT_BUCKETEER=true
WITHOUT_CASE_FILTER=true
WITHOUT_CASE_FILTER_IN=true
WITHOUT_EXT_FILTER=true
WITHOUT_LOG_FORENSIC=true
WITHOUT_OPTIONAL_HOOK_EXPORT=true
WITHOUT_OPTIONAL_HOOK_IMPORT=true
WITHOUT_OPTIONAL_FN_IMPORT=true
WITHOUT_OPTIONAL_FN_EXPORT=true
WITHOUT_LDAP=true
WITHOUT_AUTHNZ_LDAP=true
WITH_ACTIONS=true
WITH_ALIAS=true
WITH_ASIS=true
WITH_AUTOINDEX=true
WITH_CERN_META=true
WITH_CGI=true
WITH_CHARSET_LITE=true
WITHOUT_DBD=true
WITH_DEFLATE=true
WITH_DIR=true
WITH_DUMPIO=true
WITH_ENV=true
WITH_EXPIRES=true
WITH_HEADERS=true
WITH_IMAGEMAP=true
WITH_INCLUDE=true
WITH_INFO=true
WITH_LOG_CONFIG=true
WITH_LOGIO=true
WITH_MIME=true
WITH_MIME_MAGIC=true
WITH_NEGOTIATION=true
WITH_REWRITE=true
WITH_SETENVIF=true
WITH_SPELING=true
WITH_STATUS=true
WITH_UNIQUE_ID=true
WITH_USERDIR=true
WITH_USERTRACK=true
WITH_VHOST_ALIAS=true
WITH_FILTER=true
WITH_VERSION=true
WITHOUT_PROXY=true
WITHOUT_PROXY_CONNECT=true
WITH_PATCH_PROXY_CONNECT=true
WITHOUT_PROXY_FTP=true
WITHOUT_PROXY_HTTP=true
WITHOUT_PROXY_AJP=true
WITHOUT_PROXY_BALANCER=true
WITHOUT_PROXY_SCGI=true
WITH_SSL=true
WITHOUT_SUEXEC=true
WITHOUT_SUEXEC_RSRCLIMIT=true
WITH_REQTIMEOUT=true
WITHOUT_CGID=true

FreeBSD (portsのアップデート)

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権限で

# 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” に場所が変わってます。)

# mkdir /var/log/ports
# cd /usr/ports/ports-mgmt/portupgrade
# make | tee -a /var/log/ports/portupgrade.log
# make install | tee -a /var/log/ports/portupgrade.log
# make clean | tee -a /var/log/ports/portupgrade.log
# source ~/.cshrc
# mkdir /usr/ports/packages
# mkdir /usr/ports/packages/All

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

PORTUPGRADE_ARGS = ENV['PORTUPGRADE'] || \
'-v -D -L /var/log/ports/'

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

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

# portinstall portaudit

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

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

# portinstall cvsup-without-gui
#mkdir /etc/cvsup
# mkdir /var/db/sup
# mkdir /var/log/cvsup
# mkdir /var/log/cvsup/ports
# mkdir /var/log/cvsup/pkg

fastest_cvsup

# portinstall fastest_cvsup

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

# fastest_cvsup -c jp
>>  Querying servers in countries: jp
--> Connecting to cvsup.jp.freebsd.org [210.224.172.75]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 347.93 ms
--> Connecting to cvsup2.jp.freebsd.org [203.216.196.85]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 311.99 ms
--> Connecting to cvsup3.jp.freebsd.org [59.106.2.11]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 318.56 ms
--> Connecting to cvsup4.jp.freebsd.org [133.1.240.15]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 325.13 ms
--> Connecting to cvsup5.jp.freebsd.org [210.161.150.4]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 309.39 ms
--> Connecting to cvsup6.jp.freebsd.org [59.106.2.11]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 307.73 ms

>>  Speed Daemons:
- 1st: cvsup6.jp.freebsd.org
- 2nd: cvsup5.jp.freebsd.org
- 3rd: cvsup2.jp.freebsd.org

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

# fastest_cvsup -c au
>>  Querying servers in countries: au
--> Connecting to cvsup.au.freebsd.org [203.16.234.32]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 62.51 ms
--> Connecting to cvsup2.au.freebsd.org [150.101.48.30]...
- server replied: ! Access limit exceeded; try again later
- time taken: 87.69 ms
--> Connecting to cvsup3.au.freebsd.org [150.101.48.30]...
- server replied: ! Access limit exceeded; try again later
- time taken: 85.96 ms
--> Connecting to cvsup4.au.freebsd.org [203.16.234.31]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 62.23 ms
--> Connecting to cvsup5.au.freebsd.org [150.101.48.30]...
- server replied: ! Access limit exceeded; try again later
- time taken: 84.68 ms
--> Connecting to cvsup6.au.freebsd.org [203.16.234.32]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 61.53 ms
--> Connecting to cvsup7.au.freebsd.org [202.158.214.106]...
* error: connect: Invalid argument

>>  Speed Daemons:
- 1st: cvsup6.au.freebsd.org
- 2nd: cvsup4.au.freebsd.org
- 3rd: cvsup.au.freebsd.org

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

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

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

# 利用する CVSup サーバーを fastest_cvsup の結果から選択
#*default host=cvsup.jp.FreeBSD.org
#*default host=cvsup2.jp.FreeBSD.org
#*default host=cvsup3.jp.FreeBSD.org
#*default host=cvsup4.jp.FreeBSD.org
#*default host=cvsup5.jp.FreeBSD.org
#*default host=cvsup6.jp.FreeBSD.org
*default host=cvsup6.au.FreeBSD.org #<--これが選んだcvsupサーバー
*default base=/var/db # 作業ディレクトリ
*default prefix=/usr  # /usr/ports に展開
*default release=cvs tag=.
*default delete use-rel-suffix

ports-all # ports 全てを同期

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

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

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

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

if SERVER=`$bin_fastest_cvsup -q -c jp`; then

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

11     5      *      *      *      root   /root/bin/cvsup-ports.sh

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

(*1): 今現在サイトが見つからないのでこちらに置いておきます