2010年1月30日土曜日

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

今回は新しくDASDを追加し、ルートファイルシステム("/")の拡張を行いたいと思います。インストール時点でauto partitionを選択した結果、ルートファイルシステムはLogical Volume Manager (LVM)管理下のVolume Group(VG)に含まれる論理ボリューム(LV)であるLogVol00上にマウントされています。ここの情報を参考にルートファイルシステムを拡張したいと思いますが、このマニュアルではLVM管理下のファイルシステムの拡張については扱っていないので、若干追加の作業が必要です。

1. DASDファイルの追加
母艦Linux上で新たにDASDファイルを作ります。 今回は3390-1型のDASDを作ることにしました。VOLSERは"DASD02"です。
[hercules@ap01 centos_v47_s390]$ dasdinit -lfs DASD02 3390-1 DASD02
HHCDU044I Creating 3390 volume DASD02: 1113 cyls, 15 trks/cyl, 56832 bytes/track
HHCDU041I 1113 cylinders successfully written to file DASD02
HHCDI001I DASD initialization successfully completed.
2. hercules.cnfの編集
hercules.cnfにdevice 0121としてDASD02を足します。
[hercules@ap01 centos_v47_s390]$ vi hercules.cnf
# 0580    3420    ickdsf.ipl
  0120    3390    DASD01
  0121    3390    DASD02 
3. herculesの起動
herculesを起動します。herculesがDASD02を正しく認識していれば、下図のようにherculesコンソールで確認できます。

4. DASDをオンラインにする。
CentOS for s390にrootでログインし、以下のようにしてdevice番号0121のDASDをオンラインにします。今回の環境では、DASD02は/dev/dasdbとして認識されました。
[root@localhost]# cd /sys/bus/ccw/drivers/dasd-eckd/
[root@localhost dasd-eckd]# ls
0.0.0120  0.0.0121
[root@localhost dasd-eckd]# cd 0.0.0121
[root@localhost 0.0.0121]# ls
alias         cmb_enable  detach_state  discipline  online    uid       vendor
availability  cutype      devtype       erplog      readonly  use_diag
[root@localhost 0.0.0121]# cat online
0
[root@localhost 0.0.0121]# echo 1 > online
[root@localhost 0.0.0121]# ls -ltr
total 0
-r--r--r--  1 root root 4096 Jan 16 13:24 vendor
-rw-r--r--  1 root root 4096 Jan 16 13:24 use_diag
-r--r--r--  1 root root 4096 Jan 16 13:24 uid
-rw-r--r--  1 root root 4096 Jan 16 13:24 readonly
-rw-r--r--  1 root root 4096 Jan 16 13:24 erplog
-r--r--r--  1 root root 4096 Jan 16 13:24 discipline
-r--r--r--  1 root root 4096 Jan 16 13:24 devtype
-r--r--r--  1 root root 4096 Jan 16 13:24 cutype
-rw-r--r--  1 root root 4096 Jan 16 13:24 cmb_enable
-r--r--r--  1 root root 4096 Jan 16 13:24 availability
-r--r--r--  1 root root 4096 Jan 16 13:24 alias
-rw-r--r--  1 root root 4096 Jan 16 13:24 detach_state
-rw-r--r--  1 root root    0 Jan 16 13:24 online
lrwxrwxrwx  1 root root    0 Jan 16 13:24 block -> ../../../../block/dasdb
/dev/dasd以下に dasdbが追加されています。
[root@localhost ~]# ls -l /dev/dasd*
brw-rw----  1 root disk 94, 0 Jan 17 05:16 /dev/dasda
brw-rw----  1 root disk 94, 1 Jan 17 05:16 /dev/dasda1
brw-rw----  1 root disk 94, 2 Jan 17 05:16 /dev/dasda2
brw-rw----  1 root disk 94, 4 Jan 17 05:54 /dev/dasdb
/dev/dasd:
total 0
drwxr-xr-x  2 root root 100 Jan 17 05:16 0.0.0120
drwxr-xr-x  2 root root  60 Jan 17 05:54 0.0.0121
5. DASDをフォーマットし、パーティションを作成する。
DASD02を"dasdfmt"コマンドでフォーマットした後、"fdasd"コマンドでパーティションを作成します。今回は/dev/dasdb1の1パーティションのみ作成しました。
[root@localhost 0.0.0121]# dasdfmt -b 4096 -d cdl -f /dev/dasdb -l DASD02 -p -y

cyl  1113 of  1113 |##################################################| 100%

Finished formatting the device.
Rereading the partition table... ok
[root@localhost 0.0.0121]# fdasd /dev/dasdb
reading volume label: VOL1
reading vtoc        : ok

Command action
   m   print this menu
   p   print the partition table
   n   add a new partition
   d   delete a partition
   v   change volume serial
   t   change partition type
   r   re-create VTOC and delete all partitions
   u   re-create VTOC re-using existing partition sizes
   s   show mapping (partition number - data set name)
   q   quit without saving changes
   w   write table to disk and exit

Command (m for help): p

Disk /dev/dasdb:
    1113 cylinders,
      15 tracks per cylinder,
      12 blocks per track
    4096 bytes  per block
volume label: VOL1, volume identifier: DASD02
maximum partition number: 3

 ------------------------------- tracks -------------------------------
               Device      start      end   length   Id  System
                               2    16694    16693       unused

Command (m for help): n
First track (1 track = 48 KByte) ([2]-16694):
Using default value 2
Last track or +size[c|k|M] (2-[16694]):
Using default value 16694

Command (m for help): p

Disk /dev/dasdb:
    1113 cylinders,
      15 tracks per cylinder,
      12 blocks per track
    4096 bytes  per block
volume label: VOL1, volume identifier: DASD02
maximum partition number: 3

 ------------------------------- tracks -------------------------------
               Device      start      end   length   Id  System
          /dev/dasdb1          2    16694    16693    1  Linux native

Command (m for help): w
writing VTOC...
rereading partition table...
[root@localhost 0.0.0121]# 

6. PV (Physical Volume)の作成とVGの拡張
DASD上のパーティションをVGに所属させるためにPV化し、次に"VolGroup01" VGに所属させてVGを拡張します。
[root@localhost 0.0.0121]# pvcreate /dev/dasdb1 
  Physical volume "/dev/dasdb1" successfully created
[root@localhost 0.0.0121]# vgextend VolGroup01 /dev/dasdb1
  Volume group "VolGroup01" successfully extended
pvscanコマンドで/dev/dasdb1がVG VolGroup01の一部になったことが確認できます。
[root@localhost 0.0.0121]# pvscan 
  PV /dev/dasda2   VG VolGroup01   lvm2 [2.19 GB / 32.00 MB free]
  PV /dev/dasdb1   VG VolGroup01   lvm2 [768.00 MB / 768.00 MB free]
  Total: 2 [2.94 GB] / in use: 2 [2.94 GB] / in no VG: 0 [0   ]
7. LV の拡張とファイルシステムの拡張
ルートファイルシステムが載っているLV("LogVol00")を拡張し、その後ルートファイルシステムを新しいLVのサイズに合わせて拡張します。今回はdasda2の残り32MB+dasdb1の768MBあわせて800MB拡張することにします。
[root@localhost 0.0.0121]# lvextend -L +800MB /dev/VolGroup01/LogVol00
  Extending logical volume LogVol00 to 2.53 GB
  Logical volume LogVol00 successfully resized
pvscanを実行すると、すべてのPE (Physical Extent)を使い切ったことが分かります。
[root@localhost 0.0.0121]# pvscan 
  PV /dev/dasda2   VG VolGroup01   lvm2 [2.19 GB / 0    free]
  PV /dev/dasdb1   VG VolGroup01   lvm2 [768.00 MB / 0    free]
  Total: 2 [2.94 GB] / in use: 2 [2.94 GB] / in no VG: 0 [0   ]
ext2onlineで ルートファイルシステムを拡張します(注:最近のlinuxではresize2fsコマンドでext3ファイルシステムのオンライン拡張を行うようですが、CentOS v4.7 for s390に付属のresize2fsはマウントされているファイルシステムを拡張できないようです。)
[root@localhost 0.0.0121]# ext2online /dev/VolGroup01/LogVol00
ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b
dfコマンドでルートファイルシステムの使用状況を確認します。 拡張前は使用率86%だったので、無事ファイルシステムが拡張されたことが分かります。
[root@localhost 0.0.0121]# df -m
Filesystem           1M-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup01-LogVol00
                          2550      1456       966  61% /
/dev/dasda1                 97        16        77  17% /boot
none                       125         0       125   0% /dev/shm

8.次回の起動時のための準備
今回追加したDASDが次回の起動時も自動的に利用可能になるように準備します。まず、/etc/modprobe.confの"options dasd_mod dasd="の行に、",121"を追加します。
[root@localhost 0.0.0121]# cat /etc/modprobe.conf

alias ctc0 ctc
options dasd_mod dasd=120,121
alias scsi_hostadapter zfcp
次に/bootにあるinitrd.imgを再作成します。
[root@localhost 0.0.0121]# cd /boot
[root@localhost boot]# mv initrd-2.6.9-78.0.8.EL.img initrd-2.6.9-78.0.8.EL.img.org
[root@localhost boot]# mkinitrd -v initrd-2.6.9-78.0.8.EL.img 2.6.9-78.0.8.EL
Creating initramfs
Looking for deps of module scsi_mod
Looking for deps of module sd_mod        scsi_mod
Looking for deps of module scsi_mod
Looking for deps of module unknown
Looking for deps of module zfcp  qdio scsi_transport_fc scsi_mod
Looking for deps of module qdio
Looking for deps of module scsi_transport_fc     scsi_mod
Looking for deps of module scsi_mod
Looking for deps of module scsi_mod
...
...
Loading module zfcp
Loading module dm-mod
Loading module dasd_mod with options dasd=120,121
Loading module dasd_eckd_mod
Loading module dasd_fba_mod
Loading module jbd
Loading module ext3
Loading module dm-mirror
Loading module dm-zero
Loading module dm-snapshot
最後に"zipl -V"コマンドを実行します。
[root@localhost boot]# zipl -V
Using config file '/etc/zipl.conf'
Target device information
  Device..........................: 5e:00
  Partition.......................: 5e:01
  Device name.....................: dasda
  Device driver name..............: dasd
  DASD device number..............: 0120
  Type............................: disk partition
  Disk layout.....................: ECKD/compatible disk layout
  Geometry - heads................: 15
  Geometry - sectors..............: 12
  Geometry - cylinders............: 3339
  Geometry - start................: 24
  File system block size..........: 4096
  Physical block size.............: 4096
  Device size in physical blocks..: 25596
Building bootmap '/boot//bootmap'
Building menu 'rh-automatic-menu'
Adding #1: IPL section '2.6.9-78.0.8.EL' (default)
  kernel image......: /boot/vmlinuz-2.6.9-78.0.8.EL at 0x10000
  kernel parmline...: 'root=/dev/VolGroup01/LogVol00' at 0x1000
  initial ramdisk...: /boot/initrd-2.6.9-78.0.8.EL.img at 0x800000
Adding #2: IPL section 'linux'
  kernel image......: /boot/vmlinuz-2.6.9-78.EL at 0x10000
  kernel parmline...: 'root=/dev/VolGroup01/LogVol00' at 0x1000
  initial ramdisk...: /boot/initrd-2.6.9-78.EL.img at 0x800000
Preparing boot device: dasda (0120).
Preparing boot menu
  Interactive prompt......: enabled
  Menu timeout............: 15 seconds
  Default configuration...: '2.6.9-78.0.8.EL'
Syncing disks...
Done.

以上でルートファイルシステムの拡張は終了です。 問題なく起動できるか再起動してみるのがよいと思います。
次回は各種サーバを動かしてみたいと思います。

2010年1月26日火曜日

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

さて引き続きCentOS for s390をいじって行きたいと思います。インストールも無事終わりましたので、なにはともあれアップデートを行います。 アップデートを行う前に、DASDファイルのバックアップを取っておくのもよいです(万が一の時にすぐにインストールの直後の状態に戻せる)。
アップデート自体は、"yum -y update"を実行するのみです(以下は少し端折っています)。
 
[root@localhost ~]# yum -y update
Setting up Update Process
Setting up repositories
update                    100% |=========================|  951 B    00:00
base                      100% |=========================| 1.1 kB    00:00
addons                    100% |=========================|  951 B    00:00
extras                    100% |=========================|  951 B    00:00
Reading repository metadata in from local files
primary.xml.gz            100% |=========================|  93 kB    00:00
update    : ################################################## 256/256
primary.xml.gz            100% |=========================| 543 kB    00:35
base      : ################################################## 1437/1437
primary.xml.gz            100% |=========================|  194 B    00:00
primary.xml.gz            100% |=========================| 1.8 kB    00:00
extras    : ################################################## 4/4
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for util-linux to pack into transaction set.
...
...
---> Downloading header for bash to pack into transaction set.
bash-3.0-19.7.c4.1.s390.r 100% |=========================|  48 kB    00:00
---> Package bash.s390 0:3.0-19.7.c4.1 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 kernel                  s390       2.6.9-78.0.8.EL  update             17 M
 sos                     noarch     1.7-6.6.c4       base              102 k
     replacing  sysreport.noarch 1.3.15-8

Updating:
 Canna                   s390       3.7p3-9.c4       update            7.2 M
 Canna-libs              s390       3.7p3-9.c4       update            449 k
 ...
 vsftpd                  s390       2.0.1-7.c4       update            142 k

Transaction Summary
=============================================================================
Install      2 Package(s)
Update      54 Package(s)
Remove       0 Package(s)
Total download size: 85 M
Downloading Packages:
(1/56): util-linux-2.12a- 100% |=========================| 1.5 MB    00:03
...
(56/56): bash-3.0-19.7.c4 100% |=========================| 1.8 MB    00:10
warning: rpmts_HdrFromFdno: V3 DSA signature: NOKEY, key ID 443e1821
Public key for util-linux-2.12a-24.c4.s390.rpm is not installed
Retrieving GPG key from http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
Importing GPG key 0x443E1821 "CentOS-4 key "
Key imported successfully
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating  : setup                        ##################### [  1/111]
  ...
  ...
Complete!
アップデートが完了したら、再起動します。
# shutdown -h now
Herculesのコンソールで、HHCCP010Iメッセージが出たら、再度IPLします。
...
Shutting down interface ctc0:
   OK  !
Shutting down loopback interface:
   OK  !
Starting killall:
   OK  !
Sending all processes the TERM signal...

Sending all processes the KILL signal...
Saving random seed:
Turning off swap:

Turning off quotas:
Unmounting pipe file systems:

Unmounting file systems:

Halting system...
md: stopping all md devices.
md: md0 switched to read-only mode.
HHCCP042I SYSCONS interface inactive
Power down.
CPU0000: SIGP Stop and store status (09) CPU0000, PARM 00000000: CC 0
HHCCP010I CPU0000 store status completed.
Command ==> IPL 120
CentOS for s390が起動したらrootユーザーで再度loginします。
# ssh 192.168.200.1
[root@ap01 ~]# ssh 192.168.200.1
root@192.168.200.1's password:
Last login: Sat Jan 16 12:38:27 2010 from 192.168.200.2
今後の作業のために一般ユーザーを追加し、一旦ログアウトします。
[root@localhost ~]# useradd -d /home/hoge hoge
[root@localhost ~]# passwd hoge
Changing password for user hoge.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# exit
logout
先ほど追加した一般ユーザーで再度ログインします。
[hercules@ap01 ~]$ ssh -l hoge 192.168.200.1
hoge@192.168.200.1's password:
[hoge@localhost ~]$
次は、デフォルトで起動しているサービスのうち使わないものを停止したいと思います(エミュレータ上でCentOSを動作させているので、無駄なものは極力動かしたくないのです)
[hoge@localhost ~]$ su - 
Password: 
[root@localhost ~]# chkconfig --list
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
cups            0:off   1:off   2:on    3:on    4:on    5:on    6:off 
autofs          0:off   1:off   2:off   3:on    4:on    5:on    6:off
rpcgssd         0:off   1:off   2:off   3:on    4:on    5:on    6:off
messagebus      0:off   1:off   2:off   3:on    4:on    5:on    6:off
iiim            0:off   1:off   2:on    3:on    4:on    5:on    6:off
psacct          0:off   1:off   2:off   3:off   4:off   5:off   6:off
netdump         0:off   1:off   2:off   3:off   4:off   5:off   6:off
rawdevices      0:off   1:off   2:off   3:on    4:on    5:on    6:off
atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
tux             0:off   1:off   2:off   3:off   4:off   5:off   6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
readahead       0:off   1:off   2:off   3:off   4:off   5:on    6:off
auditd          0:off   1:off   2:off   3:off   4:off   5:off   6:off
dc_server       0:off   1:off   2:off   3:off   4:off   5:off   6:off
netplugd        0:off   1:off   2:off   3:off   4:off   5:off   6:off
haldaemon       0:off   1:off   2:off   3:on    4:on    5:on    6:off
ipmi            0:off   1:off   2:off   3:off   4:off   5:off   6:off
lvm2-monitor    0:off   1:on    2:on    3:on    4:on    5:on    6:off
kudzu           0:off   1:off   2:off   3:off   4:off   5:off   6:off
mdmpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
saslauthd       0:off   1:off   2:off   3:off   4:off   5:off   6:off
xfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off
sendmail        0:off   1:off   2:on    3:on    4:on    5:on    6:off
rhnsd           0:off   1:off   2:off   3:on    4:on    5:on    6:off
mdmonitor       0:off   1:off   2:on    3:on    4:on    5:on    6:off
rpcidmapd       0:off   1:off   2:off   3:on    4:on    5:on    6:off
ntpd            0:off   1:off   2:off   3:off   4:off   5:off   6:off
yum             0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
ypbind          0:off   1:off   2:off   3:off   4:off   5:off   6:off
dc_client       0:off   1:off   2:off   3:off   4:off   5:off   6:off
nfs             0:off   1:off   2:off   3:off   4:off   5:off   6:off
portmap         0:off   1:off   2:off   3:on    4:on    5:on    6:off
winbind         0:off   1:off   2:off   3:off   4:off   5:off   6:off
smb             0:off   1:off   2:off   3:off   4:off   5:off   6:off
FreeWnn         0:off   1:off   2:off   3:off   4:off   5:off   6:off
canna           0:off   1:off   2:on    3:on    4:on    5:on    6:off
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
netfs           0:off   1:off   2:off   3:on    4:on    5:on    6:off
anacron         0:off   1:off   2:on    3:on    4:on    5:on    6:off
nfslock         0:off   1:off   2:off   3:on    4:on    5:on    6:off
squid           0:off   1:off   2:off   3:off   4:off   5:off   6:off
nscd            0:off   1:off   2:off   3:off   4:off   5:off   6:off
rdisc           0:off   1:off   2:off   3:off   4:off   5:off   6:off
xinetd          0:off   1:off   2:off   3:on    4:on    5:on    6:off
readahead_early 0:off   1:off   2:off   3:off   4:off   5:on    6:off
syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off
cpuspeed        0:off   1:on    2:on    3:on    4:on    5:on    6:off
vsftpd          0:off   1:off   2:off   3:off   4:off   5:off   6:off
xinetd based services:
        rsync:  off
        klogin: off
        echo-udp:       off
        eklogin:        off
        gssftp: off
        echo:   off
        chargen-udp:    off
        kshell: off
        time-udp:       off
        chargen:        off
        daytime:        off
        cups-lpd:       off
        daytime-udp:    off
        krb5-telnet:    off
        time:   off

cups/sendmailはこのマシン上では動かしていてもしょうがない気がする(^^;)ので停止し、もう立ち上がらないようにします(ちなみにランレベルはrunlevelコマンドで確認できます)。
[root@localhost ~]# service cups stop
Stopping cups: [  OK  ]
[root@localhost ~]# service sendmail stop
Shutting down sm-client: [  OK  ]
Shutting down sendmail: [  OK  ]
[root@localhost ~]# chkconfig cups off
[root@localhost ~]# chkconfig sendmail 

次回は、(前回も書きましたが)DASDの追加について書きたいと思います。

2010年1月20日水曜日

Fedora11 on s390x

Fedora Projectでもs390xアーキテクチャの検討をしているようです。 Preview版のようですがFedora11インストール済みのHercules用DASDイメージもあるみたいです。 

2010年1月17日日曜日

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

前回の続きです。


9. AnacondaでのCentOS v4.7 インストール
Hercules上で動作しているCentOSインストーラーにsshでログインします(rootユーザーでパスワードはありません)。
[root@ap01 ~]# ssh 192.168.200.1
The authenticity of host '192.168.200.1 (192.168.200.1)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.200.1' (RSA) to the list of known hosts.
Welcome to the Red Hat Linux install environment 1.1 for S/390
"Welcome to the Red Hat Linux install environment 1.1 for S/390"のメッセージの後しばらく待つと、インストールの間に使用したい言語を選択する画面(下図)表示されます。
"Japanese"も選択肢にありますが、選んでも「インストーラーは日本語をサポートしていません」的なメッセージが出てしまうので、大方の人は"English"を選択することになると思います。

インストール時に使用する言語を選択すると、"Install method"を選択する画面に移ります。今回は"HTTP"を選択します。
 

HTTPインストールに使用するリポジトリのサーバー名とパス名を入力します。今回は、理研のサーバー(サーバー名に"riken.ftp.jp", パス名に"/Linux/centos/4.7/os/s390")を使用させていただくことにしました(下図)。
 

"OK"を押すと、以下のような画面が表示され、リポジトリから"stage2.img"を取得しているのが分かります。 もし、「サーバーにアクセスできない」というようなメッセージが表示される場合は、前回までに設定した、IPフォワーディング/マスカレード、DNS関係の設定が正しいか確認します。


その後「Xを起動できなかった」というメッセージが表示されます(下図)。今回は "Use text mode"を選択します。

この後、"Welcome To CentOS 4.7!"と表示されるので"OK"を押下して先に進むと、"Installation Type"を選択する画面に移ります。今回は"Server"を選択します。

 次は、(s390/s390x独特の設定だと思うのですが)DASD関連の設定です。 まず、"FCP Devices"と表示された画面で"Add"を押下すると、以下のようにDASDの設定値を入力する画面がポップアップします。
正直どんな値を入力すればよく分からない(^^;)設定なのですが 、とりあえず"Device number"さえ合っていれば動きそうな感じ(実際動きました)なので、上の図のような感じで入力して"OK"を押下します。 
ポップアップ画面が消えた後、"OK"を押下すると、「パーティションテーブルが読めないからDASDを初期化するがいいか」とたずねてくる(下図)ので、"YES"を選択して、DASDを初期化します(初期化には数分かかると思います)。

 

初期化が終了すると、"Disk Partitioning Setup"という画面が表示されます(下図)。 x86のCentOS等と同様、パーティション/マウントポイント等を設定することができますが、今回は"Auto partition"を選択して、インストーラーに「おまかせ」することにします。

"Auto partition"で設定したパーティションレイアウトは以下のようになりました。LVMが使用されていますね。

DASD関係の設定の後は、ネットワーク関係の設定です。 まず、CTCの設定を行います。 入力すべきは "Point to Point (IP)"の欄だけです(その他の部分は入力済みのはずです)。 今回は"192.168.200.2"を入力します。

次はデフォルトゲートウェイおよびDNSサーバーの設定です。設定が正しければ、"OK"を押下して次に進みます。
 

この後しばらく、x86用のCentOSインストールでも行う設定が続きます。以下のような設定を行いました。
  • ホスト名(前回CentOSインストーラーに設定したものと同じ、"localhost")
  • ファイアウォールの設定(今回は"No firewall"としました)
  • SELinuxの設定(こちらも"Disabled"としました)
  • 各国語サポートの追加("日本語"を追加しました)
  • デフォルト言語の設定("English"としました)
  • タイムゾーンの設定("Asia/Tokyo"としました)
  • rootパスワードの設定
これらを設定し終えると、"Reading package information"というメッセージが表示され、数分(母艦Linuxのインターネット回線の速度や、母艦Linuxの性能にもよります)待たされます。Herculesのコンソール画面で"ESC"キーを押下すると、HerculesがエミュレーションしているCPUの各種レジスタやデバイス等の動作状況(下図)が表示されますので、Herculesが止まっていないか心配な(^^;)方は、この画面を見てみるのもよいかも知れません。

しばらくすると、以下のようなインストールパッケージの選択画面が表示されます。 今回は"Server"を選択していますので、X-window関係のパッケージはデフォルトでは選択されていません。基本的にデフォルトで選択されているものをそのままインストールすることにしましたが、"Printing Support"は外しました(パッケージサイズが結構大きいので)。

 

"OK"を押下すると、パッケージのインストールが始まります。これはかなり時間がかかる(例によって、回線スピードと母艦の性能による)と思いますので、気長に待ちます。

インストールが完了すると、以下のような画面が表示されます。

"Reboot"を押すと、CentOSインストーラーがシャットダウンされ、インストーラーを動作させていたSSH端末も切断されます。Herculesコンソールは以下のようなメッセージを表示してコマンド入力待ち状態となります。


ここでHerculesのコマンドラインから、"IPL 120"と入力してEnterするとインストールが完了したばかりのCentOS v4.7 for s390が起動します。

10. CentOS v4.7 for s390の起動
CentOS v4.7 for s390が起動完了すると、Herculesコンソールは以下のようにログインプロンプトを表示します。

コンソールのコマンドラインを使用してログインすることも可能なのですが(CentOSに渡したい文字列の先頭にピリオドをつける)、非常に使いにくいので、インストール時に行ったように、母艦Linux上でもう一つ端末を立ち上げてSSHでHercules上のCentOSにログインするのがよいと思います。

早速ログインして、"uname -m"を実行してみると・・・。

# [root@localhost ~]# uname -m
s390
おー、ハードウェア名が"s390"になっている!(当たり前ですが、ちょっとうれしいですね)
続いて、Bogomips値を確認してみます。

[root@localhost ~]# dmesg | grep -i bogomips
Calibrating delay loop... 392.39 BogoMIPS (lpj=1961984)
むう、こんなものか・・・ 比較のため母艦の方も確認してみましょう。

[hercules@ap01 ~]$ dmesg | grep -i bogomips
Calibrating delay loop (skipped), value calculated using timer frequency.. 2281.82 BogoMIPS (lpj=1140913)
母艦Linuxのbogomips値に比べて、おおよそ1/5弱の値になっているようですね。ま、こんなものでしょうか。ちなみに、我が家には玄箱HGというNASボックスもあるのですが、そいつのBogomips値は173ぐらいですので、とりあえず玄箱HGよりは速い(!?)という事になりました。 さらにもう一つ付け加えると、実は母艦LinuxもWindows上のVirtual PCで動作しています。つまり、"CentOS(s390) on Hercules on CentOS(x86) on Virtual PC on Windows"という感じで動いています。

とりあえずインストール編は今回で終了です。 次回以降は、各種サーバーアプリケーションの立ち上げや、DASDの追加などについて書きたいと思います。

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と申します。備忘録的なことを書いていきたいと思います。