236 lines
8.4 KiB
Bash
Executable File
236 lines
8.4 KiB
Bash
Executable File
#!/bin/bash
|
|
#set -x
|
|
set -o posix
|
|
#set -u
|
|
#set -e
|
|
#+
|
|
# ===============
|
|
# make_usp_tar.sh
|
|
# ===============
|
|
# ---------------
|
|
# Fetch and tar a unsupported configuration setup.
|
|
# This script is only needed when target systems do
|
|
# not have wget access to the internet. To configure
|
|
# unsupported conigurations on these systems it will
|
|
# first be necessary to run this script on a system that
|
|
# does have access. Then copy access the resulting tar file,
|
|
# unpack and run the enclosed set_local_uspcfg script in a
|
|
# bash shell to complete the process. That script redefines/
|
|
# defines wget as a bash function to perform local copies
|
|
# from this unpacked tarball. If you wish to create a new
|
|
# configuration based on this local copy of an unsupported
|
|
# configuration in future sessions then you may need to
|
|
# redefine wget again before running makenemo with the
|
|
# appropriate -u setting. A simple script: def_wget is included
|
|
# for such situations.
|
|
# ---------------
|
|
# SYNOPSIS
|
|
# ========
|
|
# $ make_usp_tar.sh uspcfg.txt target_conf target_dir
|
|
# Note target_dir.tar will be created
|
|
#
|
|
# DESCRIPTION
|
|
# ===========
|
|
# - Extract target configuration details from uspcfg.txt
|
|
# - Create target directory
|
|
# - Recursively use wget to retrieve remote configuration files
|
|
# into target directory
|
|
# - Copy uspcfg.txt into target directory and alter remote paths
|
|
# to local (relative) versions
|
|
# - tar target_directory and remove originals
|
|
#----------------------------------------------------------------
|
|
#
|
|
#----------------------------------------------------------------
|
|
# Check the correct number of arguments have been provided
|
|
#----------------------------------------------------------------
|
|
#
|
|
if [ "$#" != "3" ]; then
|
|
echo "Expected usage: make_usp_tar.sh uspcfg.txt target_conf target_dir"
|
|
exit
|
|
fi
|
|
#
|
|
#----------------------------------------------------------------
|
|
# Check the named uspcfg.txt file exists
|
|
#----------------------------------------------------------------
|
|
#
|
|
if [ ! -f $1 ]; then
|
|
echo "named uspcfg.txt file does not exist ($1); attempt abandoned"
|
|
exit
|
|
fi
|
|
#
|
|
#----------------------------------------------------------------
|
|
# Check the requested configuration is listed in the named uspcfg.txt file
|
|
#----------------------------------------------------------------
|
|
#
|
|
inthere=$( grep -c "$2" $1 )
|
|
if [ "$inthere" -lt 1 ]; then
|
|
echo "requested configuration is not in named uspcfg.txt file ($2); attempt abandoned"
|
|
exit
|
|
fi
|
|
#
|
|
#----------------------------------------------------------------
|
|
# Create the target directory if it does not already exist
|
|
# and cd into it
|
|
#----------------------------------------------------------------
|
|
#
|
|
if [ ! -d $3 ]; then
|
|
mkdir $3
|
|
else
|
|
echo "target directory already exists; attempt abandoned"
|
|
exit
|
|
fi
|
|
basedir=$(pwd)
|
|
#
|
|
cd ${3}
|
|
#
|
|
#----------------------------------------------------------------
|
|
# Copy named uspcfg.txt file into target directory
|
|
#----------------------------------------------------------------
|
|
#
|
|
cp $basedir/$1 .
|
|
#
|
|
#----------------------------------------------------------------
|
|
# Extract information on target configuration and
|
|
# retrieve full file list from remote server
|
|
#----------------------------------------------------------------
|
|
#
|
|
grep "$2 " $1 > ./cfg.tmp
|
|
#
|
|
LOCAL_REF=$(cat cfg.tmp | awk 'BEGIN {FS = "#" }{print $2}')
|
|
TAB=$(cat cfg.tmp | awk 'BEGIN {FS = "#" }{print $3}')
|
|
REMOTE_CTL=$(cat cfg.tmp | awk 'BEGIN {FS = "#" }{print $4}')
|
|
wget ${REMOTE_CTL} -O remote_file.list
|
|
#
|
|
#----------------------------------------------------------------
|
|
# Retrieve each remote file and create local directory structure
|
|
# At the same time prepare a local version of the control file
|
|
# by replacing http links with a string that will be replaced later
|
|
# with a local directory path
|
|
#----------------------------------------------------------------
|
|
#
|
|
if [ -f remote_file.list ] ; then
|
|
cat remote_file.list | grep -v '^#' |
|
|
while
|
|
read remfile locfile
|
|
do
|
|
if [ $remfile == 'create_directory' ] ;then
|
|
mkdir $locfile
|
|
echo $remfile " " $locfile >> local_template.ctl
|
|
else
|
|
wget $remfile -O $locfile
|
|
remfile=$(echo $remfile | sed -e "s;.*$locfile;SET_LOCAL_DIRECTORY_HERE/$locfile;")
|
|
echo $remfile " " $locfile >> local_template.ctl
|
|
fi
|
|
done
|
|
else
|
|
echo "Unable to find remote_file.list. Attempt abandoned"
|
|
echo "Files may be left in "$(pwd)
|
|
exit
|
|
fi
|
|
#
|
|
#----------------------------------------------------------------
|
|
# Construct a modified version of the named uspcfg.txt file
|
|
# First copy across all the other untouched configuration listed
|
|
#----------------------------------------------------------------
|
|
#
|
|
grep -v "$2 " $1 > uspcfg_local_template.txt
|
|
#
|
|
#----------------------------------------------------------------
|
|
# Now append the modified entry, replacing http links as before
|
|
#----------------------------------------------------------------
|
|
#
|
|
cat cfg.tmp | sed -e "s;http.*$;SET_LOCAL_DIRECTORY_HERE/local.ctl;" >> uspcfg_local_template.txt
|
|
#
|
|
#
|
|
#----------------------------------------------------------------
|
|
# Construct a script that can be used later to complete a local installation
|
|
#----------------------------------------------------------------
|
|
#
|
|
cat > set_local_uspcfg << EOF
|
|
#!/bin/bash
|
|
if [ "\$( echo $SHELL | grep -c bash )" -lt 1 ]; then
|
|
echo "WARNING: This is only going to be effective in a bash shell"
|
|
echo "since it redefines the wget command as a bash function."
|
|
echo "(ignore this comment if you are in a bash shell)"
|
|
fi
|
|
basedir=\$(pwd)
|
|
#
|
|
echo "Enter full path to the CONFIG directory on your target system: "
|
|
read confdir
|
|
#
|
|
# Edit the local.ctl file to set the local directory path
|
|
#
|
|
sed -e "s;SET_LOCAL_DIRECTORY_HERE;\$basedir;" local_template.ctl > local.ctl
|
|
#
|
|
# Edit the uspcfg_local.txt file to set the local directory path
|
|
#
|
|
sed -e "s;SET_LOCAL_DIRECTORY_HERE;\$basedir;" uspcfg_local_template.txt > uspcfg_local.txt
|
|
#
|
|
# Install local versions in the named CONFIG directory
|
|
#
|
|
if [ -f \$confdir/uspcfg.txt ] && [ ! -L \$confdir/uspcfg.txt ]; then
|
|
mv \$confdir/uspcfg.txt \$confdir/uspcfg_remote.txt
|
|
echo "\$confdir/uspcfg.txt moved to \$confdir/uspcfg_remote.txt"
|
|
fi
|
|
if [ -f \$confdir/uspcfg_local.txt ]; then
|
|
echo "Existing uspcfg_local.txt file found in \$confdir"
|
|
echo "This has been moved to: "\$confdir/uspcfg_local.txt\$\$
|
|
mv \$confdir/uspcfg_local.txt \$confdir/uspcfg_local.txt\$\$
|
|
fi
|
|
mv uspcfg_local.txt \$confdir/uspcfg_local.txt
|
|
ln -s \$confdir/uspcfg_local.txt \$confdir/uspcfg.txt
|
|
#
|
|
# define/redefine the wget command
|
|
#
|
|
function wget {
|
|
if [ "\$2" != "-O" ]; then
|
|
echo "Expected wget usage: wget src -O dest"
|
|
echo "-O not found. No action taken"
|
|
else
|
|
cp \$1 \$3
|
|
fi
|
|
}
|
|
export -f wget
|
|
EOF
|
|
#----------------------------------------------------------------
|
|
# Construct a script that can be used later to just redefine wget
|
|
# in bash shell sessions
|
|
#----------------------------------------------------------------
|
|
#
|
|
cat > def_wget << EOFC
|
|
#!/bin/bash
|
|
if [ "\$( echo $SHELL | grep -c bash )" -lt 1 ]; then
|
|
echo "WARNING: This is only going to be effective in a bash shell"
|
|
echo "since it redefines the wget command as a bash function."
|
|
echo "(ignore this comment if you are in a bash shell)"
|
|
fi
|
|
function wget {
|
|
if [ "\$2" != "-O" ]; then
|
|
echo "Expected wget usage: wget src -O dest"
|
|
echo "-O not found. No action taken"
|
|
else
|
|
cp \$1 \$3
|
|
fi
|
|
}
|
|
export -f wget
|
|
EOFC
|
|
#----------------------------------------------------------------
|
|
# Make sure these scripts have execute permission
|
|
#----------------------------------------------------------------
|
|
chmod 755 set_local_uspcfg
|
|
chmod 755 def_wget
|
|
#
|
|
#----------------------------------------------------------------
|
|
# Tidy up and tar the contents of the downloaded configuration
|
|
#----------------------------------------------------------------
|
|
rm cfg.tmp
|
|
cd $basedir
|
|
tar cvf ${3}.tar $3
|
|
echo ${3}.tar " file successfully created and prepared for local references. Move this"
|
|
echo "tar file to your target system, unpack and run the set_local_uspcfg script in a "
|
|
echo "bash shell to complete the process. This script redefines/defines wget as a bash"
|
|
echo "function to perform local copies from this unpacked tarball. If you wish to create"
|
|
echo "a new configuration based on this local copy of an unsupported configuration in "
|
|
echo "future sessions then you may need to rerun the def_wget script"
|
|
exit
|