server/maintenance/2009/01/31

サーバー / メンテナンス / 2009 / 01 /31

基本的に、こちらを参考にさせていただきました。 大変ありがとうございます。

あと、これとこれ。

OS アップデート !

# 開始。
$ script ~/5.4-6.4.upgrade.log ;

# 6.4 用のソースを持ってくる。( src-all で)
$ less /usr/local/etc/6.4-supfile ;
*default host=cvsup2.jp.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_6_4
*default delete use-rel-suffix
*default compress
src-all
/usr/local/etc/6.4-supfile (END)
$ cvsup -L 2 -g /usr/local/etc/6.4-supfile ;

# /usr/src/UPDATING を読む。
# /etc/make.conf も読む。
# may need: pw groupadd audit -g 77 ;

# make !
$ cd /usr/src/ ;
$ make -j4 buildworld ;
$ make buildkernel ;
$ make installkernel ;
$ make installworld ;

# mergemaster で、 /etc/ 以下を調整。今回は、新しいほうを優先させる方針でズンズン行った。
$ mergemaster -s -v ;

*** Comparison complete
*** Saving mtree database for future upgrades

*** Files that remain for you to merge by hand:
/var/tmp/temproot/etc/rc
/var/tmp/temproot/.cshrc
/var/tmp/temproot/.profile

# ↑ これらは、手動で対応した。

# telnet 開放。(ssh トラブルに備え)
$ emacs /etc/inetd.conf ;
$ emacs /etc/rc.conf ;

##########
# ! GO ! #
##########
$ /sbin/shutdown -r now ;

1分ほどで、無事再起動完了。ssh でログイン。

# telnet 閉鎖。
$ emacs /etc/inetd.conf ;
$ emacs /etc/rc.conf ;
$ kill -HUP `cat /var/run/inetd.pid` ;

# rc again. (念のため)
$ /sbin/shutdown -r now ;

ports アップデート !!

# ports を更新する。
$ emacs /usr/local/etc/ports-supfile ;
$ cvsup -g /usr/local/etc/ports-supfile ;
$ pkgdb -F ;
$ portsdb --update --updateindex ;
$ portversion --verbose;
$ script ~/portupgrade_20090131.log ;
$ portupgrade --interactive --all --recursive ;

CPAN アップデート !!!

ports で perl を 5.8.9 にアップデートをしたので、 lib/perl5/5.8.9/ に、自分が必要とするモジュールを入れなおす。

実は、 ports で perl のアップデートをすると、 use.perl なるスクリプト(/usr/ports/lang/perl5.8/files/use.perl にある)で、 make.conf の PERL_VERSION などが書き換わるらしい。

CPAN のアップデートに進む前に、 shutdown -r ; などして、 PERL_VERSION の変更を明示的に有効にしたほうが良かったかもしれない。

$ cpan ;
> install Module::Install
> install Bundle::CPAN
> install Bundle::LWP
> install DBI
> install DBD:Pg

ここで問題発生、install DBD:Pg が通らない。曰く、

Test Summary Report
-------------------
t/basic             (Wstat: 1024 Tests: 85 Failed: 4)
  Failed tests:  30, 39, 48, 59
  Non-zero exit status: 4
t/INSTALL_BASE      (Wstat: 256 Tests: 21 Failed: 1)
  Failed test:  7
  Non-zero exit status: 1
Files=48, Tests=675, 29 wallclock secs ( 0.48 usr  0.17 sys + 22.08 cusr  4.96 csys = 27.70 CPU)
Result: FAIL
Failed 2/48 test programs. 5/675 subtests failed.
*** Error code 255

Stop in /root/.cpan/build/ExtUtils-MakeMaker-6.48-Yr8Fi4.
  MSCHWERN/ExtUtils-MakeMaker-6.48.tar.gz
  /usr/bin/make test -- NOT OK
//hint// to see the cpan-testers results for installing this module, try:
  reports MSCHWERN/ExtUtils-MakeMaker-6.48.tar.gz
Running make install
  make test had returned bad status, won't install without force
Failed during this command:
 MSCHWERN/ExtUtils-MakeMaker-6.48.tar.gz      : make_test NO

http://cpantesters.perl.org/show/ExtUtils-MakeMaker.html

↑この tester の状況から、 ExtUtils::MakeMaker-6.48 が buggy なのであって、 DBD::Pg の問題ではないと仮定して、
とにかく強制インストールすることにした。

# Use the Force. -- Yoda
> force install DBD:Pg

インストールされた DBD:Pg を使ってみるとエラー。

/libexec/ld-elf.so.1: /usr/local/lib/perl5/site_perl/5.8.9/mach/auto/DBD/Pg/Pg.so: Undefined symbol "PQserverVersion"

/usr/local/lib/libpq.so (古いバージョン?) があって、これが参照されてしまっているらしい。

$ locate libpq.so
/usr/local/lib/libpq.so
/usr/local/lib/libpq.so.3
/usr/local/pgsql/lib/libpq.so
/usr/local/pgsql/lib/libpq.so.4
/usr/local/src/postgresql-8.1.2/src/interfaces/libpq/libpq.so
/usr/local/src/postgresql-8.1.2/src/interfaces/libpq/libpq.so.4

とりあえず避けて、問題が解消されることを確認。

$ cd /usr/local/lib/ ;
$ rm libpq.so ;
$ ln -s /usr/local/pgsql/lib/libpq.so ./libpq.so ;

その後、さらに、

http://www.xdelta.net/blog/FreeBSD/2006/01/13/p127

↑…との情報を得て、以下を実行し、解決。

$ echo '/usr/local/pgsql/lib' > /usr/local/libdata/ldconfig/pgsql ;

その他、調整

locale の設定がうまくいってない?

  • svn st 曰く、
    svn: warning: cannot set LC_CTYPE locale
    svn: warning: environment variable LC_ALL is ja_JP.UTF-8
    svn: warning: please check that your locale name is correct
    
  • tracd 曰く、
    ----------------------------------------
    Exception happened during processing of request from ('219.7.248.5', 3311)
    Traceback (most recent call last):
      File "/usr/local/lib/python2.5/SocketServer.py", line 464, in process_request_thread
        self.finish_request(request, client_address)
      File "/usr/local/lib/python2.5/SocketServer.py", line 254, in finish_request
        self.RequestHandlerClass(request, client_address, self)
      File "/usr/local/lib/python2.5/SocketServer.py", line 522, in __init__
        self.handle()
      File "/usr/local/lib/python2.5/BaseHTTPServer.py", line 316, in handle
        self.handle_one_request()
      File "/usr/local/lib/python2.5/site-packages/Trac-0.11.2-py2.5.egg/trac/web/wsgi.py", line 175, in handle_one_request
        gateway.run(self.server.application)
      File "/usr/local/lib/python2.5/site-packages/Trac-0.11.2-py2.5.egg/trac/web/wsgi.py", line 87, in run
        response = application(self.environ, self._start_response)
      File "/usr/local/lib/python2.5/site-packages/Trac-0.11.2-py2.5.egg/trac/web/standalone.py", line 57, in __call__
        return self.application(environ, start_response)
      File "/usr/local/lib/python2.5/site-packages/Trac-0.11.2-py2.5.egg/trac/web/standalone.py", line 89, in __call__
        return self.application(environ, start_response)
      File "/usr/local/lib/python2.5/site-packages/Trac-0.11.2-py2.5.egg/trac/web/main.py", line 345, in dispatch_request
        locale.setlocale(locale.LC_ALL, environ['trac.locale'])
      File "/usr/local/lib/python2.5/locale.py", line 478, in setlocale
        return _setlocale(category, locale)
    Error: unsupported locale setting
    ----------------------------------------
    
  • /usr/local/awstats/tools/awstats_updateall.pl 曰く、
    perl: warning: Setting locale failed.
    perl: warning: Please check that your locale settings:
        LC_ALL = "ja_JP.UTF-8",
        LANG = "ja_JP.eucJP"
        are supported and installed on your system.
    perl: warning: Falling back to the standard locale ("C").
    

調べると、ロケールファイルの書式の変更されたらしい。 http://blog.yoshitomo.org/archives/250

perl, python, subversion を再コンパイルして解決した。 同様の問題に気づいたら、同様の対応をすれば良い。

portupgrade --interactive --all ; では全部はアップグレードされない?

portupgrade --interactive --all ; したのに、アップグレードされていないものが結構あった。

なので、(必要なものだけ)個別にアップグレードした。

  • shells/bash (bash-3.2.39_1)
  • japanese/chasen (ja-chasen-2.3.3)
  • japanese/chasen-base (ja-chasen-base-2.3.3_3)
  • www/trac (trac-0.11.2)
  • ftp/curl (curl-7.18.0)
  • databases/sqlite3 (sqlite3-3.6.4)
  • devel/subversion (subversion-1.5.4_2)
  • devel/py-subversion (py-subversion-1.5.4_2)
  • devel/py-pytz (py25-pytz-2008i)
  • devel/apr (apr-db42-1.3.3.1.3.4)
  • textproc/libxml2 (libxml2-2.6.32_2)

後始末

$ portsclean --workclean ;
$ portsclean --distclean --distclean ; # 2回指定。

$ cd /usr/src/ ;
$ make check-old ;
$ make delete-old ;

# make delete-old-libs は怖いのでやらない。

$ cd /usr/obj/ ;
$ chflags -R noschg * ;
$ rm -rf * ;

怖いのでやらなかった、 make delete-old-libs ; の代わりに、

$ portsclean --libclean --noexecute ;

をやってみたが、

** /usr/local/lib/libgdbm.so.3 is shadowed by /usr/X11R6/lib/libgdbm.so.3
    /usr/X11R6/lib/libgdbm.so.3 <- gdbm-1.8.3_3
    /usr/local/lib/libgdbm.so.3 <- gdbm-1.8.3_3
 --> Two packages install the same library in different directories!

# ...

Two packages install the same library in different directories のみだった。

ついでに、distfiles (potrs によってダウンロードされたソースの置き場)を移動した。

$ cd /usr/ports/ ;
$ mv distfiles /tmp/distfiles  ;
$ ln -s /tmp/distfiles ./distfiles