UPDATE 6.27.2016: If you rather install from a PTF check 5733-OPS opt 7 PTF SI61062 else learn to install it from Perzl’s site

Follow the steps below to install Bash

1. Download and unzip download-2.01-PHPDave.tar.zip locally and upload download-2.01-PHPDave.tar.zip to /QOpenSys on the IBMi

2. Open a 5250 session and run CALL QP2TERM.  We’ll extract the tar.zip file and it will create a download directory that will store all our open source binaries (such as Bash).  In QP2Term shell run:
cd /QOpenSys
tar -xf download-2.01-PHPDave.tar.zip
cd download

3. We’ll execute setup2.sh which installs various utilities needed to run wwwperzl.sh.  In QP2TERM and in directory: /QOpenSys/download run

#give the user, execute permission on setup2.sh
chmod u+x setup2.sh
./setup2.sh

4. Download bash (bash-4.3-16.aix5.1.ppc.rpm) and upload it to /QOpenSys/download/www.oss4aix.org/rpmdb/db

5. Download bash dependencies (bash-4.3-16.aix5.1.ppc.deps) and upload it to /QOpenSys/download/www.oss4aix.org/rpmdb/deplists/aix61

6. We’ll now get bash installed. In QP2TERM and in directory: /QOpenSys/download run

./wwwperzl.sh aix61 rpm1 bash-4.3

7. Bash should now be available!!! at the following directory: /QOpenSys/opt/freeware/bin/bash .  SSH into your ibmi and run /QOpenSys/opt/freeware/bin/bash.   Tips on setting up SSH for IBMi

Notes:

1. view other bash versions here if you want a different version: ftp://www.oss4aix.org/RPMS/bash/

2. view other bash deps here if you want a different version: ftp://www.oss4aix.org/rpmdb/deplists/

3. View this image to determine which aixXX to use when running ./wwwperzl.sh aixXX rpm1 bash-4.3

4. You used to have to Download http://yips.idevcloud.com/wiki/uploads/PASE/setup2.sh and http://yips.idevcloud.com/wiki/uploads/PASE/wwwperzl.sh and upload setup2.sh and wwwperzl.sh to /QOpenSys/download but i’ve included that in the zip file

Reference

http://yips.idevcloud.com/wiki/index.php/PASE/OpenSourceBinaries#perzl

http://www.perzl.org/aix/

Whats in setup2.sh and wwwperzl.sh

#!/bin/sh
# ################################################
rpm_rte="rpm.rte"
rpm_wget="wget-1.9.1-1.aix5.1.ppc.rpm"
# ################################################
# Setup rpm and wget
# ################################################
function setup_rpm {
rm /usr/bin/rpm
if ! test -e "/QOpenSys/download/$rpm_rte"; then
mkdir /QOpenSys/download
echo "setup failure: move $rpm_rte and $rpm_wget to /QOpenSys/download"
return 3
fi
cd /QOpenSys/download
if ! test -e "$rpm_rte"; then
echo "setup failure: missing $rpm_rte setup failure"
return 2
fi
if test -e /usr/bin/rpm; then
echo "setup failure: /usr/bin/rpm already installed"
return 1
fi
echo "setting up $rpm_rte"
restore -xvqf $rpm_rte
mkdir /QOpenSys/opt
cp -R /QOpenSys/download/usr/opt/* /QOpenSys/opt/.
cd /QOpenSys/download
rm -R usr
ln -s /QOpenSys/opt /QOpenSys/var/opt
ln -s /QOpenSys/opt /opt
ln -s /QOpenSys/var/opt /var/opt
ln -s /opt/freeware/bin/rpm /usr/bin/rpm
cd /opt/freeware/lib
ln -s libpopt.so.0.0.0 libpopt.so
ln -s librpm.so.0.0.0 librpm.so
ln -s librpmbuild.so.0.0.0 librpmbuild.so
}
function setup_wget {
cd /QOpenSys/download
if ! test -e "/QOpenSys/download/$rpm_wget"; then
echo "setup failure: move $rpm_wget to /QOpenSys/download"
return 4
fi
echo "setting up $rpm_wget"
rpm –ignoreos –ignorearch –nodeps –replacepkgs -hUv $rpm_wget
}
function setup_prezl {
echo "setting up prezl depend tree …"
tar -xf http://www.oss4aix.org.deps.tar
}
# ################################################
# Main
# ################################################
setup_rpm
setup_wget
setup_prezl

view raw
setup2.sh
hosted with ❤ by GitHub

#!/bin/sh
# PERZL_DEBUG="1"
PERZL_RELEASE_AIX53="aix53"
PERZL_RELEASE_AIX61="aix61"
PERZL_LOCAL_BLACKLIST="::"
# assign_global_vars $1
# $1 – aix53|aix61
# output
# na
function assign_global_vars {
PERZL_RELEASE_INUSE=$1
PERZL_WGET_LIST_DEPS="ftp://www.oss4aix.org/rpmdb/deplists/$PERZL_RELEASE_INUSE/"
PERZL_WGET_LIST_RPMS="http://www.oss4aix.org/download/RPMS/"
PERZL_LOCAL_COPY_RPMS="http://www.oss4aix.org.site.dirs"
PERZL_LOCAL_COPY_DEPS="http://www.oss4aix.org/rpmdb/deplists/$PERZL_RELEASE_INUSE/"
PERZL_LOCAL_PREVLIST=$PERZL_LOCAL_BLACKLIST
}
# help_user
# na
# output
# help user
function help_user {
echo " "
echo "customer:"
echo "————–"
echo "wwwperzl.sh $PERZL_RELEASE_AIX53|$PERZL_RELEASE_AIX61 option [scan]"
echo "required:"
echo " $PERZL_RELEASE_AIX53|$PERZL_RELEASE_AIX61"
echo "option"
echo " help – help customer"
echo " admin – admin help, PASE releases, perzl site copy functions, etc."
echo " fix – fix freeware/lib/libiconv.a (post rpm)"
echo " list [scan] – list possible downloads"
echo " count [scan] – count list possible downloads"
echo " wget1 [scan] – wget from perzl"
echo " wget [scan] – wget plus depends from perzl"
echo " wgetv [scan] – wget plus depends from perzl (view action only)"
echo " rpm1 [scan] – rpm install local (post wget)"
echo " rpm [scan] – rpm install plus depends (post wget)"
echo " rpmv [scan] – rpm install plus depends (view action only)"
echo " (*)[scan] – wild card rpm scan [gcc*]"
echo " "
echo "pase->aix release:"
echo " ————–"
echo " V5R3 -> aix52"
echo " V5R4 -> aix53"
echo " V6R1 -> aix53"
echo " V7R1 -> aix61"
}
# help_admin
# na
# output
# help admin
function help_admin {
help_user
echo " "
echo "internal use:"
echo " ————–"
echo "option"
echo " bigdeps – local perzl site map wget http://www.oss4aix.org/rpmdb/deplists/($PERZL_RELEASE_AIX53,$PERZL_RELEASE_AIX61)/*.deps (files)"
echo " bigrpms – local perzl site map wget ftp://www.oss4aix.org/RPMS/../*.rpm (names only)"
echo " (*) local perzl site map included download, do not run bigxxx (very long copy)"
echo " "
echo "perzl release:"
echo " ————–"
echo " aix release inuse….$PERZL_RELEASE_INUSE ($PERZL_RELEASE_AIX53,$PERZL_RELEASE_AIX61)"
echo " local perzl deps…..$PERZL_LOCAL_COPY_DEPS ($PERZL_WGET_LIST_DEPS)"
echo " local perzl rpms…..$PERZL_LOCAL_COPY_RPMS ($PERZL_WGET_LIST_RPMS)"
}
# #####################################
# helper functions
# #####################################
# execute_cmd $1
# $1 – cmd to execute
# output
# cmd result
function execute_cmd {
# echo "$1"
$1
}
# replace_filetype_deps_with_rpm $1
# $1 – name of download dep
# output
# replace .deps with .rpm
# example
# $1="bash-4.2-12.aix5.1.ppc.deps"
# output "bash-4.2-12.aix5.1.ppc.rpm"
function replace_filetype_deps_with_rpm {
echo $1 | awk '{ gsub(/.deps/,".rpm"); print }'
}
# replace_filetype_rpm_with_deps $1
# $1 – name of download rpm
# output
# replace .rpm with .deps
# example
# $1="bash-4.2-12.aix5.1.ppc.rpm"
# output "bash-4.2-12.aix5.1.ppc.deps"
function replace_filetype_rpm_with_deps {
echo $1 | awk '{ gsub(/.rpm/,".deps"); print }'
}
# remove_filetype_rpm $1
# $1 – name of download rpm
# output
# remove .rpm
# example
# $1="bash-4.2-12.aix5.1.ppc.rpm"
# output "bash-4.2-12.aix5.1.ppc"
function remove_filetype_rpm {
echo $1 | awk '{ gsub(/.rpm/,""); print }'
}
# remove_filetype_deps $1
# $1 – name of download deps
# output
# remove .deps
# example
# $1="bash-4.2-12.aix5.1.ppc.deps"
# output "bash-4.2-12.aix5.1.ppc"
function remove_filetype_deps {
echo $1 | awk '{ gsub(/.deps/,""); print }'
}
# find_rpm_local $1
# $1 – name of download rpm/deps
# output
# 1 – match found in current dir
# 0 – not match in current dir
# example
# $1="bash-4.2-12.aix5.1.ppc.rpm"
# output 0 (not exist this directory)
# — or —
# output 1 (exist this directory)
function find_rpm_local {
rpm=$(replace_filetype_deps_with_rpm $1)
if test -e $rpm
then
echo "1"
else
echo "0"
fi
}
# #####################################
# perzl action functions
# require files ./www.oss4aix.org/..
# oss4aix_perzl_deps_download
# oss4aix_perzl_subdir_download
# #####################################
# oss4aix_master_rpm_name $1
# $1 – name of download rpm/dep
# output
# rpm name from http://www.oss4aix.org.site.dirs
# example
# $1="bash-4.2-12.aix5.1.ppc.deps"
# output "bash-4.2-12.aix5.1.ppc.rpm"
function oss4aix_master_rpm_name {
rpm=$(replace_filetype_deps_with_rpm $1)
short=$(remove_filetype_rpm $rpm)
base=$(grep "[[:space:]]$rpm" $PERZL_LOCAL_COPY_RPMS | awk '{print $2}')
echo $base
}
# oss4aix_master_rpm_dir $1
# $1 – name of download rpm/dep
# output
# rpm name from http://www.oss4aix.org.site.dirs
# example
# $1="bash-4.2-12.aix5.1.ppc.deps"
# output "bash"
function oss4aix_master_rpm_dir {
rpm=$(replace_filetype_deps_with_rpm $1)
short=$(remove_filetype_rpm $rpm)
base=$(grep "[[:space:]]$rpm" $PERZL_LOCAL_COPY_RPMS | awk '{print $1}')
echo $base
}
# oss4aix_list_display $1
# $1 – wild card wild*.deps
# output
# list matching wild*.deps
# note
# assumes ./www.oss4aix.org/..
function oss4aix_list_display {
pop=$(pwd)
cd $PERZL_LOCAL_COPY_DEPS
execute_cmd "ls -1 $1*.deps"
execute_cmd "cd $pop"
}
# oss4aix_list_count $1
# $1 – wild card wild*.deps
# output
# nbr match files "wild*.deps"
# note
# assumes ./www.oss4aix.org/..
function oss4aix_list_count {
echo $(oss4aix_list_display $1 | tr -s ' ' '\n' | grep -c $1)
}
# oss4aix_wget_site $1
# $1 – name of download rpm
# output
# na
# note
# wget an rpm from perzl site
# assumes ./www.oss4aix.org/..
# example
# $1="bash-4.2-12.aix5.1.ppc.deps"
# — or —
# $1="bash-4.2-12.aix5.1.ppc.rpm"
# wget "http://www.oss4aix.org/../bash/bash-4.2-12.aix5.1.ppc.rpm"
function oss4aix_wget_site {
fnd=$(find_rpm_local $1)
if (($fnd == 0))
then
root=$(oss4aix_master_rpm_dir $1)
rpm=$(replace_filetype_deps_with_rpm $1)
if [ -z "$PERZL_DEBUG" ]
then
execute_cmd "wget $PERZL_WGET_LIST_RPMS$root/$rpm"
else
echo "wget $PERZL_WGET_LIST_RPMS$root/$rpm"
fi
else
rpm=$(replace_filetype_deps_with_rpm $1)
echo "rpm [$rpm] previously downloaded"
execute_cmd "ls -l $rpm"
fi
}
# oss4aix_fix_libiconv
# na
# output
# na
function oss4aix_fix_libiconv {
if test -e /opt/freeware/lib/libiconv.a
then
cnt=$(ar -t /opt/freeware/lib/libiconv.a | grep -c shr4)
if (($cnt==0))
then
echo "fixing /opt/freeware/lib/libiconv.a …"
ar -x /usr/lib/libiconv.a
ar -rv /opt/freeware/lib/libiconv.a shr4.o
ar -rv /opt/freeware/lib/libiconv.a shr.o
echo "… complete"
else
echo "/opt/freeware/lib/libiconv.a fixed (ok)"
fi
fi
}
# oss4aix_rpm_install $1
# $1 – name of download rpm
# output
# na
# note
# rpm install local *.rpm
# assumes ./www.oss4aix.org/..
# example
# $1="bash-4.2-12.aix5.1.ppc.deps"
# — or —
# $1="bash-4.2-12.aix5.1.ppc.rpm"
# rpm –ignoreos –ignorearch –nodeps –replacepkgs -hUv bash-4.2-12.aix5.1.ppc.rpm
function oss4aix_rpm_install {
rpm=$(replace_filetype_deps_with_rpm $1)
if [ -z "$PERZL_DEBUG" ]
then
execute_cmd "rpm –ignoreos –ignorearch –nodeps –replacepkgs -hUv $rpm"
# fix iconv (sigh)
cnt=$(echo "$rpm" | grep -c libiconv)
if (($cnt==1))
then
oss4aix_fix_libiconv
fi
else
echo "rpm –ignoreos –ignorearch –nodeps –replacepkgs -hUv $rpm"
fi
}
# oss4aix_single $1 $2
# $1 – operation (1="wget",2="rpm")
# $2 – wild card wild*.deps
# output
# na
function oss4aix_single {
unique=$(oss4aix_list_count $2)
if (($unique == 1))
then
name=$(oss4aix_list_display $2)
if (($1 == 1))
then
oss4aix_wget_site $name
else
oss4aix_rpm_install $name
fi
else
echo "search [$2] unique version not found"
oss4aix_list_display $2
fi
}
# oss4aix_tree $1 $2
# $1 – operation (1="wget",2="rpm")
# $2 – wild card wild*.deps
# output
# na
function oss4aix_tree {
unique=$(oss4aix_list_count $2)
if (($unique == 1))
then
name=$(oss4aix_list_display $2)
# echo "parent depends on $name …"
while read depend
do
# echo "child operation $depend …"
next=$(remove_filetype_rpm $depend)
inlist=$(echo "$PERZL_LOCAL_PREVLIST" | grep -c ":$next:")
if (($inlist == 0))
then
PERZL_LOCAL_PREVLIST="$PERZL_LOCAL_PREVLIST:$next:"
oss4aix_single $1 $next
oss4aix_tree $1 $next
fi
done < $PERZL_LOCAL_COPY_DEPS""$name
else
echo "search [$2] unique version not found"
oss4aix_list_display $2
fi
}
# INTERNAL USE — prepare download
# oss4aix_perzl_deps_download
# output
# create ./www.oss4aix.org/..
# One time operation:
# PERZL_WGET_LIST_DEPS db included download,
# so customer need never run
# oss4aix_perzl_deps_download.
# Routine web drags depend PERZL_WGET_LIST_DEPS
# from perzl site to create
# directory http://www.oss4aix.org/..
# (very, very loooooooong running task)
function oss4aix_perzl_deps_download {
wget -r –no-parent -A.deps $PERZL_WGET_LIST_DEPS
}
# INTERNAL USE — prepare download
# oss4aix_perzl_deps_download
# output
# create ./www.oss4aix.org.site.dirs
# One time operation:
# db included download,
# so customer need never run
# (very, very loooooooong running task)
function oss4aix_perzl_subdir_download {
# echo "ftp://www.oss4aix.org/RPMS/$1/&quot;
wget –quiet –no-remove-listing "ftp://www.oss4aix.org/RPMS/$1/"
mv .listing child.listing
while read rec
do
subdir=$(echo $rec | awk '{print $9}')
cnt=$(echo $subdir | grep -c '.rpm')
if (($cnt == 1))
then
echo "$1 $subdir"
echo "$1 $subdir" >> $PERZL_LOCAL_COPY_RPMS
fi
done < "child.listing"
rm child.listing
rm index.ht*
}
function oss4aix_perzl_dirs_download {
rm $PERZL_LOCAL_COPY_RPMS
rm .listing
rm index.ht*
touch $PERZL_LOCAL_COPY_RPMS
wget –quiet –no-remove-listing ftp://www.oss4aix.org/RPMS/
mv .listing root.listing
while read rec
do
subdir=$(echo $rec | awk '{print $9}' | tr -d '\r')
# echo "$subdir"
cnt=$(echo $subdir | grep -c '\.')
if (($cnt == 0))
then
oss4aix_perzl_subdir_download "$subdir"
fi
done < "root.listing"
rm .listing
rm index.ht*
rm root.listing
}
# ################################################
# Main Menu
# ################################################
cnt1=$(echo $1 | grep -c $PERZL_RELEASE_AIX53)
cnt2=$(echo $1 | grep -c $PERZL_RELEASE_AIX61)
if (($cnt1==0)) && (($cnt2==0))
then
help_user
else
assign_global_vars $1
case "$2" in
"")
help_user
;;
"bigdeps")
oss4aix_perzl_deps_download
;;
"bigrpms")
oss4aix_perzl_dirs_download
;;
"count")
oss4aix_list_count $3
;;
"list")
oss4aix_list_display $3
;;
"wget1")
oss4aix_single "1" $3
;;
"wget")
oss4aix_tree "1" $3
oss4aix_single "1" $3
;;
"wgetv")
PERZL_DEBUG="1"
oss4aix_tree "1" $3
oss4aix_single "1" $3
;;
"rpm1")
oss4aix_single "2" $3
oss4aix_fix_libiconv
;;
"rpm")
oss4aix_tree "2" $3
oss4aix_single "2" $3
oss4aix_fix_libiconv
;;
"rpmv")
PERZL_DEBUG="1"
oss4aix_tree "2" $3
oss4aix_single "2" $3
;;
"fix")
oss4aix_fix_libiconv
;;
"admin")
help_admin
;;
*)
help_user
;;
esac
fi

view raw
wwwperzl.sh
hosted with ❤ by GitHub