Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mkimage-profiles
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ximper Linux
mkimage-profiles
Commits
ee9b2f7b
Commit
ee9b2f7b
authored
Feb 12, 2026
by
Roman Alifanov
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'cleanup-automark-0.9.4' into 'ximper_0.9.4'
cleanup: исправить очистку пакетов из Live при установке See merge request
!7
parents
448343f3
ae350138
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
170 additions
and
9 deletions
+170
-9
ximper.mk
conf.d/ximper.mk
+2
-0
README
features.in/cleanup/README
+11
-0
config.mk
features.in/cleanup/config.mk
+2
-0
generate.mk
features.in/cleanup/generate.mk
+31
-0
89-cleanup-live-preinstall
...n/cleanup/live/image-scripts.d/89-cleanup-live-preinstall
+25
-0
90-cleanup-live-install-pkgs
...cleanup/live/image-scripts.d/90-cleanup-live-install-pkgs
+99
-9
No files found.
conf.d/ximper.mk
View file @
ee9b2f7b
...
@@ -20,6 +20,8 @@ use/ximper/cleanup:
...
@@ -20,6 +20,8 @@ use/ximper/cleanup:
@$(call add,CLEANUP_BASE_PACKAGES,branding-etersoft-ximper-alterator)
@$(call add,CLEANUP_BASE_PACKAGES,branding-etersoft-ximper-alterator)
@$(call add,CLEANUP_BASE_PACKAGES,'alterator*' rpm-macros-alterator)
@$(call add,CLEANUP_BASE_PACKAGES,'alterator*' rpm-macros-alterator)
@$(call add,CLEANUP_BASE_PACKAGES,'guile*' libvhttpd autologin-sh-functions)
@$(call add,CLEANUP_BASE_PACKAGES,'guile*' libvhttpd autologin-sh-functions)
@$(call add,CLEANUP_AUTOMARK_PACKAGES,$$(LIVE_PACKAGES))
@$(call add,CLEANUP_AUTOMARK_LISTS,$$(LIVE_LISTS))
use/ximper/cleanup/x11: \
use/ximper/cleanup/x11: \
use/ximper/cleanup
use/ximper/cleanup
...
...
features.in/cleanup/README
View file @
ee9b2f7b
...
@@ -14,5 +14,16 @@ CLEANUP_BASE_PACKAGES.
...
@@ -14,5 +14,16 @@ CLEANUP_BASE_PACKAGES.
Для удаления пакетов только из livecd используйте переменную
Для удаления пакетов только из livecd используйте переменную
CLEANUP_LIVE_PACKAGES.
CLEANUP_LIVE_PACKAGES.
Для пакетов, которые следует пометить как auto-installed при
установке с livecd (будут удалены через autoremove, если не нужны
пользователю), используйте переменную CLEANUP_AUTOMARK_PACKAGES.
Это безопаснее чем CLEANUP_BASE_PACKAGES: пакет не удалится,
если он требуется выбранным пользователем группам.
Для указания списков пакетов (из pkg.in/lists/), которые должны быть
помечены как auto-installed, используйте CLEANUP_AUTOMARK_LISTS.
Пакеты из этих списков будут автоматически преобразованы в имена
и добавлены к CLEANUP_AUTOMARK_PACKAGES при сборке образа.
CAUTION: также удаляет rpm, apt и базу по пакетам из livecd,
CAUTION: также удаляет rpm, apt и базу по пакетам из livecd,
если в него не был добавлен инсталятор!
если в него не был добавлен инсталятор!
features.in/cleanup/config.mk
View file @
ee9b2f7b
...
@@ -5,6 +5,8 @@ use/cleanup:
...
@@ -5,6 +5,8 @@ use/cleanup:
@$(call xport,CLEANUP_PACKAGES)
@$(call xport,CLEANUP_PACKAGES)
@$(call xport,CLEANUP_BASE_PACKAGES)
@$(call xport,CLEANUP_BASE_PACKAGES)
@$(call xport,CLEANUP_LIVE_PACKAGES)
@$(call xport,CLEANUP_LIVE_PACKAGES)
@$(call xport,CLEANUP_AUTOMARK_PACKAGES)
@$(call xport,CLEANUP_AUTOMARK_LISTS)
use/cleanup/live-no-cleanupdb:
use/cleanup/live-no-cleanupdb:
@$(call set,LIVE_NO_CLEANUPDB,yes)
@$(call set,LIVE_NO_CLEANUPDB,yes)
...
...
features.in/cleanup/generate.mk
0 → 100644
View file @
ee9b2f7b
# Convert CLEANUP_AUTOMARK_LISTS to packages and append to distcfg.mk
ifneq (,$(BUILDDIR))
include $(BUILDDIR)/distcfg.mk
# Use source pkg.in/lists/ directly (pkg.in is processed after features.in)
LIST_FILES := $(CLEANUP_AUTOMARK_LISTS:%=$(MKIMAGE_PROFILES)/pkg.in/lists/%)
all: debug
@if [ -n "$(LIST_FILES)" ]; then \
pkgs="$$(for f in $(LIST_FILES); do \
[ -f "$$f" ] && cat "$$f" && echo; \
done \
| grep -v '^[[:space:]]*[#]' \
| tr -s '[:space:]' '\n' \
| grep -v '^$$' \
| sort -u \
| xargs)"; \
if [ -n "$$pkgs" ]; then \
echo "CLEANUP_AUTOMARK_PACKAGES += $$pkgs" >> $(BUILDDIR)/distcfg.mk; \
fi; \
fi
debug:
@if [ -n "$(DEBUG)" ]; then \
echo "** CLEANUP_AUTOMARK_LISTS: $(CLEANUP_AUTOMARK_LISTS)"; \
echo "** LIST_FILES: $(LIST_FILES)"; \
fi
endif
features.in/cleanup/live/image-scripts.d/89-cleanup-live-preinstall
0 → 100755
View file @
ee9b2f7b
#!/bin/sh -efu
### create a preinstall hook to mark live-only packages as auto-installed
[
-n
"
$GLOBAL_CLEANUP_AUTOMARK_PACKAGES
"
]
||
exit
0
[
-x
/usr/sbin/install2
]
||
[
-x
/usr/libexec/install2/install2
]
||
exit
0
if
[
-n
"
$GLOBAL_VERBOSE
"
]
;
then
echo
"** GLOBAL_CLEANUP_AUTOMARK_PACKAGES:
$GLOBAL_CLEANUP_AUTOMARK_PACKAGES
"
fi
>
&2
HOOKDIR
=
"/usr/lib/alterator/hooks/pkg-preinstall.d"
mkdir
-p
"
$HOOKDIR
"
SCRIPT
=
"
$HOOKDIR
/01-mark-live-packages-auto"
cat
>
"
$SCRIPT
"
<<
EOF
#!/bin/sh -efu
# Mark live-only packages as auto-installed before pkg-install runs.
# Only real packages will be marked; virtual packages are ignored by apt-mark
# and handled separately in postinstall.
apt-mark auto
$GLOBAL_CLEANUP_AUTOMARK_PACKAGES
||:
EOF
chmod
+x
"
$SCRIPT
"
features.in/cleanup/live/image-scripts.d/90-cleanup-live-install-pkgs
View file @
ee9b2f7b
#!/bin/sh -efu
#!/bin/sh -efu
### create a postinstall script to
drop temporarily needed packages
### create a postinstall script to
handle cleanup
if
[
-n
"
$GLOBAL_VERBOSE
"
]
;
then
if
[
-n
"
$GLOBAL_VERBOSE
"
]
;
then
echo
"** GLOBAL_CLEANUP_PACKAGES:
$GLOBAL_CLEANUP_PACKAGES
"
echo
"** GLOBAL_CLEANUP_PACKAGES:
$GLOBAL_CLEANUP_PACKAGES
"
echo
"** GLOBAL_CLEANUP_BASE_PACKAGES:
$GLOBAL_CLEANUP_BASE_PACKAGES
"
echo
"** GLOBAL_CLEANUP_BASE_PACKAGES:
$GLOBAL_CLEANUP_BASE_PACKAGES
"
echo
"** GLOBAL_CLEANUP_AUTOMARK_PACKAGES:
$GLOBAL_CLEANUP_AUTOMARK_PACKAGES
"
fi
>
&2
fi
>
&2
[
-n
"
$GLOBAL_CLEANUP_PACKAGES
"
]
||
[
-n
"
$GLOBAL_CLEANUP_PACKAGES
"
]
||
[
-n
"
$GLOBAL_CLEANUP_BASE_PACKAGES
"
]
||
exit
0
[
-n
"
$GLOBAL_CLEANUP_BASE_PACKAGES
"
]
||
[
-n
"
$GLOBAL_CLEANUP_AUTOMARK_PACKAGES
"
]
||
exit
0
[
-x
/usr/sbin/install2
]
||
[
-x
/usr/libexec/install2/install2
]
||
exit
0
[
-x
/usr/sbin/install2
]
||
[
-x
/usr/libexec/install2/install2
]
||
exit
0
...
@@ -15,19 +17,107 @@ CLEANUP_PACKAGES="$GLOBAL_CLEANUP_PACKAGES $GLOBAL_CLEANUP_BASE_PACKAGES"
...
@@ -15,19 +17,107 @@ CLEANUP_PACKAGES="$GLOBAL_CLEANUP_PACKAGES $GLOBAL_CLEANUP_BASE_PACKAGES"
SCRIPT
=
"/usr/share/install2/postinstall.d/01-remove-pkgs"
SCRIPT
=
"/usr/share/install2/postinstall.d/01-remove-pkgs"
cat
>
"
$SCRIPT
"
<<
EOF
cat
>
"
$SCRIPT
"
<<
'
OUTER_EOF
'
#!/bin/sh -efu
#!/bin/sh -efu
. install2-init-functions
. install2-init-functions
# don't override the script start message on the same line
pkg_list_file="/var/lib/installer-alterator-pkg/pkg-list"
echo "removing
$CLEANUP_PACKAGES
"
lists_dir="/var/lib/install3/lists"
# Get packages from user-selected groups
get_selected_packages() {
local selected_groups=""
if [ -r "
$pkg_list_file
" ]; then
selected_groups="
$(
cat
"
$pkg_list_file
"
|
tr
';'
' '
)
"
fi
local pkgs=""
for group in
$selected_groups
; do
local list_file="
$lists_dir
/
$group
"
if [ -f "
$list_file
" ]; then
local group_pkgs="
$(
cat
"
$list_file
"
|
grep
-v
'^[[:space:]]*#'
|
grep
-v
'^[[:space:]]*$'
| xargs
)
"
pkgs="
$pkgs
$group_pkgs
"
fi
done
echo "
$pkgs
"
}
# Resolve package to real name(s). If virtual - resolve via whatprovides,
# if real - return as is. Returns empty if package not found.
resolve_to_real() {
local pkg="
$1
"
# If it's a real installed package, return it
if exec_chroot rpmquery "
$pkg
" >/dev/null 2>&1; then
echo "
$pkg
"
return
fi
# If it's a virtual package, resolve to real provider(s)
exec_chroot rpmquery --whatprovides "
$pkg
" --qf '%{NAME}\n' 2>/dev/null | sort -u | xargs
}
OUTER_EOF
# Add the main logic with variable substitution
cat
>>
"
$SCRIPT
"
<<
EOF
# All packages from CLEANUP_AUTOMARK (real ones already marked auto, virtual ones - not)
all_automark_packages="
$GLOBAL_CLEANUP_AUTOMARK_PACKAGES
"
# Get user-selected packages (may contain virtual names)
selected_packages="\
$(
get_selected_packages
)
"
echo "User selected packages: \
$selected_packages
"
# Resolve selected packages to real names for comparison
selected_resolved=""
for pkg in \
$selected_packages
; do
resolved="\
$(
resolve_to_real
"
\$
pkg"
)
"
if [ -n "\
$resolved
" ]; then
selected_resolved="\
$selected_resolved
\
$resolved
"
fi
done
echo "User selected packages (resolved to real): \
$selected_resolved
"
# remove temporary packages from the installed system
# Find virtual packages whose REAL providers were NOT selected by user.
list="\
$(
exec_chroot rpmquery
-a
--qf
=
'%{NAME}\\n'
$CLEANUP_PACKAGES
)
"
# WORKAROUND: apt-mark doesn't handle virtual packages, so we resolve them
# manually here. Remove this when apt-mark supports virtual packages.
virtual_to_remove=""
for pkg in \
$all_automark_packages
; do
# Skip real packages - already handled by 89-preinstall and alterator
if exec_chroot rpmquery "\
$pkg
" >/dev/null 2>&1; then
continue
fi
# Only virtual packages reach here - resolve to real provider(s)
resolved="\
$(
exec_chroot rpmquery
--whatprovides
"
\$
pkg"
--qf
'%{NAME}\\n'
2>/dev/null |
sort
-u
| xargs
)
"
[ -n "\
$resolved
" ] || continue
# Check each resolved real package
for real_pkg in \
$resolved
; do
# Skip if real package was selected by user (after resolution)
if echo " \
$selected_resolved
" | grep -qF " \
$real_pkg
"; then
continue
fi
virtual_to_remove="\
$virtual_to_remove
\
$real_pkg
"
done
done
# Remove duplicates
virtual_to_remove="\
$(
echo
\$
virtual_to_remove |
tr
' '
'\\n'
|
sort
-u
| xargs
)
"
# Mark unselected virtual packages as auto and let autoremove handle them
if [ -n "\
$virtual_to_remove
" ]; then
echo "Marking unselected packages as auto: \
$virtual_to_remove
"
exec_chroot apt-mark auto \
$virtual_to_remove
||:
fi
# Remove temporary packages
echo "removing
$CLEANUP_PACKAGES
"
list="\
$(
exec_chroot rpmquery
-a
--qf
=
'%{NAME}\\n'
$CLEANUP_PACKAGES
2>/dev/null | xargs
)
"
if [ -n "\
$list
" ]; then
if [ -n "\
$list
" ]; then
exec_chroot apt-get remove -f -y -- \
$list
exec_chroot apt-get remove -f -y -- \
$list
||:
exec_chroot apt-get autoremove -y
fi
fi
# Final cleanup - remove orphaned auto packages
exec_chroot apt-get autoremove -y
EOF
EOF
chmod
+x
"
$SCRIPT
"
chmod
+x
"
$SCRIPT
"
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment