blob: fa66e84dcc70d464402f76afc5d1d66317ee201b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#!/bin/sh -e
# Enter a chroot
log() {
printf '\033[32m->\033[m %s.\n' "$*"
}
usage() { printf '%s [dir]\n' "${0##*/}"; exit 0;}
die() {
log "$*" >&2
exit 1
}
clean() {
log Unmounting /dev, /proc and /sys from chroot; {
umount "$1/dev" ||:
umount "$1/proc" ||:
umount "$1/sys" ||:
}
log Cleaning leftover host files; {
rm -f "$1/root/.ash_history"
}
}
main() {
case "$1" in ''|--help|-h) usage; esac
[ -d "$1" ] || die Given path does not exist
[ "$(id -u)" = 0 ] || die Script needs to be run as root
[ "$2" ] || {
march=$(uname -m 2>/dev/null) ||:
case "$march" in
'') march=native ;;
x86_64) march=x86-64 ;;
i*86) march=i686 ;;
esac
}
trap 'clean "$1"' EXIT INT
log Mounting /dev, /proc and /sys from host; {
mountpoint -q "$1/dev" || mount -o bind /dev "$1/dev"
mountpoint -q "$1/proc" || mount -t proc proc "$1/proc"
mountpoint -q "$1/sys" || mount -t sysfs sys "$1/sys"
}
log Copying /etc/resolv.conf from host; {
[ -f "$1/etc/resolv.conf" ] || cp /etc/resolv.conf "$1/etc"
}
log Entering chroot; {
chroot "$1" /usr/bin/env -i \
HOME=/root \
TERM="$TERM" \
SHELL=/bin/sh \
USER=root \
CFLAGS="${CFLAGS:--march=$march -mtune=generic -pipe -Os}" \
CXXFLAGS="${CXXFLAGS:--march=$march -mtune=generic -pipe -Os}" \
MAKEFLAGS="${MAKFLAGS:--j$(nproc 2>/dev/null || echo 1)}" \
/bin/sh -l
}
}
main "$@"
|