1 1.1.1.1.4.2 matt #!/bin/sh 2 1.1.1.1.4.2 matt 3 1.1.1.1.4.2 matt umask 022 4 1.1.1.1.4.2 matt PATH=/usr/bin:/sbin:/usr/sbin 5 1.1.1.1.4.2 matt 6 1.1.1.1.4.2 matt # Create chroot'd area under Solaris 2.5.1 for postfix. 7 1.1.1.1.4.2 matt # 8 1.1.1.1.4.2 matt # Dug Song <dugsong (at] UMICH.EDU> 9 1.1.1.1.4.2 matt 10 1.1.1.1.4.2 matt if [ $# -ne 1 ]; then 11 1.1.1.1.4.2 matt echo "Usage: `basename $0` <directory>, e.g.: /var/spool/postfix" ; exit 1 12 1.1.1.1.4.2 matt fi 13 1.1.1.1.4.2 matt 14 1.1.1.1.4.2 matt CHROOT=$1 15 1.1.1.1.4.2 matt 16 1.1.1.1.4.2 matt # If CHROOT does not exist but parent does, create CHROOT 17 1.1.1.1.4.2 matt if [ ! -d ${CHROOT} ]; then 18 1.1.1.1.4.2 matt # lack of -p below is intentional 19 1.1.1.1.4.2 matt mkdir ${CHROOT} 20 1.1.1.1.4.2 matt fi 21 1.1.1.1.4.2 matt if [ ! -d ${CHROOT} -o "${CHROOT}" = "/" -o "${CHROOT}" = "/usr" ]; then 22 1.1.1.1.4.2 matt echo "$0: bad chroot directory ${CHROOT}" 23 1.1.1.1.4.2 matt exit 2 24 1.1.1.1.4.2 matt fi 25 1.1.1.1.4.2 matt for dir in etc/default etc/inet dev usr/lib usr/share/lib/zoneinfo ; do 26 1.1.1.1.4.2 matt if [ ! -d ${CHROOT}/${dir} ]; then mkdir -p ${CHROOT}/${dir} ; fi 27 1.1.1.1.4.2 matt done 28 1.1.1.1.4.2 matt #chmod -R 755 ${CHROOT} 29 1.1.1.1.4.2 matt 30 1.1.1.1.4.2 matt # AFS support. 31 1.1.1.1.4.2 matt if [ "`echo $CHROOT | cut -c1-4`" = "/afs" ]; then 32 1.1.1.1.4.2 matt echo '\tCreating memory resident /dev...' 33 1.1.1.1.4.2 matt mount -F tmpfs -o size=10 swap ${CHROOT}/dev 34 1.1.1.1.4.2 matt fi 35 1.1.1.1.4.2 matt 36 1.1.1.1.4.2 matt # Setup /etc files. 37 1.1.1.1.4.2 matt cp /etc/nsswitch.conf ${CHROOT}/etc 38 1.1.1.1.4.2 matt cp /etc/netconfig /etc/resolv.conf ${CHROOT}/etc 39 1.1.1.1.4.2 matt cp /etc/default/init ${CHROOT}/etc/default 40 1.1.1.1.4.2 matt cp /etc/inet/services ${CHROOT}/etc/inet/services 41 1.1.1.1.4.2 matt ln -s /etc/inet/services ${CHROOT}/etc/services 42 1.1.1.1.4.2 matt find ${CHROOT}/etc -type f -exec chmod 444 {} \; 43 1.1.1.1.4.2 matt 44 1.1.1.1.4.2 matt # Most of the following are needed for basic operation, except 45 1.1.1.1.4.2 matt # for libnsl.so, nss_nis.so, libsocket.so, and straddr.so which are 46 1.1.1.1.4.2 matt # needed to resolve NIS names. 47 1.1.1.1.4.2 matt cp /usr/lib/ld.so /usr/lib/ld.so.1 ${CHROOT}/usr/lib 48 1.1.1.1.4.2 matt for lib in libc libdl libintl libmp libnsl libsocket libw \ 49 1.1.1.1.4.2 matt nss_nis nss_nisplus nss_dns nss_files; do 50 1.1.1.1.4.2 matt cp /usr/lib/${lib}.so.1 ${CHROOT}/usr/lib 51 1.1.1.1.4.2 matt rm -f ${CHROOT}/usr/lib/${lib}.so 52 1.1.1.1.4.2 matt ln -s ./${lib}.so.1 ${CHROOT}/usr/lib/${lib}.so 53 1.1.1.1.4.2 matt done 54 1.1.1.1.4.2 matt cp /usr/lib/straddr.so.2 ${CHROOT}/usr/lib 55 1.1.1.1.4.2 matt rm -f ${CHROOT}/usr/lib/straddr.so 56 1.1.1.1.4.2 matt ln -s ./straddr.so.2 ${CHROOT}/usr/lib/straddr.so 57 1.1.1.1.4.2 matt chmod 555 ${CHROOT}/usr/lib/* 58 1.1.1.1.4.2 matt 59 1.1.1.1.4.2 matt # Copy timezone database. 60 1.1.1.1.4.2 matt (cd ${CHROOT}/usr/share/lib/zoneinfo 61 1.1.1.1.4.2 matt (cd /usr/share/lib/zoneinfo; find . -print | cpio -o) | cpio -imdu 62 1.1.1.1.4.2 matt find . -print | xargs chmod 555 63 1.1.1.1.4.2 matt ) 64 1.1.1.1.4.2 matt 65 1.1.1.1.4.2 matt # Make device nodes. We need ticotsord, ticlts and udp to resolve NIS names. 66 1.1.1.1.4.2 matt for device in zero tcp udp ticotsord ticlts; do 67 1.1.1.1.4.2 matt line=`ls -lL /dev/${device} | sed -e 's/,//'` 68 1.1.1.1.4.2 matt major=`echo $line | awk '{print $5}'` 69 1.1.1.1.4.2 matt minor=`echo $line | awk '{print $6}'` 70 1.1.1.1.4.2 matt rm -f ${CHROOT}/dev/${device} 71 1.1.1.1.4.2 matt mknod ${CHROOT}/dev/${device} c ${major} ${minor} 72 1.1.1.1.4.2 matt done 73 1.1.1.1.4.2 matt chmod 666 ${CHROOT}/dev/* 74 1.1.1.1.4.2 matt 75 1.1.1.1.4.2 matt exit 0 76