Home > Linux

Linux Archive

固定IPアドレスなのにDHCPでIPアドレスを取得してしまう

またFedora 9のメモ。
Fedora 9をインストールしたPCをいじっていたら変な状況に出くわした。
固定IPアドレスの設定をしているのに、再起動した際最初にDHCPでIPアドレスを取得してしまう。
結論から言うとFedora 9ではネットワーク管理は今までのnetworkではなく、
NetworkManagerという機能で行っているせいのようだった。
NetworkManagerのifcfg-eth?の記述は少しnetworkとは異なるようで、
項目をはしょりすぎるとうまくいかない模様。
とりあえずsetupコマンドでethの設定をすれば、
NetworkManagerに必要な項目は全部ifcfg-eth?に書いてくれるぽい。
適当にいじった感じではTYPE=Ethernetの記述が抜けてるだけでもダメだった。

解決方法としてはnetworkみたいにifcfg-eth?をガリガリいじる方法ではなく、
setupコマンドを利用して設定するか、
NetworkManagerではなくnetworkを利用して今まで通りに利用するかというものがあるみたい。
後者は
chkconfig NetworkManager off
chkconfig network on

このコマンドの後再起動でOK。

eth0とeth1の入れ替え方

NICを複数挿したPCにLinuxをインストールした場合、
どのNICがどのeth?として認識されるかは、ドライバの組み込み順で決まる模様。
で、自分がeth0として認識させたかったNICがeth1として認識された際、
eth0とeth1の対応NICを入れ替える方法。

ネットで検索するといくつか方法がでてきて、
ifcfg-eth?に対応させたいNICのMACアドレスを記述するとか、
/etc/modules.conf(*1)あたりにaliasを記述するといったものが出てくる。
しかし上記方法を試してもうまくいかなかったため、試行錯誤していたのだが、解決したのでメモ。

今回のOSはFedora 9。他のディストリビューションではまた違うこともあると思われる。
Fedora 9では、ifcfg-eth?に対応させたいNICのMACアドレスを記述した後、
/etc/udev/rules/70-persistent-net.rulesのファイルを削除して再起動。
このファイルにもMACアドレスとeth?の関連付け?が記述されているようで、
そのせいでifcfg-eth?にMACアドレスを書くだけじゃ入れ替えがうまくいかなかった模様。
/etc/udev/rules/70-persistent-net.rulesは消して再起動すればまたファイルが生成されます。
ただ基本ですがいじる前にバックアップをとることは忘れずに。

また、複数NICを挿している際にifcfg-eth?にMACアドレスを記述しておくことで、
再起動などをした際に勝手にeth0とeth1が入れ替わったりすることが防げるみたい。


*1 kernel 2.6からは/etc/modules.d/以下のファイルに書くように変わった模様

OCFS2+NBDなクラスタ構築

OCFS2+NBDなクラスタ環境を作ったので構築ログ。
VMware Serverの仮想マシンを使用して4台構築。
クラスタノード*3、NBD Server用のサーバ*1。
OSは、クラスタノードは他の実験のためちょっと古めのCentOS4.6、
NBD Server用のサーバはCentOS5.1。

  • NBD
  • cd /usr/local/src
    wget http://nchc.dl.sourceforge.net/sourceforge/nbd/nbd-2.8.8.tar.gz
    chown -R root: /usr/local/src/nbd-2.8.8
    cd /usr/local/src/nbd-2.8.8
    ./configure

    *2.6以上のnbd.hが見つからないと言われる
    checking where to find a working nbd.h... configure: error: Could not find an nbd.h from 2.6 or above.

    これが今回最も詰まったポイント。
    NBDのバージョン2.7.8を利用すれば問題なくインストールまでいけたのですが、
    2.7.8だとNBD Serverで公開したブロックデバイスにアクセスしようとすると
    うまくブロックデバイスにアクセスできずI/O Errorを出されました。

    エラーを探って延々とググった後、
    NBDインストール手順の紹介で次の手順を踏んでいるサイトを一つ発見。

    *カーネルからnbd.hを拾ってくる
    cp /usr/src/kernels/2.6.9-67.EL-smp-i686/include/linux/nbd.h /usr/local/include/nbd.h

    上記のようにやればnbd.hに関するconfigureエラーはクリアできました。
    あとになって気づいたのですが、2.8.8のREADMEを見るとちゃんと書いてありますね。
    nbd.hにenum関係のあるコードの記述がない場合は新しいカーネルから拾って置き換えろって。
    上の例では/usr/local/include/にnbd.hを置いてますが、
    デフォルトでは/usr/include/linux/以下にある(CentOS4.6の場合)ので、
    そちらと交換で大丈夫だと思います。というかそちらの方がたぶん美しい。
    configureの際に先に/usr/local/include/を参照する?から、
    /usr/local/include/以下においても大丈夫ってことなのかな?

    *再度configure→install
    ./configure
    make
    make install

    本当は当初NBDは最新版の2.9.11を使用しようとしていたのですが、
    2.9.11だとこのconfigureの際にglibのバージョンチェック?で弾かれました。
    checking for GLIB - version >= 2.6.0... no
    *** Could not run GLIB test program, checking why...
    *** The test program failed to compile or link. See the file config.log for the
    *** exact error that occured. This usually means GLIB is incorrectly installed.
    configure: error: Missing glib

    これはNBDのバージョンを下げて2.8.8にすれば通りました。
    glib更新でもいけると思いますが、今回はこちらで。


    *nbd-server側で実行
    クラスタノードにブロックデバイスを公開するサーバで行う。
    アクセスに使用するTCPポートは任意だが、今回は2000を使用。
    mkdir /export/nbd
    dd if=/dev/zero of=/export/nbd/nb0 bs=1M count=1024
    nbd-server 2000 /export/nbd/nb0

    *nbd-client側で実行
    全てのクラスタノードで実行する。
    以下はNBD ServerのIPアドレスが192.168.1.2、アクセスに使用するTCPポートが2000の場合。
    modprobe nbd
    nbd-client 192.168.1.2 2000 /dev/ndb0


  • OCFS2
  • 全てのクラスタノードで実行する。
    cd /usr/local/src
    wget http://oss.oracle.com/projects/ocfs2/dist/files/RedHat/RHEL4/i386/1.2.9-1/2.6.9-67.EL/ocfs2-2.6.9-67.ELsmp-1.2.9-1.el4.i686.rpm
    wget http://oss.oracle.com/projects/ocfs2-tools/dist/files/RedHat/RHEL4/i386/1.2.7-1/ocfs2-tools-1.2.7-1.el4.i386.rpm
    rpm -ivh ocfs2-tools-1.2.7-1.el4.i386.rpm
    rpm -ivh ocfs2-2.6.9-67.ELsmp-1.2.9-1.el4.i686.rpm
    vi /etc/ocfs2/cluster.conf
    --------------------------------------------------------------------------
    cluster:
    name = ocfs2
    node_count = 3
    node:
    name = spinner
    cluster = ocfs2
    number = 0
    ip_port = 7777
    ip_address = 192.168.1.9
    node:
    name = elevator
    cluster = ocfs2
    number = 1
    ip_port = 7777
    ip_address = 192.168.1.7
    node:
    name = rudder
    cluster = ocfs2
    number = 2
    ip_port = 7777
    ip_address = 192.168.1.10
    --------------------------------------------------------------------------

    /etc/init.d/o2cb configure
    --------------------------------------------------------------------------
    Configuring the O2CB driver.

    This will configure the on-boot properties of the O2CB driver.
    The following questions will determine whether the driver is loaded on
    boot. The current values will be shown in brackets ('[]'). Hitting
    without typing an answer will keep that current value. Ctrl-C
    will abort.

    Load O2CB driver on boot (y/n) [n]: y
    Cluster to start on boot (Enter "none" to clear) [ocfs2]:
    Specify heartbeat dead threshold (>=7) [31]:
    Specify network idle timeout in ms (>=5000) [30000]:
    Specify network keepalive delay in ms (>=1000) [2000]:
    Specify network reconnect delay in ms (>=2000) [2000]:
    Writing O2CB configuration: OK
    Loading module "configfs": OK
    Creating directory '/config': OK
    Mounting configfs filesystem at /config: OK
    Loading module "ocfs2_nodemanager": OK
    Loading module "ocfs2_dlm": OK
    Loading module "ocfs2_dlmfs": OK
    Creating directory '/dlm': OK
    Mounting ocfs2_dlmfs filesystem at /dlm: OK
    Starting O2CB cluster ocfs2: OK
    ----------------------------------------------------------------------------

    *フォーマット
    これは一つのクラスタノードだけでやれば良い
    mkfs.ocfs2 -b 4096 -C 128k -L DBF1 -N 3 /dev/nbd0

    *マウント
    mount -t ocfs2 /dev/nbd0 /mnt/ocfs

    とまあ大体こんな感じで、あたふたしながらマウントまでできました。
    今回は構築まで。あとは適当に触ってみます。



    本当はOCFS2もインストールの際に
    エラー: Failed dependencies:
    libreadline.so.5 is needed by ocfs2-tools-1.2.6-1.el5.i386
    rtld(GNU_HASH) is needed by ocfs2-tools-1.2.6-1.el5.i386
    のエラーから始まり、ライブラリを更新しようとするも、
    古いライブラリが他のプログラムに激しく依存していて、
    更新した結果wgetとかyumとかの基本コマンドなどが消去されたりしました。
    これは単純にOCFS2のダウンロードの際に、
    間違ってRHEL5用のRPMパッケージを落としていたせいだったのですが。

    他にも/etc/init.d/o2cb configureの際に以下のようなエラーももらってたり。
    Loading module "configfs": Unable to load module "configfs"
    Failed

    これも単純にOCFS2のダウンロードの際に
    間違ったカーネル用のRPMパッケージ(ELではなくELsmp)を落としていただけでした。

    まあこちらはNBDに比べて引っかかる人が少ないと思うので、最後にオマケ程度で。
    いやはや、眠い頭で作業をするとくだらない間違いをして仕方がない。

    Emacs再び

    EmacsWikiを参考に何度も挫折しているEmacsにもう一度トライ。
    わざわざEmacs自体にチュートリアルが用意されているのね。便利。
    チュートリアルはEmacs起動して"C-h t"。
    これを通せば基本的な操作は一通り身につくハズ。

    しかしチュートリアルを半分ほど終えたとこでもはや指がしんどい。
    また今度。

    Fedora更新

    自宅のLinuxマシンのFedoraを7から8にアップデートしました。
    すでに9も出ているけど、あまり評判がよくないので8で。
    別に更新しなくても良いかなとも思っていたのだけれど、
    よく考えるとOSはクリーンインストールばかりで
    yumからバージョンアップしたことがないなと。

    ということでものは試し。

    といっても、大して手間はかからなかった。
    適当な場所から以下の二つのパッケージを入手。
    • fedora-release-8-3.noarch.rpm
    • fedora-release-notes-8.0.0-3.noarch.rpm

    rpm -Fvh fedora-release-8-3.noarch.rpm fedora-release-notes-8.0.0-3.noarch.rpm
    yum clean all
    yum -y update

    これだけ。
    依存関係があってアップデートできないこともよくある模様。
    今回はBeryl関係のものが引っかかったのでyum removeで削除した。

    今回のアップデートを行ってBerylがCompizと統合されていたことを知った。
    なのでアップデート後に独学Linuxさんを参考にCompiz Fusionを導入。

    8にしたらロケールを日本語にするか促されたのでとりあえずしてみた。
    が、キモすぎるので戻そうと思う。
    どうも2バイトディレクトリ名はキモい。
    Linuxだと違和感がすごすぎる。

    他に目のついたところでWindows用のHDDがオートマウントされてた。
    便利だけどツリー上どこにマウントされてるのかよくわからん。
    あとで探そっと。

    Home > Linux

    Page Top