1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
import logging
import errno
from hwpack.config import Config
from hwpack.hardwarepack import HardwarePack, Metadata
from hwpack.packages import (
FetchedPackage,
LocalArchiveMaker,
PackageFetcher,
)
logger = logging.getLogger(__name__)
LOCAL_ARCHIVE_LABEL='hwpack-local'
class ConfigFileMissing(Exception):
def __init__(self, filename):
self.filename = filename
super(ConfigFileMissing, self).__init__(
"No such config file: '%s'" % self.filename)
class HardwarePackBuilder(object):
def __init__(self, config_path, version, local_debs):
try:
with open(config_path) as fp:
self.config = Config(fp)
except IOError, e:
if e.errno == errno.ENOENT:
raise ConfigFileMissing(config_path)
raise
self.config.validate()
self.version = version
self.local_debs = local_debs
def build(self):
for architecture in self.config.architectures:
logger.info("Building for %s" % architecture)
metadata = Metadata.from_config(
self.config, self.version, architecture)
hwpack = HardwarePack(metadata)
sources = self.config.sources
with LocalArchiveMaker() as local_archive_maker:
hwpack.add_apt_sources(sources)
sources = sources.values()
packages = self.config.packages[:]
local_packages = [
FetchedPackage.from_deb(deb)
for deb in self.local_debs]
sources.append(
local_archive_maker.sources_entry_for_debs(
local_packages, LOCAL_ARCHIVE_LABEL))
packages.extend([lp.name for lp in local_packages])
logger.info("Fetching packages")
fetcher = PackageFetcher(
sources, architecture=architecture,
prefer_label=LOCAL_ARCHIVE_LABEL)
with fetcher:
fetcher.ignore_packages(self.config.assume_installed)
packages = fetcher.fetch_packages(
packages, download_content=self.config.include_debs)
logger.debug("Adding packages to hwpack")
hwpack.add_packages(packages)
for local_package in local_packages:
if local_package not in packages:
logger.warning(
"Local package '%s' not included",
local_package.name)
hwpack.add_dependency_package(self.config.packages)
with open(hwpack.filename(), 'w') as f:
hwpack.to_file(f)
logger.info("Wrote %s" % hwpack.filename())
with open(hwpack.filename('.manifest.txt'), 'w') as f:
f.write(hwpack.manifest_text())
|