334 Commits
Author SHA1 Message Date
Patrick McCarty d9bad0621d Revert "builder: Add a bundle's packages as the content to the tracking file"
This change has proven to cause unnecessary churn for the bundle
tracking files when their contents ended up not being consumed by any
tools.

This reverts commit 6f840d712e.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2022-08-08 16:08:46 -07:00
William Douglas 6f840d712e builder: Add a bundle's packages as the content to the tracking file
Add the packages found in a bundle to the bundle tracking file. This
will be handy when trying to figure out client side what packages are
installed on the system.

Signed-off-by: William Douglas <william.douglas@intel.com>
2021-10-15 11:04:17 -07:00
Ashlesha Atrey 5ca50d0873 Fix generated warning for delta packs
While creating delta packs, only possible delta files are found.
If delta file is not found, log the error in debug mode instead
of generating warning, as delta might not have been
created for valid reason.

fixes #628
Signed-off-by: Ashlesha Atrey ashlesha.atrey@intel.com
2020-05-06 10:07:03 -07:00
Reagan Lopez 0c913eec00 Refactor logging for consistent messages
Signed-off-by: Reagan Lopez <reagan.lopez@intel.com>
2020-05-01 16:48:19 -07:00
Ashlesha Atrey f6dcd44f21 Implement logging for mixer
Implement the logging package for mixer.

A common log file can be set for all the mixer commands in the
builder.conf. E.g. `mixer config set Mixer.LOG <filepath>`

The log file and level can also be set for individual mixer
commands using the `--log` and `--log-level` flags respectively.

The various log levels are:
ERROR (1), WARNING (2), INFO (3), DEBUG (4) and VERBOSE (5).
Default log level is 4.

Fixes #666

Signed-off-by: Ashlesha Atrey ashlesha.atrey@intel.com
2020-04-30 13:57:58 -07:00
Reagan Lopez bbeee932be Remove the --no-publish flag
Mixer will now always update the LAST_VER file after `build update`.
This file is used by `build validate` (MCA) to determine whether
the version in comparison is a +10.

Fixes #735

Signed-off-by: Reagan Lopez <reagan.lopez@intel.com>
2020-04-20 10:15:37 -07:00
Reagan Lopez ecbdbc0009 Fix lint issue from previous commit
Signed-off-by: Reagan Lopez <reagan.lopez@intel.com>
2020-04-03 11:12:53 -07:00
Patrick McCarty a66a129b29 Make sure all DNF errors are printed
In addition to printing a summary of unresolvable package names whenever
DNF fails, also print error messages for any "unknown" DNF error, and
finally print the full stdout/stderr from failed DNF commands for later
inspection.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2020-04-02 18:31:54 -07:00
Ashlesha Atrey 361570bf10 Fix MCA bundle deletion during format bump
When bundle is deleted in a mix, bundle info file is not generated for that
bundle. When parsing the manifest, if bundle info is empty, consider that
bundle to be deleted in the mix and do not resolve packages for that
bundle during the MCA process.

Fixes #743

Signed-off-by: Ashlesha Atrey <ashlesha.atrey@intel.com>
2020-03-21 01:56:10 +00:00
John Akre dc79e60eab Parallelize bundle file resolving
By creating a separate installroot for each package resolving goroutine,
dnf can run in parallel without contention on the lock file when
accessing the dnf cache. Now, package and file resolution occurs within
the same installroot so that the dnf cache that was fetched when resolving
packages can be re-used when resolving files.

Fixes #730

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-03-16 00:11:30 -07:00
John Akre fc1be19d4c Update mix variables when crossing upstream formats
When a downstream mix crossed multiple upstream format bumps, the
upstreamversion and mix state variables were updated in the workspace,
but the changes were not updated in memory. This change reloads the
upstreamversion when it is staged/unstaged and reloads the mix state
after crossing each format boundary. Additionally, this change
increments the format number for each upstream format that the
downstream mix crosses.

Fixes #688

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-03-11 21:27:14 -07:00
John Akre 50fd3928d8 Install special case files last
When adding special case files to the full chroot, they will create
missing directories in their path with permissions that may conflict
with content that will be added at a later point. By adding special case
files last, they will not create directories with potentially
conflicting permissions.

Fixes #738

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-03-06 14:30:23 -08:00
John Akre db7d44e3b6 Don't follow symlinks when comparing content/full chroots
When comparing files between content and full chroots, do not follow
symlinks so that the links can be compared.

Fixes #739

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-03-05 15:12:36 -08:00
John Akre bfc02ef322 Set file perms after creating the dest file
When calling the copyFileWithFlags function with the preserveSrc flag
set, file permissions must be set after creating the destination file
and setting the file owner. This is necessary because umask can prevent
newly created files from acquiring the source file's permissions and
file ownership changes can impact the setuid/setgid permissions.

Similarly directory permissions are set after creating the directory to
avoid unexpected permission behavior caused by umask.

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-03-03 16:23:41 -08:00
John Akre af8d355a9c Initialize local yum repo
Newer versions of DNF require that yum repos are initialized, so Mixer
must initialize the local repo, even when it's empty.

Fixes #731

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-03-03 15:28:34 -08:00
John Akre 60dcf63ce2 Preserve file ownership when using content chroots
When using content chroots, file uid/gid values should be preserved when
copying them to the full chroot.

Fixes #727

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-02-25 17:29:39 -08:00
John Akre fa62440e85 Write mixbundles file once for resolved bundle set
When resolving the full mix bundle set, the mixbundles file is now
updated once with the finalized set of bundles. Previously, the
mixbundles file was written many times with intermediate results which
scaled poorly when building with many bundles.

Fixes #724

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-02-25 14:30:14 -08:00
John Akre 514bf24cd9 Clean dnf cache before using it
When building a mix with a version of a package repo that contains
existing cache contents, dnf may resolve incorrect results.

For instance, Mixer does not version the local package repo, so when
incrementally building a mix with local content, dnf will continue to
re-use the same cache for the local repo. This was problematic when the
version of an rpm in the local repo was updated. In this case, the stale
cache metadata was used to incorrectly resolve files for the package.

Cleaning the dnf cache before using it prevents old cache metadata from
impacting dnf results.

Fixes #719

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-02-21 13:26:07 -08:00
Reagan Lopez 1cb0a99126 Introduce new export flag in bundle manifests
By default, files with the prefix "/bin/", "/usr/bin/" and "/usr/local/bin/"
will have a new export flag "x" in the 4th byte of the flag section of the
bundle Manifest.

The user can override this by using a new keyword "un-export()" in
the bundle definition file.
E.g. un-export(/usr/bin/file2)

Note: The export flag is at a bundle-file level and hence does not get
written to the Full manifest.

Fixes #708

Includes bat tests for the export flag feature.
Also, adds an entry for the content-chroot tests to Travis.

Signed-off-by: Reagan Lopez <reagan.lopez@intel.com>
2020-02-21 11:15:17 -08:00
Reagan Lopez bed9ee845e Make bundle messages consistent
Signed-off-by: Reagan Lopez <reagan.lopez@intel.com>
2020-02-14 15:41:54 -08:00
Reagan Lopez af9ef58f48 Handle optional bundles
Currently, build bundles generates an error if one of the mix bundles
has only an 'also-add()' entry in its definition.

Instead, build bundles should not error out and must process such
bundles.

Fixes #718

Signed-off-by: Reagan Lopez <reagan.lopez@intel.com>
2020-02-11 19:27:43 -08:00
John Akre 48a154b912 Print delta pack results together
Delta packs are generated concurrently, so their results output must be
printed once to prevent interleaved results. Additionally, this change
redirects warnings to stderr so that can be separated from the results.

Fixes #551

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-02-05 11:36:05 -08:00
Ashlesha Atrey 1f21b261e7 Add --local flag in mixer bundle create command
Passing '--local' with mixer bundle create will skip
the upstream check and create a new empty local bundle
if it does not already exist.

fixes #713

Signed-off-by: Ashlesha Atrey <ashlesha.atrey@intel.com>
2020-02-04 15:12:04 -08:00
John Akre 844c538415 bundles: Resolve content chroots with full chroot
Files in the content chroots specified by the "contents" keyword in the
bundle definition file are compared against the full chroot to resolve
conflicts which are fatal. When there are no conflicts, files from the
content chroots are copied into the full chroot and added to the
corresponding bundle-info file.

Fixes #705

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-01-31 13:54:12 -08:00
John Akre fb47eee2fb Add content keyword to bundle definition file
The content keyword in the bundle definition file specifies the path to
a chroot whose file contents will be added to the bundle's manifest.

Ex: content(/path)

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-01-31 13:54:12 -08:00
John Akre 0fdf014167 Always clean mix workspace before building bundles
Existing image and output directories for the current mix version will
be removed when building a mix. This prevents mixer from building on top
of directories contaminated by a prior mix.

Fixes #669

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-01-31 13:46:14 -08:00
Ashlesha Atrey 801eea5bf1 Create Dir path for OS-Release File
If mix is minimal mix with empty os-core, directory path for
os-release file does not exist.
Create a directory path before updating the os-release file
2020-01-29 10:55:03 -08:00
Ashlesha Atrey f23d5ed335 Add BUILD_ID field in os-release file
BUILD_ID field in os-release file specifies the upstream Clear
Linux version from which the mix is being created.
If upstream Clear Linux is not found, BUILD_ID is empty.

fixes #706

Signed-off-by: Ashlesha Atrey <ashlesha.atrey@intel.com>
2020-01-28 16:35:27 -08:00
Ashlesha Atrey af3ac917d7 Create a minimal mix
In order to enable a minimal mix for 3rd party, "filesystem" package is made optional.
In case the "filesystem" package is found in any of the mix bundles,
install the "filesystem" package first. If it’s not found in any of the mix bundles,
then do not install it.

swupd-client expects a mix to have a bundle named "os-core" and the "os-release" file.
Hence they are a hard requirement for creating a mix in Mixer.
If the "os-release" file is not found, then create and inject a default one.

fixes #704

Signed-off-by: Ashlesha Atrey <ashlesha.atrey@intel.com>
2020-01-27 16:23:33 -08:00
Reagan Lopez fef63262fd Fix lint issues
Signed-off-by: Reagan Lopez <reagan.lopez@intel.com>
2020-01-13 15:57:55 -08:00
Ashlesha Atrey 5c6afffa1d Refactor error handling in channels
Currently while catching errors using channels and select
statements, when the error is caught in select statements, it
is not breaking from the outside loop.
The correct approach is to let the existing go routines finish
executing and return one of the errors caught by the error channel.
It should also close the channel in order to stop executing new go
routines.
fixes #673

Signed-off-by: Ashlesha Atrey <ashlesha.atrey@intel.com>
2020-01-13 15:22:16 -08:00
Ashlesha Atrey 035a49d818 Improve error message for unresolved packages
If `build bundles` fail to resolve packages,
print the missing packages in the error message.

Fixes #697

Signed-off-by: Ashlesha Atrey <ashlesha.atrey@intel.com>
2020-01-10 17:46:05 -08:00
John Akre 8f01fe5f49 Search upstream and local bundles for deprecated list
When searching for deprecated bundles to detect bundle deletion, both
the upstream and downstream bundles must be checked. Previously,
upstream bundles were not checked during bundle deletion which prevented
downstream mixes from detecting upstream bundle deletions.

Fixes #694

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-01-10 13:57:16 -08:00
John Akre 77665e5d7c Add repo priority to repo list and add commands
Now the mixer repo list command displays repo priorities and the mixer
repo add command can set the repo's priority with the --priority flag.

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-01-08 18:18:50 -08:00
John Akre ea0bf75463 Add set-priority to the repo command
The set-priority repo command updates the priority value for the
specified repo in the DNF config file. This command uses the following
format:

mixer repo set-priority <repo> <priority>

Fixes #691

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-01-08 18:18:50 -08:00
John Akre a6e8a811a6 Consolidate repo set functions
The functions to set values in the DNF config were nearly identical.
This change consolidates the repo set functionality into a single
function to increase code re-use.

Signed-off-by: John Akre <john.w.akre@intel.com>
2020-01-08 18:18:50 -08:00
John Akre 8165ef8419 MCA: Print warnings to stderr
Signed-off-by: John Akre <john.w.akre@intel.com>
2019-12-30 11:49:28 -08:00
John Akre 45dc7ae190 MCA: Add support for bundle tracking file
The bundle tracking file is added to each manifest by mixer and does not
exist in an rpm. This change adds a check for the bundle tracking file
when adding a bundle.

Signed-off-by: John Akre <john.w.akre@intel.com>
2019-12-30 11:49:28 -08:00
John Akre e17fadd43c MCA: Refactor diff results analysis
The diff results analysis section was refactored to make it easier to
handle special case manifest files.

Signed-off-by: John Akre <john.w.akre@intel.com>
2019-12-30 11:49:28 -08:00
Reagan Lopez 128ee414b9 Fix lint errors
Signed-off-by: Reagan Lopez <reagan.lopez@intel.com>
2019-12-23 12:12:21 -08:00
Reagan Lopez db64a95c18 repo: Improve performance for multiple repo subdir
If an rpm is not found in the assumed cache dir of its repo, update the
repo cache dir list based on the location of the rpm.

This is an attempt to improve performance in case the rpms are not
stored directly within the repo baseurl.

Signed-off-by: Reagan Lopez <reagan.lopez@intel.com>
2019-12-20 22:36:11 -08:00
John Akre 2a3d9a346f MCA: Set size change to none for small changes
When the size change between bundles is less than 0.01%, the size change
will be displayed as none.

Signed-off-by: John Akre <john.w.akre@intel.com>
2019-12-20 15:20:32 -08:00
John Akre 6b2ca23984 MCA: Refactor statistics table
The MCA statistics table replaced the tabwriter implementation with the
tablewriter package. Now the statistics table is a complete box with
line wrapping support for long lines.

This change also adds the --table-width parameter which is used to set the
maximum width of the MCA statistics table. The default value is the
width of the calling terminal and the table can be disabled by providing
a negative number for the table-width.

Signed-off-by: John Akre <john.w.akre@intel.com>
2019-12-20 15:20:32 -08:00
Ashlesha Atrey 435cbb888e Remove os-packages file
Currently, in order to improve performance, dnf install is not used
to extract the packages. Hence the database used to create os-packages
file is not being populated and thus the os-packages file is empty.
Moreover the os-packages file is not required and used by anybody.

Remove functions related to creation of the os-packages file.

Signed-off-by: Ashlesha Atrey <ashlesha.atrey@intel.com>
2019-12-19 12:18:54 -08:00
Reagan Lopez 8aac35f881 repo: Handle rpms in repo sub directories
Currently, for repos with "file" baseurl scheme, mixer expects the
rpms to be directly within the baseurl path.
But it is possible that rpms can be in sub directories within the repo baseurl.

In order to handle this, if an rpm is not found directly within the repo baseurl,
run repoquery to determine the actual location of the rpm.
This is expensive and it is recommended that rpms are stored directly
within the repo baseurl.

Includes a bat test.
Fixes #674

Signed-off-by: Reagan Lopez <reagan.lopez@intel.com>
2019-12-19 12:04:03 -08:00
John Akre 9ebcdfc463 MCA: Suppress stdout while collecting data
Stdout is suppressed so that verbose mixer output is is omitted from the
results.

Signed-off-by: John Akre <john.w.akre@intel.com>
2019-12-18 20:15:47 -08:00
John Akre 1814680c29 MCA: Add retries to rpm queries
The rpm command can fail to download packages over the network, but can
recover with download retries.

Signed-off-by: John Akre <john.w.akre@intel.com>
2019-12-18 20:15:47 -08:00
John Akre c316a324f2 MCA: Refactor package metadata querying
To improve performance instead of querying packages downloaded by dnf,
the package URIs are resolved with dnf repoquery which are used to query
the packages with rpm. This implementation is much faster for dnf
repositories on the host system because no package downloads will occur.

Additionally, the new implementation does not require rpms to be named
with the NVRA format (name-version-release.arch.rpm), so alternatively
named rpms will be resolved successfully.

Fixes: #665

Signed-off-by: John Akre <john.w.akre@intel.com>
2019-12-18 20:15:47 -08:00
John Akre 180a076d36 Return additional package metadata with resolvePackages
It is useful for MCA to resolve packages with their corresponding
version and architecture fields.

Signed-off-by: John Akre <john.w.akre@intel.com>
2019-12-18 20:15:47 -08:00
Reagan Lopez abff0489f1 Keep repo messages and help consistent
Also, call ListRepos() earlier on during build bundles, to suggest
context.

Signed-off-by: Reagan Lopez <reagan.lopez@intel.com>
2019-12-14 23:45:51 -08:00