@@ -14,25 +14,45 @@ xmkdir() {
14
14
15
15
R=" $1 "
16
16
17
+ [ " $( id -u) " -eq 0 ] && die " This script should not be run as root, what if it does rm -rf /?"
17
18
[ -n " $R " ] || die " usage: prepare-chroot.sh <root>"
18
19
[ -x git ] || die " This script needs to be executed at git source code's top directory"
19
- [ -x /bin/busybox ] || die " You need busybox"
20
+ if [ -x /bin/busybox ]; then
21
+ BB=/bin/busybox
22
+ elif [ -x /usr/bin/busybox ]; then
23
+ BB=/usr/bin/busybox
24
+ else
25
+ die " You need busybox"
26
+ fi
20
27
21
28
xmkdir " $R " " $R /bin" " $R /etc" " $R /lib" " $R /dev"
22
- [ -c " $R /dev/null " ] || die " /dev/null is missing. Do mknod $R /dev/null c 1 3 && chmod 666 $R /dev/null"
29
+ touch " $R /dev/null"
23
30
echo " root:x:0:0:root:/:/bin/sh" > " $R /etc/passwd"
24
31
echo " $( id -nu) :x:$( id -u) :$( id -g) ::$( pwd) /t:/bin/sh" >> " $R /etc/passwd"
25
32
echo " root::0:root" > " $R /etc/group"
26
33
echo " $( id -ng) ::$( id -g) :$( id -nu) " >> " $R /etc/group"
27
34
28
- [ -x " $R /bin/busybox" ] || cp /bin/busybox " $R /bin/busybox"
29
- [ -x " $R /bin/sh" ] || ln -s /bin/busybox " $R /bin/sh"
30
- [ -x " $R /bin/su" ] || ln -s /bin/busybox " $R /bin/su"
35
+ [ -x " $R$BB " ] || cp $BB " $R /bin/busybox"
36
+ for cmd in sh su ls expr tr basename rm mkdir mv id uname dirname cat true sed diff; do
37
+ ln -f -s /bin/busybox " $R /bin/$cmd "
38
+ done
31
39
32
40
mkdir -p " $R $( pwd) "
33
41
rsync --exclude-from t/t1509/excludes -Ha . " $R $( pwd) "
34
- ldd git | grep ' /' | sed ' s,.*\s\(/[^ ]*\).*,\1,' | while read i; do
35
- mkdir -p " $R $( dirname $i ) "
36
- cp " $i " " $R /$i "
42
+ # Fake perl to reduce dependency, t1509 does not use perl, but some
43
+ # env might slip through, see test-lib.sh, unset.*PERL_PATH
44
+ sed ' s|^PERL_PATH=.*|PERL_PATH=/bin/true|' GIT-BUILD-OPTIONS > " $R $( pwd) /GIT-BUILD-OPTIONS"
45
+ for cmd in git $BB ; do
46
+ ldd $cmd | grep ' /' | sed ' s,.*\s\(/[^ ]*\).*,\1,' | while read i; do
47
+ mkdir -p " $R $( dirname $i ) "
48
+ cp " $i " " $R /$i "
49
+ done
37
50
done
38
- echo " Execute this in root: 'chroot $R /bin/su - $( id -nu) '"
51
+ cat << EOF
52
+ All is set up in $R , execute t1509 with the following commands:
53
+
54
+ sudo chroot $R /bin/su - $( id -nu)
55
+ IKNOWWHATIAMDOING=YES ./t1509-root-worktree.sh -v -i
56
+
57
+ When you are done, simply delete $R to clean up
58
+ EOF
0 commit comments