Showing posts with label FreeBSD. Show all posts
Showing posts with label FreeBSD. Show all posts

Oct 18, 2006

さくらの専用サーバのOSを新調してみた

気がつけばuptimeが241 daysにも達してしまっている、このブログをホスティングしているさくらのレンタルサーバなのだが、ひさびさに再起動することにした。これとかこれとかこれとかあってもっと早くアップデートするべきだったのだが、ようやく重い重い腰を上げて作業したからだ。

6.0-RELEASE-p4から一気に飛んで、6.1-RELEASE-p10。

最初にセットアップしてから(Ogawa::Buzz: さくらの専用サーバに「亡命」します)から一度も再起動していなかったらしい。安定しているというかなんというか。

さくらの専用サーバの場合にはGENERIC kernelで構わないので(RELENG_6_1のソースが/usr/srcにあるとすると)、

# cd /usr/src
# make buildworld; make kernel
 /usr/src/UPDATINGにはここでrebootしてシングルユーザモードで起動と書いてあるが華麗にスルー
# mergemaster -p
# make installworld; make delete-old
# mergemaster -i
# reboot

とやるだけでよい。mergemasterのときに注意する必要があったのは、/etc/groupと/etc/mail/mailer.confだけ(私の場合)。あと/etc/localtimeが古いままだったので以下のように新しいzoneinfoファイルで上書きするのを忘れずに。

# cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

何のトラブルもなくてつまらんのー。

Mar 22, 2006

さくらの専用サーバ環境のDNS(スレーブ)設定

DNSのホスティングサービスにZoneEditを使っていた(Ogawa::Buzz: さくらの専用サーバ環境のDNS設定)のだが、いまいち調子が悪い。

これまで数時間引けないことが3回ほどあった。

ひとまず別のサービスを模索してみるべく、afraid.orgを利用してみようかと思ったのだが、afraid.orgってスパムの温床になってるっぽい。

というのも、afraid.orgにドメインを登録するとそのサブドメインは誰でも作れる状態になってしまうからなのだ。言い換えると保有しているドメインがスパムドメインと誤認される危険性があるということだ。それは困るので、再びZoneEditに戻し、ZoneEditのDNSがfeasibleでなくなったときのためにスレーブサーバをさくらの専用サーバ上に立てることにした。

まず、/etc/rc.confを編集して以下の行を追加する。

named_enable="YES"

次にlocalhost用の逆引きzoneファイルを作る。

# cd /etc/namedb
# sh make-localhost

master/localhost.rev, master/localhost-v6.revを見て問題がないかどうか確認しておく。

次にnamed.confを編集する。私の場合は以下のように変更した。

 --- named.conf.dist Wed Mar 22 17:38:18 2006
 +++ named.conf Thu Mar 23 09:52:40 2006
 @@ -19,3 +19,3 @@
  // the proper IP address, or delete this option.
 - listen-on { 127.0.0.1; };
 + listen-on { 127.0.0.1; my.ip.add.ress; };
  
 @@ -35,7 +35,8 @@
  // benefit from its cache, thus reduce overall DNS traffic in the Internet.
 -/*
 +
   forwarders {
 -  127.0.0.1;
 +  210.188.224.11;
 +  210.188.224.10; 
   };
 -*/
 +
   /*
 @@ -127 +128,18 @@
  
 +zone "mydomain.net" {
 + type slave;
 + file "slave/mydomain.net";
 + masters {
 +  69.72.158.226; // ns2.zoneedit.com
 +  66.180.174.61; // ns3.zoneedit.com
 + };
 +};
 +
 +zone "mydomain.org" {
 + type slave;
 + file "slave/mydomain.org";
 + masters {
 +  69.72.158.226; // ns2.zoneedit.com
 +  66.180.174.61; // ns3.zoneedit.com
 + };
 +};

allow-transferを設定した方がよいかも。

次にnamedを起動する。

# /etc/rc.d/named start

しばらくしてslaveディレクトリに下にZoneEditから転送されてきたzoneファイルができているかどうか確認する。

/etc/resolv.confに以下の行を追加。

nameserver 127.0.0.1

他のnameserver行を削除してもよいが、誤ってnamedを殺してしまったり、再起動時にnamedが起動しなかった場合にはリモートからsshでログインできないなど致命的な事態に陥るだろう。だから残しておく。

最後にZoneEditのNameServersの項でさくらの専用サーバを登録しておく。ホスト名は逆引きのホスト名(XXX-XXX-XXX-XXX.r-bl100.sakura.ne.jp)にしておくとよい。

追記:
でも結局、さくらでスレーブサーバを動作させるのはやめて、afraid.orgをスレーブサーバとして利用する方法を採っている。これだとafraid.orgに勝手にサブドメインを切られることはないし、ZoneEditの応答性の問題の対処にもなる。

Feb 22, 2006

さくらの専用サーバ環境のApache設定

phpMyAdminとかPostfix Adminを素で使うのはなんだかなと思ったので、www/apache13からwww/apache13-modsslに入れ替え。

www/apache22にしても良かったのだが、そうするとmod_fastcgiが使えない。正確にはパッチがあって使えるのだが、portsだけで済まない。www/lighttpdにするという手もあるけど。

# cd /usr/ports/www/apache13-modssl
# make
# make certificate (証明書を作る)
# pkg_delete apache-1.3.XX (コンフリクトするwww/apache13をアンインストール)
# make install
# pkgdb -F (php5とmod_fastcgiのようにwww/apache13に依存していたpackage db情報を修正)
# portupgrade -f php5 mod_fastcgi (この2つはインストールし直す)

http://sec.domain.tld/にアクセスしたらhttps://sec.domain.tld/にリダイレクトするには、他のVirtualHostの設定に並べて以下のように記述する。

<VirtualHost *:80>
    ServerName sec.domain.tld
    ServerAdmin root@domain.tld
    Redirect / https://sec.domain.tld/
</VirtualHost>

上の方法でインストールされるServer Certificateは、なんちゃってCAやおれおれCAで署名したものになるわけだけど、どうせならCAcert.orgに署名してもらったものをインストールした方がよいだろう。

すでになんちゃってCAで署名したCertificateがあるのなら、その元となるCSRも/usr/local/etc/apache/ssl.csr/server.csrに見つかるはず。作り直したいという場合にも、opensslコマンドを使って安直に以下のようにすればよい。

# cd /usr/local/etc/apache
# openssl genrsa -rand /dev/random -out ssl.key/server.key 1024
# openssl req -new -key ssl.key/server.key -out ssl.csr/server.csr
# chmod 400 ssl.key/server.key ssl.csr/server.csr

このCSRを使ってCAcert.orgに署名してもらい、もらったCertificateでssl.crt/server.crtを置き換え、chmod 400しておけばよい。

2006-08-15追記:

Apache 2.2.3にアップデートしたときのメモ。
/usr/local/etc/pkgtools.confのMAKE_ARGSのところに以下のように追加。

  MAKE_ARGS = {
    'www/apache22' => [
      'WITH_PROXY_MODULES=yes',
      'WITH_BERKELEYDB=db42',
    ],
    'devel/subversion' => [
      '-DWITH_PERL',
      '-DWITH_PYTHON',
      '-DWITH_MOD_DAV_SVN',
    ],
  }

しかる後に、portupgrade apache subversion。

Feb 21, 2006

さくらの専用サーバ環境のメール設定

そろそろメールの設定もしておこうかと思った。完成形としてはPostfix + PostfixAdmin + Courier-IMAPという感じ。最小の手数での動作を目指す。

メールの設定(Postfix Admin編)

まずはpostfixadminをインストールし、MySQL上にデータベースを作成する。

$ cd /usr/ports/mail/postfixadmin; make install clean
$ cd /usr/local/www/postfixadmin
$ mysql -uroot -p < DATABASE_MYSQL.TXT

データベースはpostfixという名前で、ユーザ名postfix、パスワードpostfixでアクセスできるように設定されている。変更したい場合にはDATABASE_MYSQL.TXTに適宜変更を加えてから読み込むという方法と、phpMyAdminなどを使って変更する方法がある。

/usr/local/www/postfixadmin/config.inc.phpを適宜編集する。いろいろ変更することも可能だが、変更を最小限に留めたければ、change-this-to-your.domain.tldとなっている部分を自分のドメイン名に変更するだけでよい。

/usr/local/www/postfixadmin/admin/.htaccessを若干修正。オリジナルには脆弱性がある。

 --- .htaccess.bak       Sun Feb 19 03:18:10 2006
 +++ .htaccess   Tue Feb 21 11:58:26 2006
 @@ -3,6 +3,4 @@
  AuthName "Postfix Admin"
  AuthType Basic
 
 -<limit GET POST>
  require valid-user
 -</limit>

/usr/local/www/postfixadmin/admin/.htpasswdにパスワードを登録しなおす。デフォルトはadmin:adminになっていて誰でもクラックできるので要注意。

# cd /usr/local/www/postfixadmin/admin
# mv .htpasswd .htpasswd.bak
# htpasswd -c -m .htpasswd name

httpd.confの適切な箇所に以下を追加する。

Alias /postfixadmin/ "/usr/local/www/postfixadmin/"
<Directory "/usr/local/www/postfixadmin">
        Options Indexes
        AllowOverride AuthConfig
</Directory>

apachectl restartしてapacheを再起動し、/postfixadmin/setup.phpをブラウザでアクセスしてセットアップの確認を行う。問題がなければ、setup.phpを削除またはリネームした上で、admin sectionにアクセスして初期設定を行う。

使い方に関してはグーグルに聞くこと。

メールの設定(Postfix編)

インストール

まず、/usr/port/mail/postfixでmake installする。私がインストールしたバージョンは2.2.8_2,1である。コンパイルオプションをいろいろ聞かれるが、ここでの設定を行うには、少なくともMySQLがenableになっていなければならない。

設定

無事にインストールできたら、/usr/local/etc/postfix/main.cfの末尾に以下をざっくり追加する。

mydomain = your.domain.name
myorigin = $mydomain
mydestination =
local_transport = virtual
mynetworks_style = host
mynetworks = 59.106.XXX.XXX 127.0.0.1
home_mailbox = Maildir/
alias_maps =
alias_databases =
 
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /var/mail
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 51200000
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 125
virtual_uid_maps = static:125
virtual_gid_maps = static:6
virtual_transport = virtual
 
# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes

この設定では、Maildir形式のメールスプールが/var/mail/username@my.domain/というディレクトリに作られる。/var/mailのもともとのパーミッションに合わせて、ユーザpostfix(UID=125)、グループmail(GID=6)の権限で書き込むように設定している。/etc/passwd, /etc/groupを見て異なる値になっていたらその値に合わせる必要がある。

次にmain.cfで使っている4つのmysql_virtual_XX.cfファイルを用意する。各々の内容は以下の通り。

mysql_virtual_alias_maps.cf
user = postfix (データベースのユーザ名)
password = postfix (データベースのパスワード)
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active='1'
mysql_virtual_domains_maps.cf
user = postfix (データベースのユーザ名)
password = postfix (データベースのパスワード)
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s'
#optional query to use when relaying for backup MX
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx='0' AND active='1'
mysql_virtual_mailbox_maps.cf
user = postfix (データベースのユーザ名)
password = postfix (データベースのパスワード)
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' and active='1'
mysql_virtual_mailbox_limit_maps.cf
user = postfix (データベースのユーザ名)
password = postfix (データベースのパスワード)
hosts = localhost
dbname = postfix
query = SELECT quota FROM mailbox WHERE username='%s'

4つのファイルを作ったらmysql_virtual_XX.cfを人様に見られないようにchmod & chgrpしておく。

# chmod 640 mysql_*
# chgrp postfix mysql_*

SASLの設定などは後からでもできるので省略。

起動の設定

/etc/rc.confに以下の行を追加する。

postfix_enable="YES"
sendmail_enable="NONE" ("NO"ではなくて"NONE")

/etc/periodic.confに以下の行を追加する(なければ新規に作る)。

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

sendmailがまだ動いていたら停止+postfixをおもむろに起動。

# /etc/rc.d/sendmail stop
# /usr/local/etc/rc.d/postfix.sh start

メールの設定(Courier-IMAP編)

インストール

portinstallを使ってcourier-imapをインストールする。

$ portinstall -P courier-authlib-base courier-authlib-mysql courier-imap

Authdaemonの設定

/usr/local/etc/authlib/authdaemonrcを修正する。デフォルトでも問題ないかもしれないが、Postfix Adminで設定したアカウントだけでメールを授受するには以下のように設定する。

 --- authdaemonrc.dist   Tue Feb 21 09:06:33 2006
 +++ authdaemonrc        Tue Feb 21 09:20:18 2006
 @@ -27 +27 @@
 -authmodulelist="authuserdb authvchkpw authpam authldap authmysql authpgsql"
 +authmodulelist="authmysql"

/usr/local/etc/authlib/authmysqlrcも修正する。postfixの設定では、メールスプールが/var/mail/username@my.domain/というディレクトリに作られるようにしていた。下記は、/var/mail/username@my.domain/以下にあるメールスプールをユーザpostfix(UID=125)、グループmail(GID=6)の権限で読み書きするように設定している。

 --- authmysqlrc.dist    Tue Feb 21 09:08:13 2006
 +++ authmysqlrc Tue Feb 21 17:59:57 2006
 @@ -26,3 +26,3 @@
 -MYSQL_SERVER           mysql.example.com
 -MYSQL_USERNAME         admin
 -MYSQL_PASSWORD         admin
 +MYSQL_SERVER           localhost
 +MYSQL_USERNAME         postfix (データベースのユーザ名)
 +MYSQL_PASSWORD         postfix (データベースのパスワード)
 @@ -54 +54 @@
 -MYSQL_DATABASE         mysql
 +MYSQL_DATABASE         postfix
 @@ -61 +61 @@
 -MYSQL_USER_TABLE       passwd
 +MYSQL_USER_TABLE       mailbox
 @@ -70 +70 @@
 -MYSQL_CRYPT_PWFIELD    crypt
 +MYSQL_CRYPT_PWFIELD    password
 @@ -91 +91 @@
 -MYSQL_UID_FIELD                uid
 +MYSQL_UID_FIELD                '125'
 @@ -97 +97 @@
 -MYSQL_GID_FIELD                gid
 +MYSQL_GID_FIELD                '6'
 @@ -106 +106 @@
 -MYSQL_LOGIN_FIELD      id
 +MYSQL_LOGIN_FIELD      username
 @@ -111 +111 @@
 -MYSQL_HOME_FIELD       home
 +MYSQL_HOME_FIELD       '/var/mail/'
 @@ -128 +128 @@
 -# MYSQL_MAILDIR_FIELD  maildir
 +MYSQL_MAILDIR_FIELD    maildir

Courier-IMAPの設定

Courier-IMAPでは、pop3d, pop3d-ssl, imapd, imapd-sslの4つのアクセスメソッドが用意されている。-sslが付いているのは通信経路が暗号化されるが、暗号化のために必要な証明書に(お金を払いたくなければ)自己署名しなくてはならない。また、自己署名した証明書を使ったpop3d-ssl, imapd-sslに対して接続のたびにWarningを表示するようなメーラーもままある。

つまり、私が言いたいのは「面倒だからpop3dとimapdの設定だけここではする。-sslが使いたければ後で考える。」ということだ。

Courier-IMAPの設定ファイルは/usr/local/etc/courier-imap以下にあるが、ここでは何も変更しないでおく。何もしなくてもpop3とimapdは使えるからだ。

起動の設定

次に/etc/rc.confに以下の行を追加する。

courier_authdaemond_enable="YES"
courier_imap_imapd_enable="YES"
courier_imap_imapd_ssl_enable="NO"
courier_imap_pop3d_enable="YES"
courier_imap_pop3d_ssl_enable="NO"

最後に必要なデーモンを起動する。

# /usr/local/etc/rc.d/courier-authdaemond.sh start
# /usr/local/etc/rc.d/courier-imap-pop3d.sh start
# /usr/local/etc/rc.d/courier-imap-imapd.sh start

メールの設定(Postfix編SMTP-Auth対応)

ここまで説明した設定では、mynetworksに指定したホストからしかメールの送信を行えない。mynetworksに自分の使用するすべてのIPアドレスを指定しておくのも一つの解だが、ここではSMTP-Auth対応にする方法を述べる。

まず、postfixをインストールする際にSASL2とMySQLがenableにしてあるものとする。また、上の設定はすでに行ってあるものとする。

/usr/local/etc/postfix/main.cfの末尾に以下の設定を追加する。

# SMTP-Auth and TLS
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes

次に/usr/local/lib/sasl2/smtpd.confというファイルを作る。内容は以下の通り。

pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path: /var/run/authdaemond/socket

さらにsmtpd(postfixユーザ権限で動作する)が/var/run/authdaemond/socketにアクセスできるようにする必要がある。安直にこれを実現するには、/var/run/authdaemondディレクトリのパーミッションを緩めに設定する方法とpostfixユーザをcourierグループに追加する方法がある。前者の方がセキュリティ上のインパクトが大きい。後者を実現するには/etc/groupのcourierグループにpostfixを追加すればよい。

 --- group.bak   Thu Feb 23 21:13:19 2006
 +++ group       Thu Feb 23 21:14:04 2006
 @@ -32 +32 @@
 -courier:*:465:
 +courier:*:465:postfix

以上の設定が済んだら、/usr/local/etc/rc.d/postfix.sh restartしてpostfixを再起動する。

ちなみに以上で説明したようにpwcheck_methodでauthdaemondを指定するには、cyrus-sasl2がWITH_AUTHDAEMONオプション付きでコンパイルされている必要がある。ただし、courier-authlibが先にインストールされていれば、オプションを明示的に設定されていなくても有効になる。うまく動かない場合にはcyrus-sasl2をインストールし直すことをお勧めする。

メーラーの設定はグーグルで調べること。残るは、pop3d, imapd, smtpdのTLS対応。

Feb 18, 2006

さくらの専用サーバ環境のDNS設定

つづいて、ホスト名の変更とDNSの登録。

ホスト名の変更

さくらの専用サーバのデフォルトのホスト名はwww.my.domainという名前になっているので、これを変更しておく。

まず、/etc/rc.confのhostnameを変更する。

hostname="sakura.as-is.net"

次に/etc/hostsを変更して再起動すればよい。

59.106.XX.XX            sakura.as-is.net sakura
59.106.XX.XX            sakura.as-is.net.

sysinstallコマンドを使って変更することもできる。

DNSへの登録

DNSへの登録は、自分で専用サーバ上にBIND9を設定してもよいが、1個のサーバしか借りていない場合には、Primary ServerとSecondary Serverの両方は提供できないし、設定ミスによってセキュリティホールを作りがちでもある。できれば信頼性の高いサービスにアウトソースしたいところ。

さくらの専用サーバのオプションサービスを利用したり、レジストラのDNSサービスを利用したりすることもできるが、一般的には有料だったり、ムームードメインのようにDNSサービスを提供していない場合もある。

私の場合にはZoneEditを使って設定してみた。5ゾーンまでで常識的な使い方をしていれば無料で済む(はずの)サービスで、信頼性もあるようだ。

http://www.zoneedit.com/

WebForwards、MailForwards、WebParkの機能はよく分からないので使わない。

設定を無事に済ませ、レジストラでNSレコードをZoneEditの2つのサーバに設定し、十分時間が経つと、DNSの設定は完了である。心配ならばDNS Reportのページで設定を確認しておくとよい。

http://www.dnsreport.com/

それにしてもiTSCOMのDNSサーバはいつもながら反映が遅いね。

/etc/resolv.confの変更

domain as-is.net
nameserver 210.188.XXX.XXX
nameserver 210.188.XXX.XXX

ZoneEditのTTL

ZoneEditの管理画面の「Configure SOA」から「Time To Live」を変更できる。デフォルト値が7200秒になっているのだが、これってDefault TTLとしては短すぎないか、とふと思った。

nslookup -q=soaしてみた。

$ nslookup -q=soa as-is.net
Server:         210.188.XXX.XXX
Address:        210.188.XXX.XXX#53
 
Non-authoritative answer:
as-is.net
        origin = ns2.zoneedit.com
        mail addr = soacontact.zoneedit.com
        serial = 1140208302
        refresh = 14400
        retry = 7200
        expire = 950400
        minimum = 7200

ZoneEditの「Time To Live」ってMinimum TTLのことなのか。Default TTLはどうなっているのだろう。

MySQLの移行

DNSが思いのほか早く切り替わってしまったので慌ててMySQLの移行をした。

転送元でまずDBをダンプして転送先にscpでコピーしておく。転送元ではMySQL 4.1.18を使っていたので「--default-character-set=binary」付きでダンプしなければならない。このオプションを付けておかないとダンプデータに「SET NAMES utf8」というpragmaが付いてしまい、リストア時に嵌る。

 $ mysqldump --default-character-set=binary
     -uUserName -pPassword DBname > DBname.dump
 $ scp DBname.dump 59.106.XX.XX: (scpでさくらの専用サーバに転送)

転送先では、新規データベースとユーザの設定をしておく。phpMyAdminを使って設定するのが簡単。設定が済んだら以下のようにしてダンプデータをDBに読み込んでおく。

 $ mysql -uUserName -pPassword DBName < DBname.dump

DBが複数ある場合にはこれらの作業を順次行えばよい。

Feb 16, 2006

さくらの専用サーバ環境の初期設定

昨日さくらの専用サーバのアカウントが来たのでちょっと頑張ってみた。

前準備

  • sshでadminユーザでログイン
  • suしてrootになり、passwdコマンドでrootパスワードを変更。
  • adduserで自分ユーザアカウントを作り、wheelグループに自分を追加。
  • /etc/inetd.confを編集してtelnet, ftp, pop3をコメント。(telnet, ftpは危険なので使わないため。pop3はさくらではqpopperを使うように設定されているが、どちらかと言えばcourier-imapのpop3dを使いたい。したがってinetd.confで起動する必要はない。)
  • inetdの再起動。 # /etc/rc.d/inetd status (inetdのpidを確認) # kill -HUP (inetdをリロード)
  • /etc/rc.confを編集してapache_enableとdracd_enableとwebmin_enableをNOに変更。
  • apacheとdracdとwebminを停止。
     # /usr/local/etc/rc.d/apache.sh stop
     # /usr/local/etc/rc.d/dracd.sh stop
     # /usr/local/etc/rc.d/webmin.sh stop
    

6.0へのアップグレード

sysinstallで一度6.0-Releaseにアップグレードしてからfreebsd-updateでセキュリティアップデートしようかと思ったのだが、baseがインストールできずに「Write Failure on transfer ...」とか怒られる。いろいろ調べてみたが、意味が分からない。sysinstallがディスクの空き容量の見積もりを誤っているのか、chrootしようとして失敗しているのか。しかたがないのでひとつ前のエントリーで書いた方法でやることにした。

まずは/usr/src,/usr/objをバックアップ。

 # cd /usr
 # tar cfj sakura_kernel.tar.bz2 src obj

前のエントリーで書いていたように、cvsupでソースを取ってきてbuild & installする。

カーネルはGENERICで構わない。さくらの専用サーバのカーネル(/usr/src/sys/i386/conf/DEDIに定義されている)はGENERICからいくつかのドライバを除いて、カーネル変数のデフォルト値を若干変更しただけ。前者は無害だし、後者はsysctlコマンドで制御できそうなもの。

くれぐれもmergemasterは細心の注意を払って実行すること。特に/etc/passwd, /etc/master.passwd, /etc/group, /etc/sshd_configは慎重に。

きれいな体を目指して

祈る気持ちで一旦再起動する。無事再起動してきたら、同じく前のエントリーの要領でcompat5xをインストール。ldconfigを忘れずに行うこと。

続いて5.4のファイルをパージする。だいたい以下のファイルは消してもよいはずだが確約はできない。

 /lib:
 total 3136
 -r--r--r--  1 root  wheel    50024 Feb  2 08:04 libalias.so.4
 -r--r--r--  1 root  wheel    10720 Feb  2 08:04 libatm.so.2
 -r--r--r--  1 root  wheel     8452 Feb  2 08:04 libbegemot.so.1
 -r--r--r--  1 root  wheel   122620 Feb  2 08:04 libbsdxml.so.1
 -r--r--r--  1 root  wheel    50072 Feb  2 08:04 libbsnmp.so.2
 -r--r--r--  1 root  wheel   884716 Feb  2 08:04 libc.so.5
 -r--r--r--  1 root  wheel    55952 Feb  2 08:04 libcam.so.2
 -r--r--r--  1 root  wheel    28644 Feb  2 08:04 libcrypt.so.2
 -r--r--r--  1 root  wheel  1017424 Feb  2 08:05 libcrypto.so.3
 -r--r--r--  1 root  wheel    18548 Feb  2 08:04 libdevstat.so.4
 -r--r--r--  1 root  wheel    79976 Feb  2 08:04 libedit.so.4
 -r--r--r--  1 root  wheel    13148 Feb  2 08:04 libgeom.so.2
 -r--r--r--  1 root  wheel     7708 Feb  2 08:04 libgpib.so.0
 -r--r--r--  1 root  wheel    23208 Feb  2 08:04 libipsec.so.1
 -r--r--r--  1 root  wheel     5764 Feb  2 08:04 libipx.so.2
 -r--r--r--  1 root  wheel     8336 Feb  2 08:04 libkiconv.so.1
 -r--r--r--  1 root  wheel    20228 Feb  2 08:04 libkvm.so.2
 -r--r--r--  1 root  wheel   120004 Feb  2 08:04 libm.so.3
 -r--r--r--  1 root  wheel    38952 Feb  2 08:04 libmd.so.2
 -r--r--r--  1 root  wheel   259916 Feb  2 08:04 libncurses.so.5
 -r--r--r--  1 root  wheel   174652 Feb  2 08:04 libreadline.so.5
 -r--r--r--  1 root  wheel     5544 Feb  2 08:04 libsbuf.so.2
 -r--r--r--  1 root  wheel     9328 Feb  2 08:04 libufs.so.2
 -r--r--r--  1 root  wheel    43100 Feb  2 08:04 libutil.so.4
 -r--r--r--  1 root  wheel    61812 Feb  2 08:04 libz.so.2
 
 /sbin:
 total 880
 -r-x------  1 root  wheel  485892 Feb  2 08:05 init.bak
 -r-xr-xr-x  1 root  wheel  301200 Feb  2 08:05 omshell
 -r-xr-xr-x  1 root  wheel   64796 Feb  2 08:05 vinum
 
 /usr:
 total 8
 drwxr-xr-x  2 root  wheel   512 Feb 16 15:16 bin
 drwxr-xr-x  3 root  wheel  2048 Feb 16 15:22 lib
 drwxr-xr-x  2 root  wheel   512 Feb 16 15:25 libexec
 drwxr-xr-x  2 root  wheel   512 Feb 16 15:17 sbin
 
 /usr/bin:
 total 128
 -r-xr-xr-x  1 root  wheel  130556 Feb  2 08:05 gtar
 
 /usr/lib:
 total 4298
 drwxr-xr-x  2 root  wheel    1536 Feb 16 15:21 compat
 -r--r--r--  1 root  wheel   97312 Feb  2 08:04 libarchive.so.1
 -r--r--r--  1 root  wheel  132788 Feb  2 08:05 libasn1.so.7
 -r--r--r--  1 root  wheel    6596 Feb  2 08:04 libbluetooth.so.1
 -r--r--r--  1 root  wheel   62308 Feb  2 08:04 libbz2.so.1
 -r--r--r--  1 root  wheel  102568 Feb  2 08:04 libc_r.so.5
 -r--r--r--  1 root  wheel    5660 Feb  2 08:04 libcalendar.so.2
 -r--r--r--  1 root  wheel    5544 Feb  2 08:04 libcom_err.so.2
 -r--r--r--  1 root  wheel    7048 Feb  2 08:04 libdevinfo.so.2
 -r--r--r--  1 root  wheel   92592 Feb  2 08:04 libdialog.so.4
 -r--r--r--  1 root  wheel   44288 Feb  2 08:04 libfetch.so.3
 -r--r--r--  1 root  wheel   43012 Feb  2 08:04 libform.so.2
 -r--r--r--  1 root  wheel   18416 Feb  2 08:04 libftpio.so.5
 -r--r--r--  1 root  wheel  113248 Feb  2 08:04 libg2c.so.1
 -r--r--r--  1 root  wheel   32676 Feb  2 08:04 libgnuregex.so.2
 -r--r--r--  1 root  wheel   57452 Feb  2 08:05 libgssapi.so.7
 -r--r--r--  1 root  wheel   45936 Feb  2 08:05 libhdb.so.7
 -r--r--r--  1 root  wheel   24540 Feb  2 08:04 libhistory.so.5
 -r--r--r--  1 root  wheel   27880 Feb  2 08:05 libkadm5clnt.so.7
 -r--r--r--  1 root  wheel   45160 Feb  2 08:05 libkadm5srv.so.7
 -r--r--r--  1 root  wheel   14544 Feb  2 08:05 libkafs5.so.7
 -r--r--r--  1 root  wheel  225860 Feb  2 08:05 libkrb5.so.7
 -r--r--r--  1 root  wheel   52848 Feb  2 08:04 libmagic.so.1
 -r--r--r--  1 root  wheel   23364 Feb  2 08:04 libmenu.so.2
 -r--r--r--  1 root  wheel   39312 Feb  2 08:04 libmilter.so.2
 -r--r--r--  1 root  wheel    9752 Feb  2 08:04 libmp.so.4
 -r--r--r--  1 root  wheel   46060 Feb  2 08:04 libncp.so.1
 -r--r--r--  1 root  wheel   12168 Feb  2 08:04 libnetgraph.so.1
 -r--r--r--  1 root  wheel  348404 Feb  2 08:04 libngatm.so.1
 -r--r--r--  1 root  wheel   33100 Feb  2 08:04 libopie.so.3
 -r--r--r--  1 root  wheel   25800 Feb  2 08:04 libpam.so.2
 -r--r--r--  1 root  wheel   11828 Feb  2 08:04 libpanel.so.2
 -r--r--r--  1 root  wheel  142956 Feb  2 08:04 libpcap.so.3
 -r--r--r--  1 root  wheel  136020 Feb  2 08:04 libpthread.so.1
 -r--r--r--  1 root  wheel   17220 Feb  2 08:04 libradius.so.1
 -r--r--r--  1 root  wheel   53972 Feb  2 08:05 libroken.so.7
 -r--r--r--  1 root  wheel   30756 Feb  2 08:04 librpcsvc.so.2
 -r--r--r--  1 root  wheel   15152 Feb  2 08:04 libsdp.so.1
 -r--r--r--  1 root  wheel   41324 Feb  2 08:04 libsmb.so.1
 -r--r--r--  1 root  wheel  194148 Feb  2 08:05 libssh.so.2
 -r--r--r--  1 root  wheel  188144 Feb  2 08:05 libssl.so.3
 -r--r--r--  1 root  wheel  834584 Feb  2 08:04 libstdc++.so.4
 -r--r--r--  1 root  wheel   15908 Feb  2 08:04 libtacplus.so.1
 -r--r--r--  1 root  wheel  282336 Feb  2 08:04 libthr.so.1
 -r--r--r--  1 root  wheel   19168 Feb  2 08:04 libthread_db.so.1
 -r--r--r--  1 root  wheel    9932 Feb  2 08:04 libugidfw.so.1
 -r--r--r--  1 root  wheel   10524 Feb  2 08:04 libusbhid.so.1
 -r--r--r--  1 root  wheel   26300 Feb  2 08:04 libvgl.so.3
 -r--r--r--  1 root  wheel   26820 Feb  2 08:04 libwrap.so.3
 -r--r--r--  1 root  wheel     738 Feb  2 08:04 libxpg4.a
 lrwxrwxrwx  1 root  wheel      12 Feb 15 08:57 libxpg4.so -> libxpg4.so.3
 -r--r--r--  1 root  wheel    2952 Feb  2 08:04 libxpg4.so.3
 -r--r--r--  1 root  wheel   14968 Feb  2 08:04 libypclnt.so.1
 -r--r--r--  1 root  wheel    4516 Feb  2 08:04 pam_chroot.so.2
 -r--r--r--  1 root  wheel    3548 Feb  2 08:04 pam_deny.so.2
 -r--r--r--  1 root  wheel    4268 Feb  2 08:04 pam_echo.so.2
 -r--r--r--  1 root  wheel    4588 Feb  2 08:04 pam_exec.so.2
 -r--r--r--  1 root  wheel    4632 Feb  2 08:04 pam_ftpusers.so.2
 -r--r--r--  1 root  wheel    4020 Feb  2 08:04 pam_group.so.2
 -r--r--r--  1 root  wheel    4212 Feb  2 08:04 pam_guest.so.2
 -r--r--r--  1 root  wheel   17012 Feb  2 08:04 pam_krb5.so.2
 -r--r--r--  1 root  wheel    7324 Feb  2 08:04 pam_ksu.so.2
 -r--r--r--  1 root  wheel    5616 Feb  2 08:04 pam_lastlog.so.2
 -r--r--r--  1 root  wheel    6756 Feb  2 08:04 pam_login_access.so.2
 -r--r--r--  1 root  wheel    4608 Feb  2 08:04 pam_nologin.so.2
 -r--r--r--  1 root  wheel    4584 Feb  2 08:04 pam_opie.so.2
 -r--r--r--  1 root  wheel    4180 Feb  2 08:04 pam_opieaccess.so.2
 -r--r--r--  1 root  wheel   39764 Feb  2 08:04 pam_passwdqc.so.2
 -r--r--r--  1 root  wheel    3540 Feb  2 08:04 pam_permit.so.2
 -r--r--r--  1 root  wheel    7912 Feb  2 08:04 pam_radius.so.2
 -r--r--r--  1 root  wheel    3784 Feb  2 08:04 pam_rhosts.so.2
 -r--r--r--  1 root  wheel    3588 Feb  2 08:04 pam_rootok.so.2
 -r--r--r--  1 root  wheel    4076 Feb  2 08:04 pam_securetty.so.2
 -r--r--r--  1 root  wheel    3852 Feb  2 08:04 pam_self.so.2
 -r--r--r--  1 root  wheel    9896 Feb  2 08:04 pam_ssh.so.2
 -r--r--r--  1 root  wheel    6984 Feb  2 08:04 pam_tacplus.so.2
 -r--r--r--  1 root  wheel   10464 Feb  2 08:04 pam_unix.so.2
 -r--r--r--  1 root  wheel   23376 Feb  2 08:04 snmp_atm.so.2
 -r--r--r--  1 root  wheel  125212 Feb  2 08:04 snmp_mibII.so.2
 -r--r--r--  1 root  wheel   32044 Feb  2 08:04 snmp_netgraph.so.2
 
 /usr/lib/compat:
 total 7704
 -r--r--r--  1 root  wheel   33756 Feb  2 08:04 libalias.so.3
 -r--r--r--  1 root  wheel  522106 Feb  2 08:04 libc.so.3
 -r--r--r--  1 root  wheel  580636 Feb  2 08:04 libc.so.4
 -r--r--r--  1 root  wheel  600881 Feb  2 08:04 libc_r.so.3
 -r--r--r--  1 root  wheel  679088 Feb  2 08:04 libc_r.so.4
 -r--r--r--  1 root  wheel  880633 Feb  2 08:04 libcrypto.so.1
 -r--r--r--  1 root  wheel  761916 Feb  2 08:04 libcrypto.so.2
 -r--r--r--  1 root  wheel   45940 Feb  2 08:04 libcurses.so.2
 -r--r--r--  1 root  wheel   12104 Feb  2 08:04 libdevstat.so.2
 -r--r--r--  1 root  wheel   87240 Feb  2 08:04 libdialog.so.3
 -r--r--r--  1 root  wheel   68248 Feb  2 08:04 libedit.so.2
 -r--r--r--  1 root  wheel   72040 Feb  2 08:04 libedit.so.3
 -r--r--r--  1 root  wheel   85933 Feb  2 08:04 libf2c.so.2
 -r--r--r--  1 root  wheel   24735 Feb  2 08:04 libfetch.so.1
 -r--r--r--  1 root  wheel   38891 Feb  2 08:04 libfetch.so.2
 -r--r--r--  1 root  wheel   15042 Feb  2 08:04 libftpio.so.4
 -r--r--r--  1 root  wheel  301714 Feb  2 08:04 libg++.so.4
 -r--r--r--  1 root  wheel   95252 Feb  2 08:04 libgmp.so.3
 -r--r--r--  1 root  wheel   20351 Feb  2 08:04 libhistory.so.3
 -r--r--r--  1 root  wheel   19452 Feb  2 08:04 libhistory.so.4
 -r--r--r--  1 root  wheel  117024 Feb  2 08:04 libm.so.2
 -r--r--r--  1 root  wheel   39396 Feb  2 08:04 libmp.so.3
 -r--r--r--  1 root  wheel   84061 Feb  2 08:04 libmytinfo.so.2
 -r--r--r--  1 root  wheel   70035 Feb  2 08:04 libncurses.so.3
 -r--r--r--  1 root  wheel   33180 Feb  2 08:04 libopie.so.2
 -r--r--r--  1 root  wheel   38432 Feb  2 08:04 libpam.so.1
 -r--r--r--  1 root  wheel  108732 Feb  2 08:04 libpcap.so.2
 -r--r--r--  1 root  wheel  614824 Feb  2 08:04 libperl.so.3
 -r--r--r--  1 root  wheel   10812 Feb  2 08:04 libposix1e.so.2
 -r--r--r--  1 root  wheel  154556 Feb  2 08:04 libreadline.so.3
 -r--r--r--  1 root  wheel  146856 Feb  2 08:04 libreadline.so.4
 -r--r--r--  1 root  wheel   24252 Feb  2 08:04 libskey.so.2
 -r--r--r--  1 root  wheel   16552 Feb  2 08:04 libss.so.2
 -r--r--r--  1 root  wheel  204173 Feb  2 08:04 libssl.so.1
 -r--r--r--  1 root  wheel  180744 Feb  2 08:04 libssl.so.2
 -r--r--r--  1 root  wheel  275322 Feb  2 08:04 libstdc++.so.2
 -r--r--r--  1 root  wheel  282448 Feb  2 08:04 libstdc++.so.3
 -r--r--r--  1 root  wheel   15084 Feb  2 08:04 libtermcap.so.2
 -r--r--r--  1 root  wheel    8880 Feb  2 08:04 libusb.so.0
 -r--r--r--  1 root  wheel    9780 Feb  2 08:04 libusbhid.so.0
 -r--r--r--  1 root  wheel   32071 Feb  2 08:04 libutil.so.2
 -r--r--r--  1 root  wheel   32728 Feb  2 08:04 libutil.so.3
 -r--r--r--  1 root  wheel   21445 Feb  2 08:04 libvgl.so.1
 -r--r--r--  1 root  wheel   23836 Feb  2 08:04 libvgl.so.2
 -r--r--r--  1 root  wheel   24660 Feb  2 08:04 libwrap.so.2
 -r--r--r--  1 root  wheel   11398 Feb  2 08:04 libxpg4.so.2
 -r--r--r--  1 root  wheel    3120 Feb  2 08:04 pam_cleartext_pass_ok.so
 -r--r--r--  1 root  wheel    2996 Feb  2 08:04 pam_deny.so
 -r--r--r--  1 root  wheel    4976 Feb  2 08:04 pam_opie.so
 -r--r--r--  1 root  wheel    4068 Feb  2 08:04 pam_opieaccess.so
 -r--r--r--  1 root  wheel    3348 Feb  2 08:04 pam_permit.so
 -r--r--r--  1 root  wheel    7620 Feb  2 08:04 pam_radius.so
 -r--r--r--  1 root  wheel    4240 Feb  2 08:04 pam_skey.so
 -r--r--r--  1 root  wheel   10176 Feb  2 08:04 pam_ssh.so
 -r--r--r--  1 root  wheel    8544 Feb  2 08:04 pam_tacplus.so
 -r--r--r--  1 root  wheel    4952 Feb  2 08:04 pam_unix.so
 
 /usr/libexec:
 total 18
 -r-xr-xr-x  1 root  wheel  7200 Feb  2 08:04 getNAME
 -r-xr-xr-x  1 root  wheel  9048 Feb  2 08:04 rexecd
 
 /usr/sbin:
 total 510
 -r-xr-xr-x  1 root  wheel  119768 Feb  2 08:06 ipftest
 -r-xr-xr-x  1 root  wheel   23904 Feb  2 08:06 ipresend
 -r-xr-xr-x  1 root  wheel   55952 Feb  2 08:06 ipsend
 -r-xr-xr-x  1 root  wheel   32024 Feb  2 08:06 iptest
 -r-xr-xr-x  1 root  wheel  218104 Feb  2 08:06 pccardd
 -r-xr-xr-x  1 root  wheel   39660 Feb  2 08:06 vttest

もともと入っていたportsをcompat5x-i386-5.4.0.8_5とlocaledata-5.4を除いて全削除する。

 # pkg_info > /root/pkg_info.lst (一応何が入っていたかくらいは記録)
 # pkg_info -a > /root/pkg_info_a.lst (同上)
 # pkg_deinstall ...

あーさっぱりしたー。

Portsをがっつりインストール

上記の作業に時間をかけている間にもportsが更新されている可能性があるので、「portsnap fetch; portsnap update」した方がよいかもしれない。

まずportupgradeをインストールし、そのportupgradeを使ってportupgradeを再インストール。続いてportinstallでportsをがっつりインストールしていく。

 # pkg_add -r portupgrade
 # portupgrade -a (portupgradeとportupgradeで使うrubyなどを最新にする)
 # portinstall -P ImageMagick subversion-perl ...

ImageMagickとかsubversion-perlとかp5-SVN-Webとかp5-XML-Atomとかphp5-extensionsのように依存しているportsが多いやつからインストールすると楽できる。mysql-server (4.1.18)だけはportinstall -Pで失敗したので/usr/ports/databases/mysql41-serverでmake installした。

インストールだけでどっと疲れたのでmysqlの起動だけ設定して気分を盛り上げておく。まず、/etc/rc.confに以下の設定を加える。

mysql_enable="YES"
mysql_args="--skip-character-set-client-handshake"
    (このオプションを付けると自動的な文字コードの変換が行われない)

次にmysqldを起動して、rootユーザのパスワードを設定しておく。

 # /usr/local/etc/mysql-server.sh start
 # mysqladmin -u root password new_password
 # mysqladmin -u root -h 59.106.XX.XX password new_password
 # mysqladmin reload -p

とりあえずインストールを終えたports。今日はこのへんにしといたるわ。

ImageMagick-6.2.5.5_1
apache-1.3.34_4
apr-db4-1.2.2_2
autoconf-2.59_2
automake-1.9.6
compat5x-i386-5.4.0.8_5
db42-4.2.52_4
expat-2.0.0
fcgi-devkit-2.4.0
fontconfig-2.3.2_2,1
freetype2-2.1.10_2
gettext-0.14.5_1
ghostscript-gnu-7.07_14
gmake-3.80_2
gsfonts-8.11_2
help2man-1.36.3
imake-6.9.0
jasper-1.701.0
jbigkit-1.6
jpeg-6b_3
lcms-1.14,1
ldconfig_compat-1.0_5
lha-1.14i_6
libdrm-2.0
libfpx-1.2.0.12
libiconv-1.9.2_1
libltdl-1.5.22
libtool-1.5.22_1
libxml2-2.6.23
lighttpd-1.4.10
localedata-5.4
m4-1.4.4
mod_fastcgi-2.4.2_1
mpeg2codec-1.2_1
mysql-client-4.1.18_1
mysql-server-4.1.18
neon-0.25.4_1
p5-Algorithm-Diff-1.1901
p5-AppConfig-1.56
p5-Archive-Tar-1.28
p5-Authen-SASL-2.09
p5-CGI-Cache-1.40_1
p5-Cache-Cache-1.04_1
p5-Class-Data-Inheritable-0.04
p5-Class-Factory-Util-1.6
p5-Class-Singleton-1.03
p5-Compress-Zlib-1.41
p5-DBD-SQLite-1.11_1
p5-DBI-1.50
p5-DateTime-0.30
p5-DateTime-Locale-0.22
p5-DateTime-TimeZone-0.40
p5-Devel-StackTrace-1.12
p5-Digest-1.14
p5-Digest-HMAC-1.01
p5-Digest-MD5-2.36
p5-Digest-SHA1-2.11
p5-Email-Find-0.09_1
p5-Email-Valid-0.15
p5-Error-0.15
p5-Exception-Class-1.23
p5-ExtUtils-CBuilder-0.15
p5-ExtUtils-ParseXS-2.15
p5-FastCGI-0.67
p5-File-Cache-0.16
p5-File-Temp-0.16_3
p5-HTML-Parser-3.49_2
p5-HTML-Tagset-3.10
p5-HTTP-Server-Simple-0.18
p5-I18N-LangTags-0.35
p5-IO-String-1.08
p5-IO-Zlib-1.04_1
p5-IPC-ShareLite-0.09
p5-LWP-Authen-Wsse-0.05
p5-Locale-Maketext-1.09
p5-Locale-Maketext-Lexicon-0.49_1
p5-Locale-Maketext-Simple-0.12
p5-MIME-Base64-3.07
p5-Mail-Tools-1.73
p5-Module-Build-0.26.11_1
p5-Net-1.19,1
p5-Net-DNS-0.55
p5-Net-IP-1.24
p5-Number-Format-1.45
p5-Params-Validate-0.78
p5-PathTools-3.16
p5-Pod-Parser-1.34
p5-Regexp-Common-2.120
p5-SVN-Web-0.43
p5-Scalar-List-Utils-1.18,1
p5-Spiffy-0.30
p5-Storable-2.15
p5-Template-Plugin-Clickable-0.05
p5-Template-Plugin-Clickable-Email-0.01
p5-Template-Plugin-Number-Format-1.01
p5-Template-Plugin-Subst-0.02
p5-Template-Toolkit-2.14_2
p5-Test-Base-0.50
p5-Test-Harness-2.56
p5-Test-Simple-0.62
p5-Text-Diff-0.35
p5-Text-Diff-HTML-0.04
p5-Time-Local-1.11
p5-UNIVERSAL-require-0.10
p5-URI-1.35
p5-URI-Find-0.16
p5-XML-Atom-0.16
p5-XML-LibXML-1.58_1
p5-XML-LibXML-Common-0.13
p5-XML-NamespaceSupport-1.09_1
p5-XML-Parser-2.34_2
p5-XML-RSS-1.05_1
p5-XML-SAX-0.13
p5-YAML-0.57
p5-gettext-1.05_1
p5-libwww-5.805
pcre-6.6
perl-5.8.7_2
php5-5.1.2_1
php5-ctype-5.1.2_1
php5-dom-5.1.2_1
php5-extensions-1.0
php5-gd-5.1.2_1
php5-iconv-5.1.2_1
php5-mbstring-5.1.2_1
php5-mysql-5.1.2_1
php5-pcre-5.1.2_1
php5-posix-5.1.2_1
php5-session-5.1.2_1
php5-simplexml-5.1.2_1
php5-sqlite-5.1.2_1
php5-tokenizer-5.1.2_1
php5-xml-5.1.2_1
pkgconfig-0.20
png-1.2.8_3
portupgrade-2.0.1_1,1
python-2.4.2
rsync-2.6.6
ruby-1.8.4_4,1
ruby18-bdb1-0.2.2
sqlite-3.3.4
subversion-perl-1.3.0_3
t1lib-5.1.0,1
tcl-8.4.11,1
tiff-3.8.0
unzip-5.52_2
wget-1.10.2
xorg-libraries-6.9.0
zip-2.31

2006-02-18追記:

不足しているportsを大慌てで追加。これくらいやっておけば大概のことは事が足りるだろう。以下は追加分。jdk-1.4.2p8が入っているあたりがミソ(笑)。

cvsup-without-gui-16.1h_2
gd-2.0.33_4,1
httplog-2.1_1
hyperestraier-1.1.2_1
ja-nkf-2.05
ja-p5-Jcode-2.03
javavmwrapper-2.0_6
jdk-1.4.2p8_3
libchk-1.9
nspr-4.6.1
open-motif-2.2.3_2
p5-Class-Accessor-0.22
p5-Class-ErrorHandler-0.01
p5-Convert-ASN1-0.19
p5-Convert-BinHex-1.119
p5-Convert-PEM-0.07_1
p5-Crypt-CBC-2.15
p5-Crypt-DES-2.05
p5-Crypt-DES_EDE3-0.01_1
p5-Crypt-DSA-0.13_2
p5-Crypt-SSLeay-0.51
p5-DBD-mysql-3.0002
p5-Data-Buffer-0.04
p5-Exporter-Lite-0.01
p5-Feed-Find-0.06
p5-Flickr-API-0.07
p5-HTML-Template-2.8
p5-IO-Socket-SSL-0.97
p5-IO-stringy-2.110
p5-Image-Size-2.992
p5-JSON-1.03
p5-MIME-Lite-3.01
p5-MIME-Tools-5.419,2
p5-Math-BigInt-1.77
p5-Module-Pluggable-2.97
p5-Module-Pluggable-Ordered-1.4
p5-Net-SSLeay-1.30_1
p5-SOAP-Lite-0.60a
p5-UNIVERSAL-exports-0.03
p5-URI-Fetch-0.04
p5-WebService-Bloglines-0.09_1
p5-XML-LibXML-XPathContext-0.07
p5-XML-Parser-Lite-Tree-0.03
p5-XML-RSS-LibXML-0.15
p5-XML-Simple-2.14
p5-XML-XPath-1.13
qdbm-1.8.45
urwfonts-1.0

Feb 13, 2006

さくらの専用サーバ環境のための準備運動

まださくらの専用サーバが使える状態になっていないので、VMware Workstation 5.5の上に環境を構築して準備運動をすることにする。

FreeBSD 5.4から6.0へのアップグレード

さくらの環境はFreeBSD 5.4 Releaseなので、いずれは6.0-STABLE系に移行したい。まず、その練習。

まず、cvsupをインストールする。portsからbuildしてもよいがちょっと使うだけなのでpackageからインストールすれば十分。

# pkg_add -r cvsup-without-gui
# rehash

次にcvsup用のsupfileを用意する。

 *default host=cvsup3.jp.FreeBSD.org
 *default base=/var/db
 *default prefix=/usr
 *default release=cvs tag=RELENG_6_0
 *default delete use-rel-suffix
 *default compress
 
 src-all

6.0-STABLE用なのでRELENG_6_0。cvsup用のサーバはネットワーク的にcvs3.jp.FreeBSD.orgが近いはず(さくらの専用サーバは新宿のデータセンターに収容されているらしい)。

用意したsupfileを使ってcvsupを実行する。

# cvsup -L 2 -g supfile

/usr/objが空でなければ念のためクリア。

# cd /usr/obj
# chflags -R noschg *
# rm -rf *

いよいよbuild & installする。非常に時間がかかる。

# make -j4 buildworld
# make buildkernel
# make installkernel
# make installworld

make installworldしても/etcの下は以前のままの状態になっているので、mergemasterを使ってアップデートしてやる必要がある。

# cd /
# tar cf /etc.tar etc (バックアップしておく)
# mergemaster -siva (現在/etcにないファイルだけコピー)
# mergemaster -sivr (変更のあるファイルを反映→かなり面倒)

それが済んだらrebootする。

# reboot

無事にrebootしてきたらok。

compat5xをインストール

5.4用にビルドされたバイナリを6.0上で正常に動作させるためにはcompat5xライブラリのインストールが必要になる。例えば、冒頭でpackageからインストールしたcvsupは5.4用のバイナリなので、compat5xライブラリを使って実行しないと正常に機能しない、ということが起き得る。

portsを更新してから、compat5xライブラリをインストールする。前のエントリーでインストールしておいたcvsupを使ってやってもよいが、6.0では標準でインストールされているportsnapを使った方が楽だし、速い。

# portsnap fetch
# portsnap extract
# cd /usr/ports/misc/compat5x
# make; make install
# make clean

compat5xライブラリが使えるようにldconfigを実行しておく。

# /sbin/ldconfig -m /usr/local/lib/compat

/etc/rc.confに以下の行を追加しておくと、起動時に毎回ldconfigしてくれるようになるので設定しておくとよい。

compat5x_enable="YES"

/lib、/usr/libの中の古いファイルは削除するかバックアップディレクトリに移動しておく。例えば以下を実行すると、/libの下の/boot/kernel/kernelより古いファイルでディレクトリではないものを/lib/backup以下に移動する。

# mkdir /lib/backup
# mv `find /lib -not \( -newer /boot/kernel/kernel -or -type d \) -print` /lib/backup

作業後、古いバイナリに対して/usr/local/lib/compat以下のダイナミックライブラリが使われていれば問題ない。

# ldd /usr/local/bin/cvsup
/usr/local/bin/cvsup:
        libz.so.2 =< /usr/local/lib/compat/libz.so.2 (0x28109000)
        libutil.so.4 =< /usr/local/lib/compat/libutil.so.4 (0x28119000)
        libmd.so.2 =< /usr/local/lib/compat/libmd.so.2 (0x28125000)
        libm.so.3 =< /usr/local/lib/compat/libm.so.3 (0x2812f000)
        libc.so.5 =< /usr/local/lib/compat/libc.so.5 (0x2814a000)

ついでなので、すでにportsからインストール済みのソフトウェアで5.4用のものがないか確認して、6.0用に入れなおしておくとよい。

# pkg_info
compat5x-i386-5.4.0.8_5 A convenience package to install the compat5x libraries
cvsup-without-gui-16.1h_2 General network file distribution system optimized for CVS
localedata-5.4      Legacy locale data for FreeBSD 6+
perl-5.6.2_2        Practical Extraction and Report Language

てな感じで表示されるパッケージのうち、compat5x-i386-5.4.0.8_5とlocaledata-5.4以外のものは5.4用のもののはずである。その証拠に例えば、ldd /usr/local/bin/perl5.6.2とかやるとcompatライブラリを使っていることが分かる。

# ldd /usr/local/bin/perl5.6.2
/usr/local/bin/perl5.6.2:
        libperl.so => /usr/local/lib/perl5/5.6.2/mach/CORE/libperl.so (0x28076000)
        libm.so.3 => /usr/local/lib/compat/libm.so.3 (0x28140000)
        libc.so.5 => /usr/local/lib/compat/libc.so.5 (0x2815b000)
        libcrypt.so.2 => /usr/local/lib/compat/libcrypt.so.2 (0x28235000)
        libutil.so.4 => /usr/local/lib/compat/libutil.so.4 (0x2824d000)

ひとまず削除してから、packagesからインストールし直す(portupgradeもあると便利なのでついでにインストールする)。

# pkg_delete perl-5.6.2_2 cvsup-without-gui-16.1h_2
# pkd_add -r perl cvsup-without-gui portupgrade

packagesじゃなくて最新のportsからbuildしてインストールしたい場合には追加で以下を実行すればよい。

# rehash
# portupgrade -a -P

Feb 9, 2006

VPS7難民

現在借りているVPS7(Ogawa::Buzz: サーバーを移転した件について。)が理由は定かではありませんが、2月末で突如サービス停止することになりました。一年ほど使ってきて、サービス品質、価格とも満足していただけに非常に残念です。

早々に代替のサーバを見つけなければならないのですが、数あるレンタルサーバ業者の膨大なサービスの中からVPS7に匹敵するような条件のサービスを見つけるのは至難の業です。いたずらに労力と時間を浪費してしまっています。たいがい疲れてきたので、もうSakura Internetの専用サーバ(SAKURA Internet : 専用サーバ 概要)あたりでいいんじゃないかと思っています。金で済ませられるのならそれでいいんじゃないか、と。

私にとってレンタルサーバの主たるメトリックはCPU性能でもネットワーク性能でもディスク容量でもなくて、メモリ容量なのです。CPUが遅くてできないことはそんなにありませんが、メモリが少なくてできないことはたくさんありますから。前述のSakura Internetの専用サーバの512MBメモリに匹敵するVPSを探そうとすると、unixshell#(unixshell# :: Virtual Servers, Virtual Private Servers)でも月59.99USD(7000JPY強)ですから、それならば最初から専用サーバを借りておけばよいわけです。もう少しコストを抑えたいところですが。

ところでVPS7の事業シーズはどこか引き継げないものでしょうか。例えば、下位のISPや中堅以下のiDCで、full-managedサービスに人員を割けないところ。ニッチマーケットなのは重々承知しているのですが。

2006-02-25追記:

X Dayが近づくVPS7だが、20日くらいからまったくアクセスできない。admin宛てにメールを送ってもエラーになる。大抵のデータはサルベージ済みだからいいようなものの、消したいデータもあったわけなのだが…。

最後の最後でムカついている次第。

Apr 1, 2005

VPS7で微妙に苦労している件について。

VPS7.netは、Hop Countが17くらいあるだとか、RTTが136msecくらいかかるだとか、そういう問題はさておくとなかなか快適です。忙しい合間にちょこちょこと手を入れているのですが、FreeBSDの上手な人と違って結構嵌りますね。

とりあえずやったことのあらましを書いておきます(例によってほんの一握りの人にしか訴求しません)。

  1. Movable Type 3.151-jaが動くようにいくつかのパッケージをpkg_add -rでちきちき追加。mt-check.cgiの出力とFreeBSD Ports Changesを見比べながらやるだけなので簡単でした。
  2. httpd.confの設定をいつもやっているように変更。AWStatsなども入れてみました。
  3. subversionをインストール。いつも使っているノートPC上のFedora Core 3 on VMwareで動かしていたsvnリポジトリをようやくリモートに移動しました。svnserveも起動するように設定し、手元のPCからはTortoiseSVNで快適編集生活になりました。
  4. cvsupとportupgradeで修行。古くなっているパッケージがいくつかあるのでportupgrade -anOで「+」が付いてしまうパッケージをポチポチ入れ替えてみました。「-O」(--omit-check)オプションを与えないとportupgradeが実行できないのがとても気になります。
  5. --omit-checkしなくて済むように特訓。なぜ--omit-checkが必要になってしまうかというと、私の借りているjail(5.4-PRERELEASE)では最初からapache-1.3.33_1ではなくてapache+mod_ssl-1.3.33+2.8.22が入っているためです。どうでもいいじゃんという感じですが、ここで諦めるとSVN::Webを入れたいと思った時にp5-SVN-Web→subversion-perl→swig→apache-1.3.33_1と依存関係のリンクが続き、apache-1.3.33_1がないやんけと怒られるという肩身の狭い思いをすることになります。mod_perlもそうなります。しょうがないのでえいやっと元のパッケージを消し、新しいのを入れ、そうするとmod_php4が動かなくなるので入れ直し、それに併せてhttpd.confも小修正したりして無事矛盾解消しました。少々骨が折れました。vps7のデフォルト設定は一考の余地がありますね。

あとは普通にmod_perlやSVN::Webを入れたり、cronでcvsup & portupdate -aしたりできます(後者は嘘です)。

Mar 24, 2005

サーバーを移転した件について。

思うところあってLolipopを使い続けるのを断念して、VPS(Virtual Private Server)に移行しました。ある程度スキルのある人でないと管理者さんに徒に労力をかけるだけになってしまうでしょうから、ここではあえて移転先は書きませんが(と思ったらリンクされていたみたいなので書いておきます、VPS7です)、tracerouteしてみるととんでもないところにあるのが分かります。今のところ価格・性能・サポートともに非常に満足しています。何せ昨日夕方思い立って申し込んで、そして今ちゃんと動いてしまっているわけですから。

さて、VPSにしろFull-managed Hostingにしろ専用サーバーにしろ自宅サーバーにしろ、ネットワーク(遅延・バンド幅)、CPU、メモリーなどといった資源をどのようなバランスでどれくらいのコストを支払って貸借するか、という問題に収斂します。すべてを求めるなら自宅サーバーが現在対費用性能上ベストで、私の場合には住環境上その選択ができません。Lolipopなどはネットワーク遅延においてのみ優れたソリューションでそれ以外の要求を極小化することによってコスト低減を図っており、これが私のニーズにはミートしません。

一般的に言って、Webアプリケーションの高度化は資源への要求を増大させ続けているため、低価格のホスティングサービスはそうしたニーズに決して応えることはありません。代わりにディスク容量の大容量化などの本質的でないサービスに向かいつつある現状を考えると、これらのサービスが美味しかった(大多数のユーザーがCPU・メモリー資源をほとんど使わなかったため、たまたま使いたいユーザーにとっては資源に余裕があった)時期は過ぎてピークオフが近づいているのでしょう。要は既存のISPやポータルサイトの提供してきたホームページ作成サービスがあまりにpoorだったため、そのパイを奪うことができた、という現象が観測されただけなのかもしれません。ISPなどにとってこうした事業はそもそも不採算であってパイを奪われることによるデメリットもほとんどなかったでしょうし、そういうサービスに移行するだけのmobilityとliteracyを備えた層は他のサービスへの移行も早いことは十分に予想できます。

一方で専用サーバーはどうかというとコストが問題です。集約的なDCのフェアなネットワーク性能がFTTHに劣るという現状ではむしろDCの実現する付加価値がコストに見合うかどうかだけが問題です。信頼性は確かにあるのでしょうが、ウイルスチェックをすると月何万円増しだの、毎日バックアップを取ると月何万円増しだの、と言った割高な料金体系が個人やSOHOの財布を開かせることはありません。彼らにとって自宅サーバーの方が圧倒的に望ましい解なのです。

VPSはDCがもともと持っていた信頼性と、低コストを両立させる一つの解でしょう。正直VPS7の料金は驚きですが。個人的には、jailやUMLを用いたこうしたサービスの基盤となる技術のpoorさに不満を感じないではありません。もっとフェアにリソーススケジューリングすべきだし、ハイヴを簡単にバックアップしたり移動したりする容易さも必要です。管理者コストにしても単体サーバーを管理するだけでなく、そこで動作する複数のVPSハイヴを管理する必要があります。ただ、現状のオープンソースソフトウェアだけで十分にビジネスに足るサービスを提供できているのも事実で、この方向性に未来があるのだろうなというのが今のところの私の印象です。

少し未来を考えると、IntelのVanderpool Technologies(Intel® Virtualization Technology - Intel Corporation)に代表される仮想化技術が一般化すると予想されます。ハードウェアサポートによってVPSがより一般的になり、そして今のVPSより自由度も効率も高いVPSが登場することは想像に難くありません。今から心待ちにしています。

閑話休題。

それにしてもFreeBSD環境は本当に久し振りなのです。以前使っていた頃はportsとか全然信用ならないので、後から追加するソフトウェアは必ず自分の手でインストールしていました。そのことを思うと、今はpkg_add -rでほとんどすべて事足りてしまってかなり拍子抜けです。

さらに昔、大学の共用のフロッピードライブ付きSun 4を使って、最新のXやらgccのソースアーカイブをtarで固め、それを1.44MBフロッピーにddでぎりぎり書き込み可能なサイズに分割し、ddでフロッピーに書き込み、そいつを家に持って帰ってFreeBSDマシンを使ってddで読み出し、tarに戻してそれを展開、それをスワップさせまくりながらコンパイル、とか信じられない手間をかけていたのでした。あの埃とトナーに塗れた計算機室が少し懐かしいです。

昔話はさておき、いまだにDNSの更新が遅延しているところ(例えば私の自宅)もあるようです。したがって、FeedBurnerのフィードは更新されているように見えるのに私のブログにアクセスしてみると(依然Lolipopのサーバーが見えるため)更新されていない、という愉快な現象が観測されるはずです。この記事をWebブラウザで無事に目にされているのであればその環境には問題はないということです。