#!/bin/sh # this script finds all binaries and updates them with the ones # from your system, in order to maintain them more easily. # Be careful. If you have specially made binaries (perhaps lean ones), # they will be overwritten. TOPDIR=`pwd` R=roottree PATH="/sbin:/bin:/usr/sbin:/usr/bin:$PATH" # Cleanup and make necessary directories rm -rf $R/sbin mkdir -p $R/etc $R/initrd $R/lib $R/mnt $R/mnt/cdrom mkdir -p $R/proc $R/root $R/sbin $R/tmp $R/var mkdir -p $R/dev $R/sys $R/initrd $R/sysroot mkdir -p $R/etc/terminfo $R/etc/terminfo/l mkdir -p $R/var/lib $R/var/log $R/var/run $R/var/state mkdir -p $R/var/lib/nfs mkdir -p $R/var/log/news touch $R/var/log/news/news.crit $R/var/log/news/news.err $R/var/log/news.notice cd $R ln -sf sbin bin cd $TOPDIR # # Some users have a different shell for root, so be # sure to add it to the rootsbin list. Note, the shell may # be copied twice, but it is not worth the effort to run uniq # here. # TMPFILE=`mktemp -t bin.XXXXXXXXXX` if [ $? != 0 ]; then echo "Could not make temp file" exit 1 fi cat rootsbin.list >${TMPFILE} command=`grep ^root: /etc/passwd | cut -d ':' -f 7` command=`basename $command` if [ x$command != "xbash" ] ; then echo "roottree/sbin/$command" >>${TMPFILE} fi echo "Building root /sbin. Some Could not find messages are normal ..." for file in `cat ${TMPFILE}` ; do command=`basename $file` fullfile=`which $command 2> /dev/null` if [ x$fullfile != x ] ; then # echo "updating $command in roottree with $fullfile" cp -fpd $fullfile $file if [ $? != 0 ] ; then echo "Update failed." exit 1 fi strip $file 2>/dev/null else echo "==== Could not find $command on your system ====" rm -f $file fi done rm -f ${TMPFILE} cd roottree/sbin ln -sf halt reboot # Eliminate recursive link rm -f sbin cd $TOPDIR # Copy all needed shared libraries echo "Building root shared libaries ..." rm -f `find roottree/lib/ -maxdepth 1 -type f 2>/dev/null` # # Statically linked binaries create an error # message from ldd, so we ignore those # for lib in `find roottree/sbin/ -type f -exec ldd {} \; | awk '{print $3}' | sort | uniq` ; do if [ -e $lib ] ; then cp -fp $lib roottree/lib/ if [ $? != 0 ] ; then echo "Update failed." exit 1 fi fi done # # Wouldn't you know, there is one so that is critical to have or # nothing will load on 2.6 kernels. # cp -fp /lib/ld-linux.so.* roottree/lib/ strip `find roottree/lib/ -maxdepth 1 -type f` 2>/dev/null # Grub crap mkdir -p roottree/usr/share/grub cp -fpr /usr/share/grub/* roottree/usr/share/grub # # Get a bunch of stuff from /etc # echo "Building /etc ..." cp -p /etc/services roottree/etc/ if [ $? != 0 ] ; then echo "Update failed." exit 1 fi for file in `cat rootetc.list` ; do if [ -e $file ] ; then cp -fp $file roottree/etc/ else echo "==== Could not find $file in /etc ====" fi done if [ -e /etc/modules.conf ] ; then cp -fp /etc/modules.conf roottree/etc/ fi if [ -e /etc/modprobe.conf ] ; then cp -fp /etc/modprobe.conf roottree/etc/ fi rm -rf roottree/etc/pam.d if [ -e /etc/pam.d ] ; then cp -a /etc/pam.d roottree/etc/ if [ -e /etc/pam.conf ] ; then cp -fp /etc/pam.conf roottree/etc/ fi fi if [ -e /etc/init.d ] ; then rm -rf roottree/etc/init.d cp -aL /etc/init.d roottree/etc/ fi if [ -e /etc/udev ] ; then rm -rf roottree/etc/udev cp -aL /etc/udev roottree/etc/ fi if [ -e /etc/ssh ] ; then cp -a /etc/ssh roottree/etc/ echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "!!!! !!!!" echo "!!!! Warning your /etc/ssh directory was copied. !!!!" echo "!!!! Keep this directory and the CDROM secure. !!!!" echo "!!!! !!!!" echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" fi if [ -e /etc/security ] ; then cp -a /etc/security roottree/etc/ fi # # Pull a few files needed by PAM # if [ -f /lib/libnss_files.so.1 ] ; then cp -fp /lib/libnss_files.so.1 roottree/lib/ fi cp -fp /lib/libnss_files.so.* roottree/lib/ cp -a /lib/security roottree/lib/