1つのNICに複数のIPアドレスをアサインする

2009/10/18 PC::Linux/BSD

Linuxで1つの物理NICに複数のIPアドレスをアサインする方法に関するメモ。

環境

以下の環境で試してみました。

  • Kubuntu 9.04/amd64
    • Kernel: 2.6.28-15-generic

この環境でのifconfigの出力は以下の通り。

$ ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          inetアドレス:192.168.xxx.xxx  ブロードキャスト:192.168.xxx.255  マスク:255.255.255.0
          inet6アドレス: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 範囲:グローバル
          inet6アドレス: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:2224992 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:1592433 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RXバイト:2753802229 (2.7 GB)  TXバイト:552776890 (552.7 MB)
          割り込み:16

lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1  マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:16436  メトリック:1
          RXパケット:7135 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:7135 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:0
          RXバイト:4808865 (4.8 MB)  TXバイト:4808865 (4.8 MB)

別ネットワークのIPアドレスを割り当てる

ifconfigで仮想的なインターフェイス(eth0:0)をeth0に対して割り当て、eth0:0に対して172.16.0.1/16を割り当ててみる。
このような機能をIPエイリアスと呼ぶらしい。

$ sudo ifconfig eth0:0 172.16.1.1 netmask 255.255.0.0 broadcast 172.16.255.255
$ ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          inetアドレス:192.168.xxx.xxx  ブロードキャスト:192.168.xxx.255  マスク:255.255.255.0
          inet6アドレス: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 範囲:グローバル
          inet6アドレス: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:2224992 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:1592433 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RXバイト:2753802229 (2.7 GB)  TXバイト:552776890 (552.7 MB)
          割り込み:16

eth0:0    Link encap:イーサネット  ハードウェアアドレス 00:14:5e:1e:26:92
          inetアドレス:172.16.1.1  ブロードキャスト:172.16.255.255  マスク:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          割り込み:16

lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1  マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:16436  メトリック:1
          RXパケット:7261 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:7261 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:0
          RXバイト:4817685 (4.8 MB)  TXバイト:4817685 (4.8 MB)

定義したIPエイリアスを削除する

eth0をダウンさせるのと同様にeth0:0をダウンさせればいい。

$ sudo ifconfig eth0:0 down
$ ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          inetアドレス:192.168.xxx.xxx  ブロードキャスト:192.168.xxx.255  マスク:255.255.255.0
          inet6アドレス: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 範囲:グローバル
          inet6アドレス: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:2224992 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:1592433 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RXバイト:2753802229 (2.7 GB)  TXバイト:552776890 (552.7 MB)
          割り込み:16

lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1  マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:16436  メトリック:1
          RXパケット:7261 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:7261 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:0
          RXバイト:4817685 (4.8 MB)  TXバイト:4817685 (4.8 MB)

これでネットワークの移行が楽になる。

参考

ITmedia Linux Tips「1枚のNICに複数のIPアドレスを割り当てたい」

Wineでのフォント調整

2009/10/05 PC::Linux/BSD

Wineのデフォルト状態では日本語が正しく表示されない(□で表示される)場合が多い。
これを調整した時のメモ。

環境

  • Kubuntu 9.04/amd64
    • Wine 1.1.30

レジストリによる調整

HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements
以下に置き換え対象のフォントをゴリゴリと登録する。

例)
"MS Pゴシック"="VL Pゴシック"

私は以下のようにレジストリファイルを作成してインポートしています。
wine-font.txt:レジストリファイルのダウンロード(拡張子を.txt→.regへ変更して下さい)

REGEDIT4

[HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements]
"Courier New"="Courier New"
"Comic Sans MS"="Comic Sans MS"
"FixedSys"="IPAゴシック"
"Lucida Sans Unicode"="Lucida Sans"
"Microsoft Sans Serif"="DejaVu Sans"
"MS Pゴシック"="VL Pゴシック"
"MS PGothic"="VL Pゴシック"
"MS P明朝"="IPA P明朝"
"MS UI Gothic"="VL Pゴシック"
"MS ゴシック"="VL ゴシック"
"MS Gothic"="VL ゴシック"
"MS 明朝"="IPA明朝"
"Small fonts"="VL ゴシック"
"System"="VL ゴシック"
"Terminal"="VL Pゴシック"
"Verdana"="VL Pゴシック"

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
"Courier New"="Courier New"
"Comic Sans MS"="Comic Sans MS"
"Verdana"="VL Pゴシック"

[HKEY_CURRENT_USER\Control Panel\Desktop]
"FontSmoothing"="2"

これでもまだ文字化けする場合

lsof を利用して利用しているフォントを調査する。以下はCrystalMark 2004R3 を動作させた時の結果。

$ lsof | grep Crystal | grep ttf
CrystalMa (中略) /usr/share/wine/fonts/tahoma.ttf

上記によると/usr/share/wine/fonts/tahoma.ttfが利用されているらしい。
このtahoma.ttfに日本語が含まれていないのが問題っぽい。と、いうことで「 ttt:(FreeBSD) wineでPicasa2を動かしたら文字化けしたので、気合で修正」を参考に以下のように修正。

  • /usr/share/wine/fonts/tahoma.ttf を /usr/share/wine/fonts.bak/tahoma.ttf へ移動
  • VL Pゴシックのシンボリックリンクを /usr/share/wine/fonts/tahoma.ttf へ作成(必要ないかも)

これでTahomaを指定されていた部分も正常に表示されるようになりました。

wine-fontfix.jpg

このときのlsofの結果は次の通り。

$ lsof | grep ttf | grep Crystal
CrystalMa (中略) /usr/share/fonts/truetype/msttcorefonts/Arial.ttf
CrystalMa (中略) /usr/share/fonts/truetype/vlgothic/VL-PGothic-Regular.ttf

参考

[Kubuntu 9.04] ThunderbirdのURIリンククリックでブラウザで開く

2009/08/30 PC::Linux/BSD

Kubuntu 9.04環境下でThunderbirdを利用している場合、デフォルトではThunderbirdのURIリンクをクリックしてもブラウザでそのWebページを開くことができない。

ThunderbirdのURIリンクのクリックでブラウザでそのWebページを開くことができるようにしたときのメモ。

環境

  • Kubuntu 9.04(Jaunty Jackalope)/amd64
  • Thunderbird 2.0.0.23
  • Firefox 3.0.13

手順

Thunderbirdのプロファイルに含まれるファイルを編集する

~/.mozilla-thunderbird/プロファイル名/prefs.js

以下を追加

user_pref("network.protocol-handler.app.ftp", "/etc/alternatives/x-www-browser");
user_pref("network.protocol-handler.app.http", "/etc/alternatives/x-www-browser");
user_pref("network.protocol-handler.app.https", "/etc/alternatives/x-www-browser");

これで/etc/alternatives/x-www-browserで定義されているブラウザ*1でThunderbirdでクリックしたリンクのページを開くことができる。

/etc/alternatives/x-www-browserで定義されているブラウザを変更する

私のデフォルトブラウザはFirefoxなので、/etc/alternatives/x-www-browserで定義されているブラウザもFirefoxにする。

以下を実行する

$ sudo update-alternatives --config x-www-broswer
`x-www-browser' を提供する 2 個の alternatives があります。

  選択肢       alternative
-----------------------------------------------
*+        1    /usr/bin/konqueror
           2    /usr/bin/firefox-3.0

デフォルト[*] のままにするには Enter、さもなければ選択肢の番号のキーを押してください: 2
'x-www-browser' を提供するために '/usr/bin/firefox-3.0' を使います。

*1 : Kubuntu 9.04 ではKonqueror

参考

[Kubuntu 9.04/amd64] VMware Server Console 1.0.9のインストール

2009/08/01 PC::Linux/BSD

Kubuntu 9.04/amd64環境にVMware Server Console 1.0.9をインストールしたときのメモ。

環境

  • Kubuntu 9.04(Jaunty Jackalope)/amd64 Desktop
    • VMware Server Console 1.0.9 build-156507
  • VMware Server ホストマシン
    • Debian GNU/Linux 4.0(etch)/i386
    • VMware Server 1.0.6

インストール

  1. ここからVMware Server Linux client packageをダウンロードしてくる
  2. ダウンロードしたzipファイルの中にVMware-server-console-1.0.9-156507.tar.gzがあるので適当なディレクトリに展開する
  3. 展開したVMware-server-console-1.0.9-156507.tar.gzを更に適当なディレクトリに展開する
  4. tarballを展開した中にvmware-install.plがあるのでroot権限で実行する
  5. いくつかの質問とライセンス許諾を聞かれるのでそれに返答する(基本的にデフォルトでいい)

インストール後の調整

コンソールからvmware-server-consoleを実行すると、以下のエラーが出て起動できない。

$ vmware-server-console 
/usr/lib/vmware-server-console/bin/vmware-server-console: symbol lookup error: /usr/lib32/libgio-2.0.so.0: undefined symbol: g_thread_gettime 

このため、このエラーを回避するために以下のファイルを編集する必要がある。
/usr/lib/vmware-server-console/lib/wrapper-gtk24.sh

#!/bin/sh
VMWARE_USE_SHIPPED_GTK="force" # <-この行を追加
libs="$1"
shift
binary="$1"
shift
confs="$1"
shift

以下略

これでVMware Server Consoleが利用できるようになる

vsc109.jpg

参考

[Kubuntu 9.04] トラックポイントの最適化

2009/07/25 PC::Linux/BSD

Kubuntu 9.04/amd64 環境下でトラックポイントデバイスをWindows環境下と同様に利用できるようにしたときのメモ。

環境

  • Kubuntu 9.04(Jaunty Jackalope)/amd64 Desktop
  • Space Saver II Keyboard

設定

HALのトラックポイント用設定ファイル

Kubuntu 8.04を利用していたときにはxorg.confにトラックポイントの設定を記述していたが、Kubuntu 9.04では、/etc/hal/fdi/policy/以下に設定ファイルを置くようになっている。

上記記事を参考に/etc/hal/fdi/policy/trackpoint.fdiを作成

<match key="info.product" string="TPPS/2 IBM TrackPoint">
   <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
   <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
   <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
   <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
   <merge key="input.x11_options.ZAxisMapping" type="string">4 5</merge>
   <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
</match>

これでセンターボタン押下時にトラックポイントを上下左右に動かすことで縦横のスクロールが可能となる。

トラックポイントの感度とスピードの調整

上記記事によると、/sys/devices/platform/i8042/serio? 以下にあるspeedとsensitivityの値を変更してやればいいらしい。が、再起動すると初期化されてしまうため、自動的に最適な値にしてやるようにします。

以下のような方針にて設定を行います。

  1. 私の環境では/sys/devices/platform/i8042/serio1/以下のspeedとsensitiveに対して設定をしてやる必要がありますが、serioの後の数字は固定とは限らないため、udevでマウスデバイスを固定する
  2. udevで固定されたデバイスに対してudevadmを使ってトラックポイントのserio?を調べる
  3. root権限で設定を行わなければならないのでrc.localに設定を記述する
トラックポイントデバイスのためのudevルールの作成

まずはdmesgでトラックポイントデバイスの情報を取得します。

$ dmesg | grep input | grep TPPS/2
[    9.004286] input: TPPS/2 IBM TrackPoint as /devices/platform/i8042/serio1/input/input10

続いて、この情報を元にudevadmを用いて*1デバイスの詳細情報を取得します。マウスの実態はinput10ディレクトリ以下のmouse?になるので、それに対する情報を取得する点に注意してください。

udevadm info -a -p /sys/devices/platform/i8042/serio1/input/input10/mouse3/

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device     
found, all possible attributes in the udev rules key format.         
A rule to match, can be composed by the attributes of the device     
and the attributes from one single parent device.                    

  looking at device '/devices/platform/i8042/serio1/input/input10/mouse3':
    KERNEL=="mouse3"                                                      
    SUBSYSTEM=="input"                                                    
    DRIVER==""                                                            

  looking at parent device '/devices/platform/i8042/serio1/input/input10':
    KERNELS=="input10"                                                    
    SUBSYSTEMS=="input"                                                   
    DRIVERS==""                                                           
    ATTRS{name}=="TPPS/2 IBM TrackPoint"                                  
    ATTRS{phys}=="isa0060/serio1/input0"                                  
    ATTRS{uniq}==""                                                       
    ATTRS{modalias}=="input:b0011v0002p000Ae0000-e0,1,2,k110,111,112,r0,1,amlsfw"

  looking at parent device '/devices/platform/i8042/serio1':
    KERNELS=="serio1"
    SUBSYSTEMS=="serio"
    DRIVERS=="psmouse"
    ATTRS{description}=="i8042 AUX port"
    ATTRS{modalias}=="serio:ty01pr00id00ex00"
    ATTRS{bind_mode}=="auto"
    ATTRS{sensitivity}=="192"
    ATTRS{speed}=="97"
    ATTRS{inertia}=="6"
    ATTRS{reach}=="10"
    ATTRS{draghys}=="255"
    ATTRS{mindrag}=="20"
    ATTRS{thresh}=="8"
    ATTRS{upthresh}=="255"
    ATTRS{ztime}=="38"
    ATTRS{jenks}=="135"
    ATTRS{press_to_select}=="0"
    ATTRS{skipback}=="0"
    ATTRS{ext_dev}=="1"
    ATTRS{protocol}=="TPPS/2"
    ATTRS{rate}=="100"
    ATTRS{resolution}=="200"
    ATTRS{resetafter}=="5"
    ATTRS{resync_time}=="0"

  looking at parent device '/devices/platform/i8042':
    KERNELS=="i8042"
    SUBSYSTEMS=="platform"
    DRIVERS=="i8042"
    ATTRS{modalias}=="platform:i8042"

  looking at parent device '/devices/platform':
    KERNELS=="platform"
    SUBSYSTEMS==""
    DRIVERS==""

ここから、udevルールに使えそうな値を選んでルールを作ります。

/etc/udev/rules.d/99-local.rules

# udev rule for IBM TrackPoint IV
KERNEL=="mouse?", SUBSYSTEM=="input", ATTRS{name}=="TPPS/2 IBM TrackPoint", NAME="input/%k", SYMLINK+="input/tp4"

これで、/dev/input/tp4にトラックポイントデバイスが作成されます。

rc.localルールにトラックポイントの感度の調整を記述

udevで作成した/dev/input/tp4をudevadmを使用してディレクトリを抽出。その後、sensitivityとspeedを設定する。

/etc/rc.local

temp=`udevadm info -a -p \`udevadm info -q path -n /dev/input/tp4\` \
        | grep -v input \
        | grep looking \
        | sed -e 's/'\''/"/g' \
        | cut -d '"' -f 2 \
        | head -1`
Tp4Sensitivity=/sys/$temp/sensitivity
Tp4Speed=/sys/$temp/speed
# Configuare for TrackPoint Device
echo -n 192 > $Tp4Sensitivity
echo -n 97 > $Tp4Speed

上記の例ではsensitivityに192, speedに97を設定しています。

*1 : 他のディストリビューションではudevinfoの場合もあります。