diff options
-rwxr-xr-x | ezjail-admin | 147 | ||||
-rwxr-xr-x | man1/ezjail-admin.1 | 4 |
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" | |||
37 | case `uname -p` in amd64) ezjail_dirlist="${ezjail_dirlist} usr/lib32"; ezjail_basesystem="${ezjail_basesystem} lib32";; esac | 37 | case `uname -p` in amd64) ezjail_dirlist="${ezjail_dirlist} usr/lib32"; ezjail_basesystem="${ezjail_basesystem} lib32";; esac |
38 | 38 | ||
39 | # Synopsis messages | 39 | # Synopsis messages |
40 | ezjail_usage_ezjailadmin="ezjail-admin v3.0b\nUsage: ${ezjail_admin} [archive|config|console|create|delete|install|list|restore|update] {params}" | 40 | ezjail_usage_ezjailadmin="${ezjail_admin} v3.0b\nUsage: ${ezjail_admin} [archive|config|console|create|delete|install|list|restore|update] {params}" |
41 | ezjail_usage_install="Usage: ${ezjail_admin} install [-mps] [-h host] [-r release]" | 41 | ezjail_usage_install="Usage: ${ezjail_admin} install [-mMpPsS] [-h host] [-r release]" |
42 | ezjail_usage_create="Usage: ${ezjail_admin} create [-xbi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli] [-C args] [-a archive] jailname jailip" | 42 | ezjail_usage_create="Usage: ${ezjail_admin} create [-xbi] [-f flavour] [-r jailroot] [-s size] [-c bde|eli] [-C args] [-a archive] jailname jailip" |
43 | ezjail_usage_delete="Usage: ${ezjail_admin} delete [-w] jailname" | 43 | ezjail_usage_delete="Usage: ${ezjail_admin} delete [-w] jailname" |
44 | ezjail_usage_update="Usage: ${ezjail_admin} update [-s sourcetree] [-i] [-pP]" | 44 | ezjail_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 |
197 | ezjail_splitworld() { | 197 | ezjail_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 ######################## |
788 | console) | 799 | console) |
@@ -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 @@ | |||
3 | ezjail-admin \- Administrate ezjail | 3 | ezjail-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). | |||
48 | The -m and -s option will fetch and install man pages (ca. 10MB) and | 48 | The -m and -s option will fetch and install man pages (ca. 10MB) and |
49 | sources packages (ca. 450MB) respectively. The -p option invokes the | 49 | sources packages (ca. 450MB) respectively. The -p option invokes the |
50 | portsnap utility to fetch and extract a FreeBSD ports tree (ca. 475MB). | 50 | portsnap utility to fetch and extract a FreeBSD ports tree (ca. 475MB). |
51 | Parameters -M, -P or -S behave like their lower case pendants, plus they | ||
52 | disable (re)installing your basejail. | ||
51 | 53 | ||
52 | Default OS version is, whatever uname -r returns. If this does not match | 54 | Default 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 |