diff options
Diffstat (limited to 'ezjail-admin')
-rwxr-xr-x | ezjail-admin | 111 |
1 files changed, 74 insertions, 37 deletions
diff --git a/ezjail-admin b/ezjail-admin index 1a5c535..b875da1 100755 --- a/ezjail-admin +++ b/ezjail-admin | |||
@@ -18,6 +18,7 @@ ezjail_jailbase=${ezjail_jailbase:-"$ezjail_jaildir/basejail"} | |||
18 | ezjail_jailfull=${ezjail_jailfull:-"$ezjail_jaildir/fulljail"} | 18 | ezjail_jailfull=${ezjail_jailfull:-"$ezjail_jaildir/fulljail"} |
19 | ezjail_flavours=${ezjail_flavours:-"$ezjail_jaildir/flavours"} | 19 | ezjail_flavours=${ezjail_flavours:-"$ezjail_jaildir/flavours"} |
20 | ezjail_sourcetree=${ezjail_sourcetree:-"/usr/src"} | 20 | ezjail_sourcetree=${ezjail_sourcetree:-"/usr/src"} |
21 | ezjail_portscvsroot=${ezjail_portscvsroot:-":pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs"} | ||
21 | 22 | ||
22 | ezjail_mount_enable=${ezjail_mount_enable:-"YES"} | 23 | ezjail_mount_enable=${ezjail_mount_enable:-"YES"} |
23 | ezjail_devfs_enable=${ezjail_devfs_enable:-"YES"} | 24 | ezjail_devfs_enable=${ezjail_devfs_enable:-"YES"} |
@@ -54,11 +55,11 @@ create) | |||
54 | newjail_name=$1; newjail_ip=$2; | 55 | newjail_name=$1; newjail_ip=$2; |
55 | 56 | ||
56 | # we need at least a name and an ip for new jail | 57 | # we need at least a name and an ip for new jail |
57 | [ "$newjail_name" -a "$newjail_ip" -a $# = 2 ] || exerr 'Usage: ezjail create [-f flavour] [-r jailroot] [-x] jailname jailip' | 58 | [ "${newjail_name}" -a "${newjail_ip}" -a $# = 2 ] || exerr 'Usage: ezjail create [-f flavour] [-r jailroot] [-x] jailname jailip' |
58 | 59 | ||
59 | # check, whether ezjail-update has been called. existence of | 60 | # check, whether ezjail-update has been called. existence of |
60 | # ezjail_jailbase is our indicator | 61 | # ezjail_jailbase is our indicator |
61 | [ -d $ezjail_jailbase ] || exerr "Error: base jail does not exist. Please run 'ezjail-admin update' first" | 62 | [ -d ${ezjail_jailbase} ] || exerr "Error: base jail does not exist. Please run 'ezjail-admin update' first" |
62 | 63 | ||
63 | # relative paths don't make sense in rc.scripts | 64 | # relative paths don't make sense in rc.scripts |
64 | [ ${ezjail_jaildir#/} = ${ezjail_jaildir} ] && exerr "Error: Need an absolute path in ezjail_jaildir, it currently is set to: $ezjail_jaildir" | 65 | [ ${ezjail_jaildir#/} = ${ezjail_jaildir} ] && exerr "Error: Need an absolute path in ezjail_jaildir, it currently is set to: $ezjail_jaildir" |
@@ -215,56 +216,92 @@ delete) | |||
215 | ######################## ezjail-admin UPDATE ######################## | 216 | ######################## ezjail-admin UPDATE ######################## |
216 | setup|update) | 217 | setup|update) |
217 | shift | 218 | shift |
218 | args=`getopt is: $*` | 219 | args=`getopt ipPs: $*` |
219 | [ $? = 0 ] || exerr 'Usage: ezjail update [-s sourcetree] [-i]' | 220 | [ $? = 0 ] || exerr 'Usage: ezjail update [-s sourcetree] [-i] [-pP]' |
220 | 221 | ||
221 | updatejail_installaction="world" | 222 | updatejail_installaction="world" |
223 | updatejail_provideports= | ||
222 | 224 | ||
223 | set -- $args | 225 | set -- $args |
224 | for arg do | 226 | for arg do |
225 | case $arg in | 227 | case $arg in |
226 | -i) updatejail_installaction="installworld"; shift;; | 228 | -i) updatejail_installaction="installworld"; shift;; |
227 | -s) ezjail_sourcetree="$2"; shift 2;; | 229 | -s) ezjail_sourcetree="$2"; shift 2;; |
230 | -p) updatejail_provideports="YES"; shift;; | ||
231 | -P) updatejail_provideports="YES"; updatejail_installaction="none"; shift;; | ||
228 | --) shift; break;; | 232 | --) shift; break;; |
229 | esac | 233 | esac |
230 | done; | 234 | done; |
231 | 235 | ||
232 | # Bump the user for some of the most common errors | 236 | if [ $updatejail_installaction = "none" ]; then |
233 | [ -d ${ezjail_sourcetree} ] || exerr "Cannot find your copy of the FreeBSD source tree in $ezjail_sourcetree." | 237 | # check, whether ezjail-update has been called. existence of |
234 | [ -f ${ezjail_sourcetree}/Makefile ] || exerr "Your source tree in $ezjail_sourcetree seems to be incomplete (Makefile missing)." | 238 | # ezjail_jailbase is our indicator |
235 | 239 | [ -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' first" | |
236 | cd ${ezjail_sourcetree} | 240 | else |
237 | # Normally fulljail should be renamed by past ezjail-admin commands | 241 | # Bump the user for some of the most common errors |
238 | # However those may have failed | 242 | [ -d ${ezjail_sourcetree} ] || exerr "Cannot find your copy of the FreeBSD source tree in $ezjail_sourcetree." |
239 | rm -rf ${ezjail_jailfull}; mkdir -p ${ezjail_jailfull} | 243 | [ -f ${ezjail_sourcetree}/Makefile ] || exerr "Your source tree in $ezjail_sourcetree seems to be incomplete (Makefile missing)." |
240 | 244 | ||
241 | # make our world | 245 | cd ${ezjail_sourcetree} |
242 | make ${updatejail_installaction} DESTDIR=${ezjail_jailfull} | 246 | # Normally fulljail should be renamed by past ezjail-admin commands |
243 | [ $? = 0 ] || exerr "make ${updatejail_installaction} failed" | 247 | # However those may have failed |
244 | 248 | rm -rf ${ezjail_jailfull}; mkdir -p ${ezjail_jailfull} | |
245 | # setup world | 249 | |
246 | make distribution DESTDIR=${ezjail_jailfull} | 250 | # make our world |
247 | [ $? = 0 ] || exerr "make distribution failed" | 251 | make ${updatejail_installaction} DESTDIR=${ezjail_jailfull} |
248 | 252 | [ $? = 0 ] || exerr "make ${updatejail_installaction} failed" | |
249 | cd ${ezjail_jailfull} | 253 | |
250 | # Fill basejail from installed world | 254 | # setup world |
251 | mkdir -p ${ezjail_jailbase}/usr ${ezjail_jailbase}/config/pkg | 255 | make distribution DESTDIR=${ezjail_jailfull} |
252 | for a in bin lib libexec sbin usr/bin usr/include usr/lib usr/libexec usr/sbin usr/src usr/share; do | 256 | [ $? = 0 ] || exerr "make distribution failed" |
253 | find ${a} | cpio -d -p -v ${ezjail_jailbase}; | 257 | |
254 | chflags -R noschg ${a}; rm -r ${a}; ln -s /basejail/${a} ${a} | 258 | cd ${ezjail_jailfull} |
255 | done | 259 | # Fill basejail from installed world |
256 | mkdir basejail | 260 | mkdir -p ${ezjail_jailbase}/usr ${ezjail_jailbase}/config/pkg |
257 | ln -s /basejail/usr/ports usr/ports | 261 | for a in bin lib libexec sbin usr/bin usr/include usr/lib usr/libexec usr/sbin usr/src usr/share; do |
262 | find ${a} | cpio -d -p -v ${ezjail_jailbase}; | ||
263 | chflags -R noschg ${a}; rm -r ${a}; ln -s /basejail/${a} ${a} | ||
264 | done | ||
265 | mkdir basejail | ||
266 | |||
267 | if [ -d ${ezjail_jailtemplate} ]; then | ||
268 | chflags -R noschg ${ezjail_jailtemplate}_old | ||
269 | rm -rf ${ezjail_jailtemplate}_old | ||
270 | mv ${ezjail_jailtemplate} ${ezjail_jailtemplate}_old | ||
271 | fi | ||
272 | mv ${ezjail_jailfull} ${ezjail_jailtemplate} | ||
273 | |||
274 | # If the default flavour example has not yet been copied, do it now | ||
275 | [ -d ${ezjail_flavours}/default ] || cp -p -r ${ezjail_examples}/default ${ezjail_flavours}/ | ||
276 | |||
277 | fi # installaction="none" | ||
278 | |||
279 | # The user may want to have a ports tree in basejail | ||
280 | if [ "$updatejail_provideports" ]; then | ||
281 | # if /usr/ports/CVS exists, assume cvs up is safe | ||
282 | if [ -f ${ezjail_jailbase}/usr/ports/CVS/Root ]; then | ||
283 | echo -n "Updating ports from "; cat ${ezjail_jailbase}/usr/ports/CVS/Root | ||
284 | echo "Gathering local information may take a while." | ||
285 | cd ${ezjail_jailbase}/usr/ports/; cvs up -APd | ||
286 | else | ||
287 | echo "Checking out ports from ${ezjail_portscvsroot}" | ||
288 | mkdir -p ${ezjail_jailbase}/usr/ports/ | ||
289 | cd ${ezjail_jailbase}/usr/; cvs -d ${ezjail_portscvsroot} co ports | ||
290 | fi | ||
291 | |||
292 | [ $? = 0 ] || exerr "Updating ports failed." | ||
293 | [ -f ${ezjail_jailtmeplate}/usr/ports ] || ln -s /basejail/usr/ports ${ezjail_jailtemplate}/usr/ports | ||
258 | 294 | ||
259 | if [ -d ${ezjail_jailtemplate} ]; then | ||
260 | chflags -R noschg ${ezjail_jailtemplate}_old | ||
261 | rm -rf ${ezjail_jailtemplate}_old | ||
262 | mv ${ezjail_jailtemplate} ${ezjail_jailtemplate}_old | ||
263 | fi | 295 | fi |
264 | mv ${ezjail_jailfull} ${ezjail_jailtemplate} | ||
265 | 296 | ||
266 | # If the default flavour example has not yet been copied, do it now | 297 | # A ports collection inside jails is hardly useful w/o an appropriate /etc/make.conf |
267 | [ -d ${ezjail_flavours}/default ] || cp -p -r ${ezjail_examples}/default ${ezjail_flavours}/ | 298 | # if we find basejail/usr/ports/Makefile, assume that the admin wants a working make.conf in new jails |
299 | if [ -f ${ezjail_jailbase}/usr/ports/Makefile -a -f ${ezjail_examples}/default/etc/make.conf -a \ | ||
300 | ! -f ${ezjail_jailtemplate}/etc/make.conf ]; then | ||
301 | cp -p ${ezjail_examples}/default/etc/make.conf ${ezjail_jailtemplate}/etc/ | ||
302 | echo Note: a non-standard /etc/make.conf was copied to the template jail | ||
303 | echo in order to get the ports collection running inside jails | ||
304 | fi | ||
268 | 305 | ||
269 | ;; | 306 | ;; |
270 | *) | 307 | *) |