coLinux
Line 33: Line 33:
 
</nowiki></pre>
 
</nowiki></pre>
   
PS. I think that currently only 8 cobd devices are supported (at least as of 0.6.0) PPS. [tylernt] The limit appears to be 32 on 0.6.2.
+
PS. I think that currently only 8 cobd devices are supported (at least as of 0.6.0)
  +
PPS. [tylernt] The limit appears to be 32 on 0.6.2.
 
   
 
== C. Insert lines for /dev/cobdN devices in /etc/fstab ==
 
== C. Insert lines for /dev/cobdN devices in /etc/fstab ==

Revision as of 18:04, 2 October 2009

Introduction

If a distribution is already installed on your hard disk you can convert it to be runnable by coLinux by following these steps.

(If you have not installed coLinux yet, first read GettingStarted . Also check the Back Links button above for other references.)

WARNING!!! The following procedure tries to be a non destructive one i.e. you can boot the linux distribution either standalone or from within Windows via coLinux.

There will be some complaints about missing modules char-major-N etc but I think this is OK as in coLinux there is not possible to access /dev/hda, /dev/hdb etc.

A. Define the partitions in default.colinux.xml

(see co Linux F A Q Q3 on how to define disk partitions as block devices)

# define one block_device for each one existing partition 
   <block_device index="2" path="\Device\Harddisk1\Partition2" enabled="true"></block_device> 
   <block_device index="4" path="\Device\Harddisk1\Partition4" enabled="true"></block_device> 
   <block_device index="5" path="\Device\Harddisk1\Partition5" enabled="true"></block_device> 
# define the root partition 
   <bootparams>root=/dev/cobd2</bootparams>

You may also be interested in defining 'cofs' block devices, for accessing the partitions Windows is already using; see cofs device for details.

B. Create /dev/cobdN devices in the linux partition

  for i in {0..7}
  do
     mknod /dev/cobd$i b 117 $i
  done
PS. I think that currently only 8 cobd devices are supported (at least as of 0.6.0)   
PPS. [tylernt] The limit appears to be 32 on 0.6.2.

C. Insert lines for /dev/cobdN devices in /etc/fstab

Assuming that you have assigned the same device numbers with the linux partirtion numbers, then for each one partition (defined in the default.colinux.xml) write in /etc/fstab a line similar to the existing one that corresponds to the linux partition eg

Existing linux partitions in /etc/fstab
     /dev/hdb2 / ext3 defaults,errors=remount-ro 0 1
     /dev/hdb4 none swap sw 0 0
     /dev/hdb5 /usr ext3 rw 0 1
Defined devices in default.colinuc.xml as described in A. 
 New lines in /etc/fstab
     /dev/cobd2 / ext3 defaults,errors=remount-ro 0 0<
     /dev/cobd4 none swap sw 0 0
     /dev/cobd5 /usr ext3 rw 0 0

[tylernt] Note that newer versions of co Linux support aliases, that is, you can tell coLinux to map it's /dev/cobd# devices to more normal /dev/hda#. This should allow easier dual-booting. However, as of 0.6.2, I have been unable to boot from an aliased root partition (I still had to use /dev/cobd0)...As of 0.6.4, booting from the aliased root partition can be confirmed atleast with XP SP2 + Gentoo.

Another possibility would be to mount partitions using filesystem labels, e.g. with ext2/ext3 partitions you first assign the label, using the command:

     e2label /dev/hdb2 rootpart

and then use a corresponding fstab entry:

     LABEL=rootpart / ext3 defaults,errors=remount-ro 0 0

D. Store the needed modules of the running coLinux kernel in /lib/modules of the Linux partition

You should have already installed the coLinux binaries (with or without the disk image depending on whether you wanted that option) using the instructions in the "Getting Started" Section

If the kernel in the already existing distribution its not the same as the coLinux one I run it at two machines

  • one with a Debian kernel 2.4.17 and
  • one with Componetized Linux (Debian clone from progeny) with a 2.6.0 kernel)

then you need to

  • have access to vmlinux-modules.tar.gz
    • run standalone in order to have access to C:\coLinux as you don't have the cobd module
    • assume C:\ is mounted on /c and coLinux is in C:\coLinux
  • extract vmlinux-modules.tar.gz
    • cd /tmp
    • tar xzvf /c/coLinux/vmlinux-modules.tar.gz
    • mv /tmp/vmlinux-modules/lib/modules/<coLinux kernel version> /lib/modules

This section, D, is confusing to me; if the below instructions are correct, someone please rewrite. I think we can assume that coLinux's and the distro's kernels are different.

  1. Make a copy of the colinux kernel modules to your new distrobution: (see debianmodules)
  2. Reboot to Windows and in default.colinux.xml point to your existing distro's root partition by using the <bootparams> tag (as shown in Step A, above).
  3. Start colinux with "colinux-daemon.exe -c default.colinux.xml" and hopefully these instructions are correct.

If this is indeed correct then it should logically be Step A.

E. If converting from a QEMU RAW virtual disk image

[tylernt]

As of coLinux 0.6.2, a QEMU (and I assume Bochs) RAW virtual disk image can be converted to coLinux if you strip off the first 63 512-byte blocks. The easiest way to do this is using dd. Change to the directory with your virtual disk, and run:

dd if=qemuimage of=colinuximage bs=512 skip=63

If you are running Windows as your host OS, you don't have a dd command, but you can download a Windows port of dd from http://unxutils.sourceforge.net/. On Linux, you can verify that the procedure was successful by mounting it in a loopback, like this:

mkdir /mnt/tmp
mount colinuximage /mnt/tmp -o loop -t ext3

(substitute your filesystem on the end there). If you don't get an error message, you're good to go. umount /mnt/tmp and copy your virtual disk image over to coLinux.

F. Changes needed for not running the X server if under coLinux

See X with co Linux for more details.

NOTE(egravers): It is also possible to avoid X startup on most distributions by changing the runlevel to 3 (multi-user with network). This can be done either by editing /etc/inittab in the runtime fs, or by passing "3" as part of the bootparams element in the .xml file; example:

<bootparams>root=/dev/cobd0 3</bootparams>

For not starting kdm I created a small script 'isStandAlone' which tells me if I am running under coLinux or not

    #cat > /root/isStandAlone <<+EOF
    :
    dd if=/dev/hdb2 of=/dev/null bs=1 count=1 > /dev/null 2>&1
    exit $?
    +EOF

then at the begining of /etc/init.d/kdm I added

    set -e
  + /root/isStandAlone || exit 0

In this way kdm is not started when the system boots in coLinux.

Remark: If an alias hdb2 is set, this don't work. Better way is to check the kernelversion. Add at the begining of /etc/init.d/kdm this lines:

    # do nothing, if coLinux running
    if uname -r | grep -e "-co-" >/dev/null
    then
        echo "kdm skipped (Colinux)"
        exit 0
    fi


Example of using XDMCP with GDM

This above script can used in many other places to change the files used, etc.

For example we can automate what is describled in X with co Linux section III.A.1 XDMCP with GDM

We need two gdm conf files

  • /etc/X11/gdm/gdm.standAlone
  • /etc/X11/gdm/gdm.coLinux

and /etc/X11/gdm/gdm.conf is a link to one of them

At the begining of /etc/init.d/gdm the following lines are added

    set -e
  + /bin/rm -f /etc/X11/gdm/gdm.conf.old
  + /bin/mv /etc/X11/gdm/gdm.conf /etc/X11/gdm/gdm.conf.old
  + if /root/isStandAlone ; then
  + ln -s /etc/X11/gdm.standAlone /etc/X11/gdm.conf
  + else
  + ln -s /etc/X11/gdm.coLinux /etc/X11/gdm.conf
  + fi

and we are OK.

G. Network stuff

For a detail networking HOWTO see coLinuxNetworking

My experience is as follows:

  1. I used a bridge connection of Tap-Win32 Network adapter with the existing network adapter as described in the networking HOWTO
  2. I confirmed that I use a different IP for the Linux from the one used by Windows when coLinux is running.
  1. gn# Pay attention to the file /etc/modules.conf. It should not contain any string like

alias tap0 ethertap

If so, just comment each of these lines (also for tap1, tap2 etc.) I found this necesseray under Suse.

H. Distro Specific

Some of the below have already been done for you on any of the downloadable images. You can also have a look at a short script that can build a new coLinux Debian image with debootstrap: cobootstrap.sh

(A notable exception are the gentoo images, due to them using devfs, which requires that you use a devfs enabled kernel. The kernels supplied with the binary releases for coLinux 0.5.3 and above already support devfs)

Mandrake

tuxthepeguin

I used 9.2 but know it also to be true of 9.0, 9.1, 10.0.

  • When you edit /etc/fstab colinux 0.6.1 does not support supermount.
    • To prevent an automatic e2fsck on boot with colinux you need to edit etc/rc.d/rc.sysinit and comment out (do this with vi (which is really vim in mandrake) and i for insert and add 1. at the beginning of the lines) the Fscck() and the _RUN_QUOTACHECK sections.
    • Both of these errors will drop you into error shell when booting.
    • Also after booting Mandrake it will read a supermount of your harddrive.
  • To turn on xdmcp for kdm in Mandrake the file to edit is /usr/share/config/kdm/kdmrc

In my case to be able to xdmcp to the Mandrake w/o my dialup on I had to add colinux to etc/hosts and then add the colinux host to etc/X11/xdm/Xaccess.

Another solution is to disable supermount by typing (added by Alain):

supermount disable

Gentoo

Expert take from Gentoo forums posting at http://forums.gentoo.org/viewtopic.php?t=163154&start=73

If Gentoo does not boot due to fsck checks you may have to edit you /sbin/rc script and use two seperate fstab files. Thanks Shiznix for your help, read below for his fix:

Create two fstab files in /etc, one for Gentoo called fstab.default, the other for coLinux called fstab.colinux. At boot, have /sbin/rc remount '/' (rw), check the running kernel & copy over /etc/fstab with the correct one, remount '/' (ro).

Edit /sbin/rc, scroll down to just below Code:

echo -e " Copyright 2001-2003 Gentoo Technologies, Inc.; Distributed under the GPL"
echo

Add in the following lines: Code:

echo -e "Detected running kernel version `uname -r`"echo -e "Adjusting /etc/fstab accordingly..."echomount -o rw,remount /if uname -r | grep -e "-co-" >/dev/nullthen        cp /etc/fstab.colinux /etc/fstabelse        cp /etc/fstab.default /etc/fstabfimount -o ro,remount /

It should now boot seamlessly whether using coLinux or Gentoo.

Android

There's now a running "LiveAndroid" i386 distro (German announcement) which should work. However, I am confused as to whether it is amenable to the Slackware HOWTO so I will ask on the developer list for someone to expand this section.

Probably you will want VNC[1] but maybe X will work[2].

Fedora

Other Links


MassTranslated on 25 Dec 2004.


MassTranslated on Sun Apr 23 17:35:55 UTC 2006