2009年6月29日月曜日

Ctrl-c が効かない端末で、Ctrl-c が効くように設定する

あまりこんなことは無いんですが、シリアルとか ssh, telnet でログインした端末で、
Ctrl-c によるプログラムの停止ができないことがあります。

こんな時の対処方法。

まず、stty コマンドで intr が設定されているか確認する。

$ stty -a
intr = の設定を確認する。

intr が設定されていなければ、以下を実行する

$ stty intr "^c"

これで Ctrl-c が効くようになるはず。

他にも効かないキーがあれば、設定可能。

$ stty intr "^C" erase "^H" kill "^U" eof "^D" susp "^Z"  

2009年6月28日日曜日

Virtual Desktop for Win32

Windows で無いと困るソフトの 1 つに Virtual Desktop for Win32 (フリーソフト) があります。
http://homepage1.nifty.com/salt/VD.htm
Virtual Desktop 使用歴はかれこれ 14 年。最初は、Solaris 上の FVWM のやつを使っていました。

Virtual Desktop を使い始めた当時から、どのデスクトップにどのウィンドウを開くか決めていて、
タスクバーやタスクリストでウィンドウを切り替えるのではなく、
デスクトップを切り替えることでウィンドウを切り替えるようにしています。
画面の切り替えは Ctrl+矢印キー で行います (VD for Win32 のデフォルトからは変更しています)。

デスクトップは 2×4 (横 2 個、縦 4 個) で使います。
各デスクトップの役割は以下の通りです。

・メーラ (Meadow+Mew)
・エディタ
・ブラウザ (Firefox)
・Office 系 1 (資料作成用)
・エクスプローラ
(未使用)
・Office 系 2 (資料作成用/参照用)
・エクスプローラ
(未使用)
・Office 系 3 (資料作成用/参照用)
・エクスプローラ
(未使用)

こうしておくと、Office 系 1 で作業中にメールを読むときは Ctrl+↑。
そこからブラウザは Ctrl+→。
また作業に戻るときは Ctrl+←、Ctrl+↓。
そこからブラウザを見たいときは Ctrl+↑、Ctrl+→。
場所を決めておけば、タスクリストからウィンドウを探す必要が無くなります。
この配置はお薦めです。

タスクバーやタスクリストを探している方。その時間もったいないですよ。

2009年6月26日金曜日

Dell OPTIPLEX 760 の Intel 82567LM-3 (e1000e) を Linux で動作させる方法

Dell OPTIPLEX 760 に Linux (Ubuntu, Fedora) をインストールしたところ NIC が動作しない。
カーネルを 2.6.30 にしてもダメ。
NIC は Intel 82567LM-3 (e1000e) が載っていて、ドライバが無いから動かない状態…。
ということで、カーネルツリーにドライバが入るまでのつなぎとして(そのうちはいるでしょう)、
ドライバをソースからビルドして使えるようにします。

1. http://www.intel.com/ から、下記ドライバをダウンロードします。

e1000e-0.5.18.3.tar.gz

2. 展開して、ビルド & インストールします。

$ tar zxvf e1000e-0.5.18.3.tar.gz
$ cd e1000e-0.5.18.3/src/
$ make
$ sudo make install

3-A. Ubuntu の場合、/etc/modules ファイルを編集します。

$ sudo vi /etc/modules

e1000e
を追加します。

3-B. Fedora の場合、

$ sudo vi /etc/modprobe.conf

alias eth0 e1000e
を追加します。

4. 再起動します。

Fedora の方は起動時に変なメッセージが出るなぁ。とりあえず、使えるのと、つなぎなので追求しません。

■ 2009/08/05 追記

2.6.30.4 あたりから、カーネルソースに組み込まれたようです。
いつから組み込まれたかは、未確認です。
最新カーネルのビルド方法は Ubuntu で kernel をソースコードからビルドする を参照。

● Dell, optiplex, 760, Intel, 82567LM-3, e1000e

2009年6月23日火曜日

Ubuntu で USB 無線 LAN アダプタ ( Buffalo WLI-UC-GN ) を使う (更新版)

会社の PC (Ubuntu 8.04 LTS) でカーネルを 2.6.30 にあげた後で気が付いたのですが、WLI-UC-GN のドライバがビルドできない。こりゃいかんということで、更新します。
Ubuntu 8.04 に限らず、8.10, 9.04 でもいけると思います。
前回の Ubuntu 8.10 で USB 無線 LAN アダプタ (Buffalo WLI-UC-GN) を使う は obsolete。

参考:Akinekoの日記
Linux(Ubuntu 9.04)で未対応USB無線LANアダプタ(WLI-UC-GN)の設定方法
(勝手に相互リンク!)

1. 下記の場所から最新ドライバをダウンロードする (RT3070USB(RT307x) を選択)
http://www.ralinktech.com/support.php?s=2

2. ダウンロードしたファイルを展開する

$ tar jxvf 2009_0525_RT3070_Linux_STA_v2.1.1.0.tar.bz2

3. os/linux/config.mk を編集する

$ cd 2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/
$ vi config.mk
# Support Wpa_Supplicant
HAS_WPA_SUPPLICANT=n

# Support Native WpaSupplicant for Network Maganger
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n

を以下のように修正する (WPA_SUPPLICANT 関連オプションを ”y” に変更)

# Support Wpa_Supplicant
HAS_WPA_SUPPLICANT=y

# Support Native WpaSupplicant for Network Maganger
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

4. WLI-UC-GN を PC の USB ポートに挿入し、デバイス ID を調べる

$ lsusb
...
Bus 001 Device 003: ID 0411:015d MelCo., Inc.
...

5. 2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/usb_main_dev.c を編集する

$ vi 2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/usb_main_dev.c
struct usb_device_id rtusb_usb_id[] 
に以下を追加
{USB_DEVICE(0x0411,0x015d)}, /* Melco */

5. make & make install する。

# make
# make install

■ 2009/10/08 追記

kernel 2.6.31.3 の環境でビルドしようとすると、エラーでビルドに失敗しました。
いつからできなくなったのか、わかりません。
新しいドライバは公開されていないし、kernel のバージョンを落とそうかな。

■ 2009/11/18 追記 (速報)

下記のサイトからパッチ rt3070-2.6.31-compile.patch.gz をダウンロードして、
http://www.megaupload.com/?d=2NDDOFTR
kernel 2.6.31.6 (ソース) の環境でビルドしたところ、ビルドが通りました。
あと、RT3070USB(RT307x) のドライバは更新されていて、20091106 版がでていました。
近いうち、更新したいと思います。
これまで通りの作業にパッチを当てる作業が追加されるだけなので、急がれる方は試してみては?

● WLI-UC-GN

2009年6月21日日曜日

ssh のエスケープシーケンス ~.

telnet のエスケープシーケンスは ^] で知っていたのですが、
ssh のエスケープシーケンスは?
調べたところ、~. (チルダ、ドット) でした。

telnet や ssh で接続している端末が電源 OFF になった場合に、
そこから復帰するときに使います。

telnet のエスケープシーケンス^]
ssh のエスケープシーケンス~.

2009年6月18日木曜日

Windows で a2ps (ak2pr = 「ak2ps のようなもの」)

Windows でテキストファイルを印刷するときには ak2pr を使っています。
Meadow や Mew から印刷するときに便利です。
フォントの設定や、2 段組、3 段組、4 段組…、段数も任意に指定可能。
クリップボード印刷も可能なので、お使いのテキストビューアで印刷したい範囲をコピーすれば、印刷できます。

# ちょっとアイコンが変なんですが… (失礼)

Fedora を USB メモリからインストールできるようにする方法

最近の PC は USB ブートできるようになりました。
あと、USB メモリも安価で大容量のものが入手できるようになりました。
こうなってくると、Linux のインストーラを DVD とかに焼かなくても、USB メモリからインストールすればいいじゃん。
ということになってきます。
USB メモリインストーラの作成方法をまとめます。

作業は WindowsXp PC で行いました。Linux でも同様の手順でできるはずです。

1. まず、iso ファイルをダウンロードします。
(今回は Fedora11 の iso ファイルを使いました)

2. USB メモリをフォーマットします。
(説明省略)

3. Unetbootin をダウンロードします。
http://unetbootin.sourceforge.net/
今回は Windows 版を使いました (Linux 版もあります)。

4. Unetbootin を起動し、以下のように設定します。

実行中の画面はこんな感じです。

※ 最初、iso ファイルを DAEMON Tools Lite (Free) でマウントしてファイルをコピーしてみましたが、ブートしませんでした。
(ブートフラグも立ってないし、ま、それは無理というもの)

■ 2009/06/19 追記

早速、Fedora11 をインストールしようとしたが、途中から進めなかった (調査中)

■ 2009/06/26 追記

インストーラが、途中から USB を認識してくれなくなるようで、この方法はダメですね。
iso イメージを USB に焼く方法として利用します (おしいなぁ)。

2009年6月17日水曜日

Ubuntu で kernel をソースコードからビルドする (make-kpkg 編)

最新の Linux kernel を利用するには、ソースからビルドするしかありません。
Ubuntu でそれをやる場合、Fedora とは違う作法があるようです。

1. kernel ソースを kernel.org からダウンロードします。
(2009/06/17 時点の最新版は 2.6.30)

2. ダウンロードしたソースを展開します。

# cd /usr/src
# tar jxvf linux-2.6.30.tar.bz2

3. 今起動している kernel のコンフィグファイルを /boot/ ディレクトリからコピーします。

# cd linux-2.6.30/
# cp /boot/config-2.6.27-11-generic .config

4. make menuconfig を実行します。ここで設定を変えてもいいです。
(変えたいときだけ変える程度)

# make menuconfig

5. make-kpkg でビルドします (パッケージ管理するため)。

# make-kpkg --initrd kernel_image kernel_headers

※ make-kpkg の前に CONCURRENCY_LEVEL=2 を付けると、処理の並列化が図れます。

# CONCURRENCY_LEVEL=2 make-kpkg --initrd kernel_image kernel_headers

※ kernel-package が無い場合はインストールしておきます。
# apt-get install kernel-package

6. 一つ上のディレクトリに deb ファイルが作成されるのでインストールします。
(この deb ファイルを配ると、他のメンバーのビルドの手間が省けます)

# cd ..
# dpkg -i linux-image-2.6.30_2.6.30-10.00.Custom_i386.deb
# dpkg -i linux-headers-2.6.30_2.6.30-10.00.Custom_i386.deb

7. grub の設定を変更します。

# vi /boot/grub/menu.lst
大抵の場合 default 0 に設定すれば、インストールしたカーネルで起動します。

■ 2009/08/04 追記

カーネル Ver.2.6.30.3 で運用中に、Ver.2.6.30.4 とかにアップデートしようとすると、
下記のエラーが出て、アップデートできません。

# dpkg -i linux-image-2.6.30.4_2.6.30.4-10.00.Custom_i386.deb
Selecting previously deselected package linux-image-2.6.30.4.
(Reading database ... 147376 files and directories currently installed.)
Unpacking linux-image-2.6.30.4 (from linux-image-2.6.30.4_2.6.30.4-10.00.Custom_i386.deb) ...
Done.
dpkg: error processing linux-image-2.6.30.4_2.6.30.4-10.00.Custom_i386.deb (--install):
 trying to overwrite `/lib/firmware/av7110/bootcode.bin', which is also in package linux-image-2.6.30.3
dpkg-deb: subprocess paste killed by signal (Broken pipe)
Running postrm hook script /sbin/update-grub.
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.30.3
Found kernel: /boot/vmlinuz-2.6.24-19-generic
Found kernel: /boot/memtest86+.bin
Updating /boot/grub/menu.lst ... done

Errors were encountered while processing:
 linux-image-2.6.30.4_2.6.30.4-10.00.Custom_i386.deb

こんなときは、運用中のパッケージを削除してから、インストールします。
※ これをやるときは、かならず起動できるカーネルイメージを 1 つは残してからやること。
※ インストールしたカーネルが起動しなかったときは、残しておいたカーネルで一旦起動してから、復旧させる必要があります。

途中、Do you want to abort removal now? と聞かれますが、
No を選択します。

# dpkg -r linux-image-2.6.30.3
(Reading database ... 147375 files and directories currently installed.)
Removing linux-image-2.6.30.3 ...
Ok, proceeding with removing running kernel image.
Running postrm hook script /sbin/update-grub.
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.24-19-generic
Found kernel: /boot/memtest86+.bin
Replacing config file /var/run/grub/menu.lst with new version
Updating /boot/grub/menu.lst ... done

The link /vmlinuz is a damaged link
Removing symbolic link vmlinuz
Unless you used the optional flag in lilo,
 you may need to re-run your boot loader[lilo]
The link /initrd.img is a damaged link
Removing symbolic link initrd.img
Unless you used the optional flag in lilo,
 you may need to re-run your boot loader[lilo]

■ Do you want to abort removal now?
 → No を選択

そのあとで、インストールします。

# dpkg -i linux-image-2.6.30.4_2.6.30.4-10.00.Custom_i386.deb
(Reading database ... 144924 files and directories currently installed.)
Unpacking linux-image-2.6.30.4 (from linux-image-2.6.30.4_2.6.30.4-10.00.Custom_i386.deb) ...
Done.
Setting up linux-image-2.6.30.4 (2.6.30.4-10.00.Custom) ...
Running depmod.
Finding valid ramdisk creators.
Using mkinitramfs-kpkg to build the ramdisk.
Running postinst hook script update-grub.
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.30.4
Found kernel: /boot/vmlinuz-2.6.24-19-generic
Found kernel: /boot/memtest86+.bin
Replacing config file /var/run/grub/menu.lst with new version
Updating /boot/grub/menu.lst ... done

■ 2009/09/25 追記

make-kpkg 実行時に、CONCURRENCY_LEVEL を設定することで、並列処理が図れることを追記。

■ 2011/03/30 追記

カーネル Ver.2.6.38.2 をビルドする時に下記のエラーが出ました。

The UTS Release version in include/linux/version.h
    ""
does not match current version:
    "2.6.38.2"
Please correct this.
make: *** [install/linux-image-2.6.38.2] Error 2

この手のエラーが出た時は、下記を実行して再ビルドすれば OK。

# cp include/generated/utsrelease.h include/generated/compile.h include/linux/
● kernel, build

2009年6月13日土曜日

DDforWindows

ブートイメージとかを USB メモリに焼く場合に、Linux だと dd を使えば良いのですが、
Windows しか無い場合はどうしたらいいの? と調べてみたらありました。

DDforWindows

無料。無保証。業務にも使用可能! すばらしい! > シリコンリナックス株式会社

ということで、使わせていただきます。

スクリーンショットはこちら。

● Windows, dd, img, イメージファイル

2009年6月7日日曜日

パッチ (patch, diff) メモ

diff と patch の使い方メモ。

■ パッチファイルを作る

ファイル単位のパッチを作る場合は、以下のようにします。

$ diff -c FROMFILE TOFILE > PATCHFILE.patch 

ディレクトリ単位のパッチを作る場合は、以下のようにします。

$ diff -crN FROM_DIR TO_DIR > PATCHFILE.patch 

バイナリファイルが含まれる場合は、"-a --binary" を付けたほうが良いかも。

$ diff -crN -a --binary FROM_DIR TO_DIR > PATCHFILE.patch 

■ パッチを当てる

ファイルにパッチを当てるときは以下のようにします。

$ patch < PATCHFILE.patch

ディレクトリにパッチを当てるときは、適用したいディレクトリ上で以下のようにします。

$ patch -p1 < PATCHFILE.patch

-p オプションは相対ディレクトリオプション。
diff を取ったときと相対的に同じ位置にいる場合は -p0 を指定。
違う位置にいる場合は、指定個数分のプレフィックス(ディレクトリ)を取り除いてパッチを適用。

■ 2015/01/25 更新

"-a --binary" の記述追加。

● patch, 作成, パッチ, 作る, diff

2009年6月2日火曜日

他のユーザと screen を共有する方法

ごくごくまれに、他のユーザと screen を共有したいことがあります。
ソースコードのレビューとか、コマンド実行時のログを見せたいとか。
これを活用すると、結構、作業効率が上がると思うんですけどね。
(会社では screen 自体が普及していない…)


他のユーザと screen を共有するためには少し設定が必要です。

■ 設定手順

1. screen のバイナリに suid を立てます。

# chmod u+s /usr/bin/screen

2. /var/run/screen/ ディレクトリに実行権を与えます。
(これをやらないと、screen 自体が立ち上がらなくなるので注意!)

# chmod 755 /var/run/screen/

3. ~/.screenrc に以下を追加します。

multiuser on
acladd ohmoto

以上で準備完了。

■ 共有手順

UserA さんの screen を ohmoto がアタッチ (みられるように) する場合。

1. UserA さんの screen 起動コマンド (hogehoge は共有名)

$ screen -S hogehoge

2. アタッチ側のコマンド (ohmoto 側)

$ screen -x UserA/hogehoge