OS images: Difference between revisions

From OLPC
Jump to navigation Jump to search
Line 58: Line 58:


Now you should be able to boot the OLPC operating system off the USB storage device.
Now you should be able to boot the OLPC operating system off the USB storage device.

=== Installing on a USB hard disk ===

If you don't have a USB stick available, but do have a USB hard drive, you could also try installing on that.
For example, I have a 200GB USB hard disk partitioned into 3 partitions:
* sdb1 - 10GB (for the root filesystem)
* sdb2 - 1.5GB swap partition
* sdb3 - the rest as a storage partition.

Retrieve and unzip the appropriate OLPC image file as above. This file contains a partition table, which describes exactly one partition. What we want to do is to mount that partition (using a loopback device) and copy the contents to the USB hard disk, then make that hard disk bootable.

First, we need to setup the image file on a loopback device so we can inspect that partition table:
# losetup /dev/loop0 olpc-stream-development-59-20060808_1153-rpm-ext3.img

Now, use fdisk to look at the contents:
# fdisk -l -u /dev/loop0
Disk /dev/loop0: 504 MB, 504626688 bytes
16 heads, 32 sectors/track, 1924 cylinders, total 985599 sectors
Units = sectors of 1 * 512 = 512 bytes
Device Boot Start End Blocks Id System
/dev/loop0p1 32 985599 492784 83 Linux

In this case, the partition we want starts at sector 32, and each sector is 512 bytes = 16384 bytes into the image file. Now, we can set up a second loopback device to load this partition and mount it:
# losetup /dev/loop1 -o 16384 olpc-stream-development-59-20060808_1153-rpm-ext3.img
# mount -text3 /dev/loop1 /media/tmp/

Now, copy the files to your USB hard disk:
# cp -a /media/tmp/* /media/usbdisk/

And finally, we need to set up grub on the disk to boot from the first partition. We do this using the GRUB shell. Note that in this example, we're installing on (hd1), because the external disk is the 2nd disk connected to the system. When it boots on the OLPC board, it will be the primary disk and grub will treat it as (hd0)
# grub
Probing devices to guess BIOS drives. This may take a long time.
# grub> root (hd1)
root (hd1)
Filesystem type unknown, using whole disk
# grub> root (hd1,0)
root (hd1,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
setup (hd1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 15 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+15 p (hd1,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
# grub> ^C
#

* When I tried booting from this drive on the OLPC, GRUB started but didn't load its configuration correctly - just dropping me into the grub shell instead. I needed to run 'root' and 'setup' again on the actual board to get GRUB to set itself up right. If anyone knows how to avoid this step, please fix the instructions.


=== Images in QEMU ===
=== Images in QEMU ===

Revision as of 12:54, 16 August 2006

The operating system used for OLPC is work-in-progress and so-called images are available from

http://olpc.download.redhat.com/olpc/streams/development

Downloads

As the operating system for OLPC is under development, there are several builds available. The latest build might not always be stable since developers are experimenting with new features. Each build is labeled with a unique version number. When reporting problems on mailing lists, please make sure you list the build number you are using.

Latest Stable

Latest stable build is build59. --Blizzard 23:35, 8 Aug 2006 (EDT)

Image variants

Images are available in two variants

  • Normal images
    • These are in the images/ subdirectory of a build.
    • Intended for production use; does not contain tools or software suitable for developers of the OLPC operating system
    • Also available in two sub-variants: ext3, which is a filesystem image, and tree, which is an archive of the directory structure
  • Developer images
    • These are in the images-rpm/ sub-directory of a build
    • Contains tools useful for developers of the OLPC operating system
      • Presently includes: yum, rpm, vim-minimal, openssh-server, xterm, which, file, tree, wget, xorg-x11-twm, gdb
    • WARNING: Do not attempt to update the kernel on images-rpm builds - the initrd will be wrong. We're working on fixing this through including an olpc-mkinitrd package.


Passwords

The images have no password set at build time. This means you can log in as root using no password. Always remember to change the password as the first thing when start using an image.

As the image-rpm variant ships with an SSH server you thus need to set the password to be able to login from a remote host. This is a feature of sshd.

Password handling is subject to change before official release.

Using Images

For development we right now offer images that runs the OLPC operating system off a USB storage device. We're working on getting this to work on the NAND flash of the hardware too. Instructions to come.

Images on USB storage devices

To try out an image, simply download the appropriate .img.bz2 file, e.g.,

olpc-stream-development-42-20060714_1709-rpm-ext3.img.bz2

unzip it, and transfer it to a USB storage device via dd, e.g.,

# bunzip2 olpc-stream-development-42-20060714_1709-rpm-ext3.img.bz2
# dd if=olpc-stream-development-42-20060714_1709-rpm-ext3.img of=/dev/sdb bs=512
# sync

Remember to

  • Do this as the super user / root
  • Replace /dev/sdb with the device file of the USB storage device
  • Make sure any old partitions from the storage device is unmounted.
  • The USB storage device must be 512MB or bigger. All existing data on it will be wiped.

Now you should be able to boot the OLPC operating system off the USB storage device.

Installing on a USB hard disk

If you don't have a USB stick available, but do have a USB hard drive, you could also try installing on that. For example, I have a 200GB USB hard disk partitioned into 3 partitions:

 * sdb1 - 10GB (for the root filesystem)
 * sdb2 - 1.5GB swap partition
 * sdb3 - the rest as a storage partition.

Retrieve and unzip the appropriate OLPC image file as above. This file contains a partition table, which describes exactly one partition. What we want to do is to mount that partition (using a loopback device) and copy the contents to the USB hard disk, then make that hard disk bootable.

First, we need to setup the image file on a loopback device so we can inspect that partition table:

# losetup /dev/loop0 olpc-stream-development-59-20060808_1153-rpm-ext3.img 

Now, use fdisk to look at the contents:

# fdisk -l -u /dev/loop0
 Disk /dev/loop0: 504 MB, 504626688 bytes
 16 heads, 32 sectors/track, 1924 cylinders, total 985599 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Device Boot      Start         End      Blocks   Id  System
 /dev/loop0p1        32      985599      492784   83  Linux

In this case, the partition we want starts at sector 32, and each sector is 512 bytes = 16384 bytes into the image file. Now, we can set up a second loopback device to load this partition and mount it:

# losetup /dev/loop1 -o 16384 olpc-stream-development-59-20060808_1153-rpm-ext3.img
# mount -text3 /dev/loop1 /media/tmp/

Now, copy the files to your USB hard disk:

# cp -a /media/tmp/* /media/usbdisk/

And finally, we need to set up grub on the disk to boot from the first partition. We do this using the GRUB shell. Note that in this example, we're installing on (hd1), because the external disk is the 2nd disk connected to the system. When it boots on the OLPC board, it will be the primary disk and grub will treat it as (hd0)

# grub
Probing devices to guess BIOS drives. This may take a long time.
# grub> root (hd1)
root (hd1)
Filesystem type unknown, using whole disk
# grub> root (hd1,0)
root (hd1,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
setup (hd1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1)"...  15 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+15 p (hd1,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
# grub> ^C
#
  • When I tried booting from this drive on the OLPC, GRUB started but didn't load its configuration correctly - just dropping me into the grub shell instead. I needed to run 'root' and 'setup' again on the actual board to get GRUB to set itself up right. If anyone knows how to avoid this step, please fix the instructions.

Images in QEMU

The easiest way to test the images is to use qemu or some similar emulator. See here for Windows users. On Fedora Core 5, QEMU is included in extras and is very easy to install. As root just type

yum install qemu

and it should be installed. You may have to start the service for it. As root run:

service qemu start

Once you have an image downloaded, it is very easy to use qemu to launch the OLPC environment:

qemu -hda olpc-stream-development-7-20060609_1600-ext3.img

The simulator will start up at this point. When the screen turns green saying One Laptop Per Child at the bottom, press the spacebar to get the grub menu. It's important that you choose the OLPC Simulator option. The default for these images is to boot for the OLPC Hardware, not the Simulator.

We have heard multiple people say that QEMU doesn't work with these images on the debian-derived distributions. We also haven't heard of any solutions to these problems. The symptom is that the kernel hangs during boot.

Marcin: On Ubuntu Dapper it hangs with qemu 0.8.0 (from distro), but works with 0.8.1 from i386 binary tarball.

Vedran: It also hangs on Debian unstable with qemu 0.8.1-1 (from distro), but works with 0.8.1 from i386 binary tarball.

Using QEMU on Windows XP

Images in VMware Player

VMware Player is another convenient way to test the image on your windows machine. You can convert the image to a VMware virtual disk file with qemu-img command included qemu distribution.

$ qemu-img convert olpc-stream-development-59-20060808_1153-rpm-ext3.img  -O vmdk olpc.vmdk

Additionally, you need a config file to run the virtual disk. This is an example(save it as olpc.vmx).

#!/usr/bin/vmware
config.version = "8"
virtualHW.version = "3"
memsize = "128"
ide0:0.present = "TRUE"
ide0:0.fileName = "olpc.vmdk"
ide1:0.present = "TRUE"
ide1:0.fileName = "/dev/cdrom"
ide1:0.deviceType = "atapi-cdrom"
floppy0.fileName = "A:"
ethernet0.present = "TRUE"
ethernet0.connectionType = "nat"
usb.present = "TRUE"
sound.present = "TRUE"
sound.virtualDev = "es1371"
displayName = "OLPC"
guestOS = "other26xlinux"

ethernet0.addressType = "generated"
uuid.location = "56 4d d1 99 5c 64 a3 6f-ef c7 aa 86 a8 cc ed 46"
uuid.bios = "56 4d d1 99 5c 64 a3 6f-ef c7 aa 86 a8 cc ed 46"
tools.remindInstall = "TRUE"
ethernet0.generatedAddress = "00:0c:29:cc:ed:46"
ethernet0.generatedAddressOffset = "0"

checkpoint.vmState = "olpc.vmss"

ide0:0.redo = ""

Note: Don't forget to select OLPC Simulator option on booting.