#!/bin/sh # very simple script to install a chrooted service [ $# -lt 2 ] && echo "usage: $0 " && exit 1 . $2 PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin CHROOTDIR=${CHROOTDIR}-`uname -s`-`uname -r` echo $CHROOTDIR do_mount() { echo -n "null-mounting... " for mount in ${MOUNTS} do echo -n "${mount} " if [ -z "`grep ${CHROOTDIR}/${mount} /proc/mounts`" ]; then mkdir -p ${CHROOTDIR}/${mount} mount -t null ${mount} $CHROOTDIR/${mount} fi done echo "done" } do_umount() { echo -n "umounting... " for mount in ${MOUNTS} do echo -n "${mount} " umount ${CHROOTDIR}${mount} done echo "done" } do_start() { echo -n "starting services..." for service in ${SERVICES} do chroot ${CHROOTDIR} /etc/rc.d/${service} start done echo "done" } do_stop() { echo -n "stopping services..." for service in ${SERVICES} do chroot ${CHROOTDIR} /etc/rc.d/${service} stop done echo "done" } case $1 in rm) do_stop do_umount sleep 1 echo -n "erasing ${CHROOTDIR}..." rm -rf ${CHROOTDIR} echo done ;; create) mkdir -p ${SETSDIR} ${SVCDIR} ${CHROOTDIR} if [ ! -d ${CPFILES} ]; then echo "${CPFILES} was not found, creating it." mkdir -p ${CPFILES}/etc echo "***********************************************************" echo echo "you may want to populate ${CPFILES} with at least a" echo "configured etc/rc.conf file and probably an etc/hosts file." echo "When done, restart this script with the sames parameters." echo echo "***********************************************************" exit fi echo -n "fetching binary sets... " for set in ${SETS} do if [ ! -f ${SETSDIR}/${set}.tgz ]; then echo -n "${set} " cd ${SETSDIR} ftp -V ${SETSURL}/${set}.tgz 2> /dev/null fi done echo "done" echo -n "creating chroot... extracting: " for set in ${SETS} do echo -n "${set} " tar zxfp ${SETSDIR}/${set}.tgz -C ${CHROOTDIR} done echo "done" echo -n "preparing packages..." for pkg in ${PKGLIST} do echo -n "${pkg} " pkg_tarup -d ${PACKAGES} ${pkg} done echo "done" do_mount echo -n "installing packages... " for pkg in ${PKGLIST} do echo -n "${pkg} " chroot ${CHROOTDIR} pkg_add ${PACKAGES}/${pkg}-[0-9]*.tgz done echo "done" echo -n "copying files... " (cd ${CPFILES} && tar cf - .)|(cd ${CHROOTDIR} && tar xf -) echo "done" echo -n "copying services scripts..." for service in ${SERVICES} do chroot ${CHROOTDIR} cp -f ${PREFIX}/share/examples/rc.d/${service} \ /etc/rc.d/ done echo "done" do_start ;; start) do_mount do_start ;; stop) do_stop do_umount ;; *) echo "invalid command" exit 1 ;; esac