`addresses for your sysieme (which is what DHCP normally is used for). You can
`manually bind |P addresses to the physical interfaces and keep the same IP
`address each tima the server starts. DHCP would only be the easy way to
`configura the IP stack of each systam.
`
`You could even do dynamic IP addresses for your servers. This would be an
`option when combined with Dynamic Domain Name Service (DDNS)}. In that
`case, aach systam would register through DONS, for example, as the next
`system offering a particular service. Round-robin ONS would then cause the
`traffic to ba spread over multiple systems.
`
`10.4.5 When to apply the configuration changes
`
`There are at least two different ways to apply the changes to the copied disks for
`tha new Linux image,
`
`® Store a small script in the boot process to apply these changes thefirst time
`ihe cloned mage is axacuted, Instead of using a custom script with
`hardcoded values, you can write a qanaric script that obtains the IP address
`and hostname through some other mechanism. The hep command from the
`cpint package can be used to obtain the user ID of the virtual machine
`running the image.
`
`® Mount the file system into an existing running Linux image and run a script to
`apply the changes. This is a more flexible choice, because you can do
`different repair actlons thal may be necessary (like Installing additional
`packages). Unfortunately, it is currently difficult to access thefile system of a
`Linux image that is not running (also known as a “dead penguin’), or one that
`does not have a network connection.
`
`Which method will work best in your situation depends on various aspects of your
`installation (such as network topology, naming convention, etc).
`
`10.5 Sharing code among images
`
`The process outlined in 10.4, “Copying disks instead of doing a full install” on
`page 213 can simpley the install process, but it doas not yet axplort z/VM facilities
`for sharing resources, For those who are used to working with VM, it appears
`obvious that you want to share the common code between your Linux images.
`Fora “default insialf of SuSE, about 459: of the disk space is used for the /usr
`directory of the file system. Most packages have their binaries installed in ‘usr, so
`it seems obvious that this also should be shared.
`
`Chapter 70, Cloning Linuximages=227
`
`
`
`The Linux Standard Base (LSB) datines the file system hierarchy such that /usr
`can be shared among images (outside the 5/390 workd, over NFS),
`Unfortunately, it also defines thal application code should be installed in ‘opt,
`which makes sharing /usr lass attractive,
`
`Tha file sysiam can be split over two separate minidisks after installation, but it's
`much easier to let YaST do that job; during installation, you define one disk to
`hold the ‘usr diractory and YaST will copy all thosefiles to that minidisk. This
`process is apparenth $0 obvious that many people have built Linux images that
`had a RO link to a common minidisk holding the ‘usr subtree of the file system.
`This results in a significant reduction in disk space requiraments for running a
`large number of Linux images,
`
`However, as with many cheap solutions, this one also comes with a lew
`drawbacks.
`
`& Once a Linux image is using the sharéd /usr disk, fis no longer possible to
`make changes to the contents of the disk.
`
`In CMS, to share R/O minidisks, people have developed tnexs to deal with tha
`“ane writer - many readers”situation, but for Linux this doas not work because
`every Linux image will buffer parts of that disk in its buffer cache.
`
`» Portions of applications live outside the ‘usr directory, for example in /bin and
`‘shin. When those other portions are part of the private disk space of the
`Linux image,it will be difficult to maintain consistency when upgrading
`packages. This means there is no easy way to upgrade the sysiems
`alterward.
`
`» Many applications and users need to write into portions of ‘usrfor thelr
`function. An example of this is the package manager rpm that keapsits
`database (the software inventory) in ‘usr, as wall,
`
`® Many applications do not separate code and data (like WebSphere, writing
`the log file in the bin directory by default), which makes it very difficult to share
`oode.
`
`» The recent standards define /opt to hold packages that ara not part of the
`code systam, This would make sharing /usr less effective,
`
`We believe a realistic answer to this could be a new device driver as described in
`“Shadowed disk support’ on page 413, This code is not available yet.
`
`Despite thase drawbacks, this simple way of sharing the disk may be attractive
`for special situations (for example, “disposable penguins” only needed for a
`limited périod). lfan application has a specific requiramentto write in an
`otherwise F/O diractory, 4 private writable directory can be provided through a
`symlink to another part of the file system, or by “ovennounting® with another
`block device (via the loop driver, for example}.
`
`222
`
`Linux on JBM @server zSeries and S50: ISPYASP Solutions
`
`
`
`10.6 Breeding a colony of penguins
`
`Fora demonsiration of the cloning process, we had to use a configuration with
`usr on a separate F/O linked minidisk, despite the drawbacks illustrated iin 10.5,
`“Sharing code among images" on page 221. Trying the cloning process with
`private disk space for each cloned penguin would have been too expansive, both
`in disk space and in time to create the images.
`
`Unfortunately, YaST runs SuSEcontig after the first reboot, which tums out to
`write into the ‘usr diractory. This maans we need to finish tha install process
`completely before we have a file system thal can be copied and used by others.
`Since other installations may have similar restrictions, we decided to take a more
`generic approach and complete the install before copying the disks,
`
`The cloning process is demonstrated with each of the steps invoked by hand,
`This doas not mean the process could not ba automated, but i's probably easier
`to follow this way than with 4 single program that doasall.
`
`10.6.1 Images used in the cloning process
`
`The images used in the cloning process will have a few minidisks:
`
`07A0
`
`02A0
`O1A1
`
`owocD
`
`A 100-cylinder private disk to hold the rootfile system
`
`A/O link to the oniginal root file system for copying
`A 2000-cylindar disk linked R/O by all images
`
`AO link to a starter disk with initrd
`
`Each of the cloned images willhave an IUCY connection to 4 single common VM
`TCPIP stack.
`
`10.6.2 Create a patchfile for cloning
`
`We create a patch for the cloning process as described in “Using diff to find the
`changes’ on page 216, Doing this after finishing the install is not much different
`from deing it earlier in (he process.
`
`Obviously, diff will also find a lot of diffarancas in log tiles and other things that
`you do not want to énd up in the patch, so you can get those out of the process
`as soon as possible with, for example, a few grep commands before sorting the
`list of filanames.
`
`To create the two differant disks to compare, we copied the 0140 disk of the
`install system to a new minidisk and then ran YaST in the installation system to
`change the IP address and hostname.
`
`Chapter 10, Cloning Linuximagas
`
`22d
`
`
`
`Although tha chosen network setup resulted in identical gateway addrasses and
`default routes for ach of the cloned images, we decided to pul thal in the patch
`anyway to have a more generic patch.
`
`Example 10-10 Patoh generated for tha demo setuo
`
`--- afete/HOSTHAME
`++ bfeteHOSTHAME
`Ba =] +] GB
`
`Wed Aug
`Hed Aug
`
`8 02:54:04 2001
`§ 02:04:17 2001
`
`- tubs tr
`+hastname:
`--- afete/hosts Wed Aug
`++ bfeteshasts wed Aug
`ba 21,4 4214 a8
`ff022:2
`ff022:3
`
`ipvb-al l routers
`ipvé-al lhosts
`
`4 02:54:04 2001
`8 02:04:11" F001
`
`tuxdastr.hubé.itso. 1 Bm. can
`-192.184.6,254
`thastname: .hubé.1tso.ibm.com :hostnane:
`‘mip:
`== afete/rc.config
`Wed Aug
`8 02:54:02 2001
`++ bfetesrc config
`Hed Aug
`8 02:04:16 2001
`bY -132,7 +132,7 Ba
`
`tuxdns tr
`
`# IP Adresses
`4
`~ TPADOR_O-" 192, 1h. 234"
`+1PADOR_O=":myip:"
`IPADOR_1="*
`TPADOR 2=""
`
`TPADOR,3="*
`BH -151,7 +151,7 8
`# sample entry for ethernet:
`# TFOOWFIG"192. 164.41.2) broadcast 192. 160.81.6] netmask 255.255.2955 224"
`f
`=TFCOMF IGO="192.168.6.254 polmtopoimt 192. 168.6.1 mtu 1B up"
`+TFCOMFIG_O="smyip: polintopoint sqwips mba
`sganmtu: up"
`TFCOMFIG1=""
`TRCOMFIG¢=""
`TFCOMFTGJ=""
`Ba 2? 7 AAD? ae
`# fe.g. "rienann.suse.de" ar "huge, | iru. de")
`# don't forget
`ta also edit fetc/hosts for your system
`#
`
`~ POHDSTHANE="tus tr. hubb. itso, ba, com"
`+POHOSTHAME=":hastname: hubh.itso.7bm.can"
`
`# #
`
`Shall suskcontig maintain fete/resoly.cont (needed for OWS)
`--- afetc/raute.conf
`Tho Aug
`9 16:21:37 2001
`
`H+ bfete/rautescomf=Thu Aug 9 16:19:37 2001
`
`7
`
`2240Linux on JBM @server zSeries and S20: ISPYASP Solutions
`
`
`
`ba 34,4 4944 OB
`#192, 168,01
`# default
`192 .164.6,1
`«default
`+defaul £
`
`0.0.0.0
`192. 164.0.1
`0.0.4
`
`197, 66.6.1
`equip:
`
`255.255, 255, 255
`
`i ppp
`
`256.255.255.255
`
`Tueve
`
`The resulting patch is shown in Example 10-10. It tums out ta be vary small, It
`touches only four files in the systam (those marked with +++ characters). This
`patch was stored in the root directory of the installation system so that it would be
`available in each cloned image as well.
`
`Copy the root file system and IPL starter system
`The root file system is copied using tha COPYDISK program shown in
`Example 10-11. Exploiting the fact that this rootfile system is filled for 70%, this
`tumed out to be the fastest solution.
`
`Example 10-17 The COPYDISK program
`
`/* Copy a raserved disk to a formatted disk */
`signal on errar
`arg cuwl cuue .
`
`‘J!
`"ACCESS" cuul
`"PIPE COMMAND LISTFILE * * J | var infile'
`parse var Intilea fm .
`"ACCESS" cid 'K!
`queue '1';
`"RESERVE'
`"PIPE <"
`infile,
`l-* n',
`'|
`spec number 1.10 ri
`'! net verify Li-* x00",
`'k'
`'| fileupdate’ fn userid{)
`"PIPE mdiskblk number J) 1.2 | miskblk write K°
`retum re
`
`fm userid()
`
`'K'
`
`After the root file system is copied, the RAMdisk system is started,
`
`Example 10-12 Copying the rootfle systam and JPL with AAMalsk
`
`files on disk K(LAO). Oo you wish to
`
`copydisk gad lad
`DNSACC?T24] 240 replaces J (2A0)
`DNSACPAZ31 J
`(240) R/O
`DNSACCK241 LAO replaces K [140]
`DNSESVHOIR RESERVE will erase all
`continue? Enter 1
`(YES) or & {NO}.
`
`1 D
`
`MSRSW? 331 Reserving disk kK
`
`Chapter 10, Cloning Linuximagas
`
`225
`
`
`
`Ready; Te. SA/0.80 20243215
`ipl
`fed clear
`Linux yarsian 2.2.16 fraoteikretape.susede) [gec version 2.95.2 LUsg1d24
`(release)) #1 SMP Tue May 1 11:47:19 GMT 2001
`Command line fs: ro ramdisk_size=32766 root=/dev/ram0 ro
`
`Load the DASD driver and mountthe disks
`Now the DASO driver is baded and the new disks are mounted.
`
`Example 10-13 Acoesaing the oiake from fhe AAMoisk systen
`
`# insmod dasd dasd=1a0,1lal
`Using /Vib/medules/2.2.16/block/dasd.o
`dasd: initializing...
`daid:Registerad successfully ta major no 94
`dasdfeckd):ECKD discipline initializing
`dasd:Registered ECKD discipline successfully
`dasd(fbapsFBA discipline initializing
`dasd:Reqistered FRA discipline successfully
`dasd(eckd):0140 on seh Os 2390/0C(CU:d990/04) Cyl:100 Heads 15 Sec:224
`dasdfackd):0140 on sch Dd: TIG0/0C (CU: 3990/04): Configuration data read
`dasd: deve Oe01A0 on subchannel
`0 {ECKD)
`is fdev/dasda (94:0)
`dasd(eckd):O1A1 on sch Gs 3990/0C (CU: 3990/04) Cy1:1500 Heads15 Secs224
`dasd(eckd):01A1 on seh 9s 3990/00 (CU; 3990/04); Configuration data read
`dasd: devno De02Al on subchannel
`9 (ECKO) is fdevidasdhb (94:4)
`dasdrwaiting for responses...
`dasd(eckd): fdev{dasda [OLA0): capacity (4kB Bikes): 72000kKE at 48kE/trk
`dasda:(CM51)/TUXLAO: (MOSK) dasda dasdal
`dasd(eckd):/dev/dasdb (O1Al): capacity (4kB bikes}: LORQ000kB at 48kB/trk
`dasdb: (CM51)/TUXDAL: (MOSK) dasdb dasdbl
`dasd: initialization finished
`4 mount /dev/dasdal jot
`# mount.
`/dev/dasdbl jmat/usr -r
`
`Apply the patch to the copied file system
`The patch is applied to the copied file system by running the updclone.sh
`program. By running the program with chroot, it saes thefile systam mounted at
`‘mint asits root file system for the duration of the program,
`
`# chroot fot fupdelone.sh tux80000 197.166.8.2 1927.165.6.1 S158
`patching file ete,HOSTMAME
`patching file etc/hosts
`patching file ete/rc.config
`patching file ete/route, conf
`
`226
`
`Linux on JBM @server zSeries and S320: ISPYASP Solutions
`
`
`
`The updelone.sh script reads the ganenc patch and transforms that into a patch
`apecific for this image using Ihe host name and IP address specified, For a less
`afror-prone implementation, you should consider storing the host names and IP
`addresses ina table on that disk, That way, a grep could ba used to gat the
`arguments for the updelone.sh script.
`
`Example 10-14 The updciona.sh program fo apply fhe patoh
`
`a! bin/sh
`
`if | =z $4 J; then
`echo "Heed hostname [P-acdiress gateway-ip gateway-mtu"
`exit
`
`fi
`cat generic. diff
`| sed "s/:hostname:/$1/
`| sed “sfrmyips/$ef
`"4
`| sed "sfrqwips/$ay "4
`| sed "sfrqemtus ($4 "
`| patch -pl
`45
`
`\
`"4
`
`if you régistar the Linux images in ONS, you could aven consider getting the
`arguments lor updelone.sh from thal. The hep command could be used to get the
`user ID of the virtual machine. Given a practical naming convention, ns]ockup
`could get you the IP address of the Linux image and the gateway.
`
`Shut down the system
`The system shutdown should not only unrmaunt the file systems cleanly, but alsa
`laave network connections in a better state to be restarted when the image is
`rebooted. Unfortunately, the starter systam does nat load a disabled-wait PSW,
`but loops alter a shutdown, You get out of this using tha #CP command to do the
`IPL.
`
`Example 10-15 Shutting down the starter system
`
`# shutdown -h naw
`Syncing all buffers...
`Sending KILL signal
`to linuxre for shutdown, ..
`Sending all processes the TERM signal...
`Aug
`9 222052? suse exiting on signal 15
`Sending all processes the KILL signal...
`Syncing all buffers...
`Turning off swap...
`Inmnaunting file syitem...
`fdev/dasdbl unmounted
`fdev/dasdal unmounted
`fdewsram2 unmounted
`
`Chapter 10, Cloning Linuximagas=227
`
`
`
`IPL from the patched root file system
`With the patches applied, the Linux image can now be booted from the new disk.
`
`Example 10-1 JPL from the root file system alter the patch was annlied
`
`IPL 140 CLEAR
`Linux version #.2.16 {root@Tape.suse.del
`(release))
`#1 SMP Sun Nay 6 (6315:49 GT 2001
`Command Vine is: ro dascd20 00000041 cd, 0100, 0101 roote/dev/dasdbl noinitred
`jucw=$TCPIF
`
`face version 2.95.7 19991094
`
`he are running under V4
`This machine has an TEEE fpu
`Initial
`randisk at: Oe) (1677216 bytes}
`Detected device O10 on subchannel MM) - PIM = Fo, PAM = FO, PON = FF
`Detected device (008 on subchannel M01 - PIM = &), PAM = 40, POM = FF
`letected device W000 on subchannel Mile = PIM = Bl, PAM = a0, POM = FI
`
`10.7 Linux IPL from NSS
`
`A Named Saved System (N55) Is like a snapshot copy of part of the mamary of a
`Virtual machine. In addition to simulating the normal 5/390 IPL of a devica, VM
`can also [PL a virtual machine from a NSS. This is especially efficient for CMS,
`because the WSS for CMS ts defined such that large portions of it can be shared
`between virtual machines. This reduces the storage réquiraments for running a
`large number of CMS virtual machines.
`
`An NSS can have shared and non-shared pages. The $/390 architecture
`requiras all pages in a single 1 MB segment to be either shared or non-shared.
`The shared pages will be shared among all virtual machines that IPL the NSS.
`For the non-shared pages, each virtual machine will get its own copy, initialized
`from the NSS.
`
`10.7.1 Using an NSSwith just the kernel
`Uniortunately,the Linux for $390 kernel is not designed to be shared among
`images. The writable portions of the kemeal are mixed with the read-only portions,
`Whila the non-shared pages do not raduea overall mamory raquiramants, having
`memory initialized at startup should at least speed up the boot process.
`
`228
`
`Linux on JBM @server zSeries and S950: ISPYASP Solutions
`
`
`
`One of the complications with running the kernal from an NSS is that the kemel
`parameters (6.9. disk addresses forthe DASD driver) need to be tha samefor
`each Linux image using this NSS. Fortunately, VM allows us to tailor the virtual
`machine to fit on the addresses defined for tha kernal that was saved in tha NSS.
`
`Whila you can create tha NSS by IPL from the virtual reader, it is easier ta do
`when booting fram disk because silo gives you the information you need to
`define your NSS.
`
`Example 10-1? Output of silo to compute WSS adoresses
`
`'/beot/parnfile’...ak...
`original paraneterfile is:
`final parameterfile is: ‘/boot/parnfile.map'...ok...
`in O: offset: (592 count: Oc address: OxOi
`iv 1: offset: (59f count: 60 address: OxO)opei)
`ix 2: offset: M61 count: BO address: Oxolclbemp
`ix 3: offset: [69f count: %h address: O00) hem
`Ix 4: offset: (1609 count: O01 address: OxQO0aRID
`Bootnap is in black mo: OxO000140a
`
`When you run siloeto make a disk bootable, it displays the mamory addrass
`where the Kennel is going to be loaded. The addresses in Example 10-17 show
`that different portions of the kernel use the memory from 0 to 0x00182000, This
`means thatthe NSS should at least contain the pages 0-181? in exclusive write
`(EW) mode (and there is no reason to do more than that).
`
`To freeze the Linux image at the correct point during the IPL process, you can
`use the CP TRACE command. The current Linux for S990 kemel starts
`execution at address Ox070000, so the following TRACE command will cause the
`Linux image to stop at that point.
`
`When execution is stopped at that point, the TRACE command causes the
`segment to be saved and also ends the trace.
`
`Example 10-18 Defining the NSS and saving it
`
`DEFSYS SUSE 0-181 EW MINSIZE=404
`HOPASO4401 The Kaned Saved System (NSS) SUSE was successfully defined in fileid
`(G9,
`
`TRACE INST RANGE 100002 CH SAVESYS SIISE "TRACE END ALL
`[FL 160 CLEAR
`
`[PL
`Tracing active at
`2
`“= OOO BASR OOD
`HOPASS4401 Haned Saved System {N55} SUSE was successfully saved in fileid oo84,
`Trace ended
`
`* You can use the “Scientific® mode of the calculator in your MS Windows accessories to do the computations
`
`Chapter 10, Cloning Linuximagas
`
`229
`
`
`
`Aftartha NSS has been saved as shown in Example 10-18, the Linux images can
`boot this kernel with a simple IPL SUSE command.
`
`CPF IPL SUSE
`Linux version 2.2.18 (roat@vml inusé)
`SMP Thu Jul
`24 Wdedsa) EST 2001
`
`[geo version 2.95.2 1999] 00d
`
`Bacausa the NSS is defined as axclusive write (EW), the kernel pages are not
`shared by the Linux images and using the NSS dogs not reduce overall storage
`requirements as it doas with CMS. Work is in progress to change the layout of
`tha Kamel such that significant portions of the code can be shared,
`
`10.7.2 Using an NSS as a starter system
`
`To simplity the boot process, we packaged the kamel with the RANdisk mage in
`a single NSS thal was completely defined as EW. We compared an NSS with a
`compressed RAMdisk image to one with an uncompressed RAMdisk image,
`axpacting an impressive parnarmance boost when skipping ihe HAMdisk
`uncompress at each IPL. However, Table 10-2 shows that the opposite was true
`in our case.
`
`fable 10-2 Elapsed fime to boot fram WSS
`
`CongaNa a Uncompressed RAMdisk image
`
`A more detailed comparison of the two scenarios showed us that the CPU usage
`for an IPL from the compressed RAMdisK is indeed significantly higher (as
`axpected), but the 10 seconds of elapsed time missing in the case of ihe
`uncompressed RAMdisk tum out to be spooling IO for CP loading the pages of
`tha NSS in (one at a time).
`
`However, when a Linux image was already running from its non-shared copy of
`tha NSS,the next image could IPL from NSS in 3 seconds—this suggests that
`CP incorrectly considers all EW pages fram a NSS as if they were shared pages
`(where ilis sale to say EW is the most obvious indication of not sharing the
`page).
`
`For an NSS like CMS,this is not a significant issue since there are just afew EW
`pages in the segment. However, we can assumethat excessive use of an NSS
`with a lot of EW pages should be avoided,
`
`10.7.3 Picking up IPL parameters
`
`One of the probleme with an IPL from NSS ts that the kemel parameters are
`defined in the NSS and will be the same for each image that |PLs the NSS
`
`200
`
`Linux on JBM ileerver zSeries and Sod: ISP/ASP Solutions
`
`
`
`The CP IPL command im z/VM has a PARM option that allows the user to pass
`parameters to the system thal is being |PLed. Traditionally, this ig used by CMS
`to control some options in the IPL process (like bypass execution of the system
`profile). A logical extension of this is to usa that option to tailor the commana line
`parameters for Linux as well (for example, to specify what disks ta use).
`
`In ordar to éxperiment with this, a “quick and dirty” patch was written against the
`Linux kemel to pick up the argumentfrom the IPL command,
`
`Example 10-19 Patch fo pass |FL parameters to the Kemal
`
`--- boel inue-2.2.16/arch/st0/bootipleckd.=Mon Apr 30 1722241 2001
`+++ | inuxfarchs390/boot/ipleckd.5
`Wed Aug
`8 1B:20:17 2001
`Ba -41,6 +41,7 o8
`
`# Lets start naw...
`
`org Ox fp
`start: .globl start
`# gave the registers for later
`+
`sbn
`Sr SrL5 tied
`rl,LCSUBCHANNEL[0D # get IPL-subchannel
`from lowcare
`ark,Le_TPLDEY
`# keep it for reipl
`st
`=. Lrdedata
`stsch
`ba 112.7 #113,23 oe
`mc=e256, 43) odo(ard)
`Mc
`(me00(756,63) ,Ox1b0(Sr4)
`ive
`OMTOO(F56, 263) ,dx2B0(4r4)
`- Lrunkain:
`
`# We align here to (x02n)
`4 because that
`15 easy ta
`# remember for the trace
`
`# last instr when not M55
`# first instr fran WSs
`#¢ translate saved registers
`
`4 end af string?
`
`shopnas
`ie020x)
`
`Erg ,2rl5 mdfco
`erg arl4 tedyco
`MeofcO64,0),.ehcase
`ard era, .Latart
`
`OedOO(sr2) ded
`Srt,UfSr3)
`find
`Oef(Srd) dnd)
`edAO(6d 273) OKOfod
`(mdcOfsrd) ald
`art er4,.Litart
`
`+,Lrunkern:
`+
`j
`+
`org
`+ SToOnss:
`+
`In
`+
`ain
`+
`tr
`+
`In
`+. Pinel:
`‘
`cli
`+
`la
`+
`ine
`+
`mei
`+
`mec
`+
`mi
`+
`In
`+ motnss:
`ar? i
`é
`i
`ar? 12
`#
`él]
`&rlL Oxoiic{er?]
`#
`st
`Pd -296,7 +3134) 08
`slong OF40010, 000000004. Llodata
`Lrdecw:
`
`# put a blank instead af Oxf
`
`4 and a Ux00 in case all 64 used
`
`# store iplsubchannel
`
`to lowcore
`
`Chapter 10, Cloning Linuximages=231
`
`
`
`long 08640000), honoio00
`arg Oat)
`
`org Oxeld
`sPHCaSCE
`
`# FRCDIC to lowercase ASCII]
`
`table
`
`byte=m0nO] ONO 020x07 Oc Od? , Oc? F
`ehybe=007 Oe? O07 eB, O00 Oc Oe, OocOF
`ebyte=Qh) OK 2 cSOx? Oecd Ot, Ooch
`ehyte=(L009 0N07 el? Ox? Onc! ood, Oot
`sbyte=OmOFod? OKLt ot? 0x07 doded? onl
`cyte
`0007 de,OnO7 de? x07 00S 0006, Oot?
`chyte=OM07 007 0x16, 0x07 x07 0c07 0007, Ome
`ehyte=e070) O07 07 ed cS ed? OA
`ebyte=(20 O0FF OMS 084 O65 OcOd? , Doe
`ehyte=M87Ad O98 0028 Onde O28 2B, Ore
`byte=e2b 0082 ONES 89OBA Oc ea, Oot
`byte
`DBD UE M214deAcesSE, OA
`byte=Oe? 002 F ON07 008E O07 0007 Od? , OeBF
`-bybe=ee AS, ONO reed eS OKIE, Ona F
`ehyte=M07 090OKO oc? OF Oc a? Oe?
`hyke=Oe),60, 0n3A, 2d, OdeetoD, Ones
`byte
`=0? mh] nb hd, ObedhS 06, Ob?
`byte=(ee 0059, 00K OMAP 0x07 tod ond, OMF 1
`byte©00F8, 066A, ONGB 0080, ONGD OME OMF, Onrd
`byte
`O07] 007? OmAG OAT 0891 00007 0002, OT
`rhybe=OM EARPE, On 3 dard,tSere Oar? Ones
`ebybe 79 Onc OAD CABOe? Oochad? Ooch
`ehyte=MSE, 0690 OSD PA OM Oc Oe? OA
`byte=(AB On? OeB OSD 0x07 OcOd? , doh
`byte=ONT B,(hl Oni? 083, Oxi4 00S On66, Ooh?
`cbyte©068,089, ONOT 093,094 0095 ,0KA7, O07
`byte«©007 006A, 0x68, 0080, 0x60 OeGk ,OndF, Oxra
`byte=Om 1 OeF 2 ON07 0096 081 O97Ad, O08
`ehyte=QC 0eFR 0073 hdOS ere er? Ore
`ebyte 079nF, ORF Ol? 99 Olt Chol? , Ooo?
`ebyte QaUe Onde dd edddS eb, Oe
`byte
`00380099, 0007 0007 0094 O07 ond? , Ont?
`
`FFFPFRRRFFFRRRHRHERRRHReFHFHFPRRHHFHrHHHHHHHT
`
`fend of pre initialized data is here (CMarea follows
`# from hers we load 1k blocklist
`# end af function
`
`Note that the patch shown in Example 10-19 is nota production-strength
`solution, and it has not yet baen submitted to the IBM team in Boablingen who
`maintain the &'390-specific portions of the kernel source.
`
`2d2
`
`Linux on JBM @server zSeries and S950: ISPYASP Solutions
`
`
`
`Note: The IPL parameters are not restricted to the IPL from NSS. You can
`also use therm whenyou IPL trom disk. With a little morecodein lhekernel, It's
`
`_ possibleto makethe cadeoesSAVESYSostossaveefhis SE, as 5
`done for CMS. Ha
`
`The length of the parameters passed on the IPL command is restricted to 64
`characters. This may not be sufficient in many casas, so we wrote the code such
`that ihe parameters ara appended to whatever ig already in the Kamel (i.e. tha
`parameters in the parameterfile as it was used in silo).
`
`Tip: Additional parameters specified in thekemelcommand line (not uséd by
`“the kemelor devios drivers) end up as environment variables tothe boot
`scnpts.This can be used to pass options to the boot scripts (e.g. IP address).
`
`To exploit this patch, a trace should be set up to stop execution at Ox0200, at
`which pointthe SAVESYS command can ba issued, as shown in Example 10-20.
`
`Examme 10-20 Defining and saving the NSS
`
`CP OOEFSYS SUSE2]HA 0-18] El MINSIZE=40M PARMREGS=0-15
`The Wamed Saved System (N53) SUSEFI64 was successfully defined in fileid OLlO.
`TRACE T A fan.
`
`[PL
`SHOR ORCI
`
`[PL 1A CLEAR
`Tracing active at
`== DOM0ZI
`LN
`SAVESTS SUSEZ164
`Haned Saved System (N53) SUSEZ]44 was successfully saved in fileid O10,
`TRACE EMD ALL
`Trace anded
`
`O0OOF OI
`
`co?
`
`This is very similar to what is shown in 10.7.1, “Using an NSS with just the
`kernal" on page 228, except for the different address to fraeze the IPL.
`
`Exanle 10-27 Demonstrate ie modiied kernel conmfrand lire
`
`(gec version 2.95.2 [4d (release) ) #1
`
`TPL SUSEZDGA PARM TEST=EMAMPLE
`Linux version 2.2.16 (root@tux80000)
`SMP Wed Aug 1
`lhs2ls2? EST 2001
`Command line is:
`fo dasd=200 0LA0 LAL Ged rmoot=)cevidasds] aoinitrd
`test=exanple
`We are running under ‘WH
`This machine has an [EEE fpu
`Initial ramdisk at: CxO0OO00 [16777216 bytes}
`Detected device J1A0 on subchannel] GO00 - PLA = FO,
`Detected deviled D1Al on subehanne! G0] = PLA = FO,
`Detected deviled O00 en subchannel! O02 = PLA = BO,
`
`PAM = Fd, PON = FF
`PRM = Fo,
`POM = FF
`PRM = 80,
`POM = FF
`
`Chapter 10, Cloning Linuximagas 2d
`
`
`
`The IPL in Example 10-21 shows the test-example option added to the IPL
`command. This shows up again al the end of the command line echoed by the
`kernal.
`
`Note: Because CP walluppercasetha command when typedinonthe
`console, the patch was made to translate it to lowercase. This way we can
`specifythe options for Linux that need to be lowercase. This obviously causes
`_ problems whenyouwant tto da thingsiin.ineSaasit igrewi take
`: mote thinking and more coding. 73
`
`The currant implementation of tha DASD driver requiras all disks to ba specified
`ina single dasd= parameter. If we want to tailor the list of disks al each IPL, wa
`need to specify them all on the IPL command. When the dasd= parameter is
`specified more than once, the last one is used. This & useful because the patch
`allows us to override thelist of disks defined in the parameterfile.
`
`You can do more with this than override the dasd= parameter. Parameters that
`are not processed by the built-in driver during the boot process will ba made
`available as environment variables to the init process. This means you can pick
`up valuas in the boot scripts (@.g. to configure your IP address). If you need the
`values after tha init process has completed, you can take the contents of the
`oroe!cmdline pseude file to retrieve the parameters.
`
`2a4
`
`Linux on JBM ileerver zSeries and Sod: ISP/ASP Solutions
`
`
`
`
`
`Network infrastructure
`design
`
`This chapter uses the networking theory introduced in Chapter 4, “Networking a
`penguin colony” on page 73 to help you design your virtual networking
`environment.
`
`© Gopyriaht (Bi Garp, 2007
`
`205
`
`
`
`11.1 Virtual IP addressing
`
`In this section we describe how to set up our virtual IP address solution using the
`Linux dummy interface. In4.2.3, “Virtual |P addressing’ on page 79, wa introduce
`tha concept of virtual IP addressing using dummy, and this method becomes part
`of the solution presented in the remainder of this chapter.
`
`11.1.1 Sample configuration
`
`In our example scenario, we have a single Linux instance which uses private IP
`addressing on the CTC device to the router, but requires a public IP addrass for
`network connectivity.
`
`11.1.2 Compiling dummy.o
`if dummy interface support is not present in your kemel, you'll have to build it.
`Although this is not a major task, instructions on how to build a complete new
`kamal are beyond the scope of this book. Instead, you can refer to the Linux
`HOWTOs to find ona on kernal complication that deseribas the basics.
`
`In your kernal configuration fila, dummy support is controlled by the
`CONFIG_DUMMY variable. Make this value ¥ or
`to include dummy support.
`Figure 11-1 on page 237 shows amake menuconfig session al the 5/390
`Network davica support panel Hara, wa have selected to add tha dummy
`support as a module. We recommend that the dummy support be built as a
`module, as this provides the least intrusive way of adding the support to a
`running system.
`
`206
`
`Linux on JBM ileerver zSeries and Sod: ISP/ASP Solutions
`
`
`
`S33) feteork device cupport
`Arrow keys navigate the menu,
`“Enter? selects submenus -—-),
`Highlighted letters are hotkeys, Pressing <Y> includes, <N> excludes,
`“> modulerizes Feabures, Pras: (Esee(Eso> ta anit. <7) For Help,
`Legends [#] Built-in [
`J eweluded
`¢M> module
`< > module capable
`
`[8]MHturk device support
`=== S390 Hetwork devices
`TD TC device support
`[#) UCY device 3
`& (WH only?
`[4] thernet (10 or LOOMbIE)
`[#] oken Ring driver support
`
`«Help?
`
`SORE Exit
`
`Figura 17-1 Compiling dummy net driver support info kamel
`
`Once you have updated the kernel configuration, you can make just the network
`modula directory with the following command {issued from the root of the Linux
`source tree):
`
`nake modules SUBDIRSdrivers,net
`
`In our case, we received the following output from the compilation:
`
`# fake modules SUBDDRS=drivers/net
`make =-C drivers/net CFLAGS="=Wall =Wstrict-prototypes -(2
`-fomi t-frane-petriter -tho-strict-aliasing -D_SMP -pipe
`~fro-strangth-reduce -DMODULE" MAKING _NOOULES=1 modules
`make[1]: Entering directory */usr/sre/linus-2,2.16,$uSE/drivers/net'
`gcc =)KERNEL -D/usr/sre/linuxfinclude -Wall -Wstrict-prototypes -0?
`-fomit-frame-patnter -tno-strict-aliasing -D_SAP -pipe
`fro=strength=reduce -DMODULE
`=c =0 dummy.o dummy.c
`rin -f $TOPDIR modules (METMOOULES
`echo=dunmy.o => $TOPOIR/modules WET MODULES
`echo drivers/net/
`drivers/net/
`dunmy.o; do \
`im
`for i
`od STOPDIRmodules;
`In -3f
`..fdrivers/net/s$1 33 done
`make[l): Leaving directory ~“fusefsre/)inus-2.2. 16. 5uSf/drivers/net *
`
`Chapter 11. Network infrastructure dasion«=27
`
`
`
`Once the module has been built, tt must be copied to the /libimodulas tree so that
`tha Kernel utililies can find the module when required. Tha easiest way is to
`simply copy the module using the following command:
`
`# cp drivers/net/dumy.o /1ib/medules/2.2.16/net/
`
`This is obviously fora 2.2.16 kamel: you will naed to confirm the correct directory
`under lih'modules! for your system,
`
`Aitention: Usually the command rake modulesinstall is used to copy
`newly-compiledmodules into the right ‘Hb‘modulas directory, However, if‘you
`usedthe wake command shownabove andhave not previously bbuill @kernel
`and full modules in this source irae, do notusetha make modulesinstall
`_ commandto instalthenew module, Doingso would delete as of yourexisting
`, Moca. |
`:
`i
`:
`i
`:
`i
`:
`i
`eee
`ee
`ee
`ce ee i
`:
`ir
`:
`
`After copying the module, run the command depnod -a to recreate the module
`dependency file. Once this is complete, you can issue modprobe or insmod to
`install thea dummy module:
`
`insmod durmy
`#
`ising #libfnedules/?. 2.167net/dumny .a
`
`YoU are now ready to configure a dummy interface.
`
`11.1.3 Configuring dummy0
`In our éxamplé, our Linux instance has a CTC davice configured with an |P
`address of 192.168.11.1. We want to add a dummy interface with the IP address
`9.12.6.99, which is visible to outside ourneatwork, Tha following command will do
`this:
`
`£
`
`ifconfig dummy) 9.127.6.99 broadcast 9.126.990 nebrask 255.2595,.295,755 mtu 150e
`
`Now, we can ping our interlace to see that it is active:
`
`# ping 9.17.6.99
`PING 9.12.6.99 [9.12.6.99}): 56 data bytes
`64 bytes from 9.12.6.99:
`fomposeqe’l ttl-255 timer 10.469 om
`64 bytes from 9.12.6.99:
`ieomposeqel]
`ttl=255 time-5.903 ms
`--- 9,12.6.99 ping statistics ---
`2 packets Lransmilted, 2 packets received, O& packet
`round-trip mingavg’max = 5.903/6. 186/10.4649 om
`
`loss
`
`268=Linux on JBM @server zSeries and S950: ISPYASP Solutions
`
`
`
`Qur dummy interface is ready to receive traffic. To complete the configuration, ihe
`rest of tha network will have to be configured to direct traffic forthe virtual IP
`address to the correct Linux instance. In ourtest case, we onterad static routesin
`the intervening routers, This allowed us to connect to services from Windows
`machines on the network to our Linux instance using the virtual IP address; see
`Figure 11-2:
`
`PTTL ed Ce em etm eye ila
`
`The SuSE Website
`
`Welcometo SuSE, L