Hatena::ブログ(Diary)

cutxoutの日記

2005-08-10

cutxout2005-08-10

Perlプログラマのレベル10 - Perlプログラミング救命病棟より

レベル5: 正規表現、演算子、I/O、およびスコープについて基本的な理
解がある。皆が言っているので、my、use strict、およびuse warnings 
を使用している。多くの人たちがこのレベルを超えないのは、たとえ非効
率であっても、再利用可能なコンポーネントの作成を除けば、ほどんど何
でもできるからである。このレベルか次のレベルでは、リファレンスのこ
とを知っている。

レベル6: Perl の講習を受けている人もいる。オブジェクトの使い方を
知っており、この知識とComprehensive Perl Archive Network(CPAN)を
利用すれば強力なプログラムをすばやく作成できると知っている。次のレ
ベルに進んで、この能力拡大がどこまで行くのか見たいと思っている

レベル7: オブジェクト指向モジュールを自分で作成できるようになり、
コードを再利用することの喜びをようやく感じている。パッケージならび
にレキシカル変数とダイナミック変数の違いを理解している。Perl の正
規表現(regular expressions)が「普通の」という意味のレギュラーで
はなく、単純なテキスト操作をはるかに超えるものだと知っている

  • 朝方発見して、魅入ってしまいました。こういうの好きなんです。
  • 業務経験などという無粋なモノは無視して理解度で判断すると、今の自分はレベル6。再利用性という観点から、レベル7を指向し始めたところですね。
  • そんなこんなで、ここ一ヶ月はこんな本を読んでいたりします。:-)
  • 引用元で詳解されていた書籍は面白そうなので、是非買いたいです。amazonで予約しちゃおうかな。

ガイアの夜明け

  • 種苗ビジネスに関する特集。
  • こういうのを見るにつけ、自分がやりたいのはもはやITでは無いという思いに確信を持つわけで。
  • あ、毎週金曜日に再放送やっているんだ。録画しなきゃ。

FreeBSDに関する残件

バックアップ

  • PostgreSQL
    • BSD Hacksに掲載されていた、pythonによるpg_dumpの自動実行をdailyでやればよいかと思っていましたが、8.0にはArchive LogとPITRという仕組みが実装されたのを思い出しました。
    • せっかくなので、両方やってみよう。:-)

様々

  • Apacheのログ
  • 動かなくなったcgiの復旧
  • いらないファイルの大掃除
  • mod_proxyの評価
    • しばらく、mod_proxy経由で生活してみよう。
  • mod_sslでオレオレ証明書作り。

FreeBSD Install手順書(2005-08-10版)

  • やっとの事で、環境復旧できました。
  • 一週間かけて復元した環境を一瞬で破壊して、三日かけて元に戻す羽目に..orz
  • 前回書いた手順の欠点もだいぶ洗い出せたので、いざというときの参照用に記録を残しておこう。
  • もしかしたら、何方かのお役に立てるかもしれないし。:-)
  • あらためて、メモを残しておくのはとっても重要だと気づきましたのです。

General Information

Server Spec
  • SONY VAIO
  • Mobile Celeron 333MHz
  • HDD 40GB
  • RAM 128MB
FreeBSD Version
 uname -a
 FreeBSD 4.11-STABLE #0: Sat Jul 30 04:35:08 JST 2005

Backup

アプリケーション的にバックアップするもの
  • PostgreSQL
  • MySQL
  • Subversion
ストレージ的にバックアップするもの
  • /etc
  • /usr/local/etc
  • /var/log
  • /usr/local/share/shmp
  • /usr/src/sys/i386/conf
  • /home/HOME
アーカイブが壊れた原因
  • 必ず原因追及すること

インストール

  • ftp
    • 4.11-RELEASE-i386-miniinst.isoを使用してCDROMからブート
  • インストールメディアとして、PCMCIAを選択しない。
    • 勘違いですうパターンためしたが、メモリとかIRQは不明なまま。
  • Kern-Developerを選択。
  • portsはインストールしない。
    • portsが無いと、異様に速くインストール終了する。:-)
  • HDDのパーティション分け
 /dev/ad0s1a on / (ufs, local, soft-updates)
 /dev/ad0s1f on /tmp (ufs, local, soft-updates)
 /dev/ad0s1g on /usr (ufs, local, soft-updates)
 /dev/ad0s1e on /var (ufs, local, soft-updates)
 procfs on /proc (procfs, local)
  • ログ復旧の観点から、/varはnewfsしない方がよいかも。
  • Packageからインストールするモノ
    • cvsup-without-gui
    • zsh+euc_hacks
    • ImageMagick
      • HotSaNICの依存関係による
      • /usr/local/bin/convertが必要
      • コンパイルに時間かかるので、packageの方がよい
  • ここでひとまずリブート


初回起動後

  • cvsupでソースとportsを最新版にする。
    • *default hostを変更
 *default host=cvsup4.jp.FreeBSD.org
    • 実行
 cvsup -g stable-supfile
 cvsup -g ports-supfile
  • その間にすること
    • su toorを有効にする。
 vipw
 toor:*:0:0:Bourne-again Superuser:/root:/usr/local/bin/zsh
 passwd -l toor
    • /etc/make.conf
 CPUTYPE=i686
  • csvup終了後
    • cd /usr/src/sys/i386/conf
    • cp GENERIC XXX
    • XXXを適当に編集
    • make worldする
      • 一般的にどういう呪文を使っているのか調査しておこう
    • 一晩がかりなので寝る
shutdown -h now

二回目起動後

まずやること
  • perl5.8
 cd /usr/ports/lang/perl5.8
 make install
 
 use.perl port
 Usage:
         use.perl port       -> /usr/bin/perl is the perl5 port
         use.perl system     -> /usr/bin/perl is the system perl
  • samba3
 cd /usr/ports/japanese/samba3
 make install
 基本的にデフォルトのままだが、LDAPは使わないことが明確なので外す。
    • /usr/local/etc/smbd.conf
      • hosts allowの修正
      • workgroupの修正
    • /etc/inetd.conf
 netbios-ssn stream tcp  nowait          root    /usr/local/sbin/smbd    smbd
 netbios-ns dgram udp    wait            root    /usr/local/sbin/nmbd    nmbd
    • kill -HUP inetdのプロセス番号
    • ユーザ登録
 smbpasswd -a ユーザ名


portsでインストール
  • /usr/ports/japanese/w3m
  • /usr/ports/japanese/less
  • /usr/ports/japanese/nkf
  • /usr/ports/japanese/qkc
  • /usr/ports/japanese/namazu2
  • /usr/ports/netmgmt/net-snmp
    • /usr/local/share/snmp/snmpd.conf
 #       sec.name  source          community
 com2sec local     localhost       XXXXXX
 com2sec mynetwork 192.168.0.0/24      XXXXXX
    • /etc/rc.conf
 net_snmpd_enable="YES"
  • /usr/ports/net-mgmt/mrtg
  • /usr/ports/net/rrdtools
  • /usr/ports/net/rsync
  • /usr/ports/mail/fetchmail
 chmod 0600 .fetchmailrc
 chmod 0710 .fetchids
  • /usr/ports/mail/procmail
 chmod 600 .procmailrc
  • /usr/ports/ftp/wget
  • /usr/ports/ftp/ncftp3
  • /usr/ports/editor/vim
  • /usr/ports/dns/ddclient
  • /usr/ports/archivers/unzip
  • /usr/ports/sysutils/lsof

この辺でもう一回リブートしておく


ソースからBuildするもの

方針
  • 主要アプリケーションはソースからBuildする。
  • 主要アプリケーションが必要とする依存関係は、portsを使ってもよい。
  • ソースは必ず保存するべし。
  • 個別作業に入る前に/var/logを復旧しておくべし。

Apache2.0.54 + PHP4.4 + Subversion1.2.1 + ViewCVS1.0
  • UserとGroupの登録
    • /stand/sysinstall -> Configure -> User Management
    • システムデフォルトで登録されている様だが、無ければ追加する。
 www:*:80:80:World Wide Web Owner:/nonexistent:/sbin/nologin
  • Barkley DB 4.2.52
    • 諸々
      • 開発元 http://www.sleepycat.com/
      • Subversionの依存関係により必要。
      • Subversionのrequirementにより、最新版の4.3ではなく4.2を使用する。
      • 4.3系だと動かない事があるらしいので、必ずSubversionのドキュメントをチェックするべし。
      • しかし、dbという名前でportsに登録されているとは思わなかった。orz
      • しかも、BarkleyDBじゃなくてBarkley DBで探さないと、まともなりソースにたどり着けないし。orz
 cd /usr/ports/databaes/db42
 make install
  • Python2.4
    • 主にSubversionとViewCVSの依存関係による。
 cd /usr/ports/lang/python
 make install
  • Apache2.0.54
    • sslとproxy関係のみDSOで組み込む。
    • ./configureがBarkley DB関係で探しているのは、binじゃなくてlibの様な気がするけど、特に修正はせず。
    • Install
 ./configure --prefix=/usr/local                          \
             --enable-layout=FreeBSD                      \
             --enable-with-barkley-db=/usr/local/bin/db42 \
               CPPFLAGS=-I/usr/local/include/db42         \
               LDFLAGS=-L/usr/local/lib/db42              \
             --enable-dav=yes                             \
             --enable-dav-fs=yes                          \
             --enable-headers=yes                         \
             --enable-ssl=yes                             \
             --enable-proxy=yes                           \
             --enable-proxy-connect=yes                   \
             --enable-proxy-ftp=yes                       \
             --enable-proxy-http=yes                      \
             --with-ssl=/usr/bin                          \
             --enable-so=yes                              \
             --enable-mods-shared='ssl proxy proxy-connect proxy-ftp proxy-http' \
             --enable-auth-digest=yes
 make
 make install
 cd /usr/ports/textproc/libxml2   # 2.6.20
    • Install
 ./configure
 
   Install prefix:  /usr/local
   Compiler:        gcc
   XML Parser:      libxml 2.6.20
   SSL library:     SSL support is not enabled
   zlib support:    zlib support enabled, using -lz
   Build libraries: Shared=no, Static=yes
 
 make
 make install
  • /etc/rc.conf
    • いつの間にこんなのが必要になったんだ?
 apache2_enable="YES"
 ./configure --with-apxs2=/usr/local/sbin/apxs   \
             --with-mysql
 make 
 make install
    • httpd.conf
 LoadModule php4_module        libexec/apache2/libphp4.so
 AddType application/x-httpd-php .php
 #AddType application/x-httpd-php-source /phps
 ./configure
 gmake
 gmake install
 ./viewcvs-install
 viewcvs.confを適宜変更
 AUTOCONF=/usr/local/bin/autoconf259            \
 AUTOHEADER=/usr/local/bin/autoheader259        \
 LIBTOOL_M4=/usr/local/lib/php/build/libtool.m4 \
 sh ./autogen.sh
 
./configure --prefix=/usr/local                                                \
            --with-apxs=/usr/local/sbin/apxs                                   \
            --with-berkeley-db=/usr/local/bin/db42                             \
              CPPFLAGS=-I/usr/local/include/db42                                 \
              LDFLAGS=-L/usr/local/lib/db42                                      \
            --with-swig=/usr/local/bin/swig                                    \
            --with-apr=/usr/local/bin/apr-config                               \
            --with-apr-util=/home/src/httpd-2.0.54/srclib/apr-util
 make
 make install
 make swig-py
 make install-swig-py 
 もしダメなら、subversion/bindings/swig/INSTALL で同じ事をやってみる。
    • 事後処理
      • /usr/local/lib/svn-python にインストールされるので、
  cd /usr/local/lib/python2.4/site-packaes
  ln -s /usr/local/lib/svn-python/* .
PostgreSQL 8.0.3
 pgsql:*:70:70:PostgreSQL Daemon:/home/pgsql:/bin/sh
  • バックアップ
 pg_dumpall > db.out
 pg_ctl stop
  • Install
 ./configure --prefix=/usr/local --with-perl
 gmake
 gmake check  # for regression test
 su
 gmake install
 gmake -C src/bin install
 gmake -C src/include install
 gmake -C src/interfaces install
 gmake -C doc install
  • データベース作成
 mkdir /home/pgsql
 mkdir /home/pgsql/data
 chown -R pgsql:pgsql /home/pgsql
 su pgsql
 initdb --encoding=EUC_JP --no-locale -D /home/pgsql/data
  • postmaster 起動
 su pgsql -c '/usr/local/bin/pg_ctl start -o -i -D /home/pgsql/data '
  • 復元
 su
 su pgsql
 psql -e template1 < db.out 

MySQL 4.1.13
  • 基本方針
    • MySQL4.1.x の最新版
    • デフォルトの言語設定は ujis
    • テーブルは MyISAM, InnoDBを使用、NDBClusterは当面見送り ..orz
    • 常駐するので、プロセスサイズを小さくする設定。
  • portsの場合
 cd /usr/ports/databases/mysql41-server
 make WITH_CHARSET=ujis
 make install
  • ソースからBuildする場合
    • UserとGroupを作成
 mysql:*:88:88:MySQL Daemon:/home/mysql:/sbin/nologin
    • Install
 ./configure --help
 ./configure --prefix=/usr/local          \
             --with-tcp-port=3306         \
             --with-mysqld-user=mysql     \
             --with-charset=ujis          \
             --with-extra-charsets=all    \
             --with-csv-storage-engine    \
             --localstatedir=/home/mysql
 make
 make install
    • 設定ファイル
 cp support-files/my-small.cnf /etc/my.cnf
    • 初期化
 cd /home/mysql
 /usr/local/bin/mysql_install_db --user=mysql
 /usr/local/bin/mysqld_safe --user=mysql &
 
 --localstatedirを指定しない場合、初期化する際に明示する必要がある。
   /usr/local/bin/mysql_install_db --datadir=/home/mysql
   /usr/local/bin/mysqld_safe --datedir=/home/mysql
mod_perl
 wget http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz
 tar zxvf mod_perl-2.0-current.tar.gz
 cd mod_perl-2.0
 
 perl Makefile.PL MP_USE_DSO=1                 \
                  MP_APXS=/usr/local/sbin/apxs \
                  EVERYTHING=1
 
 make
 make test   # 1時間以上かかるので注意
 su toor
 make install
  • EVERYTHING=1 について
 http://perl.apache.org/docs/1.0/guide/install.html
 The Gory Details 
 We saw that the basic mod_perl installation is quite simple and 
 takes about 10 commands. You can copy and paste them from these 
 pages. The parameter EVERYTHING=1 selects a lot of options, but 
 sometimes you will need different ones. You may need to pass only 
 specific parameters, to bundle other components with mod_perl etc. 
 You may want to build mod_perl as a loadable object instead of 
 compiling it into Apache, so that it can be upgraded without 
 rebuilding Apache itself.
  • httpd.conf
    • 実は Directive の中身をよく分からないままな。
    • 使うときは、必ずマニュアルを見て設定すること。
 LoadModule perl_module libexec/apache2/mod_perl.so
 Alias /cgi-perl /usr/local/www/cgi-perl
 <Location /cgi-perl>
   SetHandler perl-script
   PerlHandler Apache::Registory
   Options +ExecCGI
 </Location>
  • 動作確認
    • テストコードがないので、動作確認できず..
    • make testで一部エラーになったのが気になる。
 Failed Test             Stat Wstat Total Fail  Failed  List of Failed
 -------------------------------------------------------------------------------
 t/apache/util.t                        8    4  50.00%  1-4
 t/api/in_out_filters.t                 1    1 100.00%  1
 t/compat/request_body.t                5    1  20.00%  5
 35 tests skipped.
 Failed 3/230 test scripts, 98.70% okay. 6/2099 subtests failed, 99.71% okay.
 [warning] server localhost:8529 shutdown
 [warning] port 8529 still in use...
 ...done
 [  error] error running tests (please examine t/logs/error_log)
 +--------------------------------------------------------+
 | Please file a bug report: http://perl.apache.org/bugs/ |
 +--------------------------------------------------------+
 *** Error code 1


mod_encoding
 wget http://webdav.todo.gr.jp/download/mod_encoding-20020611a.tar.gz
 wget http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616
 cp mod_encoding.c.apache2.20040616 mod_encoding-20020611a/mod_encoding.c
    • コンパイル
 cd ./mod_encoding-20020611a/lib
 ./configure
 gmake  #gmakeじゃないとコンパイルできない
 su
 gmake install
 
 ----------------------------------------------------------------------
 Libraries have been installed in:
    /usr/local/lib
 
 If you ever happen to want to link against installed libraries
 in a given directory, LIBDIR, you must either use libtool, and
 specify the full pathname of the library, or use the `-LLIBDIR'
 flag during linking and do at least one of the following:
    - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
      during execution
    - add LIBDIR to the `LD_RUN_PATH' environment variable
      during linking
    - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
 
 See any operating system documentation about shared libraries for
 more information, such as the ld(1) and ld.so(8) manual pages.
 ----------------------------------------------------------------------
  • mod_encodingのインストール
    • 正常処理できる部分
 cd ../
 ./configure --with-apxs=/usr/local/sbin/apxs
 gmake
 su
 gmake install
 
 /usr/local/share/apache2/build/libtool --mode=install cp mod_encoding.so /usr/local/libexec/apache2/
 cp mod_encoding.so /usr/local/libexec/apache2/mod_encoding.so
 cp: mod_encoding.so: No such file or directory
 apxs:Error: Command failed with rc=65536
 .
 gmake[1]: *** [install-exec-local] エラー 1
 gmake[1]: Leaving directory `/usr/home/src/mod_encoding-20020611a'
 gmake: *** [install-am] エラー 2
  • 自力でmod_encoding.soをコンパイルする
 gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook
 ls mod_encoding.so
 mod_encoding.so
 
 cp mod_encoding.so /usr/local/libexec/apache2
  • httpd.conf
 LoadFile                      /usr/local/lib/libiconv.so
 LoadModule encoding_module    libexec/apache2/mod_encoding.so
 BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
 BrowserMatch "^WebDrive" redirect-carefully
 <IfModule mod_encoding.c>
   EncodingEngine    on
   NormalizeUsername on
   SetServerEncoding     UTF-8
   DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
 </IfModule>
  • 問題点
    • この状態で、
      • WebDriveからは問題なく利用できるが、
      • Windows2000 の Web フォルダからはマウントできません。

cutxout2005-08-09

    • 何が悪いんだ?orz
    • WindowsXPとかMacOS Xなら使えるんだろうか?

perl modules

  • /usr/ports/databases/p5-DBI
  • /usr/ports/databases/p5-DBD-Pg
  • /usr/ports/databases/p5-DBD-mysql41
    • portsを使うとMySQL本体をインストールしそうになるという豪快な動作をするので、CPANから入れた方がよいかもしれず。
  • /usr/ports/japanese/p5-Jcode
  • /usr/ports/net/p5-Net-Telnet
  • /usr/ports/www/p5-libwww
    • LWPってlibwwwで登録されてたのか..orz

環境復旧

hns
  • データが無事なら、Installし直すのがよい。

HotSaNIC
 次に[ HotSaNIC ] のインデックスページを作成した後、1度[ rrdtimer ]を実行します。
 # ./makeindex.pl
 # ./rrdtimer -i
  • コレで復旧した。
  • ImageMagickがインストールされてないと、別の理由で失敗するので注意。

pukiwiki
  • 新規インストールだと問題ないですが、バックアップから復旧するときに毎回はまるポイント。
  • READMEには下記のパーミッション設定しか書かれてませんが、実際には↓配下のファイルも0666に変更しないと、更新できずにエラーになる。
    • attach/*
    • backup/*
    • counter/*
    • diff/*
    • wiki/*
    4.  サーバ上のファイルおよびディレクトリのパーミッションを確認します。
 
        ディレクトリ   パーミッション
        attach         777	添付ファイル格納ディレクトリ
        backup         777	バックアップファイル格納ディレクトリ
        cache          777	キャッシュファイル格納ディレクトリ
        counter        777	カウンタファイル格納ディレクトリ
        diff           777	差分ファイル格納ディレクトリ
        image          755	画像ファイル
        image/face     755 	(画像ファイル)フェイスマーク  
        lib            755	ライブラリ
        plugin         755	プラグイン
        skin           755	スキン、CSS、JavaScirptファイル
        trackback      777	TrackBackファイル格納ディレクトリ
        wiki           777	データの格納ディレクトリ
 
        ファイル       パーミッション 転送モード
        *.php          644            ASCII
        cache/*        666            ASCII
        image/*        644            BINARY
        image/face/*   644            BINARY
        lib/*          644            ASCII
        plugin/*       644            ASCII
        skin/*         644            ASCII
        wiki/*         666            ASCII

その他

mod_proxy
  • httpd.conf
 LoadModule proxy_module          /libexec/apache2/mod_proxy.so
 LoadModule proxy_connect_module  /libexec/apache2/mod_proxy_connect.so
 LoadModule proxy_http_module     /libexec/apache2/mod_proxy_http.so
 <IfModule mod_proxy.c>
   ProxyRequests On
   ProxyVia On
   <Proxy *>
     Order deny,allow
     Deny from all
     Allow from 127.0.0.1
   </Proxy>
 </IfModule>
  • もしかして、DSOの扱いに関して根本的に勘違いしていたりするか?

さて

  • ここしばらく全力で取りかかってきたサーバの復旧が一段落したところで、TOEICとSECUADとPianoのペースを十全に戻さないとなりません。
  • 八月に入って、いつもの勉強部屋が使えなくなったのもかなり痛いです。すっかりさぼり癖がついちゃった。えへ。
  • 時期的に、これからが本番なので気合い入れ直します!