forked from kaisenlinux/simple-cdd
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcheckpackages
More file actions
executable file
·87 lines (69 loc) · 3.11 KB
/
checkpackages
File metadata and controls
executable file
·87 lines (69 loc) · 3.11 KB
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
80
81
82
83
84
85
86
87
#!/usr/bin/env python3
# check for missing packages in mirrors
# copyright 2006 Vagrant Cascadian <vagrant@freegeek.org>, distributed under
# the terms of the GNU General Public License version 2 or any later version.
# this expects three environment variables to be set:
# CHECK_MIRROR: a space separated list of mirror locations to check
# profiles: a space separated list of profiles to be included
# simple_cdd_dir: directory where simple-cdd is being build
# TODO: refactor with functions for duplicated code
import os
import sys
mirrors=os.environ.get('CHECK_MIRROR')
profiles=os.environ.get('profiles').split()
simple_cdd_dir=os.environ.get('simple_cdd_dir')
x=os.popen("find %s -type f -name '*.deb' -o -name '*.udeb' | sed -e 's,.*/,,g' -e 's,_.*,,g'" % mirrors)
y=x.readlines()
x.close()
available_packages=list()
for p in y:
available_packages.append(p.rstrip())
missing_required_packages=list()
def check_missing_packages(packagelist, available_packages):
missing=list()
x=open(packagelist)
y=x.readlines()
x.close()
for line in y:
if not line.startswith('#') and not line.startswith('\n'):
p=line.rstrip()
if available_packages.count(p) < 1:
missing.append(p)
return missing
def get_missing_packages (packagelist, alt_packagelist, available_packages):
if os.path.exists(packagelist):
return check_missing_packages(packagelist, available_packages)
elif os.path.exists(alt_packagelist):
return check_missing_packages(alt_packagelist, available_packages)
def report_missing_packages (profile, packages, packagetype):
m=''
if packagetype == 'required':
errortype='ERROR'
else:
errortype='WARNING'
for p in packages:
m=m + ' ' + p
print('%s: missing %s packages from profile %s: %s' % (errortype, packagetype, profile, m))
for profile in profiles:
missing_profile_packages=list()
missing_profile_downloads=list()
profile_base=simple_cdd_dir+'/profiles/'+profile
alt_profile_base='/usr/share/simple-cdd/profiles/'+profile
missing_profile_packages=get_missing_packages(profile_base+'.packages', alt_profile_base+'.packages', available_packages)
missing_profile_downloads=get_missing_packages(profile_base+'.downloads', alt_profile_base+'.downloads', available_packages)
missing_profile_udebs=get_missing_packages(profile_base+'.udebs', alt_profile_base+'.udebs', available_packages)
if missing_profile_packages:
missing_required_packages.extend(missing_profile_packages)
report_missing_packages(profile, missing_profile_packages, 'required')
if missing_profile_udebs:
missing_required_packages.extend(missing_profile_udebs)
report_missing_packages(profile, missing_profile_udebs, 'required')
if missing_profile_downloads:
warn='optional'
if os.environ.get('require_optional_packages') == "true":
missing_required_packages.extend(missing_profile_downloads)
warn='required'
report_missing_packages(profile, missing_profile_downloads, warn)
if missing_required_packages:
sys.exit(1)
sys.exit(0)