Meego Wiki
Views

ARM/N900/Install/chroot

From MeeGo wiki
(Difference between revisions)
Jump to: navigation, search
(Creating a loopback image from a tar ball)
Line 30: Line 30:
Copy the code below to a meego_chroot.sh script and remember to chmod +x it.
Copy the code below to a meego_chroot.sh script and remember to chmod +x it.
-
Usage: ./meego_chroot <path_to_meego-arm-n900-loop.img>
+
Usage: ./meego_chroot.sh <path_to_meego-arm-n900-loop.img>
You may always execute the commands below manually if you like. Changing the prompt is optional and you only need to do it once per image.  
You may always execute the commands below manually if you like. Changing the prompt is optional and you only need to do it once per image.  
Line 62: Line 62:
   ln -s /proc/mounts ${MEEGO_ROOT}/etc/mtab
   ln -s /proc/mounts ${MEEGO_ROOT}/etc/mtab
    
    
-
   # Change the prompt -this is optional
+
   # Change the prompt - this is optional
 +
  # make sure this is added only once
   grep -q -s MeeGo ${MEEGO_ROOT}/root/.bashrc
   grep -q -s MeeGo ${MEEGO_ROOT}/root/.bashrc
   if [ "$?" -ne "0" ]; then
   if [ "$?" -ne "0" ]; then

Revision as of 13:14, 9 April 2010

Under construction

Problem with chroot installation is finding space for it. SD card and Mydocs would have plenty of space but they use FAT32 so it can't be used directly. Solution is to mount loopback images. Easies way to get started is to use a prebuilt loopback image.

If a prebuilt loopback image is not yet available, you can create it from a provided tar ball.

Creating a loopback image from a tar ball

Create 2GB image file

dd if=/dev/zero of=/home/user/MyDocs/meego-image bs=1024 count=2097152

Create filesystem on image file

mkfs.ext3 /home/user/MyDocs/meego-image

Create mount point and loopback mount the image

export MEEGO_ROOT="/mnt/meego_root"
mkdir $MEEGO_ROOT
mount -o loop /home/user/MyDocs/meego-image $MEEGO_ROOT

Unpack Meego rootfs image there. You might get an error about invalid tar magic. There's some problem between GNU tar and Busybox tar. Solution is to install GNU tar from Maemo Extras (package name is tar-gnu)

tar xzf <meego-image> -C $MEEGO_ROOT

Umount the image

umount $MEEGO_ROOT

You now have a loopback image ready to be chrooted into

Chrooting into a loopback image

Using a script to chroot into an image makes the process faster and safer.

Copy the code below to a meego_chroot.sh script and remember to chmod +x it.

Usage: ./meego_chroot.sh <path_to_meego-arm-n900-loop.img>

You may always execute the commands below manually if you like. Changing the prompt is optional and you only need to do it once per image.

 #!/bin/sh
 
 ### Prepare and mount the image ###
 MEEGO_IMAGE=$1
 MEEGO_ROOT=/mnt/meego_root
 mkdir -p ${MEEGO_ROOT}
 mount -o loop ${MEEGO_IMAGE} ${MEEGO_ROOT}
 
 ### Mount system directories ###
 echo "Mounting system directories inside the chroot environment..."
 mount -o bind /proc ${MEEGO_ROOT}/proc
 mount -o bind /sys  ${MEEGO_ROOT}/sys
 mount -o bind /dev ${MEEGO_ROOT}/dev
 mount -o bind /dev/pts ${MEEGO_ROOT}/dev/pts/
 
 mount -o bind /var/lib/dbus/ ${MEEGO_ROOT}/var/lib/dbus/
 mount -o bind /usr/share/fonts ${MEEGO_ROOT}/usr/share/fonts
 
 mount -t tmpfs tmpfs  ${MEEGO_ROOT}/tmp
 mount -t tmpfs tmpfs  ${MEEGO_ROOT}/var/run                                                                    
 
 ### Setup ###
 rm -f ${MEEGO_ROOT}/etc/resolv.conf
 cp /etc/resolv.conf ${MEEGO_ROOT}/etc/resolv.conf
 
 rm -f ${MEEGO_ROOT}/etc/mtab
 ln -s /proc/mounts ${MEEGO_ROOT}/etc/mtab
 
 # Change the prompt - this is optional
 # make sure this is added only once
 grep -q -s MeeGo ${MEEGO_ROOT}/root/.bashrc
 if [ "$?" -ne "0" ]; then
   echo "export PS1=MeeGo-chroot:\\\w\\\\\$" >> ${MEEGO_ROOT}/root/.bashrc
 fi
 
 ### Start your engines ###
 echo -e "chrooting to ${MEEGO_ROOT}...\n"
 cd ${MEEGO_ROOT}
 chroot ${MEEGO_ROOT} /bin/bash
 
 ### Cleanup ###
 echo "Cleaning mounts..."                                                                                      
 cd ~
 umount ${MEEGO_ROOT}/dev/pts
 umount ${MEEGO_ROOT}/dev
 umount ${MEEGO_ROOT}/sys
 umount ${MEEGO_ROOT}/proc
 
 umount ${MEEGO_ROOT}/var/lib/dbus/
 umount ${MEEGO_ROOT}/usr/share/fonts
 
 umount ${MEEGO_ROOT}/tmp
 umount ${MEEGO_ROOT}/var/run
 
 umount ${MEEGO_ROOT}
 echo
Personal tools