Some products and packages that run in Unix System Services provide .pax files you download and install. Often the instructions are not very clear.
The steps are usually:
- Download the .pax file to your work station
- Upload the file to z/OS ( usually Unix Services, but a sequential data set can be used.
- Optionally create a ZFS file system, or find space on an existing file system
- Unload the file
Download the .pax file to your work station
This is usually pretty simple – just make sure you are downloading the correct file. I spent a short while trying to get a .tar.gz file for Linux installed.
Upload the file to z/OS ( usually Unix Services, but a sequential data set can be used.
- Upload the file in binary
- I usually upload it into a zfs. This means you do not need to allocate space, and DCB information.
Optionally create a ZFS file system, (or find space on an existing file system)
This is where it starts to get harder – as there is less useful information. The first question is how much space do you need? Sometimes you get information in (mega) bytes, sometimes in number of 512 byte records, sometimes in number of 8KB blocks.
If you need to create a ZFS, you need to create a directory on the file system where you want the file system mounted, for example
mkdir /usr/lpp/java/J11.0.19.0_64
My pax file was in /tmp/ibm-semeru-certified-jdk_s390x_zos_11.0.19.0.pax.Z.
You can list the contents of the file using
pax -ppx -Evzf /tmp/ibm-semeru-certified-jdk_s390x_zos_11.0.19.0.pax.Z 1>aout 2>b
where aout has content like
drwxr-xr-x 1 JENKINS USERGRP 0 May 16 20:31 J11.0_64/lib/ -rwxr-xr-x apsl 1 JENKINS USERGRP 98304 May 16 20:13 J11.0_64/lib/default/libcuda4j29.so
Each line has extended attributes and the file size.
- If the first character is “d” then this is a directory,
- if it is a “-“, it is a file.
- The sixth column is the size of the file.
You can use the following command to give the size of all of the files.
cat aout | awk ' substr($0,1,1) == "-" {print $0}' | awk '{sum+=$6;}END{print sum;}'
This command
- passes the file aout into the awk command
- awk… if the first character is a “-” =, it is a file, so print the record
- awk…add up the 6th column and display the final result.
This gave me 5.24403e+08 (bytes) for the size of all of the files. You need to add perhaps 5-10% for overhead (for example directory entries). If you specify a secondary extend to the data set, it will try to expand if the ZFS fills up.
I created the ZFS
//IBMUZFS JOB ,' ',COND=(4,LE) RESTART=MOUNT //DEFINE EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DELETE JVB800.V11.ZFS CLUSTER SET MAXCC=0 DEFINE - CLUSTER - (NAME(JVB800.V11.ZFS)- VOLUMES(USER02) - LINEAR - MEGABYTES(500 254) - SHAREOPTIONS(3 3)) /* //FORMATFS EXEC PGM=IOEAGFMT,REGION=0M,COND=(0,NE,DEFINE), // PARM=('-aggregate JVB800.V11.ZFS -compat') //SYSPRINT DD SYSOUT=* //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=* //*
and mounted it over the directory you created above
//MOUNT EXEC PGM=IKJEFT1A,COND=((0,NE,DEFINE),(0,NE,FORMATFS)) //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * MOUNT FILESYSTEM('JVB800.V11.ZFS') TYPE(ZFS) + MOUNTPOINT('/usr/lpp/java/J11.0.19.0_64') + MODE(RDWR) PARM('AGGRGROW') AUTOMOVE /*
You can use the MOUNT command in the BPXPRMxx member
MOUNT FILESYSTEM('JVB800.V11.ZFS') TYPE(ZFS) MOUNTPOINT('/usr/lpp/java/J11.0.19.0_64') MODE(RDWR) PARM('AGGRGROW') AUTOMOVE
Note: without the “+” signs.
Size after unpacking is similar to the calculated value above.
After the file was unpacked the command
df -P /usr/lpp/java/J11.0_64
reported
Filesystem 512-blocks Used Available Capacity Mounted on JVB800.V11.ZFS 1178880 1045634 133246 89% /usr....
“Used blocks” 1045634 * 512 bytes gives 535364608 = 5.4e+08
The size calculation above is close to the final space used.
Unload the file
When I first unpacked one of the files I got messages about not being authorised to set the shared library attribute(l) in the directory – even though my userid was a super user. I had to define a security profile, and give my userid access to it.
RDEFINE FACILITY BPX.FILEATTR.SHARELIB UACC(NONE) PERMIT BPX.FILEATTR.SHARELIB CLASS(FACILITY) ID(IBMUSER) ACCESS(READ) SETROPTS RACLIST(FACILITY) REFRESH
Finally! In Unix System Services I issued the commands
cd /usr/lpp/java/J11.0.19.0_64 pax -ppx -rvzf /tmp/ibm-semeru-certified-jdk_s390x_zos_11.0.19.0.pax.Z
This unloaded the files into /usr/lpp/java/J11.0_64/J11.0_64
Discussion about where to put the file system.
If I had an existing directory /usr/lpp/java/J11.0_64 I could have mounted the new ZFS at this address, and issued
cd /usr/lpp/java pax -ppx -rvzf /tmp/ibm-semeru-certified-jdk_s390x_zos_11.0.19.0.pax.Zf
and this would have unload the files into /usr/lpp/java/J11.0_64, overwriting what was already there. See Follow the instructions to install Java on z/OS and screw up production. Think carefully where you want to put your files.