summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2008-07-10 18:55:39 +0000
committererdgeist <erdgeist@erdgeist.org>2008-07-10 18:55:39 +0000
commit20aae5c18fce425571f60f1f3ca4b18c74302a41 (patch)
tree9df463a8df42e20b2b90456877527b7c16660bcc
parent78416d679d2cfa81f70cbbf41264ef80311ed6e8 (diff)
Add -P -M and -S switches to ezjail-admin install.
Those commands can be used to add ports, sources and man page packages to an already installed base without reinstalling the base. Unify error reporting and try to give the user enough clues as how to go on in case of an error.
-rwxr-xr-xezjail-admin147
-rwxr-xr-xman1/ezjail-admin.14
2 files changed, 82 insertions, 69 deletions
diff --git a/ezjail-admin b/ezjail-admin
index ec375ba..34cbe49 100755
--- a/ezjail-admin
+++ b/ezjail-admin
@@ -37,8 +37,8 @@ ezjail_basesystem="base"
37case `uname -p` in amd64) ezjail_dirlist="${ezjail_dirlist} usr/lib32"; ezjail_basesystem="${ezjail_basesystem} lib32";; esac 37case `uname -p` in amd64) ezjail_dirlist="${ezjail_dirlist} usr/lib32"; ezjail_basesystem="${ezjail_basesystem} lib32";; esac
38 38
39# Synopsis messages 39# Synopsis messages
40ezjail_usage_ezjailadmin="ezjail-admin v3.0b\nUsage: ${ezjail_admin} [archive|config|console|create|delete|install|list|restore|update] {params}" 40ezjail_usage_ezjailadmin="${ezjail_admin} v3.0b\nUsage: ${ezjail_admin} [archive|config|console|create|delete|install|list|restore|update] {params}"
41ezjail_usage_install="Usage: ${ezjail_admin} install [-mps] [-h host] [-r release]" 41ezjail_usage_install="Usage: ${ezjail_admin} install [-mMpPsS] [-h host] [-r release]"
42ezjail_usage_create="Usage: ${ezjail_admin} create [-xbi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli] [-C args] [-a archive] jailname jailip" 42ezjail_usage_create="Usage: ${ezjail_admin} create [-xbi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli] [-C args] [-a archive] jailname jailip"
43ezjail_usage_delete="Usage: ${ezjail_admin} delete [-w] jailname" 43ezjail_usage_delete="Usage: ${ezjail_admin} delete [-w] jailname"
44ezjail_usage_update="Usage: ${ezjail_admin} update [-s sourcetree] [-i] [-pP]" 44ezjail_usage_update="Usage: ${ezjail_admin} update [-s sourcetree] [-i] [-pP]"
@@ -132,12 +132,12 @@ start_stop_jail_by_script () {
132 elif [ -x "${ezjail_prefix}/etc/rc.d/ezjail.sh" ]; then 132 elif [ -x "${ezjail_prefix}/etc/rc.d/ezjail.sh" ]; then
133 (exec "${ezjail_prefix}/etc/rc.d/ezjail.sh" ${ezjail_action} ${ezjail_name}); 133 (exec "${ezjail_prefix}/etc/rc.d/ezjail.sh" ${ezjail_action} ${ezjail_name});
134 else 134 else
135 exerr "Could not find ezjail's rc.d script in ${ezjail_prefix}/etc/rc.d/. You need to ${ezjail_action} ${ezjail_name} by hand." 135 exerr "Error: Could not find ezjail's rc.d script in ${ezjail_prefix}/etc/rc.d/.\n You need to ${ezjail_action} ${ezjail_name} by hand."
136 fi 136 fi
137 137
138 # Check for success of our operation 138 # Check for success of our operation
139 fetchjailinfo ${ezjail_name} 139 fetchjailinfo ${ezjail_name}
140 [ ${ezjail_success_check} "${ezjail_id}" ] || exerr "Error: Could not ${ezjail_action} ${ezjail_name}. You need to ${ezjail_action} it by hand." 140 [ ${ezjail_success_check} "${ezjail_id}" ] || exerr "Error: Could not ${ezjail_action} ${ezjail_name}.\n You need to ${ezjail_action} it by hand."
141} 141}
142 142
143# fetch everything we need to know about an ezjail from config 143# fetch everything we need to know about an ezjail from config
@@ -196,13 +196,13 @@ fetchjailinfo () {
196# fill the base jail - this function is used by install and update 196# fill the base jail - this function is used by install and update
197ezjail_splitworld() { 197ezjail_splitworld() {
198 # Fill basejail from installed world 198 # Fill basejail from installed world
199 cd "${ezjail_jailfull}" || exerr "Cant access temporary Jail directory." 199 cd "${ezjail_jailfull}" || exerr "Error: Cant access temporary Jail directory."
200 200
201 # This mkdir is important, since cpio will create intermediate 201 # This mkdir is important, since cpio will create intermediate
202 # directories with permission 0700 which is bad 202 # directories with permission 0700 which is bad
203 mkdir -p "${ezjail_jailbase}/usr" 203 mkdir -p "${ezjail_jailbase}/usr"
204 for dir in ${ezjail_dirlist}; do 204 for dir in ${ezjail_dirlist}; do
205 find ${dir} | cpio -d -p -v "${ezjail_jailbase}" || exerr "Installation of ${dir} failed." 205 find ${dir} | cpio -d -p -v "${ezjail_jailbase}" || exerr "Error: Installation of ${dir} failed."
206 chflags -R noschg ${dir}; rm -r ${dir}; ln -s /basejail/${dir} ${dir} 206 chflags -R noschg ${dir}; rm -r ${dir}; ln -s /basejail/${dir} ${dir}
207 done 207 done
208 mkdir basejail 208 mkdir basejail
@@ -245,7 +245,7 @@ ezjail_updateports () {
245 [ -d "${ezjail_jailbase}/usr/ports" ] && ezjail_portsnapaction="update" 245 [ -d "${ezjail_jailbase}/usr/ports" ] && ezjail_portsnapaction="update"
246 portsnap -p "${ezjail_jailbase}/usr/ports" ${ezjail_portsnapaction:-"extract"} 246 portsnap -p "${ezjail_jailbase}/usr/ports" ${ezjail_portsnapaction:-"extract"}
247 fi 247 fi
248 [ $? -eq 0 ] || exerr "Updating ports failed." 248 [ $? -eq 0 ] || exerr "Error: Updating ports failed."
249} 249}
250 250
251# Try to fetch the list of releases the server provides 251# Try to fetch the list of releases the server provides
@@ -345,7 +345,7 @@ create)
345 [ "${ezjail_name}" -a "${ezjail_ip}" -a $# -eq 2 ] || exerr ${ezjail_usage_create} 345 [ "${ezjail_name}" -a "${ezjail_ip}" -a $# -eq 2 ] || exerr ${ezjail_usage_create}
346 346
347 # check for sanity of settings concerning the image feature 347 # check for sanity of settings concerning the image feature
348 [ -z "${ezjail_imagetype}" -o "${ezjail_exists}" -o "${ezjail_imagesize}" ] || exerr "Image jails need an image size." 348 [ -z "${ezjail_imagetype}" -o "${ezjail_exists}" -o "${ezjail_imagesize}" ] || exerr "Error: Image jails need an image size."
349 349
350 # check for a sane image type 350 # check for a sane image type
351 case ${ezjail_imagetype} in ""|simple|bde|eli) ;; *) exerr ${ezjail_usage_create};; esac 351 case ${ezjail_imagetype} in ""|simple|bde|eli) ;; *) exerr ${ezjail_usage_create};; esac
@@ -360,10 +360,10 @@ create)
360 360
361 # check, whether ezjail has been set up correctly. existence of 361 # check, whether ezjail has been set up correctly. existence of
362 # ezjail_jailbase is our indicator 362 # ezjail_jailbase is our indicator
363 [ -d "${ezjail_jailbase}" ] || exerr "Error: base jail does not exist. Please run '${ezjail_admin} install' or '${ezjail_admin} update' first." 363 [ -d "${ezjail_jailbase}" ] || exerr "Error: base jail does not exist.\n Please run '${ezjail_admin} install' or '${ezjail_admin} update' first."
364 364
365 # relative paths don't make sense in rc.scripts 365 # relative paths don't make sense in rc.scripts
366 [ "${ezjail_jaildir%%[!/]*}" ] || exerr "Error: Need an absolute path in ezjail_jaildir, it currently is set to: ${ezjail_jaildir}." 366 [ "${ezjail_jaildir%%[!/]*}" ] || exerr "Error: Need an absolute path in ezjail_jaildir.\n It is currently set to: ${ezjail_jaildir}."
367 367
368 # jail names must not irritate file systems, excluding dots from this list 368 # jail names must not irritate file systems, excluding dots from this list
369 # was done intentionally to permit foo.com style directory names, however, 369 # was done intentionally to permit foo.com style directory names, however,
@@ -377,11 +377,11 @@ create)
377 # This scenario really will only lead to real troubles in the 'fulljail' 377 # This scenario really will only lead to real troubles in the 'fulljail'
378 # case, but I should still explain this to the user and not claim that 378 # case, but I should still explain this to the user and not claim that
379 # "an ezjail would already exist" 379 # "an ezjail would already exist"
380 case ${ezjail_hostname} in basejail|newjail|fulljail|flavours|ezjailtemp) exerr "Error: ezjail needs the ${ezjail_hostname} directory for its own administrative purposes. Please rename the ezjail.";; esac 380 case ${ezjail_hostname} in basejail|newjail|fulljail|flavours|ezjailtemp) exerr "Error: Cannot name the jail ${ezjail_hostname}.\n ezjail needs the ${ezjail_hostname} directory for its own administrative purposes.\n Please rename the ezjail.";; esac
381 381
382 # jail names may lead to identical configs, eg. foo.bar.com == foo-bar.com 382 # jail names may lead to identical configs, eg. foo.bar.com == foo-bar.com
383 # so check, whether we might be running into problems 383 # so check, whether we might be running into problems
384 [ -e "${ezjail_config}" -o -e "${ezjail_config}.norun" ] && exerr "Error: an ezjail config already exists at ${ezjail_config}. Please rename the ezjail." 384 if [ -e "${ezjail_config}" -o -e "${ezjail_config}.norun" ] && exerr "Error: An ezjail config already exists at ${ezjail_config}.\n This can happen because ezjail converts non alphanumeric characters in jail names to '_'.\n Please rename the ezjail."
385 385
386 # if jail root specified on command line is not absolute, make it absolute 386 # if jail root specified on command line is not absolute, make it absolute
387 # inside our jail directory 387 # inside our jail directory
@@ -391,22 +391,25 @@ create)
391 # install. Empty root dirs are considered okay, sometimes they are 391 # install. Empty root dirs are considered okay, sometimes they are
392 # mount points to be filled by ezjail. 392 # mount points to be filled by ezjail.
393 [ -d "${ezjail_rootdir}" ] && [ -z "`ls -I ${ezjail_rootdir}`" ] && ezjail_rootdirempty="YES" 393 [ -d "${ezjail_rootdir}" ] && [ -z "`ls -I ${ezjail_rootdir}`" ] && ezjail_rootdirempty="YES"
394 [ -e "${ezjail_rootdir}" -a -z "${ezjail_rootdirempty}" -a -z "${ezjail_exists}" ] && exerr "Error: the specified jail root ${ezjail_rootdir} already exists." 394 [ -e "${ezjail_rootdir}" -a -z "${ezjail_rootdirempty}" -a -z "${ezjail_exists}" ] && exerr "Error: A file or a non empty directory already exists at the specified jail root ${ezjail_rootdir}.\n Maybe you want to '${ezjail_admin} create -x' an existing jail?\n Please specify another jail root with the -r switch."
395 395
396 # if jail root specified on command line does not lie within our jail 396 # if jail root specified on command line does not lie within our jail
397 # directory, we need to create a softlink 397 # directory, we need to create a softlink
398 if [ "${ezjail_rootdir##${ezjail_jaildir}}" = "${ezjail_rootdir}" ]; then 398 if [ "${ezjail_rootdir##${ezjail_jaildir}}" = "${ezjail_rootdir}" ]; then
399 ezjail_softlink=${ezjail_jaildir}/`basename -- "${ezjail_rootdir}"` 399 ezjail_softlink=${ezjail_jaildir}/`basename -- "${ezjail_rootdir}"`
400 [ -e "${ezjail_softlink}" ] && exerr "Error: an ezjail already exists at ${ezjail_softlink}." 400 [ -e "${ezjail_softlink}" ] && exerr "Error: An ezjail already exists at ${ezjail_softlink}.\n Please specify another jail root with the -r switch."
401 fi 401 fi
402 402
403 # do some sanity checks on the selected flavour (if any) 403 # do some sanity checks on the selected flavour (if any)
404 [ "${ezjail_flavour}" -a ! -d "${ezjail_flavours}/${ezjail_flavour}" ] && exerr "Error: Flavour config directory ${ezjail_flavours}/${ezjail_flavour} not found." 404 [ "${ezjail_flavour}" -a ! -d "${ezjail_flavours}/${ezjail_flavour}" ] && exerr "Error: Flavour config directory ${ezjail_flavours}/${ezjail_flavour} not found.\n Refer to ${ezjail_admin}s man page for details on flavours."
405 405
406 # check for restore circumstances, normally this is invoked by the restore command 406 # check for restore circumstances, normally this is invoked by the restore command
407 [ "${ezjail_fromarchive}" -a "${ezjail_exists}" ] && exerr "Error: Cannot restore a jail that exists." 407 [ "${ezjail_fromarchive}" -a "${ezjail_exists}" ] && exerr "Error: You can not restore an archive over an existing jail.\n '${ezjail_admin} delete -w ${ezjail_name}' the old version first."
408 [ "${ezjail_fromarchive}" -a "${ezjail_flavour}" ] && exerr "Error: Cannot apply flavours to a restored jail." 408 [ "${ezjail_fromarchive}" -a "${ezjail_flavour}" ] && exerr "Error: Cannot apply flavours to a jail being restored."
409 [ "${ezjail_fromarchive}" -a "${ezjail_fromarchive}" != "-" -a ! -r "${ezjail_fromarchive}" ] && exerr "Error: Cannot restore from non existing archive: ${ezjail_fromarchive}." 409 [ "${ezjail_fromarchive}" -a "${ezjail_fromarchive}" != "-" -a ! -r "${ezjail_fromarchive}" ] && exerr "Error: No archive found at ${ezjail_fromarchive}."
410
411 # Ensure existence of our control directory
412 mkdir -p "${ezjail_jailcfgs}" || exerr "Error: ezjail can not create its control directory ${ezjail_jailcfgs}."
410 413
411 # 414 #
412 # All sanity checks that may lead to errors are hopefully passed here 415 # All sanity checks that may lead to errors are hopefully passed here
@@ -415,7 +418,7 @@ create)
415 if [ "${ezjail_imagetype}" ]; then 418 if [ "${ezjail_imagetype}" ]; then
416 # Strip trailing slashes from jail root, those would confuse image path 419 # Strip trailing slashes from jail root, those would confuse image path
417 ezjail_image=${ezjail_rootdir%/}; while [ "${ezjail_image}" -a -z "${ezjail_image%%*/}" ]; do ezjail_image=${ezjail_image%/}; done 420 ezjail_image=${ezjail_rootdir%/}; while [ "${ezjail_image}" -a -z "${ezjail_image%%*/}" ]; do ezjail_image=${ezjail_image%/}; done
418 [ "${ezjail_image}" ] || exerr "Error: Could not determine image file name, something is wrong with the jail root: ${ezjail_rootdir}." 421 [ "${ezjail_image}" ] || exerr "Error: Could not determine image file name.\n Something is wrong with the jail root: ${ezjail_rootdir}."
419 422
420 # Location of our image file 423 # Location of our image file
421 ezjail_image="${ezjail_image}.img" 424 ezjail_image="${ezjail_image}.img"
@@ -426,23 +429,23 @@ create)
426 429
427 # If NOT exist, create image 430 # If NOT exist, create image
428 if [ -z "${ezjail_exists}" ]; then 431 if [ -z "${ezjail_exists}" ]; then
429 [ -e "${ezjail_image}" ] && exerr "Error: a file exists at the location ${ezjail_image}, preventing our own image file to be created." 432 [ -e "${ezjail_image}" ] && exerr "Error: A file exists at ${ezjail_image}.\n Won't overwrite an existing image."
430 433
431 # Now create jail disc image 434 # Now create jail disc image
432 touch "${ezjail_image}" 435 touch "${ezjail_image}"
433 echo "Creating jail image ${ezjail_image}. This may take a while." 436 echo "Creating jail image ${ezjail_image}. This may take a while."
434 if [ "${ezjail_imageblockcount}" -gt 0 ]; then 437 if [ "${ezjail_imageblockcount}" -gt 0 ]; then
435 dd if="${ezjail_sourcedevice}" 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}." 438 dd if="${ezjail_sourcedevice}" of="${ezjail_image}" bs=1m count=${ezjail_imageblockcount} || exerr "Error: Could not (or not fully) create the image file.\n You might want to check (and possibly remove) the file ${ezjail_image}.\n The image size provided was ${ezjail_imagesize}."
436 fi 439 fi
437 if [ "${ezjail_imagerestbytes}" -gt 0 ]; then 440 if [ "${ezjail_imagerestbytes}" -gt 0 ]; then
438 ( dd if="${ezjail_sourcedevice}" 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}." 441 ( dd if="${ezjail_sourcedevice}" bs=${ezjail_imagerestbytes} count=1 >> "${ezjail_image}" ) || exerr "Error: Could not (or not fully) create the image file.\n You might want to check (and possibly remove) the file ${ezjail_image}.\n The image size provided was ${ezjail_imagesize}."
439 fi 442 fi
440 443
441 # Attach device 444 # Attach device
442 ezjail_imagedevice=`mdconfig -a -t vnode -f "${ezjail_image}"` 445 ezjail_imagedevice=`mdconfig -a -t vnode -f "${ezjail_image}"`
443 ezjail_devicelink="${ezjail_rootdir}.device" 446 ezjail_devicelink="${ezjail_rootdir}.device"
444 447
445 [ $? -eq 0 ] || detach_images || exerr "Error: Could not attach image device. (Command failed was 'mdconfig -a -t vnode -f ${ezjail_image}')" 448 [ $? -eq 0 ] || detach_images || exerr "Error: Could not attach image device.\n Command failed was 'mdconfig -a -t vnode -f ${ezjail_image}'."
446 fi 449 fi
447 450
448 case ${ezjail_imagetype} in 451 case ${ezjail_imagetype} in
@@ -481,7 +484,10 @@ create)
481 mkdir -p "${ezjail_rootdir}" || detach_images || exerr "Error: Could not create jail root mount point ${ezjail_rootdir}." 484 mkdir -p "${ezjail_rootdir}" || detach_images || exerr "Error: Could not create jail root mount point ${ezjail_rootdir}."
482 mount "/dev/${ezjail_device}" "${ezjail_rootdir}" || detach_images || exerr "Error: Could not mount /dev/${ezjail_device} to ${ezjail_root}." 485 mount "/dev/${ezjail_device}" "${ezjail_rootdir}" || detach_images || exerr "Error: Could not mount /dev/${ezjail_device} to ${ezjail_root}."
483 else 486 else
484 [ -e "${ezjail_rootdir}" -a ! -d "${ezjail_rootdir}" ] && exerr "Error: Could not create mount point for your jail image. A file exists at its location. (For existing image jails, call this tool without the .img suffix when specifying jail root.)" 487 if [ -e "${ezjail_rootdir}" -a ! -d "${ezjail_rootdir}" ]; then
488 [ "${ezjail_rootdir%%*.img}" ] || exerr "Error: Could not create mount point for your jails image.\n A file exists at its location.\n Try '${ezjail_admin} create -x -r ${ezjail_rootdir%%.img} ${ezjail_name} ${ezjail_ip}' instead."
489 exerr "Error: Could not create mount point for your jails image.\n A file exists at its location."
490 fi
485 [ -d "${ezjail_rootdir}" ] || mkdir -p "${ezjail_rootdir}" 491 [ -d "${ezjail_rootdir}" ] || mkdir -p "${ezjail_rootdir}"
486 fi 492 fi
487 fi 493 fi
@@ -510,7 +516,6 @@ create)
510 516
511 # now, where everything seems to have gone right, create control file in 517 # now, where everything seems to have gone right, create control file in
512 # ezjails config dir 518 # ezjails config dir
513 mkdir -p "${ezjail_jailcfgs}" || exerr "Error: can't create ezjails control directory (${ezjail_jailcfgs})."
514 ( 519 (
515 if [ "${ezjail_fromarchive_config}" ]; then 520 if [ "${ezjail_fromarchive_config}" ]; then
516 grep -E ^\# ${ezjail_fromarchive_config}; echo 521 grep -E ^\# ${ezjail_fromarchive_config}; echo
@@ -595,7 +600,7 @@ delete)
595 600
596 if [ "${ezjail_id}" ]; then 601 if [ "${ezjail_id}" ]; then
597 # if jail is still running, refuse to go any further 602 # if jail is still running, refuse to go any further
598 [ "${ezjail_forcestop}" ] || exerr "Error: Jail appears to be still running, stop it first (or use delete -f for force stop)." 603 [ "${ezjail_forcestop}" ] || exerr "Error: Jail appears to be still running.\n '${ezjail_admin} stop ${ezjail_name}' it first or use '${ezjail_admin} delete -f ${ezjail_name}' to force stop."
599 604
600 # This one will also exerr on failure 605 # This one will also exerr on failure
601 start_stop_jail_by_script stop 606 start_stop_jail_by_script stop
@@ -603,13 +608,13 @@ delete)
603 608
604 if [ "${ezjail_attached}" ]; then 609 if [ "${ezjail_attached}" ]; then
605 # if jail is attached and detach is not forced, refuse to go any further 610 # if jail is attached and detach is not forced, refuse to go any further
606 [ "${ezjail_forcestop}" ] || exerr "Error: Jail image file ${ezjail_image} is attached as ${ezjail_device}. '${ezjail_admin} config -i detach' it first, or (or use delete -f for force detach)." 611 [ "${ezjail_forcestop}" ] || exerr "Error: Jail image file ${ezjail_image} is attached as ${ezjail_device}.\n '${ezjail_admin} config -i detach ${ezjail_name}' it first, or use '${ezjail_admin} delete -f ${ezjail_name}' to force detach."
607 612
608 detach_images keep 613 detach_images keep
609 614
610 # See, if it successfully detached 615 # See, if it successfully detached
611 fetchjailinfo ${ezjail_name} 616 fetchjailinfo ${ezjail_name}
612 [ "${ezjail_attached}" ] && exerr "Error: Could not detach ${ezjail_name}. You need to detach it by hand." 617 [ "${ezjail_attached}" ] && exerr "Error: Could not detach ${ezjail_name}.\n You need to detach it by hand."
613 fi 618 fi
614 619
615 # now we know everything we need to let the jail be gone. remove entry 620 # now we know everything we need to let the jail be gone. remove entry
@@ -668,21 +673,21 @@ setup|update)
668 if [ "${ezjail_installaction}" = "none" ]; then 673 if [ "${ezjail_installaction}" = "none" ]; then
669 # check, whether ezjail has been setup correctly. existence of 674 # check, whether ezjail has been setup correctly. existence of
670 # ezjail_jailbase is our indicator 675 # ezjail_jailbase is our indicator
671 [ -d "${ezjail_jailbase}" ] || exerr "Error: base jail does not exist. You cannot fill base jails ports tree before creating it. Please run '${ezjail_admin} update' or '${ezjail_admin} install' first." 676 [ -d "${ezjail_jailbase}" ] || exerr "Error: base jail does not exist.\n You cannot fill base jails ports tree before creating it.\n Please run '${ezjail_admin} update' or '${ezjail_admin} install' first."
672 else 677 else
673 # Bump the user for some of the most common errors 678 # Bump the user for some of the most common errors
674 [ -d "${ezjail_sourcetree}" ] || exerr "Cannot find your copy of the FreeBSD source tree in ${ezjail_sourcetree}." 679 [ -d "${ezjail_sourcetree}" ] || exerr "Error: Cannot find your copy of the FreeBSD source tree in ${ezjail_sourcetree}.\n Consider using '${ezjail_admin} install' to create the base jail from an ftp server."
675 [ -e "${ezjail_sourcetree}/Makefile" ] || exerr "Your source tree in ${ezjail_sourcetree} seems to be incomplete (Makefile missing)." 680 [ -e "${ezjail_sourcetree}/Makefile" ] || exerr "Error: Your source tree in ${ezjail_sourcetree} seems to be incomplete (Makefile is missing)."
676 [ "`sysctl -n kern.securelevel`" -gt 0 ] && exerr "You're running in a secure level higher than 0. ezjail will not run correctly." 681 [ "`sysctl -n kern.securelevel`" -gt 0 ] && exerr "Error: You are running in a secure level higher than 0.\n ${ezjail_admin} will not update correctly.\n Please reboot into a lower secure level."
677 682
678 # Normally fulljail should be renamed by past ezjail-admin commands. 683 # Normally fulljail should be renamed by past ezjail-admin commands.
679 # However those may have failed 684 # However those may have failed
680 [ -d "${ezjail_jailfull}" ] && chflags -R noschg "${ezjail_jailfull}" && rm -rf "${ezjail_jailfull}" 685 [ -d "${ezjail_jailfull}" ] && chflags -R noschg "${ezjail_jailfull}" && rm -rf "${ezjail_jailfull}"
681 mkdir -p "${ezjail_jailfull}" || exerr "Cannot create temporary Jail directory." 686 mkdir -p "${ezjail_jailfull}" || exerr "Error: Cannot create temporary Jail directory."
682 687
683 # make and setup our world, then split basejail and newjail 688 # make and setup our world, then split basejail and newjail
684 cd "${ezjail_sourcetree}" && env DESTDIR="${ezjail_jailfull}" make ${ezjail_installaction} || exerr "make ${ezjail_installaction} failed." 689 cd "${ezjail_sourcetree}" && env DESTDIR="${ezjail_jailfull}" make ${ezjail_installaction} || exerr "Error: The command 'make ${ezjail_installaction}' failed.\n Refer to the error report(s) above."
685 cd "${ezjail_sourcetree}/etc" && env DESTDIR="${ezjail_jailfull}" make distribution || exerr "make distribution failed." 690 cd "${ezjail_sourcetree}/etc" && env DESTDIR="${ezjail_jailfull}" make distribution || exerr "Error: The command 'make distribution' failed.\n Refer to the error report(s) above."
686 ezjail_splitworld 691 ezjail_splitworld
687 692
688 fi # installaction="none" 693 fi # installaction="none"
@@ -696,10 +701,13 @@ install)
696 # Clean variables, prevent polution 701 # Clean variables, prevent polution
697 unset ezjail_release ezjail_installmanpages ezjail_installports ezjail_installsources ezjail_dir ezjail_reldir ezjail_ftpserverqueried 702 unset ezjail_release ezjail_installmanpages ezjail_installports ezjail_installsources ezjail_dir ezjail_reldir ezjail_ftpserverqueried
698 703
699 shift; while getopts :mpsh:r: arg; do case ${arg} in 704 shift; while getopts :mMpPsSh:r: arg; do case ${arg} in
700 m) ezjail_installmanpages=" manpages";; 705 m) ezjail_installmanpages=" manpages";;
706 M) ezjail_installmanpages=" manpages"; unset ezjail_basesystem;;
701 s) ezjail_installsources=" src";; 707 s) ezjail_installsources=" src";;
708 S) ezjail_installsources=" src"; unset ezjail_basesystem;;
702 p) ezjail_installports="YES";; 709 p) ezjail_installports="YES";;
710 P) ezjail_installports="YES"; unset ezjail_basesystem;;
703 h) ezjail_ftphost=${OPTARG};; 711 h) ezjail_ftphost=${OPTARG};;
704 r) ezjail_release=${OPTARG};; 712 r) ezjail_release=${OPTARG};;
705 ?) exerr ${ezjail_usage_install};; 713 ?) exerr ${ezjail_usage_install};;
@@ -713,7 +721,10 @@ install)
713 ezjail_dir=${ezjail_ftphost#file://} 721 ezjail_dir=${ezjail_ftphost#file://}
714 [ "${ezjail_dir%%[!/]*}" ] || ezjail_reldir=`pwd -P` 722 [ "${ezjail_dir%%[!/]*}" ] || ezjail_reldir=`pwd -P`
715 723
716 [ "`sysctl -n kern.securelevel`" -gt 0 ] && exerr "You're running in a secure level higher than 0. ezjail will not run correctly." 724 [ "`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."
725
726 # Check for basejail when not installing base jail
727 [ "${ezjail_basesystem}" -o -d "${ezjail_jailbase}" ] || exerr "Error: The basejail does not exist.\n You cannot install distribution packages before creating ezjails environment.\n Please run '${ezjail_admin} update' or '${ezjail_admin} install' using lower case parameters first."
717 728
718 # ftp servers normally wont provide non-RELEASE-builds 729 # ftp servers normally wont provide non-RELEASE-builds
719 if [ -z "${ezjail_release}" -a "${ezjail_dir}" = "${ezjail_ftphost}" ]; then 730 if [ -z "${ezjail_release}" -a "${ezjail_dir}" = "${ezjail_ftphost}" ]; then
@@ -731,7 +742,7 @@ install)
731 # Normally fulljail should be renamed by past ezjail-admin commands. 742 # Normally fulljail should be renamed by past ezjail-admin commands.
732 # However those may have failed 743 # However those may have failed
733 [ -d "${ezjail_jailfull}" ] && chflags -R noschg "${ezjail_jailfull}" && rm -rf "${ezjail_jailfull}" 744 [ -d "${ezjail_jailfull}" ] && chflags -R noschg "${ezjail_jailfull}" && rm -rf "${ezjail_jailfull}"
734 mkdir -p "${ezjail_jailfull}" || exerr "Cannot create temporary Jail directory." 745 mkdir -p "${ezjail_jailfull}" || exerr "Error: Cannot create temporary jail directory."
735 DESTDIR=${ezjail_jailfull} 746 DESTDIR=${ezjail_jailfull}
736 747
737 rm -rf "${ezjail_jailtemp}" 748 rm -rf "${ezjail_jailtemp}"
@@ -740,13 +751,13 @@ install)
740 # The first case means, that a remote host has been specified. 751 # The first case means, that a remote host has been specified.
741 if [ "${ezjail_dir}" = "${ezjail_ftphost}" ]; then 752 if [ "${ezjail_dir}" = "${ezjail_ftphost}" ]; then
742 # Create and try to access temp dir 753 # Create and try to access temp dir
743 mkdir -p "${ezjail_jailtemp}" || exerr "Could not create temporary base jail directory ${ezjail_jailtemp}." 754 mkdir -p "${ezjail_jailtemp}" || exerr "Error: Could not create temporary base jail directory ${ezjail_jailtemp}."
744 cd "${ezjail_jailtemp}" || exerr "Could not cd to ${ezjail_jailtemp}." 755 cd "${ezjail_jailtemp}" || exerr "Error: Could not cd to ${ezjail_jailtemp}."
745 756
746 # Try all paths as stolen from sysinstall, break on success. 757 # Try all paths as stolen from sysinstall, break on success.
747 for ezjail_path in pub/FreeBSD/releases pub/FreeBSD/snapshot pub/FreeBSD releases snapshots NO; do 758 for ezjail_path in pub/FreeBSD/releases pub/FreeBSD/snapshot pub/FreeBSD releases snapshots NO; do
748 if [ "${ezjail_path}" = "NO" ]; then 759 if [ "${ezjail_path}" = "NO" ]; then
749 echo -e "\nCould not fetch ${pkg} from ${ezjail_ftphost}.\nMaybe your release (${ezjail_release}) is specified incorrectly or the host ${ezjail_ftphost} does not provide that release build.\nUse the -r option to specify an existing release or the -h option to specify an alternative ftp server." >&2 760 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
750 [ "${ezjail_ftpserverqueried}" ] || ezjail_queryftpserver 761 [ "${ezjail_ftpserverqueried}" ] || ezjail_queryftpserver
751 exit 1 762 exit 1
752 fi 763 fi
@@ -759,19 +770,19 @@ install)
759 [ "${pkg}" = "base" ] && echo "Ignore the next question, ezjail answers it for you." 770 [ "${pkg}" = "base" ] && echo "Ignore the next question, ezjail answers it for you."
760 set -- all 771 set -- all
761 [ -f install.sh ] && yes | . install.sh 772 [ -f install.sh ] && yes | . install.sh
762 [ $? -eq 0 ] || exerr "Package install script for ${pkg} failed." 773 [ $? -eq 0 ] || exerr "Error: Package install script for ${pkg} failed."
763 774
764 rm -rf "${ezjail_jailtemp}" 775 rm -rf "${ezjail_jailtemp}"
765 else 776 else
766 cd "${ezjail_reldir}/${ezjail_dir}/${pkg}" || exerr "Could not cd to ${ezjail_dir}." 777 cd "${ezjail_reldir}/${ezjail_dir}/${pkg}" || exerr "Error: Could not cd to ${ezjail_dir}."
767 set -- all 778 set -- all
768 [ -f install.sh ] && yes | . install.sh 779 [ -f install.sh ] && yes | . install.sh
769 [ $? -eq 0 ] || exerr "Package install script for ${pkg} failed." 780 [ $? -eq 0 ] || exerr "Error: Package install script for ${pkg} failed."
770 fi 781 fi
771 done 782 done
772 783
773 # Split basejail and newjail 784 # Split basejail and newjail
774 ezjail_splitworld 785 [ "${ezjail_basesystem}" ] && ezjail_splitworld
775 786
776 # Fill ports, if requested 787 # Fill ports, if requested
777 [ "${ezjail_installports}" ] && ezjail_updateports 788 [ "${ezjail_installports}" ] && ezjail_updateports
@@ -782,7 +793,7 @@ install)
782 [ -x "${ezjail_prefix}/etc/rc.d/ezjail" ] && exec "${ezjail_prefix}/etc/rc.d/ezjail" $@ 793 [ -x "${ezjail_prefix}/etc/rc.d/ezjail" ] && exec "${ezjail_prefix}/etc/rc.d/ezjail" $@
783 [ -x "${ezjail_prefix}/etc/rc.d/ezjail.sh" ] && exec "${ezjail_prefix}/etc/rc.d/ezjail.sh" $@ 794 [ -x "${ezjail_prefix}/etc/rc.d/ezjail.sh" ] && exec "${ezjail_prefix}/etc/rc.d/ezjail.sh" $@
784 795
785 exerr "Could not find ezjail's rc.d script in ${ezjail_prefix}/etc/rc.d/. You need to type it the long way." 796 exerr "Error: Could not find ezjail's rc.d script in ${ezjail_prefix}/etc/rc.d/.\n You need to type it the long way."
786 ;; 797 ;;
787######################## ezjail-admin CONSOLE ######################## 798######################## ezjail-admin CONSOLE ########################
788console) 799console)
@@ -808,7 +819,7 @@ console)
808 if [ -z "${ezjail_id}" ]; then 819 if [ -z "${ezjail_id}" ]; then
809 820
810 # If force start is requested, try that 821 # If force start is requested, try that
811 [ "$ezjail_forcestart}" ] || exerr "Error: Jail ${ezjail_name} appears not to be running, start it first (or use console -f for force start)." 822 [ "$ezjail_forcestart}" ] || exerr "Error: Jail ${ezjail_name} appears not to be running\n Start it first, or use '${ezjail_admin} console -f ${ezjail_name}' to force start."
812 823
813 # This one will also exerr on failure 824 # This one will also exerr on failure
814 start_stop_jail_by_script start 825 start_stop_jail_by_script start
@@ -839,13 +850,13 @@ archive)
839 ezjail_archivedir=${ezjail_archivedir:-`pwd -P`} 850 ezjail_archivedir=${ezjail_archivedir:-`pwd -P`}
840 851
841 # Will not backup more than one jail per archive 852 # Will not backup more than one jail per archive
842 [ "${ezjail_archive}" -a "${ezjail_archivealljails}" ] && exerr "Error: Must not specify an archive location for multiple archives." 853 [ "${ezjail_archive}" -a "${ezjail_archivealljails}" ] && exerr "Error: Must not specify an archive location for multiple archives.\n Can not archive multiple jails into one archive."
843 854
844 # Will not backup more than one jail per archive 855 # Will not backup more than one jail per archive
845 [ $# -gt 1 -a "${ezjail_archive}" ] && exerr "Error: Must not specify an archive location for multiple archives." 856 [ $# -gt 1 -a "${ezjail_archive}" ] && exerr "Error: Must not specify an archive location for multiple archives.\n Can not archive multiple jails into one archive."
846 857
847 # Either all or only some. Decide. 858 # Either all or only some. Decide.
848 [ $# -gt 0 -a "${ezjail_archivealljails}" ] && exerr "Error: Must not specify an ezjail to backup with -A." 859 [ $# -gt 0 -a "${ezjail_archivealljails}" ] && exerr "Error: Must not specify an ezjail to backup with -A.\n Please use either '${ezjail_admin} archive -A' or '${ezjail_admin} archive $*'."
849 860
850 # Fetch list of all ezjails 861 # Fetch list of all ezjails
851 [ "${ezjail_archivealljails}" -a -d "${ezjail_prefix}/etc/ezjail/" ] && cd "${ezjail_prefix}/etc/ezjail/" && set - `ls | xargs rcorder` 862 [ "${ezjail_archivealljails}" -a -d "${ezjail_prefix}/etc/ezjail/" ] && cd "${ezjail_prefix}/etc/ezjail/" && set - `ls | xargs rcorder`
@@ -861,7 +872,7 @@ archive)
861 872
862 # If jail is still running, refuse to go any further - unless forced 873 # If jail is still running, refuse to go any further - unless forced
863 if [ "${ezjail_id}" -a -z "${ezjail_force}" ]; then 874 if [ "${ezjail_id}" -a -z "${ezjail_force}" ]; then
864 echo "Warning: Jail ${ezjail_name} appears to be still running, stop it first or [-f]orce archiving." 875 echo "Warning: Jail ${ezjail_name} appears to be still running.\n Stop it first, or use '${ezjail_admin} -f ${ezjail_name}' to force archiving."
865 continue 876 continue
866 fi 877 fi
867 878
@@ -869,11 +880,11 @@ archive)
869 if [ "${ezjail_imagetype}" -a -z "${ezjail_attached}" ]; then 880 if [ "${ezjail_imagetype}" -a -z "${ezjail_attached}" ]; then
870 if [ "${ezjail_attachblocking}" ]; then 881 if [ "${ezjail_attachblocking}" ]; then
871 echo "Warning: Jail ${ezjail_name} is an image jail and can not be attached automatically." 882 echo "Warning: Jail ${ezjail_name} is an image jail and can not be attached automatically."
872 echo " Use ezjail-admin config -i attach ${ezjail_name} to attach it first." 883 echo " Use '${ezjail_admin} config -i attach ${ezjail_name}' to attach it first."
873 continue 884 continue
874 fi 885 fi
875 mount_images 886 mount_images
876 ezjail_imagesize=-`stat -Lf %z ${ezjail_image}` 887 ezjail_imagesize=-`stat -Lf %z "${ezjail_image}"`
877 fi 888 fi
878 889
879 # This one goes into archive to identify jail by name and restore date 890 # This one goes into archive to identify jail by name and restore date
@@ -905,7 +916,7 @@ archive)
905 916
906 [ -f "/etc/fstab.${ezjail_safename}" ] && ezjail_addfiles=/etc/fstab.${ezjail_safename} 917 [ -f "/etc/fstab.${ezjail_safename}" ] && ezjail_addfiles=/etc/fstab.${ezjail_safename}
907 918
908 cd "${ezjail_rootdir}" || exerr "Error: can't cd to ${ezjail_root}." 919 cd "${ezjail_rootdir}" || exerr "Error: Can't cd to ${ezjail_root}."
909 pax -wzXt -x ustar ${ezjail_archive_opt} \ 920 pax -wzXt -x ustar ${ezjail_archive_opt} \
910 -s:"^[^\\.].*/${ezjail_safename}\$":prop.ezjail-${ezjail_archive_tag}: \ 921 -s:"^[^\\.].*/${ezjail_safename}\$":prop.ezjail-${ezjail_archive_tag}: \
911 -s:"^[^\\.].*/${ezjail_safename}.norun\$":prop.ezjail-${ezjail_archive_tag}.norun: \ 922 -s:"^[^\\.].*/${ezjail_safename}.norun\$":prop.ezjail-${ezjail_archive_tag}.norun: \
@@ -919,10 +930,10 @@ archive)
919 [ "${ezjail_imagesize}" ] && detach_images keep 930 [ "${ezjail_imagesize}" ] && detach_images keep
920 931
921 # An error on a jail not running is bad 932 # An error on a jail not running is bad
922 [ ${ezjail_paxresult} -eq 0 -o "${ezjail_force}" ] || exerr "Error: Archiving jail failed. You might want to check ${ezjail_archive}." 933 [ ${ezjail_paxresult} -eq 0 -o "${ezjail_force}" ] || exerr "Error: Archiving jail failed.\n You might want to check and remove ${ezjail_archive}."
923 934
924 # When archiving a running jail, some errors might occur 935 # When archiving a running jail, some errors might occur
925 [ ${ezjail_paxresult} -eq 0 ] || echo "Warning: Archiving jail ${ezjail_name} was not completely successful. For a running jail this is not unusual. You might want to check ${ezjail_archive}." 936 [ ${ezjail_paxresult} -eq 0 ] || echo "Warning: Archiving jail ${ezjail_name} was not completely successful. For a running jail this is not unusual."
926 937
927 unset ezjail_archive ezjail_archive_opt ezjail_addfiles 938 unset ezjail_archive ezjail_archive_opt ezjail_addfiles
928 done 939 done
@@ -947,7 +958,7 @@ restore)
947 unset ezjail_safename ezjail_imagedata ezjail_nameprop 958 unset ezjail_safename ezjail_imagedata ezjail_nameprop
948 959
949 # if archive location is absolute and doesn't exist, fail 960 # if archive location is absolute and doesn't exist, fail
950 [ "${ezjail_fromarchive%%[!/]*}" -a ! -f "${ezjail_fromarchive}" ] && exerr "Error: File for archive ${ezjail_fromarchive} not found." 961 [ "${ezjail_fromarchive%%[!/]*}" -a ! -f "${ezjail_fromarchive}" ] && exerr "Error: Archive ${ezjail_fromarchive} not found."
951 if [ -z "${ezjail_fromarchive%%[!/]*}" ]; then 962 if [ -z "${ezjail_fromarchive%%[!/]*}" ]; then
952 # Try archive location 963 # Try archive location
953 if [ -r "${ezjail_archivedir}/${ezjail_fromarchive}" ]; then 964 if [ -r "${ezjail_archivedir}/${ezjail_fromarchive}" ]; then
@@ -969,8 +980,8 @@ restore)
969 # 980 #
970 # However, this does not protect against admins transporting 981 # However, this does not protect against admins transporting
971 # archives over insecure lines over the net. 982 # archives over insecure lines over the net.
972 [ `stat -f %u "${ezjail_fromarchive}"` -eq 0 ] || exerr "Error: Insecure ownership of archive ${ezjail_fromarchive}. Please check the file and chown it to root if you trust its source." 983 [ `stat -f %u "${ezjail_fromarchive}"` -eq 0 ] || exerr "Error: Insecure ownership of archive ${ezjail_fromarchive}.\n Please check the file and chown it to root if you trust its source."
973 [ $(( `stat -f %OLp "${ezjail_fromarchive}"` & 0022 )) -eq 0 ] || exerr "Error: Insecure permissions for archive ${ezjail_fromarchive}. Please check the file and fix permission (chmod og-w) if you trust its source." 984 [ $(( `stat -f %OLp "${ezjail_fromarchive}"` & 0022 )) -eq 0 ] || exerr "Error: Insecure permissions for archive ${ezjail_fromarchive}.\n Please check the file and fix permission (chmod og-w) if you trust its source."
974 985
975 ezjail_nameprop=`pax -zn -f ${ezjail_fromarchive} prop.ezjail-\*` 986 ezjail_nameprop=`pax -zn -f ${ezjail_fromarchive} prop.ezjail-\*`
976 [ $? -eq 0 -a "${ezjail_nameprop}" ] || exerr "Error: File ${ezjail_fromarchive} is not an ezjail archive." 987 [ $? -eq 0 -a "${ezjail_nameprop}" ] || exerr "Error: File ${ezjail_fromarchive} is not an ezjail archive."
@@ -987,8 +998,8 @@ restore)
987 998
988 # Catch all errors that will likely create a broken backup 999 # Catch all errors that will likely create a broken backup
989 [ "${ezjail_safename}" -a "${ezjail_safename}" != "${ezjail_nameprop_safename}" ] && exerr "Error: Archive name ${ezjail_fromarchive} does not match archived jail ${ezjail_nameprop_safename}." 1000 [ "${ezjail_safename}" -a "${ezjail_safename}" != "${ezjail_nameprop_safename}" ] && exerr "Error: Archive name ${ezjail_fromarchive} does not match archived jail ${ezjail_nameprop_safename}."
990 [ "${ezjail_hsname}" != "${ezjail_nameprop_hsname}" -a -z "${ezjail_forcerestore}" ] && exerr "Error: Archive was created on host named ${ezjail_nameprop_hsname}. Consider using \"ezjail-admin create -a\" when migrating ezjails or -f to force restore." 1001 [ "${ezjail_hsname}" != "${ezjail_nameprop_hsname}" -a -z "${ezjail_forcerestore}" ] && exerr "Error: Archive was created on host named ${ezjail_nameprop_hsname}.\n Consider using '${ezjail_admin} create -a ${ezjail_fromarchive}' when migrating ezjails, or '${ezjail_admin} restore -f ${ezjail_fromarchive}' to force restore."
991 [ "${ezjail_hscpu}" != "${ezjail_nameprop_hscpu}" -a -z "${ezjail_forcerestore}" ] && exerr "Error: Archive was created on a different CPU. Can not restore. Consider using \"ezjail-admin create -a\" when migrating ezjails or -f to force restore." 1002 [ "${ezjail_hscpu}" != "${ezjail_nameprop_hscpu}" -a -z "${ezjail_forcerestore}" ] && exerr "Error: Archive was created on a different CPU. Can not restore.\n Consider using '${ezjail_admin} create -a ${ezjail_fromarchive}' when migrating ezjails, or '${ezjail_admin} restore -f ${ezjail_fromarchive}' to force restore."
992 1003
993 # Save config to tempfile and source it 1004 # Save config to tempfile and source it
994 ezjail_config=`mktemp /tmp/ezjail.prop.XXXXXXXX` 1005 ezjail_config=`mktemp /tmp/ezjail.prop.XXXXXXXX`
@@ -997,10 +1008,10 @@ restore)
997 fetchjailinfo ${ezjail_safename} ${ezjail_config} 1008 fetchjailinfo ${ezjail_safename} ${ezjail_config}
998 1009
999 # Now all parameters are here, invoke ezjail-admin create 1010 # Now all parameters are here, invoke ezjail-admin create
1000 [ "${ezjail_rootdir}" -a "${ezjail_ip}" -a "${ezjail_hostname}" ] || exerr "Error: Archive does not contain a valid ezjail properties file." 1011 [ "${ezjail_rootdir}" -a "${ezjail_ip}" -a "${ezjail_hostname}" ] || exerr "Error: Archive does not contain a valid ezjail properties file.\n Some jails properties are missing."
1001 [ "${ezjail_imagetype}" ] && ezjail_imagedata="-c ${ezjail_imagetype} -C '${ezjail_attachparams}' -s ${ezjail_nameprop_imgagesize}" 1012 [ "${ezjail_imagetype}" ] && ezjail_imagedata="-c ${ezjail_imagetype} -C '${ezjail_attachparams}' -s ${ezjail_nameprop_imgagesize}"
1002 1013
1003 $0 create -a "${ezjail_fromarchive}" -A "${ezjail_config}" ${ezjail_imagedata} -r "${ezjail_rootdir}" "${ezjail_hostname}" "${ezjail_ip}" || exerr "Error: create failed." 1014 $0 create -a "${ezjail_fromarchive}" -A "${ezjail_config}" ${ezjail_imagedata} -r "${ezjail_rootdir}" "${ezjail_hostname}" "${ezjail_ip}" || exerr "Error: Create failed."
1004 rm -f "${ezjail_config}" 1015 rm -f "${ezjail_config}"
1005 1016
1006 done 1017 done
@@ -1031,10 +1042,10 @@ config)
1031 # Do we want a new name for our jail? 1042 # Do we want a new name for our jail?
1032 if [ "${ezjail_new_name}" ]; then 1043 if [ "${ezjail_new_name}" ]; then
1033 # if jail is still running, refuse to go any further 1044 # if jail is still running, refuse to go any further
1034 [ "${ezjail_id}" ] && exerr "Error: Jail appears to be still running, stop it first." 1045 [ "${ezjail_id}" ] && exerr "Error: Jail appears to be still running.\n '${ezjail_admin} stop ${ezjail_name}' it first ."
1035 1046
1036 # Cannot rename an attached jail 1047 # Cannot rename an attached jail
1037 [ "${ezjail_attached}" ] && exerr "Error: Jail image file ${ezjail_image} is attached as ${ezjail_device}. '${ezjail_admin} config -i detach' it first." 1048 [ "${ezjail_attached}" ] && exerr "Error: Jail image file ${ezjail_image} is attached as ${ezjail_device}.\n '${ezjail_admin} config -i detach ${ezjail_name}' it first."
1038 1049
1039 # The new values for the jail 1050 # The new values for the jail
1040 ezjail_new_hostname=`echo -n ${ezjail_new_name} | tr '/~' '__'` 1051 ezjail_new_hostname=`echo -n ${ezjail_new_name} | tr '/~' '__'`
@@ -1060,11 +1071,11 @@ config)
1060 # This scenario really will only lead to real troubles in the 'fulljail' 1071 # This scenario really will only lead to real troubles in the 'fulljail'
1061 # case, but I should still explain this to the user and not claim that 1072 # case, but I should still explain this to the user and not claim that
1062 # "an ezjail would already exist" 1073 # "an ezjail would already exist"
1063 case ${ezjail_new_hostname} in basejail|newjail|fulljail|flavours|ezjailtemp) exerr "Error: ezjail needs the ${ezjail_new_hostname} directory for its own administrative purposes. Please rename the ezjail.";; esac 1074 case ${ezjail_new_hostname} in basejail|newjail|fulljail|flavours|ezjailtemp) exerr "Error: ezjail needs the ${ezjail_new_hostname} directory for its own administrative purposes.\n Please chose another name.";; esac
1064 1075
1065 # jail names may lead to identical configs, eg. foo.bar.com == foo-bar.com 1076 # jail names may lead to identical configs, eg. foo.bar.com == foo-bar.com
1066 # so check, whether we might be running into problems 1077 # so check, whether we might be running into problems
1067 [ -e "${ezjail_new_config}" -o -e "${ezjail_new_config}.norun" ] && exerr "Error: an ezjail config already exists at ${ezjail_new_config}. Please rename the ezjail." 1078 [ -e "${ezjail_new_config}" -o -e "${ezjail_new_config}.norun" ] && exerr "Error: An ezjail config already exists at ${ezjail_new_config}.\n Please chose another name."
1068 1079
1069 # since we just used the old rootdir prefix and added the new hostname, 1080 # since we just used the old rootdir prefix and added the new hostname,
1070 # we might end up at an existing directory 1081 # we might end up at an existing directory
@@ -1153,7 +1164,7 @@ config)
1153 ;; 1164 ;;
1154 detach) 1165 detach)
1155 # Check, if image really attached or running 1166 # Check, if image really attached or running
1156 [ "${ezjail_id}" ] && exerr "Error: Jail ${ezjail_name} still running. Can not detach." 1167 [ "${ezjail_id}" ] && exerr "Error: Jail ${ezjail_name} still running\n Can not detach.\n '${ezjail_admin} stop ${ezjail_name}' it first."
1157 [ "${ezjail_attached}" ] || exerr "Error: Jail image file ${ezjail_name} is not attached." 1168 [ "${ezjail_attached}" ] || exerr "Error: Jail image file ${ezjail_name} is not attached."
1158 1169
1159 # Unmount/detach everything 1170 # Unmount/detach everything
diff --git a/man1/ezjail-admin.1 b/man1/ezjail-admin.1
index 8cba99d..02b5ee1 100755
--- a/man1/ezjail-admin.1
+++ b/man1/ezjail-admin.1
@@ -3,7 +3,7 @@
3ezjail-admin \- Administrate ezjail 3ezjail-admin \- Administrate ezjail
4.SH SYNOPSIS 4.SH SYNOPSIS
5.T 5.T
6.B ezjail-admin install\fR [-mps] [-h host] [-r release] 6.B ezjail-admin install\fR [-mMpPsS] [-h host] [-r release]
7 7
8.T 8.T
9.B ezjail-admin create 9.B ezjail-admin create
@@ -48,6 +48,8 @@ is around 120MB).
48The -m and -s option will fetch and install man pages (ca. 10MB) and 48The -m and -s option will fetch and install man pages (ca. 10MB) and
49sources packages (ca. 450MB) respectively. The -p option invokes the 49sources packages (ca. 450MB) respectively. The -p option invokes the
50portsnap utility to fetch and extract a FreeBSD ports tree (ca. 475MB). 50portsnap utility to fetch and extract a FreeBSD ports tree (ca. 475MB).
51Parameters -M, -P or -S behave like their lower case pendants, plus they
52disable (re)installing your basejail.
51 53
52Default OS version is, whatever uname -r returns. If this does not match 54Default OS version is, whatever uname -r returns. If this does not match
53"*-RELEASE", you will be prompted for a better guess. (Normally 55"*-RELEASE", you will be prompted for a better guess. (Normally