突然消失するかもしれないブログ

”とつきえブログ”

カテゴリーアーカイブ: Ubuntu

Ubuntu9.0.4でネットワークインターフェース名をカスタマイズする

Ubuntu9.0.4でいつのまにかmrtgが正常に動作しなくなっていたので、snmpdが原因なのかと思いきや、ネットワークインターフェース名が勝手に変更されてしまったのが原因でした。

実際のネットワークインターフェースとLinuxから見えるネットワークインターフェース名のバインディングはudevで行われるようになり、以下のファイルが定義ファイルです。

/etc/udev/rules.d/70-persistant-net.rules

NAME=のパラメータを適宜変更することで、ネットワークインターフェース名の変更が可能です。

【初心者スレ】Ubuntu Linux 41
http://mobile.2chsearch.jp/linux/1245046922/%E3%80%90%E5%88%9D%E5%BF%83%E8%80%85%E3%82%B9%E3%83%AC%E3%80%91Ubuntu%20Linux%2041?f

738 :login:Penguin[sage] 投稿日:2009-07-09 06:02:37 ID:MpczQvIX
modules.confとかのeth?の項目はどこに行ったの?
eth0とeth1入れ替えたりしたいんだけど・・・

742 :login:Penguin[sage] 投稿日:2009-07-09 10:49:18 ID:tkalBOr0
>738
udev管轄になった。
/etc/udevd/rules.d/70-persistant-net.rules

※正しくは以下の通りです。

/etc/udev/rules.d/70-persistant-net.rules

/etc/udev/rules.d/70-persistant-net.rulesのファイルの中身を覗くと、VMware Toolsをインストールすると追加される仮想ネットワークインターフェース(vmxnet)があることがわかります。

# This file maintains persistent names for network interfaces.
# See udev(7) for syntax.
#
# Entries are automatically added by the 75-persistent-net-generator.rules
# file; however you are also free to add your own entries.

# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{t
ype}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x1022:0x2000 (vmxnet)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{t
ype}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x1022:0x2000 (vmxnet)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{t
ype}=="1", KERNEL=="eth*", NAME="eth2"

VMware Toolsをインストールするとpcnet32というネットワークインターフェースは使用できなくなり、vmxnetのみが使用できるようになるようです。

我が家では、VMware Fusion 3のブリッジ接続でUbuntu9.0.4を使用しているのですが、eth2のvmxnetが有効になっていたので、これがブリッジ接続でのネットワークインターフェースなのだと思います。eth1のvmxnetはNAT接続でのネットワークインターフェースでしょうか?

stoneをLinuxでコンパイルする

LinuxでTCP & UDPリピータが必要だったのでstone version 2.3e(stone-2.3e.tar.gz)をコンパイルしてインストールしようとしたら、以下のようなコンパイルエラーが出てしまいました。

http://www.gcd.org/sengoku/stone/Welcome.ja.html

$ make linux

stone.c:4509: error: dereferencing pointer to incomplete type
stone.c:4524: error: dereferencing pointer to incomplete type
stone.c:4536: error: dereferencing pointer to incomplete type
stone.c:4551: error: dereferencing pointer to incomplete type
stone.c:4557: error: dereferencing pointer to incomplete type

stone.cのソースコードを見ると、以下のような記述があり、原因を調べてみたところ、struct ucredの定義が解決出来ないのが原因です。

struct ucred *cred = NULL;

socklen_t optlen = sizeof(*cred);

解決方法としては、Makefileの以下の記述部分に、-D_GNU_SOURCEを追加することで正常にコンパイルできるようになりました。

linux:
        $(MAKE) FLAGS="-O -Wall -DCPP=’\"/usr/bin/cpp -traditional\"’ -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL
_DST=80 -DUSE_EPOLL –D_GNU_SOURCE $(FLAGS)" LIBS="-lpthread $(LIBS)" stone

makeで指定するオプションには、linux以外にもlinux-sslなど他のオプションもありますので、必要に応じて上記の定義を追加すればOKです。

glibc 2.8以降では、_GNU_SOURCEを定義しないと、struct ucredが定義されないんですね。

Debian Squeezeで導入されているglibcは、2.9-25なので上記に該当しています。Ubuntu 9.0.4も上記に該当します。

Debian Squeezeの場合

ii  libc6                             2.9-25                     GNU C Library: Shared libraries

Ubuntu 9.0.4の場合

ii  libc6                                      2.9-4ubuntu6.1                            GNU C Library: Shared libr
aries

 

<参考>

http://www.linux.or.jp/JM/html/LDP_man-pages/man7/unix.7.html

SCM_CREDENTIALS
    Unix 信任状を送受信する。これは認証に用いることができる。信任状は、 struct ucred の補助メッセージとして渡される。この構造体は <sys/socket.h> で以下のように定義されている。

    struct ucred {
        pid_t pid;    /* process ID of the sending process */
        uid_t uid;    /* user ID of the sending process */
        gid_t gid;    /* group ID of the sending process */
    };

    glibc 2.8 以降では、この構造体の定義を得るためには機能検査マクロ _GNU_SOURCE を定義しなければならない。

Windows XPのリモートデスクトップ接続でLinuxを遠隔操作する方法

Mac OS X Leopardの画面共有はRDPプロトコルに対応していませんが、Linuxならxrdpを使用することで、Windows XPのリモートデスクトップ接続を使用してRDPで遠隔操作することができるようになります。

xrdpはバックエンドにvncを使用するのでなんだかなという気がしないでもないです。

Ubuntu9.0.4で以下のパッケージをインストールします。

apt-get install xrdp
apt-get install x11vnc
apt-get install xtightvncviewer

ちなみに、xvncserverというパッケージは提供されなくなったようなので、代わりのxtightvncviewerをインストールしました。

後は、ubuntuでxrdpを参考に、/etc/xrdp/startwm.shを以下のように編集します。

export LANG=ja_JP.UTF-8

x11vnc -display :0 -localhost &

sleep 5

xvncviewer localhost:0 -fullscreen

. /etc/X11/Xsession

設定が完了したら、念のため、一度、Ubuntuを再起動します。

初めてWindowsからUbuntuにリモートデスクトップ接続した時にUbuntuのX-Windowが再起動を繰り返して接続できず、ローカルからもUbuntuにグラフィカルログインできなくなりましたので結構はまります。

LinuxからWindowsのホスト名を解決する方法

Debian、Ubuntu、共通の方法でLinuxからWindowsのホスト名を解決する方法です。

具体的には、/etc/nsswitch.confのhosts行に、”wins”という記述を追加する。

hosts:          files wins mdns4_minimal [NOTFOUND=return] dns mdns4

更に、winbindパッケージをインストールする必要があります。

これは恐らく、既存のリゾルバライブラリがwinsに対応していないので、winbindパッケージを追加するとwinsに対応になるのではないかと思われます。

# apt-get install winbind

winbind(WINSサーバ)を常時実行していなくてもWindowsの名前解決はできるので、不要なら止めておいても構いません。

逆に、WindowsからLinuxのホスト名を解決するには、Linuxにsambaをインストールするだけです。

この設定をしてからというもの、LinuxからWindowsのホスト名から動的にIPアドレスを解決できるようになったので非常に便利です。

参考:sambaでホスト名解決

Ubuntu 8.04のFirefox3.0.1でFlashを再生する方法

Ubuntu 8.04のFirefox3.0.1でYouTubeやニコニコ動画を再生する方法。

Firefoxで、YouTubeやニコニコ動画にアクセスすると、Flashのプラグインを追加するように要求してきて、指示通り操作してインストールを行い正常に終了してもFlashが使えるようにならないという症状が出る。

解決策としては、Adobeの公式サイトから、install_flash_player_9_linux.tar.gzを落としてきて、ログインしているユーザのホームディレクトリにある~/.mozilla/pluginsに、libflashplayer.soをコピーするだけ。

なぜか、/usr/lib/mozilla/pluginsにコピーしても認識されないみたい。

デーモンとして動作するvmware-user

Ubuntu 8.04をインストールして驚いたのだが、vmware-toolsが起動していないのにVMware Player上のLinuxとWindows間でマウスがシームレスに移動できる。

で、プロセスを見たら、vmware-userというプロセスが起動している。VMware Toolsのようにウィンドウを開かないのが素敵。

これは、/etc/rc2.d/S20open-vm-toolsで自動起動されているらしく、Ubuntuのログイン画面でもマウスがシームレスに移動できる。

Ubuntu 7.10の頃のvmwareの仮想イメージ版では実現されていなかったと思ったけど、非常に快適。しかもrootで動作しているから、有料のVMware WorkstationならファイルシステムのShrinkも特に何もしなくても実行できるかもしれない。(VMware Toolsだと、rootで実行していないとファイルシステムのShrinkができない)

Ubuntu8.04へのアップグレードではまる

クリーンインストールに超したことはないわけですが、気の迷い、一縷の望みをかけて、Ubuntu7.10から8.04にアップグレードをかけてみたところ、ものの見事に失敗。

Ubuntu8.04のキーボードレイアウトの問題

にもあるけど、自分の場合は、ログインしても、正常にデスクトップが表示されない。

VMware Player上でLinuxの仮想コンソールを使うには、

Vine Linux on VMWareで仮想コンソールを切り替える

の通り、[CTRL]+[ALT]+[SPACE]してから、[CTRL]+[ALT]は押したまま[SPACE]だけ離して、[F2]を押せば良いらしい。

が、仮想コンソールに切り替わらない。ひょっとして、gettyが死んでいるのかと思いきや、一応生きているらしい。謎だ。

root      3813  0.0  0.0   1620   496 tty4     Ss+  01:33   0:00 /sbin/getty 38400 tty4
root      3814  0.0  0.0   1624   500 tty5     Ss+  01:33   0:00 /sbin/getty 38400 tty5
root      3823  0.0  0.0   1624   500 tty2     Ss+  01:33   0:00 /sbin/getty 38400 tty2
root      3825  0.0  0.0   1620   496 tty3     Ss+  01:33   0:00 /sbin/getty 38400 tty3
root      3826  0.0  0.0   1620   496 tty1     Ss+  01:33   0:00 /sbin/getty 38400 tty1
root      3836  0.0  0.0   1620   496 tty6     Ss+  01:33   0:00 /sbin/getty 38400 tty6

 

で、とりあえずログインする方法を模索してみた。

「オプション」→「言語の選択」で、「日本語」を選んで、一応初期化する。

image

次に、「セッションの選択」で「フェイルセーフのGNOME」を選択して、

image

ダイアログが表示されるが、構わず続行。

image

デスクトップ画面が出た。エラー出まくり。GNOME関連が死んでる。それに、HALが死んでいるらしいので、Ethernetの初期化ができない。IPアドレスの設定がうまくできないので、リモートログインもできなくなっている。

image

とりあえず、バックアップだけとって、素直にUbuntu 8.04のvmwareの仮想マシンイメージをとってくることにする。その方が楽ちん。

Ubuntuのリポジトリサーバ調子悪い?

今日は、訳あって、デスクトップPCにUbuntu8.04をインストールしてみたのですが、Ubuntuのリポジトリサーバに接続しようとするとエラーが出まくり。

ひょっとして会社のプロキシーサーバが悪さをしているのかと思いきや、自宅のネットワークでも同じ現象が発生。

image 

参照するリポジトリサーバを変更したり、いろいろ試行錯誤を重ねたけど一向に改善の気配なし。

2008年7月26日にUbuntu8.04.1日本語ローカライズドDesktop CDがリリースされていたりするので、サーバが混んでるんだろうか?

ほとぼりが冷めてから試してみるしかないか。

Debian 4.0 Etchでhotplugとudevを同時にインストールして使用することが出来ない

Debian 4.0 EtchをArmadillo-500にインストールしているのですが、いつの間にか/dev以下のファイルが自動的に削除されて、正常に起動できなくなるという問題が発生してしまい、ここしばらくはまっていました。

で、結論から言うと、Debian 4.0 Etchでは、hotplugとudevを同時にインストールして使用することが出来ないからです。

Debian 4.0 Etchでは、デフォルトでudevがインストールされています。hotplugはインストールされていません。少なくともArmadillo-500用にアットマークテクノが配布しているdebianのディストリビューションの構成ではこうなっています。

ここで、apt-get install hotplugをしようとすると、なんと、udevのパッケージが削除されてしまうのです。これが原因で、次回再起動時に/devファイルが削除されてしまう(デバイスファイルが作成されない?)ため、例えば、/dev/hdaなどHDDがマウントできず、ブートが異常停止してしまうのです。

で、LinkStation HD-HGLAN+FreeLink+Webinstallerの環境だと、udevはインストールされていません。なので、hotplugをインストールしても不具合が出ないんですね。

ここらへんの事情は、以下が詳しいです。

udev+D-Bus+Hal Howto (draft)

なんで、hotplugとudevが共存できないのかというと、udevがあればhotplugは必要なくなったからのようです。

hotplug環境だと、/proc/sys/kernel/hotplugに指定されたプログラムが、例えば、USB機器を抜き差しすると呼び出されます。

ところが、udev環境だと、/proc/sys/kernel/hotplugの内容は空になっています。では、、/proc/sys/kernel/hotplugの内容が空なのに、例えばどうしてUSB機器の抜き差しに対応できるのかというと、カーネルからNETLINKを使って、ユーザスペース上にあるudevdと通信しているからのようです。

ちなみに、NETLINKとは、こちらが詳しいです。

NETLINKというのは、カーネルとユーザー空間の通信 (PF_NETLINK)を提供する機構なんですね。

Ubuntuで不用意にusermodでユーザが所属するグループを変更すると危険

usermod -G グループ名 ユーザID

を実行すると、指定したユーザIDが所属するセカンダリグループを変更することができます。

Ubuntuでは、rootのパスワードは原則、非公開?になっていて、suコマンドでは直接rootになれないので、sudoコマンドを使ってrootになります。

ところが、Ubuntuのデフォルトの設定では、adminグループに所属しているユーザ以外はrootになれない設定になっています。

例:usermod -G users ユーザID

を実行すると、ユーザIDが所属しているセカンダリグループはusersだけになってしまいます。そうすると、sudoを実行してもrootになれなくなります。

そこで、正しくは、

例:usermod -G admin,users ユーザID

のように、adminに加えて、カンマで区切ってusersというユーザIDを追加しないといけません。要するに、usermod -Gでセカンダリグループを変更すると、指定したユーザIDのセカンダリグループを全部置き換えてしまうため、所属を希望しているグループIDを全て指定する必要があります。

たまたま、rootの状態になっていたターミナルがたまたま残っていたから修正出来ましたが、下手すると二度とユーザになれなくなるところでした。

予備のユーザを作成しておくとか、危険な操作をするときは意図的にrootの状態になっているターミナルを残しておくとか、不測の事態に備えておかないと非常に危険です。

%d人のブロガーが「いいね」をつけました。