[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#560348: xen: racy temporary files for kernel and initrd



Am Mittwoch, den 11.08.2010, 10:40 +0100 schrieb Ian Campbell: 
> On Wed, 2010-08-11 at 00:05 +0200, Paul Menzel wrote:
> > Am Dienstag, den 10.08.2010, 15:10 +0100 schrieb Ian Campbell:
> > > On Tue, 2010-08-10 at 15:40 +0200, Paul Menzel wrote:
> > > > Am Montag, den 21.12.2009, 09:19 +0000 schrieb Ian Campbell:
> > > > > On Fri, 2009-12-11 at 11:30 +0100, Ferenc Wagner wrote:
> > > > > > 
> > > > > > The guest is the Debian Installer daily image, you surely know it much
> > > > > > better than I do. :)  The host is a Lenny system with the Etch kernel:
> > > > 
> > > > I am using Lenny with a standard Lenny kernel.
> > > > 
> > > > $ uname -a
> > > > Linux hostname 2.6.26-2-xen-amd64 #1 SMP Wed Mar 10 00:29:48 UTC 2010 x86_64 GNU/Linux
> > > > 
> > > > > I think the issue is with the host's Xen utilities rather than the
> > > > > Debian Installer image which makes it tricky to fix in Lenny. I believe
> > > > > it works with the Xen utilities in Squeeze.
> > > > 
> > > > Should this bug be reassigned then?
> > > > 
> > > > > For Lenny you could workaround by downloading the kernel and ramdisk
> > > > > locally and use the install-kernel= and install-ramdisk= options to
> > > > > xm-debian.cfg, or if you have a local mirror you could just use
> > > > > install-installer=.
> > > > 
> > > > Unfortunately that work-around does not work for me.
> > > > 
> > > >         $ ls -l /tmp/{vmlinuz,initrd.gz}
> > > >         -rw-r--r-- 1 user user 17859729 2010-08-10 10:05 /tmp/initrd.gz
> > > >         -rw-r--r-- 1 user user  2351776 2010-08-10 10:05 /tmp/vmlinuz
> > > >         $ sudo xm create /tmp/xm-debian.cfg install=true install-mirror=ftp://ftp.de.debian.org/debian install-installer=http://people.debian.org/~joeyh/d-i/images/daily/ install-suite=squeeze install-kernel=/tmp/vmlinuz install-ramdisk=/tmp/initrd.gz
> > > >         Using config file "/tmp/xm-debian.cfg".
> > > >         Install Mirror: ftp://ftp.de.debian.org/debian
> > > >         Install Suite: squeeze
> > > >         Installer: http://people.debian.org/~joeyh/d-i/images/daily/
> > > >         
> > > >         WARNING: Installer kernel and ramdisk are not authenticated.
> > > >         
> > > >         Fetching /tmp/vmlinuz
> > > >         Fetching /tmp/initrd.gz
> > > >         command line is "debian-installer/exit/always_halt=true -- quiet console=hvc0"
> > > >         Error: Kernel image does not exist: /tmp/vmlinuz
> > > > 
> > > > Do you have any ideas?
> > > 
> > > It's not clear looking back over the bug that anyone ever actually tried
> > > the workaround, rather than hypothesising it. Unfortunately I don't have
> > > a suitable Lenny system to hand.
> > > 
> > > You could try "install-kernel=file:///...."
> > 
> > That did not work either.
> > 
> >         […]
> >         Fetching file:///tmp/vmlinuz
> >         Fetching file:///tmp/initrd.gz
> >         command line is "debian-installer/exit/always_halt=true -- quiet
> >         console=hvc0"
> >         Error: Kernel image does not exist: /tmp/vmlinuz
> 
> Hmm, I suspect the workaround never worked then (it was only a theory).
> 
> > > Alternatively you can always use your own configuration file (like you
> > > would for a non-Debian domain) [...]
> > 
> > Thank you for your suggestion. Unfortunately I get the following error
> > message.
> > 
> >         $ sudo xm create /tmp/squeeze.cfg
> >         Using config file "/tmp/squeeze.cfg".
> >         Error: Boot loader didn't return any data!
> >         $ ls -l /usr/bin/pygrub 
> >         lrwxrwxrwx 1 root root 29 2010-06-15 10:51 /usr/bin/pygrub -> /usr/lib/xen-3.2-1/bin/pygrub
> >         $ dpkg -S /usr/lib/xen-3.2-1/bin/pygrub 
> >         xen-utils-3.2-1: /usr/lib/xen-3.2-1/bin/pygrub
> >         $ dpkg -l xen-utils-3.2-1
> >         ii  xen-utils-3.2- 3.2.1-2        XEN administrative tools
> > 
> > But reading [1] and your comment before I commented the bootloader line
> > too.
> 
> That was the right thing to do for the install phase.
> 
> >         $ grep vmlinuz /tmp/squeeze.cfg 
> >         kernel = "/tmp/vmlinuz"
> >         $ sudo xm create /tmp/squeeze.cfg
> >         Using config file "/tmp/squeeze.cfg".
> >         Error: Kernel image does not exist: /tmp/vmlinuz
> > 
> > Do you have any idea? This is with the daily Debian Installer files from
> > [2].
> 
> Hrm. I assume /tmp/vmlinuz exists and is readable by the relevant user
> etc. Do the logs in /var/log/xen tell you anything?

        [2010-08-11 10:40:38 3386] DEBUG (XendDomainInfo:84) XendDomainInfo.create(['vm', ['name', 'host'], ['memory', 2048], ['vcpus', 1], ['on_xend_start', 'ignore'], ['on_xend_stop', 'ignore'], ['image', ['linux', ['kernel', '/tmp/vmlinuz'], ['ramdisk', '/tmp/initrd.gz'], ['args', 'debian-installer/exit/always_halt=true -- xencons=hvc console=hvc0 ro root=/dev/hda']]], ['device', ['vbd', ['uname', 'phy:/dev/xkcd/oe-build-host'], ['dev', 'xvda'], ['mode', 'w']]], ['device', ['vbd', ['uname', 'phy:/dev/xkcd/oe-build-host-swap'], ['dev', 'xvdb'], ['mode', 'w']]], ['device', ['vif']], ['device', ['vif', ['bridge', 'xenbr1']]]])
        [2010-08-11 10:40:38 3386] DEBUG (XendDomainInfo:1618) XendDomainInfo.constructDomain
        [2010-08-11 10:40:38 3386] DEBUG (balloon:132) Balloon: 3669568 KiB free; need 2048; done.
        [2010-08-11 10:40:38 3386] DEBUG (XendDomain:443) Adding Domain: 53
        [2010-08-11 10:40:38 3386] DEBUG (XendDomainInfo:1703) XendDomainInfo.initDomain: 53 256
        [2010-08-11 10:40:38 3386] DEBUG (XendDomainInfo:1738) _initDomain:shadow_memory=0x0, memory_static_max=0x80000000, memory_static_min=0x0.
        [2010-08-11 10:40:38 3386] DEBUG (balloon:132) Balloon: 3669560 KiB free; need 2097152; done.
        [2010-08-11 10:40:38 3386] ERROR (XendDomainInfo:1775) XendDomainInfo.initDomain: exception occurred
        Traceback (most recent call last):
          File "/usr/lib/xen-3.2-1/lib/python/xen/xend/XendDomainInfo.py", line 1755, in _initDomain
            channel_details = self.image.createImage()
          File "/usr/lib/xen-3.2-1/lib/python/xen/xend/image.py", line 122, in createImage
            return self.createDomain()
          File "/usr/lib/xen-3.2-1/lib/python/xen/xend/image.py", line 131, in createDomain
            raise VmError('Kernel image does not exist: %s' % self.kernel)
        VmError: Kernel image does not exist: /tmp/vmlinuz
        [2010-08-11 10:40:38 3386] ERROR (XendDomainInfo:440) VM start failed
        Traceback (most recent call last):
          File "/usr/lib/xen-3.2-1/lib/python/xen/xend/XendDomainInfo.py", line 420, in start
            XendTask.log_progress(31, 60, self._initDomain)
          File "/usr/lib/xen-3.2-1/lib/python/xen/xend/XendTask.py", line 209, in log_progress
            retval = func(*args, **kwds)
          File "/usr/lib/xen-3.2-1/lib/python/xen/xend/XendDomainInfo.py", line 1778, in _initDomain
            raise exn
        VmError: Kernel image does not exist: /tmp/vmlinuz
        [2010-08-11 10:40:38 3386] DEBUG (XendDomainInfo:1897) XendDomainInfo.destroy: domid=53
        [2010-08-11 10:40:38 3386] DEBUG (XendDomainInfo:1914) XendDomainInfo.destroyDomain(53)
        [2010-08-11 10:40:38 3386] DEBUG (XendDomainInfo:1529) Destroying device model
        [2010-08-11 10:40:38 3386] DEBUG (XendDomainInfo:1536) Releasing devices
        [2010-08-11 10:40:38 3386] ERROR (XendDomainInfo:89) Domain construction failed
        Traceback (most recent call last):
          File "/usr/lib/xen-3.2-1/lib/python/xen/xend/XendDomainInfo.py", line 87, in create
            vm.start()
          File "/usr/lib/xen-3.2-1/lib/python/xen/xend/XendDomainInfo.py", line 420, in start
            XendTask.log_progress(31, 60, self._initDomain)
          File "/usr/lib/xen-3.2-1/lib/python/xen/xend/XendTask.py", line 209, in log_progress
            retval = func(*args, **kwds)
          File "/usr/lib/xen-3.2-1/lib/python/xen/xend/XendDomainInfo.py", line 1778, in _initDomain
            raise exn
        VmError: Kernel image does not exist: /tmp/vmlinuz
        [2010-08-11 10:40:38 3386] DEBUG (XendDomainInfo:1897) XendDomainInfo.destroy: domid=None
        [2010-08-11 10:40:38 3386] DEBUG (XendDomainInfo:1914) XendDomainInfo.destroyDomain(None)
        [2010-08-11 10:40:38 3386] DEBUG (XendDomainInfo:1534) No device model
        [2010-08-11 10:40:38 3386] DEBUG (XendDomainInfo:1536) Releasing devices

I took a look where `VmError` originates from. I think, it turns out to
be in `/usr/lib/xen-3.2-1/lib/python/xen/xend/image.py`.

        if not os.path.isfile(self.kernel):
            raise VmError('Kernel image does not exist: %s' % self.kernel)

But testing this manually works.

        $ python
        >>> import os
        >>> os.path.isfile("/tmp/vmlinuz")
        True

Then I tried it with a different Linux kernel image under `/boot/` and
this worked. So as a last attempt I copied `vmlinuz` from `/tmp/` to
`/boot/` and now it works as expected. Very strange! Do I need to file a
bug for this somewhere. Could you test that under Squeeze or Sid?

> BTW, it jut occurred to me that if you install a Squeeze VM onto a Lenny
> host that you will find pygrub doesn't work because the version in Lenny
> didn't yet understand the grub2 cfg file format. I think d-i still
> allows you to select grub1 if you use expert mode, and it looks like you
> might be able to add "grub-installer/grub2_instead_of_grub_legacy=false"
> to your command line or "d-i grub-installer/grub2_instead_of_grub_legacy
> boolean false" to your preseed if you have one.

I will test that next.


Thanks,

Paul

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: