pkgpriorities: pinned packages feature
This one might probably change into core functionality but right now it should help when you get not the branding, init system, or whatever alternative you do _not_ need. See-also: https://bugzilla.altlinux.org/show_bug.cgi?id=30806
This commit is contained in:
parent
4b212b6714
commit
4298315d0c
@ -6,9 +6,11 @@
|
||||
|
||||
# NB: "mysterious" conflicts if BASE_BOOTLOADER is empty
|
||||
|
||||
use/bootloader:
|
||||
use/bootloader: use/pkgpriorities
|
||||
@$(call add_feature)
|
||||
@$(call add,BASE_PACKAGES,alterator-$$(BASE_BOOTLOADER))
|
||||
@$(call add,PINNED_PACKAGES,alterator-$$(BASE_BOOTLOADER))
|
||||
@$(call add,PINNED_PACKAGES,installer-bootloader-$$(BASE_BOOTLOADER)-stage2)
|
||||
|
||||
use/bootloader/grub use/bootloader/lilo: use/bootloader/%: use/bootloader
|
||||
@$(call set,BASE_BOOTLOADER,$*)
|
||||
|
24
features.in/pkgpriorities/README
Normal file
24
features.in/pkgpriorities/README
Normal file
@ -0,0 +1,24 @@
|
||||
Эта фича врезается в `Makefile` субпрофилей и обеспечивает
|
||||
добавление записей в файл `$(PKGBOX)/aptbox/etc/apt/pkgpriorities`
|
||||
после инициализации чрута, но перед установкой пакетов.
|
||||
|
||||
Содержимое файла `pkgpriorities` формируется на основе списка
|
||||
`PINNED_PACKAGES`. Значение приоритета по умолчанию определяется
|
||||
переменной `PIN_PRIORITY`, в которую при инициализации фичи
|
||||
записывается `"Important"`. Переопределить значение приоритета можно
|
||||
отдельно для каждого пакета в списке, указав желаемый приоритет
|
||||
через двоеточие число после имени пакета. Например:
|
||||
|
||||
$(call add,PINNED_PACKAGES,my-package:Essential)
|
||||
|
||||
Используя `PINNED_PACKAGES` можно заранее определить выбор того или
|
||||
иного пакета для удовлетворения виртуальной зависимости.
|
||||
Если виртуальный пакет присутствует в основном списке пакетов для
|
||||
установки, а пакет его предоставляющий --- в этом списке, то
|
||||
вероятность его установки повышается согласно приоритету. Однако
|
||||
если виртуальный пакет не выбран для установки или приоритетный
|
||||
пакет отсутствует в репозитории, то сборка образа продолжится без
|
||||
изменений. Следовательно, с помощью списка `PINNED_PACKAGES` можно
|
||||
влиять на состав дистрибутива, но его содержание, в отличие от
|
||||
обыкновенных списков пакетов, имеет _рекомендательный_, а не
|
||||
обязательный характер.
|
4
features.in/pkgpriorities/config.mk
Normal file
4
features.in/pkgpriorities/config.mk
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
use/pkgpriorities:
|
||||
@$(call add_feature)
|
||||
@$(call set,PIN_PRIORITY,Important)
|
29
features.in/pkgpriorities/install2/lib/50-pkgpriorities.mk
Normal file
29
features.in/pkgpriorities/install2/lib/50-pkgpriorities.mk
Normal file
@ -0,0 +1,29 @@
|
||||
# NB: A copy of ../../live/lib/50-aptprefs.mk.
|
||||
# TODO: Manage things to make duplicate files unnecessary.
|
||||
|
||||
_IMAGE_APTBOX_ = $(WORKDIR)/chroot/$(WORKDIRNAME)/aptbox
|
||||
|
||||
# Add prerequisite to the `build-image` target of
|
||||
# $(MKIMAGE_PREFIX)/targets.mk.
|
||||
build-image: $(_IMAGE_APTBOX_)/etc/apt/pkgpriorities
|
||||
|
||||
_PINNED_PACKAGES_ = $(foreach pp,$(PINNED_PACKAGES),$(if $(findstring :,$(pp)),$(pp),$(pp):$(PIN_PRIORITY)))
|
||||
_PIN_PRIORITIES_ = $(sort $(foreach pp,$(_PINNED_PACKAGES_),$(lastword $(subst :, ,$(pp)))))
|
||||
_PKGPRIORITIES_ = $(subst \n ,\n,$(foreach pri,$(_PIN_PRIORITIES_),$(pri):$(patsubst %:$(pri),\n %,$(filter %:$(pri),$(_PINNED_PACKAGES_)))\n))
|
||||
|
||||
$(_IMAGE_APTBOX_)/etc/apt/pkgpriorities: prepare-image-workdir
|
||||
@echo -e '$(_PKGPRIORITIES_)' | sed -e 's/[[:space:]]\+$$//' >$@
|
||||
@if [ -s $@ ]; then \
|
||||
if grep -q '^\(APT::\)\?Dir::Etc::pkgpriorities[[:space:]]' \
|
||||
$(_IMAGE_APTBOX_)/etc/apt/apt.conf; \
|
||||
then \
|
||||
sed -i -e 's/\(Dir::Etc::pkgpriorities\)[[:space:]].*$$/\1 "$@";/g' \
|
||||
$(_IMAGE_APTBOX_)/etc/apt/apt.conf; \
|
||||
else \
|
||||
echo 'Dir::Etc::pkgpriorities "$@";' \
|
||||
>>$(_IMAGE_APTBOX_)/etc/apt/apt.conf; \
|
||||
fi; \
|
||||
echo "--- Package priorities ---" >&2; \
|
||||
cat $@ >&2; \
|
||||
echo "---" >&2; \
|
||||
fi
|
27
features.in/pkgpriorities/live/lib/50-pkgpriorities.mk
Normal file
27
features.in/pkgpriorities/live/lib/50-pkgpriorities.mk
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
_IMAGE_APTBOX_ = $(WORKDIR)/chroot/$(WORKDIRNAME)/aptbox
|
||||
|
||||
# Add prerequisite to the `build-image` target of
|
||||
# $(MKIMAGE_PREFIX)/targets.mk.
|
||||
build-image: $(_IMAGE_APTBOX_)/etc/apt/pkgpriorities
|
||||
|
||||
_PINNED_PACKAGES_ = $(foreach pp,$(PINNED_PACKAGES),$(if $(findstring :,$(pp)),$(pp),$(pp):$(PIN_PRIORITY)))
|
||||
_PIN_PRIORITIES_ = $(sort $(foreach pp,$(_PINNED_PACKAGES_),$(lastword $(subst :, ,$(pp)))))
|
||||
_PKGPRIORITIES_ = $(subst \n ,\n,$(foreach pri,$(_PIN_PRIORITIES_),$(pri):$(patsubst %:$(pri),\n %,$(filter %:$(pri),$(_PINNED_PACKAGES_)))\n))
|
||||
|
||||
$(_IMAGE_APTBOX_)/etc/apt/pkgpriorities: prepare-image-workdir
|
||||
@echo -e '$(_PKGPRIORITIES_)' | sed -e 's/[[:space:]]\+$$//' >$@
|
||||
@if [ -s $@ ]; then \
|
||||
if grep -q '^\(APT::\)\?Dir::Etc::pkgpriorities[[:space:]]' \
|
||||
$(_IMAGE_APTBOX_)/etc/apt/apt.conf; \
|
||||
then \
|
||||
sed -i -e 's/\(Dir::Etc::pkgpriorities\)[[:space:]].*$$/\1 "$@";/g' \
|
||||
$(_IMAGE_APTBOX_)/etc/apt/apt.conf; \
|
||||
else \
|
||||
echo 'Dir::Etc::pkgpriorities "$@";' \
|
||||
>>$(_IMAGE_APTBOX_)/etc/apt/apt.conf; \
|
||||
fi; \
|
||||
echo "--- Package priorities ---" >&2; \
|
||||
cat $@ >&2; \
|
||||
echo "---" >&2; \
|
||||
fi
|
Loading…
Reference in New Issue
Block a user