Path: utzoo!utgpu!water!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!mailrus!ames!pasteur!ucbvax!hplabs!hpda!hpsemc!bd From: bd@hpsemc.HP.COM (bob desinger) Newsgroups: comp.unix.wizards Subject: Re: relative pathname question! Message-ID: <570018@hpsemc.HP.COM> Date: 16 Aug 88 22:45:48 GMT References: <1670003@hpcilzb.HP.COM> Organization: HP Technology Access Center, Cupertino, CA Lines: 103 Doug Gwyn (gwyn@smoke.ARPA) writes: > In article <453@infohh.rmi.de> rlj-nbg@infohh.rmi.de (R.L. Jakschewitz) writes: > -chroot newroot command > -is one way to extract tar-chives that have been written with > -absolute pathnames relative to 'newroot'. > > Only if you set up things like mkdir in the new /bin first! Not just mkdir (hm-mmm, my SysV tar calls mkdir() but doesn't fork it ---but I digress). You'll need the tar binary and the /dev/ device file path to the tape after running chroot. The following script does what you want on System V. (BSD sites will have to change a few paths in it, like /dev/rmt/0m. Strict SysV sites lacking `whoami' will need to change it to `id' piped to sed. ...Well, okay, the script works fine on HP-UX and other modern SysV implementations offering BSD extras.) -- bd #! /bin/sh # This is a shell archive. Remove anything before this line, # then unwrap it by saving it in a file and typing "sh file". # # Wrapped by bd at hpsemc on Tue Aug 16 12:52:08 1988 # Contents: # readtape PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:$PATH; export PATH echo 'At the end, you should see the message "End of shell archive."' echo Extracting readtape cat >readtape <<'@//E*O*F readtape//' #! /bin/sh : Reads a tar tape written with absolute pathnames into a relative path. # @(#)readtape 1.2 10/08/86 # Usage: # [1] % cd /some/directory/somewhere # [2] % cp `which readtape` readtape # [3] % su root -c "cd /some/directory/somewhere && ./readtape" me=`basename $0` USAGE="Usage (a three-step process): % cd /some/directory/somewhere % cp /usr/public/bin/readtape readtape % su root -c \"cd \`pwd\` && ./readtape\"" # We assume we're in the place where we want the files to land. # We also assume that readtape is here already and that you're super-user now, # but make sure of that first. if [ ! -f ./readtape ] then echo >&2 "$me: Sorry, no readtape in `pwd`" echo >&2 "$USAGE" exit 1 elif [ ! -x ./readtape ] then echo >&2 "$me: Sorry, ./readtape isn't executable" echo >&2 "$USAGE" exit 1 elif [ `whoami` != root ] then echo >&2 "$me: Sorry, you must be root to run readtape" echo >&2 "$USAGE" exit 1 elif [ $# -ne 0 ] then echo >&2 "$USAGE" exit 1 fi # Here we know an executable readtape is here and that we're super-user. # Get the tar program into a known place. cp /usr/bin/tar tar # Create the mag tape device file from which tar will read. set - `ls -l /dev/rmt/0m` # crw-rw-rw- 1 root other 5 0x020000 Aug 22 14:30 /dev/rmt/0m mkdir dev dev/rmt mknod dev/rmt/0m c $5 $6 chmod 666 dev/rmt/0m # Now read in the tape. /etc/chroot `pwd` ./tar xp tarstatus=$? # Clean up after yourself. dir=`pwd` test $dir != / && rm -rf dev test $dir != /usr/bin && rm -f tar # Exit, returning the status returned by tar. exit $tarstatus @//E*O*F readtape// set `wc -lwc