トラブル雑記帳
019064
最終更新日:Monday, 12-Feb-2007 15:45:01 JST

Linux を使っていて出くわした様々なトラブルを記録していくことにしました。

目次


アップグレードしたら FTP を使えなくなった!

経緯

Vine Linux を ver. 2.0 から ver. 2.6 にアップグレードした。 ハードディスクをまっさらにしてインストールし直すと, 後の設定が面倒なので,上書きインストール(アップグレードインストール?)にした。

この後,Vine 2.6 用のアプリケーションのバージョンアップを行う。

/etc/apt/sources.list を修正し
apt-get update
apt-get upgrade

ほとんどのアプリケーションは,もとの設定ファイルのままで,ちゃんと動いているようなので, 安心していたら,FTPが利用できなくなっていた!

アップグレードしたマシンを hostA とすると,このマシンで ProFTPD サーバーを動かしているのに, 別のマシン hostB から FTP で hostA にアクセスできないのである。 もちろん,アップグレードする前は hostB から hostA に FTP でアクセスできていた。

原因

最初は FTP サーバーが起動していないのかとも思ったが,

/etc/rc.d/init.d/proftpd restart

などとして,proftpd を再起動しても事態は変わらない。

そこで hostA のログを調べてみた。

/var/log/messages の内容
Apr 19 14:28:51 hostA proftpd: proftpd startup succeeded
Apr 19 14:28:51 hostA proftpd[853]: hostA.low-temp.sci.yamaguchi-u.ac.jp - ProFTPD 1.2.6 (built 2002年 9月 29日 日曜日 06:38:09 JST) standalone mode STARTUP
Apr 19 14:28:51 hostA proftpd[853]: hostA.low-temp.sci.yamaguchi-u.ac.jp - /etc/shutmsg present: all incoming connections will be refused.

どうやら,ProFTPD を起動はしたものの, /etc/shutmsg というファイルが存在するので,外からのアクセスは一切受付ませんと言っているようだ。

/etc/shutmsg というファイルを作った覚えはないが,中身を覗いてみると,システムを停止する際にユーザーに通知するメッセージのようだ。 多分,アプリケーション を apt-get でアップグレードする際,FTP などのサーバーを一時的に停止する必要があり, /etc/shutmsg を作成してユーザーに通知したのだろう。

/etc/shutmsg の例
2004 4 19 14 28 51 0010 0005
Maintanance in progress

対処

そこで /etc/shutmsg を削除して ProFTPD を念のため再起動してみたら,ちゃんと他のホストからアクセスできるようになった。

周辺知識:/etc/shutmsg と FTP サーバーの停止について

ftpshut , ftprestart ,ftpaccess , shutdown などのマニュアルを読むと,色々と書いてある。 要するに,ftpshut で FTP サーバーを停止すると /etc/shutmsg が作成され, ftprestart で再起動すれば /etc/shutmsg を削除してから FTPサーバー を起動するらしい。

しかし,Vine 2.6 の中には ftpshut はあったが,ftprestart は入ってなかった!

ftpshut でproftpd を停止した場合,/etc/shutmsg が作られてしまうので, /etc/shutmsg を削除してから /etc/rc.d/init.d/proftpd start などを実行して proftpd を起動しよう。


NIS ( NIS+ ) を使っていると FTP でログインできない!

経緯

Vine 2.0 のころは NIS ( もしかしたら NIS+ かな? )を使ってアカウントを共有していても, FTP の利用に何の支障も無かったような気がするのだが, Vine 2.6 にアップグレードしたら FTP でログインできなくなった。

正確に言うと,FTP サーバーにローカルなアカウントを持っている人 ( FTP サーバーの /etc/passwd や /etc/shadow に登録されている人 )はログインできる。 しかし,ローカルなアカウントは持っていなくて,NIS ( または NIS+ )で認証を受ける人は, FTP でログインできないのだ。 ちなみに,これらの人も ssh などでログインすることはできるので, NIS ( または NIS+ )の認証そのものに問題があるのではないらしい。

原因

どうやら ProFTPD が FTP サーバーの /etc/passwd や /etc/shadow を読んで, ローカルなアカウントを持っているかどうかをチェックしているらしい。

対処

/etc/proftpd.conf に PersistentPasswd off を記入し, proftpd を再起動した。

参考URL

Infoscience の ProFTPD日本語ドキュメント


CD-ROM ドライブが使えないマシンへの Linux のインストール

経緯

学生が使用するパソコンは何故かハードが壊れる。 雑誌の付録 CD-ROM を利用して Linux のバージョンアップをしようとすると, CD-ROM ドライブが故障していて,CD-ROM からインストールできないことがよくある。

対処:NFS を使ったインストール

CD-ROM ドライブを利用可能なパソコンにCD-ROM を入れてマウントし, このディレクトリーを NFS で他のパソコンと共有できるようにし, ネットワーク越しにインストールすることにした。

なお,NFS でなく,FTP を利用してインストールすることもできるはずだが, 私はまだ試していない。 FTP でなく NFS を選んだのには,たいした理由はないのだが,ProFTPD は色々とアクセス制限があるので, インストールの時に何かの制限に引っかかると面倒な気がしたからだ。

■ サーバー側の設定

サーバー側では /mnt/cdrom に CD-ROM ドライブがマウントされるとする。

/etc/exports に export するディレクトリー /mnt/cdrom を記入して

/usr/sbin/exportfs -rv

を実行する。

/etc/exports の例
/mnt/cdrom  *.low-temp.sci.yamaguchi-u.ac.jp(ro)

/etc/hosts.allow に以下の二行を追加する。 ただし aaa.bbb.ccc.ddd/255.255.255.240 はサブネッットのアドレスである。

portmap : aaa.bbb.ccc.ddd/255.255.255.240 , 127.0.0.1
rpc.mountd : aaa.bbb.ccc.ddd/255.255.255.240 , 127.0.0.1

nfs デーモンを起動,または再起動しておく。

/etc/rc.d/init.d/nfs start

■ インストールディスクの準備

インストールしたいパソコンでは CD-ROM ドライブが使えないので, フロッピーディスクから起動することになる。

Vine 2.5 CR (?) まではインストール用のフロッピーディスクが付いてきたが, 何故か Vine 2.6 CR にはフロッピーディスクが付属していない。 (マニュアルや CD-ROM 内のドキュメントにはインストール用のブートディスクが添付してあると書いて有るが, 何故か私が買った Vine 2.6 CR にはどれにも付いていなかった。)

また,今回のように雑誌の付録 CD からインストールする場合には, 当然,自分でインストール用のフロッピーディスクを作成しなければならない。

インストール用のブートディスクの作り方は CD-ROM 内のドキュメント docs/INSTALL.TXT に書いてある。 基本的にはブート用のイメージファイルである boot.img , bootnet.img , pcmcia2img などのどれかを フロッピーディスクに書き込めばよい。 今回はネットワーク経由なので bootnet.img を使う。

Windows の DOSプロンプト上で作る場合
CD-ROM の images ディレクトリーに移動して
..\dosutils\rawrite.exe -n -f bootnet.img -s a:
Linux のコマンドライン上で作る場合
CD-ROM の images ディレクトリーに移動して
dd if=bootnet.img of=/dev/fd0 bs=512 count=2880

ところで,Vine Linux 2.6r4 の CD-ROM を覗いてみたら,/mnt/cdrom/images の中に makeFD.sh というスクリプトがあった。 中身を見ると,どうやら ブートディスク を作るためのものである。

Linux のコマンドライン上で makeFD.sh を使う場合
CD-ROM の images ディレクトリーに移動して
./makeFD.sh
を実行して,メニューから選ぶ。

■ インストール

以下省略


ビデオカードを認識できない

経緯

最新のパソコンを買ったり,あるいは古くてもマイナーなビデオカードを積んだパソコンだったりすると, XFree86 でビデオカードがサポートされていないことがある。

自分でパソコンを買う時には, 必ず,購入前にビデオカードが Linux でサポートされているボードかどうかをチェックしよう。

不幸にして,購入してしまってからビデオカードが Linux でサポートされていないことに気づいた場合には, しょうがないので,フレームバッファーを利用してみよう。 少し動作が鈍いが,一応 X が使えるので,これで一年間くらい我慢していれば,多分,ビデオカードがサポートされるようになる。

私はフレームバッファーを使ったことはなかったので,全然詳しくないのだが,先日, とてもマイナーなビデオカードをつんだ古いノートパソコンに Linux をインストールしたところ, X が動作しなかったので,やむを得ずフレームバッファーを使ってみることにした。

対処:フレームバッファーの利用

ビデオカードが XFree86 でサポートされていなかったとしても, ビデオカードを全く利用できないわけではない。 そのビデオカード専用のアクセラレーション機能を働かせるためのドライバーが無いというだけだ。 従って,アクセラレーション機能などの特殊機能を一切使わない基本的な描画は行える。 どのビデオカードでも共通に使える基本的な機能だけを使用して描画する仕組みの一つがフレームバッファーを利用した描画である。 (本当かな?)

まず,/etc/lilo.conf で解像度を指定する。1024x768 で色深度が 16bits の場合には vga=791 または vga=0x317 という行を追加する。

/etc/X11/lilo.conf の例
prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
linear

image=/boot/vmlinuz-2.4.22-0vl2.3
	label=linux
	read-only
	root=/dev/hda6
        vga=791

image=/boot/vmlinuz-2.2.25-0vl3
	label=linux-2.2-up
	read-only
	root=/dev/hda6

この数値 791 などは,ディスプレイの解像度に応じて以下の表の値を使う。

16進数の場合(未保証)
  640x480 800x600 1024x768 1280x1024 1600x1200
8 bits 301 303 305 307 31C
15 bits 310 313 316 319 31D
16 bits 311 314 317 31A 31E
24 or 32 bits 312 315 318 31B 31F


10進数の場合(未保証)
  640x480 800x600 1024x768 1280x1024 1600x1200
8 bits 769 771 773 775 796
15 bits 784 787 790 793 797
16 bits 785 788 791 794 798
24 or 32 bits 786 789 792 795 799

/etc/lilo.conf を修正したらコマンドラインで /sbin/lilo を実行して lilo を書き込む。

パソコンを再起動すると起動画面の左上にペンギンが表示されているはず。 ( Vine ではペンギンの代わりに Vine のロゴが表示される。)

次に X でフレームバッファーデバイスを利用するために XFree86 の設定ファイル以下のように修正する。

/etc/X11/XF86Config-4 の例
Section "Monitor"
	Identifier "CustomConfiguration"    適当な名前にしておく
	VendorName "Unknown"
	ModelName  "Unknown"
	HorizSync 60
	VertRefresh 75
	Option "dpms"
EndSection


Section "Device"
	Identifier "Linux Frame Buffer"    適当な名前にしておく
	Driver "fbdev"
	BoardName "Unknown"
EndSection

Section "Screen"
	Identifier "Screen0"
	Device "Linux Frame Buffer"
	Monitor "CustomConfiguration"
	DefaultDepth 16
	Subsection "Display"
		Depth 24
		Modes "1024x768"
	EndSubSection
	Subsection "Display"
		Depth 16
		Modes "1024x768"
	EndSubSection
	Subsection "Display"
		Depth 8
		Modes "1024x768"
	EndSubSection
EndSection
/etc/X11/XF86Config の例
# **********************************************************************
# Screen section
# **********************************************************************

# The kernel framebuffer server
Section "Screen"
    Driver      "fbdev"
    Device      "Generic VGA Card"
    Monitor     "Generic Laptop Display Panel 1400x1050"
    Subsection  "Display"
        Depth      16
        Modes       "default"
    EndSubsection
EndSection

テキストモードで起動した場合には,コマンドラインで startx を実行すれば X が起動する。

参考 URL
http://mt-fuji.ddo.jp/~fujito/zaq/beginners/xwin/framebuffer.html

AGOBOT のログを記録したくない

経緯

2004年5月2日ころから,大学内でワームが大流行し始めた。 どうやら Sasser と呼ばれるものらしい。

Linux には関係ないので,のんきに構えていたら, 5月10日ころから,WEB のアクセスログが異常に大きくなり始めた。 調べてみると /var/log/httpd/access_log に以下のような巨大なログが大量に含まれていた。

133.62.xx.xxx - - [10/May/2004:10:38:14 +0900] "SEARCH /\x90\x02\xb1\x02\xb1\x02\xb1\x02\xb1\x02(途中省略)\x90\x90\x90" 414 365 "-" "-"

これ一つのアクセス記録で,なんと約 32kbyte もある。 access_log を表示すると,スクリーンいっぱいを使っても入りきらず,延々とスクロールして,やっとしっぽの \x90\x90\x90" 414 365 "-" "-" に至るという, とんでもないログである。

このような記録は数ヶ月前から,時々見かけたものだが,突然,大発生してしまった。 調べてみると AGOBOT とか,W32.HLLW.Gaobot とか呼ばれる,Windows の WEB サーバー IIS を狙うワームらしい。 Sasser が流行しているのは確かだが,同時に AGOBOT も流行し始めたらしい。やれやれ。

私のサーバーは Linux 上で動作する Apache なので, AGOBOT に攻撃されても,直接ダメージを受けるわけではないが, この大量のゴミログをそのままにしておいては,ログを調べるのに,何かと不便だ。

そこで, AGOBOT に攻撃されても access_log に巨大なゴミを記述しないようにした。

対処: LogFormat の変更

Apache のログをアクセスの種類によって振り分ける方法は,バーチャルホストを使う方法など, 色々あるらしいが,ここでは単純に LogFormat を変更することにした。

Apache の設定ファイルは /etc/httpd/conf/httpd.conf である。 エディターで httpd.conf を開いて,真ん中辺りを見ると以下のような記述がある。

/etc/httpd/conf/httpd.conf の例:変更前
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

これを次のように変更する。

/etc/httpd/conf/httpd.conf の例:変更後
LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

ここで 414 は 「URI が長すぎる」というエラーを示すステイタスコードである。

修正したらファイルを保存してエディターを終了し,WEB サーバーを再起動する。

/etc/rc.d/init.d/httpd restart

この変更の後は AGOBOT の攻撃があると,次のように記録されることになる。

/var/log/httpd/access_log の例:変更後の AGOBOT の記録
133.205.xx.xxx - - [13/May/2004:14:40:39 +0900] "-" 414 365 "-" "-"

なお,この変更をしても,もちろん /var/log/httpd/error_log の記録は変更されない。 AGOBOT の攻撃があると /var/log/httpd/error_log には以下のように記録される。

/var/log/httpd/error_log の例: AGOBOT の記録
[Thu May 13 14:40:39 2004] [error] [client 133.205.xx.xxx] request failed: URI too long

参考URL


無線 LAN カードの交換

経緯

夕べから,どうも自宅のネットワークの調子が悪い。 妙にデーター転送が遅かったり,接続が切れてしまったりする。

私の家の無線LANルーターは MELCO の AirStation ,WLAR-L11G-L だが, 数ヶ月に一度くらい,何故か接続が切れてしまう。 ISP との接続が切れただけの場合もある。 その場合はISP と接続してやればよいだけだが, 何故かルーターそのものの調子が悪くて, パソコンからルーターに接続できなくなることもある。 その場合はやむを得ず,一旦,ルーターの電源を切って, ルーターを起動し直すことになる。

さて,ネットワークが繋がらないようなので, ノートパソコンからルーターに ping を打ってみるが, 返事がない。 またルーターがダウンしたのかと思ったが, 念のため奥さんが使っているデスクトップマシンから試してみると, なんと,こちらからは何の問題もなく,ルーターにも接続できるし, 外部の WEB ページなども見られる。

デスクトップマシンはルーターと LAN ケーブルで繋いであり, 私のノートパソコンは無線 LAN で接続している。 どうやら,ルーターの無線機能か,ノートパソコンに挿してある無線 LAN カードに原因がありそうだ。

取り敢えず,ノートパソコンに挿してある無線 LAN カードを抜いてみる。 この PC カードは無線LANルーターとセットで購入した MELCO の WLI-PCM-L11G だ。 触ってみると,ものすごく熱くなっている。 少し冷ましてから,またカードスロットに入れて

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

としてネットワークを再起動してみると,なんとか繋がったが, またすぐに接続が切れてしまう。 何となく,無線 LAN カードに原因があるような気がしてきた。 まだ2年ちょっとしか使っていないんだけどなぁ ..... 。

対処: 無線 LAN カードを交換する

実は私はもう一つ無線 LAN カードを持っている。

最初に無線 LAN のセットを購入した時,LINUX ではうまく接続できなくて, ひょっとしたら LAN カードのせいかなと思って, corega の無線 LAN カードを購入して試してみたのだ。 あれこれ設定を試して corega のカードで接続できた後, 要領が分かったので,再び MELCO のカードでやってみたら, 今度はすんなり接続できたので,以来,ずっと MELCO のカードを使ってきた。 (相性の問題か, MELCO のカードの方が心持ち速いのだ)

さて,2年以上ほったらかしだった corega のカード PCCB-11 を捜し出して PC カードスロットに挿してみる。ブッ。 厭な音だ。PC カードを上手く認識できない時,こういう音を出す。 認識できたときはピピッという音だ。

このカードを試したのは,もう2年以上前なので, 前の設定ファイルはどこかに行ってしまっている。 Vine の 2.6 くらいなら,このカードくらいは自動的に認識されるのかもしれないが, 自宅のパソコンはまだ 2.1.5 のままだ。 以前は雑誌の記事を参考にして設定したのだが, その雑誌を捜すのも面倒だ。

取り敢えず Google で検索すると, corega のサイトに以下の記事が載っていた。

corega のサイトの記事
 ● corega Wireless LAN PCCB-11 使用時の設定方法

1./etc/pcmcia/wireless.opts を以下のように修正する。
card "corega_K.K." Wireless_LAN_PCCB-11"
version "corega_K.K." , "Wireless_LAN_PCCB-11" , "Version 01.02", ""
bind "wvlan_cs"
module "wvlan_cs" opts "ESSID=xxxx"
※ESSIDには実際に設定されている文字列を入れてください。 
  
2.ネットワークの再起動をかけます。
# /etc/rc.d/init.d/pcmcia restart
(注1)一部,機種依存文字が入っていますが,原文を尊重して,そのまま転載しました。
(注2)上記の設定ではうまくいきません!

さて,上記のような設定は /etc/pcmcia/wireless.opts に書いてもよいのだろうが, Vine では設定内容によって,いくつかのファイルに分けて書いてある。 ここでは一応 Vine の方針に従っておくことにする。 (別にそうしなければいけない訳ではないはず。)

/etc/pcmcia/config.opts の内容
module "wvlan_cs" opts "network_name=XXXXXXX eth=1 channel=10"

私のノートパソコンには有線 LAN カードが内蔵されており, そちらのカードが eth0 と認識されてしまうので, 無線 LAN を eth=1 にしている。 なお,この設定は MELCO のカードの時のままであり,特に変更したわけではない。

/etc/pcmcia/add.conf または /etc/pcmcia/config に以下を追加
card "corega_K.K."
version "corega_K.K." , "Wireless_LAN_PCCB-11" , "Version 01.02", ""
bind "wvlan_cs"

ここが corega のカードを認識させるための設定のポイントだ。 add.conf でも,config でも,どちらに書いてもかまわないのだが, 後から追加することなので,なんとなく add.conf に書いてみた。 corega のサイトの記述では

card "corega_K.K." Wireless_LAN_PCCB-11"

と書いてあるが,これでは「フォーマットが違う!」といって怒られる。 ここは

card "corega_K.K."

と書かねばならない。(または K.K. の後ろの " を削除する??)

初めて無線 LAN を使うなら,この他に /etc/pcmcia/wireless.opts の中で ESSID などを設定するのだが,この辺りの設定は MELCO のカードの場合と同じでよいので, 今回はほうっておく。 本当はこのファイルの設定ではカードの番号などを見て色々設定するものなのだが, 以前に設定の試行錯誤をしていた時に, 2つのカードを差し替えながらごちゃごちゃやったので, どちらのカードでもいいように,いい加減に設定しておいたのだ。

さて,ここまで設定したら,と言っても /etc/pcmcia/add.conf にちょっと書き加えただけだが, pcmcia を再起動して PC カードを挿してみる。

pcmcia の再起動
/etc/rc.d/init.d/pcmcia  restart

corega の無線 LAN カードを差し込むと,今度はピピッと気持ちよい音がして, ちゃんと認識されたようだ。

そこでネットワークを再起動する。

ネットワークの再起動
/etc/rc.d/init.d/network  restart

ルーターに ping をかけると,ちゃんと反応が帰ってきた。 WEB ブラウザーを起動して,適当なサイトに行ってみると, 問題なく表示される。

それから数時間たったが,今のところ何の問題もない。 やはり MELCO の無線 LAN カードが悪くなっていたのだろうか?


wdm でログインできなくなった

症状

ある日,突然,ある学生がパソコンにログインできなくなったと言ってきた。 色々試してみると以下の症状だった。

  1. wdm からユーザー名とパスワードを入力すると,認証用の画面が消えてログインしそうになるのだが, すぐに最初の認証用の画面に戻ってしまう。
  2. サブネット内の,どの端末でも同じ症状である。
  3. 別の端末から ssh でログインすることはできる。
  4. telinit 3 でテキストモードで再起動すると,テキストモードではログインできる。 その状態で startx とすると,ちゃんと X が使える。
  5. 他の学生は何の問題も無く wdm からログインできる。

大分前( vine 2.0 のころだったかな? )パスワードの文字数が13文字を超えると wdm からログインできないという バグがあったようだが,このサブネット内のマシンは vine 2.6r4 なので,そんなバグはとっくに修正済みのはずだ。 念のためパスワードの文字数を訊ねてみたが,そんなに長くはなかった。

/var/log/messages を見ると,認証には成功してログインするが,2秒くらいでログアウトしている。

さらに当人のホームディレクトリーにある各種ファイルを調べてみた。

  1. .xwm.msgs が 0 バイトであり,wdm でログインする際の記録が無い。
  2. .wm_style が 0 バイトであり,デスクトップ(またはウインドウマネージャー)が選択されていない。
  3. .xsession-errors が 0 バイトであり,X が起動していないようだ。
  4. Xrootenv.0 が 0 バイトであり,X が起動していないようだ。

原因

原因は,この学生が巨大なファイルを作ってしまい,その学生が利用できるディスク容量を使いきってしまった ためであった。

実は,数年前,サブネットを Linux で構築して間もない頃, ある学生が自分でも気づかないうちにホームディレクトリー領域全部を埋め尽くす巨大なファイルを作ってしまい, root 以外は誰もログインできないという事態を引き起こしたことがあったのだ。 (無限ループでファイルに書き出したのかなぁ??)

以来,quota を使ってユーザーのハードディスク使用量を制限するようにしていたのだ。

wdm からログインしようとすると,.xwm.msgs, .wm_style, .xsession-errors, Xrootenv.0 などに色々な情報を書き込まねばならないので, ハードディスク領域が足りなくて書き込めないとログインできないのだろう。

対処

巨大なファイルを削除する。

最初に wdm からログインする時,.wm_style が 0 バイトなので,必ずデスクトップを選択してから([変更なし]ではいけない)ログインする。 2回目以降は[変更なし]でよい。

一般ユーザー権限での対処の方法

今回は ssh やテキストモードではログインできたので, 問題を起こした学生当人が対処することもできた。

  1. wdm のログイン画面で [Ctrl]+[Alt]+[F2] を押してテキストログインの画面に切り替える。
  2. テキストモードでログインする。
  3. 巨大なファイルを削除する。
  4. exit でログアウトする。
  5. [Ctrl]+[Alt]+[F7] を押して wdm のログイン画面に切り替える。
  6. デスクトップを選択してから wdm でログインする。

アップグレードに伴うトラブル

このページの最初に Vine を上書きインストールで( dist-upgrade で )アップグレードしたら, FTP が使えなくなった話を書いたが,その後もいくつか問題が生じたので, まとめて書いておく。

KDE をインストールできない

apt-get dist-upgrade では kde がバージョンアップできなかった。

apt-get install task-kde とすると kdeartwork などのいくつものファイルをインストールできないと怒ってくる。 そこで apt-get install kdeartwork とすると kdelibs などがインストールできないと言う。

次に apt-get install kdelibs とすると,これはインストールできた。

そこで,試しに apt-get install kdeartwork とすると,今度はインストールできた。

さらに,試しに apt-get install task-kde としたら,今度はちゃんとインストールできた。

ホームディレクトリーの .kde と .kderc を別のところに移動しておく (古い設定ファイルが残っていると初期化で問題が起こりやすいので,名前を変えるか, 別のディレクトリーに移動しておく)。 KDE でログインすると,無事に新しいバージョンの KDE でログインできた。

gcc が存在しない

C プログラムをコンパイルしようとしたら「 gcc が無い!」と怒られた。

/usr/bin を調べてみると,確かに gcc が存在しない。 しかし,gcc の本体の gcc-2.95.3 は存在している。

他の端末の /usr/bin の中身を調べてみると gcc は gcc-2.95.3 へのシンボリックリンクになっているだけのようだ。 そこでリンクを張ってやることにした。

シンボリックリンクの作成
cd /usr/bin
ln -s gcc-2.95.3 gcc

これで gcc コマンドが利用できるようになった。

xdvi が無い

dvi ファイルを表示しようとしたら 「 xdvi が無い! 」 と怒られた。 xdvi を apt でインストールした。

xdvi のインストール
apt-get install xdvik

注)パッケージ名は xdvi ではない! xdvik です!

dvipdfm が無い

dvipdfm をインストールしてあったはずなのだが,無くなっていた。 新にインストールする。

dvipdfm のインストール
apt-get install dvipdfm

VMware のネットワークが繋がらない

VMware のゲスト OS からホスト側のネットワークにあるマシンに接続できなくなった。 iptables の forward の設定が悪いのかと思ったが,調べてみると, ホスト OS の DNSサーバーにゲスト側から接続できていないことが分かった。

/etc を覗くと rpm でインストールした時に /etc/named.conf.rpmnew が作成されている。 中を見ると最初の方に以下のような注意書きがある。

/etc/named.conf.rpmnew の一部
// generated by named-bootconf.pl

options {
	directory "/var/named";
	/*
	 * If there is a firewall between you and nameservers you want
	 * to talk to, you might need to uncomment the query-source
	 * directive below.  Previous versions of BIND always asked
	 * questions using port 53, but BIND 8.1 uses an unprivileged
	 * port by default.
	 */
	// query-source address * port 53;
};

どうやら named のバージョンが変わって,少し動作が変更されたようだ。

/etc/named.conf の options {} の中に query-source address * port 53; を追記して, /etc/rc.d/init.d/named restart を実行したら, ゲスト側から DNS サーバーにアクセスできるようになった。


ssh で日本語入力できない

症状

ある日 H先生に訊ねられた

「 ssh でログインした後,kedit なんかで日本語が入力できないんだけど,そういうもんなの? 」

そういえば,最近 ssh を使っているとき日本語が入力できないことがあったなぁ .... 。 でも,以前は確か日本語も使えていたはず .... 。

確かめてみると以下の症状であった。

原因

ssh でリモートホストにログインした状態で環境変数の設定を調べてみたところ, 環境変数 XMODIFIERS が存在しなかった!

注)環境変数を調べるにはコマンドラインで
  echo $XMODIFIERS
とするか,または
  printenv | grep XMOD
などとすればよい。

実は私は日本語 ime としては VJE-Delta を使っている。 ところが以前の Vine では VJE-Delta をサポートしていなかったので, .bashrc の中で自分で XMODIFIERS を設定し, さらに必要な場合にはアプリケーションの設定ファイルの中でも色々 vje 用の設定を行っていたのだ。 (昔のアプリケーションは kinput2 に決め打ちしているものがあった!)

そのお蔭で ssh でログインした場合でも,ローカルにログインした場合でも, 必ず vje 用に XMODIFIERS が設定されていた。

ところが最近の Vine では VJE-Delta をサポートしていて, VJE-Delta をインストールすれば wdm でログインする時に一度 VJE-Delta を選んでおけば, 自動的に vje 用の設定になってくれる。 ( あるいは setime で設定できる )

自分であれこれ設定しなくてよくなって,楽になったと喜んでいたのだが,こんな所に落とし穴があった!

ssh でログインした場合,wdm を通らないので XMODIFIERS が設定されないのだ!

環境変数 について.bashrc について の簡単な説明は別のページに書いてあります。)

対処

リモートホストにログインした後で,コマンド export XMODIFIERS="@im=vje" を実行してから kedit や gedit を起動すればよい。

あるいは,ログインする度にコマンドを実行するのが面倒なら, リモートホスト の自分のホームディレクトリーの直下にある .bashrc 設定を書き込めばよい。

.bashrc の記入例
export XMODIFIERS="@im=vje"

上記の例は ime として VJE-Delta を使う場合だが,他の ime を使う場合には vje の部分を適当に変えればよい。

XMODIFIERSの値(未保証)
ime XMODIFIERS="@im=*****"
Cannakinput2
FreeWnnkinput2
Wnn6kinput2
Wnn7kinput2
Wnn7xwnmo_XWNMO
VJE-Deltavje
SKKskkinput
Atok Xhtt

なお,私は VJE-Delta と Wnn7 ,Wnn7xwnmo くらいしか試していない。 Atok X などでは XMODIFIERS 以外にも設定が必要かもしれない。

上手く日本語モードに切り替わらない場合には, ローカルなホストとリモートホストのコマンドラインで printenv を実行して, どんな環境変数が設定されているのかを比べてみればよいだろう。

また,setime の本体は /usr/share/vine の中にある imelib や vinelib なので, このスクリプトを読んでみれば何が必要なのか分かるだろう。


デジタルカメラを USB で接続

経緯

我が家のデジタルカメラは SDメモリーを使用している。 いつも撮影したら PC Card Adapter ( BUFFALO の MCR-4A )を使ってノートパソコンに画像データーを取り込んでいた。 ところが,何故か突然,今日は PC Card を上手くマウントできない。

root になって /var/log/messages を読んでみたが,どうもメモリーの先頭の辺りが壊れているようにも思える?

さあ,困った! 何しろ,よりによって今日の写真は奥さんの誕生パーティーのものだ!

せっかく撮った写真がパーになったりしたら ........ (以下自粛)。

原因

原因調査は後! 取り敢えず,なにがなんでも,すぐに読めるようにすること!

対処法

メモリーをカメラに戻して,カメラで撮影した写真を表示してみると,ちゃんと表示される。

そこで,カメラから直接パソコンに画像データーをダウンロードする方法を捜した。

カメラのマニュアルを読むと,USB でパソコンに接続できるらしい。 (初めて知った)

さっそく USB ケーブルでカメラとパソコンを接続する。

root になって /var/log/messages を読んでみると, どうやら scsi0 に割り当てられたようだ。

/var/log/messages の例
Dec 25 21:11:53 cactus kernel: hub.c: new USB device 00:07.2-2.1, assigned address 4
Dec 25 21:11:53 cactus kernel: usb.c: USB device 4 (vend/prod 0x4da/0x2372) is not claimed by any active driver.
Dec 25 21:11:53 cactus murasaki.usb[1516]: usb device is added
Dec 25 21:11:53 cactus murasaki.usb[1516]: vendor:0x4da product:0x2372 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x8 Isubclass:0x6 Iprotocol:0x50
Dec 25 21:11:53 cactus murasaki.usb[1516]: MATCH(usb-storage) -> match_flags:0x380 vendor:0x0 product:0x0 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x8 Isubclass:0x6 Iprotocol:0x50
Dec 25 21:11:53 cactus murasaki.usb[1516]: Loading usb-storage
Dec 25 21:11:53 cactus kernel: SCSI subsystem driver Revision: 1.00
Dec 25 21:11:54 cactus kernel: Initializing USB Mass Storage driver...
Dec 25 21:11:54 cactus kernel: usb.c: registered new driver usb-storage
Dec 25 21:11:54 cactus kernel: scsi0 : SCSI emulation for USB Mass Storage devices
Dec 25 21:11:54 cactus kernel:   Vendor: MATSHITA  Model: DMC-F1            Rev: 0100
Dec 25 21:11:54 cactus kernel:   Type:   Direct-Access                      ANSI SCSI revision: 02
Dec 25 21:11:54 cactus kernel: USB Mass Storage support registered.

そこで以下のようにして USB ハードディスクと同じ要領でマウントしてみたところ, ちゃんと中身を読めた。

mount の例
# mount -t msdos /dev/sda1 /mnt/usbhdd

/mnt/usbhdd から適当に画像データーを別のディレクトリーにコピーする。
コピーが終わったらアンマウントしておく。

# umount /mnt/usbhdd

やれ,よかった。取り敢えず必要なデーターは読み出せた。(汗)


FFFTP が使えなくなった

経緯

これは Windows で利用する FTP クライアント FFFTP の話なので, ここに書くこともないと思っていたのですが, やはり一応書いておきます。

正確には覚えていないのですが Vine Linux をバージョンアップしたら( 現在のバージョンは Vine 2.6r4 ) MS Windows から FFFTP で Vine の FTP サーバーに接続できなくなりました。

ログインはできているようなのですが

501 NLST: Options not supported

というエラーメッセージが出て,ファイルの一覧を表示できず,先に進むことができません。

原因

どうやら,サーバーの FTP サーバーソフトの ProFTP をバージョンアップしたら, NLST コマンドが使えなくなったようです。 FFFTP はログイン後 NLST でファイルリストを得ようとするので,ハングアップしてしまうらしいです。

対処法

サーバーの方の設定でどうにかできるものでもなさそうです。

そこで,クライアントの FFFTP の設定を以下のように変更しました。

FFFTP の設定の変更例
 FFFTP を起動し,FTPサーバーを選び
 「ホストの設定」----> 「高度」を開く
 「NLST-R を使って高速に ..... 」のチェックをはずす
 「LIST コマンドでファイル一覧を取得」にチェックする

これで無事に FFFTP が動作するようになりました。


USB プリンターを認識させたくない

経緯

これも Windows と関連する話なのですが,たまにしか必要ない事なので, 忘れてしまいそうなのでここに書いておきます。

ちょっと前ならば Linux で USB 機器を認識させるにはどうすればよいかが問題だったのですが, 最近では大抵の USB 機器が接続さえすれば認識されますから, この点については,あまり気にする必要がなくなりました。 私が自宅で使っているプリンターは Canon の BJ S600 ですが, パラレルケーブルでの接続と, USB ケーブルでの接続の両方ができるようになっています。 (同時にではないですよ)

さて,私は普段は Linux しか使わないのですが, 年賀状の印刷と,デジタルカメラで撮った写真の印刷だけは VMware 上の Windows98 で適当な印刷ツールを使って印刷しています。

以前は VMware を起動し,その上で Windows98 を起動してから, 適当なツールを立ち上げて USB ケーブルでプリンターを接続すれば, 自動的に Windows98 が( VMware が )プリンターを認識して利用できるようになっていました。

ところが最近, VMware がプリンターを上手く認識してくれなくなりました。 USB プリンターを接続すると VMware が

USB プリンターを接続したみたいだけど,他の OS が使っているみたいだから, 利用できないよ〜〜〜!

というようなエラーメッセージを出します。

原因

原因はエラーメッセージ通りで,ホスト OS の Linux が USB プリンターを先に認識してしまうことにあります。 root になって /var/log/messages を見れば, Linux が USB プリンターを認識してプリンターデバイスとして接続していることが分かります。

ゲスト OS の Windows98 から Samba を使ってホスト OS のプリンターを利用することはできますが, それではリアルタイムにプリンターの情報を得て,プリンターを自由に制御することができません。

普通に Windows で印刷するように,フルにプリンターを制御するためには, ホスト OS 側ではプリンターを認識せず, ゲスト OS 側の Windows だけがプリンターを独占的に利用してやらなければならないのです。

つまり,ホストの Linux が USB プリンターを認識しないようにする必要があるのです。

対処法

私は Linux ではパラレルケーブルでプリンターを利用しているので, USB プリンターだけを認識しないようにしてもよかったのですが, 面倒なので, 一時的に,新に接続された USB 機器を認識しないようにしました。

/var/log/messages を見ると Vine Linux では murasaki が P&P 機器の認識をしているようです。

そこで /etc/murasaki を覗いてみると murasaki.conf という,いかにも設定を書いてありそうなファイルがありました。

/etc/murasaki/murasaki.conf の中の usb: on となっていた部分を usb: off と変更し, ゲスト OS の windows98 のウィンドウを(マウスでつついて)アクティブにしてから プリンターを接続したところ, 今度は無事に windows98 で( VMware で )プリンターを認識することができました。

なお, windows98 を( VMware を )終了した後,忘れずに /etc/murasaki/murasaki.conf の設定を元に戻しておきましょう!

戻すのを忘れると,全ての USB 機器が認識されなくなります! (多分)


apt で upgrade できない! (ハードディスクの空き容量が少ない)

経緯

ソフトを一つ apt でインストールしたついでに, ふと思い立って久々に upgrade をしておくことにした。

apt-get upgrade

を実行すると,10個くらいのアプリケーションをバージョンアップするけど,いいかい? と訊ねてくるので Yes を入力し,ダウンロードが始まる。 ところがダウンロードが終わって rpm -U でインストールするところで

○○のインストールには××Mバイトの領域が必要です

というようなエラーメッセージが出て,終了してしまう。

そんな馬鹿な!? ハードディスクはいっぱい残っているはず??

と思いつつも,調べてみると,成る程ルートの領域が 84M バイトしか残っていない。

はて? 久しく大物をインストールした覚えもないし,なんでハードディスク領域が食いつぶされたんだ?

原因

自分で使用した(大きなソフトなどをインストールした)覚えがないのに, ハードディスク領域が減っている場合は,

  1. クラッカーに侵入されている
  2. 巨大なファイルを作るような操作を知らない中に行った
  3. 何かのログが巨大になっている
  4. 何かのキャッシュが巨大になっている

などの理由が考えられる。

外部から侵入されて怪しげなファイル交換の基地やミサイル基地にされているのでは.... という虞もあるが,それらしい形跡はない。

また,数百Mバイトにもなるような巨大なファイルを無意識に作っていたわけでもなさそうだ。 (学生は時折やります。)

/var/log の中などを調べてみても,特に異常な大きさのログはない。

apt-get remove でいらなそうなソフトを削除してみても,ほんの数Mバイトしか空かない。

あれこれ調べているうちに,ふと,

さっき apt-get でダウンロードしたけれどインストールできなかったものはどうなったのか?

と気になった。

それらしいディレクトリーを探して /var/cache/apt/archives の中を覗くと ...... , あるはあるは,Vine Linux 一揃い以上がぎっしり詰まっている。

対処法

要するに apt-get のキャッシュ /var/cache/apt が大きくなりすぎたのだから, /var/cache/apt/ 以下にあるファイルを削除すればよいはずである。

が,しかし,apt はインストールされているソフトの情報などを管理しているから, もしかして,ダウンロードしたファイルの情報も管理しているかもしれない。 もしそうなら,root の権限で rm コマンドを使ってキャッシュを削除してしまうと, 何かと不都合が起こるかもしれない。

そこで jman apt-get で調べると apt-get cleanapt-get autoclean があった。

ひとまず apt-get autoclean を実行すると 87Mバイト だった空き領域が 581Mバイト に増えた!!

が, /var/cache/apt/archives の中にはまだまだたくさんのファイルが残っている。

さらに apt-get clean を実行したところ, /var/cache/apt/archives の中がきれいにお掃除された。

空き領域も 581Mバイト から 1.1Gバイト に増えた!!

教訓

見えない所ほどゴミが溜まりやすい。お掃除はこまめに!


ruby-expect で ftp が動かない?

経緯

Vine2.6CR から Vine3.2 にバージョンアップしたら, Ruby のスクリプトが上手く動かなくなった。

このスクリプトは Ruby-expect を使って別のホストに ftp でログインして特定のファイルをダウンロードするものなのだが, ログインして cd を実行したところで,いきなり終了してしまう??

原因

原因は結局よく分からなかった。 ProFTP のバージョンが上がったせいか,Ruby のバージョンが上がったせいで以前とは動作が若干変わったようだ。

対処法

原因はわからなかったが,timeout を指定したら動くようになった??

スクリプトの修正部分
tmax=2   # tmax を導入
  r_f.expect(/^ftp>/,tmax) do    #   r_f.expect("ftp>") do だったのを修正
    w_f.print "get "+fname+"\r"
    end

ちなみに,ssh を実行している部分は timeout の指定をしなくてもちゃんと動いている。


ssh で X が動かない?

経緯

Vine2.6CR から Vine3.2 にバージョンアップしたら, ssh でリモートログインした時に,X のアプリケーションを起動できなくなった??

ちなみに,/etc/ssh/sshd_config では,ちゃんと X が使えるように設定してある??

試しにローカルホストで xhost の設定をし, リモートホストで DISPLAY の設定をしたところ, ちゃんと起動できるようになった。

しかし,これでは不便でしょうがない。

原因

マニュアルで調べてみたところ,どうやら ssh のバージョンが上がったせいで, X を使う場合には追加オプションが必要になったようだ。

対処法

ssh を起動する時にオプション XY をつけるようにする。

実行例
  ssh -XY  hostA

dvipdfmx のエラー?

経緯

Vine 3.2 から Vine 4.0 にバージョンアップしたら, dvipdfmx で dvi ファイルから pdf ファイルを作る際に *** unembeddable CIDFont: /Ryumin-Light というエラーメッセージが出るようになった。

pdf ファイルの該当ページを見ると図の中のφの形が微妙に異なっていた。 ( TeX の /phi と /varphi の違い )

原因

Google で 「 dvipdfmx unembeddable CIDFont: /Ryumin-Light 」をキーワードにして検索したところ, 以下のサイトにヒットした。

http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?Linux%2Fvine

このサイトの記述を読むと Postscript ファイルの日本語フォントを pdf ファイルにビットマップで埋め込まないように するように設定してあるせいらしい。 このエラーが表示されるのが正常だと言われてもなぁ .... 。

対処法

エラーと思わずに単なるメッセージと思えばよいのかもしれないが, 図のφのフォントが元の EPS ファイルのフォントと異なってしまうのは無視できない。

上手い回避策が浮かばないので,取り敢えず Ryumin-Light は pdf ファイルに埋め込むことにした。

コマンドラインで rpm -ql dvipdfmx を実行して dvipdfmx 関係のファイルのインストール先を調べたところ /usr/share/texmf/dvipdfm/config/dvipdfmx.cfg という,いかにも設定ファイルらしいものが見つかった。

/usr/share/texmf/dvipdfm/config/dvipdfmx.cfg をエディターで開いて GhostScript のオプションから /Ryumin-Light を削除した。

コマンドラインで dvipdfmx hohe.dvi などを実行すると,今度はエラーメッセージ(?) は表示されず,できあがった pdf ファイルを見たところ図の中のφも EPS ファイルと同じフォントになっていた。

但し,処理に少し余計に時間がかかるようになった。 また,できあがった pdf ファイルのサイズが少し大きくなる。 この辺はビットマップでフォントを埋め込むのだから仕方ないだろう。 数式でフォントの違いは致命的だから,多少の時間やファイルサイズの無駄はやむを得ない。

なお,dvi ファイルから pdf ファイルを作るには dvips で ps ファイルを作り, ps2pdf で ps ファイルを pdf ファイルにするという方法もある。 この場合は ps2pdf を -dNOKANJI というオプションをつけて実行すると日本語フォントの埋め込みをしなくなる。



このページの先頭へ