[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [+]

Linux に関する小ネタ集

Linux に関する小ネタ集です。
たいしたことないものを集めてみました。
徐々に増やしていく予定です。

USB の NIC で NFS root する

以前使っていたノートパソコン(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 で漢字変換ができなくなった

ある日、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 かと思ってしまいました。

MPlayer を入れてみた

ふと、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 を入れてみた

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 を入れてみた

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
  ...後略

Powered by Apache PostgreSQL Usupi Logo Kuri Logo
[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [-]
usu@usupi.org Last modified : Sat Jan 24 01:52:53 2004