现在程序员行业挺抢手,Java, Python 等等程序语言各大公司都有很大的需求,当中有一个行业,其实比较容易忽略,就是银行的程序员。银行系统其实有各种程序员需要,无论 Java, Python, 还是 Cobol 都很需要人手的。可是刚毕业的宝宝们大多选 Java,Python 这些,Cobol 却没啥人问津,加上刚毕业学生其实也不知道如何学 Cobol。
开始之前先简单比较一下:主机程序员 跟 Java 程序员
主机程序员 | Java 程序員 | |
---|---|---|
流行程度 | 非常不流行 | 非常流行 |
行业 | 银行,大型保险公司,政府 | 各种公司都需要 |
工资 | 100+30% | 100% |
竞争 | 没啥人会,抢的人不多 | 大多人都会,很多人跟你抢 |
技术 | 基本 Cobol,JCL,DB2 | 除了基本Java,要求使用多种框架技术 e.g. Spring, MyBatis, Hibernate, Database |
前景 | 10-20年,只要系统没更换,平常比较稳定 |
比较长远 |
今天老程序员在这里分享一下,如何自己搭建一个学习主机开发的环境。
安装 z/OS 其实有很多选择
可以安装在虚拟器,也可以装在实体机器上
可以在 Windows 上安装,也可以在 Linux 上安装
z/OS 是操作系统,有不同版本,MVS -> OS380 -> OS390 -> z/OS
MVS 是开源可以免费取得的,一般公司使用的是 IBM z/OS 最新版本 z/OS V2R4
普通学习机用 z/OS V1R10 也足够
(如果是学习资金非常充足的,可以到 IBM 官网申请 zPDT 个人版学习系统,也是 Linux)
这里示范的是用实体机器 Ubuntu 系统,自行编译 hercules,再跑 z/OS V1R10
实体机器: Xeon E3 1240 V2 老 CPU + 32GB RAM + 120GB SSD + Ubuntu 20.04 LTS
实体机器 IP: 192.168.50.15
kazuya@ubuntu: ~
$ uname -a
Linux ubuntu 5.4.0-81-generic #91-Ubuntu SMP Thu Jul 15 19:09:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
kazuya@ubuntu: ~
$ ifconfig
eno1: flags=4163 mtu 1500
inet 192.168.50.15 netmask 255.255.255.0 broadcast 192.168.50.255
inet6 fe80::76d0:2bff:fe28:c17f prefixlen 64 scopeid 0x20
ether ***************** txqueuelen 1000 (Ethernet)
RX packets 310 bytes 39339 (39.3 KB)
RX errors 0 dropped 59 overruns 0 frame 0
TX packets 203 bytes 26107 (26.1 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xf7400000-f7420000
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 27 bytes 3059 (3.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 27 bytes 3059 (3.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
另外,还要自己定2个 IP 用来给 Ubuntu 和 z/OS 之间内部联系,可以随便选,按 Hercules 官网教学,定为
192.168.200.1 (这个给 z/OS 用)
192.168.200.2 (这个给 Ubuntu 用)
Ubuntu 要连去 z/OS,连 192.168.200.1 就可以
例如: 在 Ubuntu 里要连去 z/OS ftp
kazuya@ubuntu: ~
$ ftp 192.168.200.1
虽然 192.168.200.1/2 是内部联系,如果有另外一个机器,例如,另一台实体机器 Mac (IP 192.168.50.11),要连到 Ubuntu 内的 z/OS,也可以容易配置
下一步就是取得所需的 z/OS,这个自己发灰,下面是 z/OS V1R10 v1.10 版本
包括了 DB2, WAS, IMS, Java 等等,可以挺全面的学习
网上大多数是带副档名 e.g. .CCKD 有没有都是一样
这些劵,下了在 Linux 或 Windows 都是通用的
最底下的 hercules.cnf 是 Hercules 的配置档,是灵魂
而 UAPP01, USRG01, UTMP01 是自己建立的劵, 用来在 z/OS 放自己的东西
UAPP01 一会用来放 HFS 新版的 Java SDK J8.0
USRG01 放自己写的 Program, Script 等等
UTMP01 用来放暂存,例如解压档暂存
SYSCPK 是額外的編譯工具劵,例如學習 RPG 等等
可以用 hercules 自带的工具 dasdinit 来建立新的劵
例如:建立 USRG01 3390 是劵的格式带不同格式,3390 大概可以装 900MB 东西
dasdinit -a /home/kazuya/zos/USRG01 3390 USRG01
zzsacard.bin 是一个还原小工具,Hercules 里自带的,hercules.cnf 里面要配置,所以,复制出来,.cnf 统一指向本地目录
kazuya@ubuntu: ~/zos
$ pwd
/home/kazuya/zos
kazuya@ubuntu: ~/zos
$ ls -l | grep kazuya
-rwxrwxrwx 1 kazuya kazuya 529743872 Aug 22 22:08 SARES1
-rwxrwxrwx 1 kazuya kazuya 30970765 Aug 22 22:08 SYSCPK
-rwxrwxrwx 1 kazuya kazuya 226248596 Aug 22 22:08 ZACIC1
-rwxrwxrwx 1 kazuya kazuya 170905505 Aug 22 22:08 ZADB81
-rwxrwxrwx 1 kazuya kazuya 308625683 Aug 22 22:08 ZADB82
-rwxrwxrwx 1 kazuya kazuya 1111670784 Aug 22 22:08 ZADB83
-rwxrwxrwx 1 kazuya kazuya 1107853312 Aug 22 22:08 ZADB84
-rwxrwxrwx 1 kazuya kazuya 201001999 Aug 22 22:08 ZADB91
-rwxrwxrwx 1 kazuya kazuya 835317373 Aug 22 22:08 ZADB92
-rwxrwxrwx 1 kazuya kazuya 565875480 Aug 22 22:08 ZADIS1
-rwxrwxrwx 1 kazuya kazuya 459112448 Aug 22 22:08 ZADIS2
-rwxrwxrwx 1 kazuya kazuya 288735232 Aug 22 22:08 ZADIS3
-rwxrwxrwx 1 kazuya kazuya 801079296 Aug 22 22:08 ZADIS4
-rwxrwxrwx 1 kazuya kazuya 690978816 Aug 22 22:08 ZADIS5
-rwxrwxrwx 1 kazuya kazuya 933675008 Aug 22 22:08 ZADIS6
-rwxrwxrwx 1 kazuya kazuya 242821373 Aug 22 22:08 ZAIMS1
-rwxrwxrwx 1 kazuya kazuya 878364452 Aug 22 22:08 ZAPRD1
-rwxrwxrwx 1 kazuya kazuya 716280541 Aug 22 22:08 ZAPRD2
-rwxrwxrwx 1 kazuya kazuya 968475738 Aug 22 22:08 ZAPRD3
-rwxrwxrwx 1 kazuya kazuya 34307 Aug 22 22:08 ZAPRD4
-rwxrwxrwx 1 kazuya kazuya 564331245 Aug 22 22:08 ZARES1
-rwxrwxrwx 1 kazuya kazuya 403303341 Aug 22 22:08 ZARES2
-rwxrwxrwx 1 kazuya kazuya 94654623 Aug 22 22:08 ZASYS1
-rwxrwxrwx 1 kazuya kazuya 682986497 Aug 22 22:08 ZAUSS1
-rwxrwxrwx 1 kazuya kazuya 1296174118 Aug 22 22:08 ZAWAS1
-rwxrwxrwx 1 kazuya kazuya 1520287744 Aug 22 22:08 ZAWAS2
-rwxrwxrwx 1 kazuya kazuya 1691123712 Aug 22 22:08 ZAWAS3
-rwxrwxr-x 1 kazuya kazuya 2997 Aug 22 09:37 hercules.cnf
-rw-rw-r-- 1 kazuya kazuya 29520 Aug 21 21:47 zzsacard.bin
-rwxrwxrwx 1 kazuya kazuya 949663232 Aug 22 22:02 UAPP01
-rwxrwxrwx 1 kazuya kazuya 949663232 Aug 22 10:13 USRG01
-rwxrwxrwx 1 kazuya kazuya 949663232 Aug 22 22:02 UTMP01
Hercules 是一个模拟器,装了可以跑不同的 z/OS 操作系统,就像在 Windows 上要跑 Linux,可以装 VMWare Player, Virtual Box 或自带的 Windows Hyper-V。
目前 Hercules 带2个版本,官网的 Hercules 已经没更新了,不过还是可用的,最新是 3.13。
http://www.hercules-390.eu
建议使用由 SDL 维护的版本,名字叫 hyperion,SDL 全名叫 Software Development Laboratories 是一个叫 David 的人维护,SDL 也开发 GUI 版本 Windows 程序和 CTCI-Win (用来在 Windows 上主客联网的工具),SDL 的工具是收费的,但可以试用,而且是不限时,不限功能。
https://github.com/SDL-Hercules-390/hyperion
首先,git clone 把 hyperion 下载回来
kazuya@ubuntu: ~/tmp
$ pwd
/home/kazuya/tmp
kazuya@ubuntu: ~/tmp
$ git clone https://github.com/SDL-Hercules-390/hyperion.git
然后给 ubuntu apt update upgrade 和安装基本编译工具
sudo apt update
sudo apt upgrade
sudo apt install m4 make autoconf automake cmake flex build-essential regina-rexx libbz2-dev libregina3-dev zlib1g-dev unzip c3270 ncat libltdl-dev
然后切换到 hyperion 目录,先跑 bldlvlck 来检查一下系统编译需求是否满足,然后,再 make,-j8 可以根据实际机器 CPU core 核心数来设,这样编译快一点,例如 Xeon E3 1240 V2 是4核,支援超线程,所以,4x2,设为 8
cd /home/tmp/hyperion
./util/bldlvlck
./configure
make clean
make -j8
sudo make install
编译好了,建议 make install 把 hercules 安装到用户程序目录,像下面
这样运行 hercules 也不用输完整路径 /home/tmp/hyperion/hercules,直接 hercules 就可以
kazuya@ubuntu: /usr/local/bin
$ ls -ltr
total 24216
-rwxr-xr-x 1 root root 15347 Aug 21 21:32 voldsext.cmd
-rwxr-xr-x 1 root root 1376 Aug 21 21:32 dasdlist
-rwxr-xr-x 1 root root 627576 Aug 21 21:32 cckdcdsk
-rwxr-xr-x 1 root root 627128 Aug 21 21:32 cckdcomp
-rwxr-xr-x 1 root root 663696 Aug 21 21:32 cckddiag
-rwxr-xr-x 1 root root 627320 Aug 21 21:32 cckdswap
-rwxr-xr-x 1 root root 627608 Aug 21 21:32 cckdcdsk64
-rwxr-xr-x 1 root root 627160 Aug 21 21:32 cckdcomp64
-rwxr-xr-x 1 root root 664376 Aug 21 21:32 cckddiag64
-rwxr-xr-x 1 root root 627344 Aug 21 21:32 cckdswap64
-rwxr-xr-x 1 root root 658768 Aug 21 21:32 convto64
-rwxr-xr-x 1 root root 654704 Aug 21 21:32 cckdmap
-rwxr-xr-x 1 root root 650872 Aug 21 21:32 dasdcat
-rwxr-xr-x 1 root root 679056 Aug 21 21:32 dasdconv
-rwxr-xr-x 1 root root 675272 Aug 21 21:32 dasdcopy
-rwxr-xr-x 1 root root 630056 Aug 21 21:32 dasdinit
-rwxr-xr-x 1 root root 678472 Aug 21 21:32 dasdconv64
-rwxr-xr-x 1 root root 678352 Aug 21 21:32 dasdcopy64
-rwxr-xr-x 1 root root 630072 Aug 21 21:32 dasdinit64
-rwxr-xr-x 1 root root 642944 Aug 21 21:32 dasdisup
-rwxr-xr-x 1 root root 914056 Aug 21 21:32 dasdload
-rwxr-xr-x 1 root root 914064 Aug 21 21:32 dasdload64
-rwxr-xr-x 1 root root 669040 Aug 21 21:32 dasdls
-rwxr-xr-x 1 root root 637504 Aug 21 21:32 dasdpdsu
-rwxr-xr-x 1 root root 699008 Aug 21 21:32 dasdseq
-rwxr-xr-x 1 root root 625656 Aug 21 21:32 dasdser
-rwxr-xr-x 1 root root 621088 Aug 21 21:32 dmap2hrc
-rwxr-xr-x 1 root root 627176 Aug 21 21:32 hercules
-rwxr-xr-x 1 root root 647480 Aug 21 21:32 hetget
-rwxr-xr-x 1 root root 627640 Aug 21 21:32 hetinit
-rwxr-xr-x 1 root root 675928 Aug 21 21:32 hetmap
-rwxr-xr-x 1 root root 654136 Aug 21 21:32 hetupd
-rwxr-xr-x 1 root root 672040 Aug 21 21:32 maketape
-rwxr-xr-x 1 root root 712560 Aug 21 21:32 tapecopy
-rwxr-xr-x 1 root root 637256 Aug 21 21:32 tapemap
-rwxr-xr-x 1 root root 639744 Aug 21 21:32 tapesplt
-rwxr-xr-x 1 root root 805480 Aug 21 21:32 vmfplc2
-rwxr-xr-x 1 root root 622440 Aug 21 21:32 hercifc
-rwxr-xr-x 1 root root 624112 Aug 21 21:32 herclin
lrwxrwxrwx 1 root root 10 Aug 21 21:32 fba2cfba -> ./dasdcopy
lrwxrwxrwx 1 root root 10 Aug 21 21:32 ckd2cckd -> ./dasdcopy
lrwxrwxrwx 1 root root 10 Aug 21 21:32 cfba2fba -> ./dasdcopy
lrwxrwxrwx 1 root root 10 Aug 21 21:32 cckd2ckd -> ./dasdcopy
lrwxrwxrwx 1 root root 12 Aug 21 21:32 fba2cfba64 -> ./dasdcopy64
lrwxrwxrwx 1 root root 12 Aug 21 21:32 ckd2cckd64 -> ./dasdcopy64
lrwxrwxrwx 1 root root 12 Aug 21 21:32 cfba642fba -> ./dasdcopy64
lrwxrwxrwx 1 root root 12 Aug 21 21:32 cckd642ckd -> ./dasdcopy64
kazuya@ubuntu: /usr/local/bin
$
然后,修改一下 vi ~/.profile,把 /usr/loca/lib/hercules library 路径加上 LD_LIBRARY_PATH
这样运行 hercules,才可找到所需的 library
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/local/lib/hercules
#setleds -D +num
~
~
~
~
".profile" 30L, 901C
sudo ldconfig
z/OS 配置挺简单就是修改 hercules.cnf,下面以超线程8核为例子,/home/kazua/zos 改为自己机器的路径
#
# Hercules Emulator Control file...
#
# Description:
# MaxShutdownSecs: 15
# LoadUnit: 0A80
# RCFile:
# LogoFile:
# IgnoreParseErrors: 0
# HercGUI Version: 1.17.0.5541
#
# System parameters
ARCHLVL z/Arch
MAXCPU 8
ENGINES CP,CP,CP,CP,CP,CP,CP,CP
NUMCPU 8
AUTO_SCSI_MOUNT NO
CNSLPORT 3270
CONKPALV (3,1,10)
CODEPAGE default
CPUMODEL 3090
CPUSERIAL 012345
CPUVERID FD
DEVTMAX 8
DIAG8CMD ENABLE NOECHO
ECPSVM YES TRAP
HTTP PORT 80 NOAUTH
MODPATH /usr/local/lib/hercules
LEGACYSENSEID DISABLE
NETDEV /dev/net/tun
LOADPARM 0A95DCM1
#LOADPARM 0A82CS
LPARNUM 01
LPARNAME HERCULES
MAINSIZE 8192
MANUFACTURER HRC
MODEL EMULATOR "" "" ""
MOUNTED_TAPE_REINIT DISALLOW
OSTAILOR Z/OS
PANOPT FULLPATH
PANOPT RATE=500
PANOPT TITLE=z/OS
PGMPRDOS LICENSED
PLANT ZZ
SHCMDOPT DISABLE NODIAG8
SYSEPOCH 1900
TIMERINT 50
TRACEOPT TRADITIONAL
TZOFFSET +0800
XPNDSIZE 0
YROFFSET 0
# Card Readers
000C 3505 /home/kazuya/zos/zzsacard.bin
# Card Punches
000D 3525 /home/kazuya/zos/punch00d.txt ascii
# Line Printers
000E 1403 /home/kazuya/zos/print00e.txt crlf
# Console Printers
0009 3215-C / noprompt
# Display Terminals
0700.5 3270
# Disk Drives
0A80 3390 /home/kazuya/zos/ZARES1
0A81 3390 /home/kazuya/zos/ZARES2
0A82 3390 /home/kazuya/zos/SARES1
0A83 3390 /home/kazuya/zos/ZADB81
0A84 3390 /home/kazuya/zos/ZADB82
0A85 3390 /home/kazuya/zos/ZADB83
0A86 3390 /home/kazuya/zos/ZADB84
0A87 3390 /home/kazuya/zos/ZADB91
0A88 3390 /home/kazuya/zos/ZADB92
0A89 3390 /home/kazuya/zos/ZACIC1
0A8A 3390 /home/kazuya/zos/ZADIS1
0A8B 3390 /home/kazuya/zos/ZADIS2
0A8C 3390 /home/kazuya/zos/ZADIS3
0A8D 3390 /home/kazuya/zos/ZADIS4
0A8E 3390 /home/kazuya/zos/ZADIS5
0A8F 3390 /home/kazuya/zos/ZADIS6
0A90 3390 /home/kazuya/zos/ZAIMS1
0A91 3390 /home/kazuya/zos/ZAPRD1
0A92 3390 /home/kazuya/zos/ZAPRD2
0A93 3390 /home/kazuya/zos/ZAPRD3
0A94 3390 /home/kazuya/zos/ZAPRD4
0A95 3390 /home/kazuya/zos/ZASYS1
0A96 3390 /home/kazuya/zos/ZAUSS1
0A97 3390 /home/kazuya/zos/ZAWAS1
0A98 3390 /home/kazuya/zos/ZAWAS2
0A99 3390 /home/kazuya/zos/ZAWAS3
0A9A 3390 /home/kazuya/zos/USRG01
0A9B 3390 /home/kazuya/zos/SYSCPK
0A9C 3390 /home/kazuya/zos/UAPP01
0A9D 3390 /home/kazuya/zos/UTMP01
# Communication Devices
0E20.2 CTCI 192.168.200.1 192.168.200.2
z/OS 开机可以选择要起动的不同程序,在 LOADPARM 设置,下面 0A95DCM1,是指到 0A95,DCM1,冷起动包括 DB2, CICS, WAS,就是大部分学习要用到的东西,0A82CS 是最基本的起动,不起动 DB2, CICS, WAS 这些,LOADPARM 还有好多其他选择
LOADPARM 0A95DCM1
#LOADPARM 0A82CS
0A95 3390 /home/kazuya/zos/ZASYS1
主机起动叫 IPL initial program load,就是开始程序加载,就是开机
起动主要分2种 COLD START 和 WARM START,我比较喜用冷起动 COLD START,就是每次起动都初始化例如 log 等等
在现实环境,大多数不会 COLD START,WARM START 起动比较快多了
起飞!!
hercules 要建立层网络管导,要用 sudo 来起动,在 Windows 也是要用 Administrator 来起的,不然 CTCI-WIN 起不了
kazuya@ubuntu: ~
$ sudo hercules -f /home/kazuya/zos/hercules.cnf
在真正 IPL 前,先在 ubuntu 再开一个 tty session 用 c3270 连上去,用来作 主控制台
kazuya@ubuntu: ~
$ c3270 localhost 3270
然后输入 IPL A80
A80 是指到 0A80 ZRES01
第一次起动会提示初启化 在 主控制台 输入 R 00,I
R 是 REPLY 回复提示码 00,回复值 I
IXC404I SYSTEM(S) ACTIVE OR IPLING: P390
IXC420D REPLY I TO INITIALIZE SYSPLEX ADCDPL, OR R TO REINITIALIZE XCF
R 00,I
等一会起动就完成了
然后,ubuntu 再多开一个 tty session
kazuya@ubuntu: ~
$ c3270 localhost 3270
这里我们可以登陆 TSO 或 CICS
TSO 是 Time Sharing Option 就是一台机分享很多用使用,主机程序员就是用这个界面连到主机做日常开发,就像 Linux 用 ssh 或 putty 连一样
CICS 是 主机的 GUI 界面,用来接受用户输入输出,就像 网页 Browser 界面,或 C# GUI 程序
输入 l tso 然后按 Enter
输入 IBMUSER
系统自有一堆账号,平常用 IBMUSER 就可以
然后输入密码,预设 IBMUSER 或 SYS1
按 Enter
按 Enter 就可以去到 ISPF 互动界面,程序99%时间就是在这里编辑 Cobol 代码,操作主机等等
z/OS V1R10 网络配置修改 PROF1 配置档就可以
在 ISPF Command => =2 进入 Edit Entry Panel 编辑界面
然后输入 ADCD.Z110.TCPPARMS(PROF1)
ISPF 里可以用 F7 F8 往上下翻,在左边命令输入 i 可加行,d 可以删行
编辑完 在 Command => save 然后 F3 或 exit 可以退出
网络配置我们给 z/OS 定义个 CTCA 和 CTCI 设备
然后定义 z/OS 本机 IP HOME 192.168.200.1
网关指向 192.168.200.2 Ubuntu
然后,START CTCA 设备就可以
路由方面 在 ubuntu 加个 tun0 和 路由把去 192.168.200.1 z/OS 的包路由到 tun0
sudo ufw default allow routed
sudo ufw route allow in on tun0 out on wlo1
sudo ufw route allow in on wlo1 out on tun0
sudo sysctl -w net.ipv4.ip_forward=1
sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
**Remark: Network interface is wlo1 for wireless network
这样,网络就通了,可以 ftp,ssh,web 取存 z/OS
如果 ubuntu 开了 ufw 防火墙,要让下面通过
如果有第三台机器要存取 Ubuntu 内的 z/OS,例如上面说的 Mac (IP 192.168.50.11),防火墙也要让其通过
内网本机学习的新手,可以先关 ufw
kazuya@ubuntu: ~
$ netstat -in
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eno1 1500 24814 0 4003 0 14691 0 0 0 BMRU
lo 65536 3542 0 0 0 3542 0 0 0 LRU
tun0 1500 0 0 0 0 14 0 0 0 PRU
kazuya@ubuntu: ~
$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.50.1 0.0.0.0 UG 0 0 0 eno1
192.168.50.0 0.0.0.0 255.255.255.0 U 0 0 0 eno1
192.168.200.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
kazuya@ubuntu: ~
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
21/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
3270/tcp ALLOW Anywhere
Anywhere ALLOW 192.168.200.1
Anywhere ALLOW 192.168.50.11
22/tcp (v6) ALLOW Anywhere (v6)
21/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
3270/tcp (v6) ALLOW Anywhere (v6)
Anywhere on tun0 ALLOW FWD Anywhere on eno1
Anywhere on eno1 ALLOW FWD Anywhere on tun0
Anywhere (v6) on tun0 ALLOW FWD Anywhere (v6) on eno1
Anywhere (v6) on eno1 ALLOW FWD Anywhere (v6) on tun0
kazuya@ubuntu: ~
$
第三台机器 例如 Mac IP 192.168.50.11 要想连到 Ubuntu 里面的 z/OS
在 Mac 里加个路由,把 192.168.200.X 去路由去 192.168.50.15 Ubuntu 机器就可以
/Users/kazuya
$ sudo route -n add -net 192.168.200.0/24 192.168.50.15
$ netstat -rn |grep "192.168.200"
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 192.168.50.1 UGScg en0
...
192.168.200 192.168.50.15 UGSc en0
这样其他机器就可以连上 z/OS,例如下面 Mac 连上 z/OS ftp,其他 ssh, 和 web 也可以
vi ~/.ssh/config
Host 192.168.200.1
KexAlgorithms +diffie-hellman-group1-sha1
HostKeyAlgorithms +ssh-rsa
ssh [email protected]
z/OS 自带的 Java SDK 比较旧,可以到 IBM 官网下载最新版
SDK8_31bit_readme.txt 也要一并下载,里面有如何解压缩步骤
步骤是 先下到 Java J8.0 .PAX 压缩包
然后在 z/OS 加个新券,上面的 UAPP01 就是 HFS
HFS 在 z/OS 里改名为,例如 JVA800.HFS
然后,修改 USER.PARMLIB(BPXPRMDB)
从 ADCD.Z110.PARMLIB 里覆制到 USER.PARMLIB 修改
然后,挂上去,这样开机后,OMVS 就有 /usr/lpp/java 载点可放 Java SDK
UTMP01 HFS 也一并挂上去用来作解压缩暂存
然后,透过 ftp binary mode 上传
https://www.ibm.com/support/pages/java-sdk-products-zos
在生产环境 z/OS 是绝少关机,在学习环境,可以用以下步骤关机
关机指令要视乎开机 LOADPARM,开机起了什么,关机就要关上
首先,退出 ISPF IBMUSER TSO session 就是 按 F3 Exit 所有版面
回到 READY 提示,输入 logoff
然后,按 Ctrl+] 键退出返回 c3270 界面,再输入 exit 退出 c3270
然后,转入 c cicsa 关掉 CICS GUI 界面
然后,转入 -db9g stop db2 停了 DB2
然后,等 DB2 READY FOR START COMMAND,就可以输入 s shutall 来把其他服务例如 ftpd, sshd, httpd, mq 等等都停了
然后,回复 r 03,y, 回复 STOP ZFS
可以输入 D A,L 或按 F10 键更新画面
然后,输入 $p jes2,term 去把 JOB ENTRY SYSTEM 停了
然后,输入 f dlf,mode=drain
然后,输入 p dlf
最后,F10 等到只剩 00000,输入 z eod
最后,等到 HALT EOD SUCCESSFUL
然后,回到 hercules 界面
然后,回到 hercules 界面,在界面可以用 Esc 键互相切换 资源面页
然后,回到 hercules 命令界面,输入 exit 就可以