2 # Sets up (if necessary) and chroots into a different environment.
3 # Expects root privileges, does not drop them.
5 # By Alan M Bruce (qole) with help from Benson Mitchell and Thomas Perl
7 # GPL licensed; keep code free!
9 # This script should have a wrapper to set up extra variables,
10 # OR, it can be run as a command:
11 # ezchroot <part/file/'none'> <chroot dir> <command> <params...>
13 if [ "`whoami`" != "root" ] ; then
14 echo "please run me as root!"
24 # echo ezchroot $IMGFILE $CHROOT $*
26 qmount $IMGFILE $CHROOT
29 if [ "$MOUNTSUCCESS" != "1" ] && [ "$MOUNTSUCCESS" != "0" ] ; then
30 echo Cancelling chroot...
34 if [ "$MOUNTSUCCESS" = "0" ] ; then
35 #Make the tablet's devices available to the chroot
37 mount -o bind /dev "$CHROOT/dev"
38 mount -o bind /proc "$CHROOT/proc"
40 #Gentoo wiki says this will make X work
42 mount -t devpts none "$CHROOT/dev/pts"
43 mount -o bind /tmp "$CHROOT/tmp"
45 #Open e-mail attachments, etc
46 mount -o bind /var/tmp "$CHROOT/var/tmp"
48 #ArchLinux suggestions
49 mount -o bind /dev/shm "$CHROOT/dev/shm"
50 mount -o bind /sys "$CHROOT/sys"
54 MNTD=`cat /proc/mounts | grep ' /media/' | awk '{print $2}'`
56 for MDRV in $MNTD ; do
57 if [ ! -d "$CHROOT$MDRV" ] ; then
58 mkdir -p "$CHROOT$MDRV"
60 mount -o bind "$MDRV" "$CHROOT$MDRV"
63 #Mount the user's home dir
64 echo .... >/dev/stderr
65 #mount -o bind /home/user "$CHROOT/home/user"
67 # Do it the Fremantle way.
68 mount /dev/mmcblk0p2 "$CHROOT/home"
69 mount /dev/mmcblk0p1 "$CHROOT/home/user/MyDocs"
72 mount -o bind /var/run/dbus "$CHROOT/var/run/dbus"
73 mount -o bind /var/lib/dbus "$CHROOT/var/lib/dbus"
76 mount -o bind /var/run/pulse "$CHROOT/var/run/pulse"
78 #Speed hacks: lower the priority of processes
79 #renice 0 `pidof mmcqd`
80 #renice 20 `pidof trackerd`
82 # Sync the chroot if requested...
83 if [ -f /home/user/.synchroot ] ; then
84 /sbin/synchroot $CHROOT
85 rm /home/user/.synchroot
88 # Place any commands you wish to run the first time you chroot
89 # into the /var/run/onfirstchroot-ext.rc file (inside your rootfs)
91 if [ -f "$CHROOT/var/run/onfirstchroot-ext.rc" ] ; then
92 . "$CHROOT/var/run/onfirstchroot-ext.rc"
95 # Place any commands you wish to run from inside the chroot
96 # the first time you chroot into the /var/run/onfirstchroot.rc
97 # file (inside your rootfs)
99 if [ -f "$CHROOT/var/run/onfirstchroot.rc" ] ; then
100 chroot $CHROOT "/var/run/onfirstchroot.rc"
105 # Place any commands you wish to run every time you chroot
106 # into the /var/run/onchroot-ext.rc file (inside your rootfs)
108 if [ -f "$CHROOT/var/run/onchroot-ext.rc" ] ; then
109 . "$CHROOT/var/run/onchroot-ext.rc"
112 # Place any commands you wish to run from inside the chroot
113 # every time you chroot into the /var/run/onchroot.rc
114 # file (inside your rootfs)
116 if [ -f "$CHROOT/var/run/onchroot.rc" ] ; then
117 chroot $CHROOT "/var/run/onchroot.rc"
120 #All set up. Set flag for next time...
122 if [ ! -d "$CHROOT/var/lock" ] ; then
123 mkdir -p "$CHROOT/var/lock"
126 trap "rm -f $CHROOT/var/lock/chroot-complete ; echo -ne '\033]0;osso_xterm\007' ; exit" INT TERM EXIT
127 echo $IMGFILE $@ > "$CHROOT/var/lock/chroot-complete"
129 #If the file is mounted on loop, use that label.
131 #Custom prompt and xterm title. Reduces confusion.
132 CHRLABEL=`blkid -s LABEL $IMGFILE | cut -d' ' -f2 | cut -d'=' -f2 | sed 's/"//g'`
134 #If the file is mounted on loop, use that label.
135 if [ "x$CHRLABEL" = "x" ] ; then
136 CHRLABEL=`blkid -s LABEL /dev/loop0 | cut -d' ' -f2 | cut -d'=' -f2 | sed 's/"//g'`
139 if [ "x$CHRLABEL" = "x" ] ; then
143 echo -ne "\033]0;$CHRLABEL\007" >/dev/stderr
144 export PS1="[\u@$CHRLABEL: \w]"
147 echo "Everything set up, running chroot..." >/dev/stderr