玄箱Webサーバー(KURO-BOX/HG)

icon 項目のみ表示/展開表示の切り替え

概要

玄箱は玄人志向が販売しているNASです。取扱書どおりに別途用意したHDDを取り付けWindowsパソコンと付属CDを使ってインストールするとネットワーク上にファイルサーバができます。玄箱のOSはMonta Vista Linuxでsamba、thttpd、perlなどが標準でインストールされています。インターネット上よりソースを入手すれば、メールサーバーを構築したりできます。さらに、別のディストリビューションのLinuxをインストールしたりできます。

玄箱のホームページ http://www.kuroutoshikou.com/products/kuro-box/kuro-box_hgfset.html

  PowerPC603e Pentium II
Clock 266MHz 233MHz~350MHz
L1キャッシュ 命令16k 4way,データ16k 4way 命令16k 4way,データ16k 4way
L2キャッシュ 外付け(玄箱は無し) 512k
汎用レジスタ 整数32bit*32
浮動小数点32bit*32
リネームレジスタ 整数5,浮動小数点4
整数32bit(EAX,EBX,ECX,EDX,EDI,ESI,EBP,ESP)
浮動小数点80bit*8個
物理レジスタは40個
命令 RISC(4バイト固定) CISC(1~15バイト)平均だと1命令が3bytes程度 *1
内部でμopsに変換してRISCとして実行される。
クロックあたり命令発行数 最大3(2命令+1分岐命令) 最大3(1フルデコーダー+2シンプルデコーダ)
実行ユニット 整数,浮動小数点,ロードストア,分岐,システムレジスタ=5
1クロックで最大5命令実行、アウトオブオーダー実行、結果の書き込みはインオーダー
2整数浮動小数点,ロード,2ストア=5
1クロックで最大5命令実行、アウトオブオーダー
パイプライン 4段 スーパースカラー(PentiumIIと数え方が違う) 10~12段 スーパースカラー
*1 後藤弘茂のWeekly海外ニュース 64bitは苦手なCore Microarchitecture 2006/7/18
Monta Vista Linux カーネル 2.4.17
samba Version 2.2.11-ja-1.0

使用されているCPUはPowerPC 603e(266MHz)で、昔のMacや組み込み機器で活躍しています。クロックで考えるとPentium II世代といったとこでしょう。RAM128MB、消費電力は25Wなので、電力使用量はパソコンの10分の1程度になると思われる。
現在Athlon64 3000+ Windows XP AN_HTTPD で運用しているサーバーを省電力を目指してKURO-BOXサーバへ移行させる。

Webサーバーを稼動させる。

設定ファイルを作成する(thttpd2.conf)

概要

玄箱設定用のwebは、標準でインストールされている、thttpdを使っています。設定用のwebは/www ディレクトリのindex.htmです。webで公開するディレクトリは、/etc/thttpd.confファイルで指定します。下記は標準でインストールされている/etc/thttpd.confファイルの中身です。

dir=/www
user=root
logfile=/var/log/thttpd.log
pidfile=/var/run/thttpd.pid
port=8000
charset=""
cgipat=/cgi-bin*/*

上記ソースのdir=/www を任意のディレクトリに変更して、thttpdを起動しなおせば任意のディレクトリをweb上に公開できます。

thttpd.confファイルのコピー

玄箱設定用のwebは必要なので、設定ファイルをバックアップします。ファイル名はthttpd2.confとします。ファイルの編集はtelnet上では困難なため、Windowsパソコンで見えるディレクトリにコピーし書き込み禁止属性を解除します。標準では/mnt/shareディレクトリがWindows上で \\kuro-box\share として見えます。windows上でコマンドプロンプトを開き、telnetを起動します。下記のように入力します。(赤色が入力内容)標準ではログイン名はroot,パスワードは設定されておりません。
telnet kuro-box
KURO-BOX login:root
Password:
cp /etc/thttpd.conf /etc/thttpd2.conf
cp /etc/thttpd.conf /mnt/share/thttpd.conf
chmod 777 /mnt/share/thttpd.conf

Windows上でthttpd.confを編集

秀丸等の改行コード(LFのみ)を扱えるエディタで編集します。WindowsやDOSでは改行はCR+LFで表現しますが、LinuxではCRのみで表現します。したがってメモ帳で開くと改行(CR)が見えません。ちなみに保存すればCRはちゃんと残っています。もしメモ帳を使う場合は、改行をしたり、改行コードを消したりしなければなんとか編集できます。(赤字が修正箇所)/mnt/share/www がweb上に公開されるディレクトリとなります。

dir=/mnt/share/www
user=root
logfile=/var/log/thttpd2.log
pidfile=/var/run/thttpd2.pid
port=80
charset=""
cgipat=/cgi-bin*/*

thttpd.confファイルを/etcへコピー

編集したファイルをtelnetで/etcディレクトリへコピーします。属性を-rw-r--r--にします。

cp /mnt/share/thttpd.conf /etc
chmod 644 /etc/thttpd.conf

thttpdの再起動

編集したファイルの内容をtelnetでwebサーバーに反映させます。

/etc/init.d/thttpd restart

htmlファイルを/mnt/share/wwwにコピー

windows上で\\kuro-box\share\wwwへhtmlファイルをコピーします。ここでは、index.htmとします。
thttpdでは、webに公開するファイルは、CGI以外は実行属性を解除しなければなりません。telnet上で以下のように入力します。

chmod a-x /mnt/share/www/index.htm

windows上のwebブラウザで http:.//kuro-box/index.htm を閲覧し、表示されれば成功です。

CGI(Perl)を動作できるようにする。

Perlのインストール

玄箱にはPerlがインストールされていますが、いくつかのファイルが抜けています。よって、玄箱セットアップディスク(CD)からPerlをインストールします。
CDよりbinaryフォルダを \\kuro-box/shareへコピーします。その後、perl-5.6.1.tar.gz を解凍します。

tar zxvf /mnt/share/binary/perl-5.6.1.tar.gz -C /

CGIのテストdaycount

daycountのダウンロード

CGIのソースを用意します。ここではdaycountというカウンタとしてみました。
上記リンクよりdaycount.lzhかdyacount.zipをダウンロードし解凍します。

cgi-binへコピー

cgi用のディレクトリcgi-binを作成する。

mkdir /mnt/share/www/cgi-bin

カウンタ用の画像ファイルを格納するディレクトリを作成する。

mkdir /mnt/share/www/cgi-bin/gif1
mkdir /mnt/share/www/cgi-bin/gif2

その中にダウンロードしたファイルとカウンタ用の画像ファイルをコピーします。以下のようなディレクトリ構成になります。

/mnt/share/www --+-- index.htm
                 +-- cgi-bin    --+-- daycount.cgi
                                  +-- daucount.dat
                                  +-- gifcat.pl
                                  +-- gif1         --+--  0.gif ~ 9.gif
                                  +-- gif2         --+--  0.gif ~ 9.gif

CGIファイルの改行コードの変更

daycount.cgiの改行コードはLF+CRとなっているため、実行すると500エラーがでます。したがって、nkfコマンドで改行コードを変換します。出力コードはShift-JISとします。nkfコマンドでリダイレクトで保存するため、元のファイルの名前を変更しておきます。

cd /mnt/share/www/cgi-bin
mv daycount.cgi d.cgi
nkf -Lu -ed.cgi > daycount.cgi
rm d.cgi

パーミッションの設定

thttpdでは決められたパーミッションでしかperlは動かないので修正します。

chmod 705 daycount.cgi
chmod 606 daycount.dat
chmod 604 gifcat.pl
chmod 744 gif1/*.gif
chmod 744 gif2/*.gif

CGIのテスト

http://kuro-box/cgi-bin/daycount.cgi?check を閲覧して、正常に表示されれば、動作している。

ntpの設定

概要

玄箱の時計の水晶はあまり精度がよくない。VCXOを使っており、32.52MHzの水晶を電圧でずらして32.768MHzとして使っている。私の玄箱は1日で2分ほどずれることもある。
あまりずれると気持ち悪いので、インターネットのタイムサーバーに30分おきにアクセスし時計を補正することとした。

ルーターのポート123を開ける

玄箱のIPに対して送信受信ともに123番を許可します。指定方法は各ルーターの説明書に従ってください。

ntpのインストール

玄箱セットアップディスク(CD)からntpをインストールします。
CDよりbinaryフォルダを \\kuro-box/shareへコピーします。その後、ntp-4.0.99g.tar.gz を解凍します。

tra zxvf /mnt/share/binary/ntp-4.0.99g.tar.gz -C /

タイムサーバを選択する。

インターネットでタイムサーバを探し、信頼できそうなサーバを3個ほど選びます。
タイムサーバより日時が取得できるか確認する。ここでは、福岡大学と東京大学をを選んだ。サーバの指定時に名前で指定すると、起動の順序によってはdnsが起動されていないときに名前解決ができなくてエラーとなるので、設定時にはIPアドレスを直接入力した。

ntptrace clock.nc.fukuoka-u.ac.jp
ntpdate  clock.nc.fukuoka-u.ac.jp

上記のコマンドが正常に動作し、日時が表示されればタイムサーバが使用できる。

ntpに使用するタイムサーバを登録する。

使用するタイムサーバは /etc/ntp.conf に記述する。すでにこのファイルが存在する場合は、削除する。ファイルは、windowsで見える位置にコピーするか、configure-ntpコマンドを使う。

rm /etc/ntp.conf
configure-ntp
another?(<entre) to end)
>133.100.9.2
another?(<entre) to end)
>133.100.11.8
another?(<entre) to end)
>130.69.11.8
another?(<entre) to end)
>

もし、入力間違いした場合は、configure-ntpコマンドを終了し、ntp.confファイルを削除してconfigure-ntpコマンドを再度実行する。

ntpの自動起動を設定する。

initdconfig --level 2 ntp on

玄箱を再起動する。

reboot

再起動すると、telnetが切断されるので再度DOSプロンプトで下記のコマンドを実行する。

telnet kuro-box
KURO-BOX login:root
Password:

ntpが実行されているか確認する。

ps x | grep ntp

この場合、タイムサーバの数+1のntpdが存在するはずである。

動的IPが更新された場合の措置

プロバイダに動的IPを割り当ててもらっている場合、IPが更新される場合があります。この場合、名前や元のIPではアクセスできなくなります。無料でドメイン(サーバーの名前)をくれる業者によって、方法は違いますが、あるその業者のホームページアドレスに自分のユーザー名やパスワードを付加してを一定時間ごとにアクセスするごとに自分のIPがその業者に送られ、変更があった場合は、DNSサーバーの変換表を更新します。Linuxの場合、wgetコマンドによって、web上のhtmlファイルを読み込めますので、これに対応した業者が便利です。wgetはcronコマンドにて一定時間ごとに起動させます。

ドメインを取得する。

私の場合、http://ddns.j-speed.netを使用しました。現在では、新規に無料サブドメインを登録できないようになっています。

IP更新スクリプトをドメインから入手します。

wget --delete-after -q http://ddns.j-speed.net/quickUpdate.jsp?uparams=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

J-SPEEDの場合で、上記の赤の部分がユーザーによって異なります。

/etc/crontabファイルに登録する。

crontabファイルに時間とコマンドを指定するとその時間にコマンドが実行されます。私の場合、00分と20分と40分に上記コマンドを実行するようにしました。たとえば毎時の00分にwgetコマンドを起動するためには、

00 * * * * root wget --delete-after -q http://ddns.j-speed.net/quickUpdate.jsp?uparams=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

を/etc/crontabに追加します。分 時 日 月 曜日 ユーザー名 コマンド  の順で記述します。任意の時間にする場合は * 、任意の間隔で指定する場合は、*/15 の様に指定します。

crontabへの追加は/etc/crontab ファイルをwindowsから見える場所にコピーし、その他ユーザの書き込み権限を許可します。下記のコマンドを入力します。

cp /etc/crontab /mnt/share
chmod 666 /mnt/share/crontab

秀丸のようにLFのみの改行が扱えるエディタがない場合は、次のコマンドで改行コードをLF+CRに変換します。

nkf -Lw -s /mnt/share/crontab > /mnt/share/c.txt
chmod 666 /mnt/share/c.txt

LFのみの改行が扱える場合はcrontabを、扱えない場合は、先ほど変換したc.txtに下記の内容を最後に追加します。

*/15 * * * * root wget --delete-after -q http://ddns.j-speed.net/quickUpdate.jsp?uparams=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

LFのみの改行が扱えるエディタを使わなかった場合は、次のコマンドで改行コードを変換します。

nkf -Lu -s /mnt/share/c.txt > /mnt/share/crontab

編集したcrontabを/etcディレクトリへコピーします。

chmod 644 /mnt/share/crontab
cp /mnt/share/crontab /etc

玄箱を再起動する

下記のコマンドを入力する。

reboot

しばらくして、実行されているかログファイルを閲覧する。

cat /var/log/cron

rootでログインできなくする。

Linuxではrootが管理者であり、パスワードがわかればシステムをのっとられる。よって、rootでログインできなくする。rootへ昇格するには、通常ユーザーでログインして、su - コマンドで昇格する。
rootでログインする場合は、パスワード1個で管理者になれるが、ログインできなくするとユーザー名とそのパスワード、rootのパスワードと3回の入力が必要となる。

root以外のユーザを作成する。

rootでログインできなくするので、ほかのユーザーが必要となります。

useradd ユーザー名
passwd ユーザー名
Enter new UNIX password:パスワード
Retype new UNIX password:パスワード

そのユーザーでログインし、rootに昇格できることを確認する。

login ユーザー名
Password:パスワード
su -
Password:rootパスワード

/etc/securettyファイルを編集してrootでログインできなくする。

上記ファイルをWindowsで見える場所に移動させる。ついでに改行コードをWindowsに変更。

nkf -Lw -s /etc/securetty > /mnt/share/s.txt

メモ帳でs.txtを開き、ファイルの最後のほうの下記の行を#でコメントアウトする。

編集前 編集後
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
#pts/0
#pts/1
#pts/2
#pts/3
#pts/4
#pts/5

元のファイルに上書きする。

nkf -Lu -s /mnt/share/s.txt > /etc/securetty

即、rootでログインできなくなるので、別ユーザでログインして動作を確認する。

パーミッション

sambaユーザ名とLinuxユーザ名共に登録されているユーザ名でログインしたwindowsでsamba上で共有されている場所にファイルを作成すると,windowsユーザ名が所有者になり、パーミッションは777(rwx rwx rwx)となる。webを見ている場合は、その他ユーザの権限でページ読み取る。その他ユーザには書き込み権限は不要である。htmファイルには実行属性を不要である。
初期パーミッションとwindows側で編集した場合のパーミッションの変化を書きにまとめる。

  ディレクトリの中にwindwos上からファイルを作成できる条件は、
    ディレクトリの所有者と同じ場合は、所有者に書き込み可の属性があれば書き込みできる。書き込みされたファイルは777となる。
     ディレクトリの所有者と異なる場合は、その他ユーザが書き込み可の属性があれば書き込みできる。書き込みされたファイルは777となる。
     グループに属するユーザ名の場合は、グループが書き込み可の属性があれば書き込みできる。書き込みされたファイルは777となる。
     作成されたファイルの所有者をroot変更、グループをusrが属するグループにし、664とした場合、上書きしても664のままである。(所有者とroot以外はパーミッションは変更できない)