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
This commit is contained in:
Michael Shigorin 2011-11-14 16:24:07 +02:00
parent 7964bccb92
commit ae7139f8b6
13 changed files with 65 additions and 60 deletions

View File

@ -1,7 +1,7 @@
# desktop distributions
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
distro/icewm: distro/desktop-base \

View File

@ -10,7 +10,7 @@ distro/live-systemd: distro/.base use/live/base use/systemd
distro/live-isomd5sum: distro/.base use/live/base use/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
@$(call add,LIVE_LISTS,$(call tags,base && (server || builder)))
@$(call add,LIVE_PACKAGES,livecd-tmpfs livecd-online-repo)

View File

@ -1,7 +1,7 @@
# server distributions
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
@$(call add,BASE_LISTS,server-base)

View File

@ -4,8 +4,6 @@
# take the latter part
SUBDIRS = $(notdir $(SUBPROFILES))
# "main" subprofile needs genbasedir
CHROOT_PACKAGES = apt-utils
BOOT_TYPE = isolinux
# Metadata/ needed only for installers (and not for e.g. syslinux.iso)

View File

@ -1,40 +0,0 @@
#!/bin/sh
# FIXME: bring to common style
verbose()
{
[ -z "$GLOBAL_VERBOSE" ] ||
echo >&2 "HOOK: 01-genbasedir: $*"
}
verbose started
[ -d "$WORKDIR/ALTLinux" ] || exit 0
cd "$WORKDIR/ALTLinux"
comps="$(find -mindepth 1 -maxdepth 1 -type d -name 'RPMS.*' -printf '%f\n' |
sed 's/^RPMS\.//')"
verbose "comps=$comps"
[ -n "$comps" ] || exit 1
genbasedir \
--topdir="$WORKDIR" \
--architecture="$INFO_ARCH" \
--no-oldhashfile \
--partial \
--xz \
--bz2 \
--create \
--notautomatic=false \
${INFO_NAME:+--archive="$INFO_NAME"} \
${INFO_VERSION:+--version="$INFO_VERSION"} \
${INFO_ORIGIN:+--origin="$INFO_ORIGIN"} \
${INFO_LABEL:+--label="$INFO_LABEL"} \
ALTLinux $comps
### drop this when genbasedir is fixed (--no-uncompressed)
for comp in $comps; do rm -f base/{pkg,src}list.$comp; done
verbose finished

View File

@ -1,9 +0,0 @@
#!/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

8
features.in/repo/README Normal file
View File

@ -0,0 +1,8 @@
Эта фича предназначена для конфигурирования репозиториев
в образе, включая генерацию хэшей и подключение к LiveCD.
На данный момент единственным таким репозиторием является
RPMS.main (создаваемый sub/main), но возможно добавление
addons, updates или иных по мере необходимости.
Результат -- каталог ALTLinux/base/ для копирования в образ.

View File

@ -0,0 +1,4 @@
use/repo:
@$(call add,FEATURES,repo)
use/repo/main: sub/main use/repo

View File

@ -0,0 +1,2 @@
# ../scripts.d/01-genbasedir needs that
CHROOT_PACKAGES += apt-utils

View File

@ -0,0 +1,10 @@
#!/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

View File

@ -0,0 +1,28 @@
#!/bin/sh -efu
PREFIX=ALTLinux
cd "$WORKDIR/$PREFIX"
COMPS="$(find -mindepth 1 -maxdepth 1 -type d -name 'RPMS.*' -printf '%f\n' |
sed 's/^RPMS\.//')"
[ -z "$GLOBAL_VERBOSE" ] || echo "** COMPS=$COMPS" >&2
[ -n "$COMPS" ] || exit 1
genbasedir \
--topdir="$WORKDIR" \
--no-oldhashfile \
--partial \
--xz \
--bz2 \
--create \
--notautomatic=false \
${INFO_ARCH:+--architecture="$INFO_ARCH"} \
${INFO_NAME:+--archive="$INFO_NAME"} \
${INFO_VERSION:+--version="$INFO_VERSION"} \
${INFO_ORIGIN:+--origin="$INFO_ORIGIN"} \
${INFO_LABEL:+--label="$INFO_LABEL"} \
$PREFIX $COMPS
### drop this when genbasedir is fixed (--no-uncompressed)
for c in $COMPS; do rm -f base/{pkg,src}list.$c; done

View File

@ -7,11 +7,12 @@
Соответственно для сборки требуется или features.in/build-distro,
или use/build-ve.
Пакетная база рабочего чрута минимальна; apt-utils включены
ради genbasedir, который после завершения первоначального
наполнения субпрофилей может переехать в ../sub.in/main/ (TODO).
Пакетная база рабочего чрута минимальна (может чуть расширяться
фичами -- см. ../features.in/repo/lib/build-genbasedir.mk
в качестве примера).
Если требуется какая-либо иная обработка чрута, следует
предпочитать scripts.d/.
предпочитать scripts.d/ -- для универсальной обработки
скрипт можно добавить здесь, для специфичной -- в фичу.
Результат -- готовый образ в $(IMAGEDIR)/.

View File

@ -1,7 +1,7 @@
Этот каталог содержит субпрофиль main, собирающий пакетную базу
для локальной инсталяции дистрибутива из полученного образа,
включая необязательные пакеты; в live-builder применяется как
локальный репозиторий для сборки.
включая необязательные пакеты; в distro/live-builder применяется
как локальный репозиторий для сборки.
Подбирает:
- SYSTEM_PACKAGES, COMMON_PACKAGES, BASE_PACKAGES, BASE_LISTS:
@ -11,4 +11,7 @@
В image-scripts.d/* смысла нет, только scripts.d/* --
рабочий чрут не содержит исполняемых файлов.
Не следует использовать этот субпрофиль напрямую, для добавления
пакетного репозитория в образ предназначена фича repo/main.
Результат -- каталог ALTLinux/RPMS.main для копирования в образ.