R.A. Epigonos et al.

[linux] Linuxのハブ

linux関係についてのハブ。インストールの仕方、プログラムの使い方、設定ファイルの書き方、チップスなど。

目次

情報基礎演習UNIX

大学の授業で使ったメモ書きですね。ずいぶん意味のわからんこと話していた気がします。10年位前の僕の記録ですね。

Linux

インターネット家電に乗せてあるOSはLinux(サーバーなどでも使用される。)フリーOSであるから、カーネル(OSの心臓部)がとても小さいからなどの理由。少し前まではJAVAが採用される可能性が高かったが、今はLinuxの可能性のほうが高い。

Vine Linux > SSH関係の諸々メモ

OpenSSHサーバはVine Linuxにインストール。OpenSHHクライアントもVine Linuxにインストール。あとSSHクライアントとしてWindows 2000にインストールしたPutty。これらについてのメモ。

Vine Linux > ソフトウェアRAID

いい加減にHDDの物理的障害に対応させんとやばいっしょ。ということで、RAIDの導入。導入する前にいろいろと調べて、わかったことはソフトウェアRAIDとハードウェアRAIDの2種類があること。現状はお金がなくて、CPUパワーは余っているのでソフトウェアRAIDにしよう。

Vine Linux > LaTeXでpdf文書作成

Vine LinuxにLatexとかgnuplotとかdvipdfmxとかインストールして使えるようにするときのメモ

Vine Linux > Libretto L1に載せる

インストールメモ。結構適当にインストールしている。たしかインストールプロセスは「テキスト」。インストールのタイプは「すべて」を選択していたと思う。プロセスやタイプの違いで何か変化が起こるとも限らないので、基本的な情報としてメモしておこう。

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

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

Vine Linux > デスクトップとして使う場合に必要な設定

デスクトップ環境を作るまでのメモです。といっても僕のマシンの場合インストール直後でほとんど環境はできあがっているのであまりすることはないのですが。ウィンドウマネージャやらCUIでは必要の無いものの設定やインストールの手順などをメモしていきます。別にデスクトップ環境でなくってもOK。コンソールでも日本語が表示できて、入力できれば。

VMware > ホスト: WinXP Home、ゲスト: Vine Linux 4.1

仕事で、Windowsでしか動かないアプリを使わざるを得ない状況に陥った。僕は基本的にVine野郎、コンピュータの電源は切らないタイプなので、Windows使いにくいでしょとか思ってしまう。さらに、無線LANデバイスで、Vineで動かないデバイスを使いたい。でも、暗号化とかCPUパワー使うし無駄だから優先でいいっしょとか思ってしまう。全くもって最近の傾向はCPUには優しくないね。でも仕事だからしょうがない。自分の使いやすい環境をもとめて仮想化ソフトウェアを導入した。

Debian > インストールメモ

Vineにずっとお世話になってきたが、ついにVine 4.1になり、メモリ不足でインストールできなくなってしまった。最初にメモリ不足のチェックを回避する方法を模索したが、これを見つけることはできなかった。仕方が無いので、Vine 3.2で我慢するか、最新バージョンがインストールできる別ディストリビューションを探した。メモリの増設は最初から却下、だってお金かかるでしょ。そこでDebianにしてみた。ここはインストールの記録です。あとから再インストールするときに迷わないようにするために何でだかわかんないけどこうするとうまくできたというメモです。非力なマシンに載せるので気を使っています。おおよそのスペックはCPU:celelon 400MHz、MEM:64MB、HDD:1.4GB、という感じですかな。まぁデスクトップ環境といっても、GNOMEとかKDEとかを使おうって言うんじゃないんだ。

[colinux] coLinuxの導入

この節ではcoLinuxの導入を行う。導入したマシンはwindows 2000の動いているLibretto L1で、VMware playerを動かすには非力なマシンである。VMware playerはハードウェアエミュレーションであるために、PC-AT互換機上で動くOSなら何でも動くが、結構重量級。どうにかして、Linuxを導入するために色々とやってきたが、ここにきてかなりクールなソリューションに行き着いた気がする。coLinuxはかなり前から人気が出てきているandLinuxの基盤技術を提供しているものらしい。andLinuxはcoLinux+Ubuntuだが、ここでは、coLinux+Debianにする。

Vine > SSHの暗号化経路を経由してSambaサーバの共有ディレクトリをマウント

ネットワークセキュリティのポリシーで、ルータ外に出るのは22番ポートへの接続のみ許可、と設定されたネットワーク内から、ルータ外のファイル共有サービス(samba)を使用して共有ディレクトリをマウントしたい。Samba over SSHとかSMB over SSHと呼ばれている技術を使えばこの要望に答えられる。今回は("Samba"|"smb"|"cifs"|"NetBIOS")+"over ssh"でGoogle検索

Debian(Etch)の場合

驚くべきことに、あんなちぐはぐな構成でも、自然に使えるということだ。まぁ基本的にホームの下にネットワーク上にあるディレクトリをマウントして、そこに必要なデータを書き込むようにしている。とりあえず情報の1次ソースとして、Debian JP Projectのページをはてなアンテナとかで定点観測しておくのは間違いではないように思う。

  1. Debian JP Project - Debian JP Project

ダウンロード

ダウンロードの方法にはhttp、ftp、torrent、jidgoとある。適当なものを選択してダウンロードする。できるisoファイルはどの方法でダウンロードしてもおなじものが出来ると思う。下のような感じにした。

$ wget -c http://cdimage.debian.org/debian-cd/4.0_r4a/i386/iso-cd/debian-40r4a-i386-netinst.iso

ダウンロードしたマシンでCDを作れるといい感じだったが、無理なのでCD作成用のマシンにisoイメージを持ってきてCD-RWに書き込んだ。今からインストールする古いFMVノートブック(fmv 640nu5c/w)でCD-RWを読めることが救いだ。CDを無駄にしないですむから。あと意外なことにこのノートブックはPXEブートにも対応しているようだ。まぁもらい物にしては良いマシンだ問題はHDDが壊れたので1.3GBになっていることか。CD作る用のマシンはwindows 2000。サーバマシンでダウンロードしたので、CD作成用マシンにサーバマシンのディレクトリマウントしておき、そこから直接読み出してCDを作ってみる。100BASEのLANでサーバとCD作成マシンはつながっている。100Mbits/sec=12.5MBytes/secで、三分の一ルールを考えれば12.5Mbytes/sec->4.1Mbytes/sec。CD書き込みの等速が150KBytes/secなので、おおよそ27倍速ぐらいまでは書き込めそう。まぁ4倍速までしか対応していないので、4倍速で書き込んだけど。基本的にこのFMVノートブックにDebianをセットアップする場合はtaskselでnotebookとbasesystemのみ選択。

  1. pxe fmv 640nu5c/w - Google 検索
  2. FMWORLD(法人):FMV > FMV-6500NA5/B, 6450NU5/L, 643NU5C/L, 643NU5C/X, 640NU5C/W, 640NU5C/Y, 6333NS4/X, 6400MF5/X, 640MF5C/W, 640MC5C/W本体仕様一覧 : 富士通
  3. SystemcastWizard & DatacloningWizard > 製品情報 > 動作環境 - FUJITSU Japan
  4. FMWORLD(法人):FMV > FMV-6500NA5/B, FMV-6450NU5/L, FMV-643NU5C/L, FMV-643NU5C/X, FMV-640NU5C/W, FMV-640NU5C/Y, FMV-6333NS4/X, FMV-6400MF5/X, FMV-640MF5C/W, FMV-640MC5C/W : 富士通

コアプログラムのインストール

メモリが少ないのでインストーラはインストールモードをLow Memory Modeに変えた。これにより英語、テキストモードでインストール作業を行った。インストールはほとんどデフォルト。インストールパッケージの選択ではNotebookとその下1個あわせて2つのチェックボックスにチェックを入れた。インストールがすむとCD-ROMがイジェクトされて再起動がかかる。

2回目インストール

今回別マシン(メモリとHDDが十分な)にrc3をインストールしたときに感じたことだが、とにかくインストーラに仕事をさせないほうがインストールの練習になりそうだ。使っていればいろいろと出てくる問題に対しての予防措置をあらかじめしてくれるインストーラは便利だが、インストーラがしてくれるはずの設定を自分の手で行うことで、突発的な問題に対処できるようになるのかもしれない。そんなことを考えておきつつも、やっぱりやってくれるほうがいいわけで。

debianはCDからインストールできる。この場合、isoファイルをダウンロードしてCDにするが、ダウンロードは1.全部いり、2.全部いりの1枚目、3.ネットインストール、4.名刺サイズ、の4つある。今回は3と4を試してみた。当然ながら、Low Memory Modeにはならなかった。少し悔しいが、言語選択は日本語、キーマップは日本語、とにかくインストーラが気を利かせてやってくれることはすべてやってもらう方向で選択してみた。3と4を選択したときの違いはよくわからん。よくわからんが何回もインストールとかするので、今後は3をメインで使ってみようと思う。パッケージ選択の場面ではデスクトップ環境のチェックをはずして、ラップトップと標準システムだけチェックを入れておいた。

3回目インストールのサマリ

思い立ったらとりあえずmemtestを走らせておく。其の間に色々と準備しておこう。なんだかんだ言っても、トラブルは起こるもので。使えるFD探しに手間取るとかね。

今度はフロッピーディスク(FD)経由でインストール。CD-RWの読めないマシンにインストール。まずはダウンロード。カレントディレクトリに最後に指定した引数の中身がダウンロードされる。必須ファイルはboot.imgとroot.imgらしいが、僕の場合は使っているNICが変なやつなのでとりあえず全部ダウンロードしてフロッピーディスク(FD)を作っておく。

$ wget -r -l1 -P./ -nd ftp://ftp.jaist.ac.jp/pub/Linux/Debian/dists/stable/main/installer-i386/current/images/floppy/
$ ls
boot.img
cd-drivers.img
net-drivers-1.img
net-drivers-2.img
root.img
$ su
Password:
# dd if=boot.img of=/dev/fd0 bs=1024 conv=sync ; sync
1440+0 records in
1440+0 records out
1474560 bytes (1.5 MB) copied, 101.243 seconds, 14.6 kB/s
# dd if=cd-drivers.img of=/dev/fd0 bs=1024 conv=sync ; sync
1440+0 records in
1440+0 records out
1474560 bytes (1.5 MB) copied, 101.245 seconds, 14.6 kB/s
# dd if=net-drivers-1.img of=/dev/fd0 bs=1024 conv=sync ; sync
1440+0 records in
1440+0 records out
1474560 bytes (1.5 MB) copied, 101.447 seconds, 14.5 kB/s
# dd if=net-drivers-2.img of=/dev/fd0 bs=1024 conv=sync ; sync
1440+0 records in
1440+0 records out
1474560 bytes (1.5 MB) copied, 101.248 seconds, 14.6 kB/s
# dd if=root.img of=/dev/fd0 bs=1024 conv=sync ; sync        
1440+0 records in
1440+0 records out
1474560 bytes (1.5 MB) copied, 101.247 seconds, 14.6 kB/s
# exit

久々にFDを使ったな。だめなFDばかりでかなりの時間をロス。memtestはおよそ5周チェック完了で2時間程度経過。

作ったFD(boot.img)をフロッピードライブに入れて起動。ロゴが現れ"Press F1 for help, or ENTER to boot:"と出る。んでENTERを押す。FDから読み込んでいる様子。ずらーっとメッセージが流れて"Insert the Root Floopy.Perss Enter when ready,or wait 30 seconds"と出る(30秒以上経過すると"Cannot find Root floopy; /dev/floopy/0: cannot mount"と出る30秒待つのを3回繰り返すとメッセージが"Insert the Root floopy. Press Enter when ready:"に変わる。)。ということでroot.imgを書き込んだFDを差し込んでEnterを押す。また読み込み始める。

"[!!] Choose language"のタイトルでメッセージが出る。"Please choose the language for she instration process. This language will be the default languages for final system."つまり「インストール中に使用する言語を選んでください。選ばれた言語はシステムが構築された後にシステムで使われるデフォルトの言語となります。」といったところか。日本語も選べるのでjapaneseを選択してEnter。つぎに「まだ翻訳がすんでませんよ」といわれるのでContinueを選択してEnter。次に"Based on your language, you are probably in one of these countries resions."と出る。「選択された言語を元に時間帯の設定をしてください」てな感じ。ここではjapanを選択してenter。つぎに"Based on your languuage and country choices, the following locale parameter supported"「言語と時間帯から察するに次のロケールがサポートされてます。」といわれるのでja_JP.UTF-8を選択してenter。つぎに"You may choose additional locales to be installed from list."「べつのロケールも選べるけどどうする」と聞かれるのでTabでcontinueに移動してEnter。

"[!!] Load driver from a floopy"のタイトルでメッセージ。"you probably need to load from a floopy before continuing with the instration. If you know that the install will work without extra drivers,you can skip this step. If you need to load drivers, insert the appropriate driver floopy before continuing. Load drivers from floopy now?"といわれる。「ドライバフロッピーが必要になるかもしれません。これが不必要であるとわかっている場合はこのプロセスをスキップできます。もしドライバのロードが必要なら適当なドライバフロッピーを入れてください。」ということで入れます。まずはcd-drivers.imgを書き込んだフロッピーを入れてyes。で、"To load additional drivers from another floopy, please insert the appropriate driver floopy before continuing. Load divers from another floopy"「もっと読み込みますか」と聞かれるので、さらにnet-drivers-1.imgを書き込んだフロッピーを入れてyes選択してEnter。さらに先ほどと同じメッセージが出るのでnet-drivers-2.imgを書き込んだフロッピーを入れてEnter。また同じメッセージ。今度はNoにしてEnter。

ここから日本語がいける。キーボードの種類選択でjp106を選択。で、CD-ROMの検出とマウント。cd-romが見つかりませんでエラー

あれ、結局CD-ROM使うわけね。うちの子はCD-RW読めないのよ。てなわけで今回の実験は終了。今回の実験でわかったことはFDから起動は出来てもFDだけではインストールできないということ。debootstrupが使えればいいのだが

  1. install - Debian GNU/Linux スレッドテンプレ
  2. 4.3. ディスクイメージからのフロッピーの作成

インストールオプション無、システムの使用言語でEnglish、taskselで全てのチェックをはずす

そのようにしてセットアップすると余分なものを極力減らせる。そのかわり諸々の設定は自分でやることになる。あとあとトラブルが起こった場合にこんなこともあるのではなかろうかという発想をきたえるための方法の一つ。eximがインストールされない、自前で設定しなければいけないなど。

rsh-serverの導入

こんな言い方をすると叱られてしまうが、信頼できるネットワーク内部のみに限るとか、使用方法が限定されていてかつマシンパワーに余裕が無いならば、sshのかわりにrshを使っても良いのではないかと思う。ということでおきっぱマシンにはrsh-serverを入れておくことがある。

fuga.com:~# apt-get install rsh-server

これでfoo@bar.comからhoge@fuga.comにログインできる。

foo@bar.com:~$ rsh -l hoge fuga.com
Password:
hoge@fuga.com:~$

例えばmpiをrsh経由で使う場合、パスワード無でrshを使いたいということがある。このよう場合パスワード無でログインできるようにしておかないと使えない。rshサーバを導入したマシン(fuga.com)で、リモートログインしたいユーザ(hoge)のホームディレクトリに.rhostsというファイルを作り、其の中に信頼するユーザの情報(ホスト名(bar.com)とユーザ名(foo))を書き込む。信頼するホストにいる信頼するユーザ(foo@bar.com)がリモートログインしたいマシンに存在するユーザ(hoge@fuga.com)に対して接続要求してきた場合にのみパスワード無で接続要求を受け付けるようになる。

hoge@fuga.com:~$ echo bar.com foo>> ~/.rhosts
hoge@fuga.com:~$ exit
logout
rlogin: connection closed.
foo@bar.com:~$  rsh -l hoge fuga.com
hoge@fuga.com:~$

rshdがあるホストから受けた接続要求と~/.rhostsにかかれたホスト名を比較しているので、rshdからみたホスト名を信頼するホスト名として~/.rhostsに書かないと正しくパスワード無ログインできない。

  1. UNIXの部屋 コマンド検索:rsh (*BSD/Linux)
  2. UNIXの部屋 コマンド検索:~/.rhosts (*BSD/Linux)

rshを導入すれば後は適当なネットワークからリモートログインして仕事が出来るのでディスプレイ、キーボード、マウスなどは不要になる。このためだけにぼくは最初にrsh-serverパッケージを導入するといっても過言ではない。

PPPoEの設定

PPPoEを使うにはカーネルモードで動作させる方法とユーザモードで動作させる場合と2つの方法がある。ユーザモードよりもカーネルモードのほうが早いという話もあるので、カーネルモードとして動作させようと思います。導入の方法はdebianのインストール時にブートパラメータとして"install modules=ppp-udeb"を渡す方法と、インストール済みのpppパッケージを導入する方法がある。

  1. カーネルモード PPPoE - Google 検索
  2. 【ぷりんこ研究所】カーネルモードでPPPoEを動かす方法
  3. ppp 2.4.3
  4. きょうのひできち: カーネルモード PPP を使う(rp-pppoe)
  5. Linuxチューニング 第1部第5回 ネットワークのチューニング:ITpro
  6. D.4. PPP over Ethernet (PPPoE) を用いた Debian GNU/Linux のインストール
  7. etch/Software/PPP - Debian GNU/Linux スレッドテンプレ

etchを導入する最初のタイミングで、マシンをpppクライアントとして使用することがわかっている場合、ブートパラメータにmodule=ppp-udebを入れておくとカーネルモードpppoeの導入から設定までをセットアップ時に対話的にできる。

install module=ppp-udeb

etchのインストール時にppp-udebモジュールを読み込んで導入する方法がもっとも簡単だが、其の方法しか知らないと、今までdhcpで繋がっていたマシンをpppルータにする場合に初めからやり直すことになってしまう。そんなことをせずとも稼働中のetchマシンにカーネルモードpppoeを導入できる。

カーネルモードで動かすにはカーネルがpppoeオプションを有効にしてコンパイルされているか調べる必要がある。そのためまずは今動いているマシンのカーネルがpppoeを有効にしてコンパイルされたかどうかを調べる。稼働中のカーネルに対応したカーネルコンパイルオプションが収められたファイルから"CONFIG_PPPOE"が含まれる行を抜き出して、この行が存在して"=m"(有効)であることをチェックする。

$ ls /boot
System.map-2.6.18-6-686
config-2.6.18-6-686
grub
initrd.img-2.6.18-6-686
initrd.img-2.6.18-6-686.bak
vmlinuz-2.6.18-6-686
$ grep "CONFIG_PPPOE" /boot/config-2.6.18-6-686
CONFIG_PPPOE=m

さらに/etc/modprobe.d/aliasesの中にpppoeへのエイリアスが含まれているかどうかをチェックする。何でこれが必要なのかわからん。どこかでnet-pf-*のモジュールを読み込む処理とかしてるのかな。

$ grep pppoe /etc/modprobe.d/aliases
alias net-pf-24 pppoe

pppパッケージの導入。これで必要な設定ファイル/etc/ppp/peers/providerや/usr/sbin/pppdなどが導入される。ここで導入される設定ファイルはブートパラメータでppp-udebとして導入したものと少し異なる。

# apt-get install ppp
  1. udeb - Google 検索
  2. Debian リファレンス - 注

まずは/etc/ppp/optionsを編集する。変更点はmtuとmruのそれぞれを1454にすること。

# vi /etc/ppp/options
  1. ppp 1454 - Google 検索
  2. NGN PPPoE   間違いだらけのネットワーク作り(515)
  3. フレッツADSL MURは1454に? - 教えて!goo
  4. ppp 1454 mru|mtu - Google 検索
  5. MTU @ki.nu
  6. BフレッツのMTUサイズ(1492ではなく1454の理由)
  7. [linux-users:102890] Re: カーネルモードpppdのMTU設定に

次に/etc/ppp/peers/providerを編集する。userオプションの引数を適当な名前にかえる、pppoeプラグインをロードする設定、設定済みのttynameをコメントアウトして新たにttynameセットしてpppdの使うデバイスを設定する。

# vi /etc/ppp/pees/provider
user "hoge@fuga.ne.jp"
plugin rp-pppoe.so
#/dev/modem
#115200
eth0
#connect "/usr/sbin/chat -v -f /etc/chatscripts/pap -T ********"
hide-password
lcp-echo-interval 20
lcp-echo-failure 3
noaccomp
default-asyncmap
nopcomp
noccp
novj
user name
Sets the name used for authenticating the local system to the peer to name.
plugin filename
Load the shared library object file filename as a plugin. This is a privileged option. If filename does not contain a slash (/), pppd will look in the /usr/lib/pppd/version directory for the plugin, where version is the version number of pppd (for example, 2.4.2).
ttyname
Use the serial port called ttyname to communicate with the peer. If ttyname does not begin with a slash (/), the string "/dev/" is prepended to ttyname to form the name of the device to open. If no device name is given, or if the name of the terminal connected to the standard input is given, pppd will use that terminal, and will not fork to put itself in the background. A value for this option from a privileged source cannot be overridden by a non-privileged user.
speed
An option that is a decimal number is taken as the desired baud rate for the serial device. On systems such as 4.4BSD and NetBSD, any speed can be specified. Other systems (e.g. Linux, SunOS) only support the commonly-used baud rates.
connect script
Usually there is something which needs to be done to prepare the link before the PPP protocol can be started; for instance, with a dial-up modem, commands need to be sent to the modem to dial the appropriate phone number. This option specifies an command for pppd to execute (by passing it to a shell) before attempting to start PPP negotiation. The chat (8) program is often useful here, as it provides a way to send arbitrary strings to a modem and respond to received characters. A value for this option from a privileged source cannot be overridden by a non-privileged user.
hide-password
When logging the contents of PAP packets, this option causes pppd to exclude the password string from the log. This is the default.
lcp-echo-failure n
If this option is given, pppd will presume the peer to be dead if n LCP echo-requests are sent without receiving a valid LCP echo-reply. If this happens, pppd will terminate the connection. Use of this option requires a non-zero value for the lcp-echo-interval parameter. This option can be used to enable pppd to terminate after the physical connection has been broken (e.g., the modem has hung up) in situations where no hardware modem control lines are available.
lcp-echo-interval n
If this option is given, pppd will send an LCP echo-request frame to the peer every n seconds. Normally the peer should respond to the echo-request by sending an echo-reply. This option can be used with the lcp-echo-failure option to detect that the peer is no longer connected.
noaccomp
Disable Address/Control compression in both directions (send and receive).
default-asyncmap
Disable asyncmap negotiation, forcing all control characters to be escaped for both the transmit and the receive direction.
nopcomp
Disable protocol field compression negotiation in both the receive and the transmit direction.
novj
Disable Van Jacobson style TCP/IP header compression in both the transmit and the receive direction.
noccp
Disable CCP (Compression Control Protocol) negotiation. This option should only be required if the peer is buggy and gets confused by requests from pppd for CCP negotiation.

pppd 8 linux - Google 検索

  1. pppd 8 linux - Google 検索
  2. Linux man | pppd
  3. pppd(8): Point-to-Point Protocol Daemon - Linux man page
  4. Connect ISP by PPPoE

つぎに/etc/ppp/pap-secretsと/etc/ppp/chap-secretsの編集。内容は同じ。

# vi /etc/ppp/pap-secrets
hoge@fuga.ne.jp      *       PASSWORD
# vi /etc/ppp/chap-secrets
hoge@fuga.ne.jp      *       PASSWORD

カーネルモードで動いてるのか確認

いくらカーネルモードの設定したといっても本当にカーネルモードで動いているのかは疑問なわけで。

# lsmod | grep ppp
pppoe                  13152  2
pppox                   3688  1 pppoe
ppp_generic            25908  6 pppoe,pppox
slhc                    6528  1 ppp_generic
# ps wax | grep pppoe
 1812 ?        Ss     0:00 /usr/sbin/pppd call dsl-provider
 3752 pts/0    S+     0:00 grep ppp
# grep 'pppd' /var/log/messages | less
Jan 31 18:56:34 ****** pppd[3266]: Plugin rp-pppoe.so loaded.
Jan 31 18:56:34 ****** pppd[3272]: pppd 2.4.4 started by root, uid 0
Jan 31 18:56:34 ****** pppd[3272]: PPP session is 21188
Jan 31 18:56:34 ****** pppd[3272]: Using interface ppp0
Jan 31 18:56:34 ****** pppd[3272]: Connect: ppp0 <--> eth0
Jan 31 18:56:37 ****** pppd[3272]: CHAP authentication succeeded
Jan 31 18:56:37 ****** pppd[3272]: CHAP authentication succeeded
Jan 31 18:56:37 ****** pppd[3272]: peer from calling number XX:XX:XX:XX:XX:XX authorized
Jan 31 18:56:37 ****** pppd[3272]: replacing old default route to eth0 [***.***.***.***]
Jan 31 18:56:37 ****** pppd[3272]: local  IP address ***.***.***.***
Jan 31 18:56:37 ****** pppd[3272]: remote IP address ***.***.***.***
Jan 31 18:56:37 ****** pppd[3272]: primary   DNS address ***.***.***.***
Jan 31 18:56:37 ****** pppd[3272]: secondary DNS address ***.***.***.***

色々やってはみたものの決め手にかけるな。カーネルがrp-pppoe.so内の関数を使っていることが示せればいいと思ったのだけれど。

  1. magta » Blog Archive » PPPoEのログ備忘録
  2. たこさば - 自宅サーバー構築-rp-pppoe の設定
  3. ADSL and IP Masquerade
  4. straceを使ったデバッグ - SourceForge.JP Magazine

apt lineの編集と導入済みパッケージのアップデート

インストールが済んで先ず始めにしておくことは、導入済みのパッケージのアップデートをすることだと思う。CDやUSBスティック(syslinux)から導入した場合は収録されていたパッケージが新しくなっている可能性があるからだ。これ無しではセキュリティどうのという以前の問題だ。パッケージアップデートに必要なapt lineの確認をする。CDから導入したり、USBスティックから導入したりすると、apt lineにCD用の設定がある。ネットワークから最新のパッケージを導入する場合にはこのラインを消しておいた方がいいと思う。せっかくインストーラが書いてくれたものだが、このラインが残っているとCDを入れろと要求される。そもそもUSBとかで導入した場合はCD無いんだし、パッケージの最新版を反映できないCD用の設定は、ネットワークから隔離されたマシンでは有効だが、ネットワークに出れるならコメントアウトしておこう。行頭に#を書き込めばコメントアウトされる。

# vi /etc/apt/sources.list
> deb cdrom ***を
> #deb cdrom ***に変える(コメントアウト)。

また、デフォルトでは通常パッケージはmainのみ、セキュリティパッケージはmainとcontribなので、それぞれをmain contrib non-freeとしておく。deb-srcについては良くわからんのでとりあえず追加。国内プライマリミラーであるhttp://ftp.jp.debian.orgはCDN化されているので変えなくてもよし。いい時代になったものだ。

$ cat /etc/apt/souces.list
deb http://ftp.jp.debian.org/debian/ etch main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ etch main contrib non-free
deb http://security.debian.org/ etch/updates main contrib non-free
deb-src http://security.debian.org/ etch/updates main contrib non-free
  1. install - Debian GNU/Linux スレッドテンプレ
  2. Debian JP Project - 最近の話題
  3. コンテンツデリバリネットワーク - Wikipedia

次にパッケージリストを最新のものにする。パッケージリストはパッケージとその最新版の対応関係が書かれていて、パッケージを更新、検索、導入する場合に参照される。更新する場合には更新対象のパッケージの導入済みの版と最新版との比較が行われ、導入済みの版が古ければ最新版に更新される。

# apt-get update

次に導入済みのパッケージを最新のものにする。

# apt-get upgrade

次に導入済みのディストリビューションの版を最新のものにする。カーネルのアップグレードだ。GRUBをブートローダにしている場合は再起動すれば自動で最新の版が選択されてきどうする。LILOは設定ファイルの書き換えと設定の反映が必要だった。

# apt-get dist-upgrade

最後に掃除をしておこう。パッケージの導入時に使っていた一時ファイルを削除する。

# apt-get autoclean

もっと徹底的にやりたければ下のようにする。autocleanとcleanの違いは、古いファイルのみを削除するかとにかく全部削除するかの違いだ。HDDに余裕が無ければすぐさまcleanでもいいと思う。

# apt-get clean

4回もいちいちコマンドを打つのは面倒なので以後、1行で済ませる。でも、更新の可否は選択させるようにする(-yとかは付けないということ)。

# apt-get update && apt-get upgrade && apt-get dist-upgrade && apt-get clean

この作業を自動化するようにcrontabに書くことも出来るがこれは危険ということらしい。vine使っていたころはcrontabに書くべきだと思っていたけど、どうなんだろう。etchはstableなわけだし、ディストリビュータのチェックを信じてしまうほうがいいのか、それともやはり自分でアップグレードパッケージをチェックしたうえでインストールしたほうがいいのか。そうはいっても需要はあるらしく、cron-aptというパッケージがある。このパッケージでも、デフォルトの動作はダウンロードのみだそうな。まぁ安定版のセキュリティフィックスのみなら自動でupgradeさせるのは許せる範囲らしい。

これで最初の更新は終了。現在/で604MB程消費。

ntpdの導入

JWMの時刻がおかしかった。おそらくロケールの問題と考えていたが、そのとおり。ntpを導入しなくても時刻は日本標準時だが、導入しておいたほうが、いいことがありそう。というかインストールせんといかん。なぜなら、Mailとかファイルのタイムスタンプとかが大きく違うといいことがない。未来からメールがきたり、間違って変更済みのファイルに変更前のファイルを上書きしてしまうこともある。だから、これはapt lineの編集が終わったら即やっておくことだろう。ある意味で導入の最初にするべきことだ。まずはインストールしてあるかチェック。インストールされていなければ何も表示されない。

# dpkg -l | grep ntp

さらに状況確認でntpdがリッスンするポートudp/123がリッスンされているか適当に調べる。適当にというのは所詮netstatで調べているだけだから。

# netstat -a | grep ntp

で、インストール

# apt-get install ntp

インストールがすむと自動的に起動する。これを確認。

# ps wax | grep ntp

ntpdがポートをリッスンしているか確認。ntpのコモンポート(udp/123)がリッスンされていた。

# nestat -a | grep ntp

ntpサーバが時刻を取得しているかをチェックする。これは数分たってから行ったほうがいい。サーバFQDNのまえに*がついていたらそのサーバと同期していることになる。

# ntpq -p

ntpの設定を行うファイルは/etc/ntp.conf。見てみるとserverに書いてあるNTPサーバとntpq -pで出てくるNTPサーバが変っている。おそらく適当に負荷分散するために一度/etc/ntp.confに書いてあるサーバにアクセスして次からは別サーバにしているのだろうと思う。

これを見ると日本時間のような設定はなさそうなのだが。どうやって自分のシステムが日本時間を採用しているとわかったのだろうか。さらに、serverで始まる行とntpq -pで出るアドレスが異なる。これも疑問。

ここまででHDDを729MB消費。

dhcpdの導入

LANポートが2つ以上あったりすると、dhcpdが導入されているといい感じ。まずはインストールされているかチェック。dhcp3-clientとdhcp3-commonがあったけど、dhcp3-serverは無し。

# dpkg -l | grep dhcp

さらに動いていないかチェック。もし動いていればdhcpd3 -q eth1とか表示されるはず。とりあえず今回は動いていない。

# ps wax | grep dhcp

ということで、インストール。

# apt-get install dhcp3-server

"Non-authoritative version of DHCP server"とか出るが、気にしない。okボタンをおして先に進み、インストールの終了。このままではdhcpdは起動していない。プロセスを見てみると、dhcpクライアントは動いているがdhcpdは動いていない。

# ps wax | grep dhcp

動いていないのは安全のためで、ネットワーク構成図を元にいくつかの設定をしなければならない。ネットワーク構成を決めてから動くことはとても重要で、構成図は下のような感じにした。Linux BOXと名前を付けたマシンには5つのネットワークインターフェイスがあり、eth0はこのネットワークインターフェイスが接続されているネットワークのDHCPサーバからアドレスを借りる、eth1からeth4まではstaticにアドレスを割り振る。eth1からeth4までにDHCPサーバを稼動させ、このネットワークインターフェイスが接続されているネットワーク上のマシンはLinux BOXで動くDHCPサーバからアドレスを借りる。

+--- ISP --------+
|                |
|   +-- dhcpd ---+
|   |            |
|   | ???(???) --+--+
|   |            |  |
|   +------------+  |
|                |  |
|                |  |
+----------------+  |
                    |
+--- LinuxBOX0 -----|-----+
|                   |     |
| XXX.XXX.XXX.XXX(eth0)   |
|                         |
|   +------- dhcpd -------+
|   | 192.168.1.1(eth1) --+-- 192.168.1.0/255.255.255.192 ----+
|   | 192.168.2.1(eth2) --+-- 192.168.2.0/255.255.255.192 -------+
|   | 192.168.3.1(eth3) --+-- 192.168.3.0/255.255.255.192 --> |  |
|   | 192.168.4.1(eth4) --+-- 192.168.4.0/255.255.255.192 --> |  |
|   +---------------------+                                   |  |
|                         |                                   |  |
+-------------------------+                                   |  |
                                                              |  |
                    +-----------------------------------------+  |
                    |                                            |
+--- LinuxBOX1 -----|------+                                     |
|                   |      |                                     |
| 192.168.  1.  2(eth0)    |                                     |
|                          |                                     |
|   +------- dhcpd --------+                                     |
|   | 192.168.1. 9(eth1) --+-- 192.168.1. 8/255.255.255.248 -->  |
|   | 192.168.1.17(eth2) --+-- 192.168.1.16/255.255.255.248 -->  |
|   | 192.168.1.25(eth3) --+-- 192.168.1.24/255.255.255.248 -->  |
|   | 192.168.1.33(eth4) --+-- 192.168.1.32/255.255.255.248 -->  |
|   +----------------------+                                     |
|                          |                                     |
+--------------------------+                                     |
                                                                 |
                    +--------------------------------------------+
                    |
+--- LinuxBOX2 -----|------+
|                   |      |
| 192.168.  2.  2(eth0)    |
|                          |
|   +------- dhcpd --------+
|   | 192.168.2. 9(eth1) --+-- 192.168.2. 8/255.255.255.248 -->
|   | 192.168.2.17(eth2) --+-- 192.168.2.16/255.255.255.248 -->
|   | 192.168.2.25(eth3) --+-- 192.168.2.24/255.255.255.248 -->
|   | 192.168.2.33(eth4) --+-- 192.168.2.32/255.255.255.248 -->
|   +----------------------+
|                          |
+--------------------------+

まずはdhcpdが稼動するインターフェイスを設定するファイルを編集する。設定の仕方は設定ファイルのコメント部分に書いてある(複数ある場合はそれぞれの間に1つの空白を入れる)ので、適当に設定。4つのインターフェイス(eth1 eth2 eth3 eth4)にdhcpdを稼動させる。

LinuxBOX0# vi /etc/default/dncp3-server
> INTERFACES="eth1 eth2 eth3 eth4"

次に、dhcpdが稼動しているインターフェイスに静的(static)なIPアドレスを割り振る。それぞれのインターフェイスに割り振るIPアドレスは上のネットワーク構成図に書いたネットワークに属するIPアドレスで、ネットマスクでマスクされる範囲内になければいけない。これらのインターフェイスを通していくつのアドレスを使いたいか考えてnetmaskを設定する。例えば8個のアドレスを使用する場合、下位3ビットがあれば8つのアドレスが表現できる(このネットワークを作った時点でネットワークアドレスとゲートウェイアドレスはネットワーク全体が共有するアドレスとして定義済みなので実際にネットワーク上にあるインターフェイスに割り当てられるのは8-2=6)ので、下位3ビットが0でそれ以外が1の11111111.11111111.11111111.11111000を10進数に直した255.255.255.248をnetmaskにする。

LinuxBOX0# grep -v '#' /etc/network/interfaces
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp
allow-hotplug eth1
auto eth1
iface eth1 inet static
        address 192.168.1.1
        netmask 255.255.255.192
        up route add -net 192.168.1.0 netmask 255.255.255.192 gw 192.168.1.2
        pre-down route del -net 192.168.1.0 netmask 255.255.255.192 gw 192.168.1.2
allow-hotplug eth2
auto eth2
iface eth2 inet static
        address 192.168.2.1
        netmask 255.255.255.192
        up route add -net 192.168.2.0 netmask 255.255.255.192 gw 192.168.2.2
        pre-down route del -net 192.168.2.0 netmask 255.255.255.192 gw 192.168.2.2
allow-hotplug eth3
auto eth3
iface eth3 inet static
        address 192.168.3.1
        netmask 255.255.255.192
        up route add -net 192.168.3.0 netmask 255.255.255.192 gw 192.168.3.1
        pre-down route del -net 192.168.3.0 netmask 255.255.255.192 gw 192.168.3.1
allow-hotplug eth4
auto eth4
iface eth4 inet static
        address 192.168.4.1
        netmask 255.255.255.192
        up route add -net 192.168.4.0 netmask 255.255.255.192 gw 192.168.4.1
        pre-down route del -net 192.168.4.0 netmask 255.255.255.192 gw 192.168.4.1

次にネットワーク構成を記述するファイルを編集する。まずはeth1からeth4までのインターフェイス各々が属するsubnetを宣言する。先の設定で行ったaddressとnetmaskのANDをとった値がネットワークアドレスで、これをsubnetの直後に書く。また、eth1からeth4に割り当てたアドレスをoption routersの値にする。netmaskは先の設定と同じ値にする。最後にrangeを設定する。動的にアドレスを割り当てる場合はrange文が必須でこれは適当に決めなければならない。一つの指標として、low-addressはoption routersに1足したアドレス、high-addressはnetmaskのアドレス範囲で表せる最後のアドレス引く1のアドレス。

LinuxBOX0# vi /etc/dhcp3/dhcpd.conf
> #eth1
> subnet 192.168.1.0 netmask 255.255.255.248 {
>    option routers 192.168.1.1;
>    range 192.168.1.2 192.168.1.6;
>    host test1 {
>            hardware ethernet XX:XX:XX:XX:XX:XX;
>            fixed-address 192.168.1.2;
>    }
> }
> #eth2
> subnet 192.168.2.0 netmask 255.255.255.248 {
>    option routers 192.168.2.1;
>    range 192.168.2.2 192.168.2.6;
>    host test2 {
>            hardware ethernet YY:YY:YY:YY:YY:YY;
>            fixed-address 192.168.2.2;
>    }
> }
> #eth3
> subnet 192.168.3.0 netmask 255.255.255.248 {
>    option routers 192.168.3.1;
>    range 192.168.3.2 192.168.3.6;
> }
> #eth4
> subnet 192.168.4.0 netmask 255.255.255.248 {
>    option routers 192.168.4.1;
>    range 192.168.4.2 192.168.4.6;
> }

ネットワークインターフェイス間でパケットのやり取りを行うために /etc/sysctl.conf または /etc/sysctl.d/*.conf を編集

LinuxBOX0# echo net.ipv4.ip_forward=1 >> /etc/sysctl.d/local.conf

ネットワークを作る場合に必ず必要なアドレスは、「ネットワークアドレス」「ゲートウェイアドレス」、これらが上手く設定されていないと上手く通信できない。設定のときにホワイトボードに書きなぐった内容は下のような感じ。これを元に上の設定を作った。

#eth3
(.000)_{10} = (.00000000)_{2} # subnet
(.001)_{10} = (.00000001)_{2} # routers
(.002)_{10} = (.00000010)_{2} # range low-address
(.006)_{10} = (.00000110)_{2} # range high-address
(.007)_{10} = (.00000111)_{2} # gateway
(.248)_{10} = (.11111000)_{2} # netmask
#eth4
(.008)_{10} = (.00001000)_{2} # subnet
(.009)_{10} = (.00001001)_{2} # router
(.010)_{10} = (.00001010)_{2} # range low-address
(.014)_{10} = (.00001110)_{2} # range high-address
(.015)_{10} = (.00001111)_{2} # gateway
(.248)_{10} = (.11111000)_{2} # netmask

で、ネットワークのリスタートと確認。

LinuxBOX0# /etc/init.d/networking restart
LinuxBOX0# ifconfig eth1 eth2 eth3 eth4

さらに、dhcpdの起動と確認。

LinuxBOX0# /etc/init.d/dhcp3-server start
LinuxBOX0# ps wax | grep dhcp

上手くいきそうなので再起動

LinuxBOX0# shutdown -r now

再起動後にクライアントをつり下げてみる。失敗。dmsgで状況確認。

LinuxBOX0# dmsg | grep eth
ADDRCONF(NETDEV_UP): eth0: link is not ready
ADDRCONF(NETDEV_UP): eth1: link is not ready
ADDRCONF(NETDEV_UP): eth2: link is not ready
ADDRCONF(NETDEV_UP): eth3: link is not ready

このメッセージが出るのはOK。link is not readyは、其のインターフェイスにつながるものが無いとでる。例えば、LANケーブルのクロスとストレートを間違えていたり、そもそも断線していたり、繋がった先のマシンがサスペンドしていたりすると。だからまず、モジュールをいじる前に物理的なミスが無いかどうかをチェック。ということで完成。

ここでだめぽ色々ためす。

LinuxBOX0# /etc/init.d/dhcp3-server stop
LinuxBOX0# ifdown eth1 eth2 eth3 eth4
LinuxBOX0# lsmod | grep tulip
LinuxBOX0# rmmod tulip
LinuxBOX0# lsmod | grep tulip
LinuxBOX0# modprobe tulip
LinuxBOX0# lsmod | grep tulip
LinuxBOX0# /etc/init.d/networking restart
LinuxBOX0# /etc/init.d/dhcp3-server restart

こんな感じで解決。とりあえず再起動。再起動後に同じことをする。networking restartでeth4がなくなる。最後にカーネルの経路テーブルをチェックしておく。

LinuxBOX0$ /sbin/route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.4.0     192.168.4.2     255.255.255.192 UG    0      0        0 eth4
192.168.4.0     *               255.255.255.192 U     0      0        0 eth4
192.168.3.0     192.168.3.2     255.255.255.192 UG    0      0        0 eth3
192.168.3.0     *               255.255.255.192 U     0      0        0 eth3
192.168.2.0     192.168.2.2     255.255.255.192 UG    0      0        0 eth2
192.168.2.0     *               255.255.255.192 U     0      0        0 eth2
192.168.1.0     192.168.1.2     255.255.255.192 UG    0      0        0 eth1
192.168.1.0     *               255.255.255.192 U     0      0        0 eth1
XXX.XXX.X.X     *               255.255.255.248 U     0      0        0 eth0
default         XXX.XXX.X.X     0.0.0.0         UG    0      0        0 eth0

これによって、dhcpクライアントがIPアドレスを借りることが出来るようになった。正しく通信できるかをテストするにはpingを相互に打ってみることが重要。dhcpで割り当てたアドレスを持つマシンから、dhcpdが動くマシン(gateway)に向けてpingと其の逆。dhcpで割り振られたアドレスを持つマシンから、同じネットワークアドレスをもつマシンへとこのマシンに割り振られたアドレスへのpingはできた。

テストをしないシステムは障害の切り分けがしにくい。eth1からeth4に繋がっているマシン全てからテストを行うべきだが、例としてeth3と物理的に繋がっているマシン192.168.3.2で一通りチェックておく。

最初に192.168.3.2から同じネットワークアドレス192.168.3.8を持つマシンに向けてpingが飛ぶか調べる。pingコマンドはそれぞれ、ループバックアドレス、自分に割り振られたアドレス、ゲートウェイアドレス、同じネットワークアドレスを持つ別マシンのアドレス。について行う。

hoge@192.168.3.2$ ifconfig
hoge@192.168.3.2$ route
hoge@192.168.3.2$ ping 127.0.0.1
hoge@192.168.3.2$ ping 192.168.3.2
hoge@192.168.3.2$ ping 192.168.3.1
hoge@192.168.3.2$ ping 192.168.3.3

tulipの4ポートNICを使っているが、別のNICで同じtulupチップの載ったものでは/var/log/kern.logにものすごい量のエラー(tulip_stop_rxtx() failed)がでるが今回使ったNICとマシンの組み合わせでは数回でただけでほとんどでない。

sshサーバのインストール

色々と設定するのにマシンにキーボードやディスプレイをつけるのは嫌い。なぜなら、ディスプレイとか電気代かかるからね。ここまで終われば、これ以降の設定をssh経由で出来るので、どこからでも作業の続きができる。このくらいまでは一気にやっておきたいと思う。まずはインストールされているか確認、netstatでsshのwell-knownポート22/tcpをリッスンしているプロセスがあるか確認。で、インストール。走っているかと22/tcpがリッスンされているかを確認。

# dpkg -l | grep openssh-server
# netstat -a | grep ssh
# apt-get install openssh-server
# ps wax | grep sshd
# netstat -a | grep ssh

インストールすると勝手に走り始める。

Wake on LANで電源ON

インターネット側からの矢面に立つサーバに繋がるマシンのなかにWake on LANに対応したマシンがあったので、サーバから其のマシンに対して電源を入れてみる。

ethtoolの導入

Wake on LANに対応したマシンに、イーサネットデバイスの詳細な情報を表示してくれるethtoolを導入して起動する。このとき、Wake on LANに対応したイーサネットデバイスを引数にして起動する。

# apt-get install ethtool
# ethtool eth0
...
        Supports Wake-on: g
        Wake-on: g
...

このとき、Wake-onがg(magic packetに応じて電源ON)を確認しておく。gでない場合は、下のようにして設定を変更する。

# ethtool -s eth0 wol g

サーバからmagick packetを送る場合に必要な情報がブロードキャストアドレス(Bcast)と物理アドレス(HWaddr)なので確認しておく。

# ifconfig eth0
ethY      Link encap:Ethernet  HWaddr YY:YY:YY:YY:YY:YY  
          inet addr:192.168.3.4  Bcast:XXX.XXX.XXX.XXX  Mask:255.255.255.248
          inet6 addr: fe80::200:e2ff:fe23:7e89/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3675 errors:2 dropped:0 overruns:0 frame:2
          TX packets:2590 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:407673 (398.1 KiB)  TX bytes:462459 (451.6 KiB)

確認できたら終了させておく。

# shutdown -h now

wakeonlanの導入

サーバで導入して、ターゲットにmagic packetを送って、起動することを確認。

# apt-get install wakeonlan
# exit
$ wakeonlan -i XXX.XXX.XXX.XXX YY:YY:YY:YY:YY:YY

一般ユーザでもwakeonlan出来る。昔導入したときは、電源を切ってから時間がたつと何らかの理由でWake on LAN出来なかった気がする。最後にスクリプトを作っておく。ネットワークの構成が変わればそれに応じてこのスクリプトは変更しなければだめ。

$ echo wakeonlan -i XXX.XXX.XXX.XXX YY:YY:YY:YY:YY:YY> poweron.sh
$ sh poweron.sh

[vim] vimの導入とデフォルトエディタの変更

デフォルトで導入済みなのはedとnanoとvim.tinyで、標準のエディタはnano。したがって、w3mやcrontabからeditorを呼び出すと、標準のエディタであるnanoが立ち上がる。でも、nanoは僕にとっては使いにくいのでvimを導入して標準のエディタを変更する。残念なことに、vimを導入しても優先順位はnanoのほうが高いようだ。もちろん、vimの導入が必須というわけではない。vim.tinyでも十分使える。

# update-alternative --config editor
> Selectionで3を選択してvim.tinyに変更。
# apt-get install vim
# update-alternative --config editor
> vim.basicに変更。

日本語環境のためのロケール作成

ロケールを作成する前に現在のロケールを確認しておこう。これでLANG=Cとかでてきたら、現在のシェルのロケールはCロケールだということだ。Cロケールはもっともプリミティブなロケールで、コンソールとかではこちらのほうがいいように思う。rootでログインするとCロケールになったが、一般ユーザのロケールはインストールの手順で変化するようだ。Low Memory Modeでインストールした場合は一般ユーザのロケールはCロケールで、Cロケール以外のロケールは作成されていない。そうでない場合で、日本語を選択してインストールをした場合は、インストール時に選択画面で作成するロケールが選べる。ja_JP.UTF-8を選択していれば、これが一般ユーザのロケールとして設定されるようだ。

いまログインしている端末のロケールを確認するには下のようにする。

# locale

プログラムはロケールをみて出力する文字を変化させている。たとえばCロケールの下でls -lとかして出てくる「total」はja_JP.UTF-8のような日本語ロケールでは「合計」となる。これは、lsというプログラムがが正しくロケールを判断してja_JPだから日本語で出力しようとして、さらに文字コードはUTF-8なのでUTF-8コードで出力されている。同じja_JPでもja_JP.EUC-JPだと日本語のeucコードで出力される。仮想端末やフレームバッファコンソールで日本語を正しく表示させるにはこれらに対する入力とプログラムの出力が同じ文字コードでなければ画面に正しい日本語として表示されない。

後々日本語環境を作るための、ja_JP.UTF-8 UTF-8ロケールを作成しておく。EUC-JPでないのは未来のことをかんがえてだ。そのうちLatexとかもUTF対応してくれることを願って、日本語入力はUTFで作っておこう。

# dpkg-reconfigure locales

ロケールは作るが、デフォルトのロケールにはしないでおく。システム標準のロケールはnoneとja_JP.UTF-8の選択肢でnoneを選び、ja_JP.UTF-8を選ばないということ。この理由はCロケールであればコンソールでも文字化けの心配が無いからだ。ロケールの変更が必要な場合はその都度手作業で変更する事にする。ロケールの作成には結構時間がかかった。

現在自分が操作中の端末のロケールを調べる

ロケールとは端末ごとに設定される。ユーザごとでもなければ、システムごとでもない。考えてみれば理にかなっているわけで、システムごとなら、英語が母国語の管理者の下ではユーザが日本語を母国語としていても英語を強要されてしまうし、かといってユーザーごとだとCロケールでしかうまく動かないプログラムを日本語ロケールのもとでは走らせられない。ということで、ロケールはログインした端末ごとに設定される。平たく言えば、新しくシェルを起動した数だけ好きに異なるロケールを使える。xterm等の仮想端末を起動して、ひとつはCロケールに変えて、ひとつはja_JP.UTF-8に変えて、使うこともできる。

システムの管理者であるrootは一般ユーザに使用を許可するロケールをdpkg-reconfigure localesで作成する。ここで作成したロケールを一般ユーザは使用できる。作らなければCロケールのみ。Cロケールだけで使用するのがHDDには優しいが、日本語の表示や入力を行いたいのならば、日本語ロケールぐらいは作っておくべきだろう。

$ locale

これでCロケールであればそのシェルは英語ばっかりになるということだ。linuxのプログラム群はロケールを見て挙動を変えている。ので、ロケールの設定は重要らしい。

ロケールの変更

$ export LANG=ja_JP.UTF-8

ロケールとはユーザにとってもプログラマにとっても利益がある。プログラマはプログラムの使用者がどんな言語に堪能か知らない。プログラムのコア部は言語によらないコードである。ユーザインターフェース部分はユーザの利便性を考えれば各ユーザごとに変化するべきだ。ということで、プログラムはユーザが堪能な言語を設定されたロケールとみなしてロケールに対応したインターフェイスを提供する。ユーザは堪能な言語をロケールに設定しておくことでわかりやすいインターフェイスで作業ができる。

最たる例がウィンドウマネージャだ。ユーザからのインプットを受け付けて、ユーザーにアウトプットするウィンドマネージャがユーザーの使い易い言語を入出力の基本言語として採用してくれるほうがユーザーは仕事がしやすいだろう。ウィンドウマネージャが起動しても英語しか見えない場合はXを起動する前にロケールを確認してみるといい。ロケールがCの場合は上のように日本語ロケールに変えてからstartxするとメッセージなどが日本語になっているかもしれない。

$ export LANG=ja_JP.UTF-8
$ startx

xtermの確認

ここは、ロケールを正しく設定してX環境を起動すれはあまり考える必要の無いことだ。素直にexitしてロケールを設定して、再起動したほうがいいかもしれない。でも、問題はxtermの太字部分がつぶれていることだ。この問題はどちらにしても解決できていない。

Xを起動させて、xtermを起動させる。このままでは日本語は表示できないはずだ。ためしにw3mでgoogle.co.jpにいってみた。案の定日本語は?で表示される。このままでは使いにくいのでターミナルの上でCtrlを押しつつ右マウスボタンを押したままの状態に、UTF-8を選択してボタンを離す。この状態で今開いているxtermはUTF-8で日本語の表示ができるようになった。これとw3mのDislay charsetを同じにすれば日本語が表示される。問題は太字が表示されないということだな

[pam] pamによるロケール

pamとはプログラムが認証を実装する時につかうとうれしいAPIのこと。ソースをほとんど変えずにいろいろな認証の仕組をプログラムに組み込むための枠組のことだ。これでもユーザーがメインで使う言語を指定できる。いくつかのウィンドウマネージャはそうだ。僕が使うウィンドウマネージャはどれもpamをつかってはいないが。

とにかく、自分の使うプログラムでpamが使われている場合、英語しか出てこない原因のひとつにpamが指定している言語設定もあるのだということを覚えていたほうがいいということだ。このような場合、プログラムごとにpamにおける言語設定ファイルは異なっているので、プログラムごとに設定ファイルを探して、その設定ファイルに設定を書き込んだ方がいいだろう。

ここまででHDDは510MBほど消費。

Xを起動するためのパッケージを導入

x-window-systemパッケージを導入するまえにウィンドウマネージャ(twm,vtwm,jwm,icewm)をインストールしても、Xが起動しないはずだ。startxコマンドがあったので、x-window-systemパッケージがインストール済みなのかと思ってstartxコマンドを叩いてみた。

$ startx

Xサーバに繋げませんとか、Xが起動できません。とかのエラーが出た。プロンプトが帰ってくるまでに時間がかかるので素直に待つ。試しにrootになってからstartxしてみた。

$ su -
# startx

やっぱりエラーだった。プロンプトが帰ってくるのが早かった理由は判らないけれど。X環境を起動できない理由は、x-window-systemパッケージをインストールしていないからだと思う。ということで、x-window-systemパッケージを導入する。

# apt-get install x-window-system

全部で95.5MBくらい余分なディスクスペースが必要だといわれた。導入されるパッケージには明らかに使いそうももないものもあったが、とりあえずいれておいた。画面の解像度を聞かれたので800x600と640x400を選択して後は外してしておく。僕のマシンはそうだから。マシンによっては解像度選択の画面が多少乱れたが、画面の解像度で選択できそうなものはあらかじめ選択されていたので、いろいろと考えなくてもいいのかもしれない。

ウィンドウマネージャの導入と使用感

現在のx-window-managerを確認するには、下のようにする。

# update-alternatives --display x-window-manager

x-window-managerを変更するには、下のようにする。

# update-alternatives --config x-window-manager

一般的に新しいパッケージを導入すると、同じようなパッケージ、例えばx-window-mamagerに属するパッケージがいくつも導入されている場合は、デフォルトの優先度を元に動作が決定される。この動作を変えてくれるAlternativeコマンドは結構重要。

  1. http://www.debian.org/doc/manuals/reference/ch-package.ja.html#s-alternatives

新しいx-window関係のパッケージを導入した場合は、下のようにして確認しておくほうがいいと思う。このことに対する重要な示唆がDebian リファレンスにある。

# update-alternatives --display x-window-manager
# update-alternatives --display x-session-manager

x-session-managerとx-window-managerはx-session-managerのほうが優先される。下の記事で書いたようにIceWMとJWMの両方をインストールするとIceWMがx-session-managerに含まれてしまうため、x-window-managerだけをいじってもJWMを起動することは出来ない。

[jwm] 軽い軽いと言われているJWM

現時点でもっともメモリ消費が少ないと言われているJWMをウィンドウマネージャに選んでこれを導入した。

# apt-get install jwm

ためしに起動してみる。

$ startx

Xは起動できなかった。終了に時間がかかるのでほっておく。一般ユーザでX環境を起動させる前にrootでX環境を起動しておく。これをしないと何か必要なファイルが作成されないようだ。このファイルがないと一般ユーザでXを起動できなくなる。

# startx

起動を確認できたら終了させておく。さらに一般ユーザでも起動確認しておく。

$ startx

気になったことがある。右下に表示されたが時計がずれているのだ。といってもシステムの日付とはあっている。これはlocaleの問題と思われる。

取りあえず使える。特に問題ない。ランチャも出るし、左クリックでメニューも出る。終了はexitでできる。

ここまででHDDを652MBほど使用。

jwnrcを編集して起動ランチャなどの編集

左下にあるJWMボタンから出てくる起動ランチャを編集したい。そんなときはjwmrcを編集する。これはあまりしたくない。HDDが逼迫してるからね。まずはテンプレートをホームにコピーする。

$ cp /etc/jwm/jwmrc ~/.jwnrc

テンプレートの編集には苦労しないだろう。感覚的にわかる内容だ。

# vi ~/.jwmrc
> Operaを起動ランチャに追加。

カスタマイズしていくうちにいろいろと気になることを発見。

  1. ウィンドウのタイトルバーを消すモードがない
  2. キーボードでウィンドウの切替えがしにくい

ということで常用するウィンドウマネージャとしてはまだまだカスタマイズしきれてない感じ

[icewm] 僕は使い易いと思うIceWM

とりあえず導入。Debianはいろいろとパッケージが揃っているのでいいな。

# apt-get install icewm

確か5MBほど余分なディスクスペースが必要だったと思う。で起動。

$ startx

日本語が汚いの除けば、OKだと思う。日本語が出てこないのはロケールが日本語になっていないから。この場合はstartxする前に日本語ロケールをexportする。日本語が汚いのは適当な(綺麗な)フォントがインストールされていないから。

一時的にロケールを変更してX起動

$ export LANG=ja_JP.UTF-8
$ startx

作成済みのロケールに変更してからXを起動すれば、ロケールに対応した言語が読み書きできる環境でXが起動される。たとえば、文字の見た目が変わっている。ここで、xtermを起動させて、ためしにdateコマンドを打ってみると日本語で表示されることがわかる。

$ date

標準で起動するxtermの表示エンコードはUTF-8だし、w3mで日本語ページが日本語で表示されるし、w3mでoを押してオプションを出せば日本語になっている。さらに、インプットメソッド(scim)は立ち上がっている。ctrl+spaceで日本語が入力できる。つまり、ロケールの設定は非常に重要である。Xで日本語入力するためには日本語に対応したロケールを作成して、startxするシェルのロケールを日本語に対応したロケールに変更して、その上でstartxしなければならない。この手順を踏む前に~/.xsessionを編集したり、im-switchしても無駄というものだ。

日本語入力パッケージの導入

どこかのページに載っていた方法を真似てみた。でもいつも使っているVineはscim+anthyという組み合わせ。scimのほうがごちゃごちゃと余分にインストールされないですみそうな気がする。気がする。気がする。気がするだけだ。

# apt-get install uim uim-anthy im-switch

とりあえず導入してみたけど、いろんな言語が入力できそうな設定項目がある。これは改めてscim+anthyという組み合わせにしたほうがいいのかもしれない。

というわけで、scim+anthyにしてみる。必要なもの意外は使うまで導入しない主義を徹底。とくにkasumiは何してるか良くわからないので入れないでおこう。

# apt-get install scim-anthy im-switch

このインストールで25.7MBほど消費する。ここまででHDDを728MB消費。

メモとして書いておこう。デフォルトの起動キーはCtrl+Spaceだが、これだとなれてないので、Shift+Spaceに変更した。半角/全角キーは入力方法の変更に使える。例えば、日本語入力の場合「あ」と表示されるが、直接入力の場合「_A」になる。このキーを使って入力方法を変化させると、scimの終了と起動を伴わないのでおそらくスピードが稼げる。いちいち終了と起動をともなうSpace+Shiftはのろい。鈍いといってもほんとに最初だけ。メモリに乗ったら全角/半角で切替えてもShift+Spaceで切替えてもあまり体感速度は変わらないと思う。

入力メソッドの変更

$ im-switch -c

ttf関係のきれいな日本語フォントを導入

まえはVLゴシックが好きだったが、今はさざなみのフォントの方がいいと思えてきた。理由はゴシックと明朝が統一性がとれているから。まあフォントなんて好みの問題だけど。apt lineでmainしかいれていない場合にaptから導入できるのはVLゴシックとさざなみと東風。

[ttf-kochi] 東風フォントの導入

# apt-get install ttf-kochi-*

結局東風フォントに落ち付いた

[ttf-sazanami] さざなみフォントの導入

導入する。

# apt-get install ttf-sazanami-*

Xがどれだけ綺麗になるか見てみよう。一回X環境を終了させて、再起動。キレイだ。でも、コンソールの字は汚い。

[ttf-vlgothic] VLゴシックフォントの導入

基本的な日本語フォントは汚いと思うかもしれない。そんな場合はVineプロジェクトの産物を使わせてもらおう。きれいなフォントに驚くはずだ。さらにメニューの文字化け(前項)も解決できる。

# apt-get install ttf-vlgothic

基本的な日本語フォント以外に日本語フォントをインストールしていなければ、ttf-vlgothicがプライオリティ的に最高なので、なにもしなくてもttf-vlgothicが使われる。Vineユーザだったからかもしれないが、kochiやsazanamiよりもこちらの方が落ち着く。これの導入で変わった点はJWMのメニューと時計表示がきれいに、Operaのメニューバーが文字化けせずにかつきれいになったこと。ただし、xtermの太字がつぶれる件に関してはまだ直らない。

ここまででHDDの742MBを消費(Operaはまだ導入していない)。

[ttf-ipafonts-install] IPAフォントの導入(apt)

# echo \# IPA Font Installer >> /etc/apt/sources.list
# echo deb http://www.j96.org/~kouji/tmp/ttf-ipafonts-installer/ ./ >> /etc/apt/sources.list
# echo deb-src http://www.j96.org/~kouji/tmp/ttf-ipafonts-installer/ ./ >> /etc/apt/sources.list
# apt-get update
# apt-get install ttf-ipafonts-installer

パッケージを提供している方がいらっしゃいますので、使わせていただきます。この操作の前にダウンロードが必要だったと思う。

[ttf-ipafonts-install] IPAフォントの導入(ダウンロード)

結構前からフリーだったIPAフォントだが、別のソフトウェアに同梱されての配布だった。このたびこのフォントのみの配布が始まったので導入してみた。まずIPAフォントのダウンロードページからダウンロードする。

# wget http://???????.??.??/IPA???????.php

で解凍する。

# unzip IPA????????.zip

解凍してできたttfファイルを然るべき場所に移動する。

# mv IPA??????/*.ttf ~/.font/

フォントキャッシュの更新を行う。

# ??font?? -km

X環境の再起動を行ったけど変化無いな。どこか間違っているんだよなぁ。

[urxvt] rxvt-unicode

せっかく綺麗な日本語にしたのに仮想コンソールエミュレータの日本語は汚いままだ。さらに、日本語太字が豆腐になる。で、rxvtを導入しておく。rxvtの導入の恩恵は別にきれいな日本語だけではないそうな。メモリとか肥大化しすぎたxtermのコードを減量したのがrxvtらしい。

導入

unicode対応したパッケージ(rxvt-unicode)を導入していないと日本語表示が化ける。豆腐とかそれ以前に化ける。

# apt-get install rxvt-unicode

初期起動オプションの設定

まずは指定できるオプション名と内容を確認する。

$ man rxvt

~/.Xdefaultsに書き込む。とりあえず設定したものは下のような感じ。

$ echo Rxvt.font: k14 >> ~/.Xdefaults
$ echo Rxvt.foreground: white >> ~/.Xdefaults
$ echo Rxvt.background: black >> ~/.Xdefaults
$ echo Rxvt.scrollBar: False >> ~/.Xdefaults
$ echo Rxvt.saveLines: 0 >> ~/.Xdefaults

起動してみて確認。

$ rxvt

いいね。

コマンドラインオプションを指定して起動時に制御

~/.Xdefaultsで指定すればコマンドラインオプションを付けないで起動したときの設定を変更できる。これとは逆にコマンドラインオプションを指定して起動時の設定を変更することもできる。

$ urxvt -fg black -bg white +sb

[ssh][rxvt] LANG=ja_JP.eucJPな環境にLANG=ja_JP.UTF-8な環境からsshで繋ぎにいく

つまりDebian etchのクライアントからからVine 4.2のsshサーバに繋にいこうということ。Debian etchのデフォルトのロケールはja_JP.UTF-8で、これにurxvtとOpenSSHのsshクライアントをインストールした。Vine 4.2のデフォルトロケールはja_JP.eucJPでOpenSSHのsshサーバをインストールした。

debian@hoge $ LANG=ja_JP.eucJP urxvt &

出てきたurxvtでsshコマンドを叩く。

debian@hoge $ ssh hage@vine

vineのサーバにログインしたら試しにlsとか叩いてみる。日本語で表示された。いままで頑張ってサーバ側からの解決策を模索していたけど、どれもうまくいかなかった。まぁ実用上は問題ないのでOKかな。

[putty] puttyの設定

puttyはsshクライアント。サーバはlinuxを使っているけど、クライアントはwindows。ということで、windowsで簡単に導入できるsshクライアントを導入した。cygwinとかを入れるのはあまり好きじゃない。だってせっかくネイティブなlinuxがあるのだから。特に行った設定は、サーバのアドレス(hoge.net)、キーファイルのパス(c:\ssh\hogenet.pty)、文字コード(UTF-8)(CJKとか、non-cjkとかauto detect japaneseとかではない)。これでOKかな。

Operaの導入

aptで導入可能。ただしサーバのpgp鍵の追加が必要。詳細はOperaのナレッジベースにある。このページはここで言及されている方法に準拠。だってやり方よくわからないもの。まずapt lineに追加。いわれたとおりRELEASEをetchに変更。

# vi /etc/apt/sources.list
> deb http://deb.opera.com/opera etch non-free

上のWebに載っていたpgp keyを追加する前に一つ試してみよう。確かにOpera Software Archives Automatic Signing Keyということで署名されている。これを信じるかは、自己責任ってやつだ。ためしにoperaで検索するとかなりたくさん引っかかる。

gpg --keyserver subkeys.pgp.net --search-key 6A423791
gpg --keyserver subkeys.pgp.net --search-key opera

一通り遊んだところで本題に戻る。次はpgp keyをダウンロードして鍵リングに追加。

gpg --keyserver subkeys.pgp.net --recv-key 6A423791

追加されたかを確認。さらにフィンガープリントを確認。入力が面倒なので鍵を引数にしない。鍵の数が少なければこれでも流れずにすむ。6A423791を引数に取ればこれに対応する鍵の内容がピンポイントで表示される。

gpg --list-key
gpg --fingerprint

最後に、追加された鍵をテキストで(--armor)出力してパイプでaptの鍵リングに追加。

gpg --armor --export 6A423791| apt-key add -

apt lineを編集して、apt鍵リングに追加したので、リストの更新とかいろいろしておく。

# apt-get update
# apt-get upgrade
# apt-get dist-upgrade

これでやっとインストールできる。

# apt-get install opera
# vi /etc/apt/sources.list
> deb http://deb.opera.com/opera etch non-free
# gpg --keyserver subkeys.pgp.net --recv-keys 033431536A423791
# gpg --armor --export 033431536A423791 | apt-key add -
# apt-get update
# apt-get upgrade
# apt-get dist-upgrade
# apt-get install opera

ついでに日本語のメニューも導入してみよう

# w3m google.co.jp
> Operaで検索日本語メニューファイルをrootのホームにダウンロード
# mv ouw925_ja.lng /usr/share/opera/locale/
# cd /usr/share/opera/locale/
# chmod 0644 ouw925_ja.lng
# chown root ouw925_ja.lng
# chgrp root ouw925_ja.lng

Operaを一般ユーザで起動して設定。設定しても日本語でねぇ。どうする?前の項を読め

ここまででHDDの774MBを消費。

で起動してみると、エラーが出る。エラーが出ても起動したので、気にしない。調べてみると、このエラーはJava関係のライブラリが無いと怒られるらしい。設定項目でJavaを使わないというように設定しても怒られる。これは、Operaのバージョンが新しいと、Javaは組込みで起動するようになっているらしい。昔はJavaはプラグインとして起動していたけれど、最近は組込みなので、怒られるらしい。

$ opera &
ERROR: ld.so: object 'libjvm.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object 'libawt.so' from LD_PRELOAD cannot be preloaded: ignored.

nfsサーバの導入

ファイル共有したいファイルを提供するマシンにnfs-kernel-serverを導入し、設定ファイルである/etc/expoetsを編集する。編集後にnfsサーバの再起動を行う。ネットマスクを/16にしているのはこのマシンの属するクラスCネットワークを越えて別ネットワークにいるマシンにもマウントを許可したいから。no_subtree_checkがないと怒られる。

hoge:~# apt-get install nfs-kernel-server
hoge:~# echo "/home 192.168.0.0/16(rw,sync)" >> /etc/exports
hoge:~# /etc/init.d/nfs-kernel-server restart
Stopping NFS kernel daemon: mountd nfsd.
Unexporting directories for NFS kernel daemon....
Exporting directories for NFS kernel daemon...exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "192.168.0.0/16:/home".
  Assuming default behaviour ('subtree_check').
  NOTE: this default will change with nfs-utils version 1.1.0
.
Starting NFS kernel daemon: nfsd mountd.
  1. class C ネットワーク - Google 検索
  2. @IT:連載 基礎から学ぶWindowsネットワーク 第8回 アドレス・クラスとさまざまなIPアドレス 1.IPアドレスのクラス

怒られたのでno_subtree_checkを調べる。/etc/exportのmanページに「一般的な指針として、ホームディレクトリは サブツリーのチェックを無効にしてエクスポートすべきである」という記述を発見。これにしたがって先に追加した内容を削除して、新たにno_subtree_checkを有効にした設定を追加。怒られなくなる。

hoge:~# vi /etc/exports
hoge:~# echo "/home 192.168.0.0/16(rw,sync,no_subtree_check)" >> /etc/exports
hoge:~# /etc/init.d/nkf-kernel-server restart
Stopping NFS kernel daemon: mountd nfsd.
Unexporting directories for NFS kernel daemon....
Exporting directories for NFS kernel daemon....
Starting NFS kernel daemon: nfsd mountd.
  1. either 'subtree_check' or 'no_subtree_check' specified for export - Google 検索
  2. ねこ様にもてあそばれる日々(02-24[長年日記])
  3. no_subtree_check - Google 検索
  4. Manpage of EXPORTS

ファイルを開いたりする側ののマシンでportmapデーモンを導入し、nfsマウントをするための設定を/etc/fstabに書き込む。

bar:~# apt-get install portmap
bar:~# mount -t nfs -o rw hoge:/home/hoga/ /home/foo/mnt/hoga
bar:~# umount /home/foo/mnt/hoga
bar:~# echo "hoge:/home/hoga/ /home/foo/mnt/hoga defaults,hard,intr 0 0">> /etc/fstab
bar:~# mount /home/foo/mnt/hoga

最後にテスト。読み書きが可能であることをチェック、成功。

  1. debian|etch nfs - Google 検索
  2. Server World - Debian GNU/Linux 4.0 - NFSサーバー構築
  3. nfs fstab - Google 検索
  4. @IT:NFSを使うには
  5. nfs-kernel-server - Google 検索
  6. 第26回 「NFSサーバーの構築」
  7. /etc/init.d/nfs-kernel-server - Google 検索
  8. install nfs-kernel-server - Rock’N’Debian!!

hoga@hogeのホームディレクトリをfoo@barのホームディレクトリ以下の~/mnt/hogaにマウントした。hoge@hogaのホームディレクトリの下には/dev/hdc1とか/dev/md0とかをマウントしたディレクトリ(~/mnt/hdc1、~/mnt/md0)があり其の中にファイルやディレクトリが収められているが、上のままだとこれらのディレクトリの中味が空になってしまう。

hoge:~# ls /home/hoga/mnt/hdc1 -a
. .. test.txt test/
bar:~# ls /home/bar/mnt/hoga/mnt/hdc1 -a
. ..

そこで、これらのディレクトリも/etc/exportsに含めて、さらにマウントする。

hoge:~# echo "/home/hoga/mnt/hdc1 192.168.0.0/16(rw,sync,no_subtree_check)" >> /etc/exports
hoge:~# echo "/home/hoga/mnt/md0 192.168.0.0/16(rw,sync,no_subtree_check)" >> /etc/exports

これらのディレクトリをbar@fooマウントさせる。

bar:~# echo "hoge:/home/hoga/mnt/hdc1 /home/foo/mnt/hoga/mnt/hdc1 defaults,hard,intr 0 0">> /etc/fstab
bar:~# echo "hoge:/home/hoga/mnt/md0 /home/foo/mnt/hoga/mnt/md0 defaults,hard,intr 0 0">> /etc/fstab
bar:~# mount -a

このようにすることでhoga@hogeでもfoo@barでも同じような操作感で使用できる。

hoge:~# ls /home/hoga/mnt/hdc1 -a
. .. test.txt test/
bar:~# ls /home/bar/mnt/hoga/mnt/hdc1 -a
. .. test.txt test/

sambaサーバの導入

導入するマシンは家のネットワークのハブになっているマシン。windowsもlinuxもこのマシンと繋がるので各マシン間のファイル共有のためにファイルサーバの機能を持たせる。

# apt-get install samba

インタラクティブに尋ねられる質問が2つ。

Package configuration
┌─────────────────────────────────────────────────────────────────────────┤ Samba Server ├─────────────────────────────────────────────────────────────────────────┐
│ Please specify the workgroup you want this server to appear to be in when queried by clients. Note that this parameter also controls the domain name used with   │
│ the security=domain setting.                                                                                                                                     │
│                                                                                                                                                                  │
│ Workgroup/Domain Name:                                                                                                                                           │
│                                                                                                                                                                  │
│ ________________________________________________________________________________________________________________________________________________________________ │
│                                                                                                                                                                  │
│                                                                            <Ok>                                                                                │
│                                                                                                                                                                  │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

/etc/samba/smb.confの[grobal]セクションのworkgroup変数の設定に反映される。何も書かずにOk。

Package configuration
┌─────────────────────────────┤ Samba Server ├──────────────────────────────┐
│                                                                           │
│ If your computer gets IP address information from a DHCP server on the    │
│ network, the DHCP server may also provide information about WINS servers  │
│ ("NetBIOS name servers") present on the network.  This requires a change  │
│ to your smb.conf file so that DHCP-provided WINS settings will            │
│ automatically be read from /etc/samba/dhcp.conf.                          │
│                                                                           │
│ The dhcp3-client package must be installed to take advantage of this      │
│ feature.                                                                  │
│                                                                           │
│ Modify smb.conf to use WINS settings from DHCP?                           │
│                                                                           │
│                    <Yes>                       <No>                       │
│                                                                           │
└───────────────────────────────────────────────────────────────────────────┘

このコンピュータがDHCPサーバからIPアドレスを割り振ってもらう場合にはYesを選択すると幸せになれるかもしれません、という話。そもそもDHCPでIPアドレスを受け取っていないのでNoを選択。最後に起動したかチェック。

# ps wax | grep mbd
 5097 ?        Ss     0:00 /usr/sbin/nmbd -D
 5099 ?        Ss     0:00 /usr/sbin/smbd -D
 5101 ?        S      0:00 /usr/sbin/smbd -D
 5104 pts/2    S+     0:00 grep mbd

ログインパスワードと同じパスワードでsambaを使いたい場合には、smbpasswdでおなじパスワードを入力する。sambaのパスワードとログインパスワードは別に管理されるので、smbpasswdを実行しなければsambaディレクトリをマウントできない。

# smbpasswd -a hoge
New SMB password:
Retype new SMB password:

Windows XPでテスト、ネットワークドライブの割り当てから適当なドライブレターで割り当て、成功。このままだと、あるユーザのホームディレクトリを同じユーザとして使用する場合、マウントと読み込みは出来ても書き込みは出来ない。/etc/samba/smb.confの[homes]セクションを編集して(writable = yes)ホームディレクトリの読み書きを許可。sambaデーモンの再起動。

# vi /etc/samba/smb.conf
# /etc/init.d/samba restart

再度テスト、読み書き可能を確認、成功。懸案事項として、/etc/samba/smb.confの[grobal]セクションのunix password syncをyesとすると、「smbpasswdでsambaパスワードを変更すると其のパスワードがログインパスワードになる」が、其の逆については不明。必要性を感じないのでunix password sync = noのまま。デフォルトはno。

  1. etch samba - Google 検索
  2. [ヅラド] Debian GNU/Linux etch 上のファイルを Samba で共有する
  3. パスワード 同期 samba - Google 検索
  4. @IT:LinuxとSambaのパスワードを同期するには
  5. Sambaの基本設定
  6. samba 読み書き smb.conf - Google 検索
  7. Sambaの共有フォルダにファイルが書き込めず失敗してしまう:ITpro

[samba] printing/pcap.c:pcap_cache_reload(159) Unable to open printcap file /etc/printcap for read!

sambaサーバを運用中にprinting/pcap.c:pcap_cache_reload(159) Unable to open printcap file /etc/printcap for read!のようなログが連続して流れる。設定ファイル/etc/samba/smb.confのなかでload printers=noとやってみてもなくならないので、/etc/printcapを作ることで解決。とりあえず様子見ですけど。

# ls -lt /var/log/samba
total 184
-rw-r--r-- 1 root root 125644 2009-02-06 16:59 log.XXXXXXXXXXXXXXX
-rw-r--r-- 1 root root  39351 2009-02-06 16:35 log.nmbd
-rw-r--r-- 1 root root   4327 2009-02-06 16:29 log.smbd
-rw-r--r-- 1 root root    138 2009-02-04 23:58 log.smbmount
-rw-r--r-- 1 root root      0 2009-02-01 18:20 log.192.168.11.5
drwx------ 4 root root   4096 2009-02-01 18:11 cores
# tail -f /var/log/samba/log.XXXXXXXXXXXXXXX
[2009/02/06 16:59:51, 0] printing/pcap.c:pcap_cache_reload(159)
  Unable to open printcap file /etc/printcap for read!
# touch /etc/printcap
  1. Unable to open printcap file /etc/printcap for read - Google 検索
  2. K's Linux "Server Message Block" service memo
  3. なかのにっき
  4. つれづれ~努力と根性?~: 2008/09
  5. pcap_cache_reload samba - Google 検索
  6. www.mkjinet.com/linux/admin/
  7. ダークサイドの呟き: samba3.0.25b @ Solaris10
  8. printcap name = lpstat - Google 検索
  9. sambaの設定
  10. Samba Server
  11. samba printers 使用しない - Google 検索
  12. samba.confの作成

smbfsの導入

まずはインストール、注意する点はパッケージ名をsambaとしないこと、こうするとサーバ用のパッケージが導入されてサーバが立ち上がってしまう。今したいことはSambaのクライアントになること、Sambaディレクトリをマウントすること。インストール中にSambaサーバのワークグループネームをきかれる。おそらくこれはマシンにサーバをインストールしたときに意味を持ってくるものと思うがとりあえずdeWGとでもしておく。つぎにDHCPをとおしてNetBIOSネーム通知を行うかをきかれるが、デフォルトのままNoにする。

# apt-get install smbfs

インストールが済んだらマウントテスト

# mount -t smbfs -o username=hoge //192.168.1.1/hoge_mount_point /mnt/smbfs
# umount /mnt/smbfs

正しくマウントできることを確認したらfstabに追記

# vi /etc/fstab
> //192.168.1.1/hoge_mount_point /home/hage/mnt/hoge_mount_point username=hoge 0 0

fstabからマウントできることを確認

# mount /home/hage/mnt/hoge_mount_point
# umount /home/hage/mnt/hoge_mount_point
# mount -a
# ls /home/hage/mnt/hoge_mount_point

rootで読み込み書き込みができることを確認。このままでは一般ユーザで読み込み書き込みができないので、オプションを追加。

# vi /etc/fstab
> //192.168.1.1/hoge_mount_point /home/hage/smb/hoge smbfs rw,uid=hage,gid=hage,username=hoge 0 0

uid=hoge,gid=hogeはマウントするディレクトリに含まれるファイルやディレクトリのユーザーとオーナーを指定する。fmask=000,dmask=000はファイルとディレクトリのパーミッションマスク。パーミッションマスクについての図解は下かもしれない。つまりあってるか間違ってるかはわからんということだ。もしあっているならば、リモートより緩いパーミッションにはできないし、

|        (666)8 = (110 110 110)2 ... ファイルのデフォルトパーミッション
|    - | (644)8 = (110 100 100)2 ... パーミッションの禁止ビット(umask)
| -----+------------------------
|        (022)8 = (000 010 010)2 ... ローカルでのパーミッション
+---------+-------+
|         | REMORT PERMISSION   |
|         +-----+-----+-----+-----+-----+-----+-----+-----+
|         | 000 | 001 | 002 | 003 | 004 | 005 | 006 | 007 |
+---+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| M | 000 | 555 | 555 | 555 | 555 | 555 | 555 | 555 | 555 |
+---+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| S | 001 | 001 | 001 | 001 | 001 | 001 | 001 | 001 | 001 |
+---+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| S | 002 | 000 | 000 | 000 | 000 | 000 | 000 | 000 | 000 |
+---+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| S | 003 | 001 | 001 | 001 | 001 | 001 | 001 | 001 | 001 |
+---+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| S | 004 | 004 | 004 | 004 | 004 | 004 | 004 | 004 | 004 |
+---+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| S | 005 | 005 | 005 | 005 | 005 | 005 | 005 | 005 | 005 |
+---+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| S | 006 | 004 | 004 | 004 | 004 | 004 | 004 | 004 | 004 |
+---+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| S | 007 | 005 | 005 | 005 | 005 | 005 | 005 | 005 | 005 |
+---+-----+-----+-----+-----+-----+-----+-----+-----+-----+

結局の所はよくわからん。

mplayerの導入

mplayerはクールだ

# apt-cashe search debian-multimedia-keyring
> debian-multimedia-keyring は見付からなかった。
# vi /etc/apt/sources.list
# echo "deb http://www.debian-multimedia.org etch main" >> /etc/apt/sources.list 
# apt-cache search debian-multimedia-keyring
> debian-multimedia-keyring は見付からなかった。
# apt-get update && apt-get upgrade && apt-get dist-upgrade && apt-get clean
# apt-cache search debian-multimedia-keyring
> debian-multimedia-keyring を発見。
# apt-get install debian-multimedia-keyring
# apt-get update && apt-get upgrade && apt-get dist-upgrade && apt-get clean
# apt-get install mplayer w32codecs

再生のときは

$ mplayer -ao oss *.mp3

とすれば音が出る(マシン依存だけどね)

結局のところalsaで音が出た。まずはalsaplayerをインストールする

# apt-get install alsaplayer alsa-utils

その後再起動して

# shutdown -r now

同じようにmplayerを起動

# mplayer *.mp3

[aumix] コマンドラインで音量設定

コマンドラインから音量設定が出来るとクールだ。

# apt-get install aumix

設定する場合は一般ユーザからでも可能。x-window-systemにログインしているユーザからならOKだとおもう。

$ aumix

[xpdf] xpdf-japaneseの導入

aptラインにmainのみが選択されていると、xpdfは日本語を表示できない。新たにnon-freeを付け足しておく。

# vi /etc/apt/sources.list

付け足したらパッケージリストの更新をする。

apt-get update && apt-get upgrade && apt-get dist-upgrade && apt-get clean

目的のパッケージがあるかどうか検索してみる。

# apt-cache search xpdf

xpdf-japaneseというパッケージが見えるのでこれといっしょにxpdfをインストールする。

# apt- get install xpdf xpdf-japanese

pdfを表示させる機能で言えば、これ以外の多くのpdfビューアに劣るxpdfだが、このパッケージに含まれるpdfを操作するツールはよく使う。特にpdfからテキストを抽出するpdftotext、pdfのフォント情報を表示する「pdffonts」、pdfに含まれるラスタ画像を抽出する「pdfimages」、pdfの情報(著作者など)を表示する「pdfinfo」、pdfをビューアで見た通りの画像(pbmだったかな)に変換する「pdftoppm」、pdfをポストスクリプト形式に変換する「pdftops」、pdfからテキストを抽出する「pdftotext」。これらはふとした瞬間にものすごく役に立つ。さらにベクタ画像を抽出できるようになれば最高だな。

ispellの導入

世の中にはaspellとispellという2つのスペルチェッカがあるらしい。それで、ispellのほうがいいらしい。ということで、ispellを導入してみる。必要なのは、ispellのプログラム自身と、辞書とワードファイル。英語のスペルチェックがしたいのでそれに適した辞書とワードファイルを導入する必要がある。

# apt-get install ispell iamerican wamerican

パッケージリストの先頭からそれぞれプログラム本体、英語の辞書、ワードリスト。英語のワードリストにはアメリカンとブリティッシュとカナディアンの3種類ある。それぞれ、無印、large、huge、smallとある。

rieceの導入

rieceはemacsのircクライアント。まずはemacsのインストール。

# apt-get install emacs

次にrieceのインストール

# apt-get install riece

このままだとだめ。だめな理由は、irc.2ch.netだと日本語が化ける。とりあえずUnicodeサポートさせる。バイトコンパイルを行うのでapt-getでも多少時間がかかる。

# apt-get install mule-ucs

~/.emacsに設定を追加。

$ echo (require 'un-define)>>~/.emacs

んで、起動。起動に結構時間がかかるようになる。

$ emacs

rieceで接続しても文字化け無。書き込みと読み込みOK。

[linux] nfsのレスポンスが遅くなり、set_rtc_mmss: can't update from ** to **のエラー

nfsでファイルを読み書きしているときに、たまにものすごくレスポンスが遅くなる場合がある。原因はntpサーバマシンとntpクライアントマシンの間で時刻が大きく食い違っていたことが原因と考えられる。時刻同期に失敗していたnfsサーバマシンの時刻あわせを行い、様子見運用。ntpレスポンスが遅くなったときにそのときに/var/log/messageに流れたエラーらしきものが下。。

Apr  5 07:58:34 debian kernel: [2368986.028400] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:35 debian kernel: [2368987.028164] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:36 debian kernel: [2368988.028188] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:37 debian kernel: [2368989.028175] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:38 debian kernel: [2368990.028150] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:39 debian kernel: [2368991.028182] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:40 debian kernel: [2368992.028190] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:41 debian kernel: [2368993.028162] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:42 debian kernel: [2368994.028160] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:43 debian kernel: [2368995.028301] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:44 debian kernel: [2368996.028338] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:45 debian kernel: [2368997.028446] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:46 debian kernel: [2368998.028164] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:47 debian kernel: [2368999.028171] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:48 debian kernel: [2369000.028168] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:49 debian kernel: [2369001.028088] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:50 debian kernel: [2369002.028161] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:51 debian kernel: [2369003.028177] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:52 debian kernel: [2369004.028209] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:53 debian kernel: [2369005.028168] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:54 debian kernel: [2369006.028157] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:55 debian kernel: [2369007.028242] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:56 debian kernel: [2369008.028155] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:57 debian kernel: [2369009.028132] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:58 debian kernel: [2369010.028145] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:58:59 debian kernel: [2369011.028145] set_rtc_mmss: can't update from 0 to 58
Apr  5 07:59:00 debian kernel: [2369012.028069] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:01 debian kernel: [2369013.028138] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:02 debian kernel: [2369014.028132] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:03 debian kernel: [2369015.028123] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:04 debian kernel: [2369016.028063] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:05 debian kernel: [2369017.028067] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:06 debian kernel: [2369018.028059] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:07 debian kernel: [2369019.028068] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:08 debian kernel: [2369020.028058] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:09 debian kernel: [2369021.028057] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:10 debian kernel: [2369022.028059] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:11 debian kernel: [2369023.028067] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:12 debian kernel: [2369024.028063] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:13 debian kernel: [2369025.028067] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:14 debian kernel: [2369026.028066] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:15 debian kernel: [2369027.028073] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:16 debian kernel: [2369028.028057] set_rtc_mmss: can't update from 0 to 59
Apr  5 07:59:17 debian kernel: [2369029.028161] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:18 debian kernel: [2369030.028145] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:19 debian kernel: [2369031.028108] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:20 debian kernel: [2369032.028195] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:21 debian kernel: [2369033.028153] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:22 debian kernel: [2369034.028113] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:23 debian kernel: [2369035.028074] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:24 debian kernel: [2369036.028064] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:25 debian kernel: [2369037.028061] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:26 debian kernel: [2369038.028069] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:27 debian kernel: [2369039.028066] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:28 debian kernel: [2369040.028067] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:29 debian kernel: [2369041.028072] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:30 debian kernel: [2369042.028064] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:31 debian kernel: [2369043.028072] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:32 debian kernel: [2369044.028069] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:33 debian kernel: [2369045.028247] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:34 debian kernel: [2369046.028074] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:35 debian kernel: [2369047.028064] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:36 debian kernel: [2369048.028060] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:37 debian kernel: [2369049.028120] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:38 debian kernel: [2369050.028165] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:39 debian kernel: [2369051.028195] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:40 debian kernel: [2369052.028182] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:41 debian kernel: [2369053.028749] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:42 debian kernel: [2369054.028152] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:43 debian kernel: [2369055.028183] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:44 debian kernel: [2369056.028170] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:45 debian kernel: [2369057.028115] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:46 debian kernel: [2369058.028157] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:47 debian kernel: [2369059.028188] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:48 debian kernel: [2369060.028157] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:49 debian kernel: [2369061.028156] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:50 debian kernel: [2369062.028171] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:51 debian kernel: [2369063.028184] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:52 debian kernel: [2369064.028177] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:53 debian kernel: [2369065.028163] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:54 debian kernel: [2369066.028162] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:55 debian kernel: [2369067.028169] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:56 debian kernel: [2369068.028201] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:57 debian kernel: [2369069.028207] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:58 debian kernel: [2369070.028169] set_rtc_mmss: can't update from 1 to 59
Apr  5 07:59:59 debian kernel: [2369071.028152] set_rtc_mmss: can't update from 1 to 59

まずはnfsサーバマシンとクライアントマシンの時刻を確認すると大きく(3分くらい)違っている。

nfsserver:~$ date
Sun Apr  5 08:46:19 JST 2009
nfsclient:~$ date
Sun Apr  5 08:39:16 JST 2009

両方のマシンでのntpqの結果からnfsserverでは、時刻がずれ過ぎて時刻同期に失敗していることがわかる。offsetが168700[msec]程度なので、ほぼ2分48秒のずれがある。30分以上ずれると同期に失敗すると言う話を聞いたことがあるが、そうじゃないのかな。

nfsserver:~# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 doga.jp         133.243.238.243  2 u   61   64   17   39.279  168739. 26565.7
 ns.doga.co.jp   133.243.238.243  2 u   23   64   37   48.324  168745. 128116.
 suisho.attritio 133.100.9.2      2 u   31   64   37    9.928  168748. 128445.
 www.4koma.com   133.243.238.243  2 u   25   64   37   23.192  168751. 128115.
nfsclient:~# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+211.19.56.138   192.168.0.5      2 u  177 1024  377   12.837    2.072   0.340
*doga.jp         133.243.238.243  2 u  678 1024  377   17.071    1.699   6.645
+ns2.ktroad.net  210.173.160.57   3 u  204 1024  377   17.039    1.324   0.061
-7c29477b.i-revo 61.114.187.55    2 u  167 1024  377   16.798    0.937   1.085

時刻がずれすぎている場合は手作業で直す必要がある。そのためにntpdateコマンドを使う。コマンドが見つからないのでインストールする。

nfsserver:~# ntpdate doga.jp
-su: ntpdate: command not found
nfsserver:~# aptitude search  ntp
p   chntpw                  - NT SAM password recovery utility
p   cyrus-nntpd-2.2         - Cyrus mail system (NNTP support)
v   cyrus21-nntpd           -
v   cyrus22-nntpd           -
p   libnet-ntp-perl         - Perl module to query NTP servers
p   libnews-nntpclient-perl - News::NNTPClient, Perl support for accessing NNTP servers
p   mountpy                 - script for quick mounting of removable devices
p   msntp                   - A very simple and portable SNTP client/server
i   ntp                     - Network Time Protocol daemon and utility programs
p   ntp-doc                 - Network Time Protocol documentation
p   ntpdate                 - client for setting system time from NTP servers
p   openntpd                - OpenBSD NTP daemon
nfsserver:~# aptitude -R install ntpdate
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
The following NEW packages will be installed:
  ntpdate
The following packages are RECOMMENDED but will NOT be installed:
  lockfile-progs
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 59.8kB of archives. After unpacking 209kB will be used.
Writing extended state information... Done
Get:1 http://ftp.jp.debian.org lenny/main ntpdate 1:4.2.4p4+dfsg-8 [59.8kB]
Fetched 59.8kB in 0s (80.4kB/s)
Selecting previously deselected package ntpdate.
(Reading database ... 93881 files and directories currently installed.)
Unpacking ntpdate (from .../ntpdate_1%3a4.2.4p4+dfsg-8_i386.deb) ...
Processing triggers for man-db ...
Setting up ntpdate (1:4.2.4p4+dfsg-8) ...
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Writing extended state information... Done
Reading task descriptions... Done

導入が終わったら時刻あわせ。ntpクライアントデーモンが動いているとntpdateが使うソケットが使用中となって同期できないので、ntpdateする前にntpクライアントデーモンをstopする。同期完了したら再度ntpクライアントデーモンをstartしておく。

nfsserver:~# date
Sun Apr  5 08:46:19 JST 2009
nfsserver:~# ntpdate ntp1.jst.mfeed.ad.jp
 5 Apr 08:47:04 ntpdate[3568]: the NTP socket is in use, exiting
nfsserver:~# date
Sun Apr  5 08:47:12 JST 2009
nfsserver:~# /etc/init.d/ntp stop
Stopping NTP server: ntpd.
nfsserver:~# ntpdate ntp1.jst.mfeed.ad.jp
 5 Apr 08:50:49 ntpdate[3577]: step time server 210.173.160.27 offset 173.438520 sec
nfsserver:~# date
Sun Apr  5 08:50:53 JST 2009
nfsserver:~# /etc/init.d/ntp start
Starting NTP server: ntpd.

同期確認のためにntp -qする。すぐには反映されないので30分くらい待って再確認。同期されていることがわかる。

nfsserver:~# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ns.doga.co.jp   133.243.238.243  2 u    -   64    1   62.996  -10.454   7.343
 www.hypercore.c 210.173.160.27   3 u    1   64    1   16.511    1.519   0.507
 kanda.likk.net  133.100.9.2      2 u    -   64    1   10.775  -15.372   0.526
nfsserver:~# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+ns.doga.co.jp   133.243.238.243  2 u   29   64   37   74.702   46.415  23.793
+www.hypercore.c 210.173.160.27   3 u    9   64   37   15.582   64.689   7.138
*kanda.likk.net  133.100.9.2      2 u   42   64   37    9.673   64.877   7.862
  1. set_rtc_mmss - Google 検索
  2. set_rtc_mmss: can't update from ** to ** - tomisima::tmp - cucumberグループ
  3. ntp.conf - Google 検索
  4. NTPDの設定
  5. ntpq - Google 検索
  6. ntpq出力内容の説明

解決したと思ったら同じようなエラーメッセージがまたでる。マザーボードの電池切れという可能性も否定できなくなってきた。と思ったら、同じ人の記事にntpdで更新していれば問題ないとの記述あり。うちはntpdで同期作業を行っているんだけどなぁ。

  1. hiroshi.in|なーなー、なんでそれでも地球まわるん?
  2. hiroshi.in|なーなー、なんでそれでも地球まわるん?

ntpdを一回終了して、ntpdateで時刻あわせ、hwclockでソフトクロックにハードクロックを同期。この状態でwatch ntpq -pすると、初めにoffset値-15msec程度だったのが数分後にoffsetが4000msecくらいに増加(同じ参照サーバで)。結局再起動してしまったよ。これで解決したとしてもなんだかなぁ。今のところ、再起動前に比べてwatch ntpq -pのoffset値が大きくならない。

ただし、同期が出来ているマシンのntpq -pとは若干異なっている。offsetが比較的大きい。

nfsserver:~# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+ntp.kiba.net    197.54.93.103    2 u   21   64  377   19.300   35.570   2.853
*www.4koma.com   133.243.238.163  2 u   17   64  377   21.404   35.848   3.424
-211.19.56.141   211.19.56.138    3 u   27   64  377   12.831   34.355   2.384
+suisho.attritio 133.100.9.2      2 u   17   64  377    8.733   36.825   1.484
nfsclient:~# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*211.19.56.138   192.168.0.5      2 u  652 1024  377   16.197   -1.138   1.616
+doga.jp         133.243.238.243  2 u  136 1024  377   17.160   -1.188   2.200
+ns2.ktroad.net  210.173.160.57   3 u  693 1024  377   17.490   -0.976   1.004
+7c29477b.i-revo 61.114.187.55    2 u  645 1024  377   16.552    0.463   1.151

ソーシャルブックマーク

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

ChangeLog

  1. Posted: 2009-03-14T01:03:27+09:00
  2. Modified: 2009-03-14T09:34:57+09:00
  3. Generated: 2024-11-18T23:09:17+09:00