Skip to content

Commit

Permalink
t1509: update prepare script to be able to run t1509 in chroot again
Browse files Browse the repository at this point in the history
Tested on Gentoo and OpenSUSE 13.1, both x86-64

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
pclouds authored and gitster committed Apr 19, 2015
1 parent 282616c commit 64f2589
Showing 1 changed file with 29 additions and 9 deletions.
38 changes: 29 additions & 9 deletions t/t1509/prepare-chroot.sh
Expand Up @@ -14,25 +14,45 @@ xmkdir() {

R="$1"

[ "$(id -u)" -eq 0 ] && die "This script should not be run as root, what if it does rm -rf /?"
[ -n "$R" ] || die "usage: prepare-chroot.sh <root>"
[ -x git ] || die "This script needs to be executed at git source code's top directory"
[ -x /bin/busybox ] || die "You need busybox"
if [ -x /bin/busybox ]; then
BB=/bin/busybox
elif [ -x /usr/bin/busybox ]; then
BB=/usr/bin/busybox
else
die "You need busybox"
fi

xmkdir "$R" "$R/bin" "$R/etc" "$R/lib" "$R/dev"
[ -c "$R/dev/null" ] || die "/dev/null is missing. Do mknod $R/dev/null c 1 3 && chmod 666 $R/dev/null"
touch "$R/dev/null"
echo "root:x:0:0:root:/:/bin/sh" > "$R/etc/passwd"
echo "$(id -nu):x:$(id -u):$(id -g)::$(pwd)/t:/bin/sh" >> "$R/etc/passwd"
echo "root::0:root" > "$R/etc/group"
echo "$(id -ng)::$(id -g):$(id -nu)" >> "$R/etc/group"

[ -x "$R/bin/busybox" ] || cp /bin/busybox "$R/bin/busybox"
[ -x "$R/bin/sh" ] || ln -s /bin/busybox "$R/bin/sh"
[ -x "$R/bin/su" ] || ln -s /bin/busybox "$R/bin/su"
[ -x "$R$BB" ] || cp $BB "$R/bin/busybox"
for cmd in sh su ls expr tr basename rm mkdir mv id uname dirname cat true sed diff; do
ln -f -s /bin/busybox "$R/bin/$cmd"
done

mkdir -p "$R$(pwd)"
rsync --exclude-from t/t1509/excludes -Ha . "$R$(pwd)"
ldd git | grep '/' | sed 's,.*\s\(/[^ ]*\).*,\1,' | while read i; do
mkdir -p "$R$(dirname $i)"
cp "$i" "$R/$i"
# Fake perl to reduce dependency, t1509 does not use perl, but some
# env might slip through, see test-lib.sh, unset.*PERL_PATH
sed 's|^PERL_PATH=.*|PERL_PATH=/bin/true|' GIT-BUILD-OPTIONS > "$R$(pwd)/GIT-BUILD-OPTIONS"
for cmd in git $BB;do
ldd $cmd | grep '/' | sed 's,.*\s\(/[^ ]*\).*,\1,' | while read i; do
mkdir -p "$R$(dirname $i)"
cp "$i" "$R/$i"
done
done
echo "Execute this in root: 'chroot $R /bin/su - $(id -nu)'"
cat <<EOF
All is set up in $R, execute t1509 with the following commands:
sudo chroot $R /bin/su - $(id -nu)
IKNOWWHATIAMDOING=YES ./t1509-root-worktree.sh -v -i
When you are done, simply delete $R to clean up
EOF

0 comments on commit 64f2589

Please sign in to comment.