Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Mar 2013 09:47:47 +0000 (UTC)
From:      Josh Paetzel <jpaetzel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r247705 - in head/usr.sbin/pc-sysinstall: backend examples
Message-ID:  <201303030947.r239lmdi077219@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jpaetzel
Date: Sun Mar  3 09:47:47 2013
New Revision: 247705
URL: http://svnweb.freebsd.org/changeset/base/247705

Log:
  Fix a bug extracting files from dist scheme
  
  Obtained from:	PC-BSD

Modified:
  head/usr.sbin/pc-sysinstall/backend/functions-extractimage.sh
  head/usr.sbin/pc-sysinstall/backend/functions-parse.sh
  head/usr.sbin/pc-sysinstall/backend/parseconfig.sh
  head/usr.sbin/pc-sysinstall/examples/README

Modified: head/usr.sbin/pc-sysinstall/backend/functions-extractimage.sh
==============================================================================
--- head/usr.sbin/pc-sysinstall/backend/functions-extractimage.sh	Sun Mar  3 09:26:58 2013	(r247704)
+++ head/usr.sbin/pc-sysinstall/backend/functions-extractimage.sh	Sun Mar  3 09:47:47 2013	(r247705)
@@ -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

Modified: head/usr.sbin/pc-sysinstall/backend/functions-parse.sh
==============================================================================
--- head/usr.sbin/pc-sysinstall/backend/functions-parse.sh	Sun Mar  3 09:26:58 2013	(r247704)
+++ head/usr.sbin/pc-sysinstall/backend/functions-parse.sh	Sun Mar  3 09:47:47 2013	(r247705)
@@ -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

Modified: head/usr.sbin/pc-sysinstall/backend/parseconfig.sh
==============================================================================
--- head/usr.sbin/pc-sysinstall/backend/parseconfig.sh	Sun Mar  3 09:26:58 2013	(r247704)
+++ head/usr.sbin/pc-sysinstall/backend/parseconfig.sh	Sun Mar  3 09:47:47 2013	(r247705)
@@ -69,7 +69,7 @@ file_sanity_check "installMode installTy
 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

Modified: head/usr.sbin/pc-sysinstall/examples/README
==============================================================================
--- head/usr.sbin/pc-sysinstall/examples/README	Sun Mar  3 09:26:58 2013	(r247704)
+++ head/usr.sbin/pc-sysinstall/examples/README	Sun Mar  3 09:47:47 2013	(r247705)
@@ -243,11 +243,16 @@ Set installMedium= to the source type we
 
 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
 
 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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201303030947.r239lmdi077219>