スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

サーバセットアップ 続き

前回から、平日少しずつ、休暇中には結構時間をかけて、自宅サーバのセットアップを行った。
一度ネットワークに入れるようになってからは、もうモニタの破損はさほど問題にならなくなった。

結果的に膨大な時間がかかってしまった。
セットアップの履歴を残しておきたいと思い、どういう順序でやったか後からたどってメモしておこうと思ったがこれまた時間がかかった。historyをところどころで取っておいたものの、試行錯誤しながらやっていたり相対パスで指定していたりで、そう簡単ではない。

基本的には、
http://kajuhome.com/sitemap.shtml
のサイトを参考にさせてもらいながら、それに沿ってインストールを行った。
しかし、ところどころで環境の違いからかその通りには行かなかったのと、既存のものの移行で結構時間を食った。

以下のことを行った。

・一般ユーザの追加
・日本語コードの変更(UTF-8 → eucJP)
・vimのインストール
・ホスト名の変更
・yumセットアップ
・最新パッケージの自動アップグレードシェルスクリプト
・yum plugin fastestmirrorのインストール
・rpmforgeの追加
・versionlockのインストール
・changelogのインストール
・checkinstall
・cpan2rpmのインストール
・サービス起動の設定
・不要ポートの閉鎖
・sshでログオンさせるユーザを限定
・SSHサーバー設定 root、passwordなしのログインを禁止
・root(管理者)になれるユーザを限定
・メールユーザのみはログインをさせない設定
・Clam AntiVirusのインストール
・ファイル改竄検知システムの導入(Tripwire)
・rootkit検知ツールの導入(chkrootkit)
・バッファオーバーフロー攻撃防御機構(Exec-Shield)
・ntpのインストール
・sambaのインストール
・Mysqlのインストール
・Apacheの設定
・PHPのインストール
・mod_phpのインストール
・mod_sslのインストール
・javaのインストール
・mod_jkのインストール
・apxs Apache eXtensionのインストール
・mod_rubyのインストール
・erubyのインストール
・アクセスログ解析 webalizerの設定
・アクセスログ解析 awstatsの設定
・Tomcatのインストール
・Postfixのインストール
・procmailのインストール
・dovecotのインストール
・amavisd-newのインストール

以下、様々詰まった箇所でのメモ。

●yum
yumは結構便利だった。依存関係に悩むこともない。cpan2rpmでPerlのライブラリのインストールも簡単にできる。今までapt-getを使っていたが、なんかよさげだ。
ないものはレポジトリを増やしていけばいい。
ただ、古いバージョンをインストールするというのは、できなさそう。バージョン番号を指定すればできるようなことをどこかに書いてあったが、古いバージョンはレポジトリにはなさそうだった。
なので、古いものはそのままrpmからインストールした。

また、yumがハングアップしたときがあったので、
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
で解決した。


●sshでログオンさせるユーザを限定
-:ALL EXCEPT hoge:ALL
⇒これだとcronがエラーになる。
 CRON (root) ERROR: failed to open PAM security session:
 となるので
-:ALL EXCEPT root:LOCAL hoge:ALL
とした。

●Clam AntiVirusのインストール、ウィルス定義ファイル自動更新
これは結構苦労した。ウィルスDBの更新のfreshclamを実行すると、新しいバージョンにしろと言われる。yumの通常のレポジトリではアップグレードできないので、rpmforgeを指定して最新のrpmをダウンロードしてきて入れた。それでも、freshclamの実行でエラーになる。

ERROR: getfile: daily-3683.cdiff not found on remote server (IP: 203.212.42.128)
ERROR: getpatch: Can't download daily-3683.cdiff from db.jp.clamav.net
ERROR: getfile: daily-3683.cdiff not found on remote server (IP: 211.10.155.48)
ERROR: getpatch: Can't download daily-3683.cdiff from db.jp.clamav.net
ERROR: getfile: daily-3683.cdiff not found on remote server (IP: 203.212.42.128)
ERROR: getpatch: Can't download daily-3683.cdiff from db.jp.clamav.net

他の更新はうまくいって完了している。これはきちんと更新されていると考えていいのだろうか。

●Tripwireの設定
これはかなり苦戦した。
前のサーバにインストールしたときもそうだったが、データベースを作成・更新したり、チェックしたりするのにべらぼうな時間がかかるので、ミスがあってその都度直すと、相当な時間がかかってしまう。
メールが送られなくて、いろいろやったが駄目。直接コマンドを実行すると送信されて、シェルの中で実行すると送信されない。果てはなんか権限の問題かと思ったが、基本的に実行ユーザは同じ。
と悩んでいたが何のこともなく、日付が文字化けしていたために、2008/01/15で表示され、OutlookExpで受信日時でソートして一番上で待っていたので、受信していることに気づかなかっただけだった、というオチ。シェルの中では文字化けしないようにロケールの設定を変えていた。

それから、
Error Report:
Section: Unix File System
1. File system error.
Filename: /var/lock/subsys/anacron
そのようなファイルやディレクトリはありません
と何度やってもなるので、ポリシーからコメントアウトした。しかしないならないで、Removedでカウントすべきだが何でエラーとなるのか。/var/lock/subsys/の下のファイルがよくこうなる。都度ポリシーを変えてデータベースを作り直すのもばかばかしい。


●自動バックアップ tarとsamba
Windows側へ自動バックアップしようと考えた。今回物理HDDは一つで、パーティションもデフォルトのままbootやswap以外切らなかったので、何とか別のディスクに重要ファイルはバックアップしておきたい。
最初、rsyncを考えたが、sshでリモートログインを禁止しているし、またパーミッション情報は保持しておきたいので、簡単には行かない。
このサイトに
http://www2s.biglobe.ne.jp/~nuts/labo/inti/cron-rsync-ssh-nodaemon.html
できそうなことが書いてあったが面倒なので取りやめ。

tarで固めて、コピーすればいいかと思った。Linux上では、cronで定期的にbackupディレクトリに差分バックアップし、Windows上では、タスクスケジューラからxcopyコマンドを起動して、sambaで共有しているbackupディレクトリから定期的にコピーするようにする。
まずtarで差分更新だが、uオプションではどうも差分でやっている感じはしない。またzオプション付だとuオプションは使えない。今までuオプションは使ったことがないのでよくわからない。
時間を計った結果、
tar cvf
tar uvf
tar cvfz
の順で早かった。重たいファイルに時間がかかっているところを見ると、更新されたものだけをアーカイブに入れている感じではない。再度アーカイブを作るとすると、かえって時間がかかるのかもしれない。
そこで、-Nオプションを加え、前回実行日時をファイルに吐いておいて、その日時以降に更新されたものだけ、uオプションで更新するようにした。(ただこれだと、他からコピーしてきたものは対象外かもしれない。要確認)

さて、Windowsへのコピーだが、/home/ユーザ・ディレクトリ以下にバックアップディレクトリを作りマウントポイントとしたが、アクセスできない。
xxx does not exist or permission denied when connecting to
などのエラーが出る。いろいろ設定を変えても駄目。
調べると、selinuxがenableになっていると、home以下にアクセスできないということだったが、私のマシンではすでにdisableになっている。
/etc/selinux/configを調べても、また念のために
# setsebool -P samba_enable_home_dirs=1
とやっても駄目。
home以外ディレクトリに移せばあっさりアクセスできる。
試行錯誤すること2時間。遂に断念。別のディレクトリに置くことにした。


●Mysqlの設定
これはアプリとの関係があるので下手にバージョンを変えることはできない。なので、前のものをそのまま持ってきた。ところが、前どうやってセットアップしたのか全く記録に残っていない。私用したtarボールはあるものの、何をどうしたのかわからない。とりあえずそのまま圧縮して展開したが駄目。マイナーバージョンアップした4.1.22を持ってきて、.configureを実行。dataはそのままコピー。
起動をさせても接続ができなかったが、今走っているやつをpsコマンドで詳細を表示させ、それを参考にしながら以下のように起動することで可能となった。
su - mysql -c "/usr/local/mysql/bin/mysqld --no-defaults --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/hoge.gotdns.com.pid --skip-external-locking --skip-character-set-client-handshake --default-character-set=binary &"

●Apacheの設定
これがまた難関だった。
1.3系を使っていたが、2.0系を使うことに決めた。httpd.confを移し替えたが、1.3の設定が使われていると怒られて起動しない。一つ一つ外した。どれだったかはもう忘れた。SSLRequireSSLは、ssl.confに持っていったらエラーにならなくなった。
tomcatとの接続に最初、proxy_ajpを使っていたが、mod_jk2に変えた。workers2.propertiesがいろいろうるさいので、proxy_ajpでも良かったかもしれない。
perlもrubyもphpもjavaも案外簡単に接続できたが、pukiwikiで問題になる。

●pukiwiki
pukiwiki1.3を使っていたが、表示はできるものの、編集ができない。Apache2.0だときちんと動作しないようだ。結局1.4を入れデータを移行することに決めた。データ移行ツールがあるようだったが、問題が起きることは容易に予想できたので手動で移行した。というか、単にテキストで管理していたのをwikiに貼り付けただけなので、wikiフォーマットで編集して入れることなく添付ファイルとしておいた。wikiフォーマットは要らないので、テキストをそのまま表示編集するツールがほしい。まあ、自分でも簡単に作れそうなので、作ろうと思うのだが、そう思ってから数年が経っている。

●Tomcat
javaに関しても古いrpmでそのままインストール。
またtomcatもrpmでインストールはせず、tomcat以下を固めてそのまま移行。これで特に問題なし。

しかし、文字コードの問題が起きた。サーバのデフォルトのエンコードの問題だろうかと思ったが、きちんとHTTPヘッダでは、
Content-Type: text/html;charset=Windows-31J
またHTMLヘッダでは、
< meta http-equiv="Content-Type" content="text/html; charset=Windows-31J" >
と記述されている。

これは、
Windowsで使用されているShift_JISの文字コードのIANA正式登録名だから、Shift_JISと書くのは間違いで、正しくはWindows-31Jと書くべきであるという、大嘘つきに私が騙されたせいだ。
何しろ、Windows-31Jというcharset名は、IEでは認識できない。実に奇妙だが、HKCR\MIME\Database\charsetにはsjisはあっても、Windows-31Jの文字はない。

これでうまくいっていると言っている奴は、単にIEのエンコード設定を自動選択にしていて、ヘッダではなく、文字自体を見て判別できてるせいだろう。
だからWindows-31Jとはせずに、単純にShift_JISとすれば良い。機種依存文字も問題なく表示できる。今後MSが改めたとしても旧versionのIEを使う人もいるだろうから当分はその方が良い。

cf.
http://d.hatena.ne.jp/hasegawayosuke/20070717/p1

●Postfixのインストール
これまでPOP before SMTPでdracを使っていたが、saslauthを使った、SMTP-Authに切り替えることにした。POP3もqpopperからdovecotに変えた。
外部へメールが送信できないので、OP25B(Outbound Port25 Blocking)対策 やら、transportの設定、submissionの設定を行ったが、相手先のメールサーバからもISPのメールサーバからも拒否。まあ、逆引きできないようにしているから仕方ないか。唯一sbへは時間がかかったが送信された。

●シェルの移行
sortコマンドが少し違う。sort +1 +2としてしまうと、ファイルと見なされてしまう。sort -k 1 -k 2とした。


●ネットワークの移行
最初、DHCPで振られたIPのままにしていたが、固定にしようとした。
network restartしたのに関わらず換わらない。ifdown, ifup eth1で何とか変わった。後で気づいたが、ifcfg-eth1.bakのファイルがあったお陰で、固定IPのあとでDHCPで上書きされてしまっていた。
一通りサーバの移行が済んだので、直前までのアクセスカウンタを移行して、ルータのアドレス変換の設定を変更した。が、外部からアクセスできない。
アドレス変換の設定をしただけなのに、WAN側のIPが解放されてしまっていた。dynDNSに変更を反映させようとしたが、ネットワークにアクセスできない。digやnslookupを実行すると、

error while loading shared libraries: libdns.so.21: cannot open shared object file: No such file or directory

と出てくる。何か壊れてしまったのか。こういうときにこそ、Tripwireを使って破損したファイルを探せばいいと思ったが何の役にも立たなかった。たぶん、その問題が起きた後で、データベースを再作成してしまったせいだろう。

一旦前のサーバに切り戻しをして、問題を解決してから再移行することにした。
ノートがかなり熱くなっている。この暑さの中で、ノートを付けっぱなしというのはよくないか。やはりサーバ用途ではない?? これまでの作業が無駄になってしまうのだろうか。

DNSが使えないのだから、yumも駄目だろうと思ったが、これは接続できた。
libdns.soが壊れているのかもしれないと思い、それを含むbind-libsを再インストールしたりしたが駄目。
libdns.so.21自体が存在していなくて、libdns.so.22があった。
単純にリンクを張りなおしたら直った。yumは多分直接22を参照しているので問題がなく、digやnslookupの参照先が21になっていたのだと思う。
ln -s libdns.so.22.1.0 libdns.so.21
ちなみにリンクに対してリンクしたときはNG。

同様にclamd.amavisdも起動していなかったが、これも同じ問題だった。リンクを張りなおすことで起動。

また、同じタイミングでeth0につないでいた有線LANが認識しなくなった。これも試行錯誤したが、
rmmod e100
modprobe e100
で回復した。

夏期休暇中ずっとサーバをいじっていたわけではないが、かなり時間を費やした。
無意義にこの休暇は終わった。



関連記事
スポンサーサイト

コメント

非公開コメント

プロフィール

dayan

Author:dayan
小職は、SE(システムエンジニア)を専門としておりますが、技術的な情報を中心に、それ以外に経済関連の日記、たわいもない日記も載せていきます。
[公式HPもよろしく!]

天気予報

-天気予報コム- -FC2-
リンク
ブロとも申請フォーム

この人とブロともになる

カテゴリー
最近の記事
ブログ内検索
最近のコメント
最近のトラックバック
RSSフィード
月別アーカイブ


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。