#! /bin/sh
#
# To say that this is fucking dangerous is an understatement.
# DO NOT use as-is. This is for a special use case.
# SPF 10,000,000 sunglasses recommended. Use extreme caution.
# You have been warned
#
if [ ! -d /j/jails ]; then exit; fi
cd /j/jails || exit
chflags -R noschg /var/tmp/temproot
rm -rf /var/tmp/temproot
jails=""
for i in *; do
  if [ -d $i/basejail -a -f $i/etc/master.passwd ]; then
    jails="$jails $i"
  fi
done
echo jails = $jails

cd /usr/src; yes | make delete-old DESTDIR=/j/jails/basejail
r=$(uname -r)
case $r in
7.* | 8.* | 9.*)
  ;;
*)
  rm -rf /j/jails/*/var/named
  ;;
esac
for i in $jails; do
  echo doing $i
  rm -f /j/jails/$i/etc/rc.d/*
  rm -f /j/jails/$i/etc/periodic/*/*
  for d in rc.d periodic defaults pam.d mtree devd; do
    cd /usr/src/etc/$d && make DESTDIR=/j/jails/$i install
  done
  cp /usr/src/COPYRIGHT /j/jails/$i/COPYRIGHT
  cp /usr/src/etc/root/dot.cshrc /j/jails/$i/.cshrc
  cp /usr/src/etc/root/dot.login /j/jails/$i/.login
  cp /usr/src/etc/root/dot.profile /j/jails/$i/.profile
  rm -f /j/jails/$i/root/.cshrc ; ln  /j/jails/$i/.cshrc /j/jails/$i/root/.cshrc
  rm -f /j/jails/$i/root/.login ; ln  /j/jails/$i/.login /j/jails/$i/root/.login
  rm -f /j/jails/$i/root/.profile ; ln  /j/jails/$i/.profile /j/jails/$i/root/.profile
  cp /usr/src/etc/devd.conf /j/jails/$i/etc/devd.conf
  cp /usr/src/etc/mac.conf /j/jails/$i/etc/mac.conf
  cp /usr/src/etc/portsnap.conf /j/jails/$i/etc/portsnap.conf
  cp /usr/src/etc/freebsd-update.conf /j/jails/$i/etc/freebsd-update.conf
  cp /usr/src/etc/ftpusers /j/jails/$i/etc/ftpusers
  cp /usr/src/etc/netstart /j/jails/$i/etc/netstart
  cp /usr/src/etc/protocols /j/jails/$i/etc/protocols
  cp /usr/src/etc/rc /j/jails/$i/etc/rc
  cp /usr/src/etc/rc.subr /j/jails/$i/etc/rc.subr
  cp /usr/src/etc/rc.resume /j/jails/$i/etc/rc.resume
  cp /usr/src/etc/rc.shutdown /j/jails/$i/etc/rc.shutdown
  cp /usr/src/etc/rc.initdiskless /j/jails/$i/etc/rc.initdiskless
  cp /usr/src/etc/rc.firewall /j/jails/$i/etc/rc.firewall
  cp /usr/src/etc/pf.os /j/jails/$i/etc/pf.os
  cp /usr/src/etc/pccard_ether /j/jails/$i/etc/pccard_ether
  cp /usr/src/etc/disktab /j/jails/$i/etc/disktab
  cp /usr/src/etc/gettytab /j/jails/$i/etc/gettytab
  cp /usr/src/etc/network.subr /j/jails/$i/etc/network.subr
  cp /usr/src/etc/regdomain.xml /j/jails/$i/etc/regdomain.xml
  cp /usr/src/contrib/openbsm/etc/audit_event /j/jails/$i/etc/security/audit_event
  cp /usr/src/crypto/openssh/moduli /j/jails/$i/etc/ssh/moduli
  cd /usr/src; yes | make delete-old DESTDIR=/j/jails/$i
done

rm -f /basejail
ln -s /j/jails/basejail /
for i in $jails; do
  echo doing $i
  if [ $i != newjail ]; then
    rm -rf /j/jails/$i/boot
    mkdir -p /j/jails/$i/boot
    mergemaster -iF -D /j/jails/$i
    chroot /j/jails/$i pwd_mkdb -p /etc/master.passwd
    chroot /j/jails/$i cap_mkdb /etc/login.conf
    rm -rf /j/jails/$i/boot
    ln -s /basejail/boot /j/jails/$i/boot
  fi
done
