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 EN2216とPLANEX 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月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に対応していないという事なのだろう。