[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [+] |
Linux に関する小ネタ集です。
たいしたことないものを集めてみました。
徐々に増やしていく予定です。
以前使っていたノートパソコン(Thinkpad240)を有効活用したいと常々思っていたのですが、
IDE のコントローラがいかれてしまったらしく、HDD が使えません。
# ある程度は動くので、OS をインストールできるのですが、
そのうち HDD が動かなくなって悲しい思いをします
(…というのを半年くらい繰り返しました…)。
最近のノートパソコンのように、最初から NIC を持っていると、
NFS root で Linux や *BSD を動かすことができるのですが、
残念ながらそんなものはついていません。
そこで、USB の NIC を使って、Linux を、NFS root で動かすことにしました。
環境などは、こんな感じです。
ターゲット: | Thinkpad240 / Linux 2.6.0 |
USB NIC: | BUFFALO LUA2-TX |
開発マシン: | PC (RedHat9) |
NFS サーバ: | Indy R5000 (IRIX5.3) …ようするになんでもOK |
ターゲットのカーネルには、Linux 2.6.0 を使ってみました。 USB NIC には、Linux で動作実績のある LUA2-TX を使いました。
通常、NFS root にするためには、menuconfig 等で、以下の設定が必要になります。
Device Drivers ---> Networking support ---> [*] Networking support Networking options ---> [*] TCP/IP networking [*] IP: kernel level autoconfiguration [*] IP: DHCP support File systems ---> Network File Systems ---> <*> NFS File system support [*] Root file system on NFS |
DHCP 等は臨機応変に指定します。
そして、例えば、FD から起動するようにするためには、 例えば以下のような手順で FD を作成します。
# mke2fs -m0 /dev/fd0 ... # mount /dev/fd0 /mnt/floppy # mkdir /mnt/floppy/boot /mnt/floppy/dev /mnt/floppy/etc # cp -p /boot/boot.b /mnt/floppy/boot # cp -p /boot/map /mnt/floppy/boot # cp -p /usr/src/linux-2.6.0/arch/i386/boot/bzImage /mnt/floppy/boot # mknod /mnt/floppy/dev/fd0 c 2 0 # mknod /mnt/floppy/dev/nfs c 0 255 # cat > /mnt/floppy/etc/lilo.conf boot=/dev/fd0 install=/boot/boot.b prompt timeout=50 read-only lba32 default=Linux image=/boot/bzImage label=Linux root=/dev/nfs append="ip=192.168.1.101:192.168.1.1:192.168.1.254:255.255.255.0:tamagoro::off \ nfsroot=/ex/linux_root" (Ctrl-d を押下) # lilo -v -r /mnt/floppy ... # umount /mnt/floppy |
lilo を実行するときは、HDD に記録しないように注意してください。
# まずは -t オプションをつけて試した方がいいと思います。
上記では、DHCP を使わずに自分やサーバのIPアドレスなどを指定していますが、
ip=dhcp だけにして、DHCP サーバ側でパラメータを指定する方法もあります。
# そちらの方が一般的かもしれません。
ただし、これだけでは、 以下のように、NIC を認識する前に IP-Config が NIC を探しにいってしまい、 NFS root で起動してくれません。
IP-Config: No network devices available. ... No NFS server available, giving up. VFS: Unable to mount root fs via NFS, trying floppy. VFS: Insert root floppy and press ENTER hub 1-0:1.0: new USB device on port 1, assigned address 2 drivers/usb/net/pegasus.c: setup Pegasus II specific registers eth0: MELCO/BUFFALO LUA2-TX |
そこで、NFS で / を mount しようとして失敗する時、再度 IP-Config
で探させてみました。
2.6.0 用のパッチが
これ
です。
ひたすら ip_auto_config() を呼び出す(10回試行します)という、
かなり大雑把なシロモノですが、ちゃんと動作しました。
ある日、XEmacs 上で、 boiled-egg で漢字変換を行おうとしたら、ミニバッファに以下のメッセージが出力されて、 変換できなくなってしまいました。
Loading /usr/lib/xemacs/mule-packages/lisp/egg-its/eggrc-wnn... 98:BAD ERRORNO!! 98:BAD ERRORNO!! |
strace -p で jserver を追ってみたところ、
/etc/FreeWnn/ja/dic/usr/usuda/setsuji.h を open したあと、
上記のエラーが出ていました。
setsuji.h を見ると、サイズが 0 になってしまっていました。
そこで、このファイルを削除して、再度 jserver に接続した
(一旦 wnn-server-close で閉じて、変換(rK-trans)しました)
ところ、このファイルを作るかと聞いてきました。
yes と答えたところ、setsuji.h が作られ、無事変換できるようになりました。
ちなみに、98:BAD ERRNO!! の 98 ですが、/etc/FreeWnn/ja/libwnn.msg にある
『Wnn のファイルではありません』というエラーだったようです。
# 最初 errno の EADDRINUSE かと思ってしまいました。
ふと、WMV な動画を Linux で観たいなと思い、インストールしてみました。
といっても、単に、
@IT の記事
通りに行うだけなのですが…。
MPlayer のサイトは
ココ
です。
ソース・アーカイブやライブラリ、フォントなどは、
ココ
にあります。
まずは、win32codecs.tar.bz2 を展開します。
/usr/local/lib に展開するようになっていますが、MPlayer の configure
の際に指定できますので、お好きなところに展開してもらって結構です。
# cd /usr/local/lib # tar xfj /some/where/win32codecs.tar.bz2 |
次に、MPlayer をコンパイルします。
% tar xfj /some/where/MPlayer-1.0pre2.tar.bz2 % cd MPlayer-1.0pre2 % ./configure --confdir=/etc/mplayer --enable-gui \ --with-win32libdir=/usr/local/lib/win32codecs \ --prefix=/usr/local/mplayer ... % make ... % su Password: (root のパスワードを入力) # make install ... |
上記では、/usr/local/mplayer にインストールするようにしています。
--prefix を指定しなければ、/usr/local になると思います。
/usr/local/mplayer と /etc/mplayer がユーザ権限で書き込めるなら、
su をする必要はないです。
そして、フォントとスキンを以下の手順でインストールします。
フォントは、font-arial-iso-8859-1.tar.bz2 を使いました。
スキンは、disappearer-1.1.tar.bz2 を使いました。
どちらも、別のものでもいいのではないかと思います(…が試していません)。
% mkdir ~/.mplayer % cd ~/.mplayer % tar xfj /some/where/font-arial-iso-8859-1.tar.bz2 % ln -s font-arial-iso-8859-1/font-arial-14-iso-8859-1 font % mkdir Skin % cd Skin % tar xfj /some/where/disappearer-1.1.tar.bz2 % ln -s disappearer default |
上記では、自分のホームの下の .mplayer 以下にインストールしていますが、 みんなで共有する場合は、それぞれ、
/usr/local/mplayer/share/mplayer/font
/usr/local/mplayer/share/mplayer/Skin
にインストールします。
で、あとは起動するだけです。
% /usr/local/mplayer/bin/gmplayer -vo x11 file_or_url |
file_or_url には、WMV や QuickTime のファイルか、URL を指定します。 少なくとも、WMV は URL 指定で、QuickTime はファイル指定で動作しました。
他にもいろいろなオプションがあります。…が、多過ぎて試せていません。
例えば、-vo オプションに gif89a を指定すると、
% /usr/local/mplayer/bin/mplayer -vo gif89a foo.mov |
out.gif というファイルができます。
どうやら、GIF アニメーションに変換できるようです。
でも、30秒の QuickTime のファイルで試したところ、
できた GIF アニメーションには16個の画像しか含まれていませんでした。
rdesktop
という RDP クライアントがあります。
これで、リモートから Terminal Server にログオン? できます。
手順はいたって簡単です。rdesktop のソースをダウンロードしてきて、
% ln -s rdesktop-1.3.0.tar.gz rdesktop.tgz % rpm -ta rdesktop.tgz |
とすると、RPM ができます。
(rpm -ta は rpmbuild -ta でないといけないかもしれません。)
あとは、rpm -i するだけです。
使い方も簡単です。サーバ名(IP アドレスでもいいです)を指定するだけです。
% rdesktop サーバ名 |
他にもいろいろオプションがあります。
rdesktop -\? とすると、一覧が表示されます。
あと、キーボードが JP106 だったら、-k ja をつけた方がいいです。
また、相手が Windows XP だったら、-a 16 をつけるときれいです。
さらに脱線しますが、SSH を使って、外部から内部の Terminal Service
につなぐことができます。
# あまりお勧めはしません。
% ssh -L 13389:内部のマシン:3389 ゲートウェイマシン ... |
としておいて、他の端末からつなぎます。
# 当たり前ですが、-a 16 としない方が速いです。
% rdesktop localhost:13389 |
lsof を使うと、ポート番号から、そのポートを開いているプロセスがわかります。
アーカイブは、
ここ
から入手できます。
アーカイブを展開すると、tar ファイルがあるので、さらにこれを展開して、
./Configure linux を実行します。
% tar xfz lsof_4.69.tar.gz % cd lsof_4.69 % tar xf lsof_4.69_src.tar % cd lsof_4.69_src % ./Configure linux |
適当に答え、make すると、バイナリが作成されます。
そして make install とすると、…インストールされるわけではなく、
例が出力されます。
例にしたがって、root の権限でインストールします。
以下は、/usr/local/bin に lsof を、/usr/local/man/man8 に lsof.8 を、
インストールしています。
# install -m 4755 -o root -g root lsof /usr/local/bin # install -m 444 lsof.8 |
とりあえず、ポート53をオープンしているプロセスを見るには、以下のようにします。
% lsof -i:53 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME named 756 named 20u IPv4 1194 UDP localhost.localdomain:domain named 756 named 21u IPv4 1195 TCP localhost.localdomain:domain \ (LISTEN) % lsof -iudp:53 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME named 756 named 20u IPv4 1194 UDP localhost.localdomain:domain |
lsof が内部でやっていることは、
/proc/<pid>/fd/<number> から順にたどっているのだと思います。
たとえば httpd の場合、
# ls -l /proc/1031/fd/ 合計 0 lr-x------ 1 root root 64 Dec 9 00:00 0 -> /dev/null l-wx------ 1 root root 64 Dec 9 00:00 1 -> /dev/null l-wx------ 1 root root 64 Dec 9 00:00 15 -> /var/log/httpd/error_log lrwx------ 1 root root 64 Dec 9 00:00 16 -> socket:[1765] l-wx------ 1 root root 64 Dec 9 00:00 17 -> /var/log/httpd/access_log l-wx------ 1 root root 64 Dec 9 00:00 2 -> /var/log/httpd/error_log lrwx------ 1 root root 64 Dec 9 00:00 3 -> /var/run/httpd.mm.1030.sem |
ファイルディスクリプタ16番が、socket の1765番です。 これは、/proc/net/tcp を見ると、
# cat /proc/net/tcp sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt \ uid timeout inode ...中略 16: 00000000:0050 00000000:0000 0A 00000000:00000000 00:00000000 00000000 \ 0 0 1765 1 c63a1bc0 300 0 0 2 -1 ...後略 |
INADDR_ANY(00000000h)のポート80(0050h)で LISTEN していることがわかります。
他にも、プロセス名やプロセスID などさまざまなものから調べることができます。 便利です。
% lsof -chttpd COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME httpd 1012 root cwd DIR 3,3 4096 2 / httpd 1012 root rtd DIR 3,3 4096 2 / httpd 1012 root txt REG 3,3 323180 538553 /usr/sbin/httpd ...後略 % lsof -p2466 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME w3m 2466 usuda cwd DIR 3,3 8192 572150 /home/usuda/tmp w3m 2466 usuda rtd DIR 3,3 4096 2 / w3m 2466 usuda txt REG 3,3 402252 424990 /usr/bin/w3m ...後略 |
[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [-] | |
usu@usupi.org | Last modified : Sat Jan 24 01:52:53 2004 |