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
|
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import yum.comps
import kobo.shortcuts
RELEASEVER = 14
GROUPS = [
"core",
"base",
"console-internet",
"file-server",
"mysql",
"network-file-system-client",
"network-tools",
"network-server",
"postgresql",
"scm",
"storage",
"text-editors",
"web-server",
]
PACKAGES = [
"kernel",
"kernel-PAE",
]
WORK_DIR = "/var/tmp/server-spin"
REPO_DIR = os.path.join(WORK_DIR, "repo")
COMPOSE_DIR = os.path.join(WORK_DIR, "compose")
SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__))
COMPS_FILE = os.path.join(SCRIPT_DIR, "Fedora-Server-comps.xml")
KS_FILE = os.path.join(WORK_DIR, "fedora-server.ks")
def read_comps_packages(comps_file, group=None):
comps_obj = yum.comps.Comps()
comps_obj.add(comps_file)
result = set()
for i in comps_obj.get_groups():
if group is None or i.groupid == group:
result.update(i.packages)
return sorted(result)
def create_ks(groups, packages):
lines = []
lines.append("repo --name=fedora --mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=fedora-%d&arch=$basearch --ignoregroups=true" % RELEASEVER)
lines.append("repo --name=fedora-updates --mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f%d&arch=$basearch --ignoregroups=true" % RELEASEVER)
lines.append("repo --name=comps --baseurl=file://%s" % REPO_DIR)
lines.append("")
lines.append("%packages")
for i in sorted(groups):
lines.append("@%s" % i)
lines.extend(read_comps_packages(COMPS_FILE, i))
lines.append("")
lines.extend(sorted(packages))
lines.append("%end")
return "\n".join(lines)
# remove old data first
kobo.shortcuts.run("rm -rfv %s" % WORK_DIR, stdout=True, can_fail=True)
os.makedirs(WORK_DIR)
os.makedirs(REPO_DIR)
os.makedirs(COMPOSE_DIR)
# write a new kickstart
kickstart = create_ks(groups=GROUPS, packages=PACKAGES)
kobo.shortcuts.save_to_file(KS_FILE, kickstart)
# create an empty repo to provide custom comps
kobo.shortcuts.run("createrepo . -g %s" % COMPS_FILE, workdir=REPO_DIR, stdout=True)
# run pungi
kobo.shortcuts.run("pungi --config=%s --name=FedoraServer --nosource --nodebuginfo --nosplitmedia --destdir=%s" % (KS_FILE, COMPOSE_DIR), stdout=True)
|