トップ 最新 追記

Masa's blog

検索キーワード:

2010年08月17日 Libretto100 kernel version up to 2.6.17.14 [長年日記]

_ Libretto100 kernel version up to 2.6.17.14

このtDiaryをサービスしているLibretto100のカーネルを2.4.37.9から2.6.17.14にバージョンアップした。

目的はCardbus(32bit)の100Mbps対応LANカード(NETGEAR FA511)を安定させるため。

実は、しばらく前からどうしてもこのカードを使ってるとカーネルが不安定になり、ファイルシステム(ext3)が壊れるので、LANカードをpcmcia(16bit)の10Mbps(Accton EN2216PLANEX ENW-3503-T)に戻していた。10Mbpsのカードだと全く問題が発生しなくなっていた。

しかし、この環境ではプロバイダの性能を生かしきれてないので、カーネルを2.4.xから2.6.xに上げて様子を見ることにした。

Libretto100にインストールしているSlackware-11.0は一応2.6.17.13にも対応していたので、同じ系列の最新であった2.6.17.14をビルドした。コンフィグはSlackwareのサイトから拝借した。

_ /etc/udev/rules.d/network-devices.rules

カーネルを2.6.17.14にすると、ネットワークデバイスが今までと逆に命名されてしまうようになった。これを固定するためには/etc/udev/rules.d/network-devices.rulesに設定が必要だった。

KERNEL=="eth?", SYSFS{address}=="00:1e:2a:47:e3:ea", NAME="eth0"
KERNEL=="eth?", SYSFS{address}=="00:1e:2a:47:e3:ec", NAME="eth1"

_ /etc/modprobe.d/sound

alsaconfによるALSAの再設定も必要だった。ただし、完全に正しい設定は行われないので/etc/modprobe.d/soundを後で編集した。

alias snd-card-0 snd-cs4232
alias sound-slot-0 snd-cs4232
options snd-cs4232 port=0x534 cport=-1 isapnp=0 dma1=1 dma2=0 irq=9

_ /var/lib/nfs/v4recovery

dmesgに

NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory
NFSD: unable to find recovery directory /var/lib/nfs/v4recovery

というメッセージが出るようになっていたので

# mkdir /var/lib/nfs/v4recovery
# chmod 755 /var/lib/nfs/v4recovery

と対処した。


2010年08月20日 Linuxでネットワークのリンクアップ状態を確認する方法 [長年日記]

_ Linuxでネットワークのリンクアップ状態を確認する方法

ethtoolコマンドでは、

# ethtool eth0
Settings for eth0:
No data available

となって、情報の取得に失敗したが、mii-toolでは、

# mii-tool eth0
eth0: negotiated 100baseTx-FD flow-control, link ok

と無事、状態取得に成功した。

MII(Media Independent Interface)プロトコルに対応したLANカードでないと情報の取得が出来ないそうなのだが、mii-toolで出来て、なぜethtoolで出来ないのかは不明。

LANカードはNETGEAR FA511を使用。


2010年08月21日 Linuxで拡張子 .7z のファイルを解凍するには p7zip [長年日記]

_ Linuxで拡張子 .7z のファイルを解凍するには p7zip

を使う。

ソースはhttp://sourceforge.net/projects/p7zip/files/より。


2010年08月24日 Libretto 100 + Cardbus LAN card + kernel 2.6.17.14 = NG [長年日記]

_ Libretto 100 + Cardbus LAN card + kernel 2.6.17.14 = NG

やっぱり安定しなかった。ファイルシステム(ext3)壊れた。

この機械では10BASE-Tのカードで運用しようと決めた。

_ firefox-3.6.8のビルドでsedがループ

した。

以下のステップ

cat ../../browser/locales/en-US/updater/updater.ini | \
          sed -e "s/^InfoText=/Info=/" -e "s/^TitleText=/Title=/" | \
          sed -e "s/%MOZ_APP_DISPLAYNAME%/Namoroka/" > \
          ../../dist/bin/updater.ini

を実行し始めたとたんに、急にシステムが重くなって、実行ステップがその先に一切進まなくなった。

その時のtopの表示が以下で

top - 13:16:16 up 18 min,  7 users,  load average: 1.12, 0.64, 0.42
Tasks: 116 total,   2 running, 114 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.7%us,  0.7%sy, 98.6%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    245632k total,   239056k used,     6576k free,    74084k buffers
Swap:   530104k total,      232k used,   529872k free,    97016k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
16770 m-ito     30  10  3112  956  716 R 98.6  0.4   0:09.66 sed
 1819 root      20   0  145m 9836 3468 S  1.0  4.0   1:21.90 X
    1 root      20   0   772  324  280 S  0.0  0.1   0:02.79 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.02 ksoftirqd/0
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    6 root      20   0     0    0    0 S  0.0  0.0   0:00.52 events/0
    7 root      20   0     0    0    0 S  0.0  0.0   0:00.04 khelper
   10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns
   13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr

sedが頑張っている。

vmstat 3 の表示が以下

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 2  0    232   6716  74148  97100    0    0   281   141  506  306 36 10 50  5
 1  0    232   6716  74148  97092    0    0     0     0  958   96 100  0  0  0
 1  0    232   6716  74148  97092    0    0     0     0  971   63 100  0  0  0
 1  0    232   6716  74148  97092    0    0     0     0  958   27 100  0  0  0
 1  0    232   6716  74148  97092    0    0     0     0  976   74 99  1  0  0
 1  0    232   6716  74148  97092    0    0     0     0  987   87 99  1  0  0
 1  0    232   6716  74148  97092    0    0     0     0  967   41 100  0  0  0
 1  0    232   6716  74148  97092    0    0     0     0  964   28 100  0  0  0

IOが一切無くて、CPUはユーザでほとんど100%使い切ってる状況。

browser/locales/en-US/updater/updater.iniに何か原因があるのではと当たりをつけ、とりあえず中身を表示してみると以下のように

$ cat browser/locales/en-US/updater/updater.ini
; This file is in the UTF-8 encoding
[Strings]
TitleText=%MOZ_APP_DISPLAYNAME% Update
InfoText=%MOZ_APP_DISPLAYNAME% is installing your updates and will start in a few moments

特におかしい所は見当たらないような...

同じファイルをvimで開いてみたら

; This file is in the UTF-8 encoding
[Strings]
TitleText=%MOZ_APP_DISPLAYNAME% Update
InfoText=%MOZ_APP_DISPLAYNAME% is installing your updates and will start in a few moments|&

最終行の末尾に「|&」の文字が現れた(@O@;

odで確認すると

$ tail -1 browser/locales/en-US/updater/updater.ini | od -xc
0000000  49  6e  66  6f  54  65  78  74  3d  25  4d  4f  5a  5f  41  50
           6e49    6f66    6554    7478    253d    4f4d    5f5a    5041
          I   n   f   o   T   e   x   t   =   %   M   O   Z   _   A   P
0000020  50  5f  44  49  53  50  4c  41  59  4e  41  4d  45  25  20  69
           5f50    4944    5053    414c    4e59    4d41    2545    6920
          P   _   D   I   S   P   L   A   Y   N   A   M   E   %       i
0000040  73  20  69  6e  73  74  61  6c  6c  69  6e  67  20  79  6f  75
           2073    6e69    7473    6c61    696c    676e    7920    756f
          s       i   n   s   t   a   l   l   i   n   g       y   o   u
0000060  72  20  75  70  64  61  74  65  73  20  61  6e  64  20  77  69
           2072    7075    6164    6574    2073    6e61    2064    6977
          r       u   p   d   a   t   e   s       a   n   d       w   i
0000100  6c  6c  20  73  74  61  72  74  20  69  6e  20  61  20  66  65
           6c6c    7320    6174    7472    6920    206e    2061    6566
          l   l       s   t   a   r   t       i   n       a       f   e
0000120  77  20  6d  6f  6d  65  6e  74  73  e2  80  a6  0a
           2077    6f6d    656d    746e    e273    a680    000a
          w       m   o   m   e   n   t   s 342 200 246  \n
0000135

末尾に「e2 80 a6」のゴミっぽいものが付いている(?)

vimでこのゴミっぽいものを削除してビルドを再開したら、何事も無かったかのようにスルスル完了しましたとさ。

_ Slackware-13.1 + firefox-3.6.8 + kinput2

Slackware-13.1な環境でfirefoxを起動すると、かな漢字変換にSCIMが起動される。それはそれで、昔からのSlackwareユーザとしては

「ほぉ〜すらっくも便利になったもんじゃのぉ〜」

なのだが、やはり使い慣れたkinput2 + Cannaにしがみつきたい。

その場合は、環境変数を以下のように設定し

XMODIFIERS='@im=kinput2'; export XMODIFIERS
GTK_IM_MODULE=xim; export GTK_IM_MODULE

kinput2を起動する際にximプロトコルを有効にしてやるとよい。

kinput2 -canna -xim -kinput +ximp &

2010年08月26日 firefox-3.6.8 + mplayerplug-in [長年日記]

_ firefox-3.6.8 + mplayerplug-in

Slackware-13.1な環境でfirefox-3.6.8をビルドし、gecko-sdkもいつもの手法でインストールした。

次に、mplayerplug-in-daily.tar.gz を取得してビルドを実行

 $ GECKO_XPIDL=/usr/local/gecko-sdk-3.6.8/sdk/bin/xpidl GECKO_IDLDIR=/usr/local/gecko-sdk-3.6.8/sdk/idl ./configure --enable-gtk2 --with-gecko-sdk=/usr/local/gecko-sdk-3.6.8/sdk
 $ make

ところが、以下のエラー発生。

In file included from include/npplat.h:42,
                 from include/pluginbase.h:41,
                 from Source/plugin.h:53,
                 from Source/plugin.cpp:37:
include/npupp.h:62:17: error: jri.h: No such file or directory

そこで

cp /any_where/mozilla-1.9.2/sun-java/stubs/include/jri* /usr/local/gecko-sdk-3.6.8/sdk/include/

で、ざっくりとjri関係のヘッダーファイルをコピーし、再度ビルド実行したところ以下のエラー。

/usr/lib/gcc/i486-slackware-linux/4.4.4/include/jni_md.h:79: error: conflicting declaration 'typedef int jint'
/usr/local/gecko-sdk-3.6.8/sdk/include/jri_md.h:202: error: 'jint' has a previous declaration as 'typedef long int jint'

で、/usr/local/gecko-sdk-3.6.8/sdk/include/jri_md.h中の

typedef long                    jint;

をコメントアウト。

で、無事ビルドできた。

gecko-sdkのインストール方法をまとめると以下のように

# mkdir /usr/local/gecko-sdk-3.6.8
# cp -rL /any_where/mozilla-1.9.2/dist/sdk /usr/local/gecko-sdk-3.6.8/
# cp -rL/any_where/mozilla-1.9.2/dist/idl /usr/local/gecko-sdk-3.6.8/sdk/
# cp -rL /any_where/mozilla-1.9.2/dist/include /usr/local/gecko-sdk-3.6.8/sdk/
# cp /any_where/mozilla-1.9.2/sun-java/stubs/include/jri* /usr/local/gecko-sdk-3.6.8/sdk/include/

# vi /usr/local/gecko-sdk-3.6.8/sdk/include/jri_md.h

202: typedef long                    jint;  をコメントアウト

でも、どこかに正しいgecko-sdkのインストール方法がドキュメント化されてるんでしょうね...


2010年08月30日 myh.no-ip.orgのサーバをLibretto100からDynabookへリプレース [長年日記]

_ myh.no-ip.orgのサーバをLibretto100からDynabookへリプレース

遂に(とうとう)myh.no-ip.orgのサーバマシンであるLibretto100を引退させた。

2002年3月ぐらいから運用を始めて、その間に何台か壊れて、そのつど同じLibretto100を中古で買い直して運用して来たが、まぁよく頑張ったほうだと思う。

さすがに近年は、100BASE-T(Cardbus)の安定運用が出来なかったり、このtDiaryをサービスするには能力不足が顕著になってきたり...色々と不具合も出て来ていた。

今回の新しいマシンはTOSHIBA Dynabook Satellite 1800シリーズを中古で購入したもので、

  • CPU : Celelon (Coppermine) 950MHz (<- 旧マシン MMX 223MHz)
  • Memory : 1GB (<- 旧マシン 64MB)
  • HDD : 20GB (<- 旧マシン 30GB)

というスペック(あっ、ディスク容量はスペックダウンしてるな...)。

これも、世間一般的には骨董品なのだが、(自宅サーバとして)現時点では十分なスペックといえる。

Libretto100のHDDをtarにてコピーし、LILOの登録と、alsaconfの再設定をしただけでキビキビ働いている。

Libretto100は副マシンとしてコールドスタンバイ状態で保管。

ただし、このLibrettoサイズのマシンでサーバ運用することへの自分なりのコダワリが多少なりとも有ったので、将来的には手元に有るLibretto U100をサーバにしてやろうとは考えている。

まだしばらくはクライアント(主にfirefox用)として利用するだろうが。


2010年08月31日 dbi-0.4.3.gem and sqlite3-ruby-1.2.5 works right, but sqlite3-ruby-1.3.1 dosen't [長年日記]

_ dbi-0.4.3.gem and sqlite3-ruby-1.2.5 works right, but sqlite3-ruby-1.3.1 dosen't

# gem install sqlite3-ruby-1.2.5.gem
# gem install dbi-0.4.3.gem
# gem install dbd-sqlite3-1.2.5.gem
# gem list

*** LOCAL GEMS ***

dbd-sqlite3 (1.2.5)
dbi (0.4.3)
sqlite3-ruby (1.2.5)

な環境だと

sql = <<SQL
    insert into member (id, name, job) values (?, ?, ?)
SQL
sth = dbh.prepare(sql)
sth.execute(1, '伊藤 太郎', 'サラリーマン')
sth.execute(2, '山田 太郎', '野球選手')
sth.finish

が問題なく実行できるが

# gem install sqlite3-ruby-1.3.1.gem
# gem install dbi-0.4.3.gem
# gem install dbd-sqlite3-1.2.5.gem
# gem list

*** LOCAL GEMS ***

dbd-sqlite3 (1.2.5)
dbi (0.4.3)
sqlite3-ruby (1.3.1)

な環境だと2発目の

sth.execute(2, '山田 太郎', '野球選手')

で以下のような

/usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/statement.rb:41:in `bind_param': library routine called out of sequence (SQLite3::MisuseException)
        from /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/statement.rb:41:in `bind_params'
        from /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/statement.rb:37:in `each'
        from /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/statement.rb:37:in `bind_params'
        from /usr/local/lib/ruby/gems/1.8/gems/dbd-sqlite3-1.2.5/lib/dbd/sqlite3/statement.rb:71:in `bind_params'
        from /usr/local/lib/ruby/site_ruby/1.8/dbi/handles/statement.rb:115:in `execute'
        from ./test2.rb:86
        from /usr/local/lib/ruby/site_ruby/1.8/dbi/handles/database.rb:209:in `transaction'
        from ./test2.rb:76

例外が発生する。

コーディングを以下のように

sql = <<SQL
    insert into member (id, name, job) values (?, ?, ?)
SQL
sth = dbh.prepare(sql)
sth.execute(1, '伊藤 太郎', 'サラリーマン')
sth.finish
sth = dbh.prepare(sql)
sth.execute(2, '山田 太郎', '野球選手')
sth.finish

executeするたびにステートメントハンドルの廃棄/生成を行えば問題無く動くようだが、 dbi-0.4.3.gemはまだsqlite3-ruby-1.3.1に対応していないという事なのだろう。