Difference between revisions of "Development Team/Chroot"

From Sugar Labs
Jump to navigation Jump to search
Line 16: Line 16:
 
  mount -t devpts devpts /dev/pts
 
  mount -t devpts devpts /dev/pts
  
==== Debian sid chroot ====
+
==== Debian squeeze chroot ====
 
With debootstrap, in order to get a working chroot, you want something like:  
 
With debootstrap, in order to get a working chroot, you want something like:  
  
 
  export CHROOT=`pwd`/sid-root
 
  export CHROOT=`pwd`/sid-root
  sudo debootstrap --arch i386 sid $CHROOT http://debian.lcs.mit.edu/debian
+
  sudo debootstrap --arch i386 squeeze $CHROOT http://debian.lcs.mit.edu/debian
 
  sudo chroot $CHROOT /bin/bash -l
 
  sudo chroot $CHROOT /bin/bash -l
 
  # and some of the following:
 
  # and some of the following:
 +
mount -t tmpfs tmpfs $CHROOT/tmp
 
  mount -t proc proc $CHROOT/proc
 
  mount -t proc proc $CHROOT/proc
 
  mount -t devpts devpts $CHROOT/dev/pts
 
  mount -t devpts devpts $CHROOT/dev/pts
Line 54: Line 55:
 
  sed -ie '114i\\        if not favorites_settings.layout: favorites_settings.layout = favoriteslayout.RingLayout.key' /usr/lib/python2.6/dist-packages/jarabe/desktop/favoritesview.py
 
  sed -ie '114i\\        if not favorites_settings.layout: favorites_settings.layout = favoriteslayout.RingLayout.key' /usr/lib/python2.6/dist-packages/jarabe/desktop/favoritesview.py
  
==== sid chroot ====
+
==== squeeze chroot ====
  
 
  apt-get update
 
  apt-get update
Line 60: Line 61:
 
  dpkg-reconfigure locales
 
  dpkg-reconfigure locales
 
   
 
   
 +
# edit /etc/hosts
 +
 
  apt-get install education-desktop-sugar
 
  apt-get install education-desktop-sugar
 
   
 
   
  # install your development tools here
+
# install your development tools here
 +
 +
# fix broken hippocanvas
 +
echo "deb-src http://debian.lcs.mit.edu/debian squeeze main" >> /etc/apt/sources.list
 +
apt-get update
 +
apt-get install apt-src devscripts
 +
apt-src install python-hippocanvas
 +
cd *hippo*
 +
DEB_BUILD_OPTIONS=nostrip debuild -us -uc
 +
cd ..
 +
dpkg -i *hippo*.deb
  
 
=== User Accounts ===
 
=== User Accounts ===
Line 85: Line 98:
 
We need to point Sugar at an X server. One easy (but insecure) way to do this is to make a nested X server like so, ''outside the chroot'':
 
We need to point Sugar at an X server. One easy (but insecure) way to do this is to make a nested X server like so, ''outside the chroot'':
  
  Xephyr -ac :1 -screen 800x600x24
+
  Xephyr -ac :1 -screen 800x600x24 # 1024x768x24
  
 
See the talk page for more secure alternatives.
 
See the talk page for more secure alternatives.
Line 95: Line 108:
 
  sudo chroot $CHROOT /bin/bash -l
 
  sudo chroot $CHROOT /bin/bash -l
 
  su sugar -
 
  su sugar -
  export DISPLAY=:1
+
  export DISPLAY=localhost:1
 
  export DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --session --print-address --fork)
 
  export DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --session --print-address --fork)
 
  sugar
 
  sugar
Line 105: Line 118:
 
To correctly delete a chroot that you no longer need, kill all processes running in the chroot, and
 
To correctly delete a chroot that you no longer need, kill all processes running in the chroot, and
  
 +
sudo killall -u sugar
 
  export CHROOT=/path/to/my/chroot  # important!
 
  export CHROOT=/path/to/my/chroot  # important!
 
  umount $CHROOT/var/run/dbus
 
  umount $CHROOT/var/run/dbus
 
  umount $CHROOT/proc
 
  umount $CHROOT/proc
 
  umount $CHROOT/dev/pts
 
  umount $CHROOT/dev/pts
 +
umount $CHROOT/tmp
 
  rm -rf $CHROOT
 
  rm -rf $CHROOT

Revision as of 18:10, 23 May 2009

Sugar ought to be easy to run from chroots. For a variety of silly reasons, this isn't yet the case, but it might be soon. Ping Michael with questions.

Chroot Construction

There are lots of ways to create appropriate chroots; e.g. by hand, with debootstrap, with mock, etc.

Here are some ideas to help you get started:

Ubuntu jaunty chroot

With recent versions of debootstrap, in order to get a working chroot, you want something like:

export CHROOT=`pwd`/jaunty-root
sudo debootstrap --arch i386 jaunty $CHROOT http://ubuntu.media.mit.edu/ubuntu/
sudo chroot $CHROOT /bin/bash -l
mount -t proc proc /proc
mount -t devpts devpts /dev/pts

Debian squeeze chroot

With debootstrap, in order to get a working chroot, you want something like:

export CHROOT=`pwd`/sid-root
sudo debootstrap --arch i386 squeeze $CHROOT http://debian.lcs.mit.edu/debian
sudo chroot $CHROOT /bin/bash -l
# and some of the following:
mount -t tmpfs tmpfs $CHROOT/tmp
mount -t proc proc $CHROOT/proc
mount -t devpts devpts $CHROOT/dev/pts
mount -t selinuxfs selinux $CHROOT/selinux

Reference: http://www.debian.org/doc/manuals/reference/ch-tips.en.html

Fedora rawhide chroot

With mock, it would be more like:

mock -r fedora-devel-i386 --init
mock -r fedora-devel-i386 --install yum
mock -r fedora-devel-i386 --shell

Sugar Installation

jaunty chroot

sed -ie "s/main/main universe/" /etc/apt/sources.list
apt-get update

apt-get install locales
locale-gen "$LANG"
dpkg-reconfigure tzdata

apt-get install sugar sugar-activities

# install your development tools here
 
# patch (hopefully temporary) bugs
sed -ie '114i\\        if not favorites_settings.layout: favorites_settings.layout = favoriteslayout.RingLayout.key' /usr/lib/python2.6/dist-packages/jarabe/desktop/favoritesview.py

squeeze chroot

apt-get update
apt-get install locales
dpkg-reconfigure locales

# edit /etc/hosts
apt-get install education-desktop-sugar

# install your development tools here

# fix broken hippocanvas
echo "deb-src http://debian.lcs.mit.edu/debian squeeze main" >> /etc/apt/sources.list
apt-get update
apt-get install apt-src devscripts
apt-src install python-hippocanvas
cd *hippo*
DEB_BUILD_OPTIONS=nostrip debuild -us -uc
cd ..
dpkg -i *hippo*.deb

User Accounts

For stupid reasons, it's necessary that Sugar run under a uid inside the chroot which exists as a real account outside the chroot. (Talk to the DBus people.)

Consequently, as root, run something like this both inside and outside the chroot:

groupadd -g 64002 sugar
useradd -m -u 64002 -g sugar -s /bin/bash sugar

D-Bus

Sugar wants to be able to use global state stored in both HAL and NetworkManager, both of which live on the system bus. Consequently, outside the chroot, we need to

sudo mount --bind /var/run/dbus $CHROOT/var/run/dbus

before entering the chroot. (Mock uses unshare() to enter a new mount-point namespace since this makes garbage collection of mountpoints much easier.)

X11

We need to point Sugar at an X server. One easy (but insecure) way to do this is to make a nested X server like so, outside the chroot:

Xephyr -ac :1 -screen 800x600x24 # 1024x768x24

See the talk page for more secure alternatives.

Running Sugar

Then, inside the chroot, you can happily run sugar as user 'sugar' with something like

sudo chroot $CHROOT /bin/bash -l
su sugar -
export DISPLAY=localhost:1
export DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --session --print-address --fork)
sugar

Then pull up the frame, switch to the home view, and launch some activities!

Cleaning Up

To correctly delete a chroot that you no longer need, kill all processes running in the chroot, and

sudo killall -u sugar
export CHROOT=/path/to/my/chroot  # important!
umount $CHROOT/var/run/dbus
umount $CHROOT/proc
umount $CHROOT/dev/pts
umount $CHROOT/tmp
rm -rf $CHROOT