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:
Michael Shigorin 2011-08-20 12:55:05 +03:00
parent 0e57149de9
commit f5a8b89381
52 changed files with 209 additions and 331 deletions

11
README
View File

@ -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 -- только в инструментальный

View File

@ -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

View File

@ -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
View 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

View File

@ -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

View File

@ -1,11 +1,9 @@
Этот каталог содержит субпрофиль второй стадии инсталятора,
требующийся для сборки инсталяционных образов.
Эта фича дополняет базовый "живой" образ второй стадии
специфическими для инсталяционного образа настройками
и скриптовыми хуками.
При добавлении скриптов в image-scripts.d/ следует позаботиться,
чтобы в компактном livecd, которым является инсталятор, оказались
нужные им утилиты (INSTALL2_PACKAGES). Перегружать его не следует,
поскольку это прямо влияет на требования по минимальному размеру
оперативной памяти для установки.
Результат -- squashfs в файле altinst, подлежащем копированию
в образ.

View File

@ -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)

View 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
View File

@ -0,0 +1,3 @@
Эта фича дополняет базовый "живой" образ второй стадии
специфическими для полноценного LiveCD настройками
и скриптовыми хуками.

View File

@ -0,0 +1,3 @@
use/live: use/stage2 sub/stage2/live
@$(call add,FEATURES,live)
# @$(call add,LIVE_LISTS,base-live)

View 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

View File

@ -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

View File

@ -0,0 +1,3 @@
Эта фича дополняет базовый "живой" образ второй стадии
специфическими для спасательного образа настройками
и скриптовыми хуками.

View File

@ -0,0 +1,3 @@
use/rescue: use/stage2 sub/stage2/rescue
@$(call add,FEATURES,rescue)
@$(call add,RESCUE_LISTS,base-rescue)

View File

@ -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

View 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)"

View File

@ -1,3 +0,0 @@
Эта фича предназначена для обобщения скриптовых хуков,
нужных для различных live-образов, загружаемых с ядром
из stage1 (инсталятор, спасательная и живая система).

View File

@ -1,2 +0,0 @@
use/stage1kernel: sub/stage1
@$(call add,FEATURES,stage1kernel)

View File

@ -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

View File

@ -0,0 +1,5 @@
Эта фича служит для добавления в первую стадию хуков, необходимых
при наличии в stage1 ядра (что типично, но не обязательно).
Передача информации о конфигурации ядра между stage1 и stage2 также
требуется для оптимального сжатия squashfs-образа второй стадии.

View 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)

View 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

View 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

View 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

View 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

View File

@ -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

View File

@ -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

View File

@ -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,$*)

View File

@ -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

View File

@ -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

View File

@ -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: спасательная система

View File

@ -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)"

View File

@ -1,3 +0,0 @@
udev
e2fsprogs
glibc-nss

View File

@ -1,5 +0,0 @@
Этот каталог содержит субпрофиль "живой" второй стадии,
подходящей для сборки спасательных образов.
Результат -- squashfs в файле rescue, подлежащем копированию
в итоговый образ.

View File

@ -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 --

View File

@ -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*
:

View File

@ -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*
:

View File

@ -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/*

View File

@ -1,6 +0,0 @@
# remove rpm database
rm -rf /var/lib/rpm/*
# remove apt data files
rm -rf /var/cache/apt /var/lib*/apt

View File

@ -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)"; \

View File

@ -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
View File

@ -0,0 +1,6 @@
Этот каталог содержит общий субпрофиль "живой" второй стадии,
используемой в качестве базы для сборки образов install2, live, rescue
(возможно, нескольких одновременно в составе одного дистрибутива).
Результат -- squashfs в названном сообразно варианту файле,
подлежащем копированию в итоговый образ.

View File

@ -0,0 +1,5 @@
#!/bin/sh
# propagator needs this,
# "FATAL ERROR IN INIT: overmounting /image" otherwise
mkdir -p /image

View File

@ -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