Fix firmware cleanup - more.

Some follow-up checks of recent firmware fixes caused me to realize
we've mixxed up the firmware cleanup even more and our defensiveness
on the removal resulted in some confusion.

Ultimately, I guess this is... my second attempt to improve this, but
also attempt to heavily restrict our automatic glob expansion usage.

2025-11-12 18:58:43.824 | + rm -rf /usr/lib/firmware/vicam
2025-11-12 18:58:43.824 | + for item in ${IPA_REMOVE_FIRMWARE//,/ }
2025-11-12 18:58:43.824 | + [[ iwlwifi != '' ]]
2025-11-12 18:58:43.824 | + [[ iwlwifi =~ / ]]
2025-11-12 18:58:43.824 | + rm -rf /usr/lib/firmware/iwlwifi
2025-11-12 18:58:43.824 | + for item in ${IPA_REMOVE_FIRMWARE//,/ }
2025-11-12 18:58:43.824 | + [[ intel/ibt != '' ]]
2025-11-12 18:58:43.824 | + [[ intel/ibt =~ / ]]
2025-11-12 18:58:43.824 | + rm -r -f '/usr/lib/firmware/intel/ibt*'

The net result before this change was the IPA Centos10 build initramfs
files were running around 533 MB, and with this change the file sizes
are down to 464MB.

Change-Id: Ie420a192fbf9ed2fa246c31d799078186a5ca8e7
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
This commit is contained in:
Julia Kreger
2025-11-12 11:45:21 -08:00
parent 1923c52fbc
commit 34c953278f
2 changed files with 41 additions and 9 deletions

View File

@@ -12,17 +12,40 @@ rm -rf /tmp/ironic-python-agent
# below will keep it from erroring.
KNOWN_FIRMWARE_PATH="/lib/firmware/ /usr/lib/firmware/"
for folder in $KNOWN_FIRMWARE_PATH; do
if [[ ! -d $folder ]]; then
echo "Skipping firmware removal for $folder as it is not found."
fi
for item in ${IPA_REMOVE_FIRMWARE//,/ }; do
# Attempt removal of item, but don't error
# NOTE(TheJulia): The original idea here has been delete whole folders
# but the patterns have shifted and evolved, and it we need to remove
# files in the main folder as well, or subsections their of. Also, due
# to perception of risk on the build process, the code is intended
# to be *very* defensive here.
# tl;dr Attempt removal of item, but don't error
# if it is not present already.
if [[ "$item" != "" ]] && [[ "$item" =~ "/" ]]; then
# We're deleting targetted contents in a folder,
# and not an entire folder. Since we're checking for an
# an empty string, we should be fine letting it do the
# expansion.
rm -r -f $folder$item*
else
rm -rf $folder$item || true
if [[ "$item" != "" ]]; then
if [[ "$item" =~ "/" ]]; then
# We're deleting targetted contents in a folder,
# and not an entire folder. Since we're checking for an
# an empty string, we should be fine letting it do the
# expansion.
rm -r -f $folder$item*
elif [[ -d "$folder$item" ]]; then
# This was the original deletion code path where we
# are attempting to delete a folder.
# This is normally not handled with the glob expansion
# expansion even though it could be due to management
# the host's contents as it is constructed.
rm -rf $folder$item || true
elif [[ $(ls $folder$item* | wc -l) -gt 0 ]]; then
# In this case, we have to use glob expansion because we
# have objects which are only available via glob expansion.
# NOTE(TheJulia): Fun factoid, these folders can have
# subfolders as well, and recursive is thus required becuase
# otherwise rm errors and aborts the deletion.
rm -rf $folder$item*
fi
fi
done
done

View File

@@ -0,0 +1,9 @@
---
fixes:
- |
Fixes firmware cleanup to be a bit more defensive and also be more
open to allowing for "glob expansion" as it relates to cleaning up files.
Ultimately this change fixes firmware cleanup so remnents are not left
in the image where previously some artifacts were not deleted due to
prior defensiveness in the cleanup logic. The net result is smaller
images for booting IPA.