Add Packages To Ubuntu Preinstalled Images
From OMAPpedia
Ubuntu delivers pre-installed images for OMAP3 and OMAP4, in particular on http://cdimage.ubuntu.com/ubuntu-netbook/ports/releases/.
These images are much faster to install (10 to 20 minutes) than standard "live" images (up to several hours). That's why these images for shipped by default. See this page and this page for details.
Here are instructions to add your own packages to the pre-installed images. They assume that sufficient space is available. At the moment, the pre-installed root partition has 200-300 MB of free space.
Contents |
[edit] Requirements
You need to run of the below instructions on an armv7
board (like OMAP3 and OMAP4 ones) running a GNU/Linux distribution. That's because we are going to chroot
to an armv7
rootfs.
[edit] Procedure
[edit] Making the pre-installed rootfs bigger
This can be needed if you have a significant number of packages to add. Currently, Ubuntu's pre-installed images just have between 200 and 300 MB of free space.
Here is a script that you can use to make the rootfs part of these images bigger. It can be run on your x86 workstation.
#!/bin/sh # Grows a disk image by the specified number of megabytes # # Assumptions: an image with 2 partitions, the 2nd one # in ext3 format. # # Example: grow-disk-image infile.img outfile.img 512 INPUT=$1 OUTPUT=$2 TMP=${OUTPUT}.tmp SIZE=$3 DD=/bin/dd CAT=/bin/cat RM=/bin/rm SUDO=/usr/bin/sudo LOSETUP=/sbin/losetup RESIZE2FS=/sbin/resize2fs FSCKEXT3=/sbin/fsck.ext3 FDISK=/sbin/fdisk TAIL=/usr/bin/tail AWK=/usr/bin/awk # Copying the initial image + SIZE zeros at the end echo "Copying $INPUT to $OUTPUT and adding zeros at the end..." $DD if=/dev/zero of=$TMP bs=1M count=$SIZE $CAT $INPUT $TMP > $OUTPUT $RM -f $TMP # Modify the partition table - Delete the 2nd partition # and create it again with all available space echo "Going to need your password to run a few commands with sudo..." # Before this, find the first available loop device LOOP=`$SUDO $LOSETUP -f` $SUDO $LOSETUP $LOOP $OUTPUT $CAT <[edit] Mounting the pre-installed rootfs
The following instructions should be run on an OMAP4 board running Linux. A simple rootfs with no graphics is sufficient.
Run
fdisk -lu maverick-netbook-panda_l24.11.img.gz
and read the starting block for the rootfs partition:You must set cylinders. You can do this from the extra functions menu.Disk maverick-netbook-panda_l24.11.img.gz: 0 MB, 0 bytes 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System maverick-netbook-panda_l24.11.img.gz.img1 * 63 144584 72261 c W95 FAT32 (LBA) maverick-netbook-panda_l24.11.img.gz.img2 144585 4401809 2128612+ 83 LinuxNow, mount this partition:
mkdir -p /mnt/rootfs mount -o loop,offset=$((144585*512)) maverick-netbook-panda_l24.11.img.gz /mnt/rootfs[edit] Modifying the pre-installed partition
Before running
chroot
, replicate the basic filesystems that Ubuntu mounts:for f in /proc /sys /dev /dev/pts /dev/shm /var/run /var/lock do sudo mount -o bind $f /mnt/rootfs/$f doneWithout the above, some commands may not work properly, being unable to find data in
/proc
and/sys
in particular.If you are behind a proxy, copy your files defining your proxy settings (typically
/etc/environment
and/etc/apt/apt.conf
) under the same path/mnt/rootfs
.Also copy your name resolution settings to the rootfs:
sudo cp /etc/resolv.conf /mnt/rootfs/etc/resolv.conf[edit] Modify the rootfs
sudo chroot /mnt/rootfs/If you are using a special package source, you can add it to
/etc/apt/sources.list
Now, update your package list and install extra packages. For example:
apt-get update apt-get install openssh-serverOnce you are done, exit the chroot:
exit[edit] Closing
sudo rm /mnt/rootfs/etc/resolv.confYou may also undo your proxy setting changes (typically
/etc/environment
).Then, unmount the filesystems replicated in the chroot:
for f in /var/lock /var/run /dev/shm /dev/pts /dev /sys /proc do sudo umount /mnt/rootfs/$f doneAnd umount your filesystem image:
sudo umount /mnt/rootfsYou are done!