summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pc-sysinstall/backend/functions-packages.sh
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2010-08-19 05:59:27 +0000
committerimp <imp@FreeBSD.org>2010-08-19 05:59:27 +0000
commit23d9b9fddd80cb970290ccdde4452d75102c2ce0 (patch)
treeafdb16cb0de36138fec883c729244aaf2f0e7273 /usr.sbin/pc-sysinstall/backend/functions-packages.sh
parent48183e9b238a8ed57106391ce5fe952483664d5e (diff)
downloadFreeBSD-src-23d9b9fddd80cb970290ccdde4452d75102c2ce0.zip
FreeBSD-src-23d9b9fddd80cb970290ccdde4452d75102c2ce0.tar.gz
Various updates to support new pc-sysinstall directive
"installPackages" that will install packages and all package dependencies. PR: 148606 Submitted by: John Hixon
Diffstat (limited to 'usr.sbin/pc-sysinstall/backend/functions-packages.sh')
-rwxr-xr-xusr.sbin/pc-sysinstall/backend/functions-packages.sh158
1 files changed, 140 insertions, 18 deletions
diff --git a/usr.sbin/pc-sysinstall/backend/functions-packages.sh b/usr.sbin/pc-sysinstall/backend/functions-packages.sh
index 345b649..a522718 100755
--- a/usr.sbin/pc-sysinstall/backend/functions-packages.sh
+++ b/usr.sbin/pc-sysinstall/backend/functions-packages.sh
@@ -34,29 +34,30 @@
get_package_index()
{
- FTP_SERVER="${1}"
- FTP_DIR="ftp://${FTP_SERVER}/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}/packages"
INDEX_FILE="INDEX"
USE_BZIP2=0
+ get_ftp_mirror
+ FTP_SERVER="${VAL}"
+
+ FTP_DIR="ftp://${FTP_SERVER}/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}/packages"
+
if [ -f "/usr/bin/bzip2" ]
then
INDEX_FILE="${INDEX_FILE}.bz2"
USE_BZIP2=1
fi
- ftp "${FTP_DIR}/${INDEX_FILE}"
- if [ -f "${INDEX_FILE}" ]
- then
- if [ "${USE_BZIP2}" -eq "1" ]
- then
- bzip2 -d "${INDEX_FILE}"
- INDEX_FILE="${INDEX_FILE%.bz2}"
- fi
+ fetch_file "${FTP_DIR}/${INDEX_FILE}" "${PKGDIR}/${INDEX_FILE}" "1"
- mv "${INDEX_FILE}" "${PKGDIR}"
+ HERE=`pwd`
+ cd "${PKGDIR}"
+ if [ -f "${INDEX_FILE}" ] && [ "${USE_BZIP2}" -eq "1" ]
+ then
+ bzip2 -d "${INDEX_FILE}"
fi
-}
+ cd "${HERE}"
+};
parse_package_index()
{
@@ -67,9 +68,11 @@ parse_package_index()
while read -r line
do
+ PKGNAME=""
CATEGORY=""
PACKAGE=""
DESC=""
+ DEPS=""
i=0
SAVE_IFS="${IFS}"
@@ -77,7 +80,11 @@ parse_package_index()
for part in ${line}
do
- if [ "${i}" -eq "1" ]
+ if [ "${i}" -eq "0" ]
+ then
+ PKGNAME="${part}"
+
+ elif [ "${i}" -eq "1" ]
then
PACKAGE=`basename "${part}"`
@@ -88,17 +95,23 @@ parse_package_index()
elif [ "${i}" -eq "6" ]
then
CATEGORY=`echo "${part}" | cut -f1 -d' '`
+
+ elif [ "${i}" -eq "8" ]
+ then
+ DEPS="${part}"
fi
i=$((i+1))
done
echo "${CATEGORY}|${PACKAGE}|${DESC}" >> "${INDEX_FILE}.parsed"
+ echo "${PACKAGE}|${PKGNAME}|${DEPS}" >> "${INDEX_FILE}.deps"
+
IFS="${SAVE_IFS}"
done
exec 0<&3
-}
+};
show_package_file()
{
@@ -117,7 +130,7 @@ show_package_file()
done
exec 0<&3
-}
+};
show_packages_by_category()
{
@@ -128,7 +141,7 @@ show_packages_by_category()
grep "^${CATEGORY}|" "${INDEX_FILE}" > "${TMPFILE}"
show_package_file "${TMPFILE}"
rm "${TMPFILE}"
-}
+};
show_package_by_name()
{
@@ -140,9 +153,118 @@ show_package_by_name()
grep "^${CATEGORY}|${PACKAGE}" "${INDEX_FILE}" > "${TMPFILE}"
show_package_file "${TMPFILE}"
rm "${TMPFILE}"
-}
+};
show_packages()
{
show_package_file "${PKGDIR}/INDEX.parsed"
-}
+};
+
+get_package_dependencies()
+{
+ PACKAGE="${1}"
+ LONG="${2:-0}"
+ RES=0
+
+ INDEX_FILE="${PKGDIR}/INDEX.deps"
+ REGEX="^${PACKAGE}|"
+
+ if [ "${LONG}" -ne "0" ]
+ then
+ REGEX="^.*|${PACKAGE}|"
+ fi
+
+ LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null`
+ DEPS=`echo "${LINE}"|cut -f3 -d'|'`
+
+ VAL="${DEPS}"
+ export VAL
+
+ if [ -z "${VAL}" ]
+ then
+ RES=1
+ fi
+
+ return ${RES}
+};
+
+get_package_name()
+{
+ PACKAGE="${1}"
+ RES=0
+
+ INDEX_FILE="${PKGDIR}/INDEX.deps"
+ REGEX="^${PACKAGE}|"
+
+ LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null`
+ NAME=`echo "${LINE}"|cut -f2 -d'|'`
+
+ VAL="${NAME}"
+ export VAL
+
+ if [ -z "${VAL}" ]
+ then
+ RES=1
+ fi
+
+ return ${RES}
+};
+
+get_package_short_name()
+{
+ PACKAGE="${1}"
+ RES=0
+
+ INDEX_FILE="${PKGDIR}/INDEX.deps"
+ REGEX="^.*|${PACKAGE}|"
+
+ LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null`
+ NAME=`echo "${LINE}"|cut -f1 -d'|'`
+
+ VAL="${NAME}"
+ export VAL
+
+ if [ -z "${VAL}" ]
+ then
+ RES=1
+ fi
+
+ return ${RES}
+};
+
+get_package_category()
+{
+ PACKAGE="${1}"
+ INDEX_FILE="${PKGDIR}/INDEX.parsed"
+ RES=0
+
+ LINE=`grep "|${PACKAGE}|" "${INDEX_FILE}" 2>/dev/null`
+ NAME=`echo "${LINE}"|cut -f1 -d'|'`
+
+ VAL="${NAME}"
+ export VAL
+
+ if [ -z "${VAL}" ]
+ then
+ RES=1
+ fi
+
+ return ${RES}
+};
+
+fetch_package()
+{
+ CATEGORY="${1}"
+ PACKAGE="${2}"
+
+ get_ftp_mirror
+ FTP_SERVER="${VAL}"
+
+ PACKAGE="${PACKAGE}.tbz"
+ if [ ! -f "${PKGTMPDIR}/${PACKAGE}" ]
+ then
+ PKGPATH="${CATEGORY}/${PACKAGE}"
+ FTP_PATH="ftp://${FTP_SERVER}/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}/packages/${PKGPATH}"
+ fetch_file "${FTP_PATH}" "${PKGTMPDIR}/" "0"
+ fi
+};
OpenPOWER on IntegriCloud