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