今回は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のメッセージを追記しました。