Commit ae7139f8 authored by Michael Shigorin's avatar Michael Shigorin

initial repo feature

We've got some parts of it in build-distro feature, and some went to dev feature for no real reason. But a bare installer might go without package base, and LiveCDs other than live-builder might find local repository useful given aufs2 root overlay. Now the overall scheme is more straightforward: - a distro: + asks that a package repo be included + cares to further add the packages to it - a repo feature: + pulls in sub/main for it to happen + provides genbasedir script to create repo metadata + supplements live feature with repo configuration
parent 7964bccb
# desktop distributions # desktop distributions
ifeq (distro,$(IMAGE_CLASS)) ifeq (distro,$(IMAGE_CLASS))
distro/desktop-base: distro/installer sub/main \ distro/desktop-base: distro/installer use/repo/main \
use/syslinux/ui-vesamenu use/x11/xorg use/bootloader/grub use/syslinux/ui-vesamenu use/x11/xorg use/bootloader/grub
distro/icewm: distro/desktop-base \ distro/icewm: distro/desktop-base \
......
...@@ -10,7 +10,7 @@ distro/live-systemd: distro/.base use/live/base use/systemd ...@@ -10,7 +10,7 @@ distro/live-systemd: distro/.base use/live/base use/systemd
distro/live-isomd5sum: distro/.base use/live/base use/isomd5sum distro/live-isomd5sum: distro/.base use/live/base use/isomd5sum
@$(call add,LIVE_PACKAGES,livecd-isomd5sum) @$(call add,LIVE_PACKAGES,livecd-isomd5sum)
distro/live-builder: distro/.base sub/main \ distro/live-builder: distro/.base use/repo/main \
use/live/base use/dev/mkimage use/power/acpi/button use/live/base use/dev/mkimage use/power/acpi/button
@$(call add,LIVE_LISTS,$(call tags,base && (server || builder))) @$(call add,LIVE_LISTS,$(call tags,base && (server || builder)))
@$(call add,LIVE_PACKAGES,livecd-tmpfs livecd-online-repo) @$(call add,LIVE_PACKAGES,livecd-tmpfs livecd-online-repo)
......
# server distributions # server distributions
ifeq (distro,$(IMAGE_CLASS)) ifeq (distro,$(IMAGE_CLASS))
distro/server-base: distro/installer sub/main \ distro/server-base: distro/installer use/repo/main \
use/syslinux/ui-menu use/memtest use/bootloader/grub use/syslinux/ui-menu use/memtest use/bootloader/grub
@$(call add,BASE_LISTS,server-base) @$(call add,BASE_LISTS,server-base)
......
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
# take the latter part # take the latter part
SUBDIRS = $(notdir $(SUBPROFILES)) SUBDIRS = $(notdir $(SUBPROFILES))
# "main" subprofile needs genbasedir
CHROOT_PACKAGES = apt-utils
BOOT_TYPE = isolinux BOOT_TYPE = isolinux
# Metadata/ needed only for installers (and not for e.g. syslinux.iso) # Metadata/ needed only for installers (and not for e.g. syslinux.iso)
......
#!/bin/sh -efu
# configure local image repository provided by sub/main
# TODO: some integration with sub/main to ensure that it is there
{
echo "# for real stuff you'll need full repo, see apt-repo"
echo "rpm file:/image ALTLinux main"
} > /etc/apt/sources.list.d/cdrom.list
Эта фича предназначена для конфигурирования репозиториев
в образе, включая генерацию хэшей и подключение к LiveCD.
На данный момент единственным таким репозиторием является
RPMS.main (создаваемый sub/main), но возможно добавление
addons, updates или иных по мере необходимости.
Результат -- каталог ALTLinux/base/ для копирования в образ.
use/repo:
@$(call add,FEATURES,repo)
use/repo/main: sub/main use/repo
# ../scripts.d/01-genbasedir needs that
CHROOT_PACKAGES += apt-utils
#!/bin/sh -efu
# configure package repository of the image (provided by sub/main);
# this script will be run iff both live and repo features are used
DIR=/etc/apt/sources.list.d
mkdir -p $DIR && {
echo "# for real stuff you'll need full repo, see apt-repo"
echo "rpm file:/image ALTLinux main"
} > $DIR/main.list
#!/bin/sh #!/bin/sh -efu
# FIXME: bring to common style
verbose() PREFIX=ALTLinux
{ cd "$WORKDIR/$PREFIX"
[ -z "$GLOBAL_VERBOSE" ] ||
echo >&2 "HOOK: 01-genbasedir: $*"
}
verbose started COMPS="$(find -mindepth 1 -maxdepth 1 -type d -name 'RPMS.*' -printf '%f\n' |
[ -d "$WORKDIR/ALTLinux" ] || exit 0
cd "$WORKDIR/ALTLinux"
comps="$(find -mindepth 1 -maxdepth 1 -type d -name 'RPMS.*' -printf '%f\n' |
sed 's/^RPMS\.//')" sed 's/^RPMS\.//')"
verbose "comps=$comps" [ -z "$GLOBAL_VERBOSE" ] || echo "** COMPS=$COMPS" >&2
[ -n "$COMPS" ] || exit 1
[ -n "$comps" ] || exit 1
genbasedir \ genbasedir \
--topdir="$WORKDIR" \ --topdir="$WORKDIR" \
--architecture="$INFO_ARCH" \ --no-oldhashfile \
--no-oldhashfile \ --partial \
--partial \ --xz \
--xz \ --bz2 \
--bz2 \
--create \ --create \
--notautomatic=false \ --notautomatic=false \
${INFO_NAME:+--archive="$INFO_NAME"} \ ${INFO_ARCH:+--architecture="$INFO_ARCH"} \
${INFO_VERSION:+--version="$INFO_VERSION"} \ ${INFO_NAME:+--archive="$INFO_NAME"} \
${INFO_ORIGIN:+--origin="$INFO_ORIGIN"} \ ${INFO_VERSION:+--version="$INFO_VERSION"} \
${INFO_LABEL:+--label="$INFO_LABEL"} \ ${INFO_ORIGIN:+--origin="$INFO_ORIGIN"} \
ALTLinux $comps ${INFO_LABEL:+--label="$INFO_LABEL"} \
$PREFIX $COMPS
### drop this when genbasedir is fixed (--no-uncompressed) ### drop this when genbasedir is fixed (--no-uncompressed)
for comp in $comps; do rm -f base/{pkg,src}list.$comp; done for c in $COMPS; do rm -f base/{pkg,src}list.$c; done
verbose finished
...@@ -7,11 +7,12 @@ ...@@ -7,11 +7,12 @@
Соответственно для сборки требуется или features.in/build-distro, Соответственно для сборки требуется или features.in/build-distro,
или use/build-ve. или use/build-ve.
Пакетная база рабочего чрута минимальна; apt-utils включены Пакетная база рабочего чрута минимальна (может чуть расширяться
ради genbasedir, который после завершения первоначального фичами -- см. ../features.in/repo/lib/build-genbasedir.mk
наполнения субпрофилей может переехать в ../sub.in/main/ (TODO). в качестве примера).
Если требуется какая-либо иная обработка чрута, следует Если требуется какая-либо иная обработка чрута, следует
предпочитать scripts.d/. предпочитать scripts.d/ -- для универсальной обработки
скрипт можно добавить здесь, для специфичной -- в фичу.
Результат -- готовый образ в $(IMAGEDIR)/. Результат -- готовый образ в $(IMAGEDIR)/.
Этот каталог содержит субпрофиль main, собирающий пакетную базу Этот каталог содержит субпрофиль main, собирающий пакетную базу
для локальной инсталяции дистрибутива из полученного образа, для локальной инсталяции дистрибутива из полученного образа,
включая необязательные пакеты; в live-builder применяется как включая необязательные пакеты; в distro/live-builder применяется
локальный репозиторий для сборки. как локальный репозиторий для сборки.
Подбирает: Подбирает:
- SYSTEM_PACKAGES, COMMON_PACKAGES, BASE_PACKAGES, BASE_LISTS: - SYSTEM_PACKAGES, COMMON_PACKAGES, BASE_PACKAGES, BASE_LISTS:
...@@ -11,4 +11,7 @@ ...@@ -11,4 +11,7 @@
В image-scripts.d/* смысла нет, только scripts.d/* -- В image-scripts.d/* смысла нет, только scripts.d/* --
рабочий чрут не содержит исполняемых файлов. рабочий чрут не содержит исполняемых файлов.
Не следует использовать этот субпрофиль напрямую, для добавления
пакетного репозитория в образ предназначена фича repo/main.
Результат -- каталог ALTLinux/RPMS.main для копирования в образ. Результат -- каталог ALTLinux/RPMS.main для копирования в образ.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment