mirror of
https://git.launchpad.net/ubuntu-dev-tools
synced 2025-03-13 08:01:09 +00:00
* pbuilder-dist:
- Refactor to use subprocess.popen instead of os.system (LP: #398974) - Catch OSErrors when creating directories (LP: #671067) - Set HOME so pbuilder reads .pbuilderrc - Add bidirectional workarounds for LP: #599695 (pbuilder uses the host apt keyring). Complain if the target's keyring isn't installed. * Use dpkg-vendor in ubuntutools.misc.system_distribution(), cache result.
This commit is contained in:
commit
84e2835686
9
debian/changelog
vendored
9
debian/changelog
vendored
@ -13,6 +13,13 @@ ubuntu-dev-tools (0.107) UNRELEASED; urgency=low
|
||||
- Add --sort-binary-packages and --keep-first (LP: #681119)
|
||||
* grab-merge, syncpackage: Export DEB_VENDOR=Ubuntu when unpacking source
|
||||
packages. 3.0 (quilt) has optional per-vendor patch series.
|
||||
* pbuilder-dist:
|
||||
- Refactor to use subprocess.popen instead of os.system (LP: #398974)
|
||||
- Catch OSErrors when creating directories (LP: #671067)
|
||||
- Set HOME so pbuilder reads .pbuilderrc
|
||||
- Add bidirectional workarounds for LP: #599695 (pbuilder uses the host
|
||||
apt keyring). Complain if the target's keyring isn't installed.
|
||||
* Use dpkg-vendor in ubuntutools.misc.system_distribution(), cache result.
|
||||
|
||||
[ Benjamin Drung ]
|
||||
* wrap-and-sort: Remove duplicate items from sorted lists.
|
||||
@ -27,7 +34,7 @@ ubuntu-dev-tools (0.107) UNRELEASED; urgency=low
|
||||
* submittodebian: Encourage sending multiple independent pieces of the
|
||||
Ubuntu patch in separate bug reports.
|
||||
|
||||
-- Daniel Holbach <daniel.holbach@ubuntu.com> Tue, 30 Nov 2010 11:55:24 +0100
|
||||
-- Stefano Rivera <stefanor@ubuntu.com> Thu, 02 Dec 2010 09:36:48 +0200
|
||||
|
||||
ubuntu-dev-tools (0.106) experimental; urgency=low
|
||||
|
||||
|
261
pbuilder-dist
261
pbuilder-dist
@ -2,7 +2,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2007-2010 Siegfried-A. Gevatter <rainct@ubuntu.com>
|
||||
# With some changes by Iain Lane <iain@orangesquash.org.uk>
|
||||
# With some changes by Iain Lane <iain@orangesquash.org.uk>,
|
||||
# Stefano Rivera <stefanor@ubuntu.com>
|
||||
# Based upon pbuilder-dist-simple by Jamin Collins and Jordan Mantha.
|
||||
#
|
||||
# ##################################################################
|
||||
@ -17,7 +18,7 @@
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# See file /usr/share/common-licenses/GPL for more details.
|
||||
# See file /usr/share/common-licenses/GPL-2 for more details.
|
||||
#
|
||||
# ##################################################################
|
||||
#
|
||||
@ -28,18 +29,17 @@
|
||||
# configurations. For example, a symlink called pbuilder-hardy will assume
|
||||
# that the target distribution is always meant to be Ubuntu Hardy.
|
||||
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
from sys import exit, argv, stderr
|
||||
|
||||
import ubuntutools.misc
|
||||
|
||||
debian_distros = ['etch', 'lenny', 'squeeze', 'sid', 'stable', \
|
||||
'testing', 'unstable', 'experimental']
|
||||
debian_distros = ['etch', 'lenny', 'squeeze', 'sid', 'stable', 'testing',
|
||||
'unstable', 'experimental']
|
||||
|
||||
class pbuilder_dist:
|
||||
|
||||
def __init__(self, builder):
|
||||
|
||||
# Base directory where pbuilder will put all the files it creates.
|
||||
self.base = None
|
||||
|
||||
@ -77,20 +77,24 @@ class pbuilder_dist:
|
||||
self.builder = builder
|
||||
|
||||
# Ensure that the used builder is installed
|
||||
for file in os.environ['PATH'].split(':'):
|
||||
if os.path.exists(os.path.join(file, builder)):
|
||||
builder = ''
|
||||
break
|
||||
if builder:
|
||||
print 'Error: Could not find "%s".' % builder
|
||||
sys.exit(1)
|
||||
paths = set(os.environ['PATH'].split(':'))
|
||||
paths |= set(('/sbin', '/usr/sbin', '/usr/local/sbin'))
|
||||
if not any(os.path.exists(os.path.join(p, builder)) for p in paths):
|
||||
print >> stderr, 'Error: Could not find "%s".' % builder
|
||||
exit(1)
|
||||
|
||||
##############################################################
|
||||
|
||||
self.base = os.path.expanduser(os.environ.get('PBUILDFOLDER', '~/pbuilder/'))
|
||||
self.base = os.path.expanduser(os.environ.get('PBUILDFOLDER',
|
||||
'~/pbuilder/'))
|
||||
|
||||
if not os.path.exists(self.base):
|
||||
if not os.path.isdir(self.base):
|
||||
try:
|
||||
os.makedirs(self.base)
|
||||
except os.OSError:
|
||||
print >> stderr, ('Error: Cannot create base directory "%s"'
|
||||
% self.base)
|
||||
exit(1)
|
||||
|
||||
if 'PBUILDAUTH' in os.environ:
|
||||
self.auth = os.environ['PBUILDAUTH']
|
||||
@ -102,12 +106,6 @@ class pbuilder_dist:
|
||||
|
||||
self.target_distro = self.system_distro
|
||||
|
||||
##############################################################
|
||||
|
||||
def __getitem__(self, name):
|
||||
|
||||
return getattr(self, name)
|
||||
|
||||
def set_target_distro(self, distro):
|
||||
""" pbuilder_dist.set_target_distro(distro) -> None
|
||||
|
||||
@ -115,25 +113,25 @@ class pbuilder_dist:
|
||||
isn't know to the system ask the user for confirmation before
|
||||
proceeding, and finally either save the value into the appropiate
|
||||
variable or finalize pbuilder-dist's execution.
|
||||
|
||||
"""
|
||||
|
||||
if not distro.isalpha():
|
||||
print 'Error: «%s» is an invalid distribution codename.' % distro
|
||||
sys.exit(1)
|
||||
print >> stderr, ('Error: "%s" is an invalid distribution codename.'
|
||||
% distro)
|
||||
exit(1)
|
||||
|
||||
if not os.path.isfile(os.path.join('/usr/share/debootstrap/scripts/', distro)):
|
||||
if not os.path.isfile(os.path.join('/usr/share/debootstrap/scripts/',
|
||||
distro)):
|
||||
if os.path.isdir('/usr/share/debootstrap/scripts/'):
|
||||
# Debian experimental doesn't have a debootstrap file but
|
||||
# should work nevertheless.
|
||||
if distro not in debian_distros:
|
||||
answer = ask('Warning: Unknown distribution «%s». Do you ' \
|
||||
'want to continue [y/N]? ' % distro)
|
||||
answer = ask(('Warning: Unknown distribution "%s". Do you '
|
||||
'want to continue [y/N]? ') % distro)
|
||||
if answer not in ('y', 'Y'):
|
||||
sys.exit(0)
|
||||
exit(0)
|
||||
else:
|
||||
print 'Please install package "debootstrap".'
|
||||
sys.exit(1)
|
||||
print >> stderr, 'Please install package "debootstrap".'
|
||||
exit(1)
|
||||
|
||||
self.target_distro = distro
|
||||
|
||||
@ -143,9 +141,7 @@ class pbuilder_dist:
|
||||
Check if the given string is a valid pbuilder operation and
|
||||
depending on this either save it into the appropiate variable
|
||||
or finalize pbuilder-dist's execution.
|
||||
|
||||
"""
|
||||
|
||||
arguments = ('create', 'update', 'build', 'clean', 'login', 'execute')
|
||||
|
||||
if operation not in arguments:
|
||||
@ -154,12 +150,15 @@ class pbuilder_dist:
|
||||
self.operation = 'build'
|
||||
return [operation]
|
||||
else:
|
||||
print 'Error: Could not find file «%s».' % operation
|
||||
sys.exit(1)
|
||||
print >> stderr, ('Error: Could not find file "%s".'
|
||||
% operation)
|
||||
exit(1)
|
||||
else:
|
||||
print 'Error: «%s» is not a recognized argument.' % operation
|
||||
print 'Please use one of those: ' + ', '.join(arguments) + '.'
|
||||
sys.exit(1)
|
||||
print >> stderr, (
|
||||
'Error: "%s" is not a recognized argument.\n'
|
||||
'Please use one of these: %s.'
|
||||
) % (operation, ', '.join(arguments))
|
||||
exit(1)
|
||||
else:
|
||||
self.operation = operation
|
||||
return []
|
||||
@ -169,14 +168,13 @@ class pbuilder_dist:
|
||||
|
||||
Generate the pbuilder command which matches the given configuration
|
||||
and return it as a string.
|
||||
|
||||
"""
|
||||
|
||||
if not self.build_architecture:
|
||||
self.chroot_string = self.target_distro
|
||||
self.build_architecture = self.system_architecture
|
||||
else:
|
||||
self.chroot_string = '%(target_distro)s-%(build_architecture)s' % self
|
||||
self.chroot_string = (self.target_distro + '-'
|
||||
+ self.build_architecture)
|
||||
|
||||
prefix = os.path.join(self.base, self.chroot_string)
|
||||
result = '%s_result/' % prefix
|
||||
@ -185,87 +183,108 @@ class pbuilder_dist:
|
||||
self.logfile = os.path.normpath('%s/last_operation.log' % result)
|
||||
|
||||
if not os.path.isdir(result):
|
||||
# Create the results directory, if it doesn't exist.
|
||||
try:
|
||||
os.makedirs(result)
|
||||
|
||||
if self.builder == 'pbuilder':
|
||||
base = '--basetgz "%s-base.tgz"' % prefix
|
||||
elif self.builder == 'cowbuilder':
|
||||
base = '--basepath "%s-base.cow"' % prefix
|
||||
else:
|
||||
print 'Error: Unrecognized builder "%s".' % self.builder
|
||||
sys.exit(1)
|
||||
except os.OSError:
|
||||
print >> stderr, ('Error: Cannot create results directory "%s"'
|
||||
% result)
|
||||
exit(1)
|
||||
|
||||
arguments = [
|
||||
'--%s' % self.operation,
|
||||
base,
|
||||
'--distribution "%(target_distro)s"' % self,
|
||||
'--buildresult "%s"' % result,
|
||||
'--aptcache "/var/cache/apt/archives/"',
|
||||
'--distribution', self.target_distro,
|
||||
'--buildresult', result,
|
||||
'--aptcache', '/var/cache/apt/archives/',
|
||||
'--override-config',
|
||||
]
|
||||
|
||||
if self.builder == 'pbuilder':
|
||||
arguments += ['--basetgz', prefix + '-base.tgz']
|
||||
elif self.builder == 'cowbuilder':
|
||||
arguments += ['--basepath', prefix + '-base.cow']
|
||||
else:
|
||||
print >> stderr, 'Error: Unrecognized builder "%s".' % self.builder
|
||||
exit(1)
|
||||
|
||||
|
||||
if self.logfile:
|
||||
arguments.append('--logfile %s' % self.logfile)
|
||||
arguments += ['--logfile', self.logfile]
|
||||
|
||||
if os.path.exists('/var/cache/archive/'):
|
||||
arguments.append('--bindmounts "/var/cache/archive/"')
|
||||
arguments += ['--bindmounts', '/var/cache/archive/']
|
||||
|
||||
localrepo = '/var/cache/archive/%(target_distro)s' % self
|
||||
localrepo = '/var/cache/archive/' + self.target_distro
|
||||
if os.path.exists(localrepo):
|
||||
arguments.append('--othermirror ' +\
|
||||
'"deb file:///var/cache/archive/ %(target_distro)s/"' % self)
|
||||
arguments += [
|
||||
'--othermirror ',
|
||||
'deb file:///var/cache/archive/ %s/' % self.target_distro,
|
||||
]
|
||||
|
||||
if self.target_distro in debian_distros:
|
||||
arguments.append('--mirror "ftp://ftp.debian.org/debian"')
|
||||
# work around bug #599695
|
||||
arguments.append('--debootstrapopts --keyring=/usr/share/keyrings/debian-archive-keyring.gpg')
|
||||
arguments += ['--mirror', 'http://ftp.debian.org/debian']
|
||||
components = 'main'
|
||||
if self.extra_components:
|
||||
components += ' contrib non-free'
|
||||
else:
|
||||
if self.build_architecture in ('amd64', 'i386'):
|
||||
arguments.append('--mirror "http://archive.ubuntu.com/ubuntu/"')
|
||||
elif self.build_architecture == 'powerpc' and self.target_distro == 'dapper':
|
||||
arguments.append('--mirror "http://archive.ubuntu.com/ubuntu/"')
|
||||
arguments += ['--mirror', 'http://archive.ubuntu.com/ubuntu/']
|
||||
elif (self.build_architecture == 'powerpc'
|
||||
and self.target_distro == 'dapper'):
|
||||
arguments += ['--mirror', 'http://archive.ubuntu.com/ubuntu/']
|
||||
else:
|
||||
arguments.append('--mirror "http://ports.ubuntu.com/ubuntu-ports/"')
|
||||
arguments += ['--mirror',
|
||||
'http://ports.ubuntu.com/ubuntu-ports/']
|
||||
components = 'main restricted'
|
||||
if self.extra_components:
|
||||
components += ' universe multiverse'
|
||||
|
||||
arguments.append('--components "%s"' % components)
|
||||
# Work around LP:#599695
|
||||
if (ubuntutools.misc.system_distribution() == 'Debian'
|
||||
and self.target_distro not in debian_distros):
|
||||
if not os.path.exists(
|
||||
'/usr/share/keyrings/ubuntu-archive-keyring.gpg'):
|
||||
print >> stderr, 'Error: ubuntu-keyring not installed'
|
||||
exit(1)
|
||||
arguments += [
|
||||
'--debootstrapopts',
|
||||
'--keyring=/usr/share/keyrings/ubuntu-archive-keyring.gpg',
|
||||
]
|
||||
elif (ubuntutools.misc.system_distribution() == 'Ubuntu'
|
||||
and self.target_distro in debian_distros):
|
||||
if not os.path.exists(
|
||||
'/usr/share/keyrings/debian-archive-keyring.gpg'):
|
||||
print >> stderr, 'Error: debian-archive-keyring not installed'
|
||||
exit(1)
|
||||
arguments += [
|
||||
'--debootstrapopts',
|
||||
'--keyring=/usr/share/keyrings/debian-archive-keyring.gpg',
|
||||
]
|
||||
|
||||
arguments += ['--components', components]
|
||||
|
||||
if self.build_architecture != self.system_architecture:
|
||||
arguments.append('--debootstrapopts --arch="%(build_architecture)s"' % self)
|
||||
arguments += ['--debootstrapopts',
|
||||
'--arch=' + self.build_architecture]
|
||||
|
||||
apt_conf_dir = os.path.join(self.base, 'etc/%(target_distro)s/apt.conf' % self)
|
||||
apt_conf_dir = os.path.join(self.base,
|
||||
'etc/%s/apt.conf' % self.target_distro)
|
||||
if os.path.exists(apt_conf_dir):
|
||||
arguments.append('--aptconfdir "%s"' % apt_conf_dir)
|
||||
arguments += ['--aptconfdir', apt_conf_dir]
|
||||
|
||||
# Append remaining arguments
|
||||
if remaining_arguments:
|
||||
arguments.extend(remaining_arguments)
|
||||
|
||||
def quote(argument):
|
||||
""" quote(argument) -> string
|
||||
|
||||
Try to guess any missing quotes around the arguments so that
|
||||
their meaning doesn't get lost (see LP: #398989).
|
||||
|
||||
"""
|
||||
|
||||
if argument.startswith('--'):
|
||||
if '=' in argument:
|
||||
return '%s="%s"' % tuple(argument.split('=', 1))
|
||||
return argument
|
||||
return '"%s"' % argument
|
||||
|
||||
# Export the distribution and architecture information to the
|
||||
# environment so that it is accessible to ~/.pbuilderrc (LP: #628933).
|
||||
return '%s ARCH="%s" DIST="%s" /usr/sbin/%s %s' % (self.auth,
|
||||
self.build_architecture, self.target_distro, self.builder,
|
||||
' '.join(map(quote, arguments)))
|
||||
return [
|
||||
self.auth,
|
||||
'HOME=' + os.path.expanduser('~'),
|
||||
'ARCH=' + self.build_architecture,
|
||||
'DIST=' + self.target_distro,
|
||||
self.builder,
|
||||
] + arguments
|
||||
|
||||
|
||||
def ask(question):
|
||||
""" ask(question) -> string
|
||||
@ -273,9 +292,7 @@ def ask(question):
|
||||
Ask the given question and return the answer. Also catch
|
||||
KeyboardInterrupt (Ctrl+C) and EOFError (Ctrl+D) exceptions and
|
||||
immediately return None if one of those is found.
|
||||
|
||||
"""
|
||||
|
||||
try:
|
||||
answer = raw_input(question)
|
||||
except (KeyboardInterrupt, EOFError):
|
||||
@ -288,12 +305,10 @@ def help(exit_code = 0):
|
||||
""" help() -> None
|
||||
|
||||
Print a help message for pbuilder-dist, and exit with the given code.
|
||||
|
||||
"""
|
||||
|
||||
print 'See man pbuilder-dist for more information.'
|
||||
|
||||
sys.exit(exit_code)
|
||||
exit(exit_code)
|
||||
|
||||
def main():
|
||||
""" main() -> None
|
||||
@ -302,22 +317,21 @@ def main():
|
||||
object, modifies all necessary settings taking data from the
|
||||
executable's name and command line options and finally either ends
|
||||
the script and runs pbuilder itself or exists with an error message.
|
||||
|
||||
"""
|
||||
|
||||
script_name = os.path.basename(sys.argv[0])
|
||||
script_name = os.path.basename(argv[0])
|
||||
parts = script_name.split('-')
|
||||
|
||||
# Copy arguments into another list for save manipulation
|
||||
args = sys.argv[1:]
|
||||
args = argv[1:]
|
||||
|
||||
if '-' in script_name and (parts[0] != 'pbuilder' and \
|
||||
parts[0] != 'cowbuilder') or len(parts) > 3:
|
||||
print 'Error: «%s» is not a valid name for a «pbuilder-dist» executable.' % script_name
|
||||
sys.exit(1)
|
||||
if ('-' in script_name and parts[0] not in ('pbuilder', 'cowbuilder')
|
||||
or len(parts) > 3):
|
||||
print >> stderr, ('Error: "%s" is not a valid name for a '
|
||||
'"pbuilder-dist" executable.') % script_name
|
||||
exit(1)
|
||||
|
||||
if len(args) < 1:
|
||||
print 'Insufficient number of arguments.'
|
||||
print >> stderr, 'Insufficient number of arguments.'
|
||||
help(1)
|
||||
|
||||
if args[0] in ('-h', '--help', 'help'):
|
||||
@ -332,9 +346,10 @@ def main():
|
||||
|
||||
if len(parts) > 2:
|
||||
requested_arch = parts[2]
|
||||
elif len(args) > 0 and args[0] in ("alpha", "amd64", "arm", "armeb",
|
||||
"armel", "i386", "lpia", "m68k", "mips", "mipsel", "powerpc", "ppc64",
|
||||
"sh4", "sh4eb", "sparc", "sparc64"):
|
||||
elif len(args) > 0 and args[0] in (
|
||||
'alpha', 'amd64', 'arm', 'armeb', 'armel', 'i386', 'lpia', 'm68k',
|
||||
'mips', 'mipsel', 'powerpc', 'ppc64', 'sh4', 'sh4eb', 'sparc',
|
||||
'sparc64'):
|
||||
requested_arch = args.pop(0)
|
||||
else:
|
||||
requested_arch = None
|
||||
@ -342,42 +357,42 @@ def main():
|
||||
if requested_arch:
|
||||
app.build_architecture = requested_arch
|
||||
# For some foreign architectures we need to use qemu
|
||||
if requested_arch != app.system_architecture and (app.system_architecture,
|
||||
requested_arch) not in [("amd64", "i386"), ("amd64", "lpia"),
|
||||
("arm", "armel"), ("armel", "arm"), ("i386", "lpia"), ("lpia", "i386"),
|
||||
("powerpc", "ppc64"), ("ppc64", "powerpc"), ("sparc", "sparc64"),
|
||||
("sparc64", "sparc")]:
|
||||
args.append('--debootstrap qemu-debootstrap')
|
||||
if (requested_arch != app.system_architecture
|
||||
and (app.system_architecture, requested_arch) not in [
|
||||
('amd64', 'i386'), ('amd64', 'lpia'), ('arm', 'armel'),
|
||||
('armel', 'arm'), ('i386', 'lpia'), ('lpia', 'i386'),
|
||||
('powerpc', 'ppc64'), ('ppc64', 'powerpc'),
|
||||
('sparc', 'sparc64'), ('sparc64', 'sparc')]):
|
||||
args += ['--debootstrap', 'qemu-debootstrap']
|
||||
|
||||
if 'mainonly' in sys.argv or '--main-only' in sys.argv:
|
||||
if 'mainonly' in argv or '--main-only' in argv:
|
||||
app.extra_components = False
|
||||
if 'mainonly' in sys.argv:
|
||||
if 'mainonly' in argv:
|
||||
args.remove('mainonly')
|
||||
else:
|
||||
args.remove('--main-only')
|
||||
|
||||
if len(args) < 1:
|
||||
print 'Insufficient number of arguments.'
|
||||
print >> stderr, 'Insufficient number of arguments.'
|
||||
help(1)
|
||||
|
||||
# Parse the operation
|
||||
args = app.set_operation(args.pop(0)) + args
|
||||
|
||||
if app.operation == 'build' and not '.dsc' in ' '.join(args):
|
||||
print 'Error: You have to specify a .dsc file if you want to build.'
|
||||
sys.exit(1)
|
||||
if app.operation == 'build' and '.dsc' not in ' '.join(args):
|
||||
print >> stderr, ('Error: You have to specify a .dsc file if you want '
|
||||
'to build.')
|
||||
exit(1)
|
||||
|
||||
# Execute the pbuilder command
|
||||
if not '--debug-echo' in args:
|
||||
sys.exit(os.system(app.get_command(args)))
|
||||
exit(subprocess.call(app.get_command(args)))
|
||||
else:
|
||||
print app.get_command((args)).replace(
|
||||
' --debug-echo', '')
|
||||
print app.get_command([arg for arg in args if arg != '--debug-echo'])
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
try:
|
||||
main()
|
||||
except KeyboardInterrupt:
|
||||
print 'Manually aborted.'
|
||||
sys.exit(1)
|
||||
print >> stderr, 'Manually aborted.'
|
||||
exit(1)
|
||||
|
@ -26,36 +26,36 @@ from subprocess import Popen, PIPE
|
||||
|
||||
from ubuntutools.lp.udtexceptions import PocketDoesNotExistError
|
||||
|
||||
_system_distribution = None
|
||||
def system_distribution():
|
||||
""" system_distro() -> string
|
||||
|
||||
Detect the system's distribution and return it as a string. If the
|
||||
name of the distribution can't be determined, print an error message
|
||||
and return None.
|
||||
|
||||
"""
|
||||
# We try to avoid calling the "lsb_release" as looking up the value
|
||||
# directly is faster. However, Debian doesn't have /etc/lsb-release
|
||||
# so we need to fallback to the former there.
|
||||
if os.path.isfile('/etc/lsb-release'):
|
||||
for line in open('/etc/lsb-release'):
|
||||
line = line.strip()
|
||||
if line.startswith('DISTRIB_CODENAME'):
|
||||
return line[17:]
|
||||
global _system_distribution
|
||||
if _system_distribution is None:
|
||||
try:
|
||||
if os.path.isfile('/usr/bin/dpkg-vendor'):
|
||||
p = Popen(('dpkg-vendor', '--query', 'vendor'), stdout=PIPE)
|
||||
else:
|
||||
import commands
|
||||
output = commands.getoutput('lsb_release -cs')
|
||||
if output:
|
||||
return output
|
||||
p = Popen(('lsb_release', '-cs'), stdout=PIPE)
|
||||
output = p.communicate()[0]
|
||||
except OSError:
|
||||
print 'Error: Could not determine what distribution you are running.'
|
||||
return None
|
||||
if p.returncode != 0:
|
||||
print 'Error determininng system distribution'
|
||||
return None
|
||||
_system_distribution = output.strip()
|
||||
return _system_distribution
|
||||
|
||||
def host_architecture():
|
||||
""" host_architecture -> string
|
||||
|
||||
Detect the host's architecture and return it as a string. If the
|
||||
architecture can't be determined, print an error message and return None.
|
||||
|
||||
"""
|
||||
|
||||
arch = Popen(['dpkg', '--print-architecture'], stdout=PIPE, \
|
||||
@ -73,7 +73,6 @@ def readlist(filename, uniq=True):
|
||||
|
||||
Read a list of words from the indicated file. If 'uniq' is True, filter
|
||||
out duplicated words.
|
||||
|
||||
"""
|
||||
|
||||
if not os.path.isfile(filename):
|
||||
|
Loading…
x
Reference in New Issue
Block a user