(→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 | ||
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.
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
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