From cda3c02b2645b559a08f00f5e3b1c50eb69d2ebd Mon Sep 17 00:00:00 2001 From: Olivier Valentin Date: Tue, 24 Feb 2026 12:16:14 +0100 Subject: [PATCH 1/8] Add orphaner --- builder/Dockerfile | 2 + builder/install/05-orphaner.sh | 5 + builder/orphaner/avl-cmp.c | 24 ++ builder/orphaner/avl-cmp.h | 21 + builder/orphaner/avl.c | 735 +++++++++++++++++++++++++++++++++ builder/orphaner/avl.h | 548 ++++++++++++++++++++++++ builder/orphaner/list.h | 208 ++++++++++ builder/orphaner/makefile | 14 + builder/orphaner/orphaner.c | 162 ++++++++ 9 files changed, 1719 insertions(+) create mode 100755 builder/install/05-orphaner.sh create mode 100644 builder/orphaner/avl-cmp.c create mode 100644 builder/orphaner/avl-cmp.h create mode 100644 builder/orphaner/avl.c create mode 100644 builder/orphaner/avl.h create mode 100644 builder/orphaner/list.h create mode 100644 builder/orphaner/makefile create mode 100644 builder/orphaner/orphaner.c diff --git a/builder/Dockerfile b/builder/Dockerfile index c26fabecfb..30686f8c98 100644 --- a/builder/Dockerfile +++ b/builder/Dockerfile @@ -37,6 +37,7 @@ RUN dnf -y update \ patchutils \ passwd \ pkgconfig \ + rpm-devel \ rsync \ tar \ unzip \ @@ -52,6 +53,7 @@ WORKDIR ${BUILD_DIR} COPY install builder/install COPY third_party third_party +COPY orphaner orphaner RUN "builder/install/install-dependencies.sh" && if [ -z "${COLLECTOR_BUILDER_DEBUG}" ]; then rm -rf ${BUILD_DIR}; fi RUN echo -e '/usr/local/lib\n/usr/local/lib64' > /etc/ld.so.conf.d/usrlocallib.conf && ldconfig diff --git a/builder/install/05-orphaner.sh b/builder/install/05-orphaner.sh new file mode 100755 index 0000000000..fc232b6832 --- /dev/null +++ b/builder/install/05-orphaner.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -e + +make -C orphaner CFLAGS=-g LDFLAGS=-g install diff --git a/builder/orphaner/avl-cmp.c b/builder/orphaner/avl-cmp.c new file mode 100644 index 0000000000..2d0acecd9d --- /dev/null +++ b/builder/orphaner/avl-cmp.c @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2012 Felix Fietkau + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#include +#include "avl-cmp.h" + +int +avl_strcmp(const void *k1, const void *k2, void *ptr) +{ + return strcmp(k1, k2); +} + diff --git a/builder/orphaner/avl-cmp.h b/builder/orphaner/avl-cmp.h new file mode 100644 index 0000000000..5adb495c02 --- /dev/null +++ b/builder/orphaner/avl-cmp.h @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2012 Felix Fietkau + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#ifndef __AVL_CMP_H +#define __AVL_CMP_H + +int avl_strcmp(const void *k1, const void *k2, void *ptr); + +#endif diff --git a/builder/orphaner/avl.c b/builder/orphaner/avl.c new file mode 100644 index 0000000000..8d0bf65aaa --- /dev/null +++ b/builder/orphaner/avl.c @@ -0,0 +1,735 @@ +/* + * PacketBB handler library (see RFC 5444) + * Copyright (c) 2010 Henning Rogge + * Original OLSRd implementation by Hannes Gredler + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of olsr.org, olsrd nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Visit http://www.olsr.org/git for more information. + * + * If you find this software useful feel free to make a donation + * to the project. For more information see the website or contact + * the copyright holders. + */ + +#include +#include +#include +#include +#include + +#include "avl.h" +#include "list.h" + +/** + * internal type save inline function to calculate the maximum of + * to integers without macro implementation. + * + * @param x first parameter of maximum function + * @param y second parameter of maximum function + * @return largest integer of both parameters + */ +static inline int avl_max(int x, int y) { + return x > y ? x : y; +} + +/** + * internal type save inline function to calculate the minimum of + * to integers without macro implementation. + * + * @param x first parameter of minimum function + * @param y second parameter of minimum function + * @return smallest integer of both parameters + */ +static inline int avl_min(int x, int y) { + return x < y ? x : y; +} + +static struct avl_node * +avl_find_rec(struct avl_node *node, const void *key, avl_tree_comp comp, void *ptr, int *cmp_result); +static void avl_insert_before(struct avl_tree *tree, struct avl_node *pos_node, struct avl_node *node); +static void avl_insert_after(struct avl_tree *tree, struct avl_node *pos_node, struct avl_node *node); +static void post_insert(struct avl_tree *tree, struct avl_node *node); +static void avl_delete_worker(struct avl_tree *tree, struct avl_node *node); +static void avl_remove(struct avl_tree *tree, struct avl_node *node); + +/** + * Initialize a new avl_tree struct + * @param tree pointer to avl-tree + * @param comp pointer to comparator for the tree + * @param allow_dups true if the tree allows multiple + * elements with the same + * @param ptr custom parameter for comparator + */ +void +avl_init(struct avl_tree *tree, avl_tree_comp comp, bool allow_dups, void *ptr) +{ + INIT_LIST_HEAD(&tree->list_head); + tree->root = NULL; + tree->count = 0; + tree->comp = comp; + tree->allow_dups = allow_dups; + tree->cmp_ptr = ptr; +} + +static inline struct avl_node *avl_next(struct avl_node *node) +{ + return list_entry(node->list.next, struct avl_node, list); +} + +/** + * Finds a node in an avl-tree with a certain key + * @param tree pointer to avl-tree + * @param key pointer to key + * @return pointer to avl-node with key, NULL if no node with + * this key exists. + */ +struct avl_node * +avl_find(const struct avl_tree *tree, const void *key) +{ + struct avl_node *node; + int diff; + + if (tree->root == NULL) + return NULL; + + node = avl_find_rec(tree->root, key, tree->comp, tree->cmp_ptr, &diff); + + return diff == 0 ? node : NULL; +} + +/** + * Finds the last node in an avl-tree with a key less or equal + * than the specified key + * @param tree pointer to avl-tree + * @param key pointer to specified key + * @return pointer to avl-node, NULL if no node with + * key less or equal specified key exists. + */ +struct avl_node * +avl_find_lessequal(const struct avl_tree *tree, const void *key) { + struct avl_node *node, *next; + int diff; + + if (tree->root == NULL) + return NULL; + + node = avl_find_rec(tree->root, key, tree->comp, tree->cmp_ptr, &diff); + + /* go left as long as keylist, &tree->list_head)) { + return NULL; + } + + node = (struct avl_node *)node->list.prev; + diff = (*tree->comp) (key, node->key, tree->cmp_ptr); + } + + /* go right as long as key>=next_node.key */ + next = node; + while (diff >= 0) { + node = next; + if (list_is_last(&node->list, &tree->list_head)) { + break; + } + + next = (struct avl_node *)node->list.next; + diff = (*tree->comp) (key, next->key, tree->cmp_ptr); + } + return node; +} + +/** + * Finds the first node in an avl-tree with a key greater or equal + * than the specified key + * @param tree pointer to avl-tree + * @param key pointer to specified key + * @return pointer to avl-node, NULL if no node with + * key greater or equal specified key exists. + */ +struct avl_node * +avl_find_greaterequal(const struct avl_tree *tree, const void *key) { + struct avl_node *node, *next; + int diff; + + if (tree->root == NULL) + return NULL; + + node = avl_find_rec(tree->root, key, tree->comp, tree->cmp_ptr, &diff); + + /* go right as long as key>node.key */ + while (diff > 0) { + if (list_is_last(&node->list, &tree->list_head)) { + return NULL; + } + + node = (struct avl_node *)node->list.next; + diff = (*tree->comp) (key, node->key, tree->cmp_ptr); + } + + /* go left as long as key<=next_node.key */ + next = node; + while (diff <= 0) { + node = next; + if (list_is_first(&node->list, &tree->list_head)) { + break; + } + + next = (struct avl_node *)node->list.prev; + diff = (*tree->comp) (key, next->key, tree->cmp_ptr); + } + return node; +} + +/** + * Inserts an avl_node into a tree + * @param tree pointer to tree + * @param new pointer to node + * @return 0 if node was inserted successfully, -1 if it was not inserted + * because of a key collision + */ +int +avl_insert(struct avl_tree *tree, struct avl_node *new) +{ + struct avl_node *node, *next, *last; + int diff; + + new->parent = NULL; + + new->left = NULL; + new->right = NULL; + + new->balance = 0; + new->leader = true; + + if (tree->root == NULL) { + list_add(&new->list, &tree->list_head); + tree->root = new; + tree->count = 1; + return 0; + } + + node = avl_find_rec(tree->root, new->key, tree->comp, tree->cmp_ptr, &diff); + + last = node; + + while (!list_is_last(&last->list, &tree->list_head)) { + next = avl_next(last); + if (next->leader) { + break; + } + last = next; + } + + diff = (*tree->comp) (new->key, node->key, tree->cmp_ptr); + + if (diff == 0) { + if (!tree->allow_dups) + return -1; + + new->leader = 0; + + avl_insert_after(tree, last, new); + return 0; + } + + if (node->balance == 1) { + avl_insert_before(tree, node, new); + + node->balance = 0; + new->parent = node; + node->left = new; + return 0; + } + + if (node->balance == -1) { + avl_insert_after(tree, last, new); + + node->balance = 0; + new->parent = node; + node->right = new; + return 0; + } + + if (diff < 0) { + avl_insert_before(tree, node, new); + + node->balance = -1; + new->parent = node; + node->left = new; + post_insert(tree, node); + return 0; + } + + avl_insert_after(tree, last, new); + + node->balance = 1; + new->parent = node; + node->right = new; + post_insert(tree, node); + return 0; +} + +/** + * Remove a node from an avl tree + * @param tree pointer to tree + * @param node pointer to node + */ +void +avl_delete(struct avl_tree *tree, struct avl_node *node) +{ + struct avl_node *next; + struct avl_node *parent; + struct avl_node *left; + struct avl_node *right; + if (node->leader) { + if (tree->allow_dups + && !list_is_last(&node->list, &tree->list_head) + && !(next = avl_next(node))->leader) { + next->leader = true; + next->balance = node->balance; + + parent = node->parent; + left = node->left; + right = node->right; + + next->parent = parent; + next->left = left; + next->right = right; + + if (parent == NULL) + tree->root = next; + + else { + if (node == parent->left) + parent->left = next; + + else + parent->right = next; + } + + if (left != NULL) + left->parent = next; + + if (right != NULL) + right->parent = next; + } + + else + avl_delete_worker(tree, node); + } + + avl_remove(tree, node); +} + +static struct avl_node * +avl_find_rec(struct avl_node *node, const void *key, avl_tree_comp comp, void *cmp_ptr, int *cmp_result) +{ + int diff; + + diff = (*comp) (key, node->key, cmp_ptr); + *cmp_result = diff; + + if (diff < 0) { + if (node->left != NULL) + return avl_find_rec(node->left, key, comp, cmp_ptr, cmp_result); + + return node; + } + + if (diff > 0) { + if (node->right != NULL) + return avl_find_rec(node->right, key, comp, cmp_ptr, cmp_result); + + return node; + } + + return node; +} + +static void +avl_rotate_right(struct avl_tree *tree, struct avl_node *node) +{ + struct avl_node *left, *parent; + + left = node->left; + parent = node->parent; + + left->parent = parent; + node->parent = left; + + if (parent == NULL) + tree->root = left; + + else { + if (parent->left == node) + parent->left = left; + + else + parent->right = left; + } + + node->left = left->right; + left->right = node; + + if (node->left != NULL) + node->left->parent = node; + + node->balance += 1 - avl_min(left->balance, 0); + left->balance += 1 + avl_max(node->balance, 0); +} + +static void +avl_rotate_left(struct avl_tree *tree, struct avl_node *node) +{ + struct avl_node *right, *parent; + + right = node->right; + parent = node->parent; + + right->parent = parent; + node->parent = right; + + if (parent == NULL) + tree->root = right; + + else { + if (parent->left == node) + parent->left = right; + + else + parent->right = right; + } + + node->right = right->left; + right->left = node; + + if (node->right != NULL) + node->right->parent = node; + + node->balance -= 1 + avl_max(right->balance, 0); + right->balance -= 1 - avl_min(node->balance, 0); +} + +static void +post_insert(struct avl_tree *tree, struct avl_node *node) +{ + struct avl_node *parent = node->parent; + + if (parent == NULL) + return; + + if (node == parent->left) { + parent->balance--; + + if (parent->balance == 0) + return; + + if (parent->balance == -1) { + post_insert(tree, parent); + return; + } + + if (node->balance == -1) { + avl_rotate_right(tree, parent); + return; + } + + avl_rotate_left(tree, node); + avl_rotate_right(tree, node->parent->parent); + return; + } + + parent->balance++; + + if (parent->balance == 0) + return; + + if (parent->balance == 1) { + post_insert(tree, parent); + return; + } + + if (node->balance == 1) { + avl_rotate_left(tree, parent); + return; + } + + avl_rotate_right(tree, node); + avl_rotate_left(tree, node->parent->parent); +} + +static void +avl_insert_before(struct avl_tree *tree, struct avl_node *pos_node, struct avl_node *node) +{ + list_add_tail(&node->list, &pos_node->list); + tree->count++; +} + +static void +avl_insert_after(struct avl_tree *tree, struct avl_node *pos_node, struct avl_node *node) +{ + list_add(&node->list, &pos_node->list); + tree->count++; +} + +static void +avl_remove(struct avl_tree *tree, struct avl_node *node) +{ + list_del(&node->list); + tree->count--; +} + +static void +avl_post_delete(struct avl_tree *tree, struct avl_node *node) +{ + struct avl_node *parent; + + if ((parent = node->parent) == NULL) + return; + + if (node == parent->left) { + parent->balance++; + + if (parent->balance == 0) { + avl_post_delete(tree, parent); + return; + } + + if (parent->balance == 1) + return; + + if (parent->right->balance == 0) { + avl_rotate_left(tree, parent); + return; + } + + if (parent->right->balance == 1) { + avl_rotate_left(tree, parent); + avl_post_delete(tree, parent->parent); + return; + } + + avl_rotate_right(tree, parent->right); + avl_rotate_left(tree, parent); + avl_post_delete(tree, parent->parent); + return; + } + + parent->balance--; + + if (parent->balance == 0) { + avl_post_delete(tree, parent); + return; + } + + if (parent->balance == -1) + return; + + if (parent->left->balance == 0) { + avl_rotate_right(tree, parent); + return; + } + + if (parent->left->balance == -1) { + avl_rotate_right(tree, parent); + avl_post_delete(tree, parent->parent); + return; + } + + avl_rotate_left(tree, parent->left); + avl_rotate_right(tree, parent); + avl_post_delete(tree, parent->parent); +} + +static struct avl_node * +avl_local_min(struct avl_node *node) +{ + while (node->left != NULL) + node = node->left; + + return node; +} + +#if 0 +static struct avl_node * +avl_local_max(struct avl_node *node) +{ + while (node->right != NULL) + node = node->right; + + return node; +} +#endif + +static void +avl_delete_worker(struct avl_tree *tree, struct avl_node *node) +{ + struct avl_node *parent, *min; + + parent = node->parent; + + if (node->left == NULL && node->right == NULL) { + if (parent == NULL) { + tree->root = NULL; + return; + } + + if (parent->left == node) { + parent->left = NULL; + parent->balance++; + + if (parent->balance == 1) + return; + + if (parent->balance == 0) { + avl_post_delete(tree, parent); + return; + } + + if (parent->right->balance == 0) { + avl_rotate_left(tree, parent); + return; + } + + if (parent->right->balance == 1) { + avl_rotate_left(tree, parent); + avl_post_delete(tree, parent->parent); + return; + } + + avl_rotate_right(tree, parent->right); + avl_rotate_left(tree, parent); + avl_post_delete(tree, parent->parent); + return; + } + + if (parent->right == node) { + parent->right = NULL; + parent->balance--; + + if (parent->balance == -1) + return; + + if (parent->balance == 0) { + avl_post_delete(tree, parent); + return; + } + + if (parent->left->balance == 0) { + avl_rotate_right(tree, parent); + return; + } + + if (parent->left->balance == -1) { + avl_rotate_right(tree, parent); + avl_post_delete(tree, parent->parent); + return; + } + + avl_rotate_left(tree, parent->left); + avl_rotate_right(tree, parent); + avl_post_delete(tree, parent->parent); + return; + } + } + + if (node->left == NULL) { + if (parent == NULL) { + tree->root = node->right; + node->right->parent = NULL; + return; + } + + node->right->parent = parent; + + if (parent->left == node) + parent->left = node->right; + + else + parent->right = node->right; + + avl_post_delete(tree, node->right); + return; + } + + if (node->right == NULL) { + if (parent == NULL) { + tree->root = node->left; + node->left->parent = NULL; + return; + } + + node->left->parent = parent; + + if (parent->left == node) + parent->left = node->left; + + else + parent->right = node->left; + + avl_post_delete(tree, node->left); + return; + } + + min = avl_local_min(node->right); + avl_delete_worker(tree, min); + parent = node->parent; + + min->balance = node->balance; + min->parent = parent; + min->left = node->left; + min->right = node->right; + + if (min->left != NULL) + min->left->parent = min; + + if (min->right != NULL) + min->right->parent = min; + + if (parent == NULL) { + tree->root = min; + return; + } + + if (parent->left == node) { + parent->left = min; + return; + } + + parent->right = min; +} + +/* + * Local Variables: + * c-basic-offset: 2 + * indent-tabs-mode: nil + * End: + */ diff --git a/builder/orphaner/avl.h b/builder/orphaner/avl.h new file mode 100644 index 0000000000..e4ca7d849e --- /dev/null +++ b/builder/orphaner/avl.h @@ -0,0 +1,548 @@ +/* + * PacketBB handler library (see RFC 5444) + * Copyright (c) 2010 Henning Rogge + * Original OLSRd implementation by Hannes Gredler + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of olsr.org, olsrd nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Visit http://www.olsr.org/git for more information. + * + * If you find this software useful feel free to make a donation + * to the project. For more information see the website or contact + * the copyright holders. + */ + +#ifndef _AVL_H +#define _AVL_H + +#include +#include + +#include "list.h" + +/* Support for OLSR.org linker symbol export */ +#define EXPORT(sym) sym + +/** + * This element is a member of a avl-tree. It must be contained in all + * larger structs that should be put into a tree. + */ +struct avl_node { + /** + * Linked list node for supporting easy iteration and multiple + * elments with the same key. + * + * this must be the first element of an avl_node to + * make casting for lists easier + */ + struct list_head list; + + /** + * Pointer to parent node in tree, NULL if root node + */ + struct avl_node *parent; + + /** + * Pointer to left child + */ + struct avl_node *left; + + /** + * Pointer to right child + */ + struct avl_node *right; + + /** + * pointer to key of node + */ + const void *key; + + /** + * balance state of AVL tree (0,-1,+1) + */ + signed char balance; + + /** + * true if first of a series of nodes with same key + */ + bool leader; +}; + +/** + * Prototype for avl comparators + * @param k1 first key + * @param k2 second key + * @param ptr custom data for tree comparator + * @return +1 if k1>k2, -1 if k1list_head.next == &node->list; +} + +/** + * @param tree pointer to avl-tree + * @param node pointer to node of the tree + * @return true if node is the last one of the tree, false otherwise + */ +static inline bool +avl_is_last(struct avl_tree *tree, struct avl_node *node) { + return tree->list_head.prev == &node->list; +} + +/** + * @param tree pointer to avl-tree + * @return true if the tree is empty, false otherwise + */ +static inline bool +avl_is_empty(struct avl_tree *tree) { + return tree->count == 0; +} + +/** + * Internal function to support returning the element from a avl tree query + * @param tree pointer to avl tree + * @param key pointer to key + * @param offset offset of node inside the embedded struct + * @param mode mode of lookup operation (less equal, equal or greater equal) + * @param pointer to elemen, NULL if no fitting one was found + */ +static inline void * +__avl_find_element(const struct avl_tree *tree, const void *key, size_t offset, enum avl_find_mode mode) { + void *node = NULL; + + switch (mode) { + case AVL_FIND_EQUAL: + node = avl_find(tree, key); + break; + case AVL_FIND_LESSEQUAL: + node = avl_find_lessequal(tree, key); + break; + case AVL_FIND_GREATEREQUAL: + node = avl_find_greaterequal(tree, key); + break; + } + return node == NULL ? NULL : (((char *)node) - offset); +} + +/** + * @param tree pointer to avl-tree + * @param key pointer to key + * @param element pointer to a node element + * (don't need to be initialized) + * @param node_element name of the avl_node element inside the + * larger struct + * @return pointer to tree element with the specified key, + * NULL if no element was found + */ +#define avl_find_element(tree, key, element, node_element) \ + ((typeof(*(element)) *)__avl_find_element(tree, key, offsetof(typeof(*(element)), node_element), AVL_FIND_EQUAL)) + +/** + * @param tree pointer to avl-tree + * @param key pointer to specified key + * @param element pointer to a node element + * (don't need to be initialized) + * @param node_element name of the avl_node element inside the + * larger struct + * return pointer to last tree element with less or equal key than specified key, + * NULL if no element was found + */ +#define avl_find_le_element(tree, key, element, node_element) \ + ((typeof(*(element)) *)__avl_find_element(tree, key, offsetof(typeof(*(element)), node_element), AVL_FIND_LESSEQUAL)) + +/** + * @param tree pointer to avl-tree + * @param key pointer to specified key + * @param element pointer to a node element + * (don't need to be initialized) + * @param node_element name of the avl_node element inside the + * larger struct + * return pointer to first tree element with greater or equal key than specified key, + * NULL if no element was found + */ +#define avl_find_ge_element(tree, key, element, node_element) \ + ((typeof(*(element)) *)__avl_find_element(tree, key, offsetof(typeof(*(element)), node_element), AVL_FIND_GREATEREQUAL)) + +/** + * This function must not be called for an empty tree + * + * @param tree pointer to avl-tree + * @param element pointer to a node element + * (don't need to be initialized) + * @param node_member name of the avl_node element inside the + * larger struct + * @return pointer to the first element of the avl_tree + * (automatically converted to type 'element') + */ +#define avl_first_element(tree, element, node_member) \ + container_of((tree)->list_head.next, typeof(*(element)), node_member.list) + +/** + * @param tree pointer to tree + * @param element pointer to a node struct that contains the avl_node + * (don't need to be initialized) + * @param node_member name of the avl_node element inside the + * larger struct + * @return pointer to the last element of the avl_tree + * (automatically converted to type 'element') + */ +#define avl_last_element(tree, element, node_member) \ + container_of((tree)->list_head.prev, typeof(*(element)), node_member.list) + +/** + * This function must not be called for the last element of + * an avl tree + * + * @param element pointer to a node of the tree + * @param node_member name of the avl_node element inside the + * larger struct + * @return pointer to the node after 'element' + * (automatically converted to type 'element') + */ +#define avl_next_element(element, node_member) \ + container_of((&(element)->node_member.list)->next, typeof(*(element)), node_member.list) + +/** + * This function must not be called for the first element of + * an avl tree + * + * @param element pointer to a node of the tree + * @param node_member name of the avl_node element inside the + * larger struct + * @return pointer to the node before 'element' + * (automatically converted to type 'element') + */ +#define avl_prev_element(element, node_member) \ + container_of((&(element)->node_member.list)->prev, typeof(*(element)), node_member.list) + +/** + * Loop over a block of elements of a tree, used similar to a for() command. + * This loop should not be used if elements are removed from the tree during + * the loop. + * + * @param first pointer to first element of loop + * @param last pointer to last element of loop + * @param element pointer to a node of the tree, this element will + * contain the current node of the list during the loop + * @param node_member name of the avl_node element inside the + * larger struct + */ +#define avl_for_element_range(first, last, element, node_member) \ + for (element = (first); \ + element->node_member.list.prev != &(last)->node_member.list; \ + element = avl_next_element(element, node_member)) + +/** + * Loop over a block of elements of a tree backwards, used similar to a for() command. + * This loop should not be used if elements are removed from the tree during + * the loop. + * + * @param first pointer to first element of loop + * @param last pointer to last element of loop + * @param element pointer to a node of the tree, this element will + * contain the current node of the list during the loop + * @param node_member name of the avl_node element inside the + * larger struct + */ +#define avl_for_element_range_reverse(first, last, element, node_member) \ + for (element = (last); \ + element->node_member.list.next != &(first)->node_member.list; \ + element = avl_prev_element(element, node_member)) + +/** + * Loop over all elements of an avl_tree, used similar to a for() command. + * This loop should not be used if elements are removed from the tree during + * the loop. + * + * @param tree pointer to avl-tree + * @param element pointer to a node of the tree, this element will + * contain the current node of the tree during the loop + * @param node_member name of the avl_node element inside the + * larger struct + */ +#define avl_for_each_element(tree, element, node_member) \ + avl_for_element_range(avl_first_element(tree, element, node_member), \ + avl_last_element(tree, element, node_member), \ + element, node_member) + +/** + * Loop over all elements of an avl_tree backwards, used similar to a for() command. + * This loop should not be used if elements are removed from the tree during + * the loop. + * + * @param tree pointer to avl-tree + * @param element pointer to a node of the tree, this element will + * contain the current node of the tree during the loop + * @param node_member name of the avl_node element inside the + * larger struct + */ +#define avl_for_each_element_reverse(tree, element, node_member) \ + avl_for_element_range_reverse(avl_first_element(tree, element, node_member), \ + avl_last_element(tree, element, node_member), \ + element, node_member) + +/** + * Loop over a block of elements of a tree, used similar to a for() command. + * This loop should not be used if elements are removed from the tree during + * the loop. + * The loop runs from the element 'first' to the end of the tree. + * + * @param tree pointer to avl-tree + * @param first pointer to first element of loop + * @param element pointer to a node of the tree, this element will + * contain the current node of the list during the loop + * @param node_member name of the avl_node element inside the + * larger struct + */ +#define avl_for_element_to_last(tree, first, element, node_member) \ + avl_for_element_range(first, avl_last_element(tree, element, node_member), element, node_member) + + +/** + * Loop over a block of elements of a tree backwards, used similar to a for() command. + * This loop should not be used if elements are removed from the tree during + * the loop. + * The loop runs from the element 'first' to the end of the tree. + * + * @param tree pointer to avl-tree + * @param first pointer to first element of loop + * @param element pointer to a node of the tree, this element will + * contain the current node of the list during the loop + * @param node_member name of the avl_node element inside the + * larger struct + */ +#define avl_for_element_to_last_reverse(tree, first, element, node_member) \ + avl_for_element_range_reverse(first, avl_last_element(tree, element, node_member), element, node_member) + +/** + * Loop over a block of elements of a tree, used similar to a for() command. + * This loop should not be used if elements are removed from the tree during + * the loop. + * The loop runs from the start of the tree to the element 'last'. + * + * @param tree pointer to avl-tree + * @param last pointer to last element of loop + * @param element pointer to a node of the tree, this element will + * contain the current node of the list during the loop + * @param node_member name of the avl_node element inside the + * larger struct + */ +#define avl_for_first_to_element(tree, last, element, node_member) \ + avl_for_element_range(avl_first_element(tree, element, node_member), last, element, node_member) + + +/** + * Loop over a block of elements of a tree backwards, used similar to a for() command. + * This loop should not be used if elements are removed from the tree during + * the loop. + * The loop runs from the start of the tree to the element 'last'. + * + * @param tree pointer to avl-tree + * @param last pointer to last element of loop + * @param element pointer to a node of the tree, this element will + * contain the current node of the list during the loop + * @param node_member name of the avl_node element inside the + * larger struct + */ +#define avl_for_first_to_element_reverse(tree, last, element, node_member) \ + avl_for_element_range_reverse(avl_first_element(tree, element, node_member), last, element, node_member) + +/** + * Loop over a block of nodes of a tree, used similar to a for() command. + * This loop can be used if the current element might be removed from + * the tree during the loop. Other elements should not be removed during + * the loop. + * + * @param first_element first element of loop + * @param last_element last element of loop + * @param element iterator pointer to tree element struct + * @param node_member name of avl_node within tree element struct + * @param ptr pointer to tree element struct which is used to store + * the next node during the loop + */ +#define avl_for_element_range_safe(first_element, last_element, element, node_member, ptr) \ + for (element = (first_element), ptr = avl_next_element(first_element, node_member); \ + element->node_member.list.prev != &(last_element)->node_member.list; \ + element = ptr, ptr = avl_next_element(ptr, node_member)) + +/** + * Loop over a block of elements of a tree backwards, used similar to a for() command. + * This loop can be used if the current element might be removed from + * the tree during the loop. Other elements should not be removed during + * the loop. + * + * @param first_element first element of range (will be last returned by the loop) + * @param last_element last element of range (will be first returned by the loop) + * @param element iterator pointer to node element struct + * @param node_member name of avl_node within node element struct + * @param ptr pointer to node element struct which is used to store + * the previous node during the loop + */ +#define avl_for_element_range_reverse_safe(first_element, last_element, element, node_member, ptr) \ + for (element = (last_element), ptr = avl_prev_element(last_element, node_member); \ + element->node_member.list.next != &(first_element)->node_member.list; \ + element = ptr, ptr = avl_prev_element(ptr, node_member)) + +/** + * Loop over all elements of an avl_tree, used similar to a for() command. + * This loop can be used if the current element might be removed from + * the tree during the loop. Other elements should not be removed during + * the loop. + * + * @param tree pointer to avl-tree + * @param element pointer to a node of the tree, this element will + * contain the current node of the tree during the loop + * @param node_member name of the avl_node element inside the + * larger struct + * @param ptr pointer to a tree element which is used to store + * the next node during the loop + */ +#define avl_for_each_element_safe(tree, element, node_member, ptr) \ + avl_for_element_range_safe(avl_first_element(tree, element, node_member), \ + avl_last_element(tree, element, node_member), \ + element, node_member, ptr) + +/** + * Loop over all elements of an avl_tree backwards, used similar to a for() command. + * This loop can be used if the current element might be removed from + * the tree during the loop. Other elements should not be removed during + * the loop. + * + * @param tree pointer to avl-tree + * @param element pointer to a node of the tree, this element will + * contain the current node of the tree during the loop + * @param node_member name of the avl_node element inside the + * larger struct + * @param ptr pointer to a tree element which is used to store + * the next node during the loop + */ +#define avl_for_each_element_reverse_safe(tree, element, node_member, ptr) \ + avl_for_element_range_reverse_safe(avl_first_element(tree, element, node_member), \ + avl_last_element(tree, element, node_member), \ + element, node_member, ptr) + +/** + * A special loop that removes all elements of the tree and cleans up the tree + * root. The loop body is responsible to free the node elements of the tree. + * + * This loop is much faster than a normal one for clearing the tree because it + * does not rebalance the tree after each removal. Do NOT use a break command + * inside. + * You can free the memory of the elements within the loop. + * Do NOT call avl_delete() on the elements within the loop, + * + * @param tree pointer to avl-tree + * @param element pointer to a node of the tree, this element will + * contain the current node of the tree during the loop + * @param node_member name of the avl_node element inside the + * larger struct + * @param ptr pointer to a tree element which is used to store + * the next node during the loop + */ +#define avl_remove_all_elements(tree, element, node_member, ptr) \ + for (element = avl_first_element(tree, element, node_member), \ + ptr = avl_next_element(element, node_member), \ + INIT_LIST_HEAD(&(tree)->list_head), \ + (tree)->root = NULL; \ + (tree)->count > 0; \ + element = ptr, ptr = avl_next_element(ptr, node_member), (tree)->count--) + +#endif /* _AVL_H */ + +/* + * Local Variables: + * c-basic-offset: 2 + * indent-tabs-mode: nil + * End: + */ diff --git a/builder/orphaner/list.h b/builder/orphaner/list.h new file mode 100644 index 0000000000..ab52acff2f --- /dev/null +++ b/builder/orphaner/list.h @@ -0,0 +1,208 @@ +/*- + * Copyright (c) 2011 Felix Fietkau + * Copyright (c) 2010 Isilon Systems, Inc. + * Copyright (c) 2010 iX Systems, Inc. + * Copyright (c) 2010 Panasas, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _LINUX_LIST_H_ +#define _LINUX_LIST_H_ + +#include +#include + +#define prefetch(x) + +#ifndef container_of +#define container_of(ptr, type, member) \ + ({ \ + const typeof(((type *) NULL)->member) *__mptr = (ptr); \ + (type *) ((char *) __mptr - offsetof(type, member)); \ + }) +#endif + +struct list_head { + struct list_head *next; + struct list_head *prev; +}; + +#define LIST_HEAD_INIT(name) { &(name), &(name) } +#undef LIST_HEAD +#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name) + +static inline void +INIT_LIST_HEAD(struct list_head *list) +{ + list->next = list->prev = list; +} + +static inline bool +list_empty(const struct list_head *head) +{ + return (head->next == head); +} + +static inline bool +list_is_first(const struct list_head *list, + const struct list_head *head) +{ + return list->prev == head; +} + +static inline bool +list_is_last(const struct list_head *list, + const struct list_head *head) +{ + return list->next == head; +} + +static inline void +_list_del(struct list_head *entry) +{ + entry->next->prev = entry->prev; + entry->prev->next = entry->next; +} + +static inline void +list_del(struct list_head *entry) +{ + _list_del(entry); + entry->next = entry->prev = NULL; +} + +static inline void +_list_add(struct list_head *_new, struct list_head *prev, + struct list_head *next) +{ + + next->prev = _new; + _new->next = next; + _new->prev = prev; + prev->next = _new; +} + +static inline void +list_del_init(struct list_head *entry) +{ + _list_del(entry); + INIT_LIST_HEAD(entry); +} + +#define list_entry(ptr, type, field) container_of(ptr, type, field) +#define list_first_entry(ptr, type, field) list_entry((ptr)->next, type, field) +#define list_last_entry(ptr, type, field) list_entry((ptr)->prev, type, field) + +#define list_for_each(p, head) \ + for (p = (head)->next; p != (head); p = p->next) + +#define list_for_each_safe(p, n, head) \ + for (p = (head)->next, n = p->next; p != (head); p = n, n = p->next) + +#define list_for_each_entry(p, h, field) \ + for (p = list_first_entry(h, typeof(*p), field); &p->field != (h); \ + p = list_entry(p->field.next, typeof(*p), field)) + +#define list_for_each_entry_safe(p, n, h, field) \ + for (p = list_first_entry(h, typeof(*p), field), \ + n = list_entry(p->field.next, typeof(*p), field); &p->field != (h);\ + p = n, n = list_entry(n->field.next, typeof(*n), field)) + +#define list_for_each_entry_reverse(p, h, field) \ + for (p = list_last_entry(h, typeof(*p), field); &p->field != (h); \ + p = list_entry(p->field.prev, typeof(*p), field)) + +#define list_for_each_prev(p, h) for (p = (h)->prev; p != (h); p = p->prev) +#define list_for_each_prev_safe(p, n, h) for (p = (h)->prev, n = p->prev; p != (h); p = n, n = p->prev) + +static inline void +list_add(struct list_head *_new, struct list_head *head) +{ + _list_add(_new, head, head->next); +} + +static inline void +list_add_tail(struct list_head *_new, struct list_head *head) +{ + _list_add(_new, head->prev, head); +} + +static inline void +list_move(struct list_head *list, struct list_head *head) +{ + _list_del(list); + list_add(list, head); +} + +static inline void +list_move_tail(struct list_head *entry, struct list_head *head) +{ + _list_del(entry); + list_add_tail(entry, head); +} + +static inline void +_list_splice(const struct list_head *list, struct list_head *prev, + struct list_head *next) +{ + struct list_head *first; + struct list_head *last; + + if (list_empty(list)) + return; + + first = list->next; + last = list->prev; + first->prev = prev; + prev->next = first; + last->next = next; + next->prev = last; +} + +static inline void +list_splice(const struct list_head *list, struct list_head *head) +{ + _list_splice(list, head, head->next); +} + +static inline void +list_splice_tail(struct list_head *list, struct list_head *head) +{ + _list_splice(list, head->prev, head); +} + +static inline void +list_splice_init(struct list_head *list, struct list_head *head) +{ + _list_splice(list, head, head->next); + INIT_LIST_HEAD(list); +} + +static inline void +list_splice_tail_init(struct list_head *list, struct list_head *head) +{ + _list_splice(list, head->prev, head); + INIT_LIST_HEAD(list); +} + +#endif /* _LINUX_LIST_H_ */ diff --git a/builder/orphaner/makefile b/builder/orphaner/makefile new file mode 100644 index 0000000000..b79f42fdcd --- /dev/null +++ b/builder/orphaner/makefile @@ -0,0 +1,14 @@ +DESTDIR?=/usr/local +CFLAGS+=$(shell pkg-config --cflags rpm) +LDLIBS+=$(shell pkg-config --libs rpm) + +all: orphaner + +install: orphaner + cp orphaner $(DESTDIR)/bin + +orphaner:orphaner.o avl.o avl-cmp.o +clean: + rm -f orphaner *.o + +.PHONY:all clean install diff --git a/builder/orphaner/orphaner.c b/builder/orphaner/orphaner.c new file mode 100644 index 0000000000..1515721a3d --- /dev/null +++ b/builder/orphaner/orphaner.c @@ -0,0 +1,162 @@ + +#include +#include +#include + +#include +#include +#include +#include + +#include "avl-cmp.h" +#include "avl.h" + +struct package { + struct avl_node packages; + + const char* name; + + // The requirements of this package + struct require { + const char* name; + struct require* next; + }* requires; +}; + +// List of 'provided' items and the pkg that provides each of them. +// There can be several entries for the same name. +struct provide { + struct avl_node provides; + + const char* name; + struct package* pkg; +}; + +struct avl_tree packages; +struct avl_tree provides; + +// Iterate over the list of installed packages. +// Fills the 'packages' list and the 'provides' list. +static void enumerate_packages() { + rpmts ts; + rpmdbMatchIterator mi; + Header h; + + ts = rpmtsCreate(); + + mi = rpmtsInitIterator(ts, 0, NULL, 0); + + if (!mi) { + fprintf(stderr, "Error creating database iterator \n"); + rpmtsFree(ts); + return; + } + + rpmtd name_td = rpmtdNew(); + + while ((h = rpmdbNextIterator(mi)) != NULL) { + struct package* pkg = (struct package*)malloc(sizeof(*pkg)); + + pkg->name = strdup(headerGetString(h, RPMTAG_NAME)); + pkg->packages.key = pkg->name; + pkg->requires = NULL; + + avl_insert(&packages, &pkg->packages); + + if (headerGet(h, RPMTAG_REQUIRENAME, name_td, HEADERGET_DEFAULT)) { + const char* reqname; + while ((reqname = rpmtdNextString(name_td)) != NULL) { + struct require* req = (struct require*)malloc(sizeof(*req)); + + req->name = strdup(reqname); + req->next = pkg->requires; + pkg->requires = req; + } + } + if (headerGet(h, RPMTAG_PROVIDENAME, name_td, HEADERGET_DEFAULT)) { + const char* provname; + while ((provname = rpmtdNextString(name_td)) != NULL) { + struct provide* prov = (struct provide*)malloc(sizeof(*prov)); + + prov->name = strdup(provname); + prov->provides.key = prov->name; + prov->pkg = pkg; + + avl_insert(&provides, &prov->provides); + } + } + } + + rpmtdFree(name_td); + rpmdbFreeIterator(mi); + rpmtsFree(ts); + + return; +} + +// Remove from the 'packages' list all packages providing 'depname', +// and their transitive requirements. +// The visited dependency graph is printed to stderr. +static void remove_recursively(const char* depname) { + struct provide* provide; + + provide = avl_find_element(&provides, depname, provide, provides); + if (provide) { + do { + struct package* pkg = provide->pkg; + + fprintf(stderr, "%s->[%s] ", depname, pkg->name); + + if (pkg->packages.list.next == NULL) { + // the package was already removed from the tree + break; + } + avl_delete(&packages, &pkg->packages); + struct require* require = pkg->requires; + while (require != NULL) { + fprintf(stderr, "[%s]->%s ", pkg->name, require->name); + remove_recursively(require->name); + require = require->next; + } + + if (avl_is_last(&provides, &provide->provides)) { + break; + } + provide = avl_next_element(provide, provides); + } while (!provide->provides.leader); + } +} + +// Iterate over the 'packages' list and print each name +static void print_packages() { + struct package* pkg; + avl_for_each_element(&packages, pkg, packages) { + printf("%s ", pkg->name); + } +} + +int main(int argc, char** argv) { + avl_init(&packages, &avl_strcmp, false, NULL); + avl_init(&provides, &avl_strcmp, true, NULL); + + // configure the RPM environment with the default + rpmReadConfigFiles(NULL, NULL); + + // Load all the package names and require/provide relationships + enumerate_packages(); + + // For every argument provided, remove the packages providing + // this dependency from the list + fprintf(stderr, "Walking dependencies:\n"); + while (argc > 1) { + const char* depname = argv[argc - 1]; + remove_recursively(depname); + argc--; + } + fprintf(stderr, "\n=========\n"); + + // Print the remaining packages to stdout + print_packages(); + + return 0; +} From 04f8ef1d1e7f697ef2352632f1b966d5eae8cd00 Mon Sep 17 00:00:00 2001 From: Olivier Valentin Date: Tue, 24 Feb 2026 12:26:07 +0100 Subject: [PATCH 2/8] Use orphaner to remove packages in the final image. --- collector/Makefile | 1 + collector/container/Dockerfile | 2 ++ collector/container/rhel/install.sh | 11 ++++++----- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/collector/Makefile b/collector/Makefile index eec68231cc..e3c38dcf53 100644 --- a/collector/Makefile +++ b/collector/Makefile @@ -44,6 +44,7 @@ container/bin/collector: cmake-build/collector collector: container/bin/collector txt-files mkdir -p container/libs docker cp $(COLLECTOR_BUILDER_NAME):/THIRD_PARTY_NOTICES/ container/ + docker cp $(COLLECTOR_BUILDER_NAME):/usr/local/bin/orphaner container/bin/orphaner .PHONY: build-connscrape-test build-connscrape-test: diff --git a/collector/container/Dockerfile b/collector/container/Dockerfile index 569d67cbb2..53b024f7fd 100644 --- a/collector/container/Dockerfile +++ b/collector/container/Dockerfile @@ -16,6 +16,8 @@ LABEL name="collector" \ WORKDIR / +COPY container/bin/orphaner /usr/local/bin/orphaner + COPY container/${BUILD_TYPE}/install.sh / RUN ./install.sh && rm -f install.sh diff --git a/collector/container/rhel/install.sh b/collector/container/rhel/install.sh index ee1d0820d4..ceff860ebb 100755 --- a/collector/container/rhel/install.sh +++ b/collector/container/rhel/install.sh @@ -5,8 +5,9 @@ microdnf upgrade -y --nobest microdnf install -y elfutils-libelf microdnf clean all -# shellcheck disable=SC2046 -rpm --verbose -e --nodeps $( - rpm -qa '*rpm*' '*dnf*' '*libsolv*' '*hawkey*' 'yum*' 'libyaml*' 'libarchive*' -) -rm -rf /var/cache/yum + +SUPERFLUOUS_PACKAGES=$(/usr/local/bin/orphaner bash curl elfutils-libelf openssl-libs libuuid libstdc++ libcurl-minimal) + +rpm --verbose -e --nodeps $(rpm -qa ${SUPERFLUOUS_PACKAGES}) + +rm -rf /var/cache/yum /usr/local/bin/orphaner From 08851b59dbb7a5b2bd905ccc1f4baf9251fdbc75 Mon Sep 17 00:00:00 2001 From: Olivier Valentin Date: Tue, 24 Feb 2026 14:41:13 +0100 Subject: [PATCH 3/8] No format chech on the imported libraries --- builder/orphaner/.clang-format-ignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 builder/orphaner/.clang-format-ignore diff --git a/builder/orphaner/.clang-format-ignore b/builder/orphaner/.clang-format-ignore new file mode 100644 index 0000000000..2e0f0f7047 --- /dev/null +++ b/builder/orphaner/.clang-format-ignore @@ -0,0 +1,3 @@ +avl.* +avl-cmp.* +list.h From 9f3cc5b0a5755bfd3cdd7434fa6d3f419f45003a Mon Sep 17 00:00:00 2001 From: Olivier Valentin Date: Tue, 24 Feb 2026 14:41:59 +0100 Subject: [PATCH 4/8] Acknoledge quoting for package names --- collector/container/rhel/install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/collector/container/rhel/install.sh b/collector/container/rhel/install.sh index ceff860ebb..6af040d04e 100755 --- a/collector/container/rhel/install.sh +++ b/collector/container/rhel/install.sh @@ -8,6 +8,7 @@ microdnf clean all SUPERFLUOUS_PACKAGES=$(/usr/local/bin/orphaner bash curl elfutils-libelf openssl-libs libuuid libstdc++ libcurl-minimal) +# shellcheck disable=SC2046,SC2086 rpm --verbose -e --nodeps $(rpm -qa ${SUPERFLUOUS_PACKAGES}) rm -rf /var/cache/yum /usr/local/bin/orphaner From 8ada533a0b2dd0af496e0b82b4d1b58840d6a21d Mon Sep 17 00:00:00 2001 From: Olivier Valentin Date: Wed, 25 Feb 2026 10:08:13 +0100 Subject: [PATCH 5/8] clang-format won't let us name things 'requires' --- builder/orphaner/orphaner.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/builder/orphaner/orphaner.c b/builder/orphaner/orphaner.c index 1515721a3d..0f1bcf085d 100644 --- a/builder/orphaner/orphaner.c +++ b/builder/orphaner/orphaner.c @@ -20,7 +20,7 @@ struct package { struct require { const char* name; struct require* next; - }* requires; + }* reqs; // not using 'requires' as clang-format doesn't like it }; // List of 'provided' items and the pkg that provides each of them. @@ -59,7 +59,7 @@ static void enumerate_packages() { pkg->name = strdup(headerGetString(h, RPMTAG_NAME)); pkg->packages.key = pkg->name; - pkg->requires = NULL; + pkg->reqs = NULL; avl_insert(&packages, &pkg->packages); @@ -69,8 +69,8 @@ static void enumerate_packages() { struct require* req = (struct require*)malloc(sizeof(*req)); req->name = strdup(reqname); - req->next = pkg->requires; - pkg->requires = req; + req->next = pkg->reqs; + pkg->reqs = req; } } if (headerGet(h, RPMTAG_PROVIDENAME, name_td, HEADERGET_DEFAULT)) { @@ -112,7 +112,7 @@ static void remove_recursively(const char* depname) { break; } avl_delete(&packages, &pkg->packages); - struct require* require = pkg->requires; + struct require* require = pkg->reqs; while (require != NULL) { fprintf(stderr, "[%s]->%s ", pkg->name, require->name); remove_recursively(require->name); From 5642900a88c26dfb46488c02d4851158f0dfa55f Mon Sep 17 00:00:00 2001 From: Olivier Valentin Date: Thu, 26 Feb 2026 11:32:13 +0100 Subject: [PATCH 6/8] [konflux] Build and use orphaner --- collector/container/konflux.Dockerfile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/collector/container/konflux.Dockerfile b/collector/container/konflux.Dockerfile index fd33923872..a605e4b1ac 100644 --- a/collector/container/konflux.Dockerfile +++ b/collector/container/konflux.Dockerfile @@ -17,6 +17,7 @@ RUN dnf -y install --nobest --allowerasing \ curl-devel \ libuuid-devel \ libcap-ng-devel \ + rpm-devel \ autoconf \ libtool \ git \ @@ -50,6 +51,7 @@ WORKDIR ${BUILD_DIR} RUN mkdir kernel-modules \ && cp -a ${SOURCES_DIR}/builder builder \ && ln -s builder/third_party third_party \ + && ln -s builder/orphaner orphaner \ && cp -a ${SOURCES_DIR}/collector collector \ && cp -a ${SOURCES_DIR}/falcosecurity-libs falcosecurity-libs \ && cp -a ${SOURCES_DIR}/CMakeLists.txt CMakeLists.txt @@ -81,13 +83,15 @@ RUN strip -v --strip-unneeded "${CMAKE_BUILD_DIR}/collector/collector" FROM registry.access.redhat.com/ubi9/ubi-minimal:latest@sha256:c7d44146f826037f6873d99da479299b889473492d3c1ab8af86f08af04ec8a0 +COPY --from=builder /usr/local/bin/orphaner / + RUN microdnf -y install --nobest \ tbb \ c-ares \ elfutils-libelf && \ microdnf -y clean all && \ - rpm --verbose -e --nodeps $(rpm -qa 'curl' '*rpm*' '*dnf*' '*libsolv*' '*hawkey*' 'yum*' 'libyaml*' 'libarchive*') && \ - rm -rf /var/cache/dnf /var/cache/yum + rpm --verbose -e --nodeps $(rpm -qa $(/orphaner bash curl elfutils-libelf openssl-libs libuuid libstdc++ libcurl-minimal)) && \ + rm -rf /var/cache/dnf /var/cache/yum /orphaner ARG COLLECTOR_TAG From 82a2a01fbe8e1ff4237c64f2804131cc7c0d0059 Mon Sep 17 00:00:00 2001 From: Olivier Valentin Date: Thu, 26 Feb 2026 12:09:35 +0100 Subject: [PATCH 7/8] Add rpm-devel package to the konflux build --- rpms.in.yaml | 1 + rpms.lock.yaml | 532 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 533 insertions(+) diff --git a/rpms.in.yaml b/rpms.in.yaml index 002613d10d..c6955c8e93 100644 --- a/rpms.in.yaml +++ b/rpms.in.yaml @@ -15,6 +15,7 @@ packages: - curl-devel - libuuid-devel - libcap-ng-devel +- rpm-devel - autoconf - libtool - git diff --git a/rpms.lock.yaml b/rpms.lock.yaml index 7f8a72a908..c25285278a 100644 --- a/rpms.lock.yaml +++ b/rpms.lock.yaml @@ -830,6 +830,13 @@ arches: name: policycoreutils-python-utils evr: 3.6-3.el9 sourcerpm: policycoreutils-3.6-3.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/appstream/os/Packages/p/popt-devel-1.18-8.el9.aarch64.rpm + repoid: rhel-9-for-aarch64-appstream-rpms + size: 27810 + checksum: sha256:7be3a56159e9f8710763e4a7f6f22a4a00e3ea056cc1910db98ab5b42513a4b2 + name: popt-devel + evr: 1.18-8.el9 + sourcerpm: popt-1.18-8.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/appstream/os/Packages/p/python-unversioned-command-3.9.25-3.el9_7.noarch.rpm repoid: rhel-9-for-aarch64-appstream-rpms size: 15791 @@ -872,6 +879,13 @@ arches: name: python3-policycoreutils evr: 3.6-3.el9 sourcerpm: policycoreutils-3.6-3.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/appstream/os/Packages/r/rpm-devel-4.16.1.3-39.el9.aarch64.rpm + repoid: rhel-9-for-aarch64-appstream-rpms + size: 86737 + checksum: sha256:497be26793690f5b89b3342d1fb54e65607c47300511ba264e8b3984290f42db + name: rpm-devel + evr: 4.16.1.3-39.el9 + sourcerpm: rpm-4.16.1.3-39.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/appstream/os/Packages/s/scl-utils-2.0.3-4.el9.aarch64.rpm repoid: rhel-9-for-aarch64-appstream-rpms size: 42050 @@ -935,6 +949,13 @@ arches: name: alternatives evr: 1.24-2.el9 sourcerpm: chkconfig-1.24-2.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/a/attr-2.5.1-3.el9.aarch64.rpm + repoid: rhel-9-for-aarch64-baseos-rpms + size: 66448 + checksum: sha256:e86457936847a358b068f4f235800fb507d44321e65814f579355c4e46f85941 + name: attr + evr: 2.5.1-3.el9 + sourcerpm: attr-2.5.1-3.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/a/audit-libs-3.1.5-7.el9.aarch64.rpm repoid: rhel-9-for-aarch64-baseos-rpms size: 120220 @@ -1117,6 +1138,13 @@ arches: name: expat evr: 2.5.0-5.el9_7.1 sourcerpm: expat-2.5.0-5.el9_7.1.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/f/file-libs-5.39-16.el9.aarch64.rpm + repoid: rhel-9-for-aarch64-baseos-rpms + size: 604886 + checksum: sha256:15886470eb55b5d4999d07c603bf1ffcc292883f130d92e6bca447dbefd580c4 + name: file-libs + evr: 5.39-16.el9 + sourcerpm: file-5.39-16.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/f/filesystem-3.16-5.el9.aarch64.rpm repoid: rhel-9-for-aarch64-baseos-rpms size: 5003914 @@ -1180,6 +1208,13 @@ arches: name: gmp evr: 1:6.2.0-13.el9 sourcerpm: gmp-6.2.0-13.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/g/gnupg2-2.3.3-5.el9_7.aarch64.rpm + repoid: rhel-9-for-aarch64-baseos-rpms + size: 2613215 + checksum: sha256:dd1113b6c4d5a8ccf4b265ac5e3b944c69dfecbc5798286dbf1464eae82ccffb + name: gnupg2 + evr: 2.3.3-5.el9_7 + sourcerpm: gnupg2-2.3.3-5.el9_7.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/g/gnutls-3.8.3-9.el9.aarch64.rpm repoid: rhel-9-for-aarch64-baseos-rpms size: 1048467 @@ -1208,6 +1243,13 @@ arches: name: gzip evr: 1.12-1.el9 sourcerpm: gzip-1.12-1.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/i/ima-evm-utils-1.6.2-2.el9.aarch64.rpm + repoid: rhel-9-for-aarch64-baseos-rpms + size: 72920 + checksum: sha256:8a0469b1d521e6c772501855ce969b94fd939670c8dcca443e214e099115de44 + name: ima-evm-utils + evr: 1.6.2-2.el9 + sourcerpm: ima-evm-utils-1.6.2-2.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/i/info-6.7-15.el9.aarch64.rpm repoid: rhel-9-for-aarch64-baseos-rpms size: 230301 @@ -1229,6 +1271,13 @@ arches: name: json-c evr: 0.14-11.el9 sourcerpm: json-c-0.14-11.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/k/keyutils-1.6.3-1.el9.aarch64.rpm + repoid: rhel-9-for-aarch64-baseos-rpms + size: 78563 + checksum: sha256:98d9e6b3ed8dd32d5c5e48ec6227891dc0dfc9b4f8c7dd08faf825602115e4ce + name: keyutils + evr: 1.6.3-1.el9 + sourcerpm: keyutils-1.6.3-1.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/k/keyutils-libs-1.6.3-1.el9.aarch64.rpm repoid: rhel-9-for-aarch64-baseos-rpms size: 34341 @@ -1271,6 +1320,13 @@ arches: name: libarchive evr: 3.5.3-6.el9_6 sourcerpm: libarchive-3.5.3-6.el9_6.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/l/libassuan-2.5.5-3.el9.aarch64.rpm + repoid: rhel-9-for-aarch64-baseos-rpms + size: 71019 + checksum: sha256:b8f243fd6e7848b95b324e59c19bde42d7483e34afdae93e8de3531d758895b9 + name: libassuan + evr: 2.5.5-3.el9 + sourcerpm: libassuan-2.5.5-3.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/l/libatomic-11.5.0-11.el9.aarch64.rpm repoid: rhel-9-for-aarch64-baseos-rpms size: 25815 @@ -1418,6 +1474,13 @@ arches: name: libidn2 evr: 2.3.0-7.el9 sourcerpm: libidn2-2.3.0-7.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/l/libksba-1.5.1-7.el9.aarch64.rpm + repoid: rhel-9-for-aarch64-baseos-rpms + size: 158319 + checksum: sha256:6e655616bc385ec0233db2475c120c5875d9851065e64ca3001bb0a485ed184d + name: libksba + evr: 1.5.1-7.el9 + sourcerpm: libksba-1.5.1-7.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/l/libmount-2.37.4-21.el9_7.aarch64.rpm repoid: rhel-9-for-aarch64-baseos-rpms size: 139754 @@ -1649,6 +1712,13 @@ arches: name: nettle evr: 3.10.1-1.el9 sourcerpm: nettle-3.10.1-1.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/n/npth-1.6-8.el9.aarch64.rpm + repoid: rhel-9-for-aarch64-baseos-rpms + size: 26972 + checksum: sha256:6fb2eb0e66f94ce62b1f14f00704de0800664da8429df1df244ad7d9ee2c0b7b + name: npth + evr: 1.6-8.el9 + sourcerpm: npth-1.6-8.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/o/openldap-2.6.8-4.el9.aarch64.rpm repoid: rhel-9-for-aarch64-baseos-rpms size: 291500 @@ -1866,6 +1936,13 @@ arches: name: rpm evr: 4.16.1.3-39.el9 sourcerpm: rpm-4.16.1.3-39.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/r/rpm-build-libs-4.16.1.3-39.el9.aarch64.rpm + repoid: rhel-9-for-aarch64-baseos-rpms + size: 87057 + checksum: sha256:b961a494d25ae5ea7a9904c1329aedc6c7b7b95ea25dd8aee7ada2a81581d1ff + name: rpm-build-libs + evr: 4.16.1.3-39.el9 + sourcerpm: rpm-4.16.1.3-39.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/r/rpm-libs-4.16.1.3-39.el9.aarch64.rpm repoid: rhel-9-for-aarch64-baseos-rpms size: 307199 @@ -1873,6 +1950,13 @@ arches: name: rpm-libs evr: 4.16.1.3-39.el9 sourcerpm: rpm-4.16.1.3-39.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/r/rpm-sign-libs-4.16.1.3-39.el9.aarch64.rpm + repoid: rhel-9-for-aarch64-baseos-rpms + size: 19390 + checksum: sha256:d1333a2de3b2c50e9eb3eb88fb9c9ef4af900d86459b45a126ca2407d0c4a1e1 + name: rpm-sign-libs + evr: 4.16.1.3-39.el9 + sourcerpm: rpm-4.16.1.3-39.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/s/sed-4.8-9.el9.aarch64.rpm repoid: rhel-9-for-aarch64-baseos-rpms size: 314254 @@ -1943,6 +2027,13 @@ arches: name: tcl evr: 1:8.6.10-7.el9 sourcerpm: tcl-8.6.10-7.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/t/tpm2-tss-3.2.3-1.el9.aarch64.rpm + repoid: rhel-9-for-aarch64-baseos-rpms + size: 572170 + checksum: sha256:dc2cc69dcda7cace9f10bf167417ca4f28f002bcb9229b5356b7a3d5e3353b1a + name: tpm2-tss + evr: 3.2.3-1.el9 + sourcerpm: tpm2-tss-3.2.3-1.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/os/Packages/t/tzdata-2025c-1.el9.noarch.rpm repoid: rhel-9-for-aarch64-baseos-rpms size: 925360 @@ -2491,6 +2582,12 @@ arches: checksum: sha256:29a0e23a89d0f1ba640a694688699e1c765c4f5793d9f9c0642a97aa54179664 name: expat evr: 2.5.0-5.el9_7.1 + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/f/file-5.39-16.el9.src.rpm + repoid: rhel-9-for-aarch64-baseos-source-rpms + size: 1003666 + checksum: sha256:e8261cbcd55b85efdcd12ce1a2c6e63a72c64c872d618de4ba24557a1fda63c0 + name: file + evr: 5.39-16.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/f/filesystem-3.16-5.el9.src.rpm repoid: rhel-9-for-aarch64-baseos-source-rpms size: 20486 @@ -2533,6 +2630,12 @@ arches: checksum: sha256:d0d8a795eea9ae555da63fbcfc3575425e86bb7e96d117b9ae2785b4f5e82f7c name: gmp evr: 1:6.2.0-13.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/g/gnupg2-2.3.3-5.el9_7.src.rpm + repoid: rhel-9-for-aarch64-baseos-source-rpms + size: 7623034 + checksum: sha256:88d0f8bfaf376b52de7a56de608af034ceae7a42ca20e32166bc79199cf2234d + name: gnupg2 + evr: 2.3.3-5.el9_7 - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/g/gnutls-3.8.3-9.el9.src.rpm repoid: rhel-9-for-aarch64-baseos-source-rpms size: 8601327 @@ -2557,6 +2660,12 @@ arches: checksum: sha256:a05f582ec42e89258ee5e10af96dee4300bcb2a6a69a76bfb5b46f79e6a6a47b name: gzip evr: 1.12-1.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/i/ima-evm-utils-1.6.2-2.el9.src.rpm + repoid: rhel-9-for-aarch64-baseos-source-rpms + size: 179312 + checksum: sha256:645080ac16b4cc7d858b419642ae8a606d7f637e721a6eb7be5203bc3eb6c995 + name: ima-evm-utils + evr: 1.6.2-2.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/j/jansson-2.14-1.el9.src.rpm repoid: rhel-9-for-aarch64-baseos-source-rpms size: 447607 @@ -2605,6 +2714,12 @@ arches: checksum: sha256:4e936a7bb7e593fab81247b88b97fc07a03bf24c4c3ed8188060dcf7af83b348 name: libarchive evr: 3.5.3-6.el9_6 + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/l/libassuan-2.5.5-3.el9.src.rpm + repoid: rhel-9-for-aarch64-baseos-source-rpms + size: 586136 + checksum: sha256:dcc858194f9497ec86960651fa76413a9c731f94423d67298e8e3c0c7a5e7806 + name: libassuan + evr: 2.5.5-3.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/l/libcap-2.48-10.el9.src.rpm repoid: rhel-9-for-aarch64-baseos-source-rpms size: 200754 @@ -2677,6 +2792,12 @@ arches: checksum: sha256:c27f21437a76f07b0ee9f4f7e61d621cbb9c483c14563b31e55e320d19df99a6 name: libidn2 evr: 2.3.0-7.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/l/libksba-1.5.1-7.el9.src.rpm + repoid: rhel-9-for-aarch64-baseos-source-rpms + size: 677223 + checksum: sha256:6d334a90bcbc270ee691183624e5664fdbe7dbf2d4a47319e6c75860e16abd43 + name: libksba + evr: 1.5.1-7.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/l/libpipeline-1.5.3-4.el9.src.rpm repoid: rhel-9-for-aarch64-baseos-source-rpms size: 1006052 @@ -2815,6 +2936,12 @@ arches: checksum: sha256:6ae71ec17624d7e1e0565a6dc4cff9cb7b88b5bf412d37744703f5a3b5a8a00b name: nghttp2 evr: 1.43.0-6.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/n/npth-1.6-8.el9.src.rpm + repoid: rhel-9-for-aarch64-baseos-source-rpms + size: 314570 + checksum: sha256:3d0685cc559f0af453b6b3ace61944dec9b9cb090695e4de5f5579da7b35b750 + name: npth + evr: 1.6-8.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/o/openldap-2.6.8-4.el9.src.rpm repoid: rhel-9-for-aarch64-baseos-source-rpms size: 6548889 @@ -2989,6 +3116,12 @@ arches: checksum: sha256:74090e1b1b24041da4c39f8e04114722575564f54bd1c43162884bcebc1aecaf name: texinfo evr: 6.7-15.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/t/tpm2-tss-3.2.3-1.el9.src.rpm + repoid: rhel-9-for-aarch64-baseos-source-rpms + size: 1660943 + checksum: sha256:11c9b6951d6823d120d310243f500f78ce13f9e206134309692e4a761294f3b9 + name: tpm2-tss + evr: 3.2.3-1.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/aarch64/baseos/source/SRPMS/Packages/t/tzdata-2025c-1.el9.src.rpm repoid: rhel-9-for-aarch64-baseos-source-rpms size: 915004 @@ -3860,6 +3993,13 @@ arches: name: policycoreutils-python-utils evr: 3.6-3.el9 sourcerpm: policycoreutils-3.6-3.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/appstream/os/Packages/p/popt-devel-1.18-8.el9.ppc64le.rpm + repoid: rhel-9-for-ppc64le-appstream-rpms + size: 27845 + checksum: sha256:e8cde9044660956e3f36fd1110e09e1abf780f067eece266a9fa15d2b2868667 + name: popt-devel + evr: 1.18-8.el9 + sourcerpm: popt-1.18-8.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/appstream/os/Packages/p/python-unversioned-command-3.9.25-3.el9_7.noarch.rpm repoid: rhel-9-for-ppc64le-appstream-rpms size: 15791 @@ -3902,6 +4042,13 @@ arches: name: python3-policycoreutils evr: 3.6-3.el9 sourcerpm: policycoreutils-3.6-3.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/appstream/os/Packages/r/rpm-devel-4.16.1.3-39.el9.ppc64le.rpm + repoid: rhel-9-for-ppc64le-appstream-rpms + size: 87014 + checksum: sha256:b0b68808192bb34029d41a827ec22f5986efa1838cd81336d16949b243c306fc + name: rpm-devel + evr: 4.16.1.3-39.el9 + sourcerpm: rpm-4.16.1.3-39.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/appstream/os/Packages/s/scl-utils-2.0.3-4.el9.ppc64le.rpm repoid: rhel-9-for-ppc64le-appstream-rpms size: 45185 @@ -3965,6 +4112,13 @@ arches: name: alternatives evr: 1.24-2.el9 sourcerpm: chkconfig-1.24-2.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/a/attr-2.5.1-3.el9.ppc64le.rpm + repoid: rhel-9-for-ppc64le-baseos-rpms + size: 68429 + checksum: sha256:269f65f33a415b65f7033830afd221664d45e14f4a396adda77342d182ca1af5 + name: attr + evr: 2.5.1-3.el9 + sourcerpm: attr-2.5.1-3.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/a/audit-libs-3.1.5-7.el9.ppc64le.rpm repoid: rhel-9-for-ppc64le-baseos-rpms size: 140704 @@ -4147,6 +4301,13 @@ arches: name: expat evr: 2.5.0-5.el9_7.1 sourcerpm: expat-2.5.0-5.el9_7.1.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/f/file-libs-5.39-16.el9.ppc64le.rpm + repoid: rhel-9-for-ppc64le-baseos-rpms + size: 618014 + checksum: sha256:6a6546cf72e0808a5e093164d63d180656b16a2874467e05c2db6d60d86ec0e4 + name: file-libs + evr: 5.39-16.el9 + sourcerpm: file-5.39-16.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/f/filesystem-3.16-5.el9.ppc64le.rpm repoid: rhel-9-for-ppc64le-baseos-rpms size: 5003944 @@ -4210,6 +4371,13 @@ arches: name: gmp evr: 1:6.2.0-13.el9 sourcerpm: gmp-6.2.0-13.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/g/gnupg2-2.3.3-5.el9_7.ppc64le.rpm + repoid: rhel-9-for-ppc64le-baseos-rpms + size: 2804099 + checksum: sha256:a9650c2049dd15e6fbd731cbe8b6fa8fa3684758a14f0538ffec8c2b22df0d9a + name: gnupg2 + evr: 2.3.3-5.el9_7 + sourcerpm: gnupg2-2.3.3-5.el9_7.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/g/gnutls-3.8.3-9.el9.ppc64le.rpm repoid: rhel-9-for-ppc64le-baseos-rpms size: 1120000 @@ -4238,6 +4406,13 @@ arches: name: gzip evr: 1.12-1.el9 sourcerpm: gzip-1.12-1.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/i/ima-evm-utils-1.6.2-2.el9.ppc64le.rpm + repoid: rhel-9-for-ppc64le-baseos-rpms + size: 77091 + checksum: sha256:56f3589fe5e459e17b15305ee8d7577858a8a8e196d8bcfa1e331c2163732b7f + name: ima-evm-utils + evr: 1.6.2-2.el9 + sourcerpm: ima-evm-utils-1.6.2-2.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/i/info-6.7-15.el9.ppc64le.rpm repoid: rhel-9-for-ppc64le-baseos-rpms size: 261707 @@ -4259,6 +4434,13 @@ arches: name: json-c evr: 0.14-11.el9 sourcerpm: json-c-0.14-11.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/k/keyutils-1.6.3-1.el9.ppc64le.rpm + repoid: rhel-9-for-ppc64le-baseos-rpms + size: 82126 + checksum: sha256:7b06196ebaf62f134e94443da1bdade3e5647a5b724c21b18533250966e7a9aa + name: keyutils + evr: 1.6.3-1.el9 + sourcerpm: keyutils-1.6.3-1.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/k/keyutils-libs-1.6.3-1.el9.ppc64le.rpm repoid: rhel-9-for-ppc64le-baseos-rpms size: 35505 @@ -4301,6 +4483,13 @@ arches: name: libarchive evr: 3.5.3-6.el9_6 sourcerpm: libarchive-3.5.3-6.el9_6.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/l/libassuan-2.5.5-3.el9.ppc64le.rpm + repoid: rhel-9-for-ppc64le-baseos-rpms + size: 75672 + checksum: sha256:812482db276d6792f126ca46c802e30399b07335d8c847d1f3c518241ffe03c7 + name: libassuan + evr: 2.5.5-3.el9 + sourcerpm: libassuan-2.5.5-3.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/l/libatomic-11.5.0-11.el9.ppc64le.rpm repoid: rhel-9-for-ppc64le-baseos-rpms size: 24871 @@ -4448,6 +4637,13 @@ arches: name: libidn2 evr: 2.3.0-7.el9 sourcerpm: libidn2-2.3.0-7.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/l/libksba-1.5.1-7.el9.ppc64le.rpm + repoid: rhel-9-for-ppc64le-baseos-rpms + size: 177249 + checksum: sha256:7811870bfcc1665daaae2f088e737bc7d0c49a753c1db1cf5a4d9c2162f29cc9 + name: libksba + evr: 1.5.1-7.el9 + sourcerpm: libksba-1.5.1-7.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/l/libmount-2.37.4-21.el9_7.ppc64le.rpm repoid: rhel-9-for-ppc64le-baseos-rpms size: 159458 @@ -4686,6 +4882,13 @@ arches: name: nettle evr: 3.10.1-1.el9 sourcerpm: nettle-3.10.1-1.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/n/npth-1.6-8.el9.ppc64le.rpm + repoid: rhel-9-for-ppc64le-baseos-rpms + size: 27410 + checksum: sha256:55296dd542e3e8fb28635157bfe643ae29afa06f5b3a55e48ff5edf6ceedd3c9 + name: npth + evr: 1.6-8.el9 + sourcerpm: npth-1.6-8.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/o/openldap-2.6.8-4.el9.ppc64le.rpm repoid: rhel-9-for-ppc64le-baseos-rpms size: 329998 @@ -4903,6 +5106,13 @@ arches: name: rpm evr: 4.16.1.3-39.el9 sourcerpm: rpm-4.16.1.3-39.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/r/rpm-build-libs-4.16.1.3-39.el9.ppc64le.rpm + repoid: rhel-9-for-ppc64le-baseos-rpms + size: 98567 + checksum: sha256:9d6c042f69afd81a0bdd87b05193bfbe1893a3d23679289faf28e414ce827246 + name: rpm-build-libs + evr: 4.16.1.3-39.el9 + sourcerpm: rpm-4.16.1.3-39.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/r/rpm-libs-4.16.1.3-39.el9.ppc64le.rpm repoid: rhel-9-for-ppc64le-baseos-rpms size: 359163 @@ -4910,6 +5120,13 @@ arches: name: rpm-libs evr: 4.16.1.3-39.el9 sourcerpm: rpm-4.16.1.3-39.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/r/rpm-sign-libs-4.16.1.3-39.el9.ppc64le.rpm + repoid: rhel-9-for-ppc64le-baseos-rpms + size: 19913 + checksum: sha256:faed071289b7f7237acb6fec775f2e9ce62e9a37b724691f360f325b80adcef1 + name: rpm-sign-libs + evr: 4.16.1.3-39.el9 + sourcerpm: rpm-4.16.1.3-39.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/s/sed-4.8-9.el9.ppc64le.rpm repoid: rhel-9-for-ppc64le-baseos-rpms size: 322393 @@ -4980,6 +5197,13 @@ arches: name: tcl evr: 1:8.6.10-7.el9 sourcerpm: tcl-8.6.10-7.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/t/tpm2-tss-3.2.3-1.el9.ppc64le.rpm + repoid: rhel-9-for-ppc64le-baseos-rpms + size: 548711 + checksum: sha256:eb7d009f2b9c12c0f64f89e98bba836c959e300f6daaa9c1923582c90bf1fd09 + name: tpm2-tss + evr: 3.2.3-1.el9 + sourcerpm: tpm2-tss-3.2.3-1.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/os/Packages/t/tzdata-2025c-1.el9.noarch.rpm repoid: rhel-9-for-ppc64le-baseos-rpms size: 925360 @@ -5528,6 +5752,12 @@ arches: checksum: sha256:29a0e23a89d0f1ba640a694688699e1c765c4f5793d9f9c0642a97aa54179664 name: expat evr: 2.5.0-5.el9_7.1 + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/f/file-5.39-16.el9.src.rpm + repoid: rhel-9-for-ppc64le-baseos-source-rpms + size: 1003666 + checksum: sha256:e8261cbcd55b85efdcd12ce1a2c6e63a72c64c872d618de4ba24557a1fda63c0 + name: file + evr: 5.39-16.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/f/filesystem-3.16-5.el9.src.rpm repoid: rhel-9-for-ppc64le-baseos-source-rpms size: 20486 @@ -5570,6 +5800,12 @@ arches: checksum: sha256:d0d8a795eea9ae555da63fbcfc3575425e86bb7e96d117b9ae2785b4f5e82f7c name: gmp evr: 1:6.2.0-13.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/g/gnupg2-2.3.3-5.el9_7.src.rpm + repoid: rhel-9-for-ppc64le-baseos-source-rpms + size: 7623034 + checksum: sha256:88d0f8bfaf376b52de7a56de608af034ceae7a42ca20e32166bc79199cf2234d + name: gnupg2 + evr: 2.3.3-5.el9_7 - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/g/gnutls-3.8.3-9.el9.src.rpm repoid: rhel-9-for-ppc64le-baseos-source-rpms size: 8601327 @@ -5594,6 +5830,12 @@ arches: checksum: sha256:a05f582ec42e89258ee5e10af96dee4300bcb2a6a69a76bfb5b46f79e6a6a47b name: gzip evr: 1.12-1.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/i/ima-evm-utils-1.6.2-2.el9.src.rpm + repoid: rhel-9-for-ppc64le-baseos-source-rpms + size: 179312 + checksum: sha256:645080ac16b4cc7d858b419642ae8a606d7f637e721a6eb7be5203bc3eb6c995 + name: ima-evm-utils + evr: 1.6.2-2.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/j/jansson-2.14-1.el9.src.rpm repoid: rhel-9-for-ppc64le-baseos-source-rpms size: 447607 @@ -5642,6 +5884,12 @@ arches: checksum: sha256:4e936a7bb7e593fab81247b88b97fc07a03bf24c4c3ed8188060dcf7af83b348 name: libarchive evr: 3.5.3-6.el9_6 + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/l/libassuan-2.5.5-3.el9.src.rpm + repoid: rhel-9-for-ppc64le-baseos-source-rpms + size: 586136 + checksum: sha256:dcc858194f9497ec86960651fa76413a9c731f94423d67298e8e3c0c7a5e7806 + name: libassuan + evr: 2.5.5-3.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/l/libcap-2.48-10.el9.src.rpm repoid: rhel-9-for-ppc64le-baseos-source-rpms size: 200754 @@ -5714,6 +5962,12 @@ arches: checksum: sha256:c27f21437a76f07b0ee9f4f7e61d621cbb9c483c14563b31e55e320d19df99a6 name: libidn2 evr: 2.3.0-7.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/l/libksba-1.5.1-7.el9.src.rpm + repoid: rhel-9-for-ppc64le-baseos-source-rpms + size: 677223 + checksum: sha256:6d334a90bcbc270ee691183624e5664fdbe7dbf2d4a47319e6c75860e16abd43 + name: libksba + evr: 1.5.1-7.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/l/libpipeline-1.5.3-4.el9.src.rpm repoid: rhel-9-for-ppc64le-baseos-source-rpms size: 1006052 @@ -5858,6 +6112,12 @@ arches: checksum: sha256:6ae71ec17624d7e1e0565a6dc4cff9cb7b88b5bf412d37744703f5a3b5a8a00b name: nghttp2 evr: 1.43.0-6.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/n/npth-1.6-8.el9.src.rpm + repoid: rhel-9-for-ppc64le-baseos-source-rpms + size: 314570 + checksum: sha256:3d0685cc559f0af453b6b3ace61944dec9b9cb090695e4de5f5579da7b35b750 + name: npth + evr: 1.6-8.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/o/openldap-2.6.8-4.el9.src.rpm repoid: rhel-9-for-ppc64le-baseos-source-rpms size: 6548889 @@ -6032,6 +6292,12 @@ arches: checksum: sha256:74090e1b1b24041da4c39f8e04114722575564f54bd1c43162884bcebc1aecaf name: texinfo evr: 6.7-15.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/t/tpm2-tss-3.2.3-1.el9.src.rpm + repoid: rhel-9-for-ppc64le-baseos-source-rpms + size: 1660943 + checksum: sha256:11c9b6951d6823d120d310243f500f78ce13f9e206134309692e4a761294f3b9 + name: tpm2-tss + evr: 3.2.3-1.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/ppc64le/baseos/source/SRPMS/Packages/t/tzdata-2025c-1.el9.src.rpm repoid: rhel-9-for-ppc64le-baseos-source-rpms size: 915004 @@ -6910,6 +7176,13 @@ arches: name: policycoreutils-python-utils evr: 3.6-3.el9 sourcerpm: policycoreutils-3.6-3.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/appstream/os/Packages/p/popt-devel-1.18-8.el9.s390x.rpm + repoid: rhel-9-for-s390x-appstream-rpms + size: 27832 + checksum: sha256:330890a02bdbbb1f5fdebdaddc43c4424dc83c28f36e7423a85ee53225f84a14 + name: popt-devel + evr: 1.18-8.el9 + sourcerpm: popt-1.18-8.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/appstream/os/Packages/p/python-unversioned-command-3.9.25-3.el9_7.noarch.rpm repoid: rhel-9-for-s390x-appstream-rpms size: 15791 @@ -6952,6 +7225,13 @@ arches: name: python3-policycoreutils evr: 3.6-3.el9 sourcerpm: policycoreutils-3.6-3.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/appstream/os/Packages/r/rpm-devel-4.16.1.3-39.el9.s390x.rpm + repoid: rhel-9-for-s390x-appstream-rpms + size: 86644 + checksum: sha256:8af3160c601c162fadd228a2e286672a8044f95e9525b0223c92186e15b1e544 + name: rpm-devel + evr: 4.16.1.3-39.el9 + sourcerpm: rpm-4.16.1.3-39.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/appstream/os/Packages/s/scl-utils-2.0.3-4.el9.s390x.rpm repoid: rhel-9-for-s390x-appstream-rpms size: 42078 @@ -7015,6 +7295,13 @@ arches: name: alternatives evr: 1.24-2.el9 sourcerpm: chkconfig-1.24-2.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/a/attr-2.5.1-3.el9.s390x.rpm + repoid: rhel-9-for-s390x-baseos-rpms + size: 66410 + checksum: sha256:c9b528e3180b2f5beb3e929a41447155f4e18bcfda7dd99a276e1fa0f6f849c0 + name: attr + evr: 2.5.1-3.el9 + sourcerpm: attr-2.5.1-3.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/a/audit-libs-3.1.5-7.el9.s390x.rpm repoid: rhel-9-for-s390x-baseos-rpms size: 119512 @@ -7197,6 +7484,13 @@ arches: name: expat evr: 2.5.0-5.el9_7.1 sourcerpm: expat-2.5.0-5.el9_7.1.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/f/file-libs-5.39-16.el9.s390x.rpm + repoid: rhel-9-for-s390x-baseos-rpms + size: 606194 + checksum: sha256:80f2fbf52b904be60da5d84cea88e5d2176fb4cf7638bc4e7de836876c849e0f + name: file-libs + evr: 5.39-16.el9 + sourcerpm: file-5.39-16.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/f/filesystem-3.16-5.el9.s390x.rpm repoid: rhel-9-for-s390x-baseos-rpms size: 5003897 @@ -7260,6 +7554,13 @@ arches: name: gmp evr: 1:6.2.0-13.el9 sourcerpm: gmp-6.2.0-13.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/g/gnupg2-2.3.3-5.el9_7.s390x.rpm + repoid: rhel-9-for-s390x-baseos-rpms + size: 2581643 + checksum: sha256:4a2635adb8f4462f0ef9396ef3ccde9b700701d23f3cb4a8e6f23a4ea94e7a50 + name: gnupg2 + evr: 2.3.3-5.el9_7 + sourcerpm: gnupg2-2.3.3-5.el9_7.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/g/gnutls-3.8.3-9.el9.s390x.rpm repoid: rhel-9-for-s390x-baseos-rpms size: 988117 @@ -7288,6 +7589,13 @@ arches: name: gzip evr: 1.12-1.el9 sourcerpm: gzip-1.12-1.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/i/ima-evm-utils-1.6.2-2.el9.s390x.rpm + repoid: rhel-9-for-s390x-baseos-rpms + size: 73933 + checksum: sha256:3cb4413112ae2d737f3b8e833c1950a0bd6ba5d75a0496b940e01823417ee0f1 + name: ima-evm-utils + evr: 1.6.2-2.el9 + sourcerpm: ima-evm-utils-1.6.2-2.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/i/info-6.7-15.el9.s390x.rpm repoid: rhel-9-for-s390x-baseos-rpms size: 231965 @@ -7309,6 +7617,13 @@ arches: name: json-c evr: 0.14-11.el9 sourcerpm: json-c-0.14-11.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/k/keyutils-1.6.3-1.el9.s390x.rpm + repoid: rhel-9-for-s390x-baseos-rpms + size: 77937 + checksum: sha256:f2eaa80da16342abfcfd0a3f4bee3968b31abf5908dd0198ffd1eda6b17bb38f + name: keyutils + evr: 1.6.3-1.el9 + sourcerpm: keyutils-1.6.3-1.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/k/keyutils-libs-1.6.3-1.el9.s390x.rpm repoid: rhel-9-for-s390x-baseos-rpms size: 34136 @@ -7351,6 +7666,13 @@ arches: name: libarchive evr: 3.5.3-6.el9_6 sourcerpm: libarchive-3.5.3-6.el9_6.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/l/libassuan-2.5.5-3.el9.s390x.rpm + repoid: rhel-9-for-s390x-baseos-rpms + size: 70075 + checksum: sha256:197fc6030467fbf104f595f3d73552d07efe4e1549004847dd0868310939a358 + name: libassuan + evr: 2.5.5-3.el9 + sourcerpm: libassuan-2.5.5-3.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/l/libatomic-11.5.0-11.el9.s390x.rpm repoid: rhel-9-for-s390x-baseos-rpms size: 23203 @@ -7498,6 +7820,13 @@ arches: name: libidn2 evr: 2.3.0-7.el9 sourcerpm: libidn2-2.3.0-7.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/l/libksba-1.5.1-7.el9.s390x.rpm + repoid: rhel-9-for-s390x-baseos-rpms + size: 155899 + checksum: sha256:9d109a95612354d20cc635350180a8edebd1288ebcb433be7b5466c1769ec130 + name: libksba + evr: 1.5.1-7.el9 + sourcerpm: libksba-1.5.1-7.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/l/libmount-2.37.4-21.el9_7.s390x.rpm repoid: rhel-9-for-s390x-baseos-rpms size: 139163 @@ -7729,6 +8058,13 @@ arches: name: nettle evr: 3.10.1-1.el9 sourcerpm: nettle-3.10.1-1.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/n/npth-1.6-8.el9.s390x.rpm + repoid: rhel-9-for-s390x-baseos-rpms + size: 27064 + checksum: sha256:70eca966993d2d26eb53c21a7c3298b4fb48cf4cd19cbbf3c06c5be3bcbcd8ec + name: npth + evr: 1.6-8.el9 + sourcerpm: npth-1.6-8.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/o/openldap-2.6.8-4.el9.s390x.rpm repoid: rhel-9-for-s390x-baseos-rpms size: 291034 @@ -7946,6 +8282,13 @@ arches: name: rpm evr: 4.16.1.3-39.el9 sourcerpm: rpm-4.16.1.3-39.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/r/rpm-build-libs-4.16.1.3-39.el9.s390x.rpm + repoid: rhel-9-for-s390x-baseos-rpms + size: 88285 + checksum: sha256:0fae0fb4ee040142dab36645f9784c1f480c548f4acf8df5cf83dee0d7d086b0 + name: rpm-build-libs + evr: 4.16.1.3-39.el9 + sourcerpm: rpm-4.16.1.3-39.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/r/rpm-libs-4.16.1.3-39.el9.s390x.rpm repoid: rhel-9-for-s390x-baseos-rpms size: 311459 @@ -7953,6 +8296,13 @@ arches: name: rpm-libs evr: 4.16.1.3-39.el9 sourcerpm: rpm-4.16.1.3-39.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/r/rpm-sign-libs-4.16.1.3-39.el9.s390x.rpm + repoid: rhel-9-for-s390x-baseos-rpms + size: 19507 + checksum: sha256:de56083c550940b956e8c576181d68199b256bc045e5517a4b1093e3962e9f31 + name: rpm-sign-libs + evr: 4.16.1.3-39.el9 + sourcerpm: rpm-4.16.1.3-39.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/s/sed-4.8-9.el9.s390x.rpm repoid: rhel-9-for-s390x-baseos-rpms size: 316228 @@ -8023,6 +8373,13 @@ arches: name: tcl evr: 1:8.6.10-7.el9 sourcerpm: tcl-8.6.10-7.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/t/tpm2-tss-3.2.3-1.el9.s390x.rpm + repoid: rhel-9-for-s390x-baseos-rpms + size: 557484 + checksum: sha256:c0b7c6d2ee12f02389f2e14d67845fa10f4db87cca7b3239c4716f58dde7f1cb + name: tpm2-tss + evr: 3.2.3-1.el9 + sourcerpm: tpm2-tss-3.2.3-1.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/os/Packages/t/tzdata-2025c-1.el9.noarch.rpm repoid: rhel-9-for-s390x-baseos-rpms size: 925360 @@ -8571,6 +8928,12 @@ arches: checksum: sha256:29a0e23a89d0f1ba640a694688699e1c765c4f5793d9f9c0642a97aa54179664 name: expat evr: 2.5.0-5.el9_7.1 + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/f/file-5.39-16.el9.src.rpm + repoid: rhel-9-for-s390x-baseos-source-rpms + size: 1003666 + checksum: sha256:e8261cbcd55b85efdcd12ce1a2c6e63a72c64c872d618de4ba24557a1fda63c0 + name: file + evr: 5.39-16.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/f/filesystem-3.16-5.el9.src.rpm repoid: rhel-9-for-s390x-baseos-source-rpms size: 20486 @@ -8613,6 +8976,12 @@ arches: checksum: sha256:d0d8a795eea9ae555da63fbcfc3575425e86bb7e96d117b9ae2785b4f5e82f7c name: gmp evr: 1:6.2.0-13.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/g/gnupg2-2.3.3-5.el9_7.src.rpm + repoid: rhel-9-for-s390x-baseos-source-rpms + size: 7623034 + checksum: sha256:88d0f8bfaf376b52de7a56de608af034ceae7a42ca20e32166bc79199cf2234d + name: gnupg2 + evr: 2.3.3-5.el9_7 - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/g/gnutls-3.8.3-9.el9.src.rpm repoid: rhel-9-for-s390x-baseos-source-rpms size: 8601327 @@ -8637,6 +9006,12 @@ arches: checksum: sha256:a05f582ec42e89258ee5e10af96dee4300bcb2a6a69a76bfb5b46f79e6a6a47b name: gzip evr: 1.12-1.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/i/ima-evm-utils-1.6.2-2.el9.src.rpm + repoid: rhel-9-for-s390x-baseos-source-rpms + size: 179312 + checksum: sha256:645080ac16b4cc7d858b419642ae8a606d7f637e721a6eb7be5203bc3eb6c995 + name: ima-evm-utils + evr: 1.6.2-2.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/j/jansson-2.14-1.el9.src.rpm repoid: rhel-9-for-s390x-baseos-source-rpms size: 447607 @@ -8685,6 +9060,12 @@ arches: checksum: sha256:4e936a7bb7e593fab81247b88b97fc07a03bf24c4c3ed8188060dcf7af83b348 name: libarchive evr: 3.5.3-6.el9_6 + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/l/libassuan-2.5.5-3.el9.src.rpm + repoid: rhel-9-for-s390x-baseos-source-rpms + size: 586136 + checksum: sha256:dcc858194f9497ec86960651fa76413a9c731f94423d67298e8e3c0c7a5e7806 + name: libassuan + evr: 2.5.5-3.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/l/libcap-2.48-10.el9.src.rpm repoid: rhel-9-for-s390x-baseos-source-rpms size: 200754 @@ -8757,6 +9138,12 @@ arches: checksum: sha256:c27f21437a76f07b0ee9f4f7e61d621cbb9c483c14563b31e55e320d19df99a6 name: libidn2 evr: 2.3.0-7.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/l/libksba-1.5.1-7.el9.src.rpm + repoid: rhel-9-for-s390x-baseos-source-rpms + size: 677223 + checksum: sha256:6d334a90bcbc270ee691183624e5664fdbe7dbf2d4a47319e6c75860e16abd43 + name: libksba + evr: 1.5.1-7.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/l/libpipeline-1.5.3-4.el9.src.rpm repoid: rhel-9-for-s390x-baseos-source-rpms size: 1006052 @@ -8895,6 +9282,12 @@ arches: checksum: sha256:6ae71ec17624d7e1e0565a6dc4cff9cb7b88b5bf412d37744703f5a3b5a8a00b name: nghttp2 evr: 1.43.0-6.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/n/npth-1.6-8.el9.src.rpm + repoid: rhel-9-for-s390x-baseos-source-rpms + size: 314570 + checksum: sha256:3d0685cc559f0af453b6b3ace61944dec9b9cb090695e4de5f5579da7b35b750 + name: npth + evr: 1.6-8.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/o/openldap-2.6.8-4.el9.src.rpm repoid: rhel-9-for-s390x-baseos-source-rpms size: 6548889 @@ -9069,6 +9462,12 @@ arches: checksum: sha256:74090e1b1b24041da4c39f8e04114722575564f54bd1c43162884bcebc1aecaf name: texinfo evr: 6.7-15.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/t/tpm2-tss-3.2.3-1.el9.src.rpm + repoid: rhel-9-for-s390x-baseos-source-rpms + size: 1660943 + checksum: sha256:11c9b6951d6823d120d310243f500f78ce13f9e206134309692e4a761294f3b9 + name: tpm2-tss + evr: 3.2.3-1.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/s390x/baseos/source/SRPMS/Packages/t/tzdata-2025c-1.el9.src.rpm repoid: rhel-9-for-s390x-baseos-source-rpms size: 915004 @@ -9940,6 +10339,13 @@ arches: name: policycoreutils-python-utils evr: 3.6-3.el9 sourcerpm: policycoreutils-3.6-3.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/appstream/os/Packages/p/popt-devel-1.18-8.el9.x86_64.rpm + repoid: rhel-9-for-x86_64-appstream-rpms + size: 27856 + checksum: sha256:ffe8c908ed6f15799bed08e8bfe887b73826b731eef8895d25f8cba7c0c459fe + name: popt-devel + evr: 1.18-8.el9 + sourcerpm: popt-1.18-8.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/appstream/os/Packages/p/python-unversioned-command-3.9.25-3.el9_7.noarch.rpm repoid: rhel-9-for-x86_64-appstream-rpms size: 15791 @@ -9982,6 +10388,13 @@ arches: name: python3-policycoreutils evr: 3.6-3.el9 sourcerpm: policycoreutils-3.6-3.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/appstream/os/Packages/r/rpm-devel-4.16.1.3-39.el9.x86_64.rpm + repoid: rhel-9-for-x86_64-appstream-rpms + size: 86861 + checksum: sha256:0cf2a9438706f99f8fb87d6807da3279780a6395d490cf611f15d59bb07edb1c + name: rpm-devel + evr: 4.16.1.3-39.el9 + sourcerpm: rpm-4.16.1.3-39.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/appstream/os/Packages/s/scl-utils-2.0.3-4.el9.x86_64.rpm repoid: rhel-9-for-x86_64-appstream-rpms size: 42223 @@ -10045,6 +10458,13 @@ arches: name: alternatives evr: 1.24-2.el9 sourcerpm: chkconfig-1.24-2.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/a/attr-2.5.1-3.el9.x86_64.rpm + repoid: rhel-9-for-x86_64-baseos-rpms + size: 66700 + checksum: sha256:49f7baeb53e07a4b9b5739e36932f17f014abb765b3fa6c0c0f8af6a8ebf4d9b + name: attr + evr: 2.5.1-3.el9 + sourcerpm: attr-2.5.1-3.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/a/audit-libs-3.1.5-7.el9.x86_64.rpm repoid: rhel-9-for-x86_64-baseos-rpms size: 121610 @@ -10227,6 +10647,13 @@ arches: name: expat evr: 2.5.0-5.el9_7.1 sourcerpm: expat-2.5.0-5.el9_7.1.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/f/file-libs-5.39-16.el9.x86_64.rpm + repoid: rhel-9-for-x86_64-baseos-rpms + size: 606802 + checksum: sha256:71787d11e020a5dc14eb1a74eb4532a95e5806e6d50af6275f4cac5eb9d0d3a4 + name: file-libs + evr: 5.39-16.el9 + sourcerpm: file-5.39-16.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/f/filesystem-3.16-5.el9.x86_64.rpm repoid: rhel-9-for-x86_64-baseos-rpms size: 5003807 @@ -10290,6 +10717,13 @@ arches: name: gmp evr: 1:6.2.0-13.el9 sourcerpm: gmp-6.2.0-13.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/g/gnupg2-2.3.3-5.el9_7.x86_64.rpm + repoid: rhel-9-for-x86_64-baseos-rpms + size: 2643700 + checksum: sha256:03ff58d6f0fd39f3575c830610488d1efd9405ddf8410f78deffdd89f932ecb4 + name: gnupg2 + evr: 2.3.3-5.el9_7 + sourcerpm: gnupg2-2.3.3-5.el9_7.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/g/gnutls-3.8.3-9.el9.x86_64.rpm repoid: rhel-9-for-x86_64-baseos-rpms size: 1125893 @@ -10318,6 +10752,13 @@ arches: name: gzip evr: 1.12-1.el9 sourcerpm: gzip-1.12-1.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/i/ima-evm-utils-1.6.2-2.el9.x86_64.rpm + repoid: rhel-9-for-x86_64-baseos-rpms + size: 73667 + checksum: sha256:99c9e9234ecf55e54ad3271dfa4d80681574995420cbde946a3fa2a491b0c08a + name: ima-evm-utils + evr: 1.6.2-2.el9 + sourcerpm: ima-evm-utils-1.6.2-2.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/i/info-6.7-15.el9.x86_64.rpm repoid: rhel-9-for-x86_64-baseos-rpms size: 233806 @@ -10339,6 +10780,13 @@ arches: name: json-c evr: 0.14-11.el9 sourcerpm: json-c-0.14-11.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/k/keyutils-1.6.3-1.el9.x86_64.rpm + repoid: rhel-9-for-x86_64-baseos-rpms + size: 79682 + checksum: sha256:756fb606dfbf6c6f92fcd3316ba902b5e09232102cb6371d9bccd983b8d4bbdf + name: keyutils + evr: 1.6.3-1.el9 + sourcerpm: keyutils-1.6.3-1.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/k/keyutils-libs-1.6.3-1.el9.x86_64.rpm repoid: rhel-9-for-x86_64-baseos-rpms size: 34363 @@ -10381,6 +10829,13 @@ arches: name: libarchive evr: 3.5.3-6.el9_6 sourcerpm: libarchive-3.5.3-6.el9_6.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/l/libassuan-2.5.5-3.el9.x86_64.rpm + repoid: rhel-9-for-x86_64-baseos-rpms + size: 72450 + checksum: sha256:9ba40981a8ea3d51a689a41c2d404bc8d127c6788bc3ae84cefcd5bd3e49cf66 + name: libassuan + evr: 2.5.5-3.el9 + sourcerpm: libassuan-2.5.5-3.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/l/libatomic-11.5.0-11.el9.x86_64.rpm repoid: rhel-9-for-x86_64-baseos-rpms size: 23219 @@ -10528,6 +10983,13 @@ arches: name: libidn2 evr: 2.3.0-7.el9 sourcerpm: libidn2-2.3.0-7.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/l/libksba-1.5.1-7.el9.x86_64.rpm + repoid: rhel-9-for-x86_64-baseos-rpms + size: 160847 + checksum: sha256:0a6410250b9cbb346a33a5dec3a5ae83ebb7a32bf953b036c2d244e6d40d75a0 + name: libksba + evr: 1.5.1-7.el9 + sourcerpm: libksba-1.5.1-7.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/l/libmount-2.37.4-21.el9_7.x86_64.rpm repoid: rhel-9-for-x86_64-baseos-rpms size: 141779 @@ -10759,6 +11221,13 @@ arches: name: nettle evr: 3.10.1-1.el9 sourcerpm: nettle-3.10.1-1.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/n/npth-1.6-8.el9.x86_64.rpm + repoid: rhel-9-for-x86_64-baseos-rpms + size: 27653 + checksum: sha256:3e044d8534970034063e6445a142780bbe9d37f5e75b98f8788ade5470a32ab6 + name: npth + evr: 1.6-8.el9 + sourcerpm: npth-1.6-8.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/o/openldap-2.6.8-4.el9.x86_64.rpm repoid: rhel-9-for-x86_64-baseos-rpms size: 296805 @@ -10976,6 +11445,13 @@ arches: name: rpm evr: 4.16.1.3-39.el9 sourcerpm: rpm-4.16.1.3-39.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/r/rpm-build-libs-4.16.1.3-39.el9.x86_64.rpm + repoid: rhel-9-for-x86_64-baseos-rpms + size: 90277 + checksum: sha256:6c123b0927b49bd170d8fd24e6b5b8f58422697ae1bff790cf39355754ae48a1 + name: rpm-build-libs + evr: 4.16.1.3-39.el9 + sourcerpm: rpm-4.16.1.3-39.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/r/rpm-libs-4.16.1.3-39.el9.x86_64.rpm repoid: rhel-9-for-x86_64-baseos-rpms size: 314790 @@ -10983,6 +11459,13 @@ arches: name: rpm-libs evr: 4.16.1.3-39.el9 sourcerpm: rpm-4.16.1.3-39.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/r/rpm-sign-libs-4.16.1.3-39.el9.x86_64.rpm + repoid: rhel-9-for-x86_64-baseos-rpms + size: 19989 + checksum: sha256:f1edcc945ca57c73c4cb088243b99443bff9c6c69ffe3113c36023e28bb21e5c + name: rpm-sign-libs + evr: 4.16.1.3-39.el9 + sourcerpm: rpm-4.16.1.3-39.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/s/sed-4.8-9.el9.x86_64.rpm repoid: rhel-9-for-x86_64-baseos-rpms size: 316395 @@ -11053,6 +11536,13 @@ arches: name: tcl evr: 1:8.6.10-7.el9 sourcerpm: tcl-8.6.10-7.el9.src.rpm + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/t/tpm2-tss-3.2.3-1.el9.x86_64.rpm + repoid: rhel-9-for-x86_64-baseos-rpms + size: 621714 + checksum: sha256:b1f148136e6cf67ac5f86a601d41a1b2798e7b5ef32e684358987d77c9ed424b + name: tpm2-tss + evr: 3.2.3-1.el9 + sourcerpm: tpm2-tss-3.2.3-1.el9.src.rpm - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/os/Packages/t/tzdata-2025c-1.el9.noarch.rpm repoid: rhel-9-for-x86_64-baseos-rpms size: 925360 @@ -11601,6 +12091,12 @@ arches: checksum: sha256:29a0e23a89d0f1ba640a694688699e1c765c4f5793d9f9c0642a97aa54179664 name: expat evr: 2.5.0-5.el9_7.1 + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/f/file-5.39-16.el9.src.rpm + repoid: rhel-9-for-x86_64-baseos-source-rpms + size: 1003666 + checksum: sha256:e8261cbcd55b85efdcd12ce1a2c6e63a72c64c872d618de4ba24557a1fda63c0 + name: file + evr: 5.39-16.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/f/filesystem-3.16-5.el9.src.rpm repoid: rhel-9-for-x86_64-baseos-source-rpms size: 20486 @@ -11643,6 +12139,12 @@ arches: checksum: sha256:d0d8a795eea9ae555da63fbcfc3575425e86bb7e96d117b9ae2785b4f5e82f7c name: gmp evr: 1:6.2.0-13.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/g/gnupg2-2.3.3-5.el9_7.src.rpm + repoid: rhel-9-for-x86_64-baseos-source-rpms + size: 7623034 + checksum: sha256:88d0f8bfaf376b52de7a56de608af034ceae7a42ca20e32166bc79199cf2234d + name: gnupg2 + evr: 2.3.3-5.el9_7 - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/g/gnutls-3.8.3-9.el9.src.rpm repoid: rhel-9-for-x86_64-baseos-source-rpms size: 8601327 @@ -11667,6 +12169,12 @@ arches: checksum: sha256:a05f582ec42e89258ee5e10af96dee4300bcb2a6a69a76bfb5b46f79e6a6a47b name: gzip evr: 1.12-1.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/i/ima-evm-utils-1.6.2-2.el9.src.rpm + repoid: rhel-9-for-x86_64-baseos-source-rpms + size: 179312 + checksum: sha256:645080ac16b4cc7d858b419642ae8a606d7f637e721a6eb7be5203bc3eb6c995 + name: ima-evm-utils + evr: 1.6.2-2.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/j/jansson-2.14-1.el9.src.rpm repoid: rhel-9-for-x86_64-baseos-source-rpms size: 447607 @@ -11715,6 +12223,12 @@ arches: checksum: sha256:4e936a7bb7e593fab81247b88b97fc07a03bf24c4c3ed8188060dcf7af83b348 name: libarchive evr: 3.5.3-6.el9_6 + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/l/libassuan-2.5.5-3.el9.src.rpm + repoid: rhel-9-for-x86_64-baseos-source-rpms + size: 586136 + checksum: sha256:dcc858194f9497ec86960651fa76413a9c731f94423d67298e8e3c0c7a5e7806 + name: libassuan + evr: 2.5.5-3.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/l/libcap-2.48-10.el9.src.rpm repoid: rhel-9-for-x86_64-baseos-source-rpms size: 200754 @@ -11787,6 +12301,12 @@ arches: checksum: sha256:c27f21437a76f07b0ee9f4f7e61d621cbb9c483c14563b31e55e320d19df99a6 name: libidn2 evr: 2.3.0-7.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/l/libksba-1.5.1-7.el9.src.rpm + repoid: rhel-9-for-x86_64-baseos-source-rpms + size: 677223 + checksum: sha256:6d334a90bcbc270ee691183624e5664fdbe7dbf2d4a47319e6c75860e16abd43 + name: libksba + evr: 1.5.1-7.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/l/libpipeline-1.5.3-4.el9.src.rpm repoid: rhel-9-for-x86_64-baseos-source-rpms size: 1006052 @@ -11925,6 +12445,12 @@ arches: checksum: sha256:6ae71ec17624d7e1e0565a6dc4cff9cb7b88b5bf412d37744703f5a3b5a8a00b name: nghttp2 evr: 1.43.0-6.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/n/npth-1.6-8.el9.src.rpm + repoid: rhel-9-for-x86_64-baseos-source-rpms + size: 314570 + checksum: sha256:3d0685cc559f0af453b6b3ace61944dec9b9cb090695e4de5f5579da7b35b750 + name: npth + evr: 1.6-8.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/o/openldap-2.6.8-4.el9.src.rpm repoid: rhel-9-for-x86_64-baseos-source-rpms size: 6548889 @@ -12099,6 +12625,12 @@ arches: checksum: sha256:74090e1b1b24041da4c39f8e04114722575564f54bd1c43162884bcebc1aecaf name: texinfo evr: 6.7-15.el9 + - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/t/tpm2-tss-3.2.3-1.el9.src.rpm + repoid: rhel-9-for-x86_64-baseos-source-rpms + size: 1660943 + checksum: sha256:11c9b6951d6823d120d310243f500f78ce13f9e206134309692e4a761294f3b9 + name: tpm2-tss + evr: 3.2.3-1.el9 - url: https://cdn.redhat.com/content/dist/rhel9/9/x86_64/baseos/source/SRPMS/Packages/t/tzdata-2025c-1.el9.src.rpm repoid: rhel-9-for-x86_64-baseos-source-rpms size: 915004 From 9ab7fd230bc9f1c910f7eb1ca3238db5e97683f6 Mon Sep 17 00:00:00 2001 From: Olivier Valentin Date: Thu, 26 Feb 2026 14:26:15 +0100 Subject: [PATCH 8/8] [konflux] Keep tbb and c-ares They are rpm dependencies downstream, but not upstream. --- collector/container/konflux.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collector/container/konflux.Dockerfile b/collector/container/konflux.Dockerfile index a605e4b1ac..501a010219 100644 --- a/collector/container/konflux.Dockerfile +++ b/collector/container/konflux.Dockerfile @@ -90,7 +90,7 @@ RUN microdnf -y install --nobest \ c-ares \ elfutils-libelf && \ microdnf -y clean all && \ - rpm --verbose -e --nodeps $(rpm -qa $(/orphaner bash curl elfutils-libelf openssl-libs libuuid libstdc++ libcurl-minimal)) && \ + rpm --verbose -e --nodeps $(rpm -qa $(/orphaner bash curl elfutils-libelf tbb c-ares openssl-libs libcap-ng libuuid libstdc++ libcurl-minimal)) && \ rm -rf /var/cache/dnf /var/cache/yum /orphaner ARG COLLECTOR_TAG