]> git.wh0rd.org - home.git/blame - .bin/custom-chroot
mount /usr/local/src if it exists
[home.git] / .bin / custom-chroot
CommitLineData
36c3082a 1#!/bin/bash -e
dc24f4e1 2
a4b1ac78 3[[ -w / ]] || exec sudo env HOME="$HOME" "$0" "$@"
a5307b94 4
f2ff891e
MF
5if [[ -z ${UNSHARE} ]] ; then
6 mount_args=
7 if type -P unshare >&/dev/null ; then
8 UNSHARE=true exec unshare -m -- "$0" "$@"
9 fi
10else
11 mount_args='-n'
12fi
13unset UNSHARE
14
d4759d73 15mounts="proc sys tmp dev dev/pts usr/portage usr/portage/distfiles usr/local/src"
dc24f4e1
MF
16
17chroot=${0%/*}
36c3082a
MF
18case ${chroot} in
19 .) chroot=${PWD} ;;
a5307b94 20 ./*) chroot=${PWD}/${chroot#./} ;;
36c3082a 21esac
dc24f4e1
MF
22cd "${chroot}"
23
a5307b94 24do_umount() {
d4759d73 25 local m mounts=$(mount | grep ${chroot} | awk '{print $3}' | tac)
a5307b94 26 for m in ${mounts} ; do
d4759d73
MF
27 echo "unmounting ${m}"
28 umount "${m}"
a5307b94
MF
29 done
30 if [[ -z ${mounts} ]] ; then
31 echo "nothing mounted in ${chroot}"
32 fi
33 exit 0
34}
35
36while [[ -n $1 ]] ; do
37 case $1 in
abed72e8
MF
38 -u) do_umount ;;
39 -m) mounts+=" $2"; shift ;;
40 -*) echo "unknown option $1"; exit 1 ;;
41 *) break ;;
a5307b94 42 esac
abed72e8 43 shift
a5307b94
MF
44done
45
dc24f4e1 46maybe_mount() {
a5307b94
MF
47 local src=/$1 dst=${chroot}/${2:-$1}
48 [[ -d ${src} ]] || return 0
49 mkdir -p "${dst}"
f2ff891e 50 grep -sq "${dst}" /proc/mounts || mount ${mount_args} --bind "${src}" "${dst}"
dc24f4e1
MF
51}
52for m in ${mounts} ; do
53 maybe_mount ${m}
54done
55
56get_type() {
57 case $(file "$1") in
9d8e5f77
MF
58 *x86-64*) echo x86_64;;
59 *"Intel 80386"*) echo i386;;
60 *32-bit*PowerPC*) echo ppc;;
61 *64-bit*PowerPC*) echo ppc64;;
dc24f4e1
MF
62 esac
63}
64bin_dst=$(get_type bin/bash)
f2ff891e 65setarch=
9d8e5f77 66if [[ -n ${bin_dst} ]] && type -P setarch &>/dev/null ; then
dc24f4e1
MF
67 setarch="setarch ${bin_dst}"
68fi
69
36c3082a 70if [[ ! -L etc/mtab ]] ; then
dc24f4e1
MF
71 rm -f etc/mtab
72 ln -sf /proc/mounts etc/mtab
73fi
74etc="
75 hosts
76 locale.gen
77 localtime
78 resolv.conf
79"
36c3082a 80home="
dc24f4e1 81 .inputrc
619e4d70
MF
82 .gdbinit
83 .gitconfig
dc24f4e1
MF
84 .nanorc
85"
86for f in \
87 $(printf 'etc/%s ' ${etc}) \
dc24f4e1 88; do
d1eee076
MF
89 if [ -e "/${f}" ] ; then
90 cp /${f} ${f}
91 fi
dc24f4e1 92done
36c3082a
MF
93for f in ${home} ; do
94 cp ~/${f} root/${f}
95done
dc24f4e1
MF
96
97unset LS_COLORS # format changes over time
a5307b94 98[[ $# -eq 0 ]] && set -- env HOME=/root /bin/bash -l
36c3082a
MF
99exec \
100 ${setarch} \
101 chroot "${chroot}" \
102 "$@"