]> git.pld-linux.org Git - projects/pld-builder.new.git/blame - client/rebuild-kernel-packages.py
add 4.14 to source packages
[projects/pld-builder.new.git] / client / rebuild-kernel-packages.py
CommitLineData
17e4ceb7
JR
1#!/usr/bin/python
2
3import argparse
4import collections
5import os
6import rpm
7import shlex
8import subprocess
9import sys
10
11packages = collections.OrderedDict([
e2579fe2
JR
12 ('crash', ['head', '4.14', '4.9', '4.4', '4.1']),
13 ('dahdi-linux', ['head', '4.14', '4.9', '4.4', '4.1']),
14 ('ipset', ['head', '4.14', '4.9', '4.4', '4.1']),
15 ('linux-gpib', ['head', '4.14', '4.9', '4.4', '4.1']),
16 ('lttng-modules', ['head', '4.14', '4.9', '4.4', '4.1']),
17 ('r8168', ['head', '4.14', '4.9', '4.4', '4.1']),
18 ('rtl8812au', ['head', '4.14', '4.9', '4.4', '4.1']),
19 ('spl', ['head', '4.14', '4.9', '4.4', '4.1']),
20 ('sysdig', ['head', '4.14', '4.9', '4.4', '4.1']),
21 ('tpm_emulator', ['head', '4.14', '4.9', '4.4', '4.1']),
22 ('VirtualBox', ['head', '4.14', '4.9', '4.4', '4.1']),
23 ('vpb-driver', ['head', '4.14', '4.9', '4.4', '4.1']),
24 ('WireGuard', ['head', '4.14', '4.9', '4.4', '4.1']),
25 ('wl', ['head', '4.14', '4.9', '4.4', '4.1']),
26 ('xorg-driver-video-nvidia', ['head', '4.14', '4.9', '4.4', '4.1']),
27 ('xorg-driver-video-nvidia-legacy-304xx', ['head', '4.14', '4.9', '4.4', '4.1']),
28 ('xorg-driver-video-nvidia-legacy-340xx', ['head', '4.14', '4.9', '4.4', '4.1']),
29 ('xtables-addons', ['head', '4.14', '4.9', '4.4', '4.1']),
30 ('zfs', ['head', '4.14', '4.9', '4.4', '4.1']),
31 ('lin_tape', ['4.14', '4.9', '4.4', '4.1']),
1127c34e
JR
32 ('igb', ['4.4', '4.1']),
33 ('ixgbe', ['4.4', '4.1']),
34 ('nvidiabl', ['4.4', '4.1']),
17e4ceb7
JR
35])
36
37def get_rpmdir():
38 return rpm.expandMacro("%_topdir")
39
40def clean_pkgname(package):
41 pkg = package.split(":")
42 if not pkg:
43 raise NameError
44 spec = pkg[0]
45 # ensure package ends with .spec
46 if not spec.endswith(".spec"):
47 spec += ".spec"
48 name = spec[:-5]
49 # and pkg without subdir
50 name = name[name.rfind("/")+1:]
51 try:
52 branch = pkg[1]
53 except IndexError:
54 branch = "master"
55 return [name, spec, branch]
56
57def run_command(command, verbose=False, quiet=True):
58 gitproc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=-1)
59 gitproc.wait()
60 out = gitproc.stdout.read().strip("\n'")
61 if verbose:
62 print ' '.join(command)
63 if not quiet:
64 print out
65 if gitproc.returncode != 0:
66 if quiet:
67 print out
68 print '\nError running command: \n'
69 print ' '.join(command)
70 return (False, None)
71 return (True, out)
72
8a2c0d44 73def get_last_tag(name, spec, branch, dist="th", kernel=None, verbose=False):
17e4ceb7
JR
74 fetch_package(name, spec, branch, verbose=verbose)
75 if os.path.exists("%s/%s/%s" % (get_rpmdir(), name, spec)):
76 tag = get_autotag(name, spec, branch, dist=dist, kernel=kernel, verbose=verbose)
77 return tag
78
79def get_autotag(name, spec, branch, dist="th", kernel=None, verbose=False):
80 if not kernel or kernel == "head" or kernel == "master":
81 ref = "auto/%s/%s-[0-9]*" % (dist, name)
82 else:
83 ref = "auto/%s/%s-%s-[0-9]*" % (dist, name, kernel)
84 gitdir = "%s/%s" % (get_rpmdir(), name)
85 tag = run_command(["/usr/bin/git", "-C", gitdir, "describe", "--tags", "--match", ref, "--abbrev=0", branch], verbose=verbose)
86 return tag[1]
87
88def fetch_package(name, spec, branch, verbose=False):
89 gitdir = "%s/%s" % (get_rpmdir(), name)
90 if os.path.exists("%s/.git" % gitdir):
91 run_command(["/usr/bin/git", "-C", gitdir, "fetch", "origin"], verbose=verbose)
92 else:
93 run_command(["/usr/bin/git", "clone", "-o", "origin", "git://git.pld-linux.org/packages/" + name + ".git", gitdir], verbose=verbose)
620e0c77 94 if not os.path.exists("%s/%s" % (gitdir, spec)):
17e4ceb7
JR
95 return None
96 run_command(["/usr/bin/git", "-C", gitdir, "config", "--local", "--add", "remote.origin.fetch", "refs/notes/*:refs/notes/*"], verbose=verbose)
97 run_command(["/usr/bin/git", "-C", gitdir, "remote", "set-url", "--push", "origin", "ssh://git@git.pld-linux.org/packages/" + name], verbose=verbose)
98 run_command(["/usr/bin/git", "-C", gitdir, "fetch", "origin", "refs/notes/*:refs/notes/*"], verbose=verbose)
99 if branch:
100 if run_command(["/usr/bin/git", "-C", gitdir, "rev-parse", "--verify", "-q", branch], verbose=verbose):
101 run_command(["/usr/bin/git", "-C", gitdir, "checkout", branch, "--"], verbose=verbose)
102 elif run_command(["/usr/bin/git", "-C", gitdir, "rev-parse", "--verify", "-q", "refs/remotes/origin/" + branch], verbose=verbose):
103 run_command(["/usr/bin/git", "-C", gitdir, "checkout", "-t", "refs/remotes/origin/" + branch], verbose=verbose)
104 rev_branch = run_command(["/usr/bin/git", "-C", gitdir, "rev-parse", branch], verbose=verbose)
105 rev_head = run_command(["/usr/bin/git", "-C", gitdir, "rev-parse", "HEAD"], verbose=verbose)
106 if rev_branch[1] != rev_head[1]:
107 print "Error: cannot checkout " + name
108 return None
109 run_command(["/usr/bin/git", "-C", gitdir, "merge", "--ff-only", "@{upstream}"], verbose=verbose)
110
111def csv_list(string):
112 return string.split(',')
113
114def kernel_cmp(x, y):
115 x = x.split('.')
116 y = y.split('.')
117 try:
118 int(x[0])
119 except ValueError:
120 return 1
121 try:
122 int(y[0])
123 except ValueError:
124 return -1
125 majdiff = int(x[0]) - int(y[0])
126 if majdiff:
127 return majdiff
128 mindiff = int(x[1]) - int(y[1])
129 return mindiff
130
131def main():
132 parser = argparse.ArgumentParser(description='Rebuild kernel modules.')
133 parser.add_argument('-d', '--dist',
134 default='th',
135 help='Dist name for getting auto-tags (default: %(default)s)')
136 parser.add_argument('-m', '--make-request',
137 default="make-request",
138 metavar='SCRIPT',
139 help='Name / path of the make-request script (default: %(default)s)')
fc433b8b
JR
140 parser.add_argument('-ni', '--noinstall',
141 action='store_true',
142 help='skip installing new kernel packages on src builder (default: %(default)s)')
17e4ceb7
JR
143 parser.add_argument('-n', '--nopae',
144 action='store_true',
145 help='Build packages for nopae kernel for i686 (default: %(default)s)')
146 parser.add_argument('-p', '--packages',
147 type=csv_list,
148 default=packages.keys(),
149 metavar='PKG1[,PKG2...]',
150 help='Package names to build (default: all)')
151 parser.add_argument('-s', '--skip',
152 type=csv_list,
153 metavar='VER1[,VER2...]',
154 help='Don\'t build modules specific to these kernels (default: %(default)s)')
155 parser.add_argument('-t', '--test-build',
156 action='store_true',
157 help='Perform a test-builds')
158 parser.add_argument('-v', '--verbose',
159 action='store_true',
160 help='Be verbose when running commands (default: %(default)s)')
161 args = parser.parse_args()
162
163 build_mode = '-r'
164 if args.test_build:
8a2c0d44 165 build_mode = '-t'
17e4ceb7
JR
166
167 if not args.skip:
168 args.skip = []
169
170 if not args.make_request.startswith('/'):
171 for path in os.defpath.split(os.pathsep):
172 if os.path.isfile('/'.join([path, args.make_request])):
173 args.make_request = '/'.join([path, args.make_request])
174 break
175
fc433b8b
JR
176 if not args.noinstall:
177 source_packages = []
006b6daa 178 for ver in ['-','-nopae-','-4.14-','-4.9-','-4.4-','-4.1-']:
fc433b8b 179 source_packages.extend(['kernel%sheaders' % ver, 'kernel%smodule-build' % ver])
16e6ea5c 180 command = (('%(make_request)s -b %(dist)s-src -t -c '
fc433b8b
JR
181 '"poldek -n %(dist)s -n %(dist)s-ready -n %(dist)s-test --up ; '
182 'poldek -uGv %(source_packages)s"') %
183 {'make_request': args.make_request,
184 'dist': args.dist,
185 'source_packages': ' '.join(source_packages)})
186 run_command(shlex.split(command), verbose=args.verbose, quiet=False)
187 raw_input('\nPress Enter after src builder updates kernel packages...')
17e4ceb7
JR
188
189 print '\nCurrent kernels versions:'
190 all_kernels = set()
191 for kernel_list in packages.values():
192 all_kernels.update(kernel_list)
193 all_kernels = list(all_kernels)
194 all_kernels.sort(cmp=kernel_cmp, reverse=True)
195 for kernel in all_kernels:
196 branch = 'master'
197 if kernel != 'head':
198 branch = 'LINUX_%s' % kernel.replace('.','_')
8a2c0d44 199 print '%s: %s' % (kernel, get_last_tag('kernel', 'kernel.spec', branch, dist=args.dist, kernel=kernel, verbose=args.verbose))
17e4ceb7
JR
200
201 for pkg, kernels in packages.iteritems():
8a2c0d44
JR
202 try:
203 name, spec, branch = clean_pkgname(pkg)
204 except NameError:
205 continue
17e4ceb7
JR
206 if not pkg in args.packages:
207 continue
208 if not set(kernels).symmetric_difference(args.skip):
209 continue
fc433b8b 210 if args.test_build:
16e6ea5c 211 command = ("%s -nd %s -d %s --define 'build_kernels %s' --without userspace %s" %
fc433b8b
JR
212 (args.make_request, build_mode, args.dist, ','.join(kernels), spec))
213 else:
214 tag = get_last_tag(name, spec, branch, dist=args.dist, verbose=args.verbose)
215 if not tag:
216 print "Failed getching last autotag for %s!" % pkg
217 continue
16e6ea5c 218 command = ("%s -nd %s -d %s --define 'build_kernels %s' --without userspace %s:%s" %
fc433b8b 219 (args.make_request, build_mode, args.dist, ','.join(kernels), spec, tag))
17e4ceb7
JR
220 run_command(shlex.split(command), verbose=args.verbose, quiet=False)
221
222 if args.nopae:
223 for pkg, kernels in packages.iteritems():
8a2c0d44
JR
224 try:
225 name, spec, branch = clean_pkgname(pkg)
226 except NameError:
227 continue
17e4ceb7
JR
228 if not pkg in args.packages:
229 continue
230 if not 'head' in kernels:
231 continue
fc433b8b 232 if args.test_build:
16e6ea5c 233 command = ("%s -nd %s -d %s -b th-i686 --define 'build_kernels nopae' --kernel nopae --without userspace %s" %
fc433b8b
JR
234 (args.make_request, build_mode, args.dist, spec))
235 else:
236 tag = get_last_tag(name, spec, branch, dist=args.dist, verbose=args.verbose)
237 if not tag:
238 print "Failed getching last autotag for %s!" % pkg
239 continue
16e6ea5c 240 command = ("%s -nd %s -d %s -b th-i686 --define 'build_kernels nopae' --kernel nopae --without userspace %s:%s" %
fc433b8b 241 (args.make_request, build_mode, args.dist, spec, tag))
17e4ceb7
JR
242 run_command(shlex.split(command), verbose=args.verbose, quiet=False)
243
244if __name__ == "__main__":
245 main()
246
247# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
This page took 0.983688 seconds and 4 git commands to generate.