Fix a bug extracting files from dist scheme
Obtained from: PC-BSD
This commit is contained in:
parent
1cd8093cdd
commit
e90e34e6fd
@ -29,23 +29,60 @@
|
||||
|
||||
. ${BACKEND}/functions-mountoptical.sh
|
||||
|
||||
# Performs the extraction of data to disk from FreeBSD dist files
|
||||
start_extract_dist()
|
||||
{
|
||||
if [ -z "$1" ] ; then exit_err "Called dist extraction with no directory set!"; fi
|
||||
if [ -z "$INSFILE" ]; then exit_err "Called extraction with no install file set!"; fi
|
||||
local DDIR="$1"
|
||||
|
||||
# Check if we are doing an upgrade, and if so use our exclude list
|
||||
if [ "${INSTALLMODE}" = "upgrade" ]; then
|
||||
TAROPTS="-X ${PROGDIR}/conf/exclude-from-upgrade"
|
||||
else
|
||||
TAROPTS=""
|
||||
fi
|
||||
|
||||
# Loop though and extract dist files
|
||||
for di in $INSFILE
|
||||
do
|
||||
# Check the MANIFEST see if we have an archive size / count
|
||||
if [ -e "${DDIR}/MANIFEST" ]; then
|
||||
count=`grep "^${di}.txz" ${DDIR}/MANIFEST | awk '{print $3}'`
|
||||
if [ ! -z "$count" ] ; then
|
||||
echo "INSTALLCOUNT: $count"
|
||||
fi
|
||||
fi
|
||||
echo_log "pc-sysinstall: Starting Extraction (${di})"
|
||||
tar -xpv -C ${FSMNT} -f ${DDIR}/${di}.txz ${TAROPTS} >&1 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
exit_err "ERROR: Failed extracting the dist file: $di"
|
||||
fi
|
||||
done
|
||||
|
||||
# Check if this was a FTP download and clean it up now
|
||||
if [ "${INSTALLMEDIUM}" = "ftp" ]; then
|
||||
echo_log "Cleaning up downloaded archives"
|
||||
rm -rf ${DDIR}
|
||||
fi
|
||||
|
||||
echo_log "pc-sysinstall: Extraction Finished"
|
||||
}
|
||||
|
||||
# Performs the extraction of data to disk from a uzip or tar archive
|
||||
start_extract_uzip_tar()
|
||||
{
|
||||
if [ -z "$INSFILE" ]
|
||||
then
|
||||
if [ -z "$INSFILE" ]; then
|
||||
exit_err "ERROR: Called extraction with no install file set!"
|
||||
fi
|
||||
|
||||
# Check if we have a .count file, and echo it out for a front-end to use in progress bars
|
||||
if [ -e "${INSFILE}.count" ]
|
||||
then
|
||||
if [ -e "${INSFILE}.count" ]; then
|
||||
echo "INSTALLCOUNT: `cat ${INSFILE}.count`"
|
||||
fi
|
||||
|
||||
# Check if we are doing an upgrade, and if so use our exclude list
|
||||
if [ "${INSTALLMODE}" = "upgrade" ]
|
||||
then
|
||||
if [ "${INSTALLMODE}" = "upgrade" ]; then
|
||||
TAROPTS="-X ${PROGDIR}/conf/exclude-from-upgrade"
|
||||
else
|
||||
TAROPTS=""
|
||||
@ -87,9 +124,8 @@ start_extract_uzip_tar()
|
||||
mdconfig -d -u ${MDDEVICE}
|
||||
;;
|
||||
tar)
|
||||
tar -xpv -C ${FSMNT} -f ${INSFILE} ${TAROPTS} >&1 2>&1
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
tar -xpv -C ${FSMNT} -f ${INSFILE} ${TAROPTS} >&1 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
exit_err "ERROR: Failed extracting the tar image"
|
||||
fi
|
||||
;;
|
||||
@ -176,6 +212,38 @@ start_extract_split()
|
||||
echo_log "pc-sysinstall: Extraction Finished"
|
||||
};
|
||||
|
||||
# Function which will attempt to fetch the dist file(s) before we start
|
||||
fetch_dist_file()
|
||||
{
|
||||
get_value_from_cfg ftpPath
|
||||
if [ -z "$VAL" ]
|
||||
then
|
||||
exit_err "ERROR: Install medium was set to ftp, but no ftpPath was provided!"
|
||||
fi
|
||||
|
||||
FTPPATH="${VAL}"
|
||||
|
||||
# Check if we have a /usr partition to save the download
|
||||
if [ -d "${FSMNT}/usr" ]
|
||||
then
|
||||
DLDIR="${FSMNT}/usr/.fetch.$$"
|
||||
else
|
||||
DLDIR="${FSMNT}/.fetch.$$"
|
||||
fi
|
||||
mkdir -p ${DLDIR}
|
||||
|
||||
# Do the fetch of the dist archive(s) now
|
||||
for di in $INSFILE
|
||||
do
|
||||
fetch_file "${FTPPATH}/${di}.txz" "${DLDIR}/${di}.txz" "1"
|
||||
done
|
||||
|
||||
# Check to see if there is a MANIFEST file for this install
|
||||
fetch_file "${FTPPATH}/MANIFEST" "${DLDIR}/MANIFEST" "0"
|
||||
|
||||
export DLDIR
|
||||
};
|
||||
|
||||
# Function which will attempt to fetch the install file before we start
|
||||
# the install
|
||||
fetch_install_file()
|
||||
@ -390,6 +458,13 @@ init_extraction()
|
||||
case $PACKAGETYPE in
|
||||
uzip) INSFILE="${FBSD_UZIP_FILE}" ;;
|
||||
tar) INSFILE="${FBSD_TAR_FILE}" ;;
|
||||
dist)
|
||||
get_value_from_cfg_with_spaces distFiles
|
||||
if [ -z "$VAL" ] ; then
|
||||
exit_err "No dist files specified!"
|
||||
fi
|
||||
INSFILE="${VAL}"
|
||||
;;
|
||||
split)
|
||||
INSDIR="${FBSD_BRANCH_DIR}"
|
||||
|
||||
@ -401,6 +476,13 @@ init_extraction()
|
||||
case $PACKAGETYPE in
|
||||
uzip) INSFILE="${UZIP_FILE}" ;;
|
||||
tar) INSFILE="${TAR_FILE}" ;;
|
||||
dist)
|
||||
get_value_from_cfg_with_spaces distFiles
|
||||
if [ -z "$VAL" ] ; then
|
||||
exit_err "No dist files specified!"
|
||||
fi
|
||||
INSFILE="${VAL}"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
export INSFILE
|
||||
@ -417,22 +499,32 @@ init_extraction()
|
||||
start_extract_split
|
||||
|
||||
else
|
||||
INSFILE="${CDMNT}/${INSFILE}" ; export INSFILE
|
||||
start_extract_uzip_tar
|
||||
if [ "$PACKAGETYPE" = "dist" ] ; then
|
||||
start_extract_dist "${CDMNT}/usr/freebsd-dist"
|
||||
else
|
||||
INSFILE="${CDMNT}/${INSFILE}" ; export INSFILE
|
||||
start_extract_uzip_tar
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
ftp)
|
||||
if [ "$PACKAGETYPE" = "split" ]
|
||||
then
|
||||
fetch_split_files
|
||||
case $PACKAGETYPE in
|
||||
split)
|
||||
fetch_split_files
|
||||
|
||||
INSDIR="${INSFILE}" ; export INSDIR
|
||||
start_extract_split
|
||||
else
|
||||
fetch_install_file
|
||||
start_extract_uzip_tar
|
||||
fi
|
||||
INSDIR="${INSFILE}" ; export INSDIR
|
||||
start_extract_split
|
||||
;;
|
||||
dist)
|
||||
fetch_dist_file
|
||||
start_extract_dist "$DLDIR"
|
||||
;;
|
||||
*)
|
||||
fetch_install_file
|
||||
start_extract_uzip_tar
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
|
||||
sftp) ;;
|
||||
@ -446,8 +538,13 @@ init_extraction()
|
||||
exit_err "Install medium was set to local, but no localPath was provided!"
|
||||
fi
|
||||
LOCALPATH=$VAL
|
||||
INSFILE="${LOCALPATH}/${INSFILE}" ; export INSFILE
|
||||
start_extract_uzip_tar
|
||||
if [ "$PACKAGETYPE" = "dist" ] ; then
|
||||
INSFILE="${INSFILE}" ; export INSFILE
|
||||
start_extract_dist "$LOCALPATH"
|
||||
else
|
||||
INSFILE="${LOCALPATH}/${INSFILE}" ; export INSFILE
|
||||
start_extract_uzip_tar
|
||||
fi
|
||||
;;
|
||||
*) exit_err "ERROR: Unknown install medium" ;;
|
||||
esac
|
||||
|
@ -45,7 +45,7 @@ get_value_from_cfg_with_spaces()
|
||||
{
|
||||
if [ -n "${1}" ]
|
||||
then
|
||||
export VAL=`grep "^${1}=" ${CFGF} | head -n 1 | cut -d '=' -f 2-`
|
||||
export VAL="`grep ^${1}= ${CFGF} | head -n 1 | cut -d '=' -f 2-`"
|
||||
else
|
||||
exit_err "Error: Did we forgot to supply a setting to grab?"
|
||||
fi
|
||||
|
@ -69,7 +69,7 @@ file_sanity_check "installMode installType installMedium packageType"
|
||||
check_value installMode "fresh upgrade extract"
|
||||
check_value installType "PCBSD FreeBSD"
|
||||
check_value installMedium "dvd usb ftp rsync image local"
|
||||
check_value packageType "uzip tar rsync split"
|
||||
check_value packageType "uzip tar rsync split dist"
|
||||
if_check_value_exists mirrorbal "load prefer round-robin split"
|
||||
|
||||
# We passed all sanity checks! Yay, lets start the install
|
||||
|
@ -243,11 +243,16 @@ Set installMedium= to the source type we will be using for this install.
|
||||
|
||||
Available Types:
|
||||
dvd - Search for and mount the DVD which contains the install archive
|
||||
local - Pull files directly from a local directory
|
||||
usb - Search for and mount the USB drive which contains the install archive
|
||||
ftp - The install archive will be fetched from a FTP / HTTP server before install
|
||||
rsync - Pull the system data from a ssh + rsync server, specified with variables below
|
||||
image - Install system from an image
|
||||
|
||||
# localPath=/usr/freebsd-dist
|
||||
|
||||
Location of the directory we will be pulling installation files from
|
||||
|
||||
# installType=(PCBSD, FreeBSD)
|
||||
|
||||
Set the type of system we are installing, PCBSD or FreeBSD
|
||||
@ -256,10 +261,14 @@ Set the type of system we are installing, PCBSD or FreeBSD
|
||||
|
||||
The installer archive, if not using the defaults specified in conf/pc-sysinstall.conf
|
||||
|
||||
# packageType=(tar, uzip, split)
|
||||
# packageType=(tar, uzip, split, dist)
|
||||
|
||||
The archive type we are extracting from when using dvd, usb or ftp
|
||||
|
||||
# distFiles=base src kernel
|
||||
|
||||
List of dist files to install when packageType=dist
|
||||
|
||||
# ftpPath=ftp://ftp.pcbsd.org/pub/8.0/netinstall
|
||||
|
||||
Location of the installer archive when using a installMedium=ftp
|
||||
|
Loading…
Reference in New Issue
Block a user