Commit f5a8b893 authored by Michael Shigorin's avatar Michael Shigorin

stage2 based live subprofiles, updated docs

- introduced generic stage2 subprofile (non-standalone) - ported installer and rescue over to stage2/{install2,rescue} - initial stage2/live (needs more work for sure) - use make-initrd-propagator - updated and somewhat extended doc/ NB: mind #26133, #26134
parent 0e57149d
...@@ -38,7 +38,11 @@ license: GPLv2+, see COPYING ...@@ -38,7 +38,11 @@ license: GPLv2+, see COPYING
+ базовые комплекты помещены в подкаталогах под sub.in/; + базовые комплекты помещены в подкаталогах под sub.in/;
их наборы скриптов могут расширяться фичами их наборы скриптов могут расширяться фичами
- stage1: propagator, ядро инсталятора и initrd в т.ч. с firmware - stage1: propagator, ядро инсталятора и initrd в т.ч. с firmware
- install2: сам инсталятор (и модули ядра) - stage2: базовый live-образ (и модули ядра, соответствующие stage1);
используется только с модификаторами (см. соответствующие фичи):
+ stage2/install2: инсталятор
+ stage2/live: LiveCD
+ stage2/rescue: спасательная система
- main: пакетная база к инсталяции (обязательная и дополнительная) - main: пакетная база к инсталяции (обязательная и дополнительная)
- фичи: - фичи:
+ список собирается в $(FEATURES) + список собирается в $(FEATURES)
...@@ -46,9 +50,12 @@ license: GPLv2+, see COPYING ...@@ -46,9 +50,12 @@ license: GPLv2+, see COPYING
+ описываются в индивидуальных features.in/*/config.mk + описываются в индивидуальных features.in/*/config.mk
+ могут зависеть друг от друга и требовать субпрофили + могут зависеть друг от друга и требовать субпрофили
+ при сборке $(BUILDDIR) содержимое указанных в $(FEATURES) фич + при сборке $(BUILDDIR) содержимое указанных в $(FEATURES) фич
(подкаталоги, соответствующие входящим в дистрибутив субпрофилям) (подкаталоги, соответствующие входящим в дистрибутив субпрофилям
под их итоговыми названиями -- например, live, а не stage2/live)
добавляется в профиль; затем выполняются generate.sh, generate.mk добавляется в профиль; затем выполняются generate.sh, generate.mk
- списки пакетов (*_LISTS): просьба по возможности избегать дублирования - списки пакетов (*_LISTS): просьба по возможности избегать дублирования
NB: перечисленные в этих переменных файлы автоматически копируются
в порождаемый профиль => не следует указывать пакаджлисты напрямую
- индивидуальные пакеты (*_PACKAGES): следует крайне осторожно пользоваться - индивидуальные пакеты (*_PACKAGES): следует крайне осторожно пользоваться
COMMON_PACKAGES -- эти пакеты попадут во все стадии, в том числе в образ COMMON_PACKAGES -- эти пакеты попадут во все стадии, в том числе в образ
чувствительной к объёму install2 (в stage1 -- только в инструментальный чувствительной к объёму install2 (в stage1 -- только в инструментальный
......
...@@ -33,7 +33,7 @@ distro/syslinux: distro/.init distro/.branding sub/stage1 \ ...@@ -33,7 +33,7 @@ distro/syslinux: distro/.init distro/.branding sub/stage1 \
# BASE_PACKAGES, BASE_LISTS, MAIN_PACKAGES, MAIN_LISTS: see sub.in/main/ # BASE_PACKAGES, BASE_LISTS, MAIN_PACKAGES, MAIN_LISTS: see sub.in/main/
# something actually useful (as a network-only installer) # something actually useful (as a network-only installer)
distro/installer: distro/.base use/installer distro/installer: distro/.base use/install2
@$(call set,INSTALLER,altlinux-generic) @$(call set,INSTALLER,altlinux-generic)
@$(call set,STAGE1_KMODULES_REGEXP,drm.*) # for KMS @$(call set,STAGE1_KMODULES_REGEXP,drm.*) # for KMS
...@@ -59,9 +59,8 @@ distro/minicd: distro/server-base ...@@ -59,9 +59,8 @@ distro/minicd: distro/server-base
@$(call set,KFLAVOURS,pure-emerald) # usually recent drivers @$(call set,KFLAVOURS,pure-emerald) # usually recent drivers
@$(call add,MAIN_PACKAGES,etcnet-full) @$(call add,MAIN_PACKAGES,etcnet-full)
distro/rescue: distro/.branding sub/rescue use/stage1kernel use/syslinux/ui-menu distro/live: distro/.base use/live use/syslinux/ui-menu
@$(call set,KFLAVOURS,un-def) # usually recent drivers too distro/rescue: distro/.base use/rescue use/syslinux/ui-menu
@$(call add,RESCUE_PACKAGES,etcnet-full)
# desktop distributions # desktop distributions
......
требования по оформлению кода требования по оформлению кода
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* постарайтесь не вносить без обсуждения разнобой стилей, * постарайтесь не вносить без обсуждения разнобой стилей,
если есть предметные пожелания по коррекции текущего -- если есть предметные пожелания по коррекции текущего --
пишите, обсудим; пишите в devel-distro@, обсудим;
* перед тем, как делать существенные переработки уже имеющегося * перед тем, как делать существенные переработки уже имеющегося
кода -- опять же опишите проблему, идею и предполагаемый результат, кода -- опять же опишите проблему, идею и предполагаемый результат,
...@@ -14,7 +13,6 @@ ...@@ -14,7 +13,6 @@
рекомендации рекомендации
~~~~~~~~~~~~ ~~~~~~~~~~~~
* трезво относитесь ко входным данным и не пренебрегайте кавычками: * трезво относитесь ко входным данным и не пренебрегайте кавычками:
название дистрибутива с пробелом или получение текста ошибки вместо название дистрибутива с пробелом или получение текста ошибки вместо
ожидаемого вывода команды могут привести к сложнодиагностируемым ожидаемого вывода команды могут привести к сложнодиагностируемым
...@@ -31,3 +29,8 @@ ...@@ -31,3 +29,8 @@
* предпочтительно применение $() вместо `` (особенно при вложенности); * предпочтительно применение $() вместо `` (особенно при вложенности);
* постарайтесь не вылазить за 80 колонок. * постарайтесь не вылазить за 80 колонок.
ссылки
~~~~~~
* https://lists.altlinux.org/mailman/listinfo/devel-distro
(подписка по приглашению)
- pkg.in/lists/Makefile
+ ожидает, что названия пакаджлистов указываются в переменных
вида *_LISTS, и копирует в генерируемый профиль только их
+ если задать имя файла пакаджлиста непосредственно в Makefile
субпрофиля, он не будет скопирован
+ характерное сообщение об ошибке:
E: Couldn't find package
- features.in/stage2/stage1/scripts.d/02-kdefault
- features.in/stage2/stage1/scripts.d/03-test-kernel
- sub.in/stage1/Makefile
+ ожидают, что в stage1 попадёт строго одно ядро сообразно
явному указанию в STAGE1_KFLAVOUR (либо последнее указанное
в KFLAVOURS)
+ если добавить какой-либо kernel-image в STAGE1_PACKAGES*,
результат может быть неожиданным
+ вероятная ошибка: незагрузка полученного squashfs
...@@ -10,30 +10,31 @@ endif ...@@ -10,30 +10,31 @@ endif
# first rsync what's static, and make backups -- # first rsync what's static, and make backups --
# these might signal of file clashes (or plain dirt); # these might signal of file clashes (or plain dirt);
# then handle two more ways of implementing a feature # then handle two more ways of implementing a feature
# NB: subprofile can be specified as src/dest
all: all:
@echo "** starting feature configuration" @echo "** starting feature configuration"
@if test -n "$(GLOBAL_DEBUG)"; then echo "** requested: $(FEATURES)"; fi @if test -n "$(GLOBAL_DEBUG)"; then echo "** requested: $(FEATURES)"; fi
@for dir in $(FEATURES); do \ @for dir in $(FEATURES); do \
for sub in $(SUBPROFILES); do \ for sub in $(SUBPROFILES); do \
if test -d $$dir/$$sub/; then \ dst="${sub#*/}" && \
if rsync -ab $$dir/$$sub/ $(BUILDDIR)/$$sub/; \ if test -d "$$dir/$$dst/"; then \
if rsync -ab "$$dir/$$dst/" "$(BUILDDIR)/$$dst/"; \
then \ then \
type -t git >&/dev/null && \ type -t git >&/dev/null && \
pushd $(BUILDDIR)/$$sub/ && \ pushd "$(BUILDDIR)/$$dst/" && \
git add . && \ git add . && \
git commit -qam "$@/$$dir/$$sub" ||:; \ git commit -qam "$@/$$dir/$$dst" ||:; \
popd; \ popd; \
fi; \ fi; \
fi; \ fi; \
done; \ done; \
if test -x $$dir/generate.sh; then \ if test -x "$$dir/generate.sh"; then \
pushd $$dir && \ pushd "$$dir" && \
sh generate.sh; \ sh generate.sh; \
popd; \ popd; \
fi; \ fi; \
if test -s $$dir/generate.mk; then \ if test -s "$$dir/generate.mk"; then \
$(MAKE) -C $$dir -f generate.mk; \ $(MAKE) -C "$$dir" -f generate.mk; \
fi; \ fi; \
done done
......
Этот каталог содержит субпрофиль второй стадии инсталятора, Эта фича дополняет базовый "живой" образ второй стадии
требующийся для сборки инсталяционных образов. специфическими для инсталяционного образа настройками
и скриптовыми хуками.
При добавлении скриптов в image-scripts.d/ следует позаботиться, При добавлении скриптов в image-scripts.d/ следует позаботиться,
чтобы в компактном livecd, которым является инсталятор, оказались чтобы в компактном livecd, которым является инсталятор, оказались
нужные им утилиты (INSTALL2_PACKAGES). Перегружать его не следует, нужные им утилиты (INSTALL2_PACKAGES). Перегружать его не следует,
поскольку это прямо влияет на требования по минимальному размеру поскольку это прямо влияет на требования по минимальному размеру
оперативной памяти для установки. оперативной памяти для установки.
Результат -- squashfs в файле altinst, подлежащем копированию
в образ.
use/installer: use/stage1kernel sub/install2 use/syslinux/install2.cfg use/install2: use/stage2 sub/stage2/install2
@$(call add,FEATURES,installer) @$(call add,FEATURES,install2)
@$(call set,INSTALL2_PACKAGES,installer-distro-$$(INSTALLER)-stage2) @$(call set,INSTALL2_PACKAGES,installer-distro-$$(INSTALLER)-stage2)
@$(call add,INSTALL2_PACKAGES,branding-$$(BRANDING)-alterator) @$(call add,INSTALL2_PACKAGES,branding-$$(BRANDING)-alterator)
@$(call add,MAIN_PACKAGES,branding-$$(BRANDING)-release) @$(call add,MAIN_PACKAGES,branding-$$(BRANDING)-release)
......
# stage2 mod: build install2 subprofile (installer "live" part)
IMAGE_PACKAGES = $(COMMON_PACKAGES) \
$(INSTALL2_PACKAGES) \
udev e2fsprogs glibc-nss
MKI_PACK_RESULTS = squash:altinst
debug:
@echo "** install2: IMAGE_PACKAGES: $(IMAGE_PACKAGES)"
@echo "** install2: IMAGE_PACKAGES_REGEXP: $(IMAGE_PACKAGES_REGEXP)"
Эта фича дополняет базовый "живой" образ второй стадии
специфическими для полноценного LiveCD настройками
и скриптовыми хуками.
use/live: use/stage2 sub/stage2/live
@$(call add,FEATURES,live)
# @$(call add,LIVE_LISTS,base-live)
# stage2 mod: livecd
IMAGE_PACKAGES = $(COMMON_PACKAGES) \
$(LIVE_PACKAGES) \
$(call map,list,$(LIVE_LISTS) $(LIVE_GROUPS)) \
interactivesystem
MKI_PACK_RESULTS = squash:live
use/lowmem: use/installer use/lowmem: use/install2
@$(call add,FEATURES,lowmem) @$(call add,FEATURES,lowmem)
# TODO: http://www.altlinux.org/Branding/slideshow => disable? # TODO: http://www.altlinux.org/Branding/slideshow => disable?
# also installer-feature-rm-slideshow # also installer-feature-rm-slideshow
Эта фича дополняет базовый "живой" образ второй стадии
специфическими для спасательного образа настройками
и скриптовыми хуками.
use/rescue: use/stage2 sub/stage2/rescue
@$(call add,FEATURES,rescue)
@$(call add,RESCUE_LISTS,base-rescue)
#!/bin/sh #!/bin/sh
# stage1 needs this # stage1 needs this <-- FIXME: duplicated in sub.in/stage2/image-scripts.d/00propagator
mkdir -p /image #mkdir -p /image
# m-p-d::profiles/rescue/image-scripts.d/999system # m-p-d::profiles/rescue/image-scripts.d/999system
mv -f -- /etc/inittab.rescue /etc/inittab mv -f -- /etc/inittab.rescue /etc/inittab
......
# stage2 mod: rescue "live" image
IMAGE_PACKAGES = $(COMMON_PACKAGES) \
$(RESCUE_PACKAGES) \
$(call list,$(RESCUE_LISTS)) \
interactivesystem startup-rescue
MKI_PACK_RESULTS = squash:rescue
debug:
@echo "** rescue: IMAGE_PACKAGES: $(IMAGE_PACKAGES)"
@echo "** rescue: IMAGE_PACKAGES_REGEXP: $(IMAGE_PACKAGES_REGEXP)"
Эта фича предназначена для обобщения скриптовых хуков,
нужных для различных live-образов, загружаемых с ядром
из stage1 (инсталятор, спасательная и живая система).
use/stage1kernel: sub/stage1
@$(call add,FEATURES,stage1kernel)
#!/bin/sh
# symlink default kernel iff requested but not yet done
STAGE1_KFLAVOUR="$INFO_STAGE1_KFLAVOUR"
if [ -n "$GLOBAL_VERBOSE" ]; then
echo "** STAGE1_KFLAVOUR: $STAGE1_KFLAVOUR"
fi
# kernel-image in instrumental chroot
VMLINK=/boot/vmlinuz
# better bail out early rather than make a silly symlink
shopt -s failglob
if [ -L "$VMLINK" ]; then
echo "** $VMLINK -> $(readlink "$VMLINK")"
fi
if [ -n "$STAGE1_KFLAVOUR" ]; then
VMLINUZ="$(cd /boot; echo vmlinuz-*-$STAGE1_KFLAVOUR-*)"
if [ -n "$VMLINUZ" ]; then
ln -sf "$VMLINUZ" "$VMLINK"
echo "** overriding $VMLINK with $VMLINUZ"
fi
fi
Эта фича служит для добавления в первую стадию хуков, необходимых
при наличии в stage1 ядра (что типично, но не обязательно).
Передача информации о конфигурации ядра между stage1 и stage2 также
требуется для оптимального сжатия squashfs-образа второй стадии.
# "1" is not a typo
use/stage2: sub/stage1
@$(call add,FEATURES,stage2)
@$(call add,STAGE1_PACKAGES,file make-initrd make-initrd-propagator)
# NB: sub/stage2 isn't used standalone but rather
# as a base for various livecd modifications
# (currently install2, live, rescue)
#!/bin/sh
# prepare base make-initrd configuration for stage1
# see also http://www.altlinux.org/Make-initrd-propagator
subst 's/AUTODETECT/#AUTODETECT/' /etc/initrd.mk
echo 'FEATURES += propagator' >> /etc/initrd.mk
#!/bin/sh
# FIXME: move somewhere else
#echo 'FEATURES += nfs' >> /etc/initrd.mk
# FIXME: move to plymouth feature
#if [ -f /etc/plymouth/plymouthd.conf ];then
# subst 's/#\([T\[]\)/\1/' /etc/plymouth/plymouthd.conf
# echo 'FEATURES += plymouth' >> /etc/initrd.mk
#fi
#!/bin/sh -efu
# NB: /etc/initrd.mk carefully prepared by earlier scripts
kver="$(rpm -qa 'kernel-image*' --qf '%{installtime} %{version}-%{name}-%{release}\n' \
| sort -n \
| tail -n 1 \
| cut -f 2 -d ' ' \
| sed 's/kernel-image-//')"
make-initrd --no-checks -k $kver \
&& gzip < /boot/initrd-$kver.img > $(getconf LIBDIR)/propagator/initfs \
|| exit 1
[ -h /boot/vmlinuz ] || ln -s vmlinuz-$kver /boot/vmlinuz
[ -h /boot/initrd.img ] || ln -s initrd-$kver.img /boot/initrd.img
label live
menu label ^LiveCD (no hard disk needed)
kernel alt0/vmlinuz
append initrd=alt0/full.cz live ramdisk_size=72000 fastboot stagename=live showopts automatic=method:cdrom
### FIXME: see m-p-d::profiles/scripts.d/03-syslinux
...@@ -18,9 +18,10 @@ $(warning no syslinux ui configured, default is plain text prompt) ...@@ -18,9 +18,10 @@ $(warning no syslinux ui configured, default is plain text prompt)
SYSLINUX_UI := prompt SYSLINUX_UI := prompt
endif endif
# SUBPROFILES are considered SYSLINUX_CFG too; # SUBPROFILES are considered SYSLINUX_CFG too
# (note these can appear like stage2/live);
# 01defaults.cfg is included indefinitely # 01defaults.cfg is included indefinitely
SYSLINUX_CFG := $(SYSLINUX_CFG) $(SUBPROFILES) defaults SYSLINUX_CFG := $(SYSLINUX_CFG) $(notdir $(SUBPROFILES)) defaults
### have to operate BUILDDIR, not pretty... ### have to operate BUILDDIR, not pretty...
DSTDIR := $(BUILDDIR)/stage1/files/syslinux/.in DSTDIR := $(BUILDDIR)/stage1/files/syslinux/.in
......
...@@ -11,7 +11,9 @@ include $(GLOBAL_BUILDDIR)/functions.mk ...@@ -11,7 +11,9 @@ include $(GLOBAL_BUILDDIR)/functions.mk
include $(GLOBAL_BUILDDIR)/distcfg.mk include $(GLOBAL_BUILDDIR)/distcfg.mk
include $(MKIMAGE_PREFIX)/config.mk include $(MKIMAGE_PREFIX)/config.mk
SUBDIRS = $(SUBPROFILES) # for complex-specified subprofiles like stage2/live,
# take the latter part
SUBDIRS = $(notdir $(SUBPROFILES))
# "main" subprofile needs genbasedir # "main" subprofile needs genbasedir
CHROOT_PACKAGES = apt-utils CHROOT_PACKAGES = apt-utils
......
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
sub/%: sub/%:
@$(call add,SUBPROFILES,$(@:sub/%=%)) @$(call add,SUBPROFILES,$(@:sub/%=%))
sub/install2 sub/rescue: sub/stage1
# FIXME: maybe syslinux feature belongs to distro/.init? # FIXME: maybe syslinux feature belongs to distro/.init?
boot/%: distro/.init use/syslinux boot/%: distro/.init use/syslinux
@$(call set,BOOTLOADER,$*) @$(call set,BOOTLOADER,$*)
......
udev
e2fsprogs
glibc-nss
firmware-linux
firmware-aic94xx-seq
#altlinux-release
interactivesystem
### Startup ### Startup
#kernel-image-@KERNEL@
rootfiles rootfiles
sysvinit sysvinit
interactivesystem
startup startup
startup-rescue startup-rescue
...@@ -128,8 +118,8 @@ whois ...@@ -128,8 +118,8 @@ whois
wireless-tools wireless-tools
wpa_supplicant wpa_supplicant
### Applications/Shells ### Applications/Shells
zsh
ash ash
bash bash
bc bc
......
...@@ -6,20 +6,25 @@ endif ...@@ -6,20 +6,25 @@ endif
include $(BUILDDIR)/distcfg.mk include $(BUILDDIR)/distcfg.mk
# if the subprofile is specified in src/dst notation,
# take src/ and put it as dst/ (for stage2 variants)
all: all:
@for dir in $(SUBPROFILES); do \ @for sub in $(SUBPROFILES); do \
rsync -a $$dir/ $(BUILDDIR)/$$dir/ && \ src="$${sub%/*}" && \
dst="$${sub#*/}" && \
rsync -a "$$src/" "$(BUILDDIR)/$$dst/" && \
type -t git >&/dev/null && \ type -t git >&/dev/null && \
cd $(BUILDDIR)/$$dir/ && \ cd "$(BUILDDIR)/$$dst/" && \
git add . && \ git add . && \
git commit -qam "$@/$$dir"; \ git commit -qam "$$sub"; \
cd - >&/dev/null; \ cd - >&/dev/null; \
done ||: done
clean: clean:
@for dir in $(SUBPROFILES); do \ @for sub in $(SUBPROFILES); do \
if [ -n "$$dir" ]; then \ dst="${sub#*/}" && \
rm -rf $(BUILDDIR)/$$dir && \ if [ -n "$$dst" ]; then \
mkdir -p $(BUILDDIR)/$$dir; \ rm -rf "$(BUILDDIR)/$$dst" && \
mkdir -p "$(BUILDDIR)/$$dst"; \
fi; \ fi; \
done done
Этот каталог содержит субпрофили; содержимое заказанных Этот каталог содержит субпрофили; содержимое затребованных
в формируемый профиль (названия которых содержатся в значении (названия которых содержатся в значении переменной SUBPROFILES,
переменной SUBPROFILES, которую обычно заполняют цели sub/* -- которую заполняют цели sub/* -- см. ../distro.mk) будет
см. ../distro.mk) будет скопировано в каталог $(BUILDDIR)/image/. скопировано в каталог $(BUILDDIR)/image/ формируемого профиля.
Просьба ответственно относиться к модификации существующих Просьба ответственно относиться к модификации существующих
и вдумчиво -- к созданию новых; возможно, достаточно всего лишь и вдумчиво -- к созданию новых; возможно, достаточно всего лишь
оформить нужное новой фичей (см. ../features.in/). оформить нужное новой фичей (см. ../features.in/).
Новый субпрофиль технологически обоснован тогда, когда он может Обратите внимание: поскольку сборка частей образа и происходит
потребоваться одновременно с уже существующим схожим (поскольку в каталогах субпрофилей, то повторное использование одного простого
сборка частей образа и происходит в каталогах субпрофилей, т.е. субпрофиля в рамках сгенерированного профиля штатным образом невозможно.
повторное использование одного субпрофиля в рамках одного уже Если требуется создать несколько близких по реализации субпрофилей,
сгенерированного профиля штатным образом невозможно). изучите stage2 и задействующие его фичи.
Краткое описание существующих: Краткое описание существующих вариантов:
- stage1: propagator и загрузчик (при подключении фичи syslinux); - stage1: propagator и загрузчик (при подключении фичи syslinux);
типично требуется для инсталяторов, live- и rescue-образов типично требуется для инсталяторов, live- и rescue-образов,
но может использоваться без добавления таковых в образ,
обеспечивая сетевую загрузку второй стадии
- install2: installer, installer-feature-*-stage2 и прочее обычно - stage2: наиболее сложный технологически субпрофиль, поскольку
востребованное в инсталяционных образах он является только базовым для получения ряда итоговых частей
дистрибутива (install2, live, rescue); задействуется для этого
только опосредованно через use/stage2/* и модифицирует stage1
в силу наличия связи между ними (в stage1 попадает образ ядра
и firmware, в stage2 -- соответствующие модули)
- main: пакетная база, укладываемая на образ (NB: поскольку рабочий - main: пакетная база, укладываемая на образ (NB: поскольку рабочий
чрут в этом случае не содержит ничего, кроме пакетов, добавлять чрут в этом случае не содержит ничего, кроме пакетов, добавлять
image-scripts.d/* смысла нет, только scripts.d/*) image-scripts.d/* смысла нет, только scripts.d/*)
- rescue: спасательная система
# step 4: build install2 subprofile (installer "live" part)
ifndef GLOBAL_BUILDDIR
$(error GLOBAL_BUILDDIR not defined)
endif
default: all
include $(GLOBAL_BUILDDIR)/distcfg.mk
include $(GLOBAL_BUILDDIR)/functions.mk
include $(MKIMAGE_PREFIX)/config.mk
# this might have been prepared by ../stage1/scripts.d/03-test-kernel
-include $(GLOBAL_BUILDDIR)/squashcfg.mk
# here we also try and come up with the installer kernel/modules, if any;
# no kernel flavour specified will result in no modules for stage1 vmlinuz
STAGE1_KFLAVOUR ?= $(lastword $(KFLAVOURS))
ifeq "$(STAGE1_KFLAVOUR)" ""
$(error STAGE1_KFLAVOUR is utterly empty; cannot guess either)
endif
# need kernel modules only (which require corresponding kernel-image);
# these go into work chroot; NB: no vmlinuz there
IMAGE_PACKAGES_REGEXP = $(call kpackages,$(STAGE1_KMODULES),$(STAGE1_KFLAVOUR))
IMAGE_PACKAGES = $(COMMON_PACKAGES) \
$(INSTALL2_PACKAGES) \
./packages
MKI_PACK_RESULTS = squash:altinst
include $(MKIMAGE_PREFIX)/targets.mk
all: | $(GLOBAL_DEBUG) build-image run-image-scripts pack-image \
$(GLOBAL_CLEAN_WORKDIR)
debug:
@echo "** install2: IMAGE_PACKAGES: $(IMAGE_PACKAGES)"
@echo "** install2: IMAGE_PACKAGES_REGEXP: $(IMAGE_PACKAGES_REGEXP)"
udev
e2fsprogs
glibc-nss
Этот каталог содержит субпрофиль "живой" второй стадии,
подходящей для сборки спасательных образов.
Результат -- squashfs в файле rescue, подлежащем копированию
в итоговый образ.
#!/bin/sh
# for udev, "FATAL ERROR IN INIT: overmounting /image" otherwise
ln -sf /proc/mounts /etc/mtab
# pam_console_apply is harmful during install
find /etc/udev/rules.d/ -type f -print0 |
xargs -r0 fgrep -Zl pam_console_apply -- |
xargs -r0 rm -fv --
#!/bin/sh
# remove unused fonts
cd /usr/share/fonts/bitmap/misc/ &&
rm -f *ja.* *ko.* han* gb* jis* k14* rk* *rk.* *kana* cl* *JIS*
# drop unneeded translations
cd /usr/share/qt4/translations/ && rm -f *_zh* *_ja*
# l10n
cd /usr/share/X11/locale && rm -rf ja* ko* th* vi* zh*
# xkb
cd /usr/share/X11/xkb/symbols && rm -rf jp kr th vn cn
# locales
cd /usr/lib*/locale && rm -rf ja_* ko_* th_* zh_*
# gconv
cd /usr/lib*/gconv && rm -f JIS* T*
:
#!/bin/sh
# remove unused legacy/tiny fonts
cd /usr/share/fonts/bitmap/misc/ && rm -f *ISO* *KOI* [1456]*
# l10n
cd /usr/share/X11/locale/ && rm -rf *[^C8]/ iso*
# xkb
cd /usr/share/X11/xkb/symbols && rm -rf *_vndr
# gconv
cd /usr/lib*/gconv && rm -f CP* ISO* *JIS* KOI* HP* MAC*
:
#!/bin/sh
# remove all docs
rpmquery -adl |grep ^/ |xargs -r rm -f --
rm -rf /usr/share/{doc,man,info,license,gfxboot}
# remove unused icons
rm -rf /usr/share/icons/{hicolor,large,mini}
# remove PAM plugins
rm -rf /lib*/security
# remove some unused files
rm -rf /usr/share/ca-certificates
rm -rf /usr/lib/qt4/plugins/codecs
rm -f /usr/lib*/gconv/IBM*
rm -f /usr/lib*/gconv/BIG5*
rm -f /usr/lib*/gconv/EBCDIC*
# remove unneeded timezones
rm -rf /usr/share/zoneinfo/{posix,right}/
# remove unneeded l10n
find /usr/share/locale/ -type f \! -name 'alterator*' -delete
# remove non-utf8 locales
find /usr/lib*/locale -mindepth 1 -maxdepth 1 -type d \! -name '*.utf8' -print0 |
xargs -r0 rm -rf --
# xorg modules
rm -r /usr/lib*/X11/modules/dri
# remove ogfs
rm -f /lib*/evms/*/ogfs*
# remove cpp, gcc and perl
rpmquery -a cpp\* gcc\* perl-base |
xargs -r rpmi -e --nodeps --
# remove unneeded kernel modules
rm -rf /lib/modules/*/kernel/arch
rm -rf /lib/modules/*/kernel/drivers/atm
rm -rf /lib/modules/*/kernel/drivers/char/ipmi
rm -rf /lib/modules/*/kernel/drivers/char/watchdog
rm -rf /lib/modules/*/kernel/drivers/cpufreq
rm -rf /lib/modules/*/kernel/drivers/edac
rm -rf /lib/modules/*/kernel/drivers/firmware ###
rm -rf /lib/modules/*/kernel/drivers/hwmon
rm -rf /lib/modules/*/kernel/drivers/infiniband ###
rm -rf /lib/modules/*/kernel/drivers/input/{gameport,joy*}
rm -rf /lib/modules/*/kernel/drivers/isdn
rm -rf /lib/modules/*/kernel/drivers/media
rm -rf /lib/modules/*/kernel/drivers/mmc
rm -rf /lib/modules/*/kernel/drivers/mtd*
rm -rf /lib/modules/*/kernel/drivers/net/irda
rm -rf /lib/modules/*/kernel/drivers/net/wireless
rm -rf /lib/modules/*/kernel/drivers/staging
rm -rf /lib/modules/*/kernel/drivers/spi
rm -rf /lib/modules/*/kernel/drivers/telephony
rm -rf /lib/modules/*/kernel/drivers/usb/{misc,mon}
rm -rf /lib/modules/*/kernel/drivers/w1
rm -rf /lib/modules/*/kernel/fs/9p
rm -rf /lib/modules/*/kernel/fs/adfs
rm -rf /lib/modules/*/kernel/fs/affs
rm -rf /lib/modules/*/kernel/fs/afs
rm -rf /lib/modules/*/kernel/fs/autofs
rm -rf /lib/modules/*/kernel/fs/autofs4
rm -rf /lib/modules/*/kernel/fs/befs
rm -rf /lib/modules/*/kernel/fs/bfs
rm -rf /lib/modules/*/kernel/fs/btrfs
rm -rf /lib/modules/*/kernel/fs/cifs
rm -rf /lib/modules/*/kernel/fs/coda
rm -rf /lib/modules/*/kernel/fs/configfs
rm -rf /lib/modules/*/kernel/fs/cramfs
rm -rf /lib/modules/*/kernel/fs/efs
rm -rf /lib/modules/*/kernel/fs/freevxfs
rm -rf /lib/modules/*/kernel/fs/fuse
rm -rf /lib/modules/*/kernel/fs/hfs
rm -rf /lib/modules/*/kernel/fs/hfsplus
rm -rf /lib/modules/*/kernel/fs/hpfs
rm -rf /lib/modules/*/kernel/fs/jffs
rm -rf /lib/modules/*/kernel/fs/jffs2
rm -rf /lib/modules/*/kernel/fs/lockd
rm -rf /lib/modules/*/kernel/fs/minix
rm -rf /lib/modules/*/kernel/fs/ncpfs
rm -rf /lib/modules/*/kernel/fs/nilfs2
rm -rf /lib/modules/*/kernel/fs/ocfs2
rm -rf /lib/modules/*/kernel/fs/qnx4
rm -rf /lib/modules/*/kernel/fs/smbfs
rm -rf /lib/modules/*/kernel/fs/sysv
rm -rf /lib/modules/*/kernel/fs/udf
rm -rf /lib/modules/*/kernel/fs/ufs
rm -rf /lib/modules/*/kernel/net/*/netfilter
rm -rf /lib/modules/*/kernel/net/appletalk
rm -rf /lib/modules/*/kernel/net/ax25
rm -rf /lib/modules/*/kernel/net/bluetooth
rm -rf /lib/modules/*/kernel/net/dccp
rm -rf /lib/modules/*/kernel/net/decnet
rm -rf /lib/modules/*/kernel/net/econet
rm -rf /lib/modules/*/kernel/net/ipv6
rm -rf /lib/modules/*/kernel/net/ipx
rm -rf /lib/modules/*/kernel/net/irda
rm -rf /lib/modules/*/kernel/net/netfilter
rm -rf /lib/modules/*/kernel/net/netrom
rm -rf /lib/modules/*/kernel/net/rose
rm -rf /lib/modules/*/kernel/net/sctp
rm -rf /lib/modules/*/kernel/net/tipc
rm -rf /lib/modules/*/kernel/net/x25
rm -rf /lib/modules/*/kernel/sound
# remove blacklisted kernel modules
sed -n 's/^blacklist[[:space:]]\+\([^[:space:]]\+\).*/\1/p' /etc/modprobe.d/* |
while read i; do
find /lib/modules/ -type f -name "$i.ko" -delete
done
# run depmod after kernel modules removal
for i in /lib*/modules/*; do
/sbin/depmod -a -F /boot/System.map-${i##*/} ${i##*/}
done
# remove kernel images
rm -rf /boot/*
# remove rpm database
rm -rf /var/lib/rpm/*
# remove apt data files
rm -rf /var/cache/apt /var/lib*/apt
...@@ -46,6 +46,8 @@ all: | debug prepare-workdir copy-tree run-scripts build-propagator \ ...@@ -46,6 +46,8 @@ all: | debug prepare-workdir copy-tree run-scripts build-propagator \
debug: debug:
@if test -n "$(GLOBAL_VERBOSE)"; then \ @if test -n "$(GLOBAL_VERBOSE)"; then \
echo "** BRANDING: $(BRANDING)"; \
echo "** IMAGE_INIT_LIST: $(IMAGE_INIT_LIST)"; \
echo "** STAGE1_PACKAGES: $(STAGE1_PACKAGES)"; \ echo "** STAGE1_PACKAGES: $(STAGE1_PACKAGES)"; \
echo "** STAGE1_PACKAGES_REGEXP: $(STAGE1_PACKAGES_REGEXP)"; \ echo "** STAGE1_PACKAGES_REGEXP: $(STAGE1_PACKAGES_REGEXP)"; \
echo "** CHROOT_PACKAGES: $(CHROOT_PACKAGES)"; \ echo "** CHROOT_PACKAGES: $(CHROOT_PACKAGES)"; \
......
# step 4: build rescue subprofile (custom livecd) # step 4: build a stage2 subprofile (custom livecd)
# NB: stage2 is not standalone but rather a common base
# for all livecd images (installer, live, rescue)
ifndef GLOBAL_BUILDDIR ifndef GLOBAL_BUILDDIR
$(error GLOBAL_BUILDDIR not defined) $(error GLOBAL_BUILDDIR not defined)
...@@ -13,6 +16,9 @@ include $(MKIMAGE_PREFIX)/config.mk ...@@ -13,6 +16,9 @@ include $(MKIMAGE_PREFIX)/config.mk
# this might have been prepared by ../stage1/scripts.d/03-test-kernel # this might have been prepared by ../stage1/scripts.d/03-test-kernel
-include $(GLOBAL_BUILDDIR)/squashcfg.mk -include $(GLOBAL_BUILDDIR)/squashcfg.mk
# this should be brought in by corresponding specific stage2 feature
include stage2cfg.mk
# here we also try and come up with the stage1 kernel/modules, if any; # here we also try and come up with the stage1 kernel/modules, if any;
# no kernel flavour specified will result in no modules for stage1 vmlinuz # no kernel flavour specified will result in no modules for stage1 vmlinuz
STAGE1_KFLAVOUR ?= $(lastword $(KFLAVOURS)) STAGE1_KFLAVOUR ?= $(lastword $(KFLAVOURS))
...@@ -24,11 +30,6 @@ endif ...@@ -24,11 +30,6 @@ endif
# need kernel modules only (which require corresponding kernel-image); # need kernel modules only (which require corresponding kernel-image);
# these go into work chroot; NB: no vmlinuz there # these go into work chroot; NB: no vmlinuz there
IMAGE_PACKAGES_REGEXP = $(call kpackages,$(STAGE1_KMODULES),$(STAGE1_KFLAVOUR)) IMAGE_PACKAGES_REGEXP = $(call kpackages,$(STAGE1_KMODULES),$(STAGE1_KFLAVOUR))
IMAGE_PACKAGES = $(COMMON_PACKAGES) \
$(RESCUE_PACKAGES) \
./packages
MKI_PACK_RESULTS = squash:rescue
include $(MKIMAGE_PREFIX)/targets.mk include $(MKIMAGE_PREFIX)/targets.mk
...@@ -36,5 +37,4 @@ all: | $(GLOBAL_DEBUG) build-image run-image-scripts pack-image \ ...@@ -36,5 +37,4 @@ all: | $(GLOBAL_DEBUG) build-image run-image-scripts pack-image \
$(GLOBAL_CLEAN_WORKDIR) $(GLOBAL_CLEAN_WORKDIR)
debug: debug:
@echo "** rescue: IMAGE_PACKAGES: $(IMAGE_PACKAGES)" @echo "stage2: warning: dummy debug target not redefined"
@echo "** rescue: IMAGE_PACKAGES_REGEXP: $(IMAGE_PACKAGES_REGEXP)"
Этот каталог содержит общий субпрофиль "живой" второй стадии,
используемой в качестве базы для сборки образов install2, live, rescue
(возможно, нескольких одновременно в составе одного дистрибутива).
Результат -- squashfs в названном сообразно варианту файле,
подлежащем копированию в итоговый образ.
#!/bin/sh
# propagator needs this,
# "FATAL ERROR IN INIT: overmounting /image" otherwise
mkdir -p /image
#!/bin/sh #!/bin/sh
# for udev, "FATAL ERROR IN INIT: overmounting /image" otherwise # for udev
ln -sf /proc/mounts /etc/mtab ln -sf /proc/mounts /etc/mtab
# pam_console_apply is harmful during install # pam_console_apply is harmful during install
......
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