綾小路龍之介の素人思考

[Vine Linux] サーバを立てたときのメモ

あっ、ここ端的に言えば、僕の恥と無知を晒す頁でです。だから、この頁の内容を信じてはいけません。こいつバカやってるぜと思いながら読んでください :-D。僕のパソコンはよくフリーズします。だから Windows 2000 を 2 つのパーティションに別々にインストールして、メインに使用する Windows と、メインが故障したときにデータ救出に使う Windows として、使っています。そんなわけで、自分専用のコンピュータを仕事用に使いたくはありません。なぜなら、メイン OS が故障すると、せっかく作った環境を作り直さなきゃいけませんし、重要なデータの保存に信頼が置けないからです。そんなわけで、自宅サーバにインターネットからアクセスできるようにしてみました。自分のパソコンは最低限の環境構築 (Windows 2000 とアップデータ) で済ませて、サーバ上に仕事用の環境を作れば、うれしいじゃないか。

目次

[irq][ath] イーサネットデバイスのIRQが衝突してるってどうよ。

いまのところ、家サーバにはeth0からeth4までの5つのイーサネットデバイスがある。で、IRQがどんな感じで割り当てられているかを確認してみる。

# cat /proc/interrupts

eth0とeth3が同じ行にあるので、eth0とeth3は同じIRQが割り当てられている。つーことは、eth0とeth3を同時に使用できないってことで、できたとしても割り込みが発生しまくるんじゃないかっつーことで。なんかいや。eth0はグローバルネットとの出入口で、eth3は家ネットのメインと直結なので、メインでグローバルネットに出ようと思うと割り込み発生しまくりなのでは。そこまで考えると、なんか引っかかるものがある。やっぱりメインの環境は快適であって欲しい訳で、eth3が使うIRQとeth0が使うIRQを別々にして、さらに1つのIRQを専有させたい。でも、1枚のPCIに4ポート付いているようなデバイスのIRQ固定の方法がわからなった。そこでIRQの専有はあきらめ、メインとつながるポートを替える。今のところ、IRQを専有しているイーサネットデバイスはeth1なので、メインをeth1と直結。

でも、IRQの割り当てって、再起動の度にかわっていたかもしれない。変っていたなら毎回チェックしないとだめか。それもすこし面倒だね。

torrentクライアントをfirewallの内側で快適に使う方法

快適にとはそれなりの速度が出るようにということiptablesのチェインに下を追加。

BTFORWARDADDR=192.168.2.20
PORTSTART=6881
PORTEND=6999 
/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport $PORTSTART:$PORTEND -j DNAT --to-destination $BTFORWARDADDR
/sbin/iptables -A FORWARD -s $BTFORWARDADDR -p tcp --dport $PORTSTART:$PORTEND -j ACCEPT

[eth] イーサネット、サーバアダプタの追加とか交換とか

久しぶりに家ネットのネットワーク構成を変えた。やったぜQuadポートだぜ、家のマシン最強ってか?7本のPCIバスに4つ付けたら28ポート、マジでクールだ。と思っていたらかなりダメですね。基本的なこと忘れてました。たとえば、クロスとストレートの区別とか、IRQとかね。やっぱりRH系のサーバ管理の修行を積む期間はまだ続きそうだな。ほんとうはDebian系に浮気しようかなぁなんて思っていたんだけど。

まず、家サーバを終了。

# shutdown -h now

マシンを開けてPCIのサーバアダプタを追加。それで起動。起動すると、新しいデバイスをチェックしてくれて、デバイスドライバを当ててくれた。起動したら追加したデバイスにIRQが正しく割り当てれたか確認。このときDo ConfigureだろうがRemove Configureだろうが、Do Nothigを選択しない限り、古い設定の内ifcfgは削除、modprobe.confの対応する設定は削除だ。Do Configureすればmodprobe.confは設定してくれるけどifcfgは設定されないので注意が必要かも。

# cat /proc/interrupts

これでIRQと、そのIRQに割り当てられたデバイスの名前が表示される。ここに表示されたデバイスの名前はdmesgに流れたデバイスネームと対応付けられているようだ。だから、IRQ、デバイスネーム、物理アドレスの対応付けは、上だけではダメだ。追加したデバイスの物理アドレスをチェックしなければ。

# demsg | grep eth

これで、今回追加したNICの物理アドレスに対応したデバイスにIRQが割り当てられたかどうかを確認できる。結局うまく割り当てられていなかった。というのは、今回追加したデバイスがにIRQがまったく割り当てられていなかった。デバイスドライバのロードと設定ファイルの作成はシステムの判断にお任せするとして、IRQの割り当てをいじる方向を模索した。

いろいろ調べて判ったことは、LinuxでIRQの割り当てを手作業でするには、デバイスドライバのロードを操作する/etc/modprobe.confの中でoption指定するしかない。つまり、デバイスドライバのオプションでIRQ指定をサポートしていないとIRQの手作業割り当てはできない。今回追加したNICにオートマチックでロードされたドライバはtulipなので、IRQの手作業指定はできない。

ということで、BIOSで指定する。今回追加したNICはQuadポートなので、PCIバスとIRQの対応付けだけだと割り込みの衝突が頻繁に起こりそうだけどしかたあるまい。で、BIOSのそれっぽいメニューでIRQの設定を確認しよう。Vineが起動する前にDELキーを押してBIOSに入る。んで、IRQの設定にいく。PnPサポートOSか?のところをYesにしておく。Noのままだと、それぞれのデバイスにひとつづつのIRQを割り当てそうな予感。これで、LinuxのPnPサポートに期待してみる。んで、BIOS変更内容を保存して、再起動。家サーバはいまだにISAバスがあって440BXとかだったせいか、デフォルトの設定ではPnPがNoになっていた。時代を感じるね。

改めて再起動して設定を確認する。

# dmesg | grep eth
# cat /proc/intrrupts

こんどはOk。IRQの重複はあるけど、適当に割り当てられている。まぁISAにデバイスは接続していないからね。不確定な情報だけど、PCIバスには4本の割り込み線が割り当てられていて、同じPCIバスに付いているデバイスネームが同じIRQをもつと本当の意味での同時使用はできなかったと思う。もし4つのデバイス全てが同じIRQを持っていたとしても、イーサネットデバイスなんかの場合なら割り込みのせいでちょっとネットワーク混んでるかなという位なのでよしとしよう。また、デバイスによっては単独のデバイスが単独のIRQを専有しないとダメな場合もあるということだ(たとえばISAバスに取り付けられたデバイスは単独デバイスが専用のIRQアドレスを持つ)。この場合はマニュアルにそう書いてあるそうな。マニュアルを読めということだね。4本の割り込み線があるので1つのPCIカードに4つ以上のデバイスがあっても5つ目以降は使えないということかな。5つのイーサネットポートが付いたデバイスを見ないのはそんな理由かな。

IRQの割り当てをクリアしたら、次にするべきなのはイーサネットデバイス使用の可否だ。デバイス使用の可否は/etc/sysconfig/network-scripts/ifcfg-eth*で操作する。このとき、ファイル名のeth*はdmesgに流れたデバイスネームと対応、ファイル中にかかれたHWADDRESはそのデバイスネームに対応した物理アドレス。ファイル中にかかれたDEVICEはわかりやすければOK。外に出るためのデバイスと家ネットのノードからのアクセスを受け入れるデバイスはifcfgが少し違うだけだ。つまり、家ネットに開放したポートはIPアドレスをローカルアドレスにしてStaticにしておくことだ。最後にイーサネットデバイスをUPする。IRQの割り当てに失敗しているとここでも失敗する。そんな場合はdevise is too busyとかのエラーを吐いてくれたと思う。

# /etc/init.d/netwark restart

最後にdhcpdの設定を変更する。dhcpdが監視するデバイスを指定するために/etc/sysconfig/dhcpdを編集、それらのデバイスに割り当てられたアドレスとネットマスクを元に/etc/dhcpd.confを編集。dhcpdの再起動。

# vi /etc/sysconfig/dhcpd
# vi /etc/dhcpd.conf
# /etc/init.d/dhcpd restart

[network] IPアドレス、サブネットマスク、ネットワークアドレス、ブロードキャストアドレス

あんまり信用しちゃダメよ。例えば、ある NIC に割り当てられた IP アドレスが 192.168.1.1 で、サブネットマスクが 255.255.255.0 だとする。これらの情報からネットワークアドレスとブロードキャストアドレスが決まる。まずはそれぞれ 2 進数で表す。

(192.168.001.001)_{10} = (11000000.10101000.00000001.00000001)_{2}
(255.255.255.000)_{10} = (11111111.11111111.11111111.00000000)_{2}

で、各ビットごとの AND をとる。AND の真偽値表は下で定義。

AND の真偽値表
A01
000
101

つまり、両方 1 の場合を除いてそれ以外の場合は全部 0 ということ。話を戻して、AND をとる。

(192.168.001.000)_{10} = (11000000.10101000.00000001.00000000)_{2}

これがネットワークアドレスと定義されているものだ。同じネットワークアドレスをもつ NIC は同じネットワークに所属している。では、上であげたサブネットマスクだと、いくつのアドレスが同じネットワークアドレスを持つだろうか。AAA.BBB.CCC.0 から始まって、1 ビットづつ増やしていけば、AAA.BBB.CCC.1 も AAA.BBB.CCC.2 も同じネットワークアドレス AAA.BBB.CCC.0 を持つことが確かめられる。

(255.255.255.000)_{10} = (11111111.11111111.11111111.00000000)_{2}
------------------------------------------------------------------
(AAA.BBB.CCC.000)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.00000000)_{2}
(AAA.BBB.CCC.001)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.00000001)_{2}
(AAA.BBB.CCC.002)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.00000010)_{2}
(AAA.BBB.CCC.003)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.00000011)_{2}
(AAA.BBB.CCC.004)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.00000100)_{2}
...
(AAA.BBB.CCC.254)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.11111110)_{2}
(AAA.BBB.CCC.255)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.11111111)_{2}
------------------------------------------------------------------
(AAA.BBB.CCC.000)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.00000000)_{2}

つまり、ビットで表したサブネットマスクにおいて 1 になっている桁の値が 2 つのアドレス間で全て同じだと、2 つのアドレスは同じネットワークアドレスを持つ、ということだ。上の例では、どの 2 つのアドレスを考えても、サブネットマスクで (11111111.11111111.11111111)_{2}となる桁は 2 つのアドレスで同じ値 (aaaaaaaa.bbbbbbbb.cccccccc)_{2}を持っている。すると、(AAA.BBB.CCC.001)_{10}から (AAA.BBB.CCC.255)_{10}まではサブネットマスク (255.255.255.000)_{10}との AND 演算で (AAA.BBB.CCC.000)_{10}になる訳だ。このようなアドレスは 256 個ある。

さて、サブネットマスクを変えれば同じネットワークアドレスをもつアドレスの数を変えられる。サブネットマスクの定義的に、桁の高い側から 1 が続き、初めて 0 が表れたらそれ以降は全部 0 なので、(11111111.11111111.11111111.10000000)_{2}とか、(11111111.11111111.11111111.11110000)_{2}は OK だが、(11111111.11111111.11111111.01001000)_{2}とか (11111111.11111111.11111111.10001010)_{2}は NG である。許されているサブネットマスクとこのときにもてるアドレスの数を考えると下のようになる。

アドレス数とマスク
10進数2進数アドレス数
255.255.255.00011111111.11111111.11111111.00000000256
255.255.255.12811111111.11111111.11111111.10000000128
255.255.255.19211111111.11111111.11111111.1100000064
255.255.255.22411111111.11111111.11111111.1110000032
255.255.255.24011111111.11111111.11111111.1111000016
255.255.255.24811111111.11111111.11111111.111110008
255.255.255.25211111111.11111111.11111111.111111004
255.255.255.25411111111.11111111.11111111.111111102

当然ながら、10 進数で表したアドレスのピリオドで区切られた最後とアドレス数を足すと 256 になっている。このあたりは RFC1878 に詳しい。

中途半端だけど今日はここまで

[4.2] Vineをアップグレードす。

4.1はCD-ROMから導入したけど、4.2がリリースされたので、導入した。まぁそういうこと。いつもどおり、apt lineを書き換えて、アップデートして、アップグレードして、アップグレードの確認をする。

# vi /etc/apt/sources.list
> 4.1とかいてあるところを4.2にするだけ。
# apt-get update
# apt-get dist-upgrade
# cat /etc/vine-release

よくわからないけれど、LinuxマシンからSambaのマウントはできてもlsとかすると「入力/出力エラー」になるという症状が直った(Windowsマシンではマウントできるしファイルも見れるんだけど)。いいこともあるもんだ。

[wl] rootがメールを読む

まずは、postixの設定を変更してmbox形式からMaildir形式に変更しておこう。その訳は、wlがmbox形式を直接読めないからだ。もちろんPOPサーバを立てて、POPサーバを経由すれば読める。でもそうすると、資源の無駄遣いのような気がする。

それが終わったら、テンプレートをコピーしてくる。

# cp /usr/share/doc/wl-*.*.*/sample/ja/dot.wl ~/.wl
# cp /usr/share/doc/wl-*.*.*/sample/ja/dot.folders ~/.folders
# cp /usr/share/doc/wl-*.*.*/sample/ja/dot.address ~/.address

~/.wlを編集する。

# vi ~/.wl
> (setq wl-from "")を書き換え。

~/.foldersを編集する。

# vi ~/.folders
> .  "Inbox"を最後に追加。

emacsを起動させる。

# emacs
> Esc-x wl で起動。
> S で~/.Maildirの内容を読む。new内のメールがcurに移動される。

[alsaplayer] 目覚し時計

サーバなんだから、目覚しをかけておくのも簡単。まずは目覚し用スクリプトを書いた。かなり適当。

# vi wakemeup.sh
# cat wakemeup.sh
cd /home/hoge/mp3
ls 00?_*.mp3 > 0.m3u
ls 01?_*.mp3 > 1.m3u
ls 02?_*.mp3 > 2.m3u
ls 03?_*.mp3 > 3.m3u
ls 04?_*.mp3 > 4.m3u
ls 05?_*.mp3 > 5.m3u
ls 06?_*.mp3 > 6.m3u
alsaplayer -i text -P `date +%w`.m3u >> /dev/null &

書いたスクリプトを走らせて動くかどうかを確認。

# sh ~/wakemeup.sh

cronに追加。

# crontab -e
> 00 7 * * * sh ~/wakemeup.sh
> 00 9 * * * alsaplayer --quit

終了をかいておかないと延々となりつづける。-Pがあるので、プレイリストをループさせる設定で起動しているため。--quitが必要。

[wget] Webページに書かれたリンクから特定の拡張子のファイルのみダウンロードする

例えば、ポッドキャストのページでは各番組がmp3ファイルにリンクされているので。

$ wget -r -e robots=off -H -l 1 -D stream.hoge.co.jp -A .mp3 -nd http://www.hoge.co.jp/podcast/hage.html

-rは再帰ダウンロード、-Hはホスト名の違うとファイルをダウンロード、-Dはどのホストからのダウンロードを許可するか、-Aはどの拡張子を許可するか、-lはリンクをたどる深さ、-eはwgetコマンド。

Sambaサーバの共有ディレクトリをマウント

サーバ機はVineLinux4.1、クライアント機もVineLinux4.1。クライアント機でmount -t smbfsするのにはサンバクライアントが必要なので、予めインストールしておく。

[root@client]# apt-get install samba-client
[root@client]# echo //server/hoge /home/hage/mnt/hoge/ smbfs username=hoge,password=HOGEPASSWD,uid=hoge,gid=hoge 0 0>> /etc/fstab

uid=hogeとgid=hogeがないとファイルの編集ができない。rootでマウントされる。

[mv] ディレクトリの名前を変更

いまさらながらだが、判ったことがある。ディレクトリの名前を変更する時にdistination側がない時にどうすればいいか。答えはディレクトリに/をつけない。

$ ls
SOURCE/
$ mv SOURCE DISTINATION
$ ls
DISTINATION/

[fdisk][mkfs][ext3][hdd] ハードディスクの増設

HDDをもらったので自分のLinuxに増設した。もらったHDDはNTFSでフォーマットされていたが、mountできたことに驚き。それはそれとてとにかく領域確保。

# fdisk /dev/hdd

フォーマットの時に役立つのがm。mはヘルプを表示してくれる(書いてあるけど)。これで確認しつつ進めばOK。まずはすでにある領域(NTFS)の削除のためにd。領域が一つしかなければ何も聞かれずに領域削除。いくつもあるときはどれを削除するか聞かれる。次に新しい領域を作るためにn。HDDのどこからどこまでを領域として確保するか聞かれるので答える。Enter2回押しでHDDに単一の領域作成。確認のためにp。領域ができたらフォーマットのとこがLinuxになっている。最後にw。確認した内容を書き込んで終了。

領域の確保ができたら領域をフォーマット。

# mkfs -t ext3 -c /dev/hdd1

-tでフォーマットの種類。-cでフォーマット以前の不良セクタチェック。不良セクタチェックはかなり時間がかかる。60GBのHDDで12時間くらい。ファイル作ってから気づくのも嫌だからチェックかけといた方がいいと思う。

個人用のコンピュータなので、このHDDを使うアカウントは1つだけ。でもmountできるのはrootだけ。ということでmountしてmountしたディレクトリの所有者とグループを変更しておく。こうしないと、一般ユーザで増設したHDDが使えない。

# mount /dev/hdd1 /home/hoge/mnt/hdd1
# chown hoge /home/hoge/mnt/hdd1
# chgrp hoge /home/hoge/mnt/hdd1
# chmod 755 /home/hoge/mnt/hdd1

これでいつもどおり一般ユーザでこのHDDが使えるようになった。

fsckとかあるらしい。調べておこう。

PPPoEでつなぐ時の注意

NTTのB flet'sにしました。プロバイダはhi-hoです。NTTから送られてきたルータはPPPoE対応のルータですが、予めファイヤーウォールが組み込まれていて、設定がわからなかったので、サーバ機にPPPoEルータ機能をつけてしまえば問題無しのはず。これから少しずつサービスを提供して使用感のご報告を。

NTTから送られたルータをモデムとして使用すればOK。要は、PPPoEブリッジ機能を有効にすればいい(おそらく初期値で有効になっているはず、また、PPPoEの認証に必要な情報をルータに入力する必要も無いはず。)。

次に、モデムと物理的に繋がるLANカードの設定を下のようにした。LANカードの物理アドレスはdmesg | grep ethとかすれば見つかるはず。これらの設定は不可欠。おそらく、IPとかを手打ちで設定したりするとおかしくなる。良くある解説サイトではONBOOT=noと設定しているが家ではONBOOT=yesとしないとうまくいかなかった

# ifcfg-eth0
DEVICE=eth0
HWADDR=00:00:00:00:00:00
ONBOOT=yes

eth0を増設したので順番が1つづづずれてeth1、eth2となった。なので、eth1とeth2の物理アドレスを書き換えた。

$ su
# apt-get install rp-pppoe
# vi /etc/sysconfig/network/ifcfg-eth0
# vi /etc/sysconfig/network/ifcfg-eth1
# vi /etc/sysconfig/network/ifcfg-eth2
# chkconfig pppoe on

設定ミスかもしれないが、再起動してもPPPoEの認証に失敗するのかグローバルIPを取得できない。Yahoo BBのときはブリッジ接続だったから、モデムがあること自体が認証プロセスみたいな感じだった。B flet'sはそうではないようだ。とにかくこの問題に対する解決法は、サーバをリブート、シャットダウンさせないこと。サーバをリブート、シャットダウンさせる時は、同時にモデムの電源を抜いて、数秒待ってから電源を再投入すればなんだかわかんないけどグローバルIPが取得できる。特に、出先から繋いでいる状態でリブート、シャットダウンさせてはいけない。これをやったが最後、2度と出先から繋がらなくなる。

何回かリスタートして設定内容の確認。

[alsa] alsaplayerで音を出す。とりあえずrootで音を出すまで。

ここは結果だけ。いろいろ調べた。まったく昔の人には頭が下がる。これだけめんどくさいことをいちいち手作業でやっったんだから。今じゃユーティリティが全部やってくれるのに。話は変わるけど、Vine Linux 3.2のころは確かaptにalsaplayerが含まれてなかったような気がする。だから昔の記事ではソースからコンパイルしたんだっけ。さて本題。

# apt-get install alsaplayer

これで導入できるのはalsaplayerだけでalsamixerとかは導入されない。ミキサーが使えないと音が出ないと思う。なぜなら、alsaplayerで再生するときの音量は初期値でミュートかかってるから。再生できているんだけど、音が出ないことで悩むこと小一時間。

# apt-get install alsa-utils

これでalsamixerとかalsaconfとかalsactlとかが導入される。vineの標準的なサウンド設定ユーティリティでsndconfというのがあったと思うけどこれは導入する必要なさそう。/etc/modprobe.confはうまく設定されていそうだし。

# alsamixer

ミュートをはずすにはm。音量の調整は上下矢印。設定を保存して抜けるにはEsc。これだけだと再起動した時に設定が元に戻ってしまう。

# alsactl store

再起動したときでも音量、ミュートを先に設定したようにする。これで/etc/asound.stateに現在の設定が保存されて、なおかつ再起動時に/etc/asound.stateから設定が読み込まれる。

[ntp][ntpd][iptables][ntpq] ntpサーバを導入

いつもどおりntpdが導入されているか確認。導入されていなかったので、パッケージ名を確認。

# rpm -qa | grep ntp
# apt-cache search ntpd
# apt-cache showpkg ntp
# apt-get install ntp
# ntpdate -bv ntp.hoge.ac.jp
# hwclock --systohc
# vi /etc/ntp.conf

server 111.111.111.111と追記した。不思議なことにプロバイダのntpサーバがあらかじめ書かれていた。取り合えずネットワーク的に近いNTPサーバを追記。

NTTのB flet'sにかえたらプロバイダのNTPサーバはかかれていなかった。おそらく、プロバイダでNTPサーバを提供していないからだろう。プロバイダはhi-ho。というわけで設定。まずは通信するNTPサーバを選んだ(ntp.hoge.ac.jp)。/etc/ntp.confに下の設定を追記。追記する部分はrestict 127.127.0.1の前。

# /etc/ntp.conf
restrict ntp.hoge.ac.jp
server ntp.hpge.ac.jp

これでntpdの設定はOKのはず。次にiptablesの設定で、ntp.hoge.ac.jpとのudp/123による通信を許可。

# chkconfig ntpd on
# /etc/init.d/ntpd start
# ps -C ntpd
# iptables -A OUTPUT -d 219.188.200.128 -p udp --dport 123 -j ACCEPT
# iptables -A INPUT  -s 219.188.200.128 -p udp --sport 123 -j ACCEPT

[dhcpd.conf] netmaskを指定してIPアドレスを無駄に使わない

無駄遣いするともったいないお化けが出てくるし、ネットワークのレスポンスてきにどうよ。というわけで、netmaskを255.255.255.0から変更してみる。255.255.255.0だと、256-0個のアドレスが使える訳だが、家ネットでそんな大量のマシンは使わない。必須のアドレスとして、ネットワークアドレスとブロードキャストアドレス、さらにルータに割り当てるアドレスで、3つ消費するとして、空きアドレスはせいぜい1つのネットワークあたり4つもあれば十分。3+4=7だけど、2の累乗で表せる7より大きな数で一番近いのは8。ということで8つのアドレスを使えるようにしよう、netmaskは256-8で248だから、255.255.255.248でOKかな。で、指定してみる。

subnet 192.168.1.0 netmask 255.255.255.248 {
        # ルータのアドレスはNICにstaticに割り当てたアドレス。
        # /etc/sysconfig/network-scripts/ifcfg-eth?とかで。
        option routers 192.168.1.1
        # dhcpcが受け取って、オートマチックに設定してくれるサブネ
        # ットマスクとDNSサーバ
        option subnet-mask 255.255.255.248
        option domain-name-servers AAA.BBB.CCC.DDD EEE.FFF.GGG.HHH
        # rangeは必須属性、これが無いと必ず失敗dynamic-bootpはオ
        # プション
        # とりあえずネットワークアドレス192.168.1.0とサブネットマ
        # スク255.255.255.248で割り当て可能なアドレス範囲全てにし
        # てみた。割り当ては大きい方から行われるようだ。ここでは
        # 192.168.1.7から。
        # dynamic-bootpはbootpクライアント(ディスクレスマシンとか
        # 関係がありそうだが詳細不明、普通はBOOTPクライアントには
        # MACアドレスからSTARICなアドレスを割り振るのが普通と思わ
        # れる。)とDHCPクライアントの両方からの要求を受付、その後
        # ろの引数で割り当てるレンジを指定。全ての空きアドレスを
        # クライアントからの要求で割り当てるとすれば、下のような
        # 感じの5個のアドレスになる。
        range dynamic-bootp 192.168.1.2 192.168.1.6
}

まずDHCPクライアントでIPアドレスを返却しておく、その後dhcpdの再起動。DHCPクライアントでアドレス要求して、正しく割り当てられるか確認。

[dhcpd.conf] IPアドレスの割り振りをMACアドレスに対して固定する

IPアドレスの割り振りは新しくつながったPCについては非固定、よくつながるPCはMACアドレスをdhcpd.confに登録してIPアドレスを固定する。

host dog {
hardware ethernet 11:22:33:44:55:66;
fixed-address 192.168.0.2;
}

上記を/etc/dhcpd.confに追加。このときdogがホスト名、11:22:33:44:55:66がMACアドレス、192.168.0.2が割り当てられるアドレスである。

[dhcpd] dhcpサーバを立てる

いつもどおりdhcpパッケージが導入済みか確認(dhcpcdがでたけど、これはdhcpクライアント)。パッケージがaptコマンドで導入できるかを確認、併せて正確なパッケージネームを確認。パッケージの導入。設定ファイルのサンプルをコピーして編集(dnsサーバをプロバイダのものに変更(確認するにはcat /etc/resolv.conf)、MACアドレスとIPアドレスを固定するブロックを全てコメントアウト、nis-domainとdomain-nameをコメントアウト)。起動。ランレベルと起動の設定。

# rpm -qa | grep dhcp
# apt-cache search dhcp
# apt-get install dhcp
# cp /usr/share/doc/dhcp-3.0.4/dhcpd.conf.sample /etc/dhcpd.conf
# vi /etc/dhcpd.conf
# /etc/init.d/dhcpd start
# chkconfig dhcpd on
# chkconfig --list

[acpi][shutdown] shutdown -h nowで電源を落とす

acpiにマザーボード(ABITのBM6)が対応しているか確認。BIOSでACPIをEnabledにしてAPMをNoにした。BIOSのデフォルト設定ではACPIがDisabledでAPMがYesだった。あとはVine Linux 4.1でacpidを使えるようにした。まずパッケージの導入の可否を確認、aptコマンドでパッケージの有無を確認、パッケージの導入、ランレベルと起動の確認、実際にshutdown -h nowして電源が落ちるか確認。

# rpm -qa | grep acpid
# apt-cache search acpid
# apt-get install acpid
# checonfig --list
# shutdown -h now

特別なこと(サスペンドモードとか)をしない限りこれでよさそう。うまくできないばあいは、messagesにメッセージが出る。たとえば、下のようにしてみてメッセージが出るか確認できる。

# grep acpi /var/log/messages

サーバのをiptablesでNATルータ化する

/etc/sysctl.conf または /etc/sysctl.d/*.conf を編集してパケット転送を許可 (net.ipv4.ip_forward = 1)。iptables の nat テーブル、POSTROUTING チェインに MASQUERADE を設定。プライベートアドレスを WAN に出さないように設定 (3 行)。ローカルホストアドレスを WAN に出さないように設定。

# echo net.ipv4.ip_forward=1 >> /etc/sysctl.d/local.conf
# iptables -t nat -A POSTROUTING -j MASQUERADE
# iptables -A OUTPUT -o eth0 -d 10.0.0.0/8     -j DROP
# iptables -A OUTPUT -o eth0 -d 176.16.0.0/12  -j DROP
# iptables -A OUTPUT -o eth0 -d 192.168.0.0/16 -j DROP
# iptables -A OUTPUT -o eth0 -d 127.0.0.0/8    -j DROP

パケットが NAT テーブルを通って MASQUERADE されると、パケットは OUTPUT チェインにいく。このとき、distination はそのまま、source はサーバの WAN から見たアドレスに書き換え、という処理が行われるので (多分)。さて、ここまでの設定では FQDN で WAN に出れない。FQDN と IP アドレスの相互変換を行う DNS サーバに FQDN はついていない (多分) ので、クライアントの DNS サーバ設定は手作業でしておく。下のようにしてリゾルバの IP アドレスを確認できる。

cat /etc/resolv.conf

[dhcpcd] ipアドレスの返却をするコマンドはdhcpdではなくdhcpcd。

よく間違えるんですよ。備忘録としてメモっときます。LinuxでIPアドレスを解放(返却)するには下のようにする。

# dhcpcd -k eth0

eth0経由でssh接続された端末から上のコマンドを発行すると、発行直後から接続は確立されなくなり、以降の操作ができない。だから、ipアドレスの開放を行ってシャットダウンしたい場合とかはコマンドをシェルスクリプトにしておけばいい。

# echo "dhcpcd -k eth0" > releaceip.sh
# echo "shutdown -h now" >> releaceip.sh
# sh releaceip.sh

これでipアドレスの解放後にマシンをシャットダウンできる。こうすることで、DHCPサーバにプールされたipアドレスが1つ増えて、MACアドレスの違うNICをネットワークにつなぐと返却されたIPアドレスを新しいNICに割り当ててくれるかなと思った。でも、うまくいかなかった。新しいNICにはIPアドレスが割り振られず、新しいNICを搭載したマシンでネットワークの再起動コマンドを叩かないといけなかった。

[samba] Sambaを立てる

せっかくのサーバだから、共有HDDにできるとうれしい。sambaサーバを導入して、iptablesを適当にセットするまで。まずはSambaの有無を確認、表示が出なかったのでSambaサーバを導入する。Sambaがapt-getできるか確認、たくさん出てきたので該当しそうなパッケージを選んで依存関係を確認、依存関係を確認したら(見ただけだけど、余分なものをインストールしないためにな。)パッケージの導入。結構サイズが大きかった、26.3MBytesもあった。

# rpm -qa | grep samba
# apt-cache search samba
# apt-cache showpkg samba
# apt-get install samba

パッケージの導入が済んだら、ランレベルと起動の確認、少なくともランレベル3と5で起動してほしいのでそのように設定(chkconfig --add smbではうまくできなかった。オプション違い?)、Sambaを使用するユーザの追加、Windowsで接続の確認。

# chkconfig --list
# chkconfig smb on
# chkconfig --list
# smbpasswd -a hoge

[tty][ps] 実行中のプログラムとそれに割り当てられた端末

シェルから実行したプログラムには制御端末が割り当てられるわけなのだけれど、screenを使っていたりいくつもシェルを走らせているとあのプログラムに戻りたいのだけれどどの制御端末かわからなくなってしまうことがある。そんな場合は

$ ps wax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:30 init [2]  
...
32677 pts/1    R+     0:00 ps wax

これで実行中のプログラムとそれにわりあてられた制御端末の番号(pts/1とか)が確認できる。では今触っているキーボードと繋がっている端末は何かを調べるにはttyコマンドである。

$ tty
/dev/pts/1

んで、もしコマンドの制御端末とキーボードと繋がった端末が違っていたらキーボードの繋がっている端末を変えましょうということ。わかりにくいね。

[getty] 仮想コンソールの数を減らす

1個あたり8KBytesとか食うらしいよ、仮想コンソールって。X環境が起動しない場合のVine Linux 4.1やDebian etchでは、デフォルトで6つの仮想コンソール(tty1--tty6)がキーボードからのログインのために待機している。それぞれの仮想コンソールはAlt+F1からAlt+F6で切り替えることが出来る。

SystemV init

$ ps wax | grep mingtty
$ w

例えば、Vine Linux 4.1の場合、psコマンドで6つの/sbin/mingttyが出てくる。Debian echの場合は/sbin/gettyだ。wコマンドではログイン中のユーザが使っている端末のコンソール番号(tty1等)とユーザが確認できる。とにかく仮想コンソールの数を減らそう。

# vi /etc/inittab
# /sbin/init q
# ps wax | grep mingtty

これで再起動なしに仮想コンソールの数を減らすことができた。/etc/inittabの編集作業のあとに再起動してもよい。ssh接続して全ての仕事を行うのなら6つの仮想コンソールは1つも使わないので全て無駄だが、トラブル発生の際にキーボードでログインする必要も出てくるだろう。そのため、1つ以上の仮想コンソールは残しておくべきだと思う。/etc/inittabの編集では、/sbin/mingttyの含まれる行(6行)の内の下から5行をコメントアウトする。全てコメントアウト(仮想コンソールの数を0にする)すると、マシンにつながっているキーボードからログインできなくなる。マシンに直接つながっているキーボードとディスプレイを使ってログインしたい場合は仮想コンソールの数を1つ以上残しておく必要がある。ssh接続した場合は仮想コンソールは使えないのでAlt+F2としても仮想コンソールのように切り替えることは出来ない。いつもは仮想コンソール要らないけど、たまにキーボードとディスプレイを使ってログインしたい場合は、必要なときだけシングルユーザモードで起動して、/etc/inittabを書き換えればよい。仕事が終わったら仮想コンソールの数を元に戻しておくことをお忘れなく。漢な人は、仮想コンソールの数を0にして使ってください。僕はssh接続メインのマシンは1個で、キーボードログインメインのマシンでは2個に設定することが多いです。

systemd init

デフォルトだと 6 つの tty が立ち上がるので、この数を1つにする。

設定変更前の状態確認。

$ ps -f -C agetty
UID        PID  PPID  C STIME TTY          TIME CMD
root       414     1  0 14:49 tty6     00:00:00 /sbin/agetty --noclear tty6 linux
root       415     1  0 14:49 tty5     00:00:00 /sbin/agetty --noclear tty5 linux
root       416     1  0 14:49 tty4     00:00:00 /sbin/agetty --noclear tty4 linux
root       417     1  0 14:49 tty3     00:00:00 /sbin/agetty --noclear tty3 linux
root       418     1  0 14:49 tty2     00:00:00 /sbin/agetty --noclear tty2 linux
root      1379     1  0 14:51 tty1     00:00:00 /sbin/agetty --noclear tty1 linux
# systemctl list-units '*getty*'
UNIT                 LOAD   ACTIVE SUB     DESCRIPTION
getty-static.service loaded active exited  getty on tty2-tty6 if dbus and logind are not available
getty@tty1.service   loaded active running Getty on tty1
getty@tty2.service   loaded active running Getty on tty2
getty@tty3.service   loaded active running Getty on tty3
getty@tty4.service   loaded active running Getty on tty4
getty@tty5.service   loaded active running Getty on tty5
getty@tty6.service   loaded active running Getty on tty6
system-getty.slice   loaded active active  system-getty.slice
getty.target         loaded active active  Login Prompts

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

9 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

設定を変更して永続化。設定の永続化を確認するために再起動。

# systemctl disable getty-static.service
# systemctl mask getty-static.service
Created symlink from /etc/systemd/system/getty-static.service to /dev/null.
# systemctl list-unit-files '*getty*'
UNIT FILE                STATE
console-getty.service    disabled
container-getty@.service static
getty-static.service     masked
getty@.service           enabled
serial-getty@.service    disabled
getty.target             static

6 unit files listed.
# systemctl reboot

再起動後の状態確認。OK。

# ps -f -C agetty
UID        PID  PPID  C STIME TTY          TIME CMD
root       399     1  0 15:13 tty1     00:00:00 /sbin/agetty --noclear tty1 linux
# systemctl list-units '*getty*'
  UNIT                 LOAD   ACTIVE   SUB     DESCRIPTION
● getty-static.service masked inactive dead    getty-static.service
  getty@tty1.service   loaded active   running Getty on tty1
  system-getty.slice   loaded active   active  system-getty.slice
  getty.target         loaded active   active  Login Prompts

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

4 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

[ssh-keygen] ssh鍵を作る

以前書いた記事の焼き直し。このくらい書いておけば記憶できるだろう。sshd_configにてパスワード認証を不許可にした場合には、秘密鍵を持っていないとログインできない。sshd_configを書き換えたらすぐにやっておくこと。鍵の種類はrsa、長さはデフォルト(確か2084ビット)、パスフレーズ(ログインパスワードにあらず。パスフレーズはログインパスワードと同じである必要はない。)を指定、生成された秘密鍵と公開鍵を確認、公開鍵を自分の鍵輪に追加、秘密鍵をクライアントPCにコピー、クライアントから接続確認。

$ ssh-keygen -t rsa
$ ls -l ~/.ssh/
$ cat ~/.ssh/id_rsa >> ~/.ssh/authorized_keys
$ mkdir ./mnt/
$ su
# mount /dev/fd0 ./mnt/
# exit
$ cp ~/.ssh/id_rsa ./mnt/
$ su
# umount ./mnt/
# exit

ssh-keygenだけでもOK、鍵の種類のデフォルトはRSAだから。フロッピードライブつけといてね。フロッピーにコピーした秘密鍵をputty.exeで使うために変換した。そのためのソフトがputtygen.exe。鍵の種類を選んで、LOADボタンでフロッピーディスク内の秘密鍵を選択、秘密鍵のセーブをSave Private Keyで行った。putty.exeで接続するときはセーブした秘密鍵を指定しておくことを忘れなく。

[iptables] 22番ポートへのアクセスのみを許可

sshdをインストールしたことだしな。sshdの監視する22番ポートのみを空けよう。これでやっとディスプレイからおさらばできる。1行ごとに、ルールの削除、ユーザ定義チェインの削除、INPUTは基本的にDROP、OUTPUTは基本的にDROP、FORWORDは基本的にDROP、コネクションの確立されたパケットはACCEPT、22番ポートに入ってくるパケットの許可、22番からの出て行くパケットの許可、設定の保存、保存された設定で再起動、チェインとルールの確認。

# iptables -F
# iptables -X
# iptables -P INPUT   DROP
# iptables -P OUTPUT  DROP
# iptables -P FORWARD DROP
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT  -p tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
# /etc/init.d/iptables save
# /etc/init.d/iptables restart
# iptables -L

これでもいいが、このままだと、外に出れない。だから、apt-getとかできない。というか名前解決できないので、vinelinux.orgとかやってもシステムに理解されない。セキュリティを高めるという目的でiptables導入したのに、パッケージの更新ができないんじゃセキュリティホール有りで運用することになってしまうので、よろしくない。というわけでFORWARDとOUTPUTはACCEPTでもいいかもしれない。いやもちろん--dport 80とかすればいいんだけど。

[iptables] pingのチェック

サーバに接続できない。pingが通らない。サーバまでpingが到達したのか知りたい。そんなときは、iptablesのチェインをフラッシュして、iptablesでINPUTのログをとるようにして(画面にログが出る、messagesにも出力される。)、INPUTチェインにLOGが登録されたかを確認。pingを打つとその旨表示される。確認が終わったらiptablesの再起動をお忘れなく。

# iptables -F
# iptables -A INPUT -j LOG
# iptables -L

[iptables] ファイヤーウォール(iptables)を外す

ipablesのチェインをフラッシュする。ということで下。これだけだとユーザ定義チェインが残る。気持ち悪い人はその下。

# iptables -F
# iptables -X

ファイヤーウォールを外して外のネットワークに繋がってはいけませんよ。不貞な輩がいますから。元に戻したい時は、下。こうすれば、ファーやーウォールのチェインを最後に保存した時の状態で再起動されます。

# /etc/init.d/iptables restart

[DHCP] 家のネットワークにDHCPサーバを導入しようとしたけどしなかった

その前に小規模なネットワークにDHCPサーバが必要か。否。というわけでこの記事は破棄。だってそんなにいっぱいマシンがあるわけじゃないから、手作業で割り振ってもいいじゃない。

[ifcfg] NICを差し替えたり、増設したりした時に設定する項目

Vine Linux 4.1はマシンの構成が変わると起動時教えてくれる。古い設定も新しい設定も"Do Nothing"しておいて、手書きで書き換える。といってもそんなに大きく書き換えない。せいぜいifcfg-eth*を書き換えるくらいだ。まずはドライバがそろっているかを確かめなければいけないけど、これはすんでるってことで進む。動作実績のあるものを買ってくるなり、もらってくるのがいい。特殊なやつだとドライバの設定が必要になるかも。お目にかかったことないけど。設定はMACアドレスを書き換えるだけ。増設した場合はNICに割り振るIPアドレスとかネットマスクとかが最低限必要。とりあえずNICのMACアドレスを調べるために下のようにした。

# dmesg | grep eth

で、表示の中からそれっぽいもの00:11:22:33:44:55とかを/etc/sysconfig/network-scripts/ifcfg-eth*とかに書き込む。

# echo HADDR=11:22:33:44:55 >> /etc/sysconfig/network-scripts/ifcfg-eth1

これで設定終了。設定反映と確認のために。

# /etc/init.d/network restart
# ifconfig

[ifcfg-eth1] eth1にIPアドレスを割り振る

Vine Linux 4.1をインストールした時に聞かれたかもしれないけど。まぁ手作業で割り振りましょう。

echo "IPADDR=192.168.0.1" >> /etc/sysconfig/network-scripts/ifcfg-eth1
echo "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth1

viで書き換えたほうが良いかも。ONBOOT=yesにしないとnetwork restartした時にbring upしてくれない。

[postfix]

[postfix] /etc/postfix/main.cfの設定を変更してMaildir形式に

Maildir形式にする。そうしておけば、wlで読めそうな気がする。まずは各ユーザのホームディレクトリにMaildirをつくる。オーナーとグループはユーザの所属するもので、パーミッションは755かな。700でもいいかな?

$ mkdir ~/Maildir
$ chown hoge ~/Maildir
$ chgrp hoge ~/Maildir
$ chmod 0755 ~/Maildir

rootになって、main.cfの編集。

# vi /etc/postfix/main.cf
> ...
> home_mailbox = Maildir/
> ...
> mail_spool_directory = /var/spool/mail
> ...

設定を反映させるためにpostfixの再起動

# /etc/init.d/postfix restart

[postfix] root宛のメールを外部のアドレスに転送

毎日サーバにログインすればいい。そしてそれが最良。メールなんていうセキュリティ駄々もれのツールを使って外部にデータを転送してしまうのはかなりまずい気もする。いや、まずいぞまずすぎる。もし外部サーバの管理者がメールの内容を見たらどうする。メール中にセキュリティアップデート失敗通知が含まれていたらどうする。あーおそろしや。ここのサーバはセキュリティホールありますよ。といっているものじゃないか。だからこんなことはやっちゃだめだよ。

echo "root:SOMEOME@SOMEWARE.COM" >> /etc/postfix/aliases
newaliases
/etc/rc.d/init.d/postfix restart

[w3m] w3mのインストール

w3mはいいね。最高だよ。パッケージがVinePlusにあるか確認して、導入。

# apt-cashe search w3m
# apt-get install w3m

[date] 現在の時刻を設定する

現在の時刻を正しく設定しないとaptがうまくできないらしい。だから、dateで現在時を確認すると2000年だった。これが問題かも知れない。というわけでdateコマンドで現在時刻を大まかに設定した。確かインストールの最中にそんなメッセージが流れたような気がしたけど完全に忘れてた。manで確認すると、したようなフォーマットを用いて然るべき権限をもったユーザで変更が可能らしい。[]の中身はオプション。

# date MMDDhhmm[[CC]YY][.ss]

2007年3月4日21時23分27秒に設定したかったので、下のようにした。

# date 030421232007.27

現在時刻の設定はうまくできたけど、結局aptはできずじまい。しょうがないので1からインストールやり直した。マザーボードのハードウェアクロックを正しい時間に直して、Vine Linux 4.1のイメージダウンロードして、インストールした。そしたら何の問題も無くaptできた。

もしかすると、起動した時刻(つまりBIOS時刻)が起動時に読み込まれるのかも。ということは、BIOSの電池がいかれていると、起動のたびにBIOSで設定すればいいのかも。

updateとupgradeをcronで自動化

新しいVineになったことだし、インストールされたパッケージのアップデートを行っておかないと外に開放するサーバとしてはセキュリティ的に問題がある。当然ながら、アップデートはこまめに行わないとまずいわけで、アップデートの度にrootでログインするのも面倒だ。というわけでcronで作業を省力化してみようと思う。始めにシェルスクリプトを書いた。関連のページを検索した。

まずはapt lineにextraを追加しておく。Vine Linux 4.1のデフォルトではextraが追加されていないと思う。そのために以下のようにする。 例えば、 extraが無いとpstoeditとかがインストールできない(Vineのパッケージは用意されているのにコンパイルしないと導入できない)。これでは面倒なので、とりあえずやっておこうと思う。

$ su -
# vi /etc/apt/sources.list
> [rpm] http://hoge.com/**/** *** extra
> [rpm-src] http://hoge.com/**/** *** extra
> のようにapt lineの最後にextraを追加する。
# apt-get update

インストール後すぐにやっておくこと。これはセキュリティのためもあるけど、インストールできねーとおもってたらupdateしてなかっただけというミスを減らすため。インストール後はapt-searchで参照するファイルは空っぽ?と思われる。

# echo "apt-get update && apt-get -y upgrade" >> ~/apt.sh
# cat ~/apt.sh
apt-get update >> apt-get -y upgrade

Vine Linux 4.1を最小構成(base system)でインストールした場合、crondはインストールされない。というわけで調べてみた。どうやら、世の中にはcrondとして、vixie-cron、dcron、fcronとあるらしい。ではVinePlusにあるcrondはなにか。

# apt-cashe search cron

答えは、vixie-cronだった。その他のcrondも探したが、見つからない。ということは、apt-getできるのはvixie-cronというcrondのようだ。依存関係をチェックしてcrontabsが含まれているか調べた。

# apt-cashe showpkg vixie-cron

Dependenciesの項を見ると、crontabsは含まれていないようだ。というわけであとからcrontabsを導入することにした。crontabというプログラムはvixie-cronを導入すれば使えるようになる。ということは、crontabsいらなかったかも。crontabというプログラムはctontabsに含まれていると思っていたのは勘違い。

# apt-get install vixie-cron
# apt-get install crontabs

crondの起動するランレベルをチェック。人それぞれだけど、僕は2,3,4,5で起動して欲しい。

# chkconfig --list | grep crond

crondは導入されたが、起動してないので、起動。OKがでることを確認。psでも確認。

# /etc/rc.d/init.d/crond start
# ps wax | grep crond

crontabを使ってスケジュールを追加。

# crontab -e
10 4 * * * sh ~/apt.sh を追加

小話

上のようにするととってもうまくできていた。何も問題なかった。でも、下のように入力してみたところ、面白そうなパッケージが見つかった。apt-cronとcron-aptだ。

# apt-cashe search cron

導入するならapt-cronだろうな。google検索ではcron-aptよりも多くのページが引っかかるから。でも入れない。ほとんどドキュメントを読んでないから確かなことはいえないけど、crontabでcrontabは入れるし、cronはapt以外の仕事にも使うから。

[DHCP][network] ネットワークを再起動

多分、プロバイダ(YahooBB)は、MACアドレスごとに違うアドレスを割り振っているんだと思う。というか、LANカードを交換するんだから電源を落としている。でも、前のLANカードのMACアドレスに割り振られたIPアドレスの返却がすんでないと(返却しなくても時間がたてば返却されるんだけど)、新しくアドレスはもらえない(多分ね)。だから、LANカードを交換した場合はネットワークの再起動が必要だ。というか、LANカードの交換をしなくてもLANケーブルの抜き差しをした場合にはやっておいたほうが吉、と思う。

# /etc/rc.d/init.d/network restart

こうすれば、リスタートできて、しかもDHCPでIPアドレスをもらう設定になってれば自動的にIPアドレスをもらえる。ちょっと思ったけど、ネットワークを再起動ってまさに"network restart"だね。独り言です。

[Vine Linux 4.0] コンソールで日本語を表示

Vine Linuxを最小構成でインストールした場合、デスクトップ環境はインストールされない。テキストログインした時も日本語でメッセージは表示されるため、これを読めるようにしたい。そんな時は下のようにした。こうしたことで、メッセージが日本語の場合も文字化けなしに表示できた。こんな感じで検索しました。

# modprobe vga16fb

[Vine Linux 4.0]遅ればせながら4.0にしてみました。

明日も早く起きねば今日は寝よう。そういえば今日はWindows Vista発売日。人がWindowsAeroすげぇといっている時に僕はカーネル新しくなったぜVine Linux 4.0。

いろいろと忙しかったんだよ、特にここ1ヶ月くらいは、いや今も忙しいけど。感想をば一言、GNOMEがきれいになってます、WindowsAeroよりは劣るけど、劣ってもOK。なぜならほとんどssh経由でしか使わないから、Xのクライアントも無いし。そういえばtwmがうまく動かなかったな、何でだろう。

ハードウェアの最低ラインが多少上がったらしい。だから、Vine Linux 3.2が動いていたマシンではメモリが足りないためインストールできなかった。しかたないので、メモリを増やしてインストールして、インストールが完了したらメモリを外した。問題なく動いた。ハードウェアの最低ラインチェックはインストール時のみらしい。まだまだいけるな。どっちにしろ、サーバとして使用するのにメモリ128MBは贅沢だと思う。

[useradd][passwd] ユーザを追加してそのユーザのパスワードを設定する。

テキストインストールした場合は、一般ユーザを追加する項目がインストールの途中で出てこない。あとからrootでログインして、一般ユーザを追加する時の手順。

# useradd USERNAME
# passwd USERNAME

useraddで第1引数のユーザを追加。passwdで第1引数のユーザパスワードを設定。確かpasswdのあとにUSERNMEの新パスワード入力を要求され、確認の後に設定が有効になる。useraddだけでは多分パスワードは空なんだろうな。だからpasswdの時に旧パスワード入力を要求されない。確か一般ユーザでもpasswdコマンドは使えた。ただしその場合は引数無しで自分のパスワードを変更できる。rootの仕事としてはユーザを作成して、作成したユーザのパスワードを適当に定めておく。その後、ユーザにパスワードを教えて、「僕はあなたのパスワードを知っているので、パスワードをあなたしか知らないものに変更しておいてください」と一言言っておく。

useraddだけだと、パスワードの設定はされない。ただし、パスワードが空だ、という意味ではないようだ。

[samba] sambaのディレクトリをコマンドからマウントする

Windows Meの場合、マウントするディレクトリのユーザ名、パスワードとWindows Meのユーザ名、パスワードは同じでないとだめ。Windows 2000の場合、違っていてもOK。そのほかのOSについてはわからない。

WindowsMe> net use q: \\SAMBASERVER\SAMBAUSERNAME /savepw:no
Windows2000> net use q: \\SAMBASERVER\SAMBAUSERNAME /user:SAMBAUSER *

アンマウントする場合は

WindowsMe> net use q: /delete
Windows2000> net use q: /delete

[putty] puttyの色が見にくい時

特に黒地に青文字なんて見にくい。w3mのリンク、viのコメント文は青文字で表示される。好みの問題だと思うけど、文句言われたので、解決法をメモっておく。一言、「色設定のとこについているチェックを全て外せ」である。色をいじるのはめんどくさいし、自分好みの設定をいじるのも嫌。この設定だと、区別できる差異は太字か否かだけになる。要は色の出ないディスプレイで見ているのと同じ。

個人用で既存のファイルをSubversionのリポジトリに登録

個人用とは、自分しか編集しない既存のファイルと言う意味。これをSubversionのリポジトリに登録する。例として、目的のファイルの名前はhoge.txt、hoge.c、hoge.html。これらのファイルのある場所が~/project_hoge/とする。下のような感じだ。これらのファイルをみんなで編集するとか、編集は一人でしかしないけど、ファイルの編集履歴をとっておきたい場合を考える。僕は一人で編集したときの変更履歴が欲しい。

+ ~/
|
+-+ project_hoge/
  | hoge.txt
  | hoge.html
  | hoge.c

はじめにしなければいけないことは、変更履歴を保存しておくためのディレクトリを作っておくことだ。

iptablesで特定のIPアドレス以外からのアクセスログをとる

何の事は無いのにかなり手間取ったのでメモをとっておくことにする。もしかするとよりよい書き方があるのかもしれない。こうすることで、信頼できるアドレスであるXXX.XXX.XXX.XXXとYYY.YYY.YYY.YYYを除いた全てのアクセスログをとるようになる。ログ取りの優先度は最高にしておかなければいけないけど。もちろんXXX.XXX.XXX.XXXとYYY.YYY.YYY.YYYが続き番号だったらよりスマートな書き方がある。でも、続き番号でない場合はこうするしかないと思う。

# iptables -N LOG_1_INPUT
# iptables -N LOG_1_FORWARD
# iptables -N LOG_1_OUTPUT
# iptables -N LOG_0_INPUT
# iptables -N LOG_0_FORWARD
# iptables -N LOG_0_OUTPUT
# iptables -A INPUT         -s ! XXX.XXX.XXX.XXX -j LOG_1_INPUT
# iptables -A FORWARD       -s ! XXX.XXX.XXX.XXX -j LOG_1_FORWARD
# iptables -A OUTPUT        -d ! XXX.XXX.XXX.XXX -j LOG_1_OUTPUT
# iptables -A LOG_1_INPUT   -s ! YYY.YYY.YYY.YYY -j LOG_0_INPUT
# iptables -A LOG_1_FORWARD -s ! YYY.YYY.YYY.YYY -j LOG_0_FORWARD
# iptables -A LOG_1_OUTPUT  -d ! YYY.YYY.YYY.YYY -j LOG_0_OUTPUT
# iptables -A LOG_0_INPUT   -j LOG --log-prefix "INPUT: "
# iptables -A LOG_0_FORWARD -j LOG --log-prefix "FORWARD: "
# iptables -A LOG_0_OUTPUT  -j LOG --log-prefix "OUTPUT: "

nslookupとかdigとかhostとかはどのパッケージに入っている

これらのコマンドは、IPアドレスとFQDNを相互に変換するためのプログラムだ。でも、bindをインストールしていないので、自動的には導入されない。しかも、名前と導入パッケージの名前が違うので、apt-cashe search nslookupとかやっても見つからなかった。どうやら、digはbind-utilsに含まれているらしい。というわけで導入。

apt-get install bind-utils

alsaplayerをバックグラウンドで起動させておく

この方法についてはよく知られている。下のようにすればいい。でもこの方法だと曲を再生するだけに長々と入力しないといけない。

$ /usr/local/bin/alsaplayer -F 24000 -i text -o oss hoge.mp3 >> /dev/null/ &

そんなわけでものぐさな僕としてはaliasとかを使ってみようと思った。でも、aliasで引数をとる場合にパイプ処理をはさむとうまくいかない。まぁ、エイリアスとは何者ぞ、と考えればそれもそのはず。調べてみると、shではパイプと引数が両方使えそうだ。でも僕はbashをつかっているので、エイリアスの変わりに関数を使ってみた。どうやらエイリアスshとbashの後方互換性のために設けられたものらしい。つまり、bashではSHOULD NOTなものらしい。ついでに終了させるためのコマンドも関数にしてみた。というわけで。

$ echo "alsaplayer () { /usr/local/bin/alsaplayer -F 24000 -i text -o oss \$* >> /dev/null &}" >> ~/.bashrc
$ echo "alsaplayerquit () { /usr/local/bin/alsaplayer --quit ;}" >> ~/.bashrc

こうしておけば、かんたんに再生と終了ができる。下のような感じ

$ alsaplayer hoge.mp3
$ alsaplayerquit

音がキンキンいって聞こえるのを直す

再生した音がうるさい。alsaplayerにせよ、catにせよ。聞くに堪えない。どうやら僕のサーバのサウンドデバイスは再生時にリサンプリング(48000Hz)するようだ。というわけで。再生時に44100Hzから24000Hzにリサンプリングしたら何とか聞こえるようになった。よくわからないけど。

$ alsaplayer -F 24000 *.mp3

なぜか。それは僕が聞きたい、知っている人がいたら教えてほしいくらいだ。なぜだか知らないけれど、プレーヤーが24000Hzにリサンプリングすると、スピーカから聞こえてくる音がまともなのだ。

一般ユーザでSSHから音を出す

alsaplayerを目覚ましとして使いたかった。でも、一般ユーザのcrontabに書いたら音が出なくて寝坊した。

# groupadd audio
# vi /etc/security/console.perms
# diff /etc/security/console.perms /etc/security/console.perms~
52,53c52
< #<console>  0600 <sound>      0600 root
< <console>  0600 <sound>      0660 root.audio
---
> <console>  0600 <sound>      0600 root
# pam_console_apply -r
# usermod -G audio hoge

Googleでdev dsp 一般として検索した。RedHatとはconsole.paramの位置が違った。

音量を調整する

音が出ることは判っても、音量の調整ができないとまともに聞けない。alsaplayer 自身の音量調整 (alsaplayer --volume [0.0-1.0]) は多分システムの最大音量の何割かを指定するものだと思う。

# aumix -v 70
# aumix -q
# aumix -I

root になれば必ず音量の調整ができる。一般ユーザで音を出すことができれば一般ユーザからでも音量調整ができる。この言い方は微妙に御幣がある。とにかくサーバの前に座っている人 (リモートから操作しているのではなく、マシンと直結したキーボードから操作している人) ならば誰でも音量の調整ができる。なぜなら、音はサーバのスピーカから出て、リモート端末で操作している人の耳には聞こえないから。そういうことを操作するファイルが、SSH を通して音を出すの項で述べた /etc/security/console.perms ファイル (Vine Linux の場合)。

パスを追加する

groupaddがパスの通っていない場所にあったので。

# env | grep PATH
PATH=/bin:/usr/bin:/usr/X11R6/bin
# export PATH=$PATH:/usr/sbin:/sbin
# env | grep PATH
PATH=/bin:/usr/bin:/usr/X11R6/bin:/usr/sbin:/sbin
# echo "export PATH=\$PATH:/usr/sbin:/sbin" >> /etc/profile

例では/etc/profileの末尾に書き込んでいる。もし、ユーザごとにパスを変更したい場合は~.bash_profileに追記する。export PATHしなくてもログアウトして再度ログインしてもよかった。

iptablesって何だっけ?

あんまりデーモンだとか難しいことは抜きにして、要はルータ(の設定ファイル)のことだと思ってます。よくルータを買ってくると、"WANからXXX番ポートへの要求はLAN内のMACアドレスYYYに渡す"、というような設定項目ありますね。つまり、インターネットを介してサーバにアクセスしてきたコンピュータの要求をどう処理するか、又は、自宅内にからサーバにアクセスしてきたコンピュータの要求をどう処理するか。このようなことをiptablesは行っているんだと思っています。

iptablesはどこにある

僕の場合、コマンドラインで"iptables"と打っても起動しませんでした。そこで下のようにして探しました。ずらずらと検索結果が出てきた中の最後のあたりに目的のiptablesがありました。つまりiptablesを起動するときには/sbin/iptables/と打てば起動できるということです。

[leaf@ServerName leaf]$ su
Password: 
[root@ServerName leaf]# find / -name *iptables*
...
/sbin/iptables
...
[root@ServerName leaf]# 

ルーティングの原則を決める

僕は、WANからLANのアクセスを全て禁止、から設定をはじめました。Vine Linuxの場合、コマンドラインからjman iptablesとすると日本語で書かれたマニュアルが読めました。さて、下のように入力して何をしたかというと、WANからLANに入ってくる(INPUT)パケット(接続要求を含めて)を捨てる(DROP)、という設定をしました。このままではブロードバンドモデムとつながっていようが、ルータにつながっていようが、とにかく外からサーバにアクセスできません。すべての接続要求は拒否されます。たとえ自宅サーバでメールデーモンを起動させていても、自宅サーバ内の誰かにメールを送ることはできません。

[leaf@ServerName leaf]$ su
Password: 
[root@ServerName leaf]# /sbin/iptables -P INPUT DROP
[root@ServerName leaf]# 

iptablesの設定 ~ no-ipのアップデータが使うプロトコルとポートはtcp/8245

無料のダイナミックDNSサービスを使っているので、IPアドレスとFQDNの対応付けをIPアドレスが変わるごとに更新しなければならない。この設定を忘れていると最後の更新から90後にFQDN更新確認のメールが送られてくる。その中に記載されているリンクをクリックしてもいいのだけど、アップデータを導入しておけば手間が省ける。多くのサイトでno-ipのアップデータ導入法は解説されているが、iptablesをかけていると、アップデータとno-ipサーバ間の通信が遮断されてしまう恐れがある。

ログを見て予測されることは次のようなことである、自分のサーバで動いているアップデータはno-ipサーバにtcp/8245からインストール時に設定された更新間隔で更新情報を送り、その上で、数日おきにno-ipサーバからtcp/8245に更新のあったサーバの生存確認が送られてくる。図にすれば下のような感じだ。9割方嘘だと思う。なぜなら、ポートスキャナでポートスキャンしてみたところ、8245番はclosed。どうやって確認しているんだ?もしかして/etc/init.d/noip2に実行権が付いていなかったのか?chmod 755 /etc/init.d/noip2なのか?

+-----------+                         +--------------+
|           |         @30 min         |              |
|           |tcp/8245 ------> tcp/????|              |
| My Server |                         | no-ip Server |
|           |tcp/8245 <------ tcp/????|              |
|           |         @5  day         |              |
+-----------+                         +--------------+

上の図に示したIPパケットを許可するために、下のように設定を追加しました。

# iptables -A INPUT -p tcp --sport 8245 -j ACCEPT
# iptables -A OUTPUT -p tcp --dport 8245 -j ACCEPT

アップデータがデーモンとして起動しているかどうかを確認するために、下のようにコマンドを叩きました。

# /sbin/chkconfig --list
...
noip2           0:off   1:off   2:off   3:on    4:on    5:on    6:off
...

設定されていない場合は下のようにします。2つは等価です。

# /sbin/chkconfig noip2 on
# /sbin/chkconfig --level 345 noip2 on

僕はno-ipのアップデータはどこかのサーバと相互に通信し合うことを知らずにいました。というか、アップデータはOUTPUTしかしないものだと思い込んでいました。OUTPUTのポリシーはACCSPTなので、iptablesに特別な設定をしなくても更新されるものだとばかり思ってました。90日後にメールが送られてきました。でもおかげで、メール内のURLにアクセスすれば、アップデータが不要であることも勉強しました。懺悔。

no-ipアップデータをインストール

インストールの内容なんか忘れちまったよ。再度インストールするときに詳細は書くことにしよう。

# ls -la /etc/init.d/noip2
# chmod 755 /etc/init.d/noip2
# ls -la /etc/init.d/noip2
# /sbin/chkconfig --list | grep noip2
# /sbin/chkconfig noip2 on
# /sbin/chkconfig --list | grep noip2
# /etc/init.d/noip2 start
# grep "noip2" /var/log/messages*
# ps -lC noip2

結局よくわからない。とにかくアップデートがうまくできたか否かを確認したい。ログを出力してくれればいいのだけど。もちろん起動のログは取れるんだけど、/var/log/messagesを見ればいい。でも、インターバルごとに成功したか否かがほしい。IPアドレスがほとんど固定だから、果たしてアップデータが正しく動いているかがまったくわからない。

# /etc/rc.d/init.d/noipd start

no-ip.comのアップデータ2.1.4をインストールした時のメモ

上とは状況が変わった。変更点は2つある。1.Vine 3.2 -> Vine 4.1。2.ADSL+Yahoo BB -> B flet's+hi-ho。とりあえずダウンロードして、展開して、移動した。

# wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
# tar zxf noip-duc-linux.tar
# cd noip-2.1.4/

毎回思うが、no-ipの日本語ドキュメント(README.FIRST.JAPANESE)は自動翻訳っぽい。しかも、"make"とか"作れ"に翻訳されてるし。というわけで、日本語ドキュメントは当てにならない。英語ドキュメントのほうがわかりやすい。README.FIRSTでインストール作業手順を確認、インストールまで。makeした時にwarning: pointer targets in passing argument * of '******' differ in signednessが大量にでたけど、あんまり気にしない。気にするとはげるよ。問題が出たら追々考えよう。make installでppp0にした、Yahoo BB時代は確かeth0にしていたと思う。make installの最後にno-ip2.confができたといわれたので、早速確認と思ったらバイナリじゃないか、断念。その代わり-S付でnoip2を起動すると設定内容が見れた(README.FIRSTに書いてあった。)。

# less README.FIRST
# make
# make install
# /usr/local/bin/noip2 -S

root以外にアップデータを起動できないように変更(元は755)。VineはRedHat系列なので対応した起動スクリプトをinit.d/以下にコピー。実行属性を加えて、起動時に実行するように設定。設定の確認。起動。messagesで確認。nslookupで確認。

# chmod 700 /usr/local/bin/noip2
# cp redhat.noip.sh /etc/rc.d/init.d/noipd
# chmod +x /etc/rc.d/init.d/noipd
# /sbin/chkconfig noipd on
# /sbin/chkconfig --list
# /etc/rc.d/init.d/noipd start
# nslookup ******.no-ip.******

未確認事項はiptablesでどのポートを空けるか。Versionで使うポートが変わってるかもしれないし。

外部からの接続要求を待つデーモンの数は減らすべし

外向きのポートで接続要求を待っているデーモン。僕の場合、自宅サーバの使途は自分専用のsshサーバとSambaサーバ。自分専用なので、自分以外の接続は全部切りたい。つまり、sshでポート転送してsambaポートと自分のマシンのloopbackアダプタのポートを紐付ける。sshさえあればもう何でもいいやって感じ。特別なとき意外はsftpで事足りるってのもあるんだけどね。

Vine Linuxを最小構成でインストール

僕は、家に立てたサーバに出先からリモートアクセスして、仕事をすることが多い。結局サーバにしてしまえば、グラフィカルな画面とご対面することはほとんど無い。というわけで、最小構成でVine Linuxをインストールして、取り合えずSSHデーモンを立ち上げるまでのメモをつけようと思う。僕が今までVine Limuxを使っていた理由は、日本語処理の問題をほとんど考えなくていいからだ。でも、sshデーモンを立てるまでには日本語処理なんて少しも考えなかった気がする。そんなことを言うと、何のためにVineを使うのかわからないけど、まぁいままでお世話になったVineに敬意を表してVineを選ぼうと思う。

sshのパケットについてiptablsを設定する

sshのパケットを区別するためにまず、次のようなコマンドを打ってsshと関連付けられたプロトコルとポート番号を調べた。すると、22/tcp、22/udp、だとわかった。つまり、22番ポートをtcpプロトコルで、22番ポートをudpプロトコルで使う、ということである。udpはtcpに比べて信頼性に欠け、リアルタイム性に富む。そんなわけで、udpプロトコルを使ったsshパケットは不許可、tcpプロトコルを使ったsshパケットは許可、することに決めた。TCPデータグラムの中身を解析していないので、本当にsshパケットかどうかわわからない。でも家のサーバで22番をリッスンしているのはsshdなので。

$ cat /etc/services | grep ssh

iptablesで設定できるのは、パケットの発信元IPアドレス(-s)、発信元ポート番号(--sport)、プロトコル(-p)、送信先ポート番号(--dport)、送信先IPアドレス(-d)、である(ほかにもあるかもしれないけどとりあえずこの5つ。発信元ポート番号(source port)と送信先ポート番号(destination port)のを略してsportとdportとなっている、多分。)。要は下の図のIP HeadとTCP Headにあたる部分だ。iptablesが受け取ったパケットの、IPヘッダ中のIPアドレス、TCPヘッダのフォーマットでプロトコル、TCPヘッダ中のポート番号、を区別している。iptablesは各サーバプログラムから独立して動いているので、入ってくるIPパケットに対しては最初の防壁、出て行くIPパケットに対しては最後の防壁として作用する。

+-----------------------------------+
|            IP Packet              |
+---------+-------------------------+
| IP Head |       IP Datagram       |
+---------+----------+--------------+
| IP Head | TCP Head | TCP Datagram |
+---------+----------+--------------+

--dportはパケットがどこのポート宛てに送られてきたかをチェックする。例えば下のように書くと、パケットの送り主が、サーバの22番ポート宛てにパケットを送ってきた場合に、そのパケットを許可する。これが意味するところは、サーバに入ってきた(-A INPUT)で、プロトコルがtcp(-p tcp)で、送信先ポートが22番(--dport 22)の、IPパケットをポートをリッスンしているサーバプログラムに渡す(-j ACCEPT)。ほかにもオプションスイッチがある。例えば、発信元のIPアドレスを指定するための-sとか、送信先のIPアドレスを指定する-dとか、発信元ポート番号を指定する--sportとか。これらが指定されないということは、この3つについてはチェックしないということ。

$ su
# /sbin/iptables -A INPUT  -p tcp --dport 22 -j ACCEPT
# /sbin/iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
# /sbin/iptables -A INPUT  -p udp --dport 22 -j DROP
# /sbin/iptables -A OUTPUT -p udp --dport 22 -j DROP

上の4行の中にポリシーと重複した設定があるかもしれない。例えば、OUTPUTのIPパケットは全てACCEPTの場合、OUTPUTのIPパケットにプロトコルや送信先ポートを指定してACCEPTの設定をしてもこれはポリシーと重複していることになる。つまり、ポリシーに反する設定以外は無駄だ。しかし、プロトコルがudpのOUTPUTをDROPしていることには意味がある。なぜなら、OUTPUTのポリシーはACCEPTでポリシーに反するからである。

Vine Linuxを最小構成インストールしてsshデーモンを立てるまで

最初に情報を集めねば。googleでVineとsshで検索すると有用な情報が出てきた。困ったことにいろいろと出てきたが、どのサイトにも共通しているのは、最初にsshの導入が済んでいるか確認するということ、これはrpmコマンドで確認した。次にsshデーモンが稼動中か確認するということ、これはpsコマンドで確認した。これに習って下のようにコマンドを叩いた。このコマンドで今現在sshデーモンが起動中かどうか確認できる。-Cの後にコマンドネームを渡した。psコマンドに対するオプションの詳細はps --helpで確認できる。

$ rpm -qa | grep ssh ; ps -C sshd
openssh-3.9p1-0vl2
openssh-clients-3.9p1-0vl2
openssh-askpass-3.9p1-0vl2
openssh-server-3.9p1-0vl2
openssh-askpass-gnome-3.9p1-0vl2
  PID TTY          TIME CMD
  840 ?        00:00:01 sshd
 1110 ?        00:00:00 sshd
 1113 ?        00:00:00 sshd

上は、導入後の結果である。何も表示されなかったら起動していないということだ。とにかくパッケージが無いと始まらないので、rootになってsshのデーモンやらクライアントやらをインストールした。

$ su
Password:
# apt-get install ssh

下のようなコマンドでもsshdの導入チェックができる。こっちのほうが早い(と思う)。でもこれでわかるのは、sshdが起動しているか否か。起動してないからといって導入されていないわけではない。

$ ps -C sshd

Vine Linux 4.1最小構成インストールの場合、パッケージの選択でsshdを選択しない限り、sshdはインストールされない。だから、apt-gatできるかチェック。sshで検索しても良かったかも。

# apt-cache search sshd
openssh-server ...

sshdのパッケージの名前はopenssh-serverだと判ったので、apt-getした。

# apt-get install openssh-server

導入したら起動しませう。

# /etc/rc.d/init.d/sshd start

host keyをGenerateするのに時間がかかるけどOKがでた。起動できたらputty等で接続しませう。接続の確認ができたら、OS再起動のたびにsshdも再起動するようにしませう。

# chkconfig --list
# chkconfig --add sshd

OSを再起動してみてsshdの再起動の確認をしませう。

Yahoo BBトリオモデムに無線LANからアクセス

扇情的なタイトルだが、やっていることはhttpプロクシ経由でBBモデムにアクセスするということである。BBモデムとSquidが動いているサーバを有線LANでつなぎ、サーバにinternet経由で接続。Squid経由でBBモデムにアクセス。しかもSquid.confは対処療法的に書き換え。なのでセキュリティ的にはかなりやばい。

$ su
Password:
# apt-get install squid
# echo "http_access allow all" >> /etc/squid/squid.conf
# /sbin/iptables -A OUTPUT -p tcp --dport 3128 -j ACCEPT
# /etc/rc.d/init.d/squid start

ここまでやって無線LANのPCから無線LANに関する設定をした。BBモデムは有線LANに接続されたPCからのアクセスを受け入れる設定になっているので、設定できる。最後にsquidを終了させた。

# /etc/rc.d/init.d/squid stop

間違っても下のようなこと(squidデーモンをサービスとして設定、設定の確認)をしてはいけない。するのなら、squid.confを正しく設定しなければいけない。

# chkconfig squid on
# chkconfig --list

とりあえず無線LANにつながれたPCから無線LANの設定をできるようにしたというだけだ。セキュリティ的にはあまりよろしくないはずである。これが示唆していることは、httpプロクシの動いているサーバのリストを入手して、ipアドレスからの逆引きでFQDNを持ってきて、Yahoo BBユーザだったら、プロクシ経由でBBモデムのアドレスにアクセスして(ユーザ名もパスワードもyahooのサイトに載っている)、設定が見えてしまうかもしれないということだ。注意せねばと思う。

パッケージのアップデートは面倒なので自動化

apt-getで導入されたものに関しては下のようにして導入できる。apt-get様様である。ただ、常に最新版を入れておけばいいというものでもない。使うのは自己責任で。

$ su
Password:
# crontab -e

10 4 * * * apt-get update >> apt-get -y upgradeを書き込んで保存して終了、最後に確認。

# crontab -l

単純に言えば、/etc/crontabの直接書き換えはSHOUD NOTだけど、システム制御にかかわる部分は/etc/crontabに直接書き込んでもいいということになっている。だから、次のようにしてもいいはずだ。確認してないけどね。仕事として同じことができるというだけで、全く同じ設定ファイルができるというわけではないはずです。前の方法だと、/var/spool/cron/rootに書き込まれるが、次の方法だと、/etc/crontabに書き込まれる。同じ仕事ができるならば、どっちでもいいって言えばどっちでもいいんじゃないかな。

$ su
Password:
# echo "10 4 * * * root apt-get update >> apt-get -y upgrade" >> /etc/crontab
# crontab -l

確認のためにとりあえずiptablesのログをとるようにしておいた。iptablesのログは/var/log/messagesに書き込まれるので、4時10分ごろに書き込まれたログを確認したところ、確かにvinelinux.orgの80番ポートに対してアクセスしていた。

Vine Linuxにfsplitって含まれないんです

というかfsplit自体が既に使われなくなって久しいらしい。fortran使うのやめませんか?

Vine Linux 3.2 で dvipdfmx インストールメモ

この項を書いた理由

Vine Linux 3.2 は apt-get でインストールできるがバージョンが古い。加えて出来たファイルを Windows 2000 にインストールした Adobe Reader 7.0 で印刷すると文書の途中で印刷が途切れたりする。特に文字の部分で途切れるよう。png や eps 、分数の棒は絶対に途切れない。

手順

THE DVIPDFMx PROJECTのトップに書かれている内容にしたがってcvs経由でダウンロード。

cd ~/
cvs -d:pserver:anonymous@cvs.ktug.or.kr:/home/cvsroot login
cvs -d:pserver:anonymous@cvs.ktug.or.kr:/home/cvsroot co dvipdfmx

ディレクトリ dvipdfmx に移動して INSTALL の内容にしたがってインストール。

cat INSTALL | less
./configure
make
make check
su
make install

Vine LinuxでLatexを使うには

最小構成ではインストールされないのでapt-getで導入した。プレゼン用のfoilが含まれていなかった(apt-getにも)ので、ダウンロードしてインストールしておいた。

Wake Up Lanを使いたい

デスクトップのいいとことノートのいいとこを両立させるひとつの方法かもしれない。家のサーバはBIOSに設定項目がある。しかし、不思議なことにshutdown -pで電源を落としてから数十秒間はマジックパケットに反応するけど、何時間もすると全く反応しなくなる。これって壊れているの?

Colon Hyphen P

ColonHyphenP.comとかどうよ。:-Pつまり顔文字だな。教科書にこれ系統のasciiで書ける顔文字が載っていたときには結構驚いた。顔文字というかAAって2chのイメージしかなかったからなぁ。若かった。

リンクというかブラウザお気に入りってブラウザが使えなくなると使えなくなるよね

えっ?意味わかんないって?僕もそう思う。とにかく。僕はタブブラウザとか使っている。で、お気に入りにリンクを追加するんだけど、使ってたタブブラウザが何らかの理由で起動しなくなったりすることがある。の管理がIE互換にせよオリジナル形式にせよ、そのタブブラウザが使えなくなったら使えなくなるんじゃないかという心配。

サーバ機になることを前提としたクライアント選び

サーバに求められるのは何か。用途を考えよう。僕の使い方では、CPU 使用率が基本的に 100% な使い方をするので、最大消費電力が小さいこと、これが大事だ。さて、単純に言えば、最大消費電力の低いマシンとはノートパソコンだと思う。最大消費電力の低いマシンは入力電力 (アダプタに記載さているもの) が低い。とはいっても、あまり低いと、オプションパーツ (USB 等) を使うときに電力供給に関する問題が生じるので、多くのメーカーでは、マシン単体として消費する電力に加えて多少の上乗せをして入力電力を決めているだろう。これが、"最大消費電力"としてカタログに記載していることと思う。

サーバ機としての安定動作やセットアップ時のさまざまな難題を回避するには、余分なものはつけないことが肝心だと思う。ましてやノートパソコンである。OS として Linux を選ぶならば、安定動作以前の問題が山積していると考えておいて間違いないだろう。そんなわけで、カタログスペックの最大消費電力が低いマシンを探してみた。結論から言えば、はっきり言ってそんな都合のよいマシンはそうそう無いということだ。ということで、長期間の調査が必要だろう。

最近はパーツ単体の消費電力の低下が著しい。結構なことだ。しかしトータルの消費電力は各パーツの消費電力の合計になるだろう。たとえ CPU の消費電力が低くなってもチップセットの消費電力が大きくなってしまって合計として変化が無かったら、あまり意味が無いと思う。最大消費電力をリストにしたサイトは無いかなと思って "30W"|"29W"|"28W"|"27W"|"26W"|"25W"|"24W"|"23W"|"22W"|"21W"|"20W"|"19W"|"18W"|"17W"|"16W"|"15W" 電力で Google 検索したところ、無かった。ニーズが低いんですかねぇ。無ければ作ってしまえ。今回は使わなかったけど、こう考えると、商品データを供給している Amazon の姿勢には頭が下がる。ついでに詳細なデータまでそろえてくれるともっと手間が省けるのだけど。

無いので作ってみた。とにかく自分が捜した中で、最も最大消費電力 (カタログスペック) が低かったのは今使っている Libritto シリーズだ。とりあえずこのあたりから探ってみようと思う。20W 台のマシンはかなり古いモデルばかりだった。20W なんてすごすぎるじゃないか。外付けの HDD の入力電力が 18W なので、いい勝負だ。多分実際に消費電力を測ってみると 20W 台のマシンはぞろぞろ出てくるんだと思う。消費電力について調べていくうちにひとつ判ったことがある。それは、バッテリの充電効率を上げるためにいくつかのマシンでは、充電時には消費電力が高くなることがあるということだ。site:dynabook.com inurl:spec.htm "消費電力" 最大で Google 検索をかけてみた。東芝はシャープと違ってスペック表が文字データになっているから検索もしやすい。古いマシンも検索するためにsite:www2.toshiba.co.jp "消費電力" 最大で Google 検索した。

Let'snote はどう検索すればいいかな。または、これかな

とにかく動作音が気になるのは僕だけなんだろうか? サーバとして常時稼動させておく、言い換えればほとんどの時間を待ち受けに費やすので、低消費電力ファンレスが望ましい。もっと言えば僕の使っている全てのマシンを低消費電力でファンレスなマシンにしたいな。そうすれば動作音を気にせずに原稿が書けるのに。VIA の C3 とか C7 とか EPIA とか Transmeta の Efficion とか Crusoe とかいいのかな。でも今使っている Libretto は Crusoe マシンだけど何かとファンが回る。やっぱり 5 年くらい使っていると埃がたまって上手く冷却できなくなるのかもしれない。とすると選択肢はファンレスモデルだろう。最初からファンレス設計なら、時間がたってもファンの音に悩まされずにすむので、うれしいな。

サーバとして使うのなら、CPU の待ち時間と動いているときの消費電力も大事である。最適と僕が思うのは、システム全体としての最大消費電力が小さなマシン。となるとノートパソコンしかないだろう。最近のノートパソコンは消費電力が大きすぎる。大きいものでは 60W もある。電気を使いすぎだとおもう。というと、それなりに速度が出て、システム全体の消費電力が小さなものは Libretto しかあるまい。それも U100 シリーズではなく L シリーズ以前のものだ。これらは一部を除いて、最大消費電力が 30W だ。これに加えて、余分なもの、つまり Linux が認識できないデバイスがついていないものということを考えると、L5 が最適かもしれない。

小型マシンリスト
0名称最大[W]標準[W]区分ファン
1Libretto 50/PA1237C920不明19不明
2Libretto 50/PA1237CA20不明19不明
3Libretto 60/PA1252J922不明111不明
4Libretto 60/PA1252JA22不明111不明
5Libretto 100/PA1254C925不明115不明
6Libretto 100/PA1254CA25不明115不明
7Libretto L5/080TNKW30不明S0.00098
8Libretto L5/080TNLN30不明S0.00098
9Libretto L1/060TNCM30不明S0.00168
10Libretto L1/060TNMM30不明S0.00168
11Libretto L2/060TN2L30不明S0.002
12Libretto L3/060TN2L30不明S0.002
13Libretto L2/060TNML30不明S0.002
14Libretto SS1010/PAL101JA30不明11.5不明
15Libretto ff1050/PAL105JA30不明11.9不明
16Libretto ff1100/PAL110JA30不明11.9不明
17Let'snote LIGHT CF-R3FW1AXR40不明S0.00021
18Let'snote LIGHT CF-R4JW4AXR40不明S0.00023
19Let'snote LIGHT CF-R4HW4AXR40不明S0.00023
20Let'snote LIGHT CF-R3DW1AXR40不明S0.00023
21Let'snote LIGHT CF-R3EW1AXR40不明S0.00023
22Let'snote LIGHT CF-R4GW5AXR40不明S0.00023
23Let'snote LIGHT CF-R2CW1AXR40不明S0.00025
24Let'snote LIGHT CF-W5KW8AXR40不明S0.00025
25Let'snote LIGHT CF-T5KW4AXR40不明S0.00025
26Let'snote LIGHT CF-R5KW4AXR40不明S0.00025
27Let'snote LIGHT CF-R1MCAXR40不明S0.00033
28Let'snote LIGHT CF-R2BW1AXR40不明S0.00036
29Let'snote LIGHT CF-R1NCAXR40不明S0.00036
30Let'snote LIGHT CF-R1PCAXR40不明S0.00038
31Let'snote LIGHT CF-R2AW1AXR40不明S0.0004
32Let'snote LIGHT CF-R1RCXR40不明S0.00043
33libretto U100/190DSW45不明S0.00039
34libretto U100/190DSB45不明S0.00039
35libretto U100/190NLB45不明S0.00039
36Libretto ff1100V/PL110M26AAA645不明11.9不明
37Latitude X150不明S0.00012
38Let'snote LIGHT CF-Y5KW8AXR60不明S9.7e-05

HDD

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2003-11-01T10:47:02+09:00
  2. Modified: 2003-11-01T13:49:00+09:00
  3. Generated: 2017-07-01T23:09:16+09:00