2010年3月9日火曜日

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

今回はFedora11/s390xを起動してyumを動作させる(ただしエラーで更新が失敗する^^;)ところまで書いてみたいと思います。今回はFedora11インストール済みのDASDイメージがすでに準備されているわけなので「すぐに動くだろう」と高をくくっていたら思ったより大変でした。
まずは、上のリンク先からDASDイメージ(f11-s390x.img), README, hercules.cnf, hercules.initをとってきて、母艦のLinuxの適当なディレクトリ(今回は、/home/hercules/fedora11_s390x)に置きます。
[hercules@ap01 fedora11_s390x]$ pwd
/home/hercules/fedora11_s390x
[hercules@ap01 fedora11_s390x]$ ls -l
合計 550516
-rw-rw-r-- 1 hercules hercules      1386  7月 16  2009 README
-rw-rw-r-- 1 hercules hercules 558951862  3月  3 13:00 f11-s390x.img
-rw-rw-r-- 1 hercules hercules      1707  3月  3 01:41 hercules.cnf
-rw-rw-r-- 1 hercules hercules       966 11月 20  2008 hercules.init
READMEを読むと、hercules.initスクリプトを実行すると、トンネリングデバイスなどの各種設定を行ってからherculesを起動してくれるようですが、今回はこのスクリプトを使わずにCentOSのときと同様に手動で各種設定を行ってみます。
まずトンネリングデバイスとIPフォワーディング、IPマスカレードの設定を行います。
[root@ap01 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@ap01 ~]# chown root.hercules /dev/net/tun
[root@ap01 ~]# chmod 660 /dev/net/tun
[root@ap01 ~]# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.200.0/24 -j MASQUERADE
次に、hercules.cnfを編集して、DASDイメージへのパスを正しく設定します。今回は、/home/hercules/fedora11_s390x/f11-s390x.imgとなります。 MAINSIZEとNUMCPUはそれぞれ、1024と4となっていますので、母艦の性能に合わせて適当に変えます。今回は控えめ(?)に512と1にしてみました。
hercules -f hercules.cnfでエミュレータを起動します。以下のようにz/Architectureモードで起動していることがわかります。

エミュレータが起動したら、"IPL 122"と入力してenterしてしばらく待つと、Fedora11が起動します(下図)。
 
この時点で母艦Linux上の別の端末からsshでログインできます。 rootユーザーのパスワードは、"fedora"です。 ログインして"uname -m"コマンドを実行してみると、アーキテクチャ名が"s390x"と表示されますね。
-bash-4.0# uname -m
s390x
bogomips値も見てみます。(どの程度参考になるかわかりませんが)CentOSの時よりはだいぶ大きな値が出てるっぽいです。
-bash-4.0# dmesg | grep -i bogo
Calibrating delay loop (skipped)... 1487.00 BogoMIPS preset
無事Fedora11も起動したので、早速"yum -y update"を実行してみたところ、以下のようなエラーが出てしまいパッケージの更新ができません。
(39/39): glibc-common-2.10.90-20.s390x.rpm                         | 6.0 MB     01:11
------------------------------------------------------------------------------------------
Total                                                      80 kB/s |  28 MB     05:57
Running rpm_check_debug
ERROR with rpm_check_debug vs depsolve:
Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in 
    yummain.user_main(sys.argv[1:], exit_code=True)
  File "/usr/share/yum-cli/yummain.py", line 305, in user_main
    errcode = main(args)
  File "/usr/share/yum-cli/yummain.py", line 257, in main
    return_code = base.doTransaction()
  File "/usr/share/yum-cli/cli.py", line 422, in doTransaction
    print to_utf8(msg)
  File "/usr/lib64/python2.6/codecs.py", line 351, in write
    data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 20: ordinal not in range(128)
Googleで同様の事例がないか調べてみると、どうもpythonのデフォルトの文字コードがUTF-8でなくASCIIとして認識されていることが問題だそうな。ということで先達に習って、"/usr/lib/python2.6/site-packages/"に以下の内容で、名前が"sitecustomize.py"というファイルを作って、再度実行してみました。
import sys
sys.setdefaultencoding("utf-8")
再度yumを実行してみると、"UnicodeDecodeError:..."のエラーは出なくなりましたが、今度は別のエラーが・・・(続きます)

2010/03/09 追記: UnicodeDecodeErrorのメッセージを追記しました。

0 件のコメント:

コメントを投稿