サーバー / メンテナンス / 2009 / 01 /31
基本的に、こちらを参考にさせていただきました。 大変ありがとうございます。
あと、これとこれ。
- http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html
- http://tonextone.com/note/diary/server/20051213.html
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
