All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: xen-devel@lists.sourceforge.net
Cc: niv@us.ibm.com
Subject: Installing from distribution CDs
Date: Tue, 11 Jan 2005 14:47:15 -0600	[thread overview]
Message-ID: <1105476435.8207.16.camel@localhost> (raw)

[-- Attachment #1: Type: text/plain, Size: 1924 bytes --]

Hi,

I recently tried to see what it would take in Xen to install a
distribution from a CD in domain > 0.  Here's my findings along with a
couple patches I used to find this.  These patches are proof of concepts
and quite ugly.

1) initrd support

Xen currently implements the ramdisk option which seems to simply pull
in a gzip'd file to a ramdisk and set that as the root.  Looking at the
initrd code in the kernel and reading through the man page, initrd is a
bit more complicated than that.

Among other things, the initrd process will check for a /linuxrc file
and execute it.  After execution, it will remount a new root and then
fall through to the normal init process.

SLES-9 at least uses linuxrc.  I imagine most distros do since it was
added specifically to help out distros.

2) CDROM support.  SLES-9 at least expects to have been booted from a
CDROM and looks for a /proc/sys/ entry to find out where that CDROM is. 
Right now Xen doesn't really support CDROMs.

The attached patches add /linuxrc to the init list (this will at least
let you get a bit into the installation process), add an old hack from
2.4 Xen to enable at least some response to MULTISESSION ioctls
(otherwise isofs won't mount the device), and also add a CDROM entry to
/proc/sys for hdc1.

A couple questions did come up though:

1) why isn't xen using the Linux initrd code?  The man page says that
initrd has unspecified features.  My fear is that some distros rely on
these features so reusing the initrd code would probably be best.

2) Have there been thoughts on how removable devices like CDROMs are
going to be supported?

BTW, you have to increase the ramdisk size to 64MB and add support for
minix to the kernel in order to boot off of  SLES cd.

Regards,

-- 
Anthony Liguori
Samba, Linux/Windows Interoperability
Linux Technology Center (LTC) - IBM Austin
E-mail: aliguori@us.ibm.com
Phone: (512) 838-1208
Tie Line: 678-1208

[-- Attachment #2: xen-sles9-fakecd.diff --]
[-- Type: text/x-patch, Size: 3433 bytes --]

diff -ur xen-2.0/linux-2.6.9-xen-sparse/drivers/xen/blkfront/vbd.c xen-2.0-new/linux-2.6.9-xen-sparse/drivers/xen/blkfront/vbd.c
--- xen-2.0/linux-2.6.9-xen-sparse/drivers/xen/blkfront/vbd.c	2005-01-03 21:46:11.000000000 -0600
+++ xen-2.0-new/linux-2.6.9-xen-sparse/drivers/xen/blkfront/vbd.c	2005-01-05 14:08:26.000000000 -0600
@@ -31,6 +31,8 @@
 
 #include "block.h"
 #include <linux/blkdev.h>
+#include <linux/sysctl.h>
+#include <linux/proc_fs.h>
 
 /*
  * For convenience we distinguish between ide, scsi and 'other' (i.e.
@@ -281,6 +283,98 @@
 	return NULL;
 }
 
+#define CDROM_STR_SIZE 1000
+static char info[CDROM_STR_SIZE];
+
+int cdrom_sysctl_info(ctl_table *ctl, int write, struct file * filp,
+                           void __user *buffer, size_t *lenp, loff_t *ppos)
+{
+        int pos;
+	
+	if (!*lenp || (*ppos && !write)) {
+		*lenp = 0;
+		return 0;
+	}
+
+	pos = sprintf(info,
+		      "CD-ROM information, Id: cdrom.c 3.20 2003/12/17\n"
+		      "\ndrive name:\t\thdc1\n"
+		      "drive speed:\t\t40\n"
+		      "drive # of slots:\t1\n"
+		      "Can close tray:\t\t0\n"
+		      "Can open tray:\t\t0\n"
+		      "Can lock tray:\t\t0\n"
+		      "Can change speed:\t0\n"
+		      "Can select disk:\t0\n"
+		      "Can read multisession:\t0\n"
+		      "Can read MCN:\t\t0\n"
+		      "Reports media changed:\t0\n"
+		      "Can play audio:\t\t0\n"
+		      "Can write CD-R:\t\t0\n"
+		      "Can write CD-RW:\t0\n"
+		      "Can read DVD:\t\t0\n"
+		      "Can write DVD-R:\t0\n"
+		      "Can write DVD-RAM:\t0\n"
+		      "Can read MRW:\t\t0\n"
+		      "Can write MRW:\t\t0\n"
+		      "Can write RAM:\t\t0\n"
+		      "\n");
+		
+        return proc_dostring(ctl, write, filp, buffer, lenp, ppos);
+}
+
+/* Place files in /proc/sys/dev/cdrom */
+static ctl_table cdrom_table[] = {
+	{
+		.ctl_name	= DEV_CDROM_INFO,
+		.procname	= "info",
+		.data		= &info, 
+		.maxlen		= CDROM_STR_SIZE,
+		.mode		= 0444,
+		.proc_handler	= &cdrom_sysctl_info,
+	},
+	{ .ctl_name = 0 }
+};
+
+static ctl_table cdrom_cdrom_table[] = {
+	{
+		.ctl_name	= DEV_CDROM,
+		.procname	= "cdrom",
+		.maxlen		= 0,
+		.mode		= 0555,
+		.child		= cdrom_table,
+	},
+	{ .ctl_name = 0 }
+};
+
+static ctl_table cdrom_root_table[] = {
+#ifdef CONFIG_PROC_FS
+	{
+		.ctl_name	= CTL_DEV,
+		.procname	= "dev",
+		.maxlen		= 0,
+		.mode		= 0555,
+		.child		= cdrom_cdrom_table,
+	},
+#endif /* CONFIG_PROC_FS */
+	{ .ctl_name = 0 }
+};
+static struct ctl_table_header *cdrom_sysctl_header;
+
+static void cdrom_sysctl_register(void)
+{
+	static int initialized;
+
+	if (initialized == 1)
+		return;
+
+	cdrom_sysctl_header = register_sysctl_table(cdrom_root_table, 1);
+	if (cdrom_root_table->ctl_name && cdrom_root_table->child->de)
+		cdrom_root_table->child->de->owner = THIS_MODULE;
+
+	initialized = 1;
+}
+
 /*
  * xlvbd_init_device - initialise a VBD device
  * @disk:              a vdisk_t describing the VBD
@@ -323,13 +417,20 @@
 		goto out;
 	}
 
+	printk(KERN_ALERT "XenLinux: init of %d %s\n", device, gd->disk_name);
+
 	if (VDISK_READONLY(xd->info))
 		set_disk_ro(gd, 1); 
 
+	if (!strcmp(gd->disk_name, "hdc1")) {
+	  xd->info = VDISK_TYPE_CDROM;
+	}
+
 	/* Some final fix-ups depending on the device type */
 	switch (VDISK_TYPE(xd->info)) { 
 	case VDISK_TYPE_CDROM:
 		gd->flags |= GENHD_FL_REMOVABLE | GENHD_FL_CD; 
+		cdrom_sysctl_register();
 		/* FALLTHROUGH */
 	case VDISK_TYPE_FLOPPY: 
 	case VDISK_TYPE_TAPE:

                 reply	other threads:[~2005-01-11 20:47 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1105476435.8207.16.camel@localhost \
    --to=aliguori@us.ibm.com \
    --cc=niv@us.ibm.com \
    --cc=xen-devel@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.