< あさがくる

 ノート PC を使って自宅サーバを建てています。そのときの設定内容を備忘録をかねて書いています。参考になると思います。

CF を使った SSD の装着

 debian が lenny になったのを機会に HDD を SSD にすることにしました。ノート PC でも HDD の甲高い回転音が耳障りなので防音用のケースを作ってその中に入れてはいましたが、音は漏れてきます。web で調べてみると、CF-IDE 変換アダプタ(変換名人 CFIDE-402FB) があることがわかり、これを入手しました。CF は2枚差すことができます。当初、8GB の CF を1枚だけ差すつもりでいたのですが、後述するように異なるメーカーの CF が2枚になりました。そこで、CF を SSD として使うことに書き込み回数の点から寿命に不安がありましたので、2枚目をバックアップ用に使うことにしました。BIOS からは1ドライブしか見えませんが、linux からは2台のドライブ(右がドライブa,左がドライブb)として動作しています。発熱もなく、音もしなくなりなりました。静かです。

debian (lenny) のインストール

 サーバに用いているノート PC は FMV-680MC8/W です。FD ドライブや CD ドライブは外付けです。FD ドライブだけは純正なのでインストールは FD から行うことになりますが、Lenny はサポートしていません。web 上を探すと、FD からインストールするためのインストーラが見つかりましたので、ここからダウンロードしてきて rwwrtwin.exe で書き込みました。
 インストールできる環境はできたのですが、インストールの途中でフリーズしたような症状が頻発しました。CF との相性が悪いのかと思い別メーカの CF を入手し取り替えてみましたが、変化はありませんでした。これが CF が2枚になった理由です。それでもフリーズしてしますので、「ソフトウェアの選択」でチェックを全部外し、最小限のファイルだけインストールするようにするとうまくいきました。  サーバなので、IP は固定にします。ネットワーク関係の設定は

debian:/etc# cat resolv.conf
nameserver 192.168.1.1

debian:/etc# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
#allow-hotplug eth0
#iface eth0 inet dhcp
auto eth0
iface eth0 inet static
address 192.168.1.5
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

としてあります。
 文字コンソール上では、このままでは日本語を表示できません。/etc/modules に vga16fb を追記して、起動時にモジュールを自動ロードするようにします。

debian:/etc# echo vga16fb >> /etc/modules

以後、

# jfbterm -q

で日本語表示ができるようになります。jfbterm がインストールされていなければ

# aptitude install jfbterm

でインストールします。

SSDの寿命の延長対策

 調べてみると、CF は書き換え可能回数が多くないので、とにかく余分なアクセスをさせないことが重要なようです。そのため、アクセスタイムの記録を止めるために

debian:/etc# cat fstab
# /etc/fstab: static file system information.
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
#/dev/hda1 / ext3 errors=remount-ro 0 1
/dev/hda1 / ext3 noatime,errors=remount-ro 0 1
/dev/hda5 swap swap defaults 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
/dev/hdb1 /backup_root ext3 noatime,errors=remount-ro 0 1

としました。他にも対策は書いてありましたが、今のところこれだけです。

Dynamic DNSの設定

 独自ドメインで運用するため、VALUE-DOMAIN の Dynamic DNS を利用しています。Plala から割り振られたグローバル IP は ADSLモデムSVII から読み出し、変化があれば DNS に登録し直すことにしました。また、nslookup を用いて DNS から IP アドレスを引いてきて食い違いが生じていないかチェックしています。最小限のソフトウェアしかインストールしませんでしたので、nslookup はインストールされていませんでした。nslookup が入っているパッケージ dnsutils をインストールしておきます。
 IP を5分間隔でチェックしていますので、この部分に関連するファイルなどは CF の延命のために起動時に RAM ディスク上にコピーして走らせて、シャットダウン時に書き戻しています。コピーするためのスクリプトは

debian:/etc/init.d# cat ipupdatecp.sh
#!/bin/sh
# ipupdatecp.sh for dynamicDNS
cp -r /usr/local/bin/ipupdate/log /dev/shm

をupdate-rc.dで登録します。書き戻すスクリプトは

debian:/etc/init.d# cat ipupdatebk.sh
#!/bin/sh
# ipupdatebk.sh for dynamicDNS
cp -r /dev/shm/log /usr/local/bin/ipupdate

としました。終了時に起動させるため、/etc/init.d/rc のはじめの所に

if test x$RUNLEVEL = x0 -o x$RUNLEVEL = x6 ; then
/etc/init.d/ipupdatebk.sh
fi

と記述します。crontab には

*/5 * * * * root /usr/local/bin/ipupdate/ipupdate.sh
* */12 * * * root /usr/sbin/ntpdate -u -b -s ntp2.plala.or.jp  <−−時計を合わせるため
30 3 * * 1 root /usr/local/bin/hda_bk.sh                <−−hdaのバックアップを定期的に行うため(後述)

と記述し、スクリプト(ipupdate.sh) 関連のファイルは

debian:/usr/local/bin/ipupdate# ls
ipupdate.sh log
debian:/usr/local/bin/ipupdate/log# ls
count.dat dnsip.dat ip.log ng.dat oldip.dat

となっています。ipupdate.sh 、デバッグ時に用いた変数などがまだゴミとして残っています。26行目にある"^M"は、制御文字の「コントロールM」です。入力は [Ctrl]+[V]キーを押してから、[Ctrl]+[M]キーを押します。

hdaのバックアップ

 CF の書き換え可能回数は10万回ほどとのことなので、8 GB の CF が2枚あることからバックアップを取ることにしました。raid を構成することも考えましたが、間違えて変なことをしたり、ファイルを削除してしまったりしたときに、バックアップ側もおかしくなるので、定期的に丸ごとコピーをするようにしました。同じサイズのドライブ間でバックアップコピーをするときは dd コマンドを用いるようですが、用いた CF の容量はどちらも 8GB のタイプですが、メーカーが異なっており実際の容量は微妙に違っています。またブロックサイズなども異なります。そのため ddコマンドを用いることはできません。そのため、dumpとrestoreを用いてバックアップコピーすることにします。dumpとrestoreはパッケージdumpに入っています。crontabで毎週1回このスクリプトを起動しますが、このスクリプトの中で、隔週でバックアップするようにしています。バックアップ先はbackup_rootで、hdb1をマウントさせています。バックアップ日時は /var/lib/dumpdates に書かれます。

debian:/etc# cat /usr/local/bin/hda_bk.sh
#!/bin/sh
# backup /hda to /backup_root
if [ -e /var/tmp/hda_bk.flg ]
then
rm -f /var/tmp/hda_bk.flg
else
touch /var/tmp/hda_bk.flg
exit 0
fi
cd /backup_root
rm -r *
dump 0uaf - / | restore xof -
exit 0

/etc/fstab の第5フィールドにバックアップしておきたいファイルシステムに「1」のフラグを立てておきます。

/dev/hda1 / ext3 noatime,errors=remount-ro 1 1

hdbにもgrubを書いてあるので、hdaがダメになったときには差し替えれば良いようになっています。

アプリケーションのインストール

 インストールしたアプリケーション
apache2-mpm-prefork
  とりあえず
  # vi /etc/apache2/sites-enabled/000-default
  Options Indexes FollowSymLinks MultiViews
  ↓
  Options FollowSymLinks MultiViews
  としておく。sslやVirtualHostの設定などは、別に記す。
postfix
  # vi /etc/postfix/main.cf
  myhostname = debian.example.com
  alias_maps = hash:/etc/aliases
  alias_database = hash:/etc/aliases
  myorigin = /etc/mailname
  mydestination = example.com, debian.example.com, localhost.example.com,localhost
  relayhost = [中継サーバ名]
  mynetworks = 192.168.1.0/24
  home_mailbox = Maildir/
  mailbox_command =
  mailbox_size_limit = 0
  recipient_delimiter = +
  inet_interfaces = all

courier-imap
  ユーザの home ディレクトリーに /Maildir を作るために、次のコマンドを実行する。
  hoge@debian:~$ /usr/bin/maildirmake ~/Maildir

proftpd
  proftpd.conf に以下の設定を行う。
  debian:/etc/proftpd# vi proftpd.conf
  ServerName "example.com"
  ServerType inetd
  DefaultRoot ~
  RootLogin off

telnetd
  インストールの初期段階で使用したが、openssh をインストールした時に削除した。
 
openssh
  root  でのログインを禁止するために、/etc/ssh/sshd-configで
  PermitRootLogin no
  にする。

ntpdate
  crontab に定期的に実行するように記述する。12時間毎に実行させるために
  * */12 * * * root /usr/sbin/ntpdate -u -b -s ntp.example.com
  とした。

wordpress
  家の中 (192.168.0.x) から wordpress にアクセスすると動作がおかしくなる。そのため hosts ファイルに
  debian:/etc# vi hosts
  127.0.0.1 localhost example.com www.example.com
  とホスト名を記述しておく。これで、中から example.com でアクセスできるようになる。

phpmyadmin
  wordpressのバックアップのためにインストールした。
  # vi /etc/phpmyadmin/config.inc.phpで
  $cfg['Servers'][$i]['auth_type'] = 'http';
  $cfg['Servers'][$i]['host'] = 'localhost';
  $cfg['Servers'][$i]['connect_type'] = 'tcp';
  と変更する。

Squirrelmail のインストールと設定

● 設定
  「10. Languages」を選び以下のように「Language preferences」を設定し、
  
  1. Default Language : ja_JP
  2. Default Charset : iso-2022-jp
  3. Enable lossy encoding : false

  「2. Server Settings」を選び、このサーバでは Courier-IMAP を使用して IMAP を使っているので「A. Update IMAP Settings」を選択します。以下のように設定します。
  
  General
  -------
  1. Domain : example.com
  2. Invert Time : false
  3. Sendmail or SMTP : SMTP
  
  IMAP Settings   --------------
  4. IMAP Server : localhost
  5. IMAP Port : 143
  6. Authentication type : login
  7. Secure IMAP (TLS) : false
  8. Server software : courier
  9. Delimiter : .

  以上で設定は終了です。

● リンク作成
  ブラウザに http://example.com/webmail と入力することで、Squirrelmail が使えるようにするために、リンクを張ります。
  # ln -s /usr/share/wordpress /var/www/wordpress

● 日本語表示
  SquirrelMailのインストール後、メニューが英語になっていました。ネットで調べて見ると、メニューが英語で表示される場合、EUC-JP の環境を構築していない場合があるとのこと。(*1) そこで、localeの設定を変更します。
# dpkg-reconfigure -plow locales
  ここで、UTF-8とEUC-JPを選択し、EUC-JPが使用できる環境を構築します。でもメニューが日本語になりません。さらに調べて見ると、php.iniで下記が一つでもOnになっているとダメらしいとのこと。(*2)
  magic_quotes_runtime
  magic_quotes_gpc
  magic_quotes_sybase
  php.iniを見ると、magic_quotes_gpcだけがOnになっていましたので、Offにしてアパッチを再起動するとSquirrelMailのメニュー等の表示が日本語になりました。

  -----------
  *1: http://www.bnote.net/kuro_box/kuro_debian_squirrelmailjp.shtml
  *2: http://isapa.info/area/modules/pico/index.php?content_id=54

WordPress のアップグレードと設定

忘れないうちに、設定方法をメモに残す。
● インストール
aptitude で wordpress だけ入れると mysql-server が入らないので、
 # aptitude install wordpress mysql-server

● wp-config.php の編集
 # cd /etc/wordpress
 debian:/etc/wordpress# cp wp-config.php wp-config.php.org
 debian:/etc/wordpress# vi wp-config.php
  $debian_file = '/etc/wordpress/config-'.strtolower($debian_server).'.php');
  ↓
  $debian_file = '/etc/wordpress/config-localhost.php';

● スクリプトで DB を生成
 # cd /usr/share/doc/wordpress/examples
setup-mysql のアクセス権を 644 から 744 に変更する。
 debian:/usr/share/doc/wordpress/examples# chmod 744 setup-mysql
 debian:/usr/share/doc/wordpress/examples# ./setup-mysql -n wordpress localpost
   →/etc/wordpress/config-localhost.php
と DB が生成される。
アクセス権を 644 に戻す。

● リンク作成
 # ln -s /usr/share/wordpress /var/www/wordpress

-----
うまくいかず、DB を消すときには purge だけではダメなので
 # aptirude purge mysql-server
/var/lib/mysql-server 以下を削除、その後、再インストール。
 # aptirude install mysql-server
とすれば、良いらしい。
-----

● wordpress 2.5.1 から 3.0.1 にアップグレード
wordpress 3.0.1 をダウンロードして、解凍しておきます。 古い WordPress ファイルをバックアップ
 # cd /usr/share
 debian:/usr/share# cp wordpress wordpress-2.5

サーバ上の古い WordPress ファイルを削除。ただし、次のものは削除せずに残す。
 * wp-config.php ファイル
 * wp-content ディレクトリ
     o この中の wp-content/cache ディレクトリと wp-content/plugins/widgets ディレクトリは削除。
 * wp-images ディレクトリ(あれば)
 * wp-includes/languages/ ディレクトリ (言語ファイルをあえてここに置いている場合)
 * .htaccess ファイル (パーマリンク設定をしている場合)
 * robots.txt ファイル (ブログがルートにあって、このファイルを作成している場合)

新バージョンのファイルをサーバへアップロード。準備ができたところで
  http://example.com/wordpress/wp-admin/install.php

にアクセスして、インストールスクリプトを実行。Ver3.1.1 は日本語に対応しているので、wp-config.php に以下を追記
  define ('WPLANG', 'ja');

wordpress や plugin のインストールやアップデートを自動でできるようにするために、wordpress の所有者やグループを www-data に変更。
 debian:/usr/share# chown -R www-data:www-data wordpress

● plugin の wp-super-cache を使えるようにするために wp-config.php に以下を追記
  define('WP_CACHE', true);

更に apche2 に次の module を使えるように設定する。
 # /usr/sbin/a2enmod headers expires

-----------
参考にしたサイト:端っこなひとの備忘録

旧版の「linux Server」に置いてあったもの

自宅にサーバをたて、その体験記(?)を職場の雑誌に寄稿しました。
    Webサーバ
    ファイルサーバ(samba、FTP、WebDavからアクセス可能)
    メールサーバ(Webや携帯電話からアクセス可能)
と優れものです。(と自画自賛) 現在の所、3部に分かれていて
     (1) OS(Linux/Debian)のインストール
     (2) Web,Mail&File サーバの構築
     (3) その後の手直し
を、それぞれpdfファイルにしてあります。参考にすることはかまいませんが、なにが起きても自己責任でお願いします。 また、質問に応えるつもりはありません。あしからず。

メモ

画像の横にテキストを回り込みをする2つ目の方法は、ホームページビルダーなどで、直接回り込みさせる方法です。( img src="画像ファイル" align="left" hspace="15" vspace="5" )など。

こちらでは、画像の横にテキストを回り込みで指定しています。imgタグの中に、( class="picture" )を入れると、画像の横にテキストを回り込ませる事ができます。

/