Difference between revisions of "Chroot notes"

From Noah.org
Jump to: navigation, search
m (Copy an existing root filesystem)
m (Copy an existing root filesystem)
 
(2 intermediate revisions by the same user not shown)
Line 5: Line 5:
  
 
This script copies an existing rootfs to one that is to be used in a chroot environment. This copies '''everything''', so it should give you a full environment with everything you need to run anything that would run under the original rootfs. The copy rootfs should look and work exactly like the original. This is useful for creating new versions of rootfs images in embedded systems. This is not efficient if you just want to run a single program under a jail, but this eliminates any doubts and should always "just work".
 
This script copies an existing rootfs to one that is to be used in a chroot environment. This copies '''everything''', so it should give you a full environment with everything you need to run anything that would run under the original rootfs. The copy rootfs should look and work exactly like the original. This is useful for creating new versions of rootfs images in embedded systems. This is not efficient if you just want to run a single program under a jail, but this eliminates any doubts and should always "just work".
 +
 +
There are some fuzzy parts here. Copying /var from a running system is questionable.
  
 
<pre>
 
<pre>
Line 27: Line 29:
 
cp -a /usr .
 
cp -a /usr .
 
cp -a /var .
 
cp -a /var .
## # Enter the chroot jail, which should look exactly like the real rootfs.
+
## # Bind mount kernel directories for chroot to use.
 +
## mount -o bind /proc /media/adhoc/rootfs/proc
 +
## mount -o bind /dev /media/adhoc/rootfs/dev
 +
## mount -o bind /dev/pts /media/adhoc/rootfs/dev/pts
 +
## mount -o bind /sys /media/adhoc/rootfs/sys
 +
## cp /etc/resolv.conf /media/adhoc/rootfs/etc/resolv.conf
 +
## # Enter the chroot jail, which should look exactly like the original rootfs.
 
## chroot ${TARGET_DIR} /bin/bash -l
 
## chroot ${TARGET_DIR} /bin/bash -l
 
## # The /proc and /sys filesystems may need to be remounted inside the jail.
 
## # The /proc and /sys filesystems may need to be remounted inside the jail.
 +
## # This should be handled outside the jail using `mount -o bind`.
 
## mount -t proc proc /proc
 
## mount -t proc proc /proc
 
## mount -t sysfs sysfs /sys
 
## mount -t sysfs sysfs /sys
 +
## cp /proc/mounts /etc/mtab
 
</pre>
 
</pre>

Latest revision as of 22:28, 7 September 2010


Copy an existing root filesystem

This script copies an existing rootfs to one that is to be used in a chroot environment. This copies everything, so it should give you a full environment with everything you need to run anything that would run under the original rootfs. The copy rootfs should look and work exactly like the original. This is useful for creating new versions of rootfs images in embedded systems. This is not efficient if you just want to run a single program under a jail, but this eliminates any doubts and should always "just work".

There are some fuzzy parts here. Copying /var from a running system is questionable.

#!/bin/sh
## mount /dev/sda1 /media/adhoc
## debootstrap jaunty /media/adhoc/rootfs/ http://ports.ubuntu.com/
## cd /media/adhoc/rootfs
TARGET_DIR=$1
cd ${TARGET_DIR}
cp -a /bin .
cp -a /boot .
cp -a /dev .
cp -a /etc .
cp -a /home .
cp -a /lib .
cp --preserve=all --no-dereference /media .
cp --preserve=all --no-dereference /mnt .
cp -a /opt .
cp -a /root .
cp -a /sbin .
cp --preserve=all --no-dereference /srv .
cp -a /usr .
cp -a /var .
## # Bind mount kernel directories for chroot to use.
## mount -o bind /proc /media/adhoc/rootfs/proc
## mount -o bind /dev /media/adhoc/rootfs/dev
## mount -o bind /dev/pts /media/adhoc/rootfs/dev/pts
## mount -o bind /sys /media/adhoc/rootfs/sys
## cp /etc/resolv.conf /media/adhoc/rootfs/etc/resolv.conf
## # Enter the chroot jail, which should look exactly like the original rootfs.
## chroot ${TARGET_DIR} /bin/bash -l
## # The /proc and /sys filesystems may need to be remounted inside the jail.
## # This should be handled outside the jail using `mount -o bind`.
## mount -t proc proc /proc
## mount -t sysfs sysfs /sys
## cp /proc/mounts /etc/mtab