Skip to contentSkip to conversation

xen bootloader

PATCH In review aq 3 participants 10 messages Apr 27, 2005 – May 3, 2005

lore
Share & tools
lore

aq

author
#0 lore raw

PATCH 1/1 xen bootloader

hello Jeremy,

Here is a patch to fix few problems in Xen bootloader you sent to the list yesterday.

list of changes:
- make a dummy tools/pygrub/src/__init__.py
- extend filesystem abstraction by adding file_exist() method. this method is used to check for existent of a file given its name. now ext2fs implements this method.
- pygrub opens and parses /boot/grub/menu.lst or /boot/grub/grub.conf, in that order.
- add /usr/lib/python to system path (see pygrub). without this change, pygrub cannot find grub python package.
- remove few blank lines

$ diffstat xen-grub.patch
 __init__.py            |    1
 fsys/__init__.py       |    5 +++-
 fsys/ext2/ext2module.c |   51 ++++++++++++++++++++++++++++++++++++++++---------
 pygrub                 |   12 +++++++++--
 4 files changed, 57 insertions(+), 12 deletions(-)

I wonder why the patch you sent to list is in CR/LF format? arent you programming on Windows, are you ;-). could you please remove them next time ?

regards,
aq

tools/pygrub/src/fsys/ext2/ext2module.c +42 -9
diff -Nurp unstable.27.3.org/tools/pygrub/src/fsys/ext2/ext2module.c unstable.27.3/tools/pygrub/src/fsys/ext2/ext2module.c
@@ -174,6 +174,25 @@ ext2_file_open (Ext2Fs *fs, char * name,
     return (PyObject *) file;
 }
 
+static PyObject *
+ext2_file_exist (Ext2Fs *fs, char * name)
+{
+    int err;
+    ext2_ino_t ino;
+    Ext2File * file;
+
+    file = (Ext2File *) PyObject_NEW(Ext2File, &Ext2FileType);
+    file->file = NULL;
+
+    err = ext2fs_namei_follow(fs->fs, EXT2_ROOT_INO, EXT2_ROOT_INO, name, &ino);
+    if (err) {
+        Py_INCREF(Py_False);
+        return Py_False;
+    }
+    Py_INCREF(Py_True);
+    return Py_True;
+}
+
 /* ext2fs object */
 
 static PyObject *
@@ -231,6 +250,18 @@ ext2_fs_open_file (Ext2Fs *fs, PyObject 
     return ext2_file_open(fs, name, flags);
 }
 
+static PyObject *
+ext2_fs_file_exist (Ext2Fs *fs, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "name", NULL };
+    char * name;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", kwlist, &name))
+                                     return NULL;
+
+    return ext2_file_exist(fs, name);
+}
+
 static void
 ext2_fs_dealloc (Ext2Fs * fs)
 {
@@ -249,6 +280,9 @@ static struct PyMethodDef Ext2FsMethods[
         { "open_file",
           (PyCFunction) ext2_fs_open_file,
           METH_VARARGS|METH_KEYWORDS, NULL },
+        { "file_exist",
+          (PyCFunction) ext2_fs_file_exist,
+          METH_VARARGS|METH_KEYWORDS, NULL },
 	{ NULL, NULL, 0, NULL }	
 };
 
@@ -312,21 +346,20 @@ ext2_fs_new(PyObject *o, PyObject *args,
     return (PyObject *)pfs;
 }
 
-
 static struct PyMethodDef Ext2ModuleMethods[] = {
     { "Ext2Fs", (PyCFunction) ext2_fs_new, METH_VARARGS|METH_KEYWORDS, NULL },
     { NULL, NULL, 0, NULL }
 };
 
-
 void init_pyext2(void) {
-    PyObject *m, *d;
+    PyObject *m;
 
     m = Py_InitModule("_pyext2", Ext2ModuleMethods);
-    d = PyModule_GetDict(m);
-
-    /*    o = PyObject_NEW(PyObject, yExt2FsConstructorType);
-    PyDict_SetItemString(d, "PyExt2Fs", o);
-    Py_DECREF(o);*/
-                      
+    /*
+     * PyObject *d;
+     * d = PyModule_GetDict(m);
+     * o = PyObject_NEW(PyObject, yExt2FsConstructorType);
+     * PyDict_SetItemString(d, "PyExt2Fs", o);
+     * Py_DECREF(o);
+     */
 }
tools/pygrub/src/fsys/__init__.py +4 -1
diff -Nurp unstable.27.3.org/tools/pygrub/src/fsys/__init__.py unstable.27.3/tools/pygrub/src/fsys/__init__.py
@@ -49,7 +49,10 @@ class FileSystem(object):
         should look similar to a native file object."""
         raise RuntimeError, "open_file not implemented"
     
-
+    def file_exist(self, file):
+        """Check to see if the give file is existed.
+        Return true if file existed, return false otherwise."""
+        raise RuntimeError, "file_exist not implemented"
 
 mydir = sys.modules['grub.fsys'].__path__[0]
 for f in os.listdir(mydir):
tools/pygrub/src/__init__.py +1 -0
diff -Nurp unstable.27.3.org/tools/pygrub/src/__init__.py unstable.27.3/tools/pygrub/src/__init__.py
@@ -0,0 +1 @@
+ 
tools/pygrub/src/pygrub +10 -2
diff -Nurp unstable.27.3.org/tools/pygrub/src/pygrub unstable.27.3/tools/pygrub/src/pygrub
@@ -19,6 +19,8 @@ import logging
 import curses, _curses, curses.wrapper
 import getopt
 
+sys.path = [ '/usr/lib/python' ] + sys.path
+
 import grub.GrubConf
 import grub.fsys
 
@@ -78,7 +80,6 @@ def is_disk_image(file):
     if len(buf) >= 512 and struct.unpack("H", buf[0x1fe: 0x200]) == (0xaaff):
         return True
     return False
-    
 
 def get_config(fn):
     if not os.access(fn, os.R_OK):
@@ -97,7 +98,14 @@ def get_config(fn):
             break
 
     if fs is not None:
-        f = fs.open_file("/boot/grub/grub.conf")
+        if fs.file_exist("/boot/grub/menu.lst"):
+            grubfile = "/boot/grub/menu.lst"
+        elif fs.file_exist("/boot/grub/grub.conf"):
+            grubfile = "/boot/grub/grub.conf"
+        else:
+            raise RuntimeError, "we couldn't find /boot/grub{menu.lst,grub.conf} " + \
+                                "in the image provided. halt!"
+        f = fs.open_file(grubfile)
         buf = f.read()
         f.close()
         fs.close()

_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel

author
#1 lore raw

sorry, I forgot to note that the patch I have just sent to list should be applied on top of the last patch of Jeremy.

regards,
aq

Quoted 34 lines · aq

hello Jeremy,

Here is a patch to fix few problems in Xen bootloader you sent to the list yesterday.

list of changes:
- make a dummy tools/pygrub/src/__init__.py
- extend filesystem abstraction by adding file_exist() method. this method is used to check for existent of a file given its name. now ext2fs implements this method.
- pygrub opens and parses /boot/grub/menu.lst or /boot/grub/grub.conf, in that order.
- add /usr/lib/python to system path (see pygrub). without this change, pygrub cannot find grub python package.
- remove few blank lines

$ diffstat xen-grub.patch
 __init__.py            |    1
 fsys/__init__.py       |    5 +++-
 fsys/ext2/ext2module.c |   51 ++++++++++++++++++++++++++++++++++++++++---------
 pygrub                 |   12 +++++++++--
 4 files changed, 57 insertions(+), 12 deletions(-)

I wonder why the patch you sent to list is in CR/LF format? arent you programming on Windows, are you ;-). could you please remove them next time ?

regards,
aq

#2 lore raw
In reply to aq
Quoted 4 lines · aq

hello Jeremy,

Here is a patch to fix few problems in Xen bootloader you sent to the list yesterday.

The patch had ^M line endings which stopped it applying until I removed them. Please make sure patches don't have that other operating system's line endings.

Thanks,

Mike

author
#3 lore raw
Quoted 8 lines · Mike Wray
Quoted 4 lines · aq

hello Jeremy,

Here is a patch to fix few problems in Xen bootloader you sent to the list yesterday.

The patch had ^M line endings which stopped it applying until I removed them. Please make sure patches don't have that other operating system's line endings.

Then dont forget to blame Jeremy for this problem. Those ^M are introduced in his first patch. I just inherited his code ;-)

Seriously, I will recheck the patch next time.

Thanks,
aq

#4 lore raw
In reply to aq
Quoted 2 lines · aq

Here is a patch to fix few problems in Xen bootloader you sent to the list yesterday.

Thanks. Sorry for the delay in responding, I've been underwater with stuff for FC4 test3.

Quoted 2 lines

list of changes:
- make a dummy tools/pygrub/src/__init__.py

I still don't know why this didn't work, but thanks.

Quoted 3 lines

- extend filesystem abstraction by adding file_exist() method. this method is used to check for existent of a file given its name. now ext2fs implements this method.

Great, thanks. My only comment about the ext2fs code for this is that you might as well inline the contents of ext2_file_exist in ext2fs_file_exist... you don't gain anything by having that for reuse that I can see.

Quoted 4 lines

- pygrub opens and parses /boot/grub/menu.lst or /boot/grub/grub.conf, in that order.
- add /usr/lib/python to system path (see pygrub). without this change, pygrub cannot find grub python package.

Per the other changes I submitted a week or so ago, you want to append this to the path, not prepend it.

Quoted 1 line

- remove few blank lines

Fair enough.

Quoted 8 lines
$ diffstat xen-grub.patch
 __init__.py            |    1
 fsys/__init__.py       |    5 +++-
 fsys/ext2/ext2module.c |   51 ++++++++++++++++++++++++++++++++++++++++---------
 pygrub                 |   12 +++++++++--
 4 files changed, 57 insertions(+), 12 deletions(-)

I'll apply this to my local tree. Mike -- based on your later mail, should I gather that you've applied things to your tree and are in the process of pushing to -unstable? Or should I go about trying to do something more sane to maintain this on the side for a while?

Quoted 3 lines

I wonder why the patch you sent to list is in CR/LF format? arent you programming on Windows, are you ;-). could you please remove them next time ?

Hrmm, I have no clue either. The previous patch appears to not be in DOS format but the second one is. And they should have been exported identically from my local bk repository. I'll double-check next time before sending.

Jeremy

author
#5 lore raw
Quoted 12 lines · Jeremy Katz
Quoted 2 lines · aq

Here is a patch to fix few problems in Xen bootloader you sent to the list yesterday.

Thanks. Sorry for the delay in responding, I've been underwater with stuff for FC4 test3.

Quoted 2 lines

list of changes:
- make a dummy tools/pygrub/src/__init__.py

I still don't know why this didn't work, but thanks.

Quoted 8 lines
Quoted 3 lines

- extend filesystem abstraction by adding file_exist() method. this method is used to check for existent of a file given its name. now ext2fs implements this method.

Great, thanks. My only comment about the ext2fs code for this is that you might as well inline the contents of ext2_file_exist in ext2fs_file_exist... you don't gain anything by having that for reuse that I can see.

I agree.

By the way, I am working on xfs/jfs/reiserfs module for this code. Hopefully I will finish soon.

regards,
aq

#6 lore raw
In reply to Jeremy Katz
Quoted 43 lines · Jeremy Katz
Quoted 2 lines · aq

Here is a patch to fix few problems in Xen bootloader you sent to the list yesterday.

Thanks. Sorry for the delay in responding, I've been underwater with stuff for FC4 test3.

Quoted 2 lines

list of changes:
- make a dummy tools/pygrub/src/__init__.py

I still don't know why this didn't work, but thanks.

Quoted 3 lines

- extend filesystem abstraction by adding file_exist() method. this method is used to check for existent of a file given its name. now ext2fs implements this method.

Great, thanks. My only comment about the ext2fs code for this is that you might as well inline the contents of ext2_file_exist in ext2fs_file_exist... you don't gain anything by having that for reuse that I can see.

Quoted 4 lines

- pygrub opens and parses /boot/grub/menu.lst or /boot/grub/grub.conf, in that order.
- add /usr/lib/python to system path (see pygrub). without this change, pygrub cannot find grub python package.

Per the other changes I submitted a week or so ago, you want to append this to the path, not prepend it.

Quoted 1 line

- remove few blank lines

Fair enough.

Quoted 7 lines
$ diffstat xen-grub.patch
__init__.py            |    1
fsys/__init__.py       |    5 +++-
fsys/ext2/ext2module.c |   51 ++++++++++++++++++++++++++++++++++++++++---------
pygrub                 |   12 +++++++++--
4 files changed, 57 insertions(+), 12 deletions(-)
Quoted 7 lines
Quoted 1 line

I'll apply this to my local tree. Mike -- based on your later mail, should I gather that you've applied things to your tree and are in the process of pushing to -unstable? Or should I go about trying to do something more sane to maintain this on the side for a while?

Yes, I've applied the patch and it should be making its way out to unstable, possibly today.

BTW, I had to install e2fsprogs-devel before it would compile, so I added a note that you need that in a README.

Quoted 9 lines
Quoted 3 lines

I wonder why the patch you sent to list is in CR/LF format? arent you programming on Windows, are you ;-). could you please remove them next time ?

Hrmm, I have no clue either. The previous patch appears to not be in DOS format but the second one is. And they should have been exported identically from my local bk repository. I'll double-check next time before sending.

Mike

#7 lore raw
Quoted 2 lines · Mike Wray

Yes, I've applied the patch and it should be making its way out to unstable, possibly today.

Cool, thanks.

Quoted 2 lines

BTW, I had to install e2fsprogs-devel before it would compile, so I added a note that you need that in a README.

When other fsystems come along, we'll probably end up wanting to check for availability of the libraries and only build support for the filesystems that we can. Unfortunately, I'm going to have to look harder at distutils to see if there is a clean way to do that :)

Jeremy

author
#8 lore raw
In reply to Mike Wray
Quoted 47 lines · Mike Wray
Quoted 46 lines · Jeremy Katz
Quoted 2 lines · aq

Here is a patch to fix few problems in Xen bootloader you sent to the list yesterday.

Thanks. Sorry for the delay in responding, I've been underwater with stuff for FC4 test3.

Quoted 2 lines

list of changes:
- make a dummy tools/pygrub/src/__init__.py

I still don't know why this didn't work, but thanks.

Quoted 3 lines

- extend filesystem abstraction by adding file_exist() method. this method is used to check for existent of a file given its name. now ext2fs implements this method.

Great, thanks. My only comment about the ext2fs code for this is that you might as well inline the contents of ext2_file_exist in ext2fs_file_exist... you don't gain anything by having that for reuse that I can see.

Quoted 4 lines

- pygrub opens and parses /boot/grub/menu.lst or /boot/grub/grub.conf, in that order.
- add /usr/lib/python to system path (see pygrub). without this change, pygrub cannot find grub python package.

Per the other changes I submitted a week or so ago, you want to append this to the path, not prepend it.

Quoted 1 line

- remove few blank lines

Fair enough.

Quoted 8 lines
$ diffstat xen-grub.patch
__init__.py            |    1
fsys/__init__.py       |    5 +++-
fsys/ext2/ext2module.c |   51 ++++++++++++++++++++++++++++++++++++++++---------
pygrub                 |   12 +++++++++--
4 files changed, 57 insertions(+), 12 deletions(-)
Quoted 7 lines
Quoted 4 lines

I'll apply this to my local tree. Mike -- based on your later mail, should I gather that you've applied things to your tree and are in the process of pushing to -unstable? Or should I go about trying to do something more sane to maintain this on the side for a while?

Yes, I've applied the patch and it should be making its way out to unstable, possibly today.

Mike, will you push those code to -unstable soon? I am looking forward to it. ( I am having few improvements, but not sure what to patch against)

thank you,
aq

#9 lore raw
Quoted 5 lines · aq

...
Mike, will you push those code to -unstable soon? I am looking forward to it. ( I am having few improvements, but not sure what to patch against)

I've applied the patch and some of your fixes locally. It's in the pipeline for unstable, I can't push directly myself.

Mike