Compare commits

...

19 Commits

Author SHA1 Message Date
Tudor Marcu 2024792039 Release v1.14
Suppress extra yum plugin output.

Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
2018-02-01 11:24:56 -08:00
George T Kramer 4afdbd6c8e Filter yum output for parsing with yum plugins
Dependeing if plugins are enabled when yum is directed to honor plugin
usage, the output from yum list changes, and has the potential to break
the creation of the versions file.  Suppressing this additional plugin
output by operating yum in quiet mode avoids this risk.

Signed-off-by: George T Kramer <george.t.kramer@intel.com>
2018-02-01 11:19:01 -08:00
Tudor Marcu 2f17b8187e Release v1.13
This release enables yum plugin usage in bundle-chroot-builder.

Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
2018-01-17 13:53:49 -08:00
George T Kramer df44fd82f0 Allow yum plugin usage
When doing a yum install, plugins should be able to modify how this
operation is performed.  Allowing the use of a priority plugin, or a
fastest mirror plugin, or other possibly useful plugins would be up to
the user and dependent on the yum configuration they use for building
the chroot for their bundles.

Signed-off-by: George T Kramer <george.t.kramer@intel.com>
2018-01-17 13:45:37 -08:00
Tudor Marcu 2b92b2eff2 Release v1.12
This release enables using environment variables in the builder.conf,
and adds a README for making/installing the program.

Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
2018-01-04 11:44:55 -08:00
Mark Horn e6e3bab777 Added basic build instructions
Add the basic steps for building and installing this project.

Signed-off-by: Mark Horn <mark.d.horn@intel.com>
2018-01-04 10:15:43 -08:00
Mark Horn ff6a30cc43 Enable Environment Variables in Configuration File
This code change enables the use of Linux Environment
variables in the configuration file. This is very useful
for paths to avoid having to hard-code paths.

Added error checking on the environment variables.

For proper use, it will also require a similar patch to
the mixer-tools project.

Signed-off-by: Mark Horn <mark.d.horn@intel.com>
2018-01-02 09:47:13 -08:00
Matthew Johnson 798b4e8906 Release v1.11
This release adds a configuration section for debuginfo banning in the
swupd-server configuration file server.ini.

Signed-off-by: Matthew Johnson <matthew.johnson@intel.com>
2017-09-20 14:56:14 -07:00
Matthew Johnson 6a0cafa617 Add debuginfo configuration for server.ini
Add configuration for debuginfo bans to server.ini via builder.conf.
These configurations will be directly used by swupd-server to determine
if it should ban debuginfo files from the manifests and exactly which
paths should be banned. This patch cleans up the writing of the
server.ini file as well.

Signed-off-by: Matthew Johnson <matthew.johnson@intel.com>
2017-09-19 10:33:16 -07:00
Tudor Marcu 1bb15ab253 Release v1.10
This release fixes the builder.conf template to match what is shown in
the documentation page.

Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
2017-08-08 11:12:14 -07:00
Tudor Marcu 02f5c8fad9 Update builder.conf
Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
2017-08-08 11:03:30 -07:00
Patrick McCarty 579f606714 Merge tag 'v1.09' 2017-04-04 13:24:07 -07:00
Tudor Marcu 537bacec41 Release v1.09
Properly handle m4 errors during build process.

Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
2017-04-04 12:33:12 -07:00
Tudor Marcu cd634c88df Release v1.09
Properly handle m4 errors during build process.

Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
2017-04-04 12:29:27 -07:00
Tudor Marcu 0e50054fa1 Exit on m4 error
M4 may fail here in the case of circular includes, causing the updater
to crash later. This patch checks that the subprocess call succeeded, and if not
raises an exception to exit. It may not terminate instantly due to the async
nature of processing bundles, but once the bad thread finishes it will exit.

Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
2017-03-22 16:19:04 -07:00
Tudor Marcu 6aa46648d0 Exit on m4 error
M4 may fail here in the case of circular includes, causing the updater
to crash later. This patch checks that the subprocess call succeeded, and if not
raises an exception to exit. It may not terminate instantly due to the async
nature of processing bundles, but once the bad thread finishes it will exit.

Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
2017-03-22 15:45:16 -07:00
Patrick McCarty bcffbb7096 Exclude empty subpackages from the SRPM file lists
The string "(contains no files)" is printed when running 'rpm -ql ...'
for an empty subpackage. Since that output is more useful for
interactive use, make sure the string is excluded from the final SRPM
file lists that begin with files-*.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2017-01-24 16:10:28 -08:00
Tudor Marcu 9fc98a03b1 Release v1.08
This release fixes the builder.conf template so it has a more sane starting
point.

Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
2016-11-09 12:13:35 -08:00
Tudor Marcu c96046001e Fix builder.conf template
Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
2016-11-09 12:13:14 -08:00
4 changed files with 102 additions and 27 deletions
+20
View File
@@ -1,3 +1,23 @@
Building this Project
=====================
For help using automake see
http://www.gnu.org/software/automake/manual/html_node/index.html
Configure:
aclocal
autoconf
automake --add-missing
# Defaults to /usr/local or specific --prefix=/usr
# to overwrite the installed version
./configure
Build:
make
Install:
make -n install
sudo make install
Configuration File
==================
Please update the configuration file paths to point to where your
+10 -6
View File
@@ -1,13 +1,17 @@
[Builder]
SERVER_STATE_DIR=/home/clr/mix/update
BUNDLE_DIR=/home/clr/mix/bundles
BUNDLE_DIR=/home/clr/mix/mix-bundles
YUM_CONF=/home/clr/mix/.yum-mix.conf
CERT=/home/clr/mix/ClearLinuxRoot.pem
CLEAR_VERSION=VER
MIX_VERSION=VER
CERT=/home/clr/mix/Swupd_Root.pem
VERSIONS_PATH=/home/clr/mix
[swupd]
BUNDLE=os-core-update
CONTENTURL=https://download.clearlinux.org/update/
VERSIONURL=https://download.clearlinux.org/update/
CONTENTURL=<URL where the content will be hosted>
VERSIONURL=<URL where the version of the mix will be hosted>
FORMAT=1
[Server]
debuginfo_banned=true
debuginfo_lib=/usr/lib/debug/
debuginfo_src=/usr/src/debug/
+71 -20
View File
@@ -25,6 +25,7 @@ import argparse
import configparser
import os
import os.path
import io
import platform
import re
import shutil
@@ -47,16 +48,32 @@ def handle_options():
return args
def read_config(args):
def get_config(args):
buildconf='/usr/share/defaults/bundle-chroot-builder/builder.conf'
if os.path.isfile('/etc/bundle-chroot-builder/builder.conf'):
buildconf = '/etc/bundle-chroot-builder/builder.conf'
if args.config:
buildconf = args.config
config = configparser.ConfigParser()
print("Reading from %s" % buildconf)
config.read(buildconf)
print("Reading from %s" % buildconf)
cfg_txt = ""
# Check that the environment variables in the config file are valid
pattern = re.compile("\$\{?(\w+)\}?")
for i, line in enumerate(open(buildconf, 'r')):
for match in re.finditer(pattern, line):
if not match.group(1) in os.environ:
print("ERROR:\nbuilder.conf contains an undefined environment variable: %s on line %s\n"
% (i+1, match.group(1)))
exit(1)
cfg_txt += os.path.expandvars(line)
config = configparser.ConfigParser()
config.readfp(io.StringIO(cfg_txt))
return config
def read_config(args):
config = get_config(args)
for option in ['SERVER_STATE_DIR', 'BUNDLE_DIR', 'YUM_CONF']:
if config.has_option('Builder', option) == False:
print("ERROR:\nbuilder.conf is missing:\n[Builder]\n%s\n" % option)
@@ -74,9 +91,13 @@ def read_config(args):
def install_bundle(out_dir, postfix, bundle, bundles, yum_cmd):
"""Helper function to yum install a bundle"""
lines = []
with subprocess.Popen(["m4", bundles + "/" + bundle], cwd=bundles, stdout=subprocess.PIPE, bufsize=1, universal_newlines=True) as p:
for line in p.stdout:
lines.append(line)
try:
output = subprocess.check_output(["m4", bundles + "/" + bundle], cwd=bundles, bufsize=1, universal_newlines=True)
except subprocess.CalledProcessError as e:
print('ERROR {0}: m4 failed on {1}/{2}'.format(e.returncode, bundles, bundle))
raise
for line in output:
lines.append(line)
pkgs = "".join(lines)
to_install = []
@@ -147,6 +168,37 @@ def clean_bundle(out_dir, bundle, bundles, yum_cmd):
os.chdir(prev_dir)
def write_default_server_ini(state_dir, server_conf):
"""
Write default server.ini file in the state dir in the following format
[Server]
emptydir={state_dir}/empty/
imagebase={state_dir}/image/
outputdir={state_dir}/www/
[Debuginfo]
banned=true
lib=/usr/lib/debug/
src=/usr/src/debug/
"""
contents = ("[Server]\n"
"emptydir={0}/empty/\n"
"imagebase={0}/image/\n"
"outputdir={0}/www/\n".format(state_dir))
if server_conf:
contents += ("\n[Debuginfo]\n"
"banned={}\n"
"lib={}\n"
"src={}\n"
.format(server_conf.get('debuginfo_banned'),
server_conf.get('debuginfo_lib'),
server_conf.get('debuginfo_src')))
with open(state_dir + "/server.ini", "w+") as serverini:
serverini.write(contents)
def create_chroots(args, state_dir, bundles, yum_conf):
"""The state_dir should always be created if it does not exist"""
if os.path.isdir(state_dir) == False:
@@ -160,14 +212,15 @@ def create_chroots(args, state_dir, bundles, yum_conf):
if os.path.isdir(state_dir + "/www/0") == False:
os.makedirs(state_dir + "/www/0")
"""Create server.ini and groups.ini for create_update later on"""
with open(state_dir + "/server.ini", "w+") as serverini:
serverini.write("[Server]\nemptydir=" + state_dir + "/empty/\nimagebase=" + state_dir + "/image/\noutputdir=" + state_dir + "/www/\n")
# Create server.ini and groups.ini for create_update later on
config = get_config(args)
config = config['Server'] if 'Server' in config else {}
write_default_server_ini(state_dir, config)
with open(state_dir + "/groups.ini", "w+") as groupsini:
bundle_list = os.listdir(bundles)
bundle_list = trim_bundles(bundle_list)
for bundle in bundle_list:
groupsini.write("[" + bundle + "]\ngroup=" + bundle + "\n\n")
groupsini.write("[{0}]\ngroup={0}\n\n".format(bundle))
"""Setup chroots for bundles"""
bversion = ""
@@ -201,7 +254,7 @@ def create_chroots(args, state_dir, bundles, yum_conf):
packager = ["dnf"]
else:
packager = ["yum"]
yum_cmd = packager + ["--config={}".format(yum_conf), "-y", "--noplugins", "--releasever={}".format(build_version)]
yum_cmd = packager + ["--config={}".format(yum_conf), "-y", "--releasever={}".format(build_version)]
if 'local' in config == False:
try:
urllib.request.urlopen(conf_baseurl)
@@ -247,7 +300,7 @@ def create_chroots(args, state_dir, bundles, yum_conf):
print("Noting os-core package list")
with open(out_dir + "/versions", "w") as file:
subprocess.Popen(yum_cmd + ["--installroot={}/os-core".format(out_dir), "list"], stdout=file).wait()
subprocess.Popen(yum_cmd + ["--quiet", "--installroot={}/os-core".format(out_dir), "list"], stdout=file).wait()
with open(out_dir + "/packages-os-core", "w") as file:
subprocess.Popen(['rpm', '--root={}/os-core'.format(out_dir),
'-qa', '--queryformat', '%{NAME}\t%{SOURCERPM}\n'], stdout=file).wait()
@@ -284,13 +337,7 @@ def create_chroots(args, state_dir, bundles, yum_conf):
r.get()
"""Read the URL values from builder.conf and insert them into os-core-update to swupd knows where to pull content from"""
buildconf='/usr/share/defaults/bundle-chroot-builder/builder.conf'
if os.path.isfile('/etc/bundle-chroot-builder/builder.conf'):
buildconf = '/etc/bundle-chroot-builder/builder.conf'
if args.config:
buildconf = args.config
config = configparser.ConfigParser()
config.read(buildconf)
config = get_config(args)
"""Read the configuration file for our script values"""
for option in ['BUNDLE', 'CONTENTURL', 'VERSIONURL', 'FORMAT']:
@@ -331,6 +378,10 @@ def create_chroots(args, state_dir, bundles, yum_conf):
if package_name not in package_mapping:
package_mapping[package_name] = set()
for path in path_list:
# RPM prints out a specific string for subpackages that contain no
# files. It should be excluded from the SRPM file list.
if re.match(br"\(contains no files\)\n", path):
continue
package_mapping[package_name].add(path)
for package_name, paths in package_mapping.items():
with open(out_dir + "/files-{}".format(package_name), "wb") as file:
+1 -1
View File
@@ -1,5 +1,5 @@
AC_PREREQ([2.68])
AC_INIT([bundle-chroot-builder],[1.07],[tudor.marcu@intel.com],[bundle-chroot-builder])
AC_INIT([bundle-chroot-builder],[1.14],[tudor.marcu@intel.com],[bundle-chroot-builder])
AM_INIT_AUTOMAKE([foreign silent-rules color-tests no-dist-gzip dist-xz])
AC_CONFIG_FILES(Makefile)
AC_PREFIX_DEFAULT(/usr/local)