After fixing usb-creator so it builds, I tried it on a debian box and found a problem:
in install.py is a load of code to use syslinx-legacy and apropriate options either side of the 10.04 and 10.10 Ubuntu releases.
That fails if a debian iso has been burned onto the USB stick.
target_os_ver, our_os_ver = self.os_vers()
File "/usr/lib/python2.7/dist-packages/usbcreator/install.py",line 206, in os_vers
target_os_ver = debian_support.Version(contents[1])
File "/usr/lib/python2.7/dist-packages/debian/debian_support.py", line 172,
in __init__
super(AptPkgVersion, self).__init__(version)
File "/usr/lib/python2.7/dist-packages/debian/debian_support.py", line 91,
in __init__
self.full_version = version
File "/usr/lib/python2.7/dist-packages/debian/debian_support.py", line 117,
in __setattr__
self._set_full_version(str(value))
File "/usr/lib/python2.7/dist-packages/debian/debian_support.py", line 96,
in _set_full_version
raise ValueError("Invalid version string %r" % version)
ValueError: Invalid version string 'GNU/Linux'
This is because of this code:
if os.path.exists(os.path.join(self.target, '.disk', 'info')):
with open(os.path.join(self.target, '.disk', 'info'),'r') as f:
contents = f.readline().split()
if len(contents) > 2:
# Consider point releases the same as the initial release
# (10.04.4 -> 10.04) target_os_ver = debian_support.Version(contents[1])
becuause .disk/info is:
Debian GNU/Linux wheezy-DI-a1 "Wheezy" - Official Snapshot amd64 NETINST Binary-1 20120512-00:39
so the code tries to parse "GNU/Linux" as debian version number and rightly fails.
BTW I'm not sure that the 'debian_support.Version' fn is really apropriate here as it seems to be designed for package version numbers not release numbers - mind you this works OK:
our_os_ver = debian_support.Version(
lsb_release.get_distro_information()['RELEASE'])
My python is not good enough to work out what to do about this. You could just look for contents[3] and not use the 'Version' function. (There is a 'Release' fn which might be helpful here?)
Or perhaps better is to simply not do any of this checking on Debian as we've been on syslinux 2.4 since squeeze, and there isn't a syslinux-legacy package to use anyway. I'm not sure of the full implications here.
In fact how much do we care about people writing images older then 10.10 any more. Could it all just be simplified for Ubuntu too?
There is a lot of simplification possible in install_bootloader, mangle_syslinux, need_syslinux_legacy etc.
Someone who actually speaks python and is vaguely famliar with the code could presumably fix this without too much trouble.
After fixing usb-creator so it builds, I tried it on a debian box and found a problem:
in install.py is a load of code to use syslinx-legacy and apropriate options either side of the 10.04 and 10.10 Ubuntu releases.
That fails if a debian iso has been burned onto the USB stick.
target_os_ver, our_os_ver = self.os_vers() python2. 7/dist- packages/ usbcreator/ install. py",line 206, in os_vers support. Version( contents[ 1]) python2. 7/dist- packages/ debian/ debian_ support. py", line 172, AptPkgVersion, self)._ _init__ (version) python2. 7/dist- packages/ debian/ debian_ support. py", line 91, full_version = version python2. 7/dist- packages/ debian/ debian_ support. py", line 117, _set_full_ version( str(value) ) python2. 7/dist- packages/ debian/ debian_ support. py", line 96,
File "/usr/lib/
target_os_ver = debian_
File "/usr/lib/
in __init__
super(
File "/usr/lib/
in __init__
self.
File "/usr/lib/
in __setattr__
self.
File "/usr/lib/
in _set_full_version
raise ValueError("Invalid version string %r" % version)
ValueError: Invalid version string 'GNU/Linux'
This is because of this code: exists( os.path. join(self. target, '.disk', 'info')): path.join( self.target, '.disk', 'info'),'r') as f: ).split( )
target_ os_ver = debian_ support. Version( contents[ 1])
if os.path.
with open(os.
contents = f.readline(
if len(contents) > 2:
# Consider point releases the same as the initial release
# (10.04.4 -> 10.04)
becuause .disk/info is:
Debian GNU/Linux wheezy-DI-a1 "Wheezy" - Official Snapshot amd64 NETINST Binary-1 20120512-00:39
so the code tries to parse "GNU/Linux" as debian version number and rightly fails.
BTW I'm not sure that the 'debian_ support. Version' fn is really apropriate here as it seems to be designed for package version numbers not release numbers - mind you this works OK: support. Version( release. get_distro_ information( )['RELEASE' ])
our_os_ver = debian_
lsb_
My python is not good enough to work out what to do about this. You could just look for contents[3] and not use the 'Version' function. (There is a 'Release' fn which might be helpful here?)
Or perhaps better is to simply not do any of this checking on Debian as we've been on syslinux 2.4 since squeeze, and there isn't a syslinux-legacy package to use anyway. I'm not sure of the full implications here.
In fact how much do we care about people writing images older then 10.10 any more. Could it all just be simplified for Ubuntu too?
There is a lot of simplification possible in install_bootloader, mangle_syslinux, need_syslinux_ legacy etc.
Someone who actually speaks python and is vaguely famliar with the code could presumably fix this without too much trouble.
Hope this is helpful to someone.