jared.wordzoo.com

In late 2004, a group in Cambridge announced a new software-only virtualization package, Xen. It differed from previously virtualization technologies available in that it was free (compared to VMware), could virtualize multiple OSes (compared to User Mode Linux), and it was fast (compared to qemu). I saw that this was big news, something that could really change the nature of technology infrastructure, so I dove in and became pretty Xen proficient and you can see me relatively prominently in the xen-devel mailing list at the time.

I was also into CD-bootable operating systems at the time, so I combined the two into XenCD, the first demonstration CD that anyone could download for free, boot in any PC, and immediately see multiple operating systems running in parallel with no setup. Big ISOes with as much packages as will fit were popular at the time, but I was into lean and mean, so this CD was only 30Mb.

XenCD seemed well received with the community. It was used to demonstrate a few repeatable bugs, which seemed nice. I didn't go far with keeping it up, because Xen soon released their commercial supported graphical demo CD. So I let them and others run with it, but have been well-served by the knowledge gained.

Here's the announcement of XenCD from January 2005. The URLs within doesn't work anymore, but I'll dig up the ISO and host it again later.


From: Jared Rhine <jared@wordzoo.com>
To: xen-devel@lists.sourceforge.net
Subject: XenCD prerelease available
Date: Wed, 26 Jan 2005 09:31:08 -0800
Message-ID: <87u0p4drmr.wl@badger.wordzoo.com>

A prerelease version of a Xen-integrated bootable CD I've been working
on is available for download here:

  http://files.wordzoo.com/xencd/xencd.iso.gz

This CD is only just at the point of being minimally usable.  It's had
very little testing outside of qemu, and doesn't include much beyond 2
auto-started ttylinux instances (for which the network doesn't seem to
work).  Projects like this thrive on feedback, though, so I'm offering
what I have.  Please feel free to provide nit-picking or grandiose
feedback of any kind, here or in private email.

368Mb minimum RAM on the host machine is required.

(In particular, I could use help understanding the ttylinux networking
problem I'm currently seeing.)

The README:

-- begin --

XenCD 1.0pre01 README

See the COPYRIGHT file for details of permissions granted for use.

--------
OVERVIEW
--------

XenCD is a bootable "live" CD running a combination of Xen and various
Linux distributions.  After booting into the XenCD environment, the
user is able to switch between the main control domain and multiple,
distinct "virtual machines" running a different operating systems.

-----
USAGE
-----

Obtain a copy of the ISO file (see the "RESOURCES" section).  Burn
that ISO file as a complete CD image, using a program like cdrecord or
Nero.  Place the CD into an i386 PC and reboot, making the PC boot off
the CD.

The CD will boot into a GRUB menu, default to the XenCD demo option,
boot Xen, and then come up into a live Debian Linux environment
running from RAM.  This environment is Xen's "dom0", the virtual
machine which has real access to the hardware, network, and xen
control services.

Alternately, since the XenCD runtime is implemented as a single
initrd, one can reuse the various pieces of the CD with any Linux boot
technology, such as PXE booting, USB drives, etc.

Once you are at a command prompt, the most common operations would be:

- Log in as the root user.  There is no password on the root account.

- Switch to a new virtual terminal via Alt-F2 and Alt-F3.

- Switch to a Xen VM console via something like "xm console 1".

- Install new software using something like a "apt-get update &&
  apt-get install PACKAGE" command line.

- Use any other helpful xm commands such as "xm create", "xm destroy",
  etc.

- Review the files on the CD-ROM mounted at "/media/cdrom" in dom0.

-------
CAVEATS
-------

- EARLY, BUGGY RELEASE: This is a very early implementation with very
  little testing in very few environments.  Additionally, this
  software is at the bare minimum needed to claim a functional Xen
  demo.

- KNOW XEN ALREADY: You should be familiar with Xen usage and administration to
  understand what's feasible and interesting to try using the tools
  provided.

- HAVE LOTS OF RAM: This version of XenCD will just barely run on a
  368Mb machine.  512Mb is recommended to be able to create additional
  VMs.

- DHCP ONLY: dom0 will try to acquire its networking info via dhcp.
  Static networking support is planned but not yet available.

- UDEV: dom0 runs udevd, not devfsd.

- RAM-ONLY RUNTIME: Since the dom0 environment runs entirely within
  RAM, the software provided is limited.  If you run out of memory,
  you run out of disk and vice versa.  Memory issues are more of an
  issue here than in conventional live CDs (Knoppix, etc.)

- TEXT-ONLY: This is a text-oriented demo.  A graphical demo
  environment would be an excellent thing for the community.  But a
  graphical environment may be better implemented as a separate or
  subproject.  It should be noted the primary developer of XenCD has a
  bias towards and an interest in server-oriented Xen environments.

- NO RUNTIME DOCS: dom0 has been stripped of most all its
  documentation.  Man pages will not work.

- ENGLISH ONLY: No thought or attention has been spent on
  internationalization and localization issues.  In some cases,
  internationalization files are intentionally removed to reduce the
  runtime image.

- UPDATE APT BEFORE USE: Run a 'apt-get update' before any 'apt-get
  install' commands.

- NAME CHANGE LIKELY: The name "XenCD" is probably unauthorized use of
  the Xen trademark.  This project is likely to be renamed.

---------
RESOURCES
---------

Official XenCD homepage
  - http://software.wordzoo.com/xencd

Official XenCD downloadable URL for "current release":
  - http://files.wordzoo.com/xencd/xencd.iso.gz

Public subversion repository of XenCD software:
  - svn://software.wordzoo.com/xencd/trunk

Mailing list:
  - xen-devel@lists.sourceforge.net

  All discussion, questions, problems, concerns, accolades, etc should
  be directed to the xen-devel mailing list.

Xen homepage:
  - http://www.cl.cam.ac.uk/Research/SRG/netos/xen/

ttylinux homepage:
  - http://www.minimalinux.org/ttylinux/

tomsrtbt homepage:
  - http://www.toms.net/rb/

memtest86 homepage:
  - http://www.memtest86.com/

--------------
IMPLEMENTATION
--------------

Media
- 50 Mb ISO (CD-ROM image)
- ISO9660 (level 2 + extensions) format
- GRUB boot (2.88 El Torito image)
- Components on CD (kernel, initrd, etc) should be suitable for
  netbooting, USB drives, etc

Boot menu
- GRUB-based menu, text-only
- These options available:
  - XenCD standard demo (default option)
  - XenCD testing (verbose logging)
  - ttylinux
  - ttylinux using xenU kernel
  - tomsrtbt
  - memtest86

Xen
- Built from xeno-unstable.bk
- As of the date in the BUILT_* file
- Compiled with GCC 3.3.5 (and rest of toolchain from Debian sarge)

Initrd
- Runs as xen's dom0
- Read-write ramdisk
- Creates tmpfs 8Mb less than physical memory and copies all of initrd
  into that tmpfs

dom0
- Runs entirely from RAM, media-agnostic
- Implemented as a large (70 Mb pre-compression) initrd
- custom /linuxrc+rcS, autostart xend, xensv
- debian dom0 is straight debootstrap sarge, with various bits rm
  -rf'ed, plus xen-required packages (python-twisted, etc).
- pure text-mode apps installed.  can apt-get other packages into the
ramdisk as needed.
- Built from straight Debian unstable bootstrap
  with modifications:
  - Replace exim4 with esmtp
  - Replace syslogd+klogd with metalog
  - Add Xen dependencies:
    - bridge-utils
    - iproute
    - python
    - python-twisted
    - libcurl3
  - Add some XenCD requirements:
    - udev
    - runit
  - Add some system "almost-essentials":
    - less
    - lsof
    - pciutils
  - Add ssh
  - Add chrony (for ntpd)
  - Use debfoster at "required" level to manage package dependencies
  - No suggested or recommended dependencies included
  - Shrink runtime
    - Remove "extra" documentation:
      - /usr/share/doc except copyright
      - /usr/share/info
      - /usr/share/man
    - /usr/lib/python2.3 prune:
      - Remove all *.pyo and *.pyc files from
      - Remove Twisted testing code
    - Prune dpkg/apt status files

- Usage
  - root password is blank by default
  - Use nano or vi for editor
  - See /var/log/everything/current for syslog
  - devices managed by udev, most everything that physically exists
    should have a /dev device node

-----------------------
ISO filesystem structure
------------------------

/BUILT_2005-01-26T07-45-32
/README
/COPYRIGHT
/boot/grub/menu.lst
/boot/grub/stage2_eltorito
/boot/isolinux/memdisk
/boot/xen
/boot/xen0-initrd
/boot/xen0-kernel
/boot/xenU-kernel
/boot/memtest.img
/boot/tomsrtbt.img
/boot/ttylinux.img
/ttylinux/USER-GUIDE
/ttylinux/rootfs.gz
/ttylinux/xen-rootfs

----
TODO
----
For release candidate
- Make ttylinux VMs network properly
- Testing on Dell 1650 + 440 BX

Next release
- Copy local version of linux-pristine above xen build directory so build
  doesn't download every time
- Create an auto-build infrastructure wrapped around build-xencd
  - Pull some configuration of the build-xencd script into command-line switches
  - xen-stable/xen-testing builds
  - Nightly builds
  - Auto-update of download area with nightly builds
- Improve robustness of boot-time scripts:
  - Use "yes/no" for all values
  - Write a function to use for flow-control and conditionals instead
    of repeating error-detection logic everywhere
- More bootprompt configuration of dom0
  - doaptupdate: run apt-get update on boot
  - staticnet: static networking setup (just dhcpc on dom0 now)
  - timezone=XXX: support setting of timezone on the boot line
- "Fat" build with a few dozen more essential admin tools thrown in
  - usbutils sysfsutils scsitools
    gpart parted grub hdparm
    evms-curses reiserfsprogs strace sysstat hexcurse
    iptables tethereal dhcp
    rsync netcat curl host dnsutils ipsc
- Replace xend_config script with bash/python version (perl currently)
- Determine if color or non-color boot will be the default
- Move configuration variables to a configuration file
- Proofread documentation
- Incorporate first round of community feedback

Server wishlist
- Autostart of xen domain configurations found in storage
- Autoconfiguration of a reasonable dom0 network (bridge+route)
- Per virtual-host network configuration (private bridge, separate
  iptables rules, packet accounting)
- Media discovery of local storage (hd*/sd*/usb/lvm)
- Lockdown security appropriately:
  - Setting of a root password (crypted entry on GRUB prompt?)
  - Allow skip of ssh startup via boot parameter
  - xensv
- Media discovery of network storage (nfs, iscsi)
- Use runit for auto-restarting and logging daemons:
  - xend, xensv
  - openssh
- Use of debian packages for install of xen into dom0 (uses cp -a now)
- Netboot support

Demo wishlist
- Support extended vga modes in dom0 (currently non-operational,
  xen-devel thread died twice)
- Address community desires for graphical demo
- Support discovery and automounting of USB drives
- Support for 256Mb host machines, if at all possible
- Build the ttylinux rootfs at runtime, via modifications to a
  pristine ttylinux 4.4 tree
- Additional rootfs examples:
  - Debian unstable debootstrap
  - Fedora
  - Debian stable debootstrap
  - Freebsd stable
  - Plan 9
  - many other possibilities
- Additional GRUB menu entries:
  - Debian installer
  - FreeDOS
  - ReactOS
- DVD version with multiple full-featured environments available

-- end --