summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xezjail-admin91
1 files changed, 50 insertions, 41 deletions
diff --git a/ezjail-admin b/ezjail-admin
index 6b01ec3..fc5bc74 100755
--- a/ezjail-admin
+++ b/ezjail-admin
@@ -333,12 +333,12 @@ ezjail_queryftpserver () {
333 TIFS=${IFS}; IFS= 333 TIFS=${IFS}; IFS=
334 for ezjail_path in pub/FreeBSD/releases pub/FreeBSD/snapshot pub/FreeBSD releases snapshots pub/FreeBSD-Archive/old-releases NO; do 334 for ezjail_path in pub/FreeBSD/releases pub/FreeBSD/snapshot pub/FreeBSD releases snapshots pub/FreeBSD-Archive/old-releases NO; do
335 if [ ${ezjail_path} = "NO" ]; then 335 if [ ${ezjail_path} = "NO" ]; then
336 echo "Warning: I am having problems querying the ftp server you specified (${ezjail_ftphost})." 336 echo "Warning: I am having problems querying the ftp server you specified (${ezjail_disturi})."
337 _ret=1; break 337 _ret=1; break
338 fi 338 fi
339 ezjail_ftpresponse=`echo ls | ftp "${ezjail_ftphost}:${ezjail_path}/${ezjail_installarch}/" 2> /dev/null` 2> /dev/null 339 ezjail_ftpresponse=`echo ls | ftp "${ezjail_disturi}:${ezjail_path}/${ezjail_installarch}/" 2> /dev/null` 2> /dev/null
340 if [ $? -eq 0 ]; then 340 if [ $? -eq 0 ]; then
341 echo -e "The ftp server you specified (${ezjail_ftphost}) seems to provide the following builds:\n${ezjail_ftpresponse}" 341 echo -e "The ftp server you specified (${ezjail_disturi}) seems to provide the following builds:\n${ezjail_ftpresponse}"
342 _ret=0; break 342 _ret=0; break
343 fi 343 fi
344 done 344 done
@@ -952,7 +952,7 @@ setup|update)
952######################## ezjail-admin INSTALL ######################## 952######################## ezjail-admin INSTALL ########################
953install) 953install)
954 # Clean variables, prevent pollution 954 # Clean variables, prevent pollution
955 unset ezjail_release ezjail_installmanpages ezjail_installports ezjail_installsources ezjail_dir ezjail_reldir ezjail_ftpserverqueried 955 unset ezjail_release ezjail_installmanpages ezjail_installports ezjail_installsources ezjail_dir ezjail_ftpserverqueried ezjail_proto ezjail_disturi
956 956
957 shift; while getopts :mMpPsSh:r: arg; do case ${arg} in 957 shift; while getopts :mMpPsSh:r: arg; do case ${arg} in
958 m) ezjail_installmanpages=" manpages";; 958 m) ezjail_installmanpages=" manpages";;
@@ -971,9 +971,9 @@ install)
971 ezjail_installarch=`uname -p` 971 ezjail_installarch=`uname -p`
972 ezjail_installplatform=`uname -m` 972 ezjail_installplatform=`uname -m`
973 : ${ezjail_ftphost="ftp.freebsd.org"} 973 : ${ezjail_ftphost="ftp.freebsd.org"}
974 ezjail_ftphost=${ezjail_ftphost#ftp://} 974 ezjail_proto=${ezjail_ftphost%%://*}
975 ezjail_dir=${ezjail_ftphost#file://} 975 [ "${ezjail_proto}" = "${ezjail_ftphost}" ] && ezjail_proto=ftp
976 [ "${ezjail_dir%%[!/]*}" ] || ezjail_reldir=`pwd -P` 976 ezjail_disturi=${ezjail_ftphost#*://}
977 977
978 [ "`sysctl -n kern.securelevel`" -gt 0 ] && exerr "Error: You are running in a secure level higher than 0.\n ${ezjail_admin} will not install correctly.\n Please reboot into a lower secure level." 978 [ "`sysctl -n kern.securelevel`" -gt 0 ] && exerr "Error: You are running in a secure level higher than 0.\n ${ezjail_admin} will not install correctly.\n Please reboot into a lower secure level."
979 979
@@ -986,13 +986,13 @@ install)
986 ezjail_release_major=${ezjail_release%%.*} 986 ezjail_release_major=${ezjail_release%%.*}
987 987
988 # ftp servers normally wont provide non-RELEASE-builds 988 # ftp servers normally wont provide non-RELEASE-builds
989 if [ "${ezjail_dir}" = "${ezjail_ftphost}" ]; then 989 if [ "${ezjail_proto}" != "file" ]; then
990 case ${ezjail_release} in *-STABLE) ezjail_release="${ezjail_release%-STABLE}-RELEASE";; esac 990 case ${ezjail_release} in *-STABLE) ezjail_release="${ezjail_release%-STABLE}-RELEASE";; esac
991 if [ "${ezjail_release%-RELEASE}" = "${ezjail_release}" ]; then 991 if [ "${ezjail_release%-RELEASE}" = "${ezjail_release}" ]; then
992 echo "Your system is ${ezjail_release}. Normally FTP-servers don't provide non-RELEASE-builds." 992 echo "Your system is ${ezjail_release}. Normally FTP-servers don't provide non-RELEASE-builds."
993 [ ${ezjail_release_major} -ge 9 ] && ezjail_installarch="${ezjail_installplatform}/${ezjail_installarch}" 993 [ ${ezjail_release_major} -ge 9 ] && ezjail_installarch="${ezjail_installplatform}/${ezjail_installarch}"
994 ezjail_queryftpserver || echo "... I'll continue anyway." 994 [ "${ezjail_proto}" != "ftp" ] || ezjail_queryftpserver || echo "... I'll continue anyway."
995 echo -n "Release [ ${ezjail_release} ]: " 995 echo -n "Release to fetch [ ${ezjail_release} ]: "
996 read ezjail_releasetmp 996 read ezjail_releasetmp
997 [ "${ezjail_releasetmp}" ] && ezjail_release=${ezjail_releasetmp} 997 [ "${ezjail_releasetmp}" ] && ezjail_release=${ezjail_releasetmp}
998 ezjail_installarch=`uname -p` 998 ezjail_installarch=`uname -p`
@@ -1003,14 +1003,15 @@ install)
1003 # From 9.0 releases come with a new layout 1003 # From 9.0 releases come with a new layout
1004 # It is now a single archive ${pkg}.txz instead of a list of archive parts under ${pkg}/* 1004 # It is now a single archive ${pkg}.txz instead of a list of archive parts under ${pkg}/*
1005 # man pages come with the base 1005 # man pages come with the base
1006 # We can use fetch to connect to the ftp host, allowing the use of proxies. We needed ftp
1007 # in pre-9.0-releases to make ${pkg}/* work.
1006 # We assume for now that jail's platform is supposed to be that of the host. That may change later. 1008 # We assume for now that jail's platform is supposed to be that of the host. That may change later.
1007 ezjail_release_major=${ezjail_release%%.*} 1009 ezjail_release_major=${ezjail_release%%.*}
1010 [ "${ezjail_release_major}" -eq "${ezjail_release_major}" ] 2>/dev/null || exerr ${ezjail_release} does not look like a valid FreeBSD version descriptor
1008 if [ ${ezjail_release_major} -ge 9 -a -n "${ezjail_installmanpages}" ]; then 1011 if [ ${ezjail_release_major} -ge 9 -a -n "${ezjail_installmanpages}" ]; then
1009 echo "Note: From FreeBSD 9.0 man pages are part of the base package" 1012 echo "Note: From FreeBSD 9.0 man pages are part of the base package"
1010 unset ezjail_installmanpages 1013 unset ezjail_installmanpages
1011 fi 1014 fi
1012 [ ${ezjail_release_major} -ge 9 ] && ezjail_installarch="${ezjail_installplatform}/${ezjail_installarch}"
1013 [ ${ezjail_release_major} -ge 9 ] && ezjail_pkgsuffix=".txz" || ezjail_pkgsuffix="/*"
1014 1015
1015 # Normally fulljail should be renamed by past ezjail-admin commands. 1016 # Normally fulljail should be renamed by past ezjail-admin commands.
1016 # However those may have failed 1017 # However those may have failed
@@ -1030,46 +1031,54 @@ install)
1030 rm -rf "${ezjail_jailtemp}" 1031 rm -rf "${ezjail_jailtemp}"
1031 for pkg in ${ezjail_basesystem} ${ezjail_installmanpages} ${ezjail_installsources}; do 1032 for pkg in ${ezjail_basesystem} ${ezjail_installmanpages} ${ezjail_installsources}; do
1032 1033
1033 # The first case means, that a remote host has been specified. 1034 if [ "${ezjail_proto}" = "file" ]; then
1034 if [ "${ezjail_dir}" = "${ezjail_ftphost}" ]; then 1035 # The easy case means, that a local distribution directory has been specified.
1036
1037 if [ ${ezjail_release_major} -ge 9 ]; then
1038 [ -r "${ezjail_disturi}/${pkg}.txz" ] || exerr "Error: Can not access package file ${ezjail_disturi}/${pkg}.txz"
1039 xzdec ${ezjail_disturi}/${pkg}.txz | tar --unlink -xpJf - -C ${DESTDIR}
1040 else
1041 ezjail_backdir=`pwd -P`
1042 cd "${ezjail_disturi}/${pkg}" || exerr "Error: Could not cd to ${ezjail_disturi}."
1043 [ "${pkg}" = "base" ] && echo "Ignore the next question, ezjail answers it for you."
1044 set -- all
1045 [ -f install.sh ] && yes | . install.sh
1046 [ $? -eq 0 ] || exerr "Error: Package install script for ${pkg} failed."
1047 cd "${ezjail_backdir}"
1048 fi
1049 else
1050 # The hard case means, we have to fetch the distribution files from a remote server
1051
1035 # Create and try to access temp dir 1052 # Create and try to access temp dir
1036 mkdir -p "${ezjail_jailtemp}" || exerr "Error: Could not create temporary base jail directory ${ezjail_jailtemp}." 1053 mkdir -p "${ezjail_jailtemp}" || exerr "Error: Could not create temporary base jail directory ${ezjail_jailtemp}."
1037 cd "${ezjail_jailtemp}" || exerr "Error: Could not cd to ${ezjail_jailtemp}." 1054 cd "${ezjail_jailtemp}" || exerr "Error: Could not cd to ${ezjail_jailtemp}."
1038 1055
1039 # Try all paths as stolen from sysinstall, break on success. 1056 # Try all paths as stolen from sysinstall, break on success.
1040 for ezjail_path in pub/FreeBSD/releases pub/FreeBSD/snapshot pub/FreeBSD releases snapshots pub/FreeBSD-Archive/old-releases NO; do 1057 for ezjail_path in pub/FreeBSD/releases pub/FreeBSD/snapshot pub/FreeBSD releases snapshots pub/FreeBSD-Archive/old-releases NO; do
1058 # Once we tried all paths, we give up and nudge the user
1041 if [ "${ezjail_path}" = "NO" ]; then 1059 if [ "${ezjail_path}" = "NO" ]; then
1042 echo -e "\nCould not fetch ${pkg} from ${ezjail_ftphost}.\n Maybe your release (${ezjail_release}) is specified incorrectly or the host ${ezjail_ftphost} does not provide that release build.\n Use the -r option to specify an existing release or the -h option to specify an alternative ftp server." >&2 1060 echo -e "\nCould not fetch ${pkg} from ${ezjail_proto}://${ezjail_disturi}.\n Maybe your release (${ezjail_release}) is specified incorrectly or the host ${ezjail_disturi} does not provide that release build.\n Use the -r option to specify an existing release or the -h option to specify an alternative ftp server." >&2
1043 [ "${ezjail_ftpserverqueried}" ] || ezjail_queryftpserver 1061 [ "${ezjail_proto}" = "ftp" -a -z "${ezjail_ftpserverqueried}" ] && ezjail_queryftpserver
1044 exit 1 1062 exit 1
1045 fi 1063 fi
1046 ftp "${ezjail_ftphost}:${ezjail_path}/${ezjail_installarch}/${ezjail_release}/${pkg}${ezjail_pkgsuffix}" && break
1047 done
1048 1064
1049 if [ ${ezjail_release_major} -ge 9 ]; then 1065 # Fetching and extraction distributions has become much easier from 9.0
1050 xzdec ${pkg}.txz | tar --unlink -xpJf - -C ${DESTDIR} 1066 if [ ${ezjail_release_major} -ge 9 ]; then
1051 else 1067 fetch "${ezjail_proto}://${ezjail_disturi}/${ezjail_path}/${ezjail_installplatform}/${ezjail_installarch}/${ezjail_release}/${pkg}.txz" || continue
1052 # These actions are really ugly: sources want $1 to contain the set 1068 xzdec ${pkg}.txz | tar --unlink -xpJf - -C ${DESTDIR}
1053 # of sources to install, base asks the user if he is sure, hence the 1069 else
1054 # yes and the set -- all 1070 ftp ${ezjail_disturi}:${ezjail_path}/${ezjail_installarch}/${ezjail_release}/${pkg}/* || continue
1055 [ "${pkg}" = "base" ] && echo "Ignore the next question, ezjail answers it for you." 1071 # These actions are really ugly: sources want $1 to contain the set
1056 set -- all 1072 # of sources to install, base asks the user if he is sure, hence the
1057 [ -f install.sh ] && yes | . install.sh 1073 # yes and the set -- all
1058 [ $? -eq 0 ] || exerr "Error: Package install script for ${pkg} failed." 1074 [ "${pkg}" = "base" ] && echo "Ignore the next question, ezjail answers it for you."
1059 fi 1075 set -- all
1076 [ -f install.sh ] && yes | . install.sh
1077 [ $? -eq 0 ] || exerr "Error: Package install script for ${pkg} failed."
1078 fi
1060 1079
1061 rm -rf "${ezjail_jailtemp}" 1080 rm -rf "${ezjail_jailtemp}"
1062 else 1081 done
1063 if [ ${ezjail_release_major} -ge 9 ]; then
1064 [ -r "${ezjail_reldir}/${ezjail_dir}/${pkg}.txz" ] || exerr "Error: Can not access package file ${ezjail_reldir}/${ezjail_dir}/${pkg}.txz"
1065 xzdec ${ezjail_reldir}/${ezjail_dir}/${pkg}.txz | tar --unlink -xpJf - -C ${DESTDIR}
1066 else
1067 cd "${ezjail_reldir}/${ezjail_dir}/${pkg}" || exerr "Error: Could not cd to ${ezjail_dir}."
1068 [ "${pkg}" = "base" ] && echo "Ignore the next question, ezjail answers it for you."
1069 set -- all
1070 [ -f install.sh ] && yes | . install.sh
1071 [ $? -eq 0 ] || exerr "Error: Package install script for ${pkg} failed."
1072 fi
1073 fi 1082 fi
1074 done 1083 done
1075 1084