From d5a5941f961d18af67552f34c2427e56b2f156b9 Mon Sep 17 00:00:00 2001 From: Michael Shigorin Date: Thu, 6 Oct 2011 11:46:31 +0300 Subject: [PATCH] official {distro,ve}/* support This is quite a large-scale change since mkimage-profiles got used to baking distributions over the last year, and virtual environments are quite different, so e.g. image.in/Makefile had to be split in two with the main part of it moved into features.in/iso/lib/. Short overview: - features.in/Makefile: lib/ support (supporting VE images requires dynamic modifications to image.in/Makefile before starting the build; the most natural way to achieve that seems to use features mechanism along with makefile include dir) - packaging format related part moved into features.in/pack (should be better prepared for diversity either) - features.in/iso renamed to features.in/build-distro - features.in/ve renamed to features.in/build-ve + NB: these could not be merged as e.g. features.in/build due to completely different script hooks - lib/image.mk renamed to lib/build.mk - image, config, log postprocessing moved downstream - added a sort of a topping in the form of lib/sugar.mk - assorted style fixups (like ifeq usage) - clean.mk: reliability fix (the problem was observed by Oleg Ivanov and me too but finally it did get the attention quantum) - reviewed, updated and extended docs + QUICKSTART: should be[come] a step-by-step guide (thanks Leo-sp50 for prodiving feedback) --- Makefile | 81 ++++++++++--------- QUICKSTART | 33 ++++++++ README | 22 ++--- doc/assumptions.txt | 5 ++ doc/variables.txt | 12 +-- features.in/00example/README | 2 +- features.in/Makefile | 16 ++-- features.in/README | 5 +- features.in/bootloader/README | 3 +- features.in/build-distro/README | 4 + features.in/build-distro/config.mk | 2 + features.in/build-distro/lib/build-distro.mk | 46 +++++++++++ .../build-distro}/scripts.d/00-cleanup | 0 .../build-distro}/scripts.d/01-genbasedir | 0 features.in/build-ve/README | 3 + features.in/build-ve/config.mk | 2 + .../build-ve/image-scripts.d/03services | 11 +++ .../build-ve/image-scripts.d/04inittab | 3 + features.in/build-ve/image-scripts.d/05mtab | 3 + features.in/build-ve/image-scripts.d/06syslog | 13 +++ features.in/build-ve/lib/build-ve.mk | 11 +++ features.in/memtest/README | 2 +- features.in/pack/README | 3 + features.in/pack/config.mk | 18 +++++ features.in/powerbutton/README | 2 + features.in/syslinux/README | 13 ++- features.in/syslinux/config.mk | 2 +- image.in/Makefile | 77 ++++++------------ image.in/README | 8 +- image.in/functions.mk | 5 +- image.in/image-scripts.d/.gitignore | 0 image.in/lib/.gitignore | 0 image.in/scripts.d/.gitignore | 0 lib/README | 7 ++ iso.mk => lib/build.mk | 23 +++--- clean.mk => lib/clean.mk | 5 +- distro.mk => lib/distro.mk | 61 ++++++++------ functions.mk => lib/functions.mk | 7 +- log.mk => lib/log.mk | 9 +-- profile.mk => lib/profile.mk | 26 ++++-- lib/sugar.mk | 15 ++++ lib/ve.mk | 26 ++++++ libdistro.mk | 32 -------- pkg.in/lists/tagged/base+security | 1 + pkg.in/lists/tagged/server,openvpn | 11 +++ pkg.in/lists/tagged/ve+tools | 5 ++ sub.in/README | 16 ++-- sub.in/main/README | 3 +- sub.in/stage2/Makefile | 2 +- 49 files changed, 437 insertions(+), 219 deletions(-) create mode 100644 QUICKSTART create mode 100644 features.in/build-distro/README create mode 100644 features.in/build-distro/config.mk create mode 100644 features.in/build-distro/lib/build-distro.mk rename {image.in => features.in/build-distro}/scripts.d/00-cleanup (100%) rename {image.in => features.in/build-distro}/scripts.d/01-genbasedir (100%) create mode 100644 features.in/build-ve/README create mode 100644 features.in/build-ve/config.mk create mode 100755 features.in/build-ve/image-scripts.d/03services create mode 100755 features.in/build-ve/image-scripts.d/04inittab create mode 100755 features.in/build-ve/image-scripts.d/05mtab create mode 100755 features.in/build-ve/image-scripts.d/06syslog create mode 100644 features.in/build-ve/lib/build-ve.mk create mode 100644 features.in/pack/README create mode 100644 features.in/pack/config.mk create mode 100644 image.in/image-scripts.d/.gitignore create mode 100644 image.in/lib/.gitignore create mode 100644 image.in/scripts.d/.gitignore create mode 100644 lib/README rename iso.mk => lib/build.mk (72%) rename clean.mk => lib/clean.mk (95%) rename distro.mk => lib/distro.mk (72%) rename functions.mk => lib/functions.mk (84%) rename log.mk => lib/log.mk (84%) rename profile.mk => lib/profile.mk (72%) create mode 100644 lib/sugar.mk create mode 100644 lib/ve.mk delete mode 100644 libdistro.mk create mode 100644 pkg.in/lists/tagged/server,openvpn create mode 100644 pkg.in/lists/tagged/ve+tools diff --git a/Makefile b/Makefile index ce1bc983..1204a95a 100644 --- a/Makefile +++ b/Makefile @@ -2,50 +2,57 @@ # --- here # 1. initialize new profile (BUILDDIR) as a copy of image.in/ # 2. configure distro -# 3. copy subprofiles, script hooks, and package lists/groups -# from metaprofile to new profile (as needed) +# 3. copy the needed bits from metaprofile to a new profile # --- in BUILDDIR -# 4. build subprofiles and subsequently the image +# 4. build subprofiles and subsequently an image -all help: - @echo '** available distribution targets:' - @echo $(IMAGES) | fmt -sw"$$((COLUMNS>>1))" | column -t +MKIMAGE_PROFILES = $(dir $(lastword $(MAKEFILE_LIST))) + +# only process the first target (inter-target cleanup is tricky) +IMAGE_TARGET := $(firstword $(MAKECMDGOALS))# distro/server-base.iso +IMAGE_CONF := $(basename $(MAKECMDGOALS))# distro/server-base +IMAGE_CLASS := $(dir $(IMAGE_TARGET))# distro/ (let's fix it) +IMAGE_CLASS := $(IMAGE_CLASS:%/=%)# distro +IMAGE_FILE := $(notdir $(IMAGE_TARGET))# server-base.iso +IMAGE_NAME := $(basename $(IMAGE_FILE))# server-base +IMAGE_TYPE := $(suffix $(IMAGE_FILE))# .iso (fix this too) +IMAGE_TYPE := $(IMAGE_TYPE:.%=%)# iso # most of the actual work done elsewhere -include clean.mk -include profile.mk -include distro.mk -include log.mk -include iso.mk +include lib/*.mk +include features.in/*/config.mk + +DISTROS := $(call addsuffices,$(DISTRO_EXTS),$(DISTRO_TARGETS)) +VES := $(call addsuffices,$(VE_EXTS),$(VE_TARGETS)) +IMAGES := $(DISTROS) $(VES) .PHONY: $(IMAGES) -# we can't use implicit rules for top-level targets, only for prereqs -# NB: what about static pattern rules? -# TODO: move into libdistro? -DISTROS := $(shell sed -n 's,^distro/\([^:.]\+\):.*$$,\1,p' distro.mk) -IMAGES := $(addsuffix .iso,$(DISTROS)) +help: + @echo '** available distribution targets:' + @echo $(DISTROS) | fmt -sw"$$((COLUMNS>>1))" | column -t + @echo + @echo '** available virtual environment targets:' + @echo $(VES) | fmt -sw"$$((COLUMNS>>1))" | column -t -# to be passed into distcfg.mk -IMAGEDIR ?= $(shell [ -d "$$HOME/out" -a -w "$$HOME/out" ] \ - && echo "$$HOME/out" \ - || echo "$(BUILDDIR)/out" ) -IMAGENAME ?= mkimage-profiles-$(ARCH).iso +### suboptimal but at least clear, reliable and convenient +all: + @for i in $(DISTROS); do \ + echo "** building $$i:"; \ + $(MAKE) --no-print-directory BUILDDIR=$(BUILDDIR) $$i; \ + echo; \ + done -everything: - @for i in $(IMAGES); do $(MAKE) BUILDDIR=$(BUILDDIR) $$i; done +$(IMAGES): debug \ + config/with/$(IMAGE_CONF) \ + config/like/$(IMAGE_CLASS) \ + config/name/$(IMAGE_NAME) \ + config/pack/$(IMAGE_TYPE) \ + build; @: -$(IMAGES): %.iso: | profile/init distro/% boot/isolinux profile/populate iso - @# TODO: run automated tests (e.g. iso size) - @OUTNAME="$(@:.iso=)-$(DATE)-$(ARCH).iso"; \ - OUTPATH="$(IMAGEDIR)/$$OUTNAME"; \ - mkdir -p "$(IMAGEDIR)" && \ - test -s "$(IMAGEDIR)/$(IMAGENAME)" && \ - mv "$(IMAGEDIR)/$(IMAGENAME)" "$$OUTPATH" && \ - echo "** image: $$OUTPATH" && \ - ln -sf "$$OUTNAME" "$(IMAGEDIR)/$@" && \ - ln -sf "$@" "$(IMAGEDIR)/mkimage-profiles.iso"; \ - if [ -n "$(DEBUG)" ]; then \ - cp -a "$(BUILDLOG)" "$$OUTPATH.log"; \ - cp -a "$(CONFIG)" "$$OUTPATH.cfg"; \ - fi +debug: +ifeq (2,$(DEBUG)) + @$(foreach v,\ + $(filter IMAGE_%,$(sort $(.VARIABLES))),\ + $(warning $v = $($v))) +endif diff --git a/QUICKSTART b/QUICKSTART new file mode 100644 index 00000000..b13875f9 --- /dev/null +++ b/QUICKSTART @@ -0,0 +1,33 @@ +требуется +~~~~~~~~~ +- ALT Linux 6.0 или выше (возможна адаптация "вниз") +- установленный mkimage (свежий, как и hasher) +- пользователь с правом запуска hasher + +полезно +~~~~~~~ +- смонтированный tmpfs на несколько гигабайт + + например, в /tmp или /home/USER/hasher + + каталог из prefix в /etc/hasher-priv/system +- установленный git-core +- настроенный ~/.gitconfig + +команды +~~~~~~~ +- от имени root: +# apt-get install hasher git-core +# hasher-useradd USER + +- от имени пользователя (после повторного входа): +$ git config --global user.email "my@email" +$ git config --global user.name "My Name" + +- тестовая сборка (см. тж. lib/distro.mk, doc/variables.txt): +$ make distro/icewm.iso + +ссылки +~~~~~~ +- http://www.altlinux.org/tmpfs +- http://www.altlinux.org/hasher +- http://www.altlinux.org/mkimage +- http://www.altlinux.org/Mkimage/Profiles/next diff --git a/README b/README index 0422ae1d..034814b5 100644 --- a/README +++ b/README @@ -1,14 +1,15 @@ -see also http://www.altlinux.org/Mkimage/Profiles/next +Welcome to mkimage-profiles! -quickstart: make server-base.iso; -see http://en.altlinux.org/Hasher (and a large tmpfs) +English quickstart: make distro/server-base.iso; +see http://en.altlinux.org/Hasher (and a large tmpfs). -configurables: ~/.mkimage/profiles.mk; +Configurables: ~/.mkimage/profiles.mk; see doc/profiles.mk.sample and libdistro.mk -license: GPLv2+, see COPYING +License: GPLv2+, see COPYING. -most docs in Russian, welcome to learn it or ask for English +Most docs in Russian, welcome to learn it or ask for English. +См. тж. http://www.altlinux.org/Mkimage/Profiles/next Концепция: - метапрофиль служит репозиторием для построения индивидуального @@ -30,8 +31,11 @@ most docs in Russian, welcome to learn it or ask for English - сборка дистрибутива Объекты: +- виртуальные окружения: + + описываются в lib/ve.mk + + могут основываться одно на другом - дистрибутивы: - + описываются в distro.mk + + описываются в lib/distro.mk + могут основываться один на другом + включают один или более субпрофилей по надобности + желательно избегать множественного наследования, см. тж. фичи @@ -50,12 +54,12 @@ most docs in Russian, welcome to learn it or ask for English + список собирается в $(FEATURES) + законченные блоки функциональности (или наборы таковых) + описываются в индивидуальных features.in/*/config.mk - + могут зависеть друг от друга и требовать субпрофили + + могут требовать другие фичи, а также субпрофили + при сборке $(BUILDDIR) содержимое указанных в $(FEATURES) фич (подкаталоги, соответствующие входящим в дистрибутив субпрофилям под их итоговыми названиями -- например, live, а не stage2/live) добавляется в профиль; затем выполняются generate.sh, generate.mk -- списки пакетов (*_LISTS): просьба по возможности избегать дублирования +- списки пакетов (*_LISTS): просьба по возможности избегать дублирования; NB: перечисленные в этих переменных файлы автоматически копируются в порождаемый профиль => не следует указывать пакаджлисты напрямую - индивидуальные пакеты (*_PACKAGES): следует крайне осторожно пользоваться diff --git a/doc/assumptions.txt b/doc/assumptions.txt index 30a0375f..58e664bf 100644 --- a/doc/assumptions.txt +++ b/doc/assumptions.txt @@ -27,3 +27,8 @@ - features.in/syslinux/scripts.d/20-propagator-ramdisk + ожидают, что названия squashfs-образов второй стадии инсталятора, livecd и спасательной системы соответственно altinst, live и rescue + +- image.in/Makefile + + ожидает, что конфигурация будет в distcfg.mk (см. тж. lib/profile.mk), + а лог сборки -- в build.log (см. тж. lib/log.mk); альтернативой было + бы пробрасывание переменных с полным путём ради единственного места diff --git a/doc/variables.txt b/doc/variables.txt index 62c264ae..efa03be3 100644 --- a/doc/variables.txt +++ b/doc/variables.txt @@ -6,29 +6,29 @@ - APTCONF + задаёт путь к требуемому apt.conf + значение: пусто (по умолчанию системный) либо строка - + см. image.in/Makefile + + см. ../image.in/Makefile - ARCH + определяет целевую архитектуру образа + значение: пусто (по умолчанию авто), i586 или x86_64 - + см. iso.mk + + см. ../lib/build.mk - BUILDDIR + определяет каталог генерируемого профиля и сборки + значение: пусто (по умолчанию авто) либо строка - + см. profile.mk + + см. ../lib/profile.mk - CLEAN - + экономия RAM при сборке в tmpfs, иначе места на диске + + экономия RAM+swap при сборке в tmpfs, иначе места на диске + очистка рабочего каталога после успешной сборки очередной стадии + может помешать использовать некоторые варианты отладки + значение: любая строка, по умолчанию пусто - + см. clean.mk + + см. ../lib/clean.mk - DEBUG + включение средств отладки + значение: пусто (по умолчанию), 1 или 2 - + см. log.mk + + см. ../lib/log.mk пример ~~~~~~ diff --git a/features.in/00example/README b/features.in/00example/README index a9839141..b5fc2103 100644 --- a/features.in/00example/README +++ b/features.in/00example/README @@ -44,4 +44,4 @@ произвести из generate.sh и generate.mk. Пожалуйста, присылайте отзывы о (бес)полезности кода в этом каталоге -mike@altlinux. +mike@altlinux.org. diff --git a/features.in/Makefile b/features.in/Makefile index 7878f4a4..fbc85064 100644 --- a/features.in/Makefile +++ b/features.in/Makefile @@ -40,17 +40,17 @@ all: dst="$${sub#*/}"; \ if [ -d "$$src" ]; then rsync -qab "$$src/" "$(BUILDDIR)/$$dst/"; fi; \ if [ -d "$$dst" ]; then rsync -qab "$$dst/" "$(BUILDDIR)/$$dst/"; fi; \ - for scr in {image-,}scripts.d; do \ - scriptdir="$(BUILDDIR)/$$dst/$$scr/"; \ - if [ -d "$$scriptdir" ]; then \ - if [ -d "$$scr" ]; then \ - rsync -qab "$$scr/" "$$scriptdir/"; \ + for dir in lib {image-,}scripts.d; do \ + destdir="$(BUILDDIR)/$$dst/$$dir/"; \ + if [ -d "$$destdir" ]; then \ + if [ -d "$$dir" ]; then \ + rsync -qab "$$dir/" "$$destdir/"; \ fi; \ - if [ -d "tagged/$$scr" ]; then \ - pushd "tagged/$$scr" && \ + if [ -d "tagged/$$dir" ]; then \ + pushd "tagged/$$dir" && \ echo "$$feat && ($$src || $$dst)" \ | tags2lists . \ - | xargs -r cp -v -pLt "$$scriptdir" --; \ + | xargs -r cp -v -pLt "$$destdir" --; \ popd; \ fi; \ fi; \ diff --git a/features.in/README b/features.in/README index 3c67ae05..8d48c487 100644 --- a/features.in/README +++ b/features.in/README @@ -4,7 +4,7 @@ Каждая фича должна содержать задействуемый при построении конфигурации будущего образа файл config.mk, включаемый -в ../distro.mk; он может описывать одну или более целей +в ../Makefile; он может описывать одну или более целей вида use/*, дополняющих конфигурацию дистрибутива, и при наличии дополнительных хуков для копирования или generate.* должен добавить имя фичи в $(FEATURES). @@ -24,5 +24,8 @@ generate.sh и задействуется generate.mk (при их наличи построенных на одном базовом, можно воспользоваться подкаталогом с именем исходного базового субпрофиля (см. $src, $dst в Makefile). +Каталог lib/ является специфическим для фич, определяющих +построение образа -- см. build-*/. + Несложный пример содержится в 00example/, более близкий к жизни и нынешним пределам возможностей метапрофиля -- в syslinux/. diff --git a/features.in/bootloader/README b/features.in/bootloader/README index 3ae37407..0f377084 100644 --- a/features.in/bootloader/README +++ b/features.in/bootloader/README @@ -6,4 +6,5 @@ и требует пакет выбранного загрузчика. Реализация экспериментальная (нужно модуляризовать installer-steps), -пока завязана на installer-distro-altlinux-generic. +пока завязана на installer-distro-altlinux-generic. Возможно, +с использованием alterator-lilo связаны проблемы времени установки. diff --git a/features.in/build-distro/README b/features.in/build-distro/README new file mode 100644 index 00000000..5fe49e35 --- /dev/null +++ b/features.in/build-distro/README @@ -0,0 +1,4 @@ +Эта фича конфигурирует создание образа дистрибутива, включая работу +с субпрофилями -- которая сейчас нужна только дистрибутивным целям. + +Дополняет финальную стадию сборки (lib/, scripts.d/). diff --git a/features.in/build-distro/config.mk b/features.in/build-distro/config.mk new file mode 100644 index 00000000..e5ba1721 --- /dev/null +++ b/features.in/build-distro/config.mk @@ -0,0 +1,2 @@ +use/build-distro: boot/isolinux + @$(call add,FEATURES,build-distro) diff --git a/features.in/build-distro/lib/build-distro.mk b/features.in/build-distro/lib/build-distro.mk new file mode 100644 index 00000000..50b665d7 --- /dev/null +++ b/features.in/build-distro/lib/build-distro.mk @@ -0,0 +1,46 @@ +# step 4: build the distribution image + +# for complex-specified subprofiles like stage2/live, +# 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) +# FIXME: installable live needs it too, don't move to install2 feature +ifneq (,$(findstring install2,$(FEATURES))) +METADATA = metadata +endif + +all: $(GLOBAL_DEBUG) prep copy-subdirs copy-tree run-scripts pack-image \ + postprocess $(GLOBAL_CLEAN_WORKDIR) + +prep: $(GLOBAL_DEBUG) dot-disk $(METADATA) $(IMAGEDIR) + +metadata: dot-base + @mkdir -p files/Metadata + @rm -f files/Metadata/pkg-groups.tar +# see also alterator-pkg (backend3/pkg-install); we only tar up what's up to it + @tar -cvf files/Metadata/pkg-groups.tar -C $(PKGDIR) \ + $$(echo $(call list,$(MAIN_GROUPS) .base) \ + $(call group,$(MAIN_GROUPS)) \ + | sed 's,$(PKGDIR)/*,,g') + +dot-base: + @{ \ + echo -e "\n## added by image.in/Makefile"; \ + echo "$(call kpackages,$(KMODULES),$(KFLAVOURS))"; \ + } >> $(call list,.base) + +dot-disk: + @mkdir -p files/.disk + @echo "ALT Linux based" >files/.disk/info + @echo "$(ARCH)" >files/.disk/arch + @echo "$(DATE)" >files/.disk/date + @if type -t git >&/dev/null; then \ + ( cd $(TOPDIR) && \ + git show-ref --head -ds -- HEAD ) \ + >files/.disk/commit 2>/dev/null; \ + fi diff --git a/image.in/scripts.d/00-cleanup b/features.in/build-distro/scripts.d/00-cleanup similarity index 100% rename from image.in/scripts.d/00-cleanup rename to features.in/build-distro/scripts.d/00-cleanup diff --git a/image.in/scripts.d/01-genbasedir b/features.in/build-distro/scripts.d/01-genbasedir similarity index 100% rename from image.in/scripts.d/01-genbasedir rename to features.in/build-distro/scripts.d/01-genbasedir diff --git a/features.in/build-ve/README b/features.in/build-ve/README new file mode 100644 index 00000000..aa9949b3 --- /dev/null +++ b/features.in/build-ve/README @@ -0,0 +1,3 @@ +Эта фича конфигурирует создание образа виртуального окружения (VE). + +Дополняет финальную стадию сборки (lib/, image-scripts.d/). diff --git a/features.in/build-ve/config.mk b/features.in/build-ve/config.mk new file mode 100644 index 00000000..1279ca90 --- /dev/null +++ b/features.in/build-ve/config.mk @@ -0,0 +1,2 @@ +use/build-ve: + @$(call add,FEATURES,build-ve) diff --git a/features.in/build-ve/image-scripts.d/03services b/features.in/build-ve/image-scripts.d/03services new file mode 100755 index 00000000..9c763222 --- /dev/null +++ b/features.in/build-ve/image-scripts.d/03services @@ -0,0 +1,11 @@ +#!/bin/sh +# VEs typically have no means to communicate with the outer +# world except for networking; still this might need some +# more tweaking for networkless LXC case + +# candidates: +# off: keytable + +for i in network random syslogd random; do chkconfig $i on; done +for i in fbsetfont netfs rawdevices; do chkconfig $i off; done +: diff --git a/features.in/build-ve/image-scripts.d/04inittab b/features.in/build-ve/image-scripts.d/04inittab new file mode 100755 index 00000000..aa61c507 --- /dev/null +++ b/features.in/build-ve/image-scripts.d/04inittab @@ -0,0 +1,3 @@ +#!/bin/sh -e +# we don't need no gettys in OpenVZ VEs (might need one in LXC though) +subst 's,^[0-9]\+:[0-9]\+:respawn:/sbin/mingetty.*,#&,' /etc/inittab diff --git a/features.in/build-ve/image-scripts.d/05mtab b/features.in/build-ve/image-scripts.d/05mtab new file mode 100755 index 00000000..b8e26343 --- /dev/null +++ b/features.in/build-ve/image-scripts.d/05mtab @@ -0,0 +1,3 @@ +#!/bin/sh -e +# should be pretty much obsolete but just in case +[ -L /etc/mtab ] || ln -sf /proc/mounts /etc/mtab diff --git a/features.in/build-ve/image-scripts.d/06syslog b/features.in/build-ve/image-scripts.d/06syslog new file mode 100755 index 00000000..1ce22997 --- /dev/null +++ b/features.in/build-ve/image-scripts.d/06syslog @@ -0,0 +1,13 @@ +#!/bin/sh -e +# tweak syslog configuration to: +# - avoid logging to a nonexistent tty; +# - avoid hard sync logging (one is better off doing +# remote syslog if you do care for reliable data anyways) +# credits: vvk@, thresh@ (2010) + +sed -i \ + -e 's,/dev/tty12,/var/log/syslog/console,' \ + -e 's,^.*/var/log/syslog/console$,#&,' \ + -e 's,-/var/log/,/var/log/,g' \ + -e 's,/var/log/,-/var/log/,g' \ + /etc/syslog.conf diff --git a/features.in/build-ve/lib/build-ve.mk b/features.in/build-ve/lib/build-ve.mk new file mode 100644 index 00000000..52f31133 --- /dev/null +++ b/features.in/build-ve/lib/build-ve.mk @@ -0,0 +1,11 @@ +# step 4: build the virtual environment image + +MKI_TAR_COMPRESS = $(IMAGE_COMPRESS) + +IMAGE_PACKAGES = $(call list,$(BASE_LISTS)) \ + $(SYSTEM_PACKAGES) \ + $(COMMON_PACKAGES) \ + $(BASE_PACKAGES) + +all: $(GLOBAL_DEBUG) build-image copy-tree run-image-scripts pack-image \ + postprocess $(GLOBAL_CLEAN_WORKDIR) diff --git a/features.in/memtest/README b/features.in/memtest/README index c6fbac88..ed8e08a6 100644 --- a/features.in/memtest/README +++ b/features.in/memtest/README @@ -1,2 +1,2 @@ Добавление memtest86+ в загрузку с образа и в устанавливаемую пакетную базу; -востребовано для для инсталяторов, live/rescue. Интегрируется с syslinux. +востребовано для инсталяторов, live/rescue. Интегрируется с syslinux. diff --git a/features.in/pack/README b/features.in/pack/README new file mode 100644 index 00000000..de9a0350 --- /dev/null +++ b/features.in/pack/README @@ -0,0 +1,3 @@ +Эта фича определяет формат упаковки создаваемого образа. +На данный момент поддерживаются iso (загрузочный ISO9660 +для дистрибутивов) и tar (виртуальные окружения). diff --git a/features.in/pack/config.mk b/features.in/pack/config.mk new file mode 100644 index 00000000..ac9cb31c --- /dev/null +++ b/features.in/pack/config.mk @@ -0,0 +1,18 @@ +DISTRO_EXTS := .iso +VE_EXTS := .tar .tgz + +use/pack: + @$(call add,FEATURES,pack) + +use/pack/iso: use/pack boot/isolinux +ifeq (distro,$(IMAGE_CLASS)) + @$(call set,IMAGE_PACKTYPE,isoboot) +else + @$(call set,IMAGE_PACKTYPE,isodata) +endif + +use/pack/tar: use/pack + @$(call set,IMAGE_PACKTYPE,tar) + +use/pack/tgz: use/pack/tar + @$(call set,IMAGE_COMPRESS,gzip) diff --git a/features.in/powerbutton/README b/features.in/powerbutton/README index f7ff5eb4..77594320 100644 --- a/features.in/powerbutton/README +++ b/features.in/powerbutton/README @@ -1,2 +1,4 @@ Эта фича конфигурирует поддержку управления кнопкой питания -- выключение для ACPI, засыпание для APM (не проверялось). + +TODO: учесть изложенное в https://bugzilla.altlinux.org/25018 diff --git a/features.in/syslinux/README b/features.in/syslinux/README index 3d7086b9..6923974b 100644 --- a/features.in/syslinux/README +++ b/features.in/syslinux/README @@ -1,14 +1,15 @@ -Добавление поддержки syslinux; требуется для инсталяторов, live/rescue. +Добавление поддержки syslinux; требуется для инсталяторов, live/rescue; +реализуется в рамках stage1. Цели config.mk: * use/syslinux/ui-% -- конфигурирование интерфейса (см. cfg.in/00*.cfg); - при использовании автоматически добавляют syslinux в FEATURES + при использовании автоматически добавляют syslinux в FEATURES; * use/syslinux/%.com, use/syslinux/%.c32 -- подключение одноименных модулей - (копирование бинарников и включение кусочков конфигурации; экспериментальное) + (копирование бинарников и включение кусочков конфигурации; экспериментальное); -* use/syslinux/%.cfg -- подключение кусочков конфигурации (используется) +* use/syslinux/%.cfg -- подключение кусочков конфигурации. Переменные generate.mk: @@ -19,3 +20,7 @@ Здесь производится первичная обработка конфигурационных данных, окончательно проверяемых и используемых уже в инструментальном чруте. + +TODO: может потребоваться обобщение механизма генерации с учётом +многоуровневых меню и включаемых файлов (которыми лучше не злоупотреблять +из соображений скорости инициализации загрузчика). diff --git a/features.in/syslinux/config.mk b/features.in/syslinux/config.mk index 8bc237e9..29da69b8 100644 --- a/features.in/syslinux/config.mk +++ b/features.in/syslinux/config.mk @@ -1,5 +1,5 @@ # default is plain text prompt -use/syslinux: +use/syslinux: sub/stage1 @$(call add,FEATURES,syslinux) @$(call add,STAGE1_PACKAGES,syslinux) diff --git a/image.in/Makefile b/image.in/Makefile index 0c7c55bc..0d693489 100644 --- a/image.in/Makefile +++ b/image.in/Makefile @@ -1,82 +1,51 @@ -# step 4: build image (final stage) -# -# NB: this directory forms the initial BUILDDIR/ +# stage 4: dive into mkimage -ifndef GLOBAL_BUILDDIR -$(error GLOBAL_BUILDDIR not defined) -endif +GLOBAL_BUILDDIR ?= $(shell pwd) +include distcfg.mk include functions.mk -include $(GLOBAL_BUILDDIR)/functions.mk -include $(GLOBAL_BUILDDIR)/distcfg.mk include $(MKIMAGE_PREFIX)/config.mk -# for complex-specified subprofiles like stage2/live, -# take the latter part -SUBDIRS = $(notdir $(SUBPROFILES)) +# reconstruct instead of passing yet another variable +IMAGE_FILE := $(IMAGE_NAME).$(IMAGE_TYPE) +IMAGE_OUTFILE := $(IMAGE_NAME)-$(DATE)-$(ARCH).$(IMAGE_TYPE) +MKI_PACK_RESULTS = $(IMAGE_PACKTYPE):$(IMAGE_OUTFILE) -# "main" subprofile needs genbasedir -CHROOT_PACKAGES = apt-utils -MKI_PACK_RESULTS = isoboot:$(IMAGENAME) +# these get opied over as is COPY_TREE = ./files -BOOT_TYPE = isolinux # outdir shouldn't be wiped clean before use CLEANUP_OUTDIR ?= APTCONF := $(wildcard $(APTCONF)) -ifeq "$(APTCONF)" "" +ifeq (,$(APTCONF)) GLOBAL_HSH_APT_CONFIG = /etc/apt/apt.conf else GLOBAL_HSH_APT_CONFIG = $(APTCONF) endif -# Metadata/ needed only for installers (and not for e.g. syslinux.iso) -### what about installable live? -ifneq (,$(findstring install2,$(FEATURES))) -METADATA = metadata -endif - +# the lib/build-*.mk comes from features.in/build-*/lib +include lib/*.mk include $(MKIMAGE_PREFIX)/targets.mk -all: $(GLOBAL_DEBUG) prep copy-subdirs copy-tree run-scripts pack-image \ - $(GLOBAL_CLEAN_WORKDIR) - -prep: $(GLOBAL_DEBUG) dot-disk $(METADATA) $(IMAGEDIR) - -metadata: dot-base - @mkdir -p files/Metadata - @rm -f files/Metadata/pkg-groups.tar -# see also alterator-pkg (backend3/pkg-install); we only tar up what's up to it - @tar -cvf files/Metadata/pkg-groups.tar -C $(PKGDIR) \ - $$(echo $(call list,$(MAIN_GROUPS) .base) \ - $(call group,$(MAIN_GROUPS)) \ - | sed 's,$(PKGDIR)/*,,g') - -dot-base: - @{ \ - echo -e "\n## added by image.in/Makefile"; \ - echo "$(call kpackages,$(KMODULES),$(KFLAVOURS))"; \ - } >> $(call list,.base) +# specified only for the final image (target-specific) +pack-image: OUTDIR = $(IMAGEDIR) +pack-image: $(IMAGEDIR) $(IMAGEDIR): @mkdir -p "$(IMAGEDIR)" -# specified only for the final image, not for the subparts -pack-image: OUTDIR = $(IMAGEDIR) +postprocess: + @OUTPATH="$(IMAGEDIR)/$(IMAGE_OUTFILE)"; \ + echo "** image: $(IMAGE_OUTFILE)" && \ + ln -sf "$(IMAGE_OUTFILE)" "$(IMAGEDIR)/$(IMAGE_FILE)" && \ + ln -sf "$(IMAGE_FILE)" "$(IMAGEDIR)/mkimage-profiles.$(IMAGE_TYPE)"; \ + if [ -n "$(GLOBAL_DEBUG)" ]; then \ + cp -a build.log "$$OUTPATH.log"; \ + cp -a distcfg.mk "$$OUTPATH.cfg"; \ + fi debug: @echo "TOPDIR=$(TOPDIR)" @echo "ARCH=$(ARCH)" @echo "GLOBAL_HSH_APT_CONFIG=$(GLOBAL_HSH_APT_CONFIG)" - -dot-disk: - @mkdir -p files/.disk - @echo "ALT Linux based" >files/.disk/info - @echo "$(ARCH)" >files/.disk/arch - @echo "$(DATE)" >files/.disk/date - @if type -t git >&/dev/null; then \ - ( cd $(TOPDIR) && \ - git show-ref --head -ds -- HEAD ) \ - >files/.disk/commit 2>/dev/null; \ - fi diff --git a/image.in/README b/image.in/README index b6d8dda5..b62f6461 100644 --- a/image.in/README +++ b/image.in/README @@ -1,6 +1,10 @@ Этот каталог копируется из метапрофиля в профиль "как есть" -и формирует "затравку", собирающую собственно образ из результатов -работы индивидуальных субпрофилей (см. ../sub.in/). +и формирует "затравку" финальной стадии, собирающей собственно +образ из результатов работы индивидуальных субпрофилей. + +Обратите внимание: в зависимости от того, какой образ нужен, +требуется или features.in/build-distro (для дистрибутивов), +или use/build-ve (для образов виртуальных окружений). Содержимое files/ копируется в корень образа. diff --git a/image.in/functions.mk b/image.in/functions.mk index 20fddb0f..3a20fd82 100644 --- a/image.in/functions.mk +++ b/image.in/functions.mk @@ -1,4 +1,6 @@ -PKGDIR=$(GLOBAL_BUILDDIR)/pkg +# globals +PKGDIR := $(GLOBAL_BUILDDIR)/pkg +DATE ?= $(shell date +%Y%m%d) # prefix pkglist name with its directory to form a path list = $(1:%=$(PKGDIR)/lists/%) @@ -12,6 +14,7 @@ map = $(foreach a,$(2),$(call $(1),$(a))) # kernel package list generation; see also #24669 NULL := SPACE := $(NULL) # the officially documented way of getting a space + list2re = $(subst $(SPACE),|,$(strip $(1))) # args: KMODULES, KFLAVOURS kpackages = ^kernel-(image|modules-($(call list2re,$(1))))-($(call list2re,$(2)))$$ diff --git a/image.in/image-scripts.d/.gitignore b/image.in/image-scripts.d/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/image.in/lib/.gitignore b/image.in/lib/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/image.in/scripts.d/.gitignore b/image.in/scripts.d/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/lib/README b/lib/README new file mode 100644 index 00000000..27f80ff7 --- /dev/null +++ b/lib/README @@ -0,0 +1,7 @@ +Этот каталог содержит вспомогательные makefiles, +обеспечивающие основную функциональность создания +конфигурации образа и генерации соответствующего +профиля для сборки. + +Следует помнить, что будучи включаемыми в ../Makefile, +они работают в каталоге верхнего уровня. diff --git a/iso.mk b/lib/build.mk similarity index 72% rename from iso.mk rename to lib/build.mk index 88242439..284a0a55 100644 --- a/iso.mk +++ b/lib/build.mk @@ -1,18 +1,19 @@ -# this makefile is designed to be included in toplevel one -ifndef BUILDDIR -$(error BUILDDIR not defined) +# step 4 is kicked off here but actually done by image.in/Makefile + +ifndef MKIMAGE_PROFILES +$(error this makefile is designed to be included in toplevel one) endif +# NB: /usr/bin/{i586,x86_64} are setarch(8) symlinks + export ARCH ?= $(shell arch | sed 's/i686/i586/') -# step 4 is kicked off here but actually done by image.in/Makefile -# -# adding boot/isolinux to prereqs is too late here, -# since profile/populate target is already done by now -# -# NB: /usr/bin/{i586,x86_64} are setarch(8) symlinks +# to be passed into distcfg.mk +IMAGEDIR ?= $(shell [ -d "$$HOME/out" -a -w "$$HOME/out" ] \ + && echo "$$HOME/out" \ + || echo "$(BUILDDIR)/out" ) -iso: +build: profile/populate @echo -n "** starting image build" @if [ -n "$(DEBUG)" ]; then \ echo ": tail -f $(BUILDLOG)" $(SHORTEN); \ @@ -20,7 +21,7 @@ iso: echo " (coffee time)"; \ fi @if time -f "%E %PCPU %Mk" $(ARCH) \ - $(MAKE) -C $(BUILDDIR)/ GLOBAL_BUILDDIR=$(BUILDDIR) $(LOG); \ + $(MAKE) -C $(BUILDDIR)/ $(LOG); \ then \ echo "** build done (`tail -1 $(BUILDLOG) | cut -f1 -d. \ || echo "no log"`)"; \ diff --git a/clean.mk b/lib/clean.mk similarity index 95% rename from clean.mk rename to lib/clean.mk index aa6aa457..1fe05760 100644 --- a/clean.mk +++ b/lib/clean.mk @@ -17,7 +17,7 @@ clean: @echo '** cleaning up $(WARNING)' @find -name '*~' -delete >&/dev/null @if [ -L build -a -d build/ ]; then \ - $(MAKE) -C build $@ GLOBAL_BUILDDIR=$(shell readlink build) $(LOG); \ + $(MAKE) -C build $@ GLOBAL_BUILDDIR=$(shell readlink build) $(LOG) ||:; \ fi # there can be some sense in writing log here even if normally @@ -26,7 +26,8 @@ clean: distclean: clean @if [ -L build -a -d build/ ]; then \ rm -rf build/.git; \ - $(MAKE) -C build $@ GLOBAL_BUILDDIR=$(shell readlink build) $(LOG) && \ + $(MAKE) -C build $@ GLOBAL_BUILDDIR=$(shell readlink build) $(LOG) || \ + rm -rf build/; \ rm -r $(shell readlink build); \ fi @rm -f build diff --git a/distro.mk b/lib/distro.mk similarity index 72% rename from distro.mk rename to lib/distro.mk index 36f140c2..8aedc6a4 100644 --- a/distro.mk +++ b/lib/distro.mk @@ -1,29 +1,45 @@ -# this makefile is designed to be included in toplevel one -ifndef BUILDDIR -$(error BUILDDIR not defined) -endif - # step 2: build up distribution's configuration -# NB: distro/ targets should be defined in this file, -# see toplevel Makefile's $(DISTROS) assignment -CONFIG = $(BUILDDIR)/distcfg.mk +ifndef MKIMAGE_PROFILES +$(error this makefile is designed to be included in toplevel one) +endif -# collect use/% (source initial feature snippets) --include features.in/*/config.mk +# NB: distro/ targets should be defined in this file -# put(), add(), set(), try(), tags(): -# package list names are considered relative to pkg/lists/; -# tags can do boolean expressions: (tag1 && !(tag2 || tag3)) -include functions.mk +DISTRO_TARGETS := $(shell sed -n 's,^\(distro/[^:.]\+\):.*$$,\1,p' \ + $(lastword $(MAKEFILE_LIST)) | sort) -# distro/.%, sub/.%, boot/% -include libdistro.mk +ifeq (distro,$(IMAGE_CLASS)) -# bootloader test target; requires recent mkimage to build -distro/syslinux: distro/.init distro/.branding sub/stage1 \ +.PHONY: $(DISTRO_TARGETS) + +# request particular image subprofile inclusion +sub/%: + @$(call add,SUBPROFILES,$(@:sub/%=%)) + +# install media bootloader +boot/%: profile/bare use/syslinux + @$(call set,BOOTLOADER,$*) + +# fundamental targets + +distro/.init: profile/bare + +# NB: the last flavour in KFLAVOURS gets to be the default one; +# the kernel packages regexp evaluation has to take place at build stage +distro/.base: distro/.init use/syslinux/localboot.cfg + @$(call set,KFLAVOURS,std-def) + +# bootloader test target +distro/syslinux: distro/.init \ use/syslinux use/syslinux/localboot.cfg \ - use/syslinux/ui-vesamenu use/hdt use/memtest use/dos + use/syslinux/ui-vesamenu use/hdt use/memtest + +# live images + +distro/live: distro/.base use/live use/syslinux/ui-menu +distro/rescue: distro/.base use/rescue use/syslinux/ui-menu +distro/dos: distro/.init use/dos use/syslinux/ui-menu # $(VAR) will be substituted before writing them to $(CONFIG); # $$(VAR) will remain unsubstituted until $(CONFIG) is included @@ -32,12 +48,6 @@ distro/syslinux: distro/.init distro/.branding sub/stage1 \ # it's actually used); just peek inside $(CONFIG) ;-) # BASE_PACKAGES, BASE_LISTS, MAIN_PACKAGES, MAIN_LISTS: see sub.in/main/ -# live images - -distro/live: distro/.base use/live use/syslinux/ui-menu -distro/rescue: distro/.base use/rescue use/syslinux/ui-menu -distro/dos: sub/stage1 use/dos use/syslinux/ui-menu - # something actually useful (as a network-only installer) # NB: doesn't carry stage3 thus cannot use/bootloader distro/installer: distro/.base use/install2 @@ -84,3 +94,4 @@ distro/icewm: distro/desktop-base \ @$(call add,BASE_LISTS,$(call tags,icewm desktop)) # NB: if there are too many screens above, it might make sense to distro.d/ +endif diff --git a/functions.mk b/lib/functions.mk similarity index 84% rename from functions.mk rename to lib/functions.mk index 0a55ba90..a7b14124 100644 --- a/functions.mk +++ b/lib/functions.mk @@ -38,8 +38,13 @@ endef # if the rule being executed isn't logged yet, log it define log_body -{ grep -q '^# $@$$' "$(CONFIG)" || printf '# %s\n' '$@' >> "$(CONFIG)"; } +{ [ -s "$(CONFIG)" ] && \ + grep -q '^# $@$$' "$(CONFIG)" || printf '# %s\n' '$@' >> "$(CONFIG)"; } endef # convert tag list into a list of relative package list paths +# NB: tags can do boolean expressions: (tag1 && !(tag2 || tag3)) tags = $(and $(strip $(1)),$(addprefix tagged/,$(shell echo "$(1)" | bin/tags2lists pkg.in/lists/tagged))) + +# toplevel Makefile convenience +addsuffices = $(foreach s,$(1),$(call addsuffix,$s,$(2))) diff --git a/log.mk b/lib/log.mk similarity index 84% rename from log.mk rename to lib/log.mk index ec5b07bd..69841735 100644 --- a/log.mk +++ b/lib/log.mk @@ -1,12 +1,11 @@ -# this makefile is designed to be included in toplevel one -ifndef BUILDDIR -$(error BUILDDIR not defined) -endif - # simple logging switch inspired by netch@'s advice: # you can add plain $(LOG) to a rule recipe line to moderate it # (logfile is automatically truncated during profile/init) +ifndef MKIMAGE_PROFILES +$(error this makefile is designed to be included in toplevel one) +endif + BUILDLOG ?= $(BUILDDIR)/build.log # LOG holds a postprocessor diff --git a/profile.mk b/lib/profile.mk similarity index 72% rename from profile.mk rename to lib/profile.mk index 0d468412..49a2b2aa 100644 --- a/profile.mk +++ b/lib/profile.mk @@ -1,4 +1,6 @@ -# this makefile is designed to be included in toplevel one +ifndef MKIMAGE_PROFILES +$(error this makefile is designed to be included in toplevel one) +endif SYMLINK = build @@ -19,6 +21,9 @@ PATH := $(CURDIR)/bin:$(PATH) export BUILDDIR NO_CACHE PATH +CONFIG := $(BUILDDIR)/distcfg.mk +RC := $(HOME)/.mkimage/profiles.mk + # holds a postprocessor; shell test executes in particular situation # NB: not exported, for toplevel use only SHORTEN = $(shell [ "$(DEBUG)" != 2 -a -s "$(SYMLINK)" ] \ @@ -28,10 +33,8 @@ SHORTEN = $(shell [ "$(DEBUG)" != 2 -a -s "$(SYMLINK)" ] \ profile/init: distclean @echo -n "** initializing BUILDDIR: " @rsync -qaH --delete image.in/ "$(BUILDDIR)"/ - @{ \ - echo "ifndef DISTCFG_MK"; \ - echo "DISTCFG_MK = 1"; \ - } > "$(BUILDDIR)"/distcfg.mk + @$(call put,ifndef DISTCFG_MK) + @$(call put,DISTCFG_MK = 1) @{ \ git show-ref --head -d -s -- HEAD && \ git status -s && \ @@ -51,8 +54,17 @@ profile/init: distclean echo "$(BUILDDIR)/"; \ fi -profile/finalize: distro/.rc - @echo "endif" >> "$(BUILDDIR)"/distcfg.mk +profile/bare: profile/init + @echo "** preparing distro configuration$${DEBUG:+: see $(CONFIG)}" $(SHORTEN) + @$(call try,MKIMAGE_PREFIX,/usr/share/mkimage) + @$(call try,GLOBAL_VERBOSE,) + @$(call try,IMAGEDIR,$(IMAGEDIR)) + @$(call try,BRANDING,altlinux-sisyphus) + @$(call set,IMAGE_INIT_LIST,+branding-$$(BRANDING)-release) + +profile/finalize: + @if [ -s $(RC) ]; then $(call put,-include $(RC)); fi + @$(call put,endif) # requires already formed distcfg.mk for useful output profile/dump-vars: diff --git a/lib/sugar.mk b/lib/sugar.mk new file mode 100644 index 00000000..1659a55e --- /dev/null +++ b/lib/sugar.mk @@ -0,0 +1,15 @@ +# this makefile contains some syntactic sugar for the toplevel one + +# strip prefix +config/with/%: %; @: + +# just map to specific features +config/like/%: use/build-%; @: + +# map and preconfigure +config/pack/%: use/pack/% + @$(call set,IMAGE_TYPE,$*) + +# just preconfigure +config/name/%: + @$(call set,IMAGE_NAME,$*) diff --git a/lib/ve.mk b/lib/ve.mk new file mode 100644 index 00000000..bf58d49d --- /dev/null +++ b/lib/ve.mk @@ -0,0 +1,26 @@ +# step 2: build up virtual environment's configuration + +ifndef MKIMAGE_PROFILES +$(error this makefile is designed to be included in toplevel one) +endif + +# NB: ve/ targets should be defined in this file +VE_TARGETS := $(shell sed -n 's,^\(ve/[^:.]\+\):.*$$,\1,p' \ + $(lastword $(MAKEFILE_LIST)) | sort) + +ifeq (ve,$(IMAGE_CLASS)) + +.PHONY: $(VE_TARGETS) + +ve/.bare: profile/bare + @$(call add,BASE_PACKAGES,basesystem) + +ve/generic: ve/.bare + @$(call add,BASE_LISTS,\ + $(call tags,base && (server || network || security || pkg))) + +ve/openvpn: ve/.bare + @$(call add,BASE_LISTS,$(call tags,server openvpn)) + +# NB: if there are too many screens above, it might make sense to ve.d/ +endif diff --git a/libdistro.mk b/libdistro.mk deleted file mode 100644 index 80ceb383..00000000 --- a/libdistro.mk +++ /dev/null @@ -1,32 +0,0 @@ -# low-level part of distro.mk - -# request particular image subprofile inclusion -sub/%: - @$(call add,SUBPROFILES,$(@:sub/%=%)) - -# FIXME: maybe syslinux feature belongs to distro/.init? -boot/%: distro/.init use/syslinux - @$(call set,BOOTLOADER,$*) - -# initalize config from scratch, put some sane defaults in -distro/.init: - @echo "** preparing distro configuration$${DEBUG:+: see $(CONFIG)}" $(SHORTEN) - @$(call try,MKIMAGE_PREFIX,/usr/share/mkimage) - @$(call try,GLOBAL_VERBOSE,) - @$(call try,IMAGEDIR,$(IMAGEDIR)) - @$(call try,IMAGENAME,$(IMAGENAME)) - -distro/.branding: distro/.init - @$(call try,BRANDING,altlinux-sisyphus) - @$(call set,IMAGE_INIT_LIST,+branding-$$(BRANDING)-release) - -# NB: the last flavour in KFLAVOURS gets to be the default one; -# the kernel packages regexp evaluation has to take place at build stage -distro/.base: distro/.branding sub/stage1 use/syslinux use/syslinux/localboot.cfg - @$(call set,KFLAVOURS,std-def) - -# pick up release manager's config -distro/.rc: - @if [ -s $(HOME)/.mkimage/profiles.mk ]; then \ - $(call put,-include $(HOME)/.mkimage/profiles.mk); \ - fi diff --git a/pkg.in/lists/tagged/base+security b/pkg.in/lists/tagged/base+security index e1de7bc2..567986c3 100644 --- a/pkg.in/lists/tagged/base+security +++ b/pkg.in/lists/tagged/base+security @@ -1,3 +1,4 @@ sudo su passwd +syslogd diff --git a/pkg.in/lists/tagged/server,openvpn b/pkg.in/lists/tagged/server,openvpn new file mode 100644 index 00000000..842f3f04 --- /dev/null +++ b/pkg.in/lists/tagged/server,openvpn @@ -0,0 +1,11 @@ +apt +basesystem +sysklogd +etcnet +glibc-nss +openvpn +netlist +#alterator-fbi +openssh-server +passwd +less diff --git a/pkg.in/lists/tagged/ve+tools b/pkg.in/lists/tagged/ve+tools new file mode 100644 index 00000000..cc900a96 --- /dev/null +++ b/pkg.in/lists/tagged/ve+tools @@ -0,0 +1,5 @@ +vim-console +screen +zsh +rsync +lftp diff --git a/sub.in/README b/sub.in/README index 77d7e94f..050bf1be 100644 --- a/sub.in/README +++ b/sub.in/README @@ -1,21 +1,21 @@ Этот каталог содержит субпрофили; содержимое затребованных (названия которых содержатся в значении переменной SUBPROFILES, -которую заполняют цели sub/* -- см. ../distro.mk) будет +которую заполняют цели sub/* -- см. ../lib/distro.mk) будет скопировано в каталог $(BUILDDIR)/image/ формируемого профиля. -Просьба ответственно относиться к модификации существующих +Просьба ответственно относиться к изменению существующих субпрофилей и вдумчиво -- к созданию новых; возможно, достаточно всего лишь оформить нужное новой фичей (см. ../features.in/). -Обратите внимание: поскольку сборка частей образа и происходит -в каталогах субпрофилей, то повторное использование одного простого -субпрофиля в рамках сгенерированного профиля штатным образом невозможно. -Если требуется создать несколько близких по реализации субпрофилей, -изучите stage2 и задействующие его фичи. +Обратите внимание: поскольку сборка частей дистрибутивного образа +и происходит в каталогах субпрофилей, то повторное использование +одного простого субпрофиля в рамках сгенерированного профиля штатным +образом невозможно. Если требуется создать несколько близких по +реализации субпрофилей, изучите stage2 и задействующие его фичи. Краткое описание существующих вариантов: -- stage1: propagator и загрузчик (при подключении фичи syslinux); +- stage1: propagator и загрузчик (совместно с фичей syslinux); типично требуется для инсталяторов, live- и rescue-образов, но может использоваться без добавления таковых в образ, обеспечивая сетевую загрузку второй стадии diff --git a/sub.in/main/README b/sub.in/main/README index cceab01c..ab63b471 100644 --- a/sub.in/main/README +++ b/sub.in/main/README @@ -1,5 +1,6 @@ Этот каталог содержит субпрофиль main, собирающий пакетную базу -для локальной инсталяции системы и возможности установки дополнений. +для локальной инсталяции дистрибутива из полученного образа, +включая необязательные пакеты. Подбирает: - SYSTEM_PACKAGES, COMMON_PACKAGES, BASE_PACKAGES, BASE_LISTS: diff --git a/sub.in/stage2/Makefile b/sub.in/stage2/Makefile index 92e7d2b1..d576b4d2 100644 --- a/sub.in/stage2/Makefile +++ b/sub.in/stage2/Makefile @@ -26,7 +26,7 @@ IMAGE_PACKAGES += $(SYSTEM_PACKAGES) # no kernel flavour specified will result in no modules for stage1 vmlinuz STAGE1_KFLAVOUR ?= $(lastword $(KFLAVOURS)) -ifeq "$(STAGE1_KFLAVOUR)" "" +ifeq (,$(STAGE1_KFLAVOUR)) $(error STAGE1_KFLAVOUR is utterly empty; cannot guess either) endif