64bit zlinux telepítése pc-re

Pár éve foglalkozom mainframe-el és néha szükségem van zlinux-ra emulált környezetben. Sose volt időm dokumentálni az installálás folyamatát és minden esetben újra ki kellett találnom, mit-hogy csináljak, legtöbbször a hálózattal akadtak problémáim. Ha valakinek van kedve, ideje, és nem utolsó sorban szüksége egy ilyen rendszerre, akkor talán ez a leírás segítségére lehet.

Pár adat mielött nekilátunk:


Host: Ubuntu 10.04 x64, Intel Q6600, 4 GBtye RAM, ip: 192.168.1.10, hálózat: 192.168.1.0
Guest: CentOS 4.7, platform s390x (64bit zlinux), 4 CPU, 1 GByte RAM, ip: 192.168.2.1
Emulátor: hercules mainframe emulátor

Azért döntöttem a CentOS mellett, mert tudomásom szerint ez az egyetlen olyan ingyenes rendszer amelyik s390x platform-ra elérhető.

Emulátor telepítés repo-ból

gabor@quad ~ $ sudo apt-get install hercules

vagy forrásból
hercules-3.07.tar.gz

hozzunk létre egy könyvtárat a rendszernek, ide kerülnek az emulált lemezek, konfig file-ok, log-ok, start image-ek, stb, szóval minden:

gabor@quad ~ $ mkdir zlinux
gabor@quad ~ $ cd zlinux
gabor@quad ~/zlinux $ 

készítsünk DASD lemezeket a dasdinit paranccsal:

gabor@quad ~/zlinux $ mkdir dasd
gabor@quad ~/zlinux $ cd dasd
gabor@quad ~/zlinux/dasd $ dasdinit -z -linux dasdboot.cckd 3390-2 dasdbo
gabor@quad ~/zlinux/dasd $ dasdinit -z -linux dasdswap.cckd 3390-2 dasdsw
gabor@quad ~/zlinux/dasd $ dasdinit -z -linux dasdroot.cckd 3390-27 dasdro
gabor@quad ~/zlinux/dasd $ dasdinit -z -linux dasdhome.cckd 3390-27 dasdho
gabor@quad ~/zlinux/dasd $ cd ..

ezek lesznek az emulált rendszer lemezei amelyek a host gépen zlib-el kompresszált formában vannak tárolva.

az install rendszer elindításához szükségünk van pár image-re amit egy centos mirror-ról letölthetünk, én a fraunhofer.de-t használtam:

gabor@quad ~/zlinux $ mkdir images
gabor@quad ~/zlinux $ cd images
gabor@quad ~/zlinux/image $ wget ftp://mirror.fraunhofer.de/centos.org/4.8/os/s390x/images/*
gabor@quad ~/zlinux/image $ cd ..

töltsük le az install rendszer betöltéséhez szükséges leíró file-t, ezzel tudjuk majd az első IPL-t (initial program load, magyarán boot) indítani:

gabor@quad ~/zlinux $ wget ftp://mirror.fraunhofer.de/centos.org/4.8/os/s390x/generic.ins

készítsük el az emulált rendszer konfigurációs file-ját, itt az enyém:

centos.conf:

CPUSERIAL 002623              # CPU serial number
CPUMODEL  3090                # CPU model number
MODEL     EMULATOR            # STSI returned model
PLANT     ZZ                  # STSI returned plant
MANUFACTURER HRC              # STSI returned manufacturer
LPARNAME  HERCULES            # DIAG 204 returned lparname
CPUVERID  FD                  # CPU Version Identification
MAINSIZE  1024                # Main storage size in megabytes
XPNDSIZE  0                   # Expanded storage size in megabytes
NUMCPU    4                   # Number of CPUs
ARCHMODE  Z/ARCH              # Architecture mode S/370, ESA/390 or z/Arch
ALRF      DISABLE             # ASN-and-LX-Reuse facility
ECPSVM    NO                  # VM Assist : NO or Level (20 recommended)
PGMPRDOS LICENSED

OSTAILOR  LINUX               # OS tailoring
SYSEPOCH  1900                # Base year for initial TOD clock

CODEPAGE  default             # CodePage conversion table
DIAG8CMD  enable              # OS may not issue commands via DIAG 8

PANRATE   FAST                # Panel refresh rate

0200.2	CTCI	192.168.2.1 192.168.2.2   # channel to channel adapter

0100	3390	dasd/dasdboot.cckd  # boot
0101	3390	dasd/dasdswap.cckd  # swap
0102	3390	dasd/dasdroot.cckd  # root
0103	3390	dasd/dasdhome.cckd  # home

pár adat az én guest rendszerremmel kapcsolatban:
- 1 Gbyte memória
- 4 emulált mainframe processzor
- 4 3390 dasd lemez. boot 2226 cyls, swap 2226 cyls, root 32760 cyls, home 32760 cyls (1 cylinder ~ 830 kb)
- 1 CTC hálókártya, amelynek pointopoint partnere egy a host rendszereben lévő virtuális TUN eszköz (/dev/net/tun0 az emuláció indításakor jön létre)

Ha a konfig file kész indítsuk el az emulációt:

gabor@quad ~/zlinux $ sudo hercules -f centos.conf > log.txt

Maga az emulátor egy konzolos alkalmazás, amelynek 2 felhasználói felülele van. Indításkor a konzol felület látható, amelyen az emulátor és a guest rendszer üzenetei jelennek meg illetve parancsokat adhatunk ki azok számára. A második felület a hardware-el kapcsolatos információkat jeleníti meg vizualizált formában. A két mód közt az ESC billentyűvel válthatunk.

konzol

egy másik terminálon leellenőrizhetjük, hogy létre jött-e a p2p eszköz a host rendszeren:
gabor@quad ~ $ ifconfig
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.2.2 P-t-P:192.168.2.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING MTU:1500 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:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

A hercules konzolon engedélyzzük az ip_forwarding-ot és a valós és virtuális hálókártya proxy_arp-t:

herc =====> sh echo "1" > /proc/sys/net/ipv4/ip_forwarding
herc =====> sh echo "1" > /proc/sys/net/ipv4/conf/eth0/proxy_arp
herc =====> sh echo "1" > /proc/sys/net/ipv4/conf/tun0/proxy_arp

(ezeket a beállításokat megadhatjuk permanensen az /etc/sysctl.conf file-ban is)

Itt az idő, hogy indítsuk az alap install rendszert ==> BOOT ( avagy IPL)

herc =====> ipl generic.ins 

a parancs hatására az emulátor a generic.ins file-ban leírtak alapján betölti a memóriába a kernel, initrd, stb image-ket és elindítja az első processzort és elindúl a boot folyamat. Itt az install rendszer átveszi az irányítást és életre kelti a rendelkezésre álló eszközöket stb. A hercules konzolon megjelenik minden linux konzolra érkező üzenet, nyomon lehet követni mi történik. Nálam ez a folyamat eléri 4 CPU-n a 200MIPS-et is, ami nem rossz annak fényében, hogy az igazi hardware (ősrégi IBM MP3000) amin fejlesztek ~50MIPS-et tud.


HHC00001I Linux version 2.6.9-78.EL (builder@c4s390x) (gcc version 3.4.6 20060404 (Red Hat
HHC00001I  3.4.6-10)) #1 SMP Mon Aug 4 00:28:36 EEST 2008
HHC00001I We are running native (64 bit mode)
HHC00001I Built 1 zonelists
HHC00001I Kernel command line: root=/dev/ram0 ro ip=off ramdisk_size=40000
HHC00001I
HHC00001I PID hash table entries: 4096 (order: 12, 131072 bytes)
HHC00001I Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes)
HHC00001I Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes)
HHC00001I Memory: 1014656k/1048576k available (2069k kernel code, 0k reserved, 978k data,
HHC00001I 116k init)
HHC00001I Security Scaffold v1.0.0 initialized
HHC00001I SELinux:  Initializing.
HHC00001I selinux_register_security:  Registering secondary module capability
HHC00001I Capability LSM initialized as secondary
HHC00001I Mount-cache hash table entries: 256 (order: 0, 4096 bytes)
HHC00001I Detected 4 CPU's
HHC00001I Boot cpu address  0
HHC00001I cpu 0 phys_idx=0 vers=00 ident=002623 machine=3090 unused=0000
HHC00001I cpu 1 phys_idx=1 vers=00 ident=102623 machine=3090 unused=0000
HHC00001I cpu 2 phys_idx=2 vers=00 ident=202623 machine=3090 unused=0000
HHC00001I cpu 3 phys_idx=3 vers=00 ident=302623 machine=3090 unused=0000
HHC00001I Brought up 4 CPUs
HHC00001I checking if image is initramfs...
HHC00001I it isn't (no cpio magic); looks like an initrd
HHC00001I Freeing initrd memory: 8195k freed
HHC00001I debug: Initialization complete
HHC00001I NET: Registered protocol family 16
HHC00001I cio: Was not able to determine available CHSCs.
HHC00001I appldata info: mem-ops registered
HHC00001I appldata info: os-ops registered
HHC00001I appldata info: net_sum-ops registered
HHC00001I audit: initializing netlink socket (disabled)
HHC00001I audit(1280694599.437:1): initialized
HHC00001I VFS: Disk quotas dquot_6.5.1
HHC00001I Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
HHC00006I SCLP console interface 'active'
HHC00001I Initializing Cryptographic API
HHC00001I ksign: Installing public key data
HHC00001I Loading keyring
HHC00001I - Added public key E081C76CEAC6F771
HHC00001I - User ID: CentOS (Kernel Module GPG key)
HHC00001I RAMDISK driver initialized: 16 RAM disks of 40000K size 1024 blocksize
HHC00001I md: md driver 0.90.0 MAX_MD_DEVS=256, MD_SB_DISKS=27
HHC00001I Channel measurement facility using basic format (autodetected)
HHC00001I NET: Registered protocol family 2
HHC00001I IP route cache hash table entries: 65536 (order: 7, 524288 bytes)
HHC00001I TCP established hash table entries: 131072 (order: 9, 3145728 bytes)
HHC00001I TCP bind hash table entries: 131072 (order: 9, 2097152 bytes)
HHC00001I TCP: Hash tables configured (established 131072 bind 131072)
HHC00001I Initializing IPsec netlink socket
HHC00001I NET: Registered protocol family 1
HHC00001I NET: Registered protocol family 17
HHC00001I md: Autodetecting RAID arrays.
HHC00001I md: autorun ...
HHC00001I md: ... autorun DONE.
HHC00001I RAMDISK: Compressed image found at block 0
HHC00001I VFS: Mounted root (ext2 filesystem) readonly.
HHC00001I Freeing unused kernel memory: 116k freed
HHC00001I Starting the zSeries initrd to configure networking. Version is 1.1
HHC00001I Which kind of network device do you intend to use
HHC00001I   (e.g. ctc, iucv, qeth, lcs).
HHC00001I Enter 'qeth' for OSA-Express Fast Ethernet, Gigabit Ethernet
HHC00001I   (including 1000Base-T), High Speed Token Ring, and ATM
HHC00001I   (running Ethernet LAN emulation) features in QDIO mode.
HHC00001I Enter 'lcs' for OSA  2 Ethernet/Token Ring, OSA-Express Fast Ethernet in
HHC00001I   non-QDIO mode, OSA-Express High Speed Token Ring in non-QDIO mode and
HHC00001I   Gigabit Ethernet in non-QDIO mode.

ezen a ponton elértünk az első kérdéhez amit meg kell válaszoljunk a zlinux számára. Ki kell választanunk milyen hálózati eszközt fogunk használni.

herc =====> .ctc

(amikor a guest rendszernek adunk üzenetet, akkor a “.” prefix-et kell használni, minden más parancs az emulátornak szól)

HHC00001I ctc
HHC00001I Enter the bus ID and the device number of your CCW devices.
HHC00001I CTC/ESCON and LCS need two subchannels:
HHC00001I (e.g. "0.0.0600,0.0.0601" will configure the CTC or ESCON interface
HHC00001I with the subchannels 0x600 and 0x601)
HHC00001I QETH needs three subchannels p.e. 0.0.0300,0.0.0301,0.0.0302

következő kérdés, melyik csatornacímen van a CTC hálókártya:
herc =====> .0.0.0200,0.0.0201


HHC00001I 0.0.0.200,0.0.0201
HHC00001I Enter the FQDN of your new Linux guest (e.g. s390.redhat.com): 

teljes domain nev, legyen centos.hoffer.hu

herc =====> .centos.hoffer.hu
HHC00001I centos.hoffer.hu

a guest ip címe:

HHC00001I Enter a valid IP address of your new Linux guest:
herc =====> .192.168.2.1
HHC00001I 192.168.2.1

hálózati cím:

HHC00001I Enter a valid network address of the new Linux guest:
herc =====> .192.168.2.0
HHC00001I 192.168.2.0

p2p partner ip címe, azaz a host linux-ban lévő TUN device ip címe:

HHC00001I Enter the IP of your CTC / ESCON / IUCV point-to-point partner:
herc =====> .192.168.2.2
HHC00001I 192.168.2.2

CTC eszköz típusa:

HHC00001I Select which protocol should be used for the CTC interface
HHC00001I 0 for compatibility with p.e. VM TCP service machine (default)
HHC00001I 1 for enhanced package checking for Linux peers
HHC00001I 3 for compatibility with OS/390 or z/OS peers
herc =====> .0
HHC00001I 0
HHC00001I CTC driver Version: 1.63  initialized
HHC00001I SIOCSIFADDR: No such device
HHC00001I SIOCSIFMTU: No such device
HHC00001I SIOCSIFDSTADDR: No such device
HHC00001I ping: sendto: Network is unreachable

adjunk meg egy elérhető DNS szerver címét:

HHC00001I Enter your DNS server(s), separated by colons (:):
herc =====> .192.168.1.1
HHC00001I 192.168.1.1

majd a DNS search domain-t:

HHC00001I Enter your DNS search domain(s) (if any), separated by colons (:):
herc =====> .hoffer.hu
HHC00001I hoffer.hu
HHC00001I ctc0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
HHC00001I -00
HHC00001I           inet addr:192.168.2.1  P-t-P:192.168.2.2  Mask:255.255.255.255
HHC00001I           UP POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
HHC00001I           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
HHC00001I           TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
HHC00001I           collisions:0 txqueuelen:100
HHC00001I           RX bytes:0 (0.0 B)  TX bytes:88 (88.0 B)
HHC00001I
HHC00001I lo        Link encap:Local Loopback
HHC00001I           inet addr:127.0.0.1  Mask:255.0.0.0
HHC00001I           UP LOOPBACK RUNNING  MTU:16436  Metric:1
HHC00001I           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
HHC00001I           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
HHC00001I           collisions:0 txqueuelen:0
HHC00001I           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
HHC00001I
HHC00001I Kernel IP routing table
HHC00001I Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
HHC00001I 192.168.2.2     0.0.0.0         255.255.255.255 UH    0      0        0 ctc0
HHC00001I 127.0.0.1       0.0.0.0         255.255.255.255 UH    0      0        0 lo
HHC00001I 0.0.0.0         192.168.2.2     0.0.0.0         UG    0      0        0 ctc0
HHC00001I

adjuk meg a virtuális DASD lemezek csatornacímét:

HHC00001I Enter DASD range (e.g. 200-203   or  200,201,202,203)
HHC00001I Press <Enter> for autoprobing (not recommended):
HHC00001I
herc =====> .100-103
HHC00001I 100-103
HHC00001I
HHC00001I Starting telnetd and sshd to allow login over the network.
HHC00001I
HHC00001I Connect now to 192.168.2.1 to start the installation.   

Ha minden kérdésre sikeresen válaszoltunk akkor elérkezett a telepítés arra a pontra, hogy be tudjunk jelentkezni a guest rendszerbe telnet vagy ssh klienssel és megkezdjük az installálást.

Megjegyzés: Az IPL-től kezdve nagyon sok interakció történik a zLinux rendszerrel, nagy az esély arra, hogy elgépel az ember valamit és nincs mód a javításra, kezdhetjuk az IPL-t előröl. A hercules-ben lehetőség van automatizált parancsvégrehajtásra, így előre megadhatjuk a válaszainkat az oprendszernek és mi csak akkor avatkozunk közbe ha már az IPL eljutott egy olyan pontra ahol nekünk kell tovább vinni a telepítést. Amikor az emuláció elindul a hercules megpróbálja végrehajtani a hercules.rc file-ban megadott parancsokat. Én ezt a parancsfile-om így néz ki:

hercules.rc:

pause 1
sh echo "1" > /proc/sys/net/ipv4/ip_forwarding
sh echo "1" > /proc/sys/net/ipv4/conf/eth0/proxy_arp
sh echo "1" > /proc/sys/net/ipv4/conf/tun0/proxy_arp
pause 1
ipl generic.ins
pause 50
.ctc
pause 5
.0.0.0200,0.0.0201
pause 5
.centos.hoffer.hu
pause 5
.192.168.2.1
pause 5
.192.168.2.0
pause 5
.192.168.2.2
pause 5
.0
pause 80
.192.168.1.1
pause 5
.hoffer.hu
pause 20
.100-103

Ez az én gépemen kb. olyan ütemben fog parancsot küldeni a konzolra, amikor megérkezik a kérdés. Erdemes játszani a pause paraméterekkel annak függvényében milyen gyors az adott host gép.

Indítsunk egy másik terminált és jelentkezzünk be:

gabor@quad ~ $ telnet 192.168.2.1
Trying 192.168.2.1...
Connected to 192.168.2.1.
Escape character is '^]'.
Welcome to the Red Hat Linux install environment 1.1 for zSeries
login: root

Ha mindent jól csináltunk, bejelentkezés után automatikusan elindul telepítő...

egy másik terminálban lekérdezhetünk pár rendszerinfót

folyt. köv.

Üdv,
Gábor

Hozzászólások

Hát erre csak azt lehet mondani, hogy nagyon derék dolog. Mehetne a wiki-be is.

"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."

püspökkirálycsászár vagy!
wikire vele!