Products Resources Support About Us

Installing git for z/OS

Installing git for z/OS can be a challenge for systems programmers without much Unix System Services (USS) experience. This article provides relatively detailed instructions, as well as a script that can help automate the process.

Before starting, you’ll need to go to the Rocket Open Source Languages and Tools for z/OS page and create a (free) Rocket Community account, if you don’t already have one. That will enable you to access all of the open source tool downloads.

These instructions assume that:

  • You will first download the installation files to a Windows system.
  • You know how to transfer binary files from a Windows system to a z/OS Unix file system.

Here we go!

  • Create a folder on Windows into which you will save the installation files before transferring them to z/OS.

  • Download the 4 necessary files off the Rocket download site, for gzip, bash, git and perl. The file names (at the time of this posting) should be:

    • gzip-1.6-edc_b0005.160229.tar
    • bash-4.3_b018.170518.tar.gz
    • git-2.3.5_b013.161229.tar.gz
    • perl-5.24.0_b005.170601.tar.gz
  • In the same folder, save this file attachment: helper.tar (31.5 KB)

  • Create a directory on USS where you will put all the installation files. It can be a subdirectory of your home directory.

  • Binary transfer all 5 of the files from Windows to the USS directory.

  • cd into the directory on USS that contains the installation files.

  • Untar the helper script, using the following command. This will create the file install.sh.

    tar -xoUXf helper.tar

  • By default, install.sh will install the software into the directory that contains the installation files. If you want to install elsewhere, edit install.sh and change the value of INSTALL_DIR at the top of the script.

  • Run install.sh, like this:

    ./install.sh

This will install all the software and create some additional scripts:

  • uninstall.sh
  • remove_dist.sh
  • environment.sh

To set up the environment to use git you must ‘source’ environment.sh. You do that with this command:

. ./environment.sh

Look very carefully at that command line – It’s using the “dot” command to cause bash to read the contents of the file You are must not run the script; you must source it.

At this point you can use git. If you just type git you should get a help message.

Once you are satisfied that git is working properly, you can delete the installation files, using ./remove_dist.sh.

Appendix: install.sh

Here’s the source code for the install.sh script contained in helper.tar.

#! /bin/sh

# If you want to install the tools in a directory other than 
# the download directory, change INSTALL_DIR to point to it.
INSTALL_DIR=`pwd`

if [[ ! -d $INSTALL_DIR ]] ; then
  echo making $INSTALL_DIR
  mkdir $INSTALL_DIR
  if [[ ! -d $INSTALL_DIR ]] ; then
    echo unable to create installation directory $INSTALL_DIR
    exit 1;
  fi
fi

unpack() {
  distfile=$1
  targetdir=$2
  if [[ ! -f $distfile ]] ; then
    echo "distribution file $distfile does not exist"
    return 1
  fi
  if [[ ! -d $targetdir ]] ; then
    echo "$targetdir is not a directory"
    return 1
  fi

  $INSTALL_DIR/bin/gzip -c -d <$distfile | tar -C $targetdir -xoUXf -
  if [[ $? != 0 ]] ; then
    echo "unpacking $distfile into $targetdir failed"
    return 1
  fi

  return 0;
}

echo "installing gzip, bash, perl and git into $INSTALL_DIR"

gzipdist=gzip-1.6-edc_b0005.160229.tar
bashdist=bash-4.3_b018.170518.tar.gz
gitdist=git-2.3.5_b013.161229.tar.gz
perldist=perl-5.24.0_b005.170601.tar.gz

# Install gzip. It is NOT compressed.
tar -C $INSTALL_DIR -xoUXf $gzipdist

if [[ ! -f $INSTALL_DIR/bin/gzip ]] ; then
  echo "installation failed for gzip"
  exit 1
else
  echo "gzip installed"
fi

# Unpack the files for bash, git and perl

unpack $bashdist $INSTALL_DIR
unpack $gitdist $INSTALL_DIR
unpack $perldist $INSTALL_DIR

# Make sure that the permissions are correct
find $INSTALL_DIR/lib -type f -exec chmod 644 {} \; 
find $INSTALL_DIR/lib -type f -name '*.so' -exec chmod 755 {} \; 

# Update environment.sh with the install location
cat >environment.sh <<EOF 
# These lines can be added to the user's ~/.profile or they can be sourced as needed.

# Set the various PATHS to find the code for bash, git and perl
export PATH=$INSTALL_DIR/bin:\$PATH
export MANPATH=\$MANPATH:$INSTALL_DIR/man
export PERL5LIB=$INSTALL_DIR/lib/perl5:\$PERL5LIB
export LIBPATH=$INSTALL_DIR/lib/perl5/5.24.0/os390/CORE:\$LIBPATH

export GIT_SHELL=$INSTALL_DIR/bin/bash
export GIT_EXEC_PATH=$INSTALL_DIR/libexec/git-core
export GIT_TEMPLATE_DIR=$INSTALL_DIR/share/git-core/templates

# Set up the enhanced ASCII support flags
export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)"
export _BPXK_AUTOCVT=ON
export _TAG_REDIR_ERR=txt
export _TAG_REDIR_IN=txt
export _TAG_REDIR_OUT=txt
EOF

# create the uninstall script
cat >uninstall.sh <<EOF
#! /bin/sh
rm environment.sh remove_dist.sh
cd $INSTALL_DIR
rm -rf bin lib libexec man share  README
EOF
chmod +x uninstall.sh

cat >remove_dist.sh <<EOF
#! /bin/sh
# remove the download files after installation
rm -f $gzipdist $bashdist $gitdist $perldist
EOF
chmod +x remove_dist.sh

# Run the perl path change script
cd $INSTALL_DIR/bin
./change_pwd_perl.sh