在hercules上安装Ubuntu 18.04 s390x

在hercules上安装Ubuntu 18.04 s390x

由于在bytectf2019中有一道s390的逆向题目,需要搭建IBM s390的环境,网上还没有中文教程,故记录一下我的安装过程。

我参考的链接:

https://astr0baby.wordpress.com/2018/06/03/installing-ubuntu-18-04-server-s390x-in-hercules-mainframe-simulator/

http://www.josefsipek.net/docs/s390-linux/hercules-s390.html

目的

在macos上运行虚拟机Ubuntu 18.04,并在虚拟机中安装hercules模拟器,并在hercules中安装Ubuntu 18.04 s390x。s390x 是 IBM System z / zos系列 (zSeries)大型机 (mainframe) 硬件平台。

本地环境

物理机:

  • MacOS 10.14

  • Parallel Desktop 14

  • 可通过局域网访问的代理

虚拟机:

  • Ubuntu 18.04 64位
  • 4核
  • 16G内存

网络环境

虚拟机与物理机之间的网络环境为Parallel Desktop自动配置,采有nat。物理机上开启了通过局域网接入的代理。

ip
物理机 10.211.55.2
虚拟机 10.211.55.8 10.1.1.1
Ubuntu 18.04 s390x 10.1.1.2

开始

建一个工作目录

1
2
3
$ cd
$ mkdir zos
$ cd zos

安装Hercules 4.2

Hercules 4.2的github:https://github.com/SDL-Hercules-390/hyperion,之前的版本我尝试时出了各种各样的问题。

1
2
3
4
5
6
7
$ wget https://github.com/SDL-Hercules-390/hyperion/archive/Release_4.2.tar.gz
$ tar -xzvf Release_4.2.tar.gz
$ cd hyperion-Release_4.2
$ configure
$ make
$ sudo make install
$ cd ..

至此,如果没有报错的话,Hercules 4.2就已经安装好了。

准备Hercules 4.2虚拟机配置文件

1
2
3
$ mkdir ubuntu                                # Hercules 4.2虚拟机目录
$ dasd # 硬盘目录
$ cd dasd

接下来创建一块硬盘,

1
$ dasdinit -lfs -linux ubuntu.disk 3390-3 LIN120        # 这将创建一块2GB的硬盘

2GB对于ubuntu 来说是很小的,基本上在上面安装不了多少软件,可以使用以下命令常见更大的硬盘:

1
$ dasdinit -lfs -linux ubuntu.disk 3390-3 LIN120 8000        # 这将创建一块6.8GB的硬盘

如果你不希望s390虚拟机硬盘占用太大空间,可以牺牲部分运行时的性能来压缩硬盘,你可以使用以下命令来节省部分空间:

1
$ dasdinit -z -lfs -linux ubuntu.disk 3390-3 LIN120            # 2GB

image-20190909001743522

接下来编辑虚拟机配置文件:

1
$ vim ubuntu.cnf

在里面粘贴以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
CPUMODEL  2086
MAINSIZE 6000
NUMCPU 4
MAXCPU 4
OSTAILOR LINUX
PANRATE SLOW
ARCHMODE z/Arch
ALRF ENABLE
DIAG8CMD ENABLE
ECPSVM YES
ARCHLVL ENABLE BIT44
ARCHLVL ENABLE BIT45
ARCHLVL ENABLE BIT37
ARCHLVL ENABLE BIT49



# Display Terminals

0700 3270
0701 3270


# dasd
0120 3390 ./dasd/ubuntu.disk

# tape
0581 3420

# network s390 realbox
0A00,0A01 CTCI -n /dev/net/tun -t 1500 10.1.1.2 10.1.1.1

image-20190909002225126

请注意这里配置了挂载的硬盘以及网络信息。具体的字段含义可以参考👆的第二篇文章

配置网络

请先查看自己电脑的网卡信息:

image-20190909002346028

如上图所示,我的出口网卡为enp0s5,对应下方第一条命令的网卡:(如果你的是eth0,iptables的命令中也需要更改为eth0)

1
2
3
4
5
6
$ su
# iptables -t nat -A POSTROUTING -o enp0s5 -s 10.1.1.0/24 -j MASQUERADE
# iptables -A FORWARD -s 10.1.1.0/24 -j ACCEPT
# iptables -A FORWARD -d 10.1.1.0/24 -j ACCEPT
# echo 1 > /proc/sys/net/ipv4/ip_forward
# echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp

准备Ubuntu 18.04 s390x镜像

在官网https://wiki.ubuntu.com/S390X下载,下载链接为:http://cdimage.ubuntu.com/releases/18.04/release/ubuntu-18.04.3-server-s390x.iso。

挂载镜像:

1
2
3
4
$ mkdir /tmp/zubuntu/
$ sudo mount -o loop /path/to/iso/ubuntu-18.04.2-server-s390x.iso /tmp/zubuntu/
$ ls /tmp/zubuntu/
boot boot-hwe doc md5sum.txt pool README.diskdefines ubuntu-hwe.ins ubuntu-ports boot.catalog dists install pics preseed ubuntu ubuntu.ins

系统开机

使用以下命令,用hercules加载配置文件ubuntu.cnf:

1
$ sudo hercules -f ubuntu.cnf

会出现如下画面:

image-20190909003307056

可以按option/alt+1查看硬件信息,如下:

image-20190909003346648

可以看到cpu都是停止状态,挂载的硬盘./dasd/ubuntu.disk,按下ESC可以返回

输入以下命令开始从镜像启动:

1
herc =====> ipl /tmp/zubuntu/ubuntu.ins

image-20190909003517388

回车,正常的话可以看到:

image-20190909003725950

寄存器在不断变化,cpu也处于忙碌状态

image-20190909003753888

大约30秒后会出现:

image-20190909003829794

输入

1
.1

image-20190909003920821

选择输入设备

1
.1

image-20190909003956451

选择输出设备

1
.2

image-20190909004010577

协议

1
.1

image-20190909004044706

自动配置网络,否

1
.2

image-20190909004121171

本机ip地址:

1
.10.1.1.2

image-20190909004155657

子网掩码:

1
.255.255.255.0

image-20190909010153230

网关

1
.10.1.1.1

image-20190909010216933

DNS服务器

1
.8.8.8.8

image-20190909010316971

Hostname

1
.ubuntu-framed

image-20190909010352061

Domain

1
.virtual

image-20190909010429879

ssh 密码,输入两次

1
.password

image-20190909010501376

1
.password

image-20190909010527097

配置成功,此时我们可以在另一个命令行通过ssh登陆,这个ssh密码仅用于安装系统。

1
$ ssh install@10.1.1.2

密码是刚才设置的“password”

安装系统

从刚才的ssh进入:

image-20190909013042929

image-20190909013706938

image-20190909013725327

image-20190909013751581

image-20190909013809415

image-20190909013822391

image-20190909014154814

进入漫长的下载环节…

如果出现bad mirror的错误,可以设置http代理服务器,比如像我物理机ip为10.211.50.2,物理机上运行着ClashX(一个基于v2ray的代理),其http代理端口为7890,则设置http代理:http://10.211.50.2:7890。

如果使用代理还是失败,请检查网络设置。方法为ssh上去或herc ===>进入,start shell,检查dns服务器,检查网络状况,检查虚拟机设置的iptables转发是否有效……

:hourglass_flowing_sand::hourglass::crescent_moon:……

image-20190909123800471

现在跟安装普通ubuntu差不多了,设置用户和密码

接下来的安装过程比较简单,参考:[https://wiki.ubuntu.com/S390X/Installation%20In%20LPAR](https://wiki.ubuntu.com/S390X/Installation In LPAR)

更加漫长的等待⌛️……

安装好后会提示你重启系统,

image-20190909223722177

接下来回到Hercules命令行,按下ESC进入硬件界面,依次按下”l”和”c”,再按下ESC返回,即可启动,

c代表从设备C 0120 3390 DASD ./dasd/ubuntu.disk [8000 cyls] IO[117155] 启动

image-20190909224015896

如果没有反应可以exit退出重新进入,再从硬盘启动

安装成功

ssh登陆

image-20190909230215978

后续:

  • 在s390上安装sshfs挂载远端文件夹,方便文件传输
  • 一点小问题:
  • 安装了proxychains,配置好socks5代理后,无法通过pwoxychains代理上网。只好为apt配置http代理。

参考资料

hercules 4.2:http://www.softdevlabs.com/hyperion.html

较老的一篇在hercules安装debian教程:http://www.josefsipek.net/docs/s390-linux/hercules-s390.html

繁琐的视频教程:https://www.youtube.com/watch?v=QTBNt32ERWE

在hercules安装ubuntu教程:https://astr0baby.wordpress.com/2018/06/03/installing-ubuntu-18-04-server-s390x-in-hercules-mainframe-simulator/

ubuntu s390下载链接:https://wiki.ubuntu.com/S390X

Ubuntu安装引导:[https://wiki.ubuntu.com/S390X/Installation%20In%20LPAR](https://wiki.ubuntu.com/S390X/Installation In LPAR)