* getopts now is used instead of getopt, resolving lots of headaches.
* image size is now preparsed and splitted to prevent dd sucking up gigabytes of memory and finally plopping * errors are now reported to stderr instead of stdout * commands without parameters now fail when being passed parameters
This commit is contained in:
parent
d55b68f4f6
commit
8a6ac642f3
125
ezjail-admin
125
ezjail-admin
@ -34,7 +34,7 @@ ezjail_dirlist="bin boot lib libexec rescue sbin usr/bin usr/games usr/include u
|
|||||||
#
|
#
|
||||||
|
|
||||||
# define our bail out shortcut
|
# define our bail out shortcut
|
||||||
exerr () { echo -e "$*"; exit 1; }
|
exerr () { echo -e "$*" >&2 ; exit 1; }
|
||||||
|
|
||||||
# define detach strategy for image jails
|
# define detach strategy for image jails
|
||||||
detach_images () {
|
detach_images () {
|
||||||
@ -132,35 +132,30 @@ ezjail_updateports () {
|
|||||||
#
|
#
|
||||||
|
|
||||||
# check for command
|
# check for command
|
||||||
[ "$1" ] || exerr "Usage: `basename -- $0` [config|create|delete|install|list|update] {params}"
|
[ $# -gt 0 ] || exerr "Usage: `basename -- $0` [config|create|delete|install|list|update] {params}"
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
######################## ezjail-admin CREATE ########################
|
######################## ezjail-admin CREATE ########################
|
||||||
create)
|
create)
|
||||||
shift
|
|
||||||
args=`getopt f:r:s:xic:C: $*` || exerr "Usage: `basename -- $0` create [-xi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli] [-C args] jailname jailip"
|
|
||||||
|
|
||||||
# Clean variables, prevent polution
|
# Clean variables, prevent polution
|
||||||
unset ezjail_rootdir ezjail_flavour ezjail_softlink ezjail_image ezjail_imagetype ezjail_imageparams ezjail_imagesize ezjail_device ezjail_config
|
unset ezjail_rootdir ezjail_flavour ezjail_softlink ezjail_image ezjail_imagetype ezjail_imageparams ezjail_imagesize ezjail_device ezjail_config
|
||||||
ezjail_fillme="YES"
|
ezjail_fillme="YES"
|
||||||
|
|
||||||
set -- ${args}
|
shift; while getopts :f:r:s:xic:C: arg; do case ${arg} in
|
||||||
for arg do
|
x) ezjail_fillme="NO";;
|
||||||
case ${arg} in
|
r) ezjail_rootdir="${OPTARG}";;
|
||||||
-x) ezjail_fillme="NO"; shift;;
|
f) ezjail_flavour="${OPTARG}";;
|
||||||
-r) ezjail_rootdir="$2"; shift 2;;
|
c) ezjail_imagetype="${OPTARG}";;
|
||||||
-f) ezjail_flavour="$2"; shift 2;;
|
C) ezjail_imageparams="${OPTARG}";;
|
||||||
-c) ezjail_imagetype=$2; shift 2;;
|
i) ezjail_imagetype=${ezjail_imagetype:-"simple"};;
|
||||||
-C) ezjail_imageparams=$2; shift 2;;
|
s) ezjail_imagesize="${OPTARG}";;
|
||||||
-i) ezjail_imagetype=${ezjail_imagetype:-"simple"}; shift;;
|
?) exerr "Usage: `basename -- $0` create [-xi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli] [-C args] jailname jailip";;
|
||||||
-s) ezjail_imagesize="$2"; shift 2;;
|
esac; done; shift $(( ${OPTIND} - 1 ))
|
||||||
--) shift; break;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
ezjail_name=$1; ezjail_ip=$2
|
ezjail_name=$1; ezjail_ip=$2
|
||||||
|
|
||||||
# we need at least a name and an ip for new jail
|
# we need at least a name and an ip for new jail
|
||||||
[ "${ezjail_name}" -a "${ezjail_ip}" -a $# = 2 ] || exerr "Usage: `basename -- $0` create [-xi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli] [-C args] jailname jailip"
|
[ "${ezjail_name}" -a "${ezjail_ip}" -a $# -eq 2 ] || exerr "Usage: `basename -- $0` create [-xi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli] [-C args] jailname jailip"
|
||||||
|
|
||||||
# check for sanity of settings concerning the image feature
|
# check for sanity of settings concerning the image feature
|
||||||
[ "${ezjail_imagetype}" -a "${ezjail_fillme}" = "YES" -a ! "${ezjail_imagesize}" ] && exerr "Image jails need an image size."
|
[ "${ezjail_imagetype}" -a "${ezjail_fillme}" = "YES" -a ! "${ezjail_imagesize}" ] && exerr "Image jails need an image size."
|
||||||
@ -168,6 +163,15 @@ create)
|
|||||||
# check for a sane image type
|
# check for a sane image type
|
||||||
case ${ezjail_imagetype} in ""|simple|bde|eli) ;; *) exerr "Usage: `basename -- $0` create [-xi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli] [-C args] jailname jailip";; esac
|
case ${ezjail_imagetype} in ""|simple|bde|eli) ;; *) exerr "Usage: `basename -- $0` create [-xi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli] [-C args] jailname jailip";; esac
|
||||||
|
|
||||||
|
# check for a sane image size and split it up in blocks
|
||||||
|
if [ "${ezjail_imagesize}" ]; then
|
||||||
|
_val=`echo "${ezjail_imagesize}"|tr A-Z a-z|sed -Ees:g:km:g -es:m:kk:g -es:k:*2b:g -es:b:*128w:g -es:w:*4\ :g -e"s:(^|[^0-9])0x:\1\0X:g" -ey:x:*:`
|
||||||
|
_val=`echo $(( ${_val} ))`
|
||||||
|
[ $? -eq 0 ] || exerr "Error: The image size you specified is somehow incomprehensible."
|
||||||
|
ezjail_imageblockcount=$(( ${_val} / 1048576 ))
|
||||||
|
ezjail_imagerestbyte=$(( ${_val} % 1048576 ))
|
||||||
|
fi
|
||||||
|
|
||||||
# check, whether ezjail-update has been called. existence of
|
# check, whether ezjail-update has been called. existence of
|
||||||
# ezjail_jailbase is our indicator
|
# ezjail_jailbase is our indicator
|
||||||
[ -d ${ezjail_jailbase} ] || exerr "Error: base jail does not exist. Please run 'ezjail-admin update' first."
|
[ -d ${ezjail_jailbase} ] || exerr "Error: base jail does not exist. Please run 'ezjail-admin update' first."
|
||||||
@ -229,7 +233,8 @@ create)
|
|||||||
|
|
||||||
# Now create jail disc image
|
# Now create jail disc image
|
||||||
touch "${ezjail_image}"
|
touch "${ezjail_image}"
|
||||||
dd if=/dev/random of="${ezjail_image}" bs="${ezjail_imagesize}" count=1 || exerr "Error: Could not (or not fully) create the image file. You might want to check (and possibly remove) the file ${ezjail_image}. The image size provided was ${ezjail_imagesize}."
|
dd if=/dev/random of="${ezjail_image}" bs=1m count=${ezjail_imageblockcount} || exerr "Error: Could not (or not fully) create the image file. You might want to check (and possibly remove) the file ${ezjail_image}. The image size provided was ${ezjail_imagesize}."
|
||||||
|
( dd if=/dev/random bs=${ezjail_imagerestbytes} count=1 >> "${ezjail_image}" ) || exerr "Error: Could not (or not fully) create the image file. You might want to check (and possibly remove) the file ${ezjail_image}. The image size provided was ${ezjail_imagesize}."
|
||||||
|
|
||||||
# And attach device
|
# And attach device
|
||||||
ezjail_imagedevice=`mdconfig -a -t vnode -f ${ezjail_image}`
|
ezjail_imagedevice=`mdconfig -a -t vnode -f ${ezjail_image}`
|
||||||
@ -334,22 +339,16 @@ create)
|
|||||||
;;
|
;;
|
||||||
######################## ezjail-admin DELETE ########################
|
######################## ezjail-admin DELETE ########################
|
||||||
delete)
|
delete)
|
||||||
shift
|
|
||||||
args=`getopt w $*` || exerr "Usage: `basename -- $0` delete [-w] jailname"
|
|
||||||
|
|
||||||
# Clean variables, prevent polution
|
# Clean variables, prevent polution
|
||||||
unset ezjail_wipeme
|
unset ezjail_wipeme
|
||||||
|
|
||||||
set -- ${args}
|
shift; while getopts :w arg; do case ${arg} in
|
||||||
for arg do
|
w) ezjail_wipeme="YES";;
|
||||||
case ${arg} in
|
?) exerr "Usage: `basename -- $0` delete [-w] jailname";;
|
||||||
-w) ezjail_wipeme="YES"; shift;;
|
esac; done; shift $(( $OPTIND - 1 ))
|
||||||
--) shift; break;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# we need name of jail to vanish
|
# we need name of jail to vanish
|
||||||
[ $# = 1 ] || exerr "Usage: `basename -- $0` delete [-w] jailname"
|
[ $# -eq 1 ] || exerr "Usage: `basename -- $0` delete [-w] jailname"
|
||||||
|
|
||||||
# Get all info we have on that jail
|
# Get all info we have on that jail
|
||||||
fetchjailinfo $1
|
fetchjailinfo $1
|
||||||
@ -376,6 +375,8 @@ delete)
|
|||||||
;;
|
;;
|
||||||
######################## ezjail-admin LIST ########################
|
######################## ezjail-admin LIST ########################
|
||||||
list)
|
list)
|
||||||
|
[ $# -eq 0 ] || exerr "Usage: `basename -- $0` list"
|
||||||
|
|
||||||
ezjail_list=`find -X ${ezjail_prefix}/etc/ezjail/ 2> /dev/null | xargs rcorder | xargs basename -a`
|
ezjail_list=`find -X ${ezjail_prefix}/etc/ezjail/ 2> /dev/null | xargs rcorder | xargs basename -a`
|
||||||
|
|
||||||
printf "%-3s %-5s %-15s %-28s %s\\n" STA JID IP Hostname "Root Directory"
|
printf "%-3s %-5s %-15s %-28s %s\\n" STA JID IP Hostname "Root Directory"
|
||||||
@ -392,23 +393,19 @@ list)
|
|||||||
;;
|
;;
|
||||||
######################## ezjail-admin UPDATE ########################
|
######################## ezjail-admin UPDATE ########################
|
||||||
setup|update)
|
setup|update)
|
||||||
shift
|
|
||||||
args=`getopt ipPs: $*` || exerr "Usage: `basename -- $0` update [-s sourcetree] [-i] [-pP]"
|
|
||||||
|
|
||||||
# Clean variables, prevent polution
|
# Clean variables, prevent polution
|
||||||
unset ezjail_provideports
|
unset ezjail_provideports
|
||||||
ezjail_installaction="world"
|
ezjail_installaction="world"
|
||||||
|
|
||||||
set -- ${args}
|
shift; while getopts :ipPs: arg; do case ${arg} in
|
||||||
for arg do
|
i) ezjail_installaction="installworld";;
|
||||||
case ${arg} in
|
s) ezjail_sourcetree="${OPTARG}";;
|
||||||
-i) ezjail_installaction="installworld"; shift;;
|
p) ezjail_provideports="YES";;
|
||||||
-s) ezjail_sourcetree="$2"; shift 2;;
|
P) ezjail_provideports="YES"; ezjail_installaction="none";;
|
||||||
-p) ezjail_provideports="YES"; shift;;
|
?) exerr "Usage: `basename -- $0` update [-s sourcetree] [-i] [-pP]";;
|
||||||
-P) ezjail_provideports="YES"; ezjail_installaction="none"; shift;;
|
esac; done; shift $(( ${OPTIND} - 1 ))
|
||||||
--) shift; break;;
|
|
||||||
esac
|
[ $# -eq 0 ] || exerr "Usage: `basename -- $0` update [-s sourcetree] [-i] [-pP]"
|
||||||
done
|
|
||||||
|
|
||||||
if [ "${ezjail_installaction}" = "none" ]; then
|
if [ "${ezjail_installaction}" = "none" ]; then
|
||||||
# check, whether ezjail-update has been called. existence of
|
# check, whether ezjail-update has been called. existence of
|
||||||
@ -437,23 +434,19 @@ setup|update)
|
|||||||
;;
|
;;
|
||||||
######################## ezjail-admin INSTALL ########################
|
######################## ezjail-admin INSTALL ########################
|
||||||
install)
|
install)
|
||||||
shift
|
|
||||||
args=`getopt mpsh:r: $*` || exerr "Usage: `basename -- $0` install [-mps] [-h host] [-r release]"
|
|
||||||
|
|
||||||
# Clean variables, prevent polution
|
# Clean variables, prevent polution
|
||||||
unset ezjail_release ezjail_ftphost ezjail_installmanpages ezjail_installports ezjail_installsources ezjail_dir ezjail_reldir
|
unset ezjail_release ezjail_ftphost ezjail_installmanpages ezjail_installports ezjail_installsources ezjail_dir ezjail_reldir
|
||||||
|
|
||||||
set -- ${args}
|
shift; while getopts :mpsh:r: arg; do case ${arg} in
|
||||||
for arg do
|
m) ezjail_installmanpages=" manpages";;
|
||||||
case ${arg} in
|
s) ezjail_installsources=" src";;
|
||||||
-m) ezjail_installmanpages=" manpages"; shift;;
|
p) ezjail_installports="YES";;
|
||||||
-s) ezjail_installsources=" src"; shift;;
|
h) ezjail_ftphost="${OPTARG}";;
|
||||||
-p) ezjail_installports="YES"; shift;;
|
r) ezjail_release="${OPTARG}";;
|
||||||
-h) ezjail_ftphost="$2"; shift 2;;
|
?) exerr "Usage: `basename -- $0` install [-mps] [-h host] [-r release]";;
|
||||||
-r) ezjail_release="$2"; shift 2;;
|
esac; done; shift $(( ${OPTIND} - 1 ))
|
||||||
--) shift; break;;
|
|
||||||
esac
|
[ $# -eq 0 ] || exerr "Usage: `basename -- $0` install [-mps] [-h host] [-r release]";;
|
||||||
done
|
|
||||||
|
|
||||||
ezjail_installarch=`uname -p`
|
ezjail_installarch=`uname -p`
|
||||||
ezjail_ftphost=${ezjail_ftphost:-"ftp.freebsd.org"}
|
ezjail_ftphost=${ezjail_ftphost:-"ftp.freebsd.org"}
|
||||||
@ -518,21 +511,15 @@ install)
|
|||||||
;;
|
;;
|
||||||
######################## ezjail-admin CONFIG ########################
|
######################## ezjail-admin CONFIG ########################
|
||||||
config)
|
config)
|
||||||
shift
|
|
||||||
args=`getopt -r: $*` || exerr "Usage: `basename -- $0` config [-r run|norun] jailname"
|
|
||||||
|
|
||||||
# Clean variables, prevent polution
|
# Clean variables, prevent polution
|
||||||
unset ezjail_setrunnable
|
unset ezjail_setrunnable
|
||||||
|
|
||||||
set -- ${args}
|
shift; while getopts :r: arg; do case ${arg} in
|
||||||
for arg do
|
r) ezjail_setrunnable=${OPTARG};;
|
||||||
case ${arg} in
|
?) exerr "Usage: `basename -- $0` config [-r run|norun] jailname";;
|
||||||
-r) ezjail_setrunnable=$2; shift 2;;
|
esac; done; shift $(( ${OPTIND} - 1 ))
|
||||||
--) shift; break;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
[ $# = 1 ] || exerr "Usage: `basename -- $0` config [-r run|norun] jailname"
|
[ $# -eq 1 ] || exerr "Usage: `basename -- $0` config [-r run|norun] jailname"
|
||||||
|
|
||||||
# Jail name mandatory
|
# Jail name mandatory
|
||||||
fetchjailinfo $1
|
fetchjailinfo $1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user