インストールする(その6)

私のcoMomongaのネットワーク環境は、DHCPで不定のIPアドレスを割り振っている。
また、TAP-Win32 AdapterもDHCPIPアドレスを割り振っているので、ローカルとグローバルの区別が付かないためか、Xmingの設定で「Search for hosts (broadcast)」が使用できない。
DHCPをサービスしているルータには、IPアドレスを固定化する方法が提供されていない。
仕方がないので、現在はcoMomongaのコンソールでログインしてifconfigコマンドでIPアドレスを調べている。
この問題を解決するために以下の作業を行う。

  • coMomongaにsambaをインストールする
  • ホストにActivePerlをインストールする
  • perlスクリプトXmingを実行する
    • Xmingの設定ファイルを生成する
    • routeの設定を追加する
    • Xmingを実行する

coMomongaにsambaをインストールする

sambaによってホスト側から名前でcoMomongaにアクセスできるようになるため、pingコマンドで容易にcoMomongaのIPアドレスが取得できるようになる。
sambaをインストールするためには、Xmingで接続してrootでログインし、ターミナルで

# system-config-packages --tree=ftp://dist.momonga-linux.org/pub/momonga/2/i686/os/

と入力して、「Windowsファイルサーバ」を選択してインストールする。
または、consoleやtelnetからrootでログインし、

# wget ftp://dist.momonga-linux.org/pub/momonga/2/i686/os/Momonga/RPMS/perl-Crypt-SmbHash-0.12-1m.i686.rpm
# rpm -ivh perl-Crypt-SmbHash-0.12-1m.i686.rpm
# wget ftp://dist.momonga-linux.org/pub/momonga/2/i686/os/Momonga/RPMS/samba-3.0.14a-2m.i686.rpm
# rpm -ivh samba-3.0.14a-2m.i686.rpm

と入力してインストールする。
先にsambaパッケージをインストールしようとすると、以下のようなエラーが発生するので注意が必要だ。

warning: samba-3.0.14a-2m.i686.rpm: V3 DSA signature: NOKEY, key ID 5f3bb21e
error: Failed dependencies:
        perl(Crypt::SmbHash) is needed by samba-3.0.14a-2m

次に以下のコマンドを実行してsambaを起動する。

# /etc/rc.d/init.d/smb start
Starting SMB services:                                     [  OK  ]
Starting NMB services:                                     [  OK  ]

次に以下のコマンドを実行してsambaユーザを追加する。

# smbpasswd -a pochy9n
New SMB password:
Retype new SMB password:
Added user pochy9n.

ユーザ名とパスワードをWindowsのログオンユーザと同一にすれば、ホストからcoMomongaのファイルをアクセスするときに入力する手間を省くことができる。
次にcoMomongaの起動と同時にsambaを起動するために以下の操作を行う。

# cd /etc/rc.d/rc5.d
# mv K35smb S35smb

最後にホストでスタートメニュー →「ファイル名を指定して実行」を選択し、「explorer \\comomonga」と入力して問題が無いことを確認する。

ホストにActivePerlをインストールする

以下のActiveStateのサイトからActivePerlをダウンロードしてインストールする。

http://www.activestate.com/Products/Download/Download.plex?id=ActivePerl

Windows版はAS package(ZIP)とMSIパッケージが存在するが、MSIパッケージを選択した方が無難だと思う。
ダウンロードが完了したら、MSIファイルをエクスプローラでダブルクリックして実行し、手順通りにインストールを行えば良い。

perlスクリプトXmingを実行する

テキストエディタで以下の内容をcoMomongaX.batとして作成する。

@rem = '--*-Perl-*--
@echo off
if "%OS%" == "Windows_NT" goto WinNT
perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
:WinNT
perl -x -S %0 %*
if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
if %errorlevel% == 9009 echo You do not have Perl in your PATH.
if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
goto endofperl
@rem ';
#!perl
#line 15

use strict;

# coMomongaのIPアドレスを取得する

my $name = "comomonga";
my $ping = `ping -n 1 $name`;
my $ipaddr = "";
my $line;
foreach $line (split(/\n/o, $ping)) {
    if ($line =~ /^Pinging .*? \[(.*?)\]/o) {
        $ipaddr = $1;
        last;
    }
}
if (!$ipaddr) {
    die "$name not found\n";
}

# TAP-Win32 AdapterのIPアドレスを取得する

my $adapter = "TAP-Win32 Adapter";
my $ipconfig = `ipconfig`;
my $adaddr = "";
my $flag = 0;
foreach $line (split(/\n/o, $ipconfig)) {
    if ($line =~ /^Ethernet adapter /o) {
        if ($flag) {
            last;
        }
        if ($line =~ /$adapter/) {
            $flag = 1;
        }
    } elsif ($line =~ /IP Address.*?: /o) {
        $adaddr = $';
        last;
    }
}
if (!$adaddr) {
    die "$adapter not found\n";
}

# routeの設定を追加する

system("route add $ipaddr mask 255.255.255.255 $adaddr");

# XLaunchの設定ファイルを作成する

my $fname = "$ENV{TEMP}/comomonga.xlaunch";

# ※以下のxlaunchの設定内容は2行である
my $xlaunch =<<__XLAUNCH__;
<?xml version="1.0"?>
<XLaunch WindowMode="Windowed" ClientMode="XDMCP" XDMCPHost="%s" XDMCPBroadcast="False" XDMCPIndirect="False" Display="0" Clipboard="True" ExtraParams="-xkbmodel jp106 -xkblayout jp"/>
__XLAUNCH__

open(FILE, ">$fname") or die "can't create $fname\n";
printf(FILE $xlaunch, $ipaddr);
close(FILE);

# Xmingを実行する

my $xming = "E:/Xming/Xming.exe";   # 適宜Xmingのインストール環境に合わせること

system("start \"$xming\" \"$fname\"");

__END__
:endofperl

作成したcoMomongaX.batを実行して動作を確認する。