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
This commit is contained in:
parent
0e57149de9
commit
f5a8b89381
11
README
11
README
@ -38,7 +38,11 @@ license: GPLv2+, see COPYING
|
||||
+ базовые комплекты помещены в подкаталогах под sub.in/;
|
||||
их наборы скриптов могут расширяться фичами
|
||||
- stage1: propagator, ядро инсталятора и initrd в т.ч. с firmware
|
||||
- install2: сам инсталятор (и модули ядра)
|
||||
- stage2: базовый live-образ (и модули ядра, соответствующие stage1);
|
||||
используется только с модификаторами (см. соответствующие фичи):
|
||||
+ stage2/install2: инсталятор
|
||||
+ stage2/live: LiveCD
|
||||
+ stage2/rescue: спасательная система
|
||||
- main: пакетная база к инсталяции (обязательная и дополнительная)
|
||||
- фичи:
|
||||
+ список собирается в $(FEATURES)
|
||||
@ -46,9 +50,12 @@ license: GPLv2+, see COPYING
|
||||
+ описываются в индивидуальных features.in/*/config.mk
|
||||
+ могут зависеть друг от друга и требовать субпрофили
|
||||
+ при сборке $(BUILDDIR) содержимое указанных в $(FEATURES) фич
|
||||
(подкаталоги, соответствующие входящим в дистрибутив субпрофилям)
|
||||
(подкаталоги, соответствующие входящим в дистрибутив субпрофилям
|
||||
под их итоговыми названиями -- например, live, а не stage2/live)
|
||||
добавляется в профиль; затем выполняются generate.sh, generate.mk
|
||||
- списки пакетов (*_LISTS): просьба по возможности избегать дублирования
|
||||
NB: перечисленные в этих переменных файлы автоматически копируются
|
||||
в порождаемый профиль => не следует указывать пакаджлисты напрямую
|
||||
- индивидуальные пакеты (*_PACKAGES): следует крайне осторожно пользоваться
|
||||
COMMON_PACKAGES -- эти пакеты попадут во все стадии, в том числе в образ
|
||||
чувствительной к объёму install2 (в 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/
|
||||
|
||||
# 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,STAGE1_KMODULES_REGEXP,drm.*) # for KMS
|
||||
|
||||
@ -59,9 +59,8 @@ distro/minicd: distro/server-base
|
||||
@$(call set,KFLAVOURS,pure-emerald) # usually recent drivers
|
||||
@$(call add,MAIN_PACKAGES,etcnet-full)
|
||||
|
||||
distro/rescue: distro/.branding sub/rescue use/stage1kernel use/syslinux/ui-menu
|
||||
@$(call set,KFLAVOURS,un-def) # usually recent drivers too
|
||||
@$(call add,RESCUE_PACKAGES,etcnet-full)
|
||||
distro/live: distro/.base use/live use/syslinux/ui-menu
|
||||
distro/rescue: distro/.base use/rescue use/syslinux/ui-menu
|
||||
|
||||
# desktop distributions
|
||||
|
||||
|
@ -1,9 +1,8 @@
|
||||
требования по оформлению кода
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* постарайтесь не вносить без обсуждения разнобой стилей,
|
||||
если есть предметные пожелания по коррекции текущего --
|
||||
пишите, обсудим;
|
||||
пишите в devel-distro@, обсудим;
|
||||
|
||||
* перед тем, как делать существенные переработки уже имеющегося
|
||||
кода -- опять же опишите проблему, идею и предполагаемый результат,
|
||||
@ -14,7 +13,6 @@
|
||||
|
||||
рекомендации
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* трезво относитесь ко входным данным и не пренебрегайте кавычками:
|
||||
название дистрибутива с пробелом или получение текста ошибки вместо
|
||||
ожидаемого вывода команды могут привести к сложнодиагностируемым
|
||||
@ -31,3 +29,8 @@
|
||||
* предпочтительно применение $() вместо `` (особенно при вложенности);
|
||||
|
||||
* постарайтесь не вылазить за 80 колонок.
|
||||
|
||||
ссылки
|
||||
~~~~~~
|
||||
* https://lists.altlinux.org/mailman/listinfo/devel-distro
|
||||
(подписка по приглашению)
|
||||
|
17
doc/assumptions.txt
Normal file
17
doc/assumptions.txt
Normal file
@ -0,0 +1,17 @@
|
||||
- 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
|
||||
# first rsync what's static, and make backups --
|
||||
# these might signal of file clashes (or plain dirt);
|
||||
# then handle two more ways of implementing a feature
|
||||
|
||||
# NB: subprofile can be specified as src/dest
|
||||
all:
|
||||
@echo "** starting feature configuration"
|
||||
@if test -n "$(GLOBAL_DEBUG)"; then echo "** requested: $(FEATURES)"; fi
|
||||
@for dir in $(FEATURES); do \
|
||||
for sub in $(SUBPROFILES); do \
|
||||
if test -d $$dir/$$sub/; then \
|
||||
if rsync -ab $$dir/$$sub/ $(BUILDDIR)/$$sub/; \
|
||||
dst="${sub#*/}" && \
|
||||
if test -d "$$dir/$$dst/"; then \
|
||||
if rsync -ab "$$dir/$$dst/" "$(BUILDDIR)/$$dst/"; \
|
||||
then \
|
||||
type -t git >&/dev/null && \
|
||||
pushd $(BUILDDIR)/$$sub/ && \
|
||||
pushd "$(BUILDDIR)/$$dst/" && \
|
||||
git add . && \
|
||||
git commit -qam "$@/$$dir/$$sub" ||:; \
|
||||
git commit -qam "$@/$$dir/$$dst" ||:; \
|
||||
popd; \
|
||||
fi; \
|
||||
fi; \
|
||||
done; \
|
||||
if test -x $$dir/generate.sh; then \
|
||||
pushd $$dir && \
|
||||
if test -x "$$dir/generate.sh"; then \
|
||||
pushd "$$dir" && \
|
||||
sh generate.sh; \
|
||||
popd; \
|
||||
fi; \
|
||||
if test -s $$dir/generate.mk; then \
|
||||
$(MAKE) -C $$dir -f generate.mk; \
|
||||
if test -s "$$dir/generate.mk"; then \
|
||||
$(MAKE) -C "$$dir" -f generate.mk; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
|
@ -1,11 +1,9 @@
|
||||
Этот каталог содержит субпрофиль второй стадии инсталятора,
|
||||
требующийся для сборки инсталяционных образов.
|
||||
Эта фича дополняет базовый "живой" образ второй стадии
|
||||
специфическими для инсталяционного образа настройками
|
||||
и скриптовыми хуками.
|
||||
|
||||
При добавлении скриптов в image-scripts.d/ следует позаботиться,
|
||||
чтобы в компактном livecd, которым является инсталятор, оказались
|
||||
нужные им утилиты (INSTALL2_PACKAGES). Перегружать его не следует,
|
||||
поскольку это прямо влияет на требования по минимальному размеру
|
||||
оперативной памяти для установки.
|
||||
|
||||
Результат -- squashfs в файле altinst, подлежащем копированию
|
||||
в образ.
|
@ -1,5 +1,5 @@
|
||||
use/installer: use/stage1kernel sub/install2 use/syslinux/install2.cfg
|
||||
@$(call add,FEATURES,installer)
|
||||
use/install2: use/stage2 sub/stage2/install2
|
||||
@$(call add,FEATURES,install2)
|
||||
@$(call set,INSTALL2_PACKAGES,installer-distro-$$(INSTALLER)-stage2)
|
||||
@$(call add,INSTALL2_PACKAGES,branding-$$(BRANDING)-alterator)
|
||||
@$(call add,MAIN_PACKAGES,branding-$$(BRANDING)-release)
|
11
features.in/install2/install2/stage2cfg.mk
Normal file
11
features.in/install2/install2/stage2cfg.mk
Normal file
@ -0,0 +1,11 @@
|
||||
# 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)"
|
3
features.in/live/README
Normal file
3
features.in/live/README
Normal file
@ -0,0 +1,3 @@
|
||||
Эта фича дополняет базовый "живой" образ второй стадии
|
||||
специфическими для полноценного LiveCD настройками
|
||||
и скриптовыми хуками.
|
3
features.in/live/config.mk
Normal file
3
features.in/live/config.mk
Normal file
@ -0,0 +1,3 @@
|
||||
use/live: use/stage2 sub/stage2/live
|
||||
@$(call add,FEATURES,live)
|
||||
# @$(call add,LIVE_LISTS,base-live)
|
8
features.in/live/live/stage2cfg.mk
Normal file
8
features.in/live/live/stage2cfg.mk
Normal file
@ -0,0 +1,8 @@
|
||||
# stage2 mod: livecd
|
||||
|
||||
IMAGE_PACKAGES = $(COMMON_PACKAGES) \
|
||||
$(LIVE_PACKAGES) \
|
||||
$(call map,list,$(LIVE_LISTS) $(LIVE_GROUPS)) \
|
||||
interactivesystem
|
||||
|
||||
MKI_PACK_RESULTS = squash:live
|
@ -1,4 +1,4 @@
|
||||
use/lowmem: use/installer
|
||||
use/lowmem: use/install2
|
||||
@$(call add,FEATURES,lowmem)
|
||||
# TODO: http://www.altlinux.org/Branding/slideshow => disable?
|
||||
# also installer-feature-rm-slideshow
|
||||
|
3
features.in/rescue/README
Normal file
3
features.in/rescue/README
Normal file
@ -0,0 +1,3 @@
|
||||
Эта фича дополняет базовый "живой" образ второй стадии
|
||||
специфическими для спасательного образа настройками
|
||||
и скриптовыми хуками.
|
3
features.in/rescue/config.mk
Normal file
3
features.in/rescue/config.mk
Normal file
@ -0,0 +1,3 @@
|
||||
use/rescue: use/stage2 sub/stage2/rescue
|
||||
@$(call add,FEATURES,rescue)
|
||||
@$(call add,RESCUE_LISTS,base-rescue)
|
@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# stage1 needs this
|
||||
mkdir -p /image
|
||||
# stage1 needs this <-- FIXME: duplicated in sub.in/stage2/image-scripts.d/00propagator
|
||||
#mkdir -p /image
|
||||
|
||||
# m-p-d::profiles/rescue/image-scripts.d/999system
|
||||
mv -f -- /etc/inittab.rescue /etc/inittab
|
12
features.in/rescue/rescue/stage2cfg.mk
Normal file
12
features.in/rescue/rescue/stage2cfg.mk
Normal file
@ -0,0 +1,12 @@
|
||||
# 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)"
|
@ -1,3 +0,0 @@
|
||||
Эта фича предназначена для обобщения скриптовых хуков,
|
||||
нужных для различных live-образов, загружаемых с ядром
|
||||
из stage1 (инсталятор, спасательная и живая система).
|
@ -1,2 +0,0 @@
|
||||
use/stage1kernel: sub/stage1
|
||||
@$(call add,FEATURES,stage1kernel)
|
@ -1,25 +0,0 @@
|
||||
#!/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
|
5
features.in/stage2/README
Normal file
5
features.in/stage2/README
Normal file
@ -0,0 +1,5 @@
|
||||
Эта фича служит для добавления в первую стадию хуков, необходимых
|
||||
при наличии в stage1 ядра (что типично, но не обязательно).
|
||||
|
||||
Передача информации о конфигурации ядра между stage1 и stage2 также
|
||||
требуется для оптимального сжатия squashfs-образа второй стадии.
|
8
features.in/stage2/config.mk
Normal file
8
features.in/stage2/config.mk
Normal file
@ -0,0 +1,8 @@
|
||||
# "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)
|
6
features.in/stage2/stage1/scripts.d/10-initrd-base
Executable file
6
features.in/stage2/stage1/scripts.d/10-initrd-base
Executable file
@ -0,0 +1,6 @@
|
||||
#!/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
|
11
features.in/stage2/stage1/scripts.d/11-initrd-misc
Executable file
11
features.in/stage2/stage1/scripts.d/11-initrd-misc
Executable file
@ -0,0 +1,11 @@
|
||||
#!/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
|
||||
|
15
features.in/stage2/stage1/scripts.d/80-make-initfs
Executable file
15
features.in/stage2/stage1/scripts.d/80-make-initfs
Executable file
@ -0,0 +1,15 @@
|
||||
#!/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
|
5
features.in/syslinux/cfg.in/15live.cfg
Normal file
5
features.in/syslinux/cfg.in/15live.cfg
Normal file
@ -0,0 +1,5 @@
|
||||
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)
|
||||
SYSLINUX_UI := prompt
|
||||
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
|
||||
SYSLINUX_CFG := $(SYSLINUX_CFG) $(SUBPROFILES) defaults
|
||||
SYSLINUX_CFG := $(SYSLINUX_CFG) $(notdir $(SUBPROFILES)) defaults
|
||||
|
||||
### have to operate BUILDDIR, not pretty...
|
||||
DSTDIR := $(BUILDDIR)/stage1/files/syslinux/.in
|
||||
|
@ -11,7 +11,9 @@ include $(GLOBAL_BUILDDIR)/functions.mk
|
||||
include $(GLOBAL_BUILDDIR)/distcfg.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
|
||||
CHROOT_PACKAGES = apt-utils
|
||||
|
@ -4,8 +4,6 @@
|
||||
sub/%:
|
||||
@$(call add,SUBPROFILES,$(@:sub/%=%))
|
||||
|
||||
sub/install2 sub/rescue: sub/stage1
|
||||
|
||||
# FIXME: maybe syslinux feature belongs to distro/.init?
|
||||
boot/%: distro/.init use/syslinux
|
||||
@$(call set,BOOTLOADER,$*)
|
||||
|
@ -1,17 +1,7 @@
|
||||
udev
|
||||
e2fsprogs
|
||||
glibc-nss
|
||||
|
||||
firmware-linux
|
||||
firmware-aic94xx-seq
|
||||
|
||||
#altlinux-release
|
||||
interactivesystem
|
||||
|
||||
### Startup
|
||||
#kernel-image-@KERNEL@
|
||||
rootfiles
|
||||
sysvinit
|
||||
interactivesystem
|
||||
startup
|
||||
startup-rescue
|
||||
|
||||
@ -128,8 +118,8 @@ whois
|
||||
wireless-tools
|
||||
wpa_supplicant
|
||||
|
||||
|
||||
### Applications/Shells
|
||||
zsh
|
||||
ash
|
||||
bash
|
||||
bc
|
@ -6,20 +6,25 @@ endif
|
||||
|
||||
include $(BUILDDIR)/distcfg.mk
|
||||
|
||||
# if the subprofile is specified in src/dst notation,
|
||||
# take src/ and put it as dst/ (for stage2 variants)
|
||||
all:
|
||||
@for dir in $(SUBPROFILES); do \
|
||||
rsync -a $$dir/ $(BUILDDIR)/$$dir/ && \
|
||||
@for sub in $(SUBPROFILES); do \
|
||||
src="$${sub%/*}" && \
|
||||
dst="$${sub#*/}" && \
|
||||
rsync -a "$$src/" "$(BUILDDIR)/$$dst/" && \
|
||||
type -t git >&/dev/null && \
|
||||
cd $(BUILDDIR)/$$dir/ && \
|
||||
cd "$(BUILDDIR)/$$dst/" && \
|
||||
git add . && \
|
||||
git commit -qam "$@/$$dir"; \
|
||||
git commit -qam "$$sub"; \
|
||||
cd - >&/dev/null; \
|
||||
done ||:
|
||||
done
|
||||
|
||||
clean:
|
||||
@for dir in $(SUBPROFILES); do \
|
||||
if [ -n "$$dir" ]; then \
|
||||
rm -rf $(BUILDDIR)/$$dir && \
|
||||
mkdir -p $(BUILDDIR)/$$dir; \
|
||||
@for sub in $(SUBPROFILES); do \
|
||||
dst="${sub#*/}" && \
|
||||
if [ -n "$$dst" ]; then \
|
||||
rm -rf "$(BUILDDIR)/$$dst" && \
|
||||
mkdir -p "$(BUILDDIR)/$$dst"; \
|
||||
fi; \
|
||||
done
|
||||
|
@ -1,28 +1,32 @@
|
||||
Этот каталог содержит субпрофили; содержимое заказанных
|
||||
в формируемый профиль (названия которых содержатся в значении
|
||||
переменной SUBPROFILES, которую обычно заполняют цели sub/* --
|
||||
см. ../distro.mk) будет скопировано в каталог $(BUILDDIR)/image/.
|
||||
Этот каталог содержит субпрофили; содержимое затребованных
|
||||
(названия которых содержатся в значении переменной SUBPROFILES,
|
||||
которую заполняют цели sub/* -- см. ../distro.mk) будет
|
||||
скопировано в каталог $(BUILDDIR)/image/ формируемого профиля.
|
||||
|
||||
Просьба ответственно относиться к модификации существующих
|
||||
и вдумчиво -- к созданию новых; возможно, достаточно всего лишь
|
||||
оформить нужное новой фичей (см. ../features.in/).
|
||||
|
||||
Новый субпрофиль технологически обоснован тогда, когда он может
|
||||
потребоваться одновременно с уже существующим схожим (поскольку
|
||||
сборка частей образа и происходит в каталогах субпрофилей, т.е.
|
||||
повторное использование одного субпрофиля в рамках одного уже
|
||||
сгенерированного профиля штатным образом невозможно).
|
||||
Обратите внимание: поскольку сборка частей образа и происходит
|
||||
в каталогах субпрофилей, то повторное использование одного простого
|
||||
субпрофиля в рамках сгенерированного профиля штатным образом невозможно.
|
||||
Если требуется создать несколько близких по реализации субпрофилей,
|
||||
изучите stage2 и задействующие его фичи.
|
||||
|
||||
Краткое описание существующих:
|
||||
Краткое описание существующих вариантов:
|
||||
|
||||
- stage1: propagator и загрузчик (при подключении фичи syslinux);
|
||||
типично требуется для инсталяторов, live- и rescue-образов
|
||||
типично требуется для инсталяторов, live- и rescue-образов,
|
||||
но может использоваться без добавления таковых в образ,
|
||||
обеспечивая сетевую загрузку второй стадии
|
||||
|
||||
- install2: installer, installer-feature-*-stage2 и прочее обычно
|
||||
востребованное в инсталяционных образах
|
||||
- stage2: наиболее сложный технологически субпрофиль, поскольку
|
||||
он является только базовым для получения ряда итоговых частей
|
||||
дистрибутива (install2, live, rescue); задействуется для этого
|
||||
только опосредованно через use/stage2/* и модифицирует stage1
|
||||
в силу наличия связи между ними (в stage1 попадает образ ядра
|
||||
и firmware, в stage2 -- соответствующие модули)
|
||||
|
||||
- main: пакетная база, укладываемая на образ (NB: поскольку рабочий
|
||||
чрут в этом случае не содержит ничего, кроме пакетов, добавлять
|
||||
image-scripts.d/* смысла нет, только scripts.d/*)
|
||||
|
||||
- rescue: спасательная система
|
||||
|
@ -1,40 +0,0 @@
|
||||
# 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)"
|
@ -1,3 +0,0 @@
|
||||
udev
|
||||
e2fsprogs
|
||||
glibc-nss
|
@ -1,5 +0,0 @@
|
||||
Этот каталог содержит субпрофиль "живой" второй стадии,
|
||||
подходящей для сборки спасательных образов.
|
||||
|
||||
Результат -- squashfs в файле rescue, подлежащем копированию
|
||||
в итоговый образ.
|
@ -1,9 +0,0 @@
|
||||
#!/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 --
|
@ -1,22 +0,0 @@
|
||||
#!/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*
|
||||
|
||||
:
|
@ -1,15 +0,0 @@
|
||||
#!/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*
|
||||
|
||||
:
|
@ -1,123 +0,0 @@
|
||||
#!/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/*
|
@ -1,6 +0,0 @@
|
||||
# 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 \
|
||||
|
||||
debug:
|
||||
@if test -n "$(GLOBAL_VERBOSE)"; then \
|
||||
echo "** BRANDING: $(BRANDING)"; \
|
||||
echo "** IMAGE_INIT_LIST: $(IMAGE_INIT_LIST)"; \
|
||||
echo "** STAGE1_PACKAGES: $(STAGE1_PACKAGES)"; \
|
||||
echo "** STAGE1_PACKAGES_REGEXP: $(STAGE1_PACKAGES_REGEXP)"; \
|
||||
echo "** CHROOT_PACKAGES: $(CHROOT_PACKAGES)"; \
|
||||
|
@ -1,4 +1,7 @@
|
||||
# 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
|
||||
$(error GLOBAL_BUILDDIR not defined)
|
||||
@ -13,6 +16,9 @@ include $(MKIMAGE_PREFIX)/config.mk
|
||||
# this might have been prepared by ../stage1/scripts.d/03-test-kernel
|
||||
-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;
|
||||
# no kernel flavour specified will result in no modules for stage1 vmlinuz
|
||||
STAGE1_KFLAVOUR ?= $(lastword $(KFLAVOURS))
|
||||
@ -24,11 +30,6 @@ 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) \
|
||||
$(RESCUE_PACKAGES) \
|
||||
./packages
|
||||
|
||||
MKI_PACK_RESULTS = squash:rescue
|
||||
|
||||
include $(MKIMAGE_PREFIX)/targets.mk
|
||||
|
||||
@ -36,5 +37,4 @@ all: | $(GLOBAL_DEBUG) build-image run-image-scripts pack-image \
|
||||
$(GLOBAL_CLEAN_WORKDIR)
|
||||
|
||||
debug:
|
||||
@echo "** rescue: IMAGE_PACKAGES: $(IMAGE_PACKAGES)"
|
||||
@echo "** rescue: IMAGE_PACKAGES_REGEXP: $(IMAGE_PACKAGES_REGEXP)"
|
||||
@echo "stage2: warning: dummy debug target not redefined"
|
6
sub.in/stage2/README
Normal file
6
sub.in/stage2/README
Normal file
@ -0,0 +1,6 @@
|
||||
Этот каталог содержит общий субпрофиль "живой" второй стадии,
|
||||
используемой в качестве базы для сборки образов install2, live, rescue
|
||||
(возможно, нескольких одновременно в составе одного дистрибутива).
|
||||
|
||||
Результат -- squashfs в названном сообразно варианту файле,
|
||||
подлежащем копированию в итоговый образ.
|
5
sub.in/stage2/image-scripts.d/00stage1
Executable file
5
sub.in/stage2/image-scripts.d/00stage1
Executable file
@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
# propagator needs this,
|
||||
# "FATAL ERROR IN INIT: overmounting /image" otherwise
|
||||
mkdir -p /image
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
# for udev, "FATAL ERROR IN INIT: overmounting /image" otherwise
|
||||
# for udev
|
||||
ln -sf /proc/mounts /etc/mtab
|
||||
|
||||
# pam_console_apply is harmful during install
|
Loading…
Reference in New Issue
Block a user