2010年1月14日木曜日

メインフレームエミュレータでLinuxを動かす(6)

今回からCentOS v4.7 for s390のインストールを行うわけですが、以下注意点です。
  1. 途中でインストールを中止する場合はHerculesのコマンドライン(Herculesコンソールのカーソルが点滅しているところ)で"QUIT"と入力すると、Herculesが終了します。 
  2.  今回はCentOS v4.7のインストールに必要なRPMファイル等はインターネット上のリポジトリを利用します。母艦のLinuxは何らかの方法でインターネットにアクセス可能である必要があります(CentOS v4.7のDVDインストールイメージが利用可能な場合は、母艦のLinux上でFTPサーバーを動かして、CentOSインストーラーからアクセスさせるという方法もあります)。
 前置きが長くなりましたが、CentOS v4.7のインストールを開始したいと思います。インストールの際には、母艦上のLinuxで最低でもHerculesのコンソールを動かす端末とインストーラーに接続する端末(後述)の2つを立ち上げておく必要があります。 VNCや、GNU screenなどが便利です。

6. 母艦Linux上でのネットワーク関連の設定

Herculesが起動するとtun0というPoint-To-Pointネットワークデバイスが母艦のLinux上で使用可能になります。
# ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:192.168.200.2  P-t-P:192.168.200.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING  MTU:1500  Metric:1
          RX packets:78613 errors:0 dropped:0 overruns:0 frame:0
          TX packets:335202 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:4948166 (4.7 MiB)  TX bytes:446524718 (425.8 MiB) 
 
後々このデバイス経由でCentOSインストーラーにloginすることになるので、Point-to-PointネットワークのHercules側(192.168.200.1)にこのデバイス経由で正しく接続可能なようにstatic routeを設定しておきます。母艦のLinux上で以下のコマンドを実行します。
# route add 192.168.200.1 gw 192.168.200.2 
次に、母艦のLinuxをHercules側から見てインターネットに対してNATルーターのように動作させるために、母艦のLinux上で以下のコマンドを実行します(母艦のLinuxではeth0を使用してインターネットに接続しているものとしています)。
# echo "1" > /proc/sys/net/ipv4/ip_forward 
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.200.0/24 -j MASQUERADE

7. インストーラーの起動
HerculesのコンソールからCentOSインストーラーを起動します。Herculesのコマンドラインで、
IPL generic.ins
と入力してenterすると、下図のようにCentOSインストーラーが起動します。



インストールのステップは大きく2つの部分に分かれています。最初の部分は、CentOSインストーラーに基本的なHerculesの構成情報(DASD, CTCIのデバイスアドレスなど)を渡す部分、後の部分はおなじみのanacondaインストーラーによる部分です。
基本的にはインストーラーが聞いてくる質問に答えていけばいいのですが、(私が手順を知らないだけかもしれませんが)基本的に後戻りができません。途中で入力値を間違えると、いったんHerculesエミュレータ終了した後最初からやり直しということになります。

8. Anacondaが起動するまで
"IPL generic.ins"と入力した後、しばらくすると以下のような画面が表示され、インストーラーがユーザーからの入力待ちの状態で停止します。



ここでは、ユーザーはCentOSインストーラーに対して使用可能なネットワークアダプタの種類を伝える必要があります。今回はCTC(Channel To Channel link)を使用していますので、".ctc"と入力してenterします。 なお、".ctc"の最初のピリオドは省略できません。ピリオドを省略するとHerculesは「自身に対するコマンドが入力された」と認識してしまいます。

以下、各種ネットワーク関係のパラメータを、インストーラーに対して応答していきます。以下は今回使用したネットワーク関係のパラメータ(太字になっているものがHerculesに対する応答部分)です。ピリオドをつけるのを忘れずに!
Enter 'qeth' for OSA-Express Fast Ethernet, Gigabit Ethernet                             +
  (including 1000Base-T), High Speed Token Ring, and ATM
  (running Ethernet LAN emulation) features in QDIO mode.
Enter 'lcs' for OSA  2 Ethernet/Token Ring, OSA-Express Fast Ethernet in
  non-QDIO mode, OSA-Express High Speed Token Ring in non-QDIO mode and
  Gigabit Ethernet in non-QDIO mode.
.ctc
ctc
Enter the bus ID and the device number of your CCW devices.
CTC/ESCON and LCS need two subchannels:
(e.g. "0.0.0600,0.0.0601" will configure the CTC or ESCON interface
with the subchannels 0x600 and 0x601)
QETH needs three subchannels p.e. 0.0.0300,0.0.0301,0.0.0302
.0.0.0420,0.0.0421
0.0.0420,0.0.0421
Enter the FQDN of your new Linux guest (e.g. s390.redhat.com):
.localhost.localdomain
localhost.localdomain
Enter a valid IP address of your new Linux guest:
.192.168.200.1
192.168.200.1
Enter a valid network address of the new Linux guest:
.255.255.255.255
255.255.255.255
Enter the IP of your CTC / ESCON / IUCV point-to-point partner:
.192.168.200.2
192.168.200.2
Select which protocol should be used for the CTC interface
0 for compatibility with p.e. VM TCP service machine (default)
1 for enhanced package checking for Linux peers
3 for compatibility with OS/390 or z/OS peers
.0
0 

ネットワーク関係のパラメータを一通り入力すると、インストーラーがCTCデバイスを起動します(下図)。 少々見づらいですが、でHerculesのコマンドラインのすぐ上に、"ctc0: connected with remote side"と表示されています。この状態になると、母艦のLinuxからHercules(192.168.200.1)に対してpingが通るようになります。



最後に、DNSサーバーのIPアドレスおよびDASDのデバイスアドレスを入力します。 DASDのデバイスアドレスは今回は"120"です(hercules.cnfで設定したのと同じもの)。

Enter your DNS server(s), separated by colons (:):
.8.8.8.8
8.8.8.8
Enter your DNS search domain(s) (if any), separated by colons (:):
.

ctc0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
-00
          inet addr:192.168.200.1  P-t-P:192.168.200.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 B)  TX bytes:88 (88.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.200.2   0.0.0.0         255.255.255.255 UH    0      0        0 ctc0
127.0.0.1       0.0.0.0         255.255.255.255 UH    0      0        0 lo
0.0.0.0         192.168.200.2   0.0.0.0         UG    0      0        0 ctc0

Enter DASD range (e.g. 200-203   or  200,201,202,203)
Press  for autoprobing (not recommended):

.120
120

DASDのデバイスアドレスを応答してしばらくすると、CentOSインストーラーが、
Connect now to 192.168.200.1 to start the installation
というメッセージを表示します(下図)。このメッセージが表示された後、別の端末からCentOSインストーラーに対してssh/telnetでログインすると、インストールの第2部(大部分はx86 CentOSのインストールと同様)が始まります。




次回はインストールの続きです。

2010年1月11日月曜日

メインフレームエミュレータでLinuxを動かす(5)

さて、引き続きHerculesエミュレータを動作させるための設定です。

4. hercules.cnfの設定
HerculesエミュレータにエミュレートさせるCPUアーキテクチャ(S/370, S/390, z/Architectureなど)の種類、(エミュレータに割り当てる)メモリ容量、エミュレートするDASDやネットワークアダプタ等の各種デバイス等の構成情報は、hercules.cnf(名前は変更可能)というファイルに格納されます。Herculesのソースのルートディレクトリにhercules.cnfという名前の雛形がありますので、これに変更を加えます(ファイル名は変更しません)。 変更点はわずかで、
  1. Herculesエミュレータに割り当てるメモリのサイズを64MBから256MBに変更
  2. 今回は使用しないメインフレームデバイスを無効化
  3. 今回使用するデバイス、DASDとCTCI(ネットワークアダプタ、のようなもの)を追加
の3点のみです。使用しないデバイスはhercules.cnfファイルの該当デバイスの行頭に"#"を挿入することで、無効化することができます。 今回使用するhercules.cnfと雛形とのdiffをとったものは以下のようになりました(../hercules-3.06/hercules.cnfの方が雛形ファイルです)。
$ diff hercules.cnf ../hercules-3.06/hercules.cnf
27c27
<   MAINSIZE  256                 # Main storage size in megabytes
---
>   MAINSIZE  64                  # Main storage size in megabytes
98,102c98,102
< # 0009    3215-C  / noprompt
< # 000C    3505    ./util/zzsacard.bin
< # 000D    3525    punch00d.txt ascii
< # 000E    1403    print00e.txt crlf
< # 001F    3270
---
>   0009    3215-C  / noprompt
>   000C    3505    ./util/zzsacard.bin
>   000D    3525    punch00d.txt ascii
>   000E    1403    print00e.txt crlf
>   001F    3270
106,107c106
<   0120    3390    DASD01
<   0420.2  CTCI    192.168.200.1 192.168.200.2
---
> # 0120    3380    mvsv5r.120
CTCI(Point-to-Point)の両端のIPアドレスは、本家の"TCP/IP networking with Hercules"で使用されているものをそのまま使用しています。

5. CentOS v4.7 for s390インストールイメージの準備
CentOS v4.7 for s390のインストーラー(これもLinuxを使用しているわけですが)が格納されたインストールイメージをwww.centos.orgのミラーサイトからダウンロードします。インストールイメージは、以下の5つのファイルで構成されています。
  1. generic.ins
  2. generic.prm
  3. initrd.img
  4. initrd.size
  5. kernel.img
2010/01現在、"generic.ins"はhttp://ftp.riken.jp/Linux/centos/4.7/os/s390から、その他の4つのファイルはhttp://ftp.riken.jp/Linux/centos/4.7/os/s390/imagesからダウンロードできます。

これで、Herculesエミュレータ上でCentOS v4.7のインストーラーを起動するための部品はすべて揃いました。 今回は herculesユーザーのホームディレクトリに、一つディレクトリ(今回はcentos_v47_s390)を作って、そこにHerculesエミュレータおよびCentOSインストーラーの起動に必要なファイルを入れておくことにします。ディレクトリの中身は以下のようになりました(generic.prm, initrd.img, initrd.size, kernel.imgの4つは、サブディレクトリimages内に置きます)。

$ ls -lR
.:
total 2782456
-rw-r----- 1 hercules hercules 2846431232 Jan 11 03:08 DASD01
-rw-rw-r-- 1 hercules hercules        142 Jan  9 23:51 generic.ins
-rw-rw-r-- 1 hercules hercules       5669 Jan 11 03:09 hercules.cnf
drwxrwxr-x 2 hercules hercules       4096 Jan  9 23:53 images

./images:
total 10780
-rw-rw-r-- 1 hercules hercules      44 Jan  9 23:52 generic.prm
-rw-rw-r-- 1 hercules hercules 8227210 Jan  9 23:52 initrd.img
-rw-rw-r-- 1 hercules hercules       8 Jan  9 23:52 initrd.size
-rw-rw-r-- 1 hercules hercules 2784644 Jan  9 23:52 kernel.img

Herculesエミュレータを起動するには、このディレクトリにcdして、以下を実行します。
$ hercules -f hercules.cnf

Herculesエミュレータが起動すると以下の以下のような画面が表示されます。



また、トンネリングデバイス(/dev/net/tun), DASDが正しくHerculesエミュレータに認識されれば、上の画面の赤枠内のような表示が確認できます。


次回はいよいよCentOSのインストールを行います。

2010年1月9日土曜日

メインフレームエミュレータでLinuxを動かす(4)

(ネットワークインストールできんのかという話はありますが)なんとか見通しも立ってきたので、本格的な準備を行っていきたいと思います。

1. Herculesのインストールとユーザー作成
まずはメインフレームエミュレータであるHerculesを母艦となるLinuxにインストールします(Windowsを母艦にすることもできます)。今回は母艦のLinuxにはCentOS v5.4(i386)を使っています。
本家から、ソースをダウンロードして適当なディレクトリに展開したのち、
$./configure
$ make
$ su 
# make install
でインストール完了です。デフォルトでは/usr/local/binディレクトリ以下にバイナリがインストールされます。
インストールが完了したら、herculesエミュレータを動作させるユーザーを作成します。
# useradd -d /home/hercules hercules
な感じでいいと思いますが、今回は/home/herculesディレクトリ以下に2GB以上の巨大なファイル(DASDファイル)を少なくとも一つ置くつもりですので、/homeがあふれそうな場合は、別途適当なディレクトリをherculesユーザーのホームディレクトリにするのがよいと思います。

2.トンネリングの設定
基本的に本家の"TCP/IP networking with Hercules"に記述されていることを上から順に実行するだけです。
Hercules上で動作するLinuxと母艦Linuxの間でTCP/IPによる通信を行うために、トンネリングという機構を使用します。このためにheculesユーザー下で動作するherculesエミュレータ(ややこしい)が/dev/net/tunデバイスに対して読み書きができるように、このデバイスのパーミッションを変更します(以下ではherculesユーザーはherculesグループに所属するものとします)。
# chown root.hercules /dev/net/tun
# chmod 0660 /dev/net/tun
# ls -l /dev/net/tun
crw-rw---- 1 root hercules 10, 200  1月  7  2019 /dev/net/tun

次は、"hercifc"プログラムに対する設定です。
上記リンク先の文書によると、/usr/local/bin/hercifcに対してsetuid root パーミッションを与える必要があるとのことです。(本家の文書にもありますが)setuid root パーミッションが与えられたプログラムに対する制限なしのアクセスはセキュリティ上の問題を引き起こす可能性があるので、今回は、rootおよびherculesグループに所属するユーザー(含herculesユーザー)のみにアクセスを許すことにします。
# chgrp hercules /usr/local/bin/hercifc
# chmod 4750 /usr/local/bin/hercifc

最後にIPフォワーディングの設定です。すでに有効になっていない場合は、以下のコマンドで有効にします(この設定は電源OFFで消えてしまうので注意)
# echo "1" > /proc/sys/net/ipv4/ip_forward

3. メインフレーム(エミュレーション)デバイスの設定
Herculesでは、メインフレームに接続されるディスク(DASD - Direct Access Storage Device)をファイルでエミュレートします。とりあえず、今回は3390-3型と呼ばれる形式のDASDを1つ作ることにします。
$mkdir centos_v47_s390  
$ cd centos_v47_s390 
$ dasdinit -lfs DASD01 3390-3 DASD01
HHCDU044I Creating 3390 volume DASD01: 3339 cyls, 15 trks/cyl, 56832 bytes/track
HHCDU041I 3339 cylinders successfully written to file DASD01
HHCDI001I DASD initialization successfully completed.
$ ls -l DASD01
-rw-r----- 1 hercules hercules 2846431232 Jan 10 01:29 DASD01
これでおよそ 2.7GiB程度のファイルができます(圧縮されたイメージを作成することもできるようです。詳細は本家を参照してください)。"DASD01"というのは"VOLume SERial"、略して"VOLSER"とも呼ばれるもので、ディスクにつけた名前のようなものだと思っていただければよいと思います。コマンドで最初の"DASD01"がファイル名、次の"DASD01"がVOLSERですが、ファイル名からVOLSERを類推できたほうがよいと思うので、一致させておくか、ファイル名にVOLSERを含めるのがよいと思います。

長くなってきました。残りは次回。

2010年1月7日木曜日

メインフレームエミュレータでLinuxを動かす(3)

引き続き調べてみると、どうやらCentOS v4.7のs390(x)アーキテクチャ用のDVDイメージがなくてもインストールが行えるということが分かってきました。 x86用のLinuxでインストーラのみ格納されたCDイメージ等が配布されていることがありますが、同じようなものがCentOS v4.7のs390アーキテクチャ用に準備されているようです。


Herculesのコンソールからこれらのイメージに格納されているCentOSインストーラを起動できるようです。ラッキー!これでCentOS v4.7で先に進めそうです。 
DVDに格納されている各種のRPM等はないので、必然的にネットワークインストールとなるのですが、そうなるとHercules上で動作しているインストーラからweb上のCentOSのRPMリポジトリにアクセスできないといけないのですが、そんなのできるんでしょうか・・・ (続きます)

2010年1月6日水曜日

メインフレームエミュレータでLinuxを動かす(2)

CentOS v4.7をHercules上で動作させようと画策しているわけですが、s390(x)アーキテクチャのCD/DVDイメージを置いているミラーサイトは皆無で、結局torrentファイルしか見つかりませんでした。 仕方がないので、Bittorrentでダウンロードを開始したのですが、今度はseedが極端に少なく(当たり前か)、ダウンロード完了に1週間近くかかりそうです(なにしろ数KB/sしか出ない)。

とりあえずBittorrentでのCentOSのダウンロードは継続するとして、 このまま1週間何もしないのもナンですから、次善の策を考えてみました。 ちょっと調べたところ、CentOS以外に無料で(試用含む)使えそうなのは、以下の2つのようです。
  1. Debian (lenny)
  2. SuSE Enterprise Linux (zSeries用は120日間無料で試用できるらしい)
DebianはCentOSと違って、最新のバージョン(5.0.3, 2010/01時点)でもs390アーキテクチャは正式にサポートされているようなので、本来はCentOSでなく、こっちを選択すべきだったのかも知れませんが、何しろDebianはインストールもしたことがないので、ちょっと腰が引けてしまっていました。
SuSEの方は(ずいぶん前ですが)一度インストールしたことがあるので、 どちらかというとこっちの方が自分には向いていそうですが、試用期間が120日というのがねぇ・・・

よし、プランBはDebianでいくことにします。というか、このままだと先にDebianでトライすることになりそう・・・ (続きます)

2010年1月5日火曜日

メインフレームエミュレータでLinuxを動かす(1)

私の仕事はメインフレーム(IBM系)に少々関わっているのですが、世の中にはすごい人達がいるもので、IBM系メインフレームのエミュレータがあるのです。 Herculesというのがそれで、ここが本家です。CPUだけでなく周辺のデバイスも色々とサポートされているようです。
  エミュレータがあればその上でOSを動かしてみたくなるのが人情ですね。が、IBM製のOS(z/OSなど)は、ライセンス上の問題をクリアしないといけないのと、たとえクリアしたとしてもどうやって使えばいいのかもよく分からない(仕事はメインフレーム絡みなのですが、ユーザー側ではないので使い方はよく知らない)ので、どうしたものかと考えていたところ、「Linuxを動かしてみっか」と思いつきました。 

というわけで(どういうわけだ)、x86 Linux上でherculesを動かし、その上でメインフレームLinuxを動かしてみようという話です。 
ちょっと調べてみたところ、 CentOSが4.7あたりまでs390アーキテクチャをサポートしていたようなので、これで試してみたいと思います。 さて、どうなることやら・・・。

2010年1月4日月曜日

Blog始めました

某IT企業でプログラマをしているkatzkichiと申します。備忘録的なことを書いていきたいと思います。