diff options
author | erdgeist <erdgeist@erdgeist.org> | 2006-04-24 14:31:55 +0000 |
---|---|---|
committer | erdgeist <erdgeist@erdgeist.org> | 2006-04-24 14:31:55 +0000 |
commit | 93be17a3c05a0928418f504e8897b3cedf4c6572 (patch) | |
tree | 79164b14551dcd4d08dc6baf7fba101fb695cb4d | |
parent | 0377eb1c57d28b634f1b21764aafc7656e1c3aaa (diff) |
HEADS UP: Common elements in update and install have been moved to a function. portsnap now is default way to maintain your copy of ports tree.
-rwxr-xr-x | ezjail-admin | 165 |
1 files changed, 82 insertions, 83 deletions
diff --git a/ezjail-admin b/ezjail-admin index 0b99d4b..1fc8494 100755 --- a/ezjail-admin +++ b/ezjail-admin | |||
@@ -15,9 +15,10 @@ ezjail_jaildir=${ezjail_jaildir:-"/usr/jails"} | |||
15 | ezjail_jailtemplate=${ezjail_jailtemplate:-"${ezjail_jaildir}/newjail"} | 15 | ezjail_jailtemplate=${ezjail_jailtemplate:-"${ezjail_jaildir}/newjail"} |
16 | ezjail_jailbase=${ezjail_jailbase:-"${ezjail_jaildir}/basejail"} | 16 | ezjail_jailbase=${ezjail_jailbase:-"${ezjail_jaildir}/basejail"} |
17 | ezjail_jailfull=${ezjail_jailfull:-"${ezjail_jaildir}/fulljail"} | 17 | ezjail_jailfull=${ezjail_jailfull:-"${ezjail_jaildir}/fulljail"} |
18 | ezjail_jailtemp=${ezjail_jaildir:-"${ezjail_jaildir}/ezjailtemp"} | ||
18 | ezjail_flavours=${ezjail_flavours:-"${ezjail_jaildir}/flavours"} | 19 | ezjail_flavours=${ezjail_flavours:-"${ezjail_jaildir}/flavours"} |
19 | ezjail_sourcetree=${ezjail_sourcetree:-"/usr/src"} | ||
20 | ezjail_portscvsroot=${ezjail_portscvsroot:-":pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs"} | 20 | ezjail_portscvsroot=${ezjail_portscvsroot:-":pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs"} |
21 | ezjail_sourcetree=${ezjail_sourcetree:-"/usr/src"} | ||
21 | ezjail_uglyperlhack=${ezjail_uglyperlhack:-"YES"} | 22 | ezjail_uglyperlhack=${ezjail_uglyperlhack:-"YES"} |
22 | 23 | ||
23 | ezjail_mount_enable=${ezjail_mount_enable:-"YES"} | 24 | ezjail_mount_enable=${ezjail_mount_enable:-"YES"} |
@@ -28,6 +29,10 @@ ezjail_fdescfs_enable=${ezjail_fdescfs_enable:-"YES"} | |||
28 | 29 | ||
29 | ezjail_dirlist="bin boot lib libexec rescue sbin usr/bin usr/games usr/include usr/lib usr/libdata usr/libexec usr/sbin usr/src usr/share" | 30 | ezjail_dirlist="bin boot lib libexec rescue sbin usr/bin usr/games usr/include usr/lib usr/libdata usr/libexec usr/sbin usr/src usr/share" |
30 | 31 | ||
32 | ################################ | ||
33 | # End of variable initialization | ||
34 | # | ||
35 | |||
31 | # define our bail out shortcut | 36 | # define our bail out shortcut |
32 | exerr () { echo -e "$*"; exit 1; } | 37 | exerr () { echo -e "$*"; exit 1; } |
33 | 38 | ||
@@ -66,6 +71,67 @@ fetchjailinfo () { | |||
66 | ezjail_id=`jls | grep " ${ezjail_hostname} " | head -n 1 | awk {'print $1'}` | 71 | ezjail_id=`jls | grep " ${ezjail_hostname} " | head -n 1 | awk {'print $1'}` |
67 | } | 72 | } |
68 | 73 | ||
74 | # fill the base jail - this function is used by install and update | ||
75 | ezjail_splitworld() { | ||
76 | # Fill basejail from installed world | ||
77 | cd ${ezjail_jailfull} || exerr "Cant access temporary Jail directory." | ||
78 | |||
79 | # This mkdir is important, since cpio will create intermediate | ||
80 | # directories with permission 0700 which is bad | ||
81 | mkdir -p ${ezjail_jailbase}/usr | ||
82 | for dir in ${ezjail_dirlist}; do | ||
83 | find ${dir} | cpio -d -p -v ${ezjail_jailbase} || exerr "Installation of ${dir} failed." | ||
84 | chflags -R noschg ${dir}; rm -r ${dir}; ln -s /basejail/${dir} ${dir} | ||
85 | done | ||
86 | mkdir basejail | ||
87 | |||
88 | # Try to remove the old template jail | ||
89 | [ -d ${ezjail_jailtemplate} ] && chflags -R noschg ${ezjail_jailtemplate} && rm -rf ${ezjail_jailtemplate} | ||
90 | mv ${ezjail_jailfull} ${ezjail_jailtemplate} | ||
91 | |||
92 | # If the default flavour example has not yet been copied, do it now | ||
93 | [ -d ${ezjail_flavours}/default ] || mkdir -p ${ezjail_flavours} && cp -p -R ${ezjail_examples}/default ${ezjail_flavours} | ||
94 | |||
95 | # A ports collection inside jails is hardly useful w/o an appropriate | ||
96 | # /etc/make.conf. If we find basejail/usr/ports/Makefile, assume that | ||
97 | # the admin wants a working make.conf in new jails also a softlink to | ||
98 | # the ports in basejail is provided | ||
99 | if [ -f ${ezjail_jailbase}/usr/ports/Makefile ]; then | ||
100 | # no /usr/ports? link to /basejail/usr/ports | ||
101 | [ -e ${ezjail_jailtemplate}/usr/ports ] || ln -s /basejail/usr/ports ${ezjail_jailtemplate}/usr/ports | ||
102 | |||
103 | if [ -f ${ezjail_examples}/default/etc/make.conf -a ! -f ${ezjail_jailtemplate}/etc/make.conf ]; then | ||
104 | cp -p ${ezjail_examples}/default/etc/make.conf ${ezjail_jailtemplate}/etc/ | ||
105 | echo "Note: a non-standard /etc/make.conf was copied to the template jail in order to get the ports collection running inside jails." | ||
106 | fi | ||
107 | fi | ||
108 | |||
109 | # The ugly perl hack[tm]. Note: we wont do such things for any given | ||
110 | # port :( | ||
111 | [ "${ezjail_uglyperlhack}" = "YES" -a ! -L ${ezjail_jailbase}/usr/bin/perl ] && ln -s /usr/local/bin/perl ${ezjail_jailbase}/usr/bin/perl | ||
112 | } | ||
113 | |||
114 | # The user may want to have a ports tree in basejail | ||
115 | ezjail_updateports () { | ||
116 | # if /usr/ports/CVS exists, assume cvs up is safe | ||
117 | # this is legacy | ||
118 | if [ -f ${ezjail_jailbase}/usr/ports/CVS/Root ]; then | ||
119 | echo -n "Updating ports from "; cat ${ezjail_jailbase}/usr/ports/CVS/Root | ||
120 | echo "Warning: Upgrading legacy ports copy. Consider removing ${ezjail_jailbase}/usr/ports and use the new portsnap strategy instead." | ||
121 | echo "Gathering local information may take a while." | ||
122 | cd ${ezjail_jailbase}/usr/ports/ && cvs -d ${ezjail_portscvsroot} up -Pd | ||
123 | else | ||
124 | portsnap fetch | ||
125 | [ -d ${ezjail_jailbase}/usr/ports ] && ezjail_portsnapaction=update | ||
126 | portsnap ${ezjail_portsnapaction:-"extract"} | ||
127 | fi | ||
128 | [ $? = 0 ] || exerr "Updating ports failed." | ||
129 | } | ||
130 | |||
131 | ############################# | ||
132 | # End of function definitions | ||
133 | # | ||
134 | |||
69 | # check for command | 135 | # check for command |
70 | [ "$1" ] || exerr "Usage: `basename -- $0` [config|create|delete|install|list|update] {params}" | 136 | [ "$1" ] || exerr "Usage: `basename -- $0` [config|create|delete|install|list|update] {params}" |
71 | 137 | ||
@@ -326,7 +392,6 @@ setup|update) | |||
326 | 392 | ||
327 | # Clean variables, prevent polution | 393 | # Clean variables, prevent polution |
328 | unset ezjail_provideports | 394 | unset ezjail_provideports |
329 | |||
330 | ezjail_installaction="world" | 395 | ezjail_installaction="world" |
331 | 396 | ||
332 | set -- ${args} | 397 | set -- ${args} |
@@ -354,64 +419,15 @@ setup|update) | |||
354 | [ -d "${ezjail_jailfull}" ] && chflags -R noschg ${ezjail_jailfull} && rm -rf ${ezjail_jailfull} | 419 | [ -d "${ezjail_jailfull}" ] && chflags -R noschg ${ezjail_jailfull} && rm -rf ${ezjail_jailfull} |
355 | mkdir -p ${ezjail_jailfull} || exerr "Cannot create temporary Jail directory." | 420 | mkdir -p ${ezjail_jailfull} || exerr "Cannot create temporary Jail directory." |
356 | 421 | ||
357 | # make our world | 422 | # make and setup our world, then split basejail and newjail |
358 | cd ${ezjail_sourcetree} && make ${ezjail_installaction} DESTDIR=${ezjail_jailfull} || exerr "make ${ezjail_installaction} failed." | 423 | cd ${ezjail_sourcetree} && make ${ezjail_installaction} DESTDIR=${ezjail_jailfull} || exerr "make ${ezjail_installaction} failed." |
359 | |||
360 | # setup world | ||
361 | cd ${ezjail_sourcetree}/etc && make distribution DESTDIR=${ezjail_jailfull} || exerr "make distribution failed." | 424 | cd ${ezjail_sourcetree}/etc && make distribution DESTDIR=${ezjail_jailfull} || exerr "make distribution failed." |
362 | 425 | ezjail_splitworld | |
363 | # Fill basejail from installed world | ||
364 | cd ${ezjail_jailfull} || exerr "Cant access temporary Jail directory." | ||
365 | # This mkdir is important, since cpio will create intermediate | ||
366 | # directories with permission 0700 which is bad | ||
367 | mkdir -p ${ezjail_jailbase}/usr | ||
368 | for dir in ${ezjail_dirlist}; do | ||
369 | find ${dir} | cpio -d -p -v ${ezjail_jailbase} || exerr "Installation of ${dir} failed." | ||
370 | chflags -R noschg ${dir}; rm -r ${dir}; ln -s /basejail/${dir} ${dir} | ||
371 | done | ||
372 | mkdir basejail | ||
373 | |||
374 | # Try to remove the old template jail | ||
375 | [ -d ${ezjail_jailtemplate} ] && chflags -R noschg ${ezjail_jailtemplate} && rm -rf ${ezjail_jailtemplate} | ||
376 | mv ${ezjail_jailfull} ${ezjail_jailtemplate} | ||
377 | |||
378 | # If the default flavour example has not yet been copied, do it now | ||
379 | [ -d ${ezjail_flavours}/default ] || mkdir -p ${ezjail_flavours} && cp -p -R ${ezjail_examples}/default ${ezjail_flavours} | ||
380 | 426 | ||
381 | fi # installaction="none" | 427 | fi # installaction="none" |
382 | 428 | ||
383 | # The user may want to have a ports tree in basejail | 429 | # Provide a copy of ports tree in basejail |
384 | if [ "${ezjail_provideports}" = "YES" ]; then | 430 | [ "${ezjail_provideports}" = "YES" ] && ezjail_updateports |
385 | # if /usr/ports/CVS exists, assume cvs up is safe | ||
386 | if [ -f ${ezjail_jailbase}/usr/ports/CVS/Root ]; then | ||
387 | echo -n "Updating ports from "; cat ${ezjail_jailbase}/usr/ports/CVS/Root | ||
388 | echo "Gathering local information may take a while." | ||
389 | cd ${ezjail_jailbase}/usr/ports/ && cvs -d ${ezjail_portscvsroot} up -Pd | ||
390 | else | ||
391 | echo "Checking out ports from ${ezjail_portscvsroot}" | ||
392 | mkdir -p ${ezjail_jailbase}/usr/ports/ | ||
393 | cd ${ezjail_jailbase}/usr/ && cvs -d ${ezjail_portscvsroot} co ports | ||
394 | fi | ||
395 | [ $? = 0 ] || exerr "Updating ports failed." | ||
396 | fi | ||
397 | |||
398 | # A ports collection inside jails is hardly useful w/o an appropriate | ||
399 | # /etc/make.conf. If we find basejail/usr/ports/Makefile, assume that | ||
400 | # the admin wants a working make.conf in new jails also a softlink to | ||
401 | # the ports in basejail is provided | ||
402 | if [ -f ${ezjail_jailbase}/usr/ports/Makefile ]; then | ||
403 | # no /usr/ports? link to /basejail/usr/ports | ||
404 | [ -e ${ezjail_jailtemplate}/usr/ports ] || ln -s /basejail/usr/ports ${ezjail_jailtemplate}/usr/ports | ||
405 | |||
406 | if [ -f ${ezjail_examples}/default/etc/make.conf -a ! -f ${ezjail_jailtemplate}/etc/make.conf ]; then | ||
407 | cp -p ${ezjail_examples}/default/etc/make.conf ${ezjail_jailtemplate}/etc/ | ||
408 | echo "Note: a non-standard /etc/make.conf was copied to the template jail in order to get the ports collection running inside jails." | ||
409 | fi | ||
410 | fi | ||
411 | |||
412 | # The ugly perl hack[tm]. Note: we wont do such things for any given | ||
413 | # port :( | ||
414 | [ "${ezjail_uglyperlhack}" = "YES" -a ! -L ${ezjail_jailbase}/usr/bin/perl ] && ln -s /usr/local/bin/perl ${ezjail_jailbase}/usr/bin/perl | ||
415 | 431 | ||
416 | ;; | 432 | ;; |
417 | ######################## ezjail-admin INSTALL ######################## | 433 | ######################## ezjail-admin INSTALL ######################## |
@@ -420,14 +436,14 @@ install) | |||
420 | args=`getopt mpsh:r: $*` || exerr "Usage: `basename -- $0` install [-mps] [-h host] [-r release]" | 436 | args=`getopt mpsh:r: $*` || exerr "Usage: `basename -- $0` install [-mps] [-h host] [-r release]" |
421 | 437 | ||
422 | # Clean variables, prevent polution | 438 | # Clean variables, prevent polution |
423 | unset ezjail_release ezjail_ftphost ezjail_installmanpages ezjail_installports ezjail_installsources ezjail_dir ezjail_reldir ezjail_temp | 439 | unset ezjail_release ezjail_ftphost ezjail_installmanpages ezjail_installports ezjail_installsources ezjail_dir ezjail_reldir |
424 | 440 | ||
425 | set -- ${args} | 441 | set -- ${args} |
426 | for arg do | 442 | for arg do |
427 | case ${arg} in | 443 | case ${arg} in |
428 | -m) ezjail_installmanpages=" manpages"; shift;; | 444 | -m) ezjail_installmanpages=" manpages"; shift;; |
429 | -p) ezjail_installports=" ports"; shift;; | ||
430 | -s) ezjail_installsources=" src"; shift;; | 445 | -s) ezjail_installsources=" src"; shift;; |
446 | -p) ezjail_installports="YES"; shift;; | ||
431 | -h) ezjail_ftphost="$2"; shift 2;; | 447 | -h) ezjail_ftphost="$2"; shift 2;; |
432 | -r) ezjail_release="$2"; shift 2;; | 448 | -r) ezjail_release="$2"; shift 2;; |
433 | --) shift; break;; | 449 | --) shift; break;; |
@@ -439,8 +455,6 @@ install) | |||
439 | ezjail_ftphost=${ezjail_ftphost#ftp://} | 455 | ezjail_ftphost=${ezjail_ftphost#ftp://} |
440 | ezjail_dir=${ezjail_ftphost#file://} | 456 | ezjail_dir=${ezjail_ftphost#file://} |
441 | [ "${ezjail_dir%%[!/]*}" ] || ezjail_reldir=${PWD} | 457 | [ "${ezjail_dir%%[!/]*}" ] || ezjail_reldir=${PWD} |
442 | # XXX | ||
443 | ezjail_temp=${ezjail_jaildir}/ezjailtemp | ||
444 | 458 | ||
445 | # ftp servers normally wont provide CURRENT-builds | 459 | # ftp servers normally wont provide CURRENT-builds |
446 | if [ -z "${ezjail_release}" ]; then | 460 | if [ -z "${ezjail_release}" ]; then |
@@ -459,15 +473,14 @@ install) | |||
459 | mkdir -p ${ezjail_jailfull} || exerr "Cannot create temporary Jail directory." | 473 | mkdir -p ${ezjail_jailfull} || exerr "Cannot create temporary Jail directory." |
460 | DESTDIR=${ezjail_jailfull} | 474 | DESTDIR=${ezjail_jailfull} |
461 | 475 | ||
462 | # XXX | 476 | rm -rf ${ezjail_jailtemp} |
463 | rm -rf ${ezjail_temp} | 477 | for pkg in base ${ezjail_installmanpages} ${ezjail_installsources}; do |
464 | for pkg in base ${ezjail_installmanpages} ${ezjail_installports} ${ezjail_installsources}; do | ||
465 | 478 | ||
466 | # The first case means, that a remote host has been specified. | 479 | # The first case means, that a remote host has been specified. |
467 | if [ "${ezjail_dir}" = "${ezjail_ftphost}" ]; then | 480 | if [ "${ezjail_dir}" = "${ezjail_ftphost}" ]; then |
468 | # Create and try to access temp dir | 481 | # Create and try to access temp dir |
469 | mkdir -p ${ezjail_temp} || exerr "Could not create temporary base jail directory ${ezjail_temp}." | 482 | mkdir -p ${ezjail_jailtemp} || exerr "Could not create temporary base jail directory ${ezjail_jailtemp}." |
470 | cd ${ezjail_temp} || exerr "Could not cd to ${ezjail_temp}." | 483 | cd ${ezjail_jailtemp} || exerr "Could not cd to ${ezjail_jailtemp}." |
471 | 484 | ||
472 | # Try all paths as stolen from sysinstall, break on success. | 485 | # Try all paths as stolen from sysinstall, break on success. |
473 | for ezjail_path in pub/FreeBSD/releases pub/FreeBSD/snapshot pub/FreeBSD releases snapshots NO; do | 486 | for ezjail_path in pub/FreeBSD/releases pub/FreeBSD/snapshot pub/FreeBSD releases snapshots NO; do |
@@ -482,7 +495,7 @@ install) | |||
482 | [ -f install.sh ] && yes | . install.sh | 495 | [ -f install.sh ] && yes | . install.sh |
483 | # XXX error checking. | 496 | # XXX error checking. |
484 | 497 | ||
485 | rm -rf ${ezjail_temp} | 498 | rm -rf ${ezjail_jailtemp} |
486 | else | 499 | else |
487 | cd ${basejail_reldir}/${basejail_dir}/${pkg} || exerr "Could not cd to ${basejail_dir}." | 500 | cd ${basejail_reldir}/${basejail_dir}/${pkg} || exerr "Could not cd to ${basejail_dir}." |
488 | set -- all | 501 | set -- all |
@@ -490,25 +503,11 @@ install) | |||
490 | fi | 503 | fi |
491 | done | 504 | done |
492 | 505 | ||
493 | # Fill basejail from installed world | 506 | # Split basejail and newjail |
494 | cd ${ezjail_jailfull} || exerr "Cant access temporary Jail directory." | 507 | ezjail_splitworld |
495 | # This mkdir is important, since cpio will create intermediate | ||
496 | # directories with permission 0700 which is bad | ||
497 | mkdir -p ${ezjail_jailbase}/usr | ||
498 | for dir in ${ezjail_dirlist}; do | ||
499 | find ${dir} | cpio -d -p -v ${ezjail_jailbase} || exerr "Installation of ${dir} failed." | ||
500 | chflags -R noschg ${dir}; rm -r ${dir}; ln -s /basejail/${dir} ${dir} | ||
501 | done | ||
502 | mkdir basejail | ||
503 | |||
504 | # Try to remove the old template jail | ||
505 | [ -d ${ezjail_jailtemplate} ] && chflags -R noschg ${ezjail_jailtemplate} && rm -rf ${ezjail_jailtemplate} | ||
506 | mv ${ezjail_jailfull} ${ezjail_jailtemplate} | ||
507 | |||
508 | # If the default flavour example has not yet been copied, do it now | ||
509 | [ -d ${ezjail_flavours}/default ] || mkdir -p ${ezjail_flavours} && cp -p -R ${ezjail_examples}/default ${ezjail_flavours} | ||
510 | 508 | ||
511 | # XXX ports stuff still missing | 509 | # Fill ports, if requested |
510 | [ "${ezjail_installports} = "YES" ] && ezjail_updateports | ||
512 | 511 | ||
513 | ;; | 512 | ;; |
514 | ######################## ezjail-admin CONFIG ######################## | 513 | ######################## ezjail-admin CONFIG ######################## |