Compare commits

...

8 Commits

Author SHA1 Message Date
Michael Shigorin
9475d199a0 fixed grub installer distros
These were broken since 5ff375aa10bee7937db457d3df3115f938bb6c77
due to no bootloader being tossed anymore by the very
installer-distro-altlinux-generic (which is the default)
2011-11-04 16:15:30 +02:00
Michael Shigorin
2b47da9852 fixed stage1 for syslinux.iso
squashcfk.mk is not to be attempted to copy unconditionally,
if we've got no kernel for stage2 there's no data (and hook)
to create it there
2011-11-04 16:15:30 +02:00
Michael Shigorin
f5a8b89381 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
2011-11-04 16:15:30 +02:00
Michael Shigorin
0e57149de9 initial rescue image
NB: this implementation is awfully cut-n-paste one,
there are lots of common code with install2
which are subject to careful surgery
2011-11-04 16:15:30 +02:00
Michael Shigorin
5569b4fce1 prepare for multiple live images
s,INSTALLER_KFLAVOUR,STAGE1_KFLAVOUR,g
s,INSTALLER_KMODULES,STAGE1_KMODULES,g

install2 isn't the only livecd around;
so far all of these share the same kernel
in m-p-d, and we'd rather need two+ kernels
with dual-arch media or so; let's not complicate
things too much at this point
2011-11-04 16:15:30 +02:00
Michael Shigorin
878abab5ce clean.mk and friends: introduced CLEAN control variable
make CLEAN=1 will prune workdirs after packing their results,
so disk (or preferably tmpfs) usage will be lower
2011-11-04 16:15:30 +02:00
Michael Shigorin
20844de700 rough bootloader selection draft (grub/lilo)
NB: needs installer-distro-altlinux-generic = 6.0-alt2
    as it doesn't require alterator-grub indefinitely
2011-11-04 16:15:30 +02:00
Michael Shigorin
e78c62b4e7 initial x11 desktop distro support
This one is pre-alpha quality and very basic but complete enough
to crank out an icewm.iso successfully installing and booting
into xdm ;-)

(actually a week's on-and-off work including a pile of
underlying infrastructure stuff which was planned already
just not there yet)
2011-11-04 16:15:30 +02:00
58 changed files with 563 additions and 144 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

@@ -3,8 +3,18 @@
# drop stock predefined rules
.DEFAULT:
# tmpfs-sparing extra rule: cleanup workdir after completing each stage
# (as packed results are saved this only lowers RAM pressure)
ifdef CLEAN
export GLOBAL_CLEAN_WORKDIR = clean-current
ifdef DEBUG
WARNING = (both CLEAN and DEBUG defined, debug options will be limited)
endif
endif
# ordinary clean: destroys workdirs but not the corresponding results
clean:
@echo '** cleaning up'
@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); \

View File

@@ -30,19 +30,27 @@ distro/syslinux: distro/.init distro/.branding sub/stage1 \
# and their value requested (so the variable referenced
# can change its value during configuration _before_
# it's actually used); just peek inside $(CONFIG) ;-)
# something actually useful (as a network-only installer)
distro/installer: distro/.base use/installer
@$(call set,INSTALLER,altlinux-generic)
@$(call set,INSTALLER_KMODULES_REGEXP,drm.*) # for KMS
# BASE_PACKAGES, BASE_LISTS, MAIN_PACKAGES, MAIN_LISTS: see sub.in/main/
distro/server-base: distro/installer sub/main use/syslinux/ui-menu use/memtest
# live images
distro/live: distro/.base use/live use/syslinux/ui-menu
distro/rescue: distro/.base use/rescue 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
@$(call set,INSTALLER,altlinux-generic)
@$(call set,STAGE1_KMODULES_REGEXP,drm.*) # for KMS
# server distributions
distro/server-base: distro/installer sub/main \
use/syslinux/ui-menu use/memtest use/bootloader/grub
@$(call add,BASE_LISTS,server-base)
distro/server-ovz: distro/server-base use/hdt use/firmware/server
@$(call set,INSTALLER_KFLAVOUR,std-def)
distro/server-ovz: distro/server-base use/hdt use/rescue use/firmware/server
@$(call set,STAGE1_KFLAVOUR,std-def)
@$(call set,KFLAVOURS,std-def ovz-el)
@$(call add,KMODULES,bcmwl e1000e igb ndiswrapper rtl8168 rtl8192)
@$(call add,KMODULES,ipset ipt-netflow opendpi pf_ring xtables-addons)
@@ -55,7 +63,15 @@ distro/server-ovz: distro/server-base use/hdt use/firmware/server
@$(call add,GROUPS,monitoring diag-tools)
distro/minicd: distro/server-base
@$(call set,KFLAVOURS,pure-emerald) # we might need the most recent drivers
@$(call set,KFLAVOURS,pure-emerald) # usually recent drivers
@$(call add,MAIN_PACKAGES,etcnet-full)
# if there are too many screens above, it might make sense to distro.d/
# desktop distributions
distro/desktop-base: distro/installer sub/main \
use/syslinux/ui-vesamenu use/x11/xorg use/bootloader/grub
distro/icewm: distro/desktop-base use/lowmem use/x11/xdm use/x11/runlevel5 use/bootloader/lilo
@$(call add,BASE_LISTS,$(call tags,icewm desktop))
# NB: if there are too many screens above, it might make sense to distro.d/

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

@@ -1,7 +1,10 @@
### sample ~/.mkimage/profiles.mk
# ARCH is defined in/for metaprofile's toplevel Makefile, not here
APTCONF = ~/apt/apt.conf.$(ARCH)
### where to look for apt.conf; system one used by default
#APTCONF = ~/apt/apt.conf.$(ARCH)
# can be defined here but passing DEBUG=1 is preferred
#GLOBAL_VERBOSE = 1
### turns on GLOBAL_VERBOSE and prettier output
#DEBUG = 1
# spares tmpfs, quite recommended unless you need raw workdir chroots
#CLEAN = 1

29
doc/variables.txt Normal file
View File

@@ -0,0 +1,29 @@
При запуске на сборку принимается ряд переменных
(см. тж. profiles.mk.sample):
- APTCONF
+ задаёт путь к требуемому apt.conf
+ значение: пусто (по умолчанию системный) либо строка
+ см. image.in/Makefile
- ARCH
+ определяет целевую архитектуру образа
+ значение: пусто (по умолчанию авто), i586 или x86_64
+ см. iso.mk
- BUILDDIR
+ определяет каталог генерируемого профиля и сборки
+ значение: пусто (по умолчанию авто) либо строка
+ см. profile.mk
- CLEAN
+ экономия RAM при сборке в tmpfs, иначе места на диске
+ очистка рабочего каталога после успешной сборки очередной стадии
+ может помешать использовать некоторые варианты отладки
+ значение: любая строка, по умолчанию пусто
+ см. clean.mk
- DEBUG
+ включение средств отладки
+ значение: пусто (по умолчанию), 1 или 2
+ см. log.mk

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

@@ -0,0 +1,9 @@
Добавление установки загрузчика основной системы, затребованного
посредством указания "grub" или "lilo" в BASE_BOOTLOADER.
Соответствующий модуль alterator добавляется в устанавливаемую
систему (он НЕ должен требоваться пакету installer-distro-*)
и требует пакет выбранного загрузчика.
Реализация экспериментальная (нужно модуляризовать installer-steps),
завязана на installer-distro-altlinux-generic = 6.0-alt2.

View File

@@ -0,0 +1,9 @@
# TODO: invent something prettier (think "lilo+grub" -- or error out?)
# - add,BASE_PACKAGES,alterator-$* is overly additive
# - remember .base if adding yet another *_PACKAGES
use/bootloader: use/install2 sub/main
@$(call add,BASE_PACKAGES,alterator-$$(GLOBAL_BASE_BOOTLOADER))
use/bootloader/grub use/bootloader/lilo: use/bootloader/%: use/bootloader
@$(call set,GLOBAL_BASE_BOOTLOADER,$*)

View File

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

View File

@@ -1,7 +1,6 @@
use/installer: 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)
# @$(call set,BASE_LISTS,base)
@$(call add,BASE_LISTS,$(call tags,basesystem))

View File

@@ -0,0 +1,5 @@
#!/bin/sh
# FIXME: test run for installer-distro-altlinux-generic 6.0-alt2
# NB: grub is currently the default in ALT Linux
sed -i "s/^grub$/$GLOBAL_BASE_BOOTLOADER/" /usr/share/install2/installer-steps

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

View File

@@ -1,25 +0,0 @@
#!/bin/sh
# symlink default kernel iff requested but not yet done
INSTALLER_KFLAVOUR="$INFO_INSTALLER_KFLAVOUR"
if [ -n "$GLOBAL_VERBOSE" ]; then
echo "** INSTALLER_KFLAVOUR: $INSTALLER_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 "$INSTALLER_KFLAVOUR" ]; then
VMLINUZ="$(cd /boot; echo vmlinuz-*-$INSTALLER_KFLAVOUR-*)"
if [ -n "$VMLINUZ" ]; then
ln -sf "$VMLINUZ" "$VMLINK"
echo "** overriding $VMLINK with $VMLINUZ"
fi
fi

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

@@ -0,0 +1,21 @@
#!/bin/sh
# 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
# enable NFS mounts
chkconfig rpcbind on
sed -i 's,#\(RPCBIND_ARGS="-l".*\),\1,' /etc/sysconfig/rpcbind
# remove unwanted startup scripts
find /etc/rc.d/rc{2,3,4,5}.d/ -type l -name 'S*' \
-not -name '*logd' \
-not -name '*network' \
-not -name '*rpcbind' \
-not -name '*random' \
-not -name '*sysreport' \
-not -name '*udev*' \
-delete -print

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

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

@@ -1,4 +1,5 @@
label rescue
menu label ^Rescue LiveCD
kernel alt0/vmlinuz
append initrd=alt0/full.cz live fastboot stagename=rescue
append initrd=alt0/full.cz live ramdisk_size=72000 fastboot stagename=rescue 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

10
features.in/x11/config.mk Normal file
View File

@@ -0,0 +1,10 @@
use/x11/xorg:
@$(call add,BASE_LISTS,xorg)
### strictly speaking, runlevel5 should require a *dm, not vice versa
use/x11/runlevel5: use/x11/xorg
@$(call add,BASE_PACKAGES,installer-feature-runlevel5-stage3)
### xdm: see also #23108
use/x11/xdm: use/x11/runlevel5
@$(call add,BASE_PACKAGES,xdm installer-feature-no-xconsole)

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
@@ -32,10 +34,11 @@ endif
include $(MKIMAGE_PREFIX)/targets.mk
all: prep copy-subdirs copy-tree run-scripts pack-image
all: $(GLOBAL_DEBUG) prep copy-subdirs copy-tree run-scripts pack-image \
$(GLOBAL_CLEAN_WORKDIR)
# Metadata/ needed only for installer (and not for e.g. syslinux.iso)
ifeq "$(INSTALLER_KFLAVOUR)$(KFLAVOURS)" ""
ifeq "$(STAGE1_KFLAVOUR)$(KFLAVOURS)" ""
metadata:
@echo "** skipping metadata target, no stage1 kernel installed"
else

View File

@@ -4,9 +4,8 @@
sub/%:
@$(call add,SUBPROFILES,$(@:sub/%=%))
sub/install2: sub/stage1
boot/%: distro/.init
# 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

4
log.mk
View File

@@ -11,6 +11,8 @@ BUILDLOG ?= $(BUILDDIR)/build.log
# LOG holds a postprocessor
ifdef DEBUG
# 1) makefile target; 2) also passed to script hooks
GLOBAL_DEBUG := debug
GLOBAL_VERBOSE ?= $(DEBUG)
ifeq (2,$(DEBUG))
SHELL += -x
@@ -19,8 +21,6 @@ LOG = >>$(BUILDLOG) 2>&1
else
MAKE += -s
LOG = 2>>$(BUILDLOG) >/dev/null
# 1) makefile target; 2) also passed to script hooks
GLOBAL_DEBUG := debug
endif
DATE = $(shell date +%Y%m%d)

131
pkg.in/lists/base-rescue Normal file
View File

@@ -0,0 +1,131 @@
### Startup
rootfiles
sysvinit
interactivesystem
startup
startup-rescue
udev
### Common
coreutils
glibc-locales
glibc-nss
glibc-utils
lilo
man
man-pages
sysfsutils
sysklogd
util-linux
### CPU utils
cpuburn
x86info
### Disk utils
bonnie++
cfdisk
ddrescue
disktype
evms
evms-ncurses
gpart
hdparm
lvm2
mdadm
ms-sys
parted
sdparm
sfdisk
smartmontools
testdisk
mtools
partimage
### Applications
binutils
dmidecode
hexedit
pciutils
procps
quota
shadow-suite
sharutils
time
openssl
### Applications/Archiving
arj
bzip2
gzip
unrar
unzip
zip
### Applications/Editors
vim-console
### Applications/File
findutils
file
less
mtools
### Filesystem utils
dosfstools
e2fsprogs
jfsprogs
ntfs-3g
recover
recoverdm
reiserfsprogs
xfsprogs
btrfs-progs
### Applications/Networking
arpwatch
bridge-utils
dhcpcd
elinks
etcnet
hostinfo
ifrename
iftop
iproute2
iptables
iputils
lftp
mailx
netcat
netlist
nfs-utils
ngrep
nmap
openssh-clients
openssh-server
p0f
postfix
rsync
scanssh
#stunnel
tcpdump
tcptraceroute
telnet
traceroute
wget
whois
wireless-tools
wpa_supplicant
### Applications/Shells
zsh
ash
bash
bc
gpm
mc
### Development/Debuggers
strace
sysstat

View File

@@ -1,4 +1,3 @@
alterator-grub
alterator-root
alterator-users
alterator-net-eth

View File

@@ -0,0 +1 @@
icewm

46
pkg.in/lists/xorg Normal file
View File

@@ -0,0 +1,46 @@
xorg-server
xorg-drv-ati
xorg-drv-cirrus
xorg-drv-evdev
xorg-drv-fbdev
xorg-drv-intel
xorg-drv-joystick
xorg-drv-mga
xorg-drv-multimedia
xorg-drv-nouveau
xorg-drv-nv
#I586_ONLY@xorg-drv-s3
#I586_ONLY@xorg-drv-s3virge
#I586_ONLY@xorg-drv-savage
xorg-drv-sis
xorg-drv-synaptics
xorg-drv-vesa
xorg-drv-video
xorg-drv-void
xorg-drv-wacom
xorg-drv-qxl
# for those who need these
xorg-drv-keyboard
xorg-drv-mouse
#xorg-dri-*
xauth
xorg-utils
#xorg-extensions*
xinit
# TODO: split these into a separate packagelist or no sense?
wm-select
fonts-ttf-dejavu
fonts-bitmap-terminus
fonts-otf-stix
fonts-ttf-droid
x-cursor-theme-jimmac
menu-icons-default
# :-/
#*-debuginfo-

View File

@@ -2,7 +2,7 @@
# this could have come from environment;
# if not, can be symlinked if r/w, or made anew
# NB: immediate assignment
# NB: immediate assignment matters
ifndef BUILDDIR
BUILDDIR := $(shell [ -s build ] \
&& realpath build \

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,20 +1,31 @@
Этот каталог содержит субпрофили; содержимое заказанных
в формируемый профиль (названия которых содержатся в значении
переменной SUBPROFILES, которую обычно заполняют цели sub/* --
см. ditro.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: поскольку рабочий
чрут в этом случае не содержит ничего, кроме пакетов, добавлять

View File

@@ -1,35 +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
INSTALLER_KFLAVOUR ?= $(lastword $(KFLAVOURS))
ifeq "$(INSTALLER_KFLAVOUR)" ""
$(error INSTALLER_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,$(INSTALLER_KMODULES),$(INSTALLER_KFLAVOUR))
IMAGE_PACKAGES = $(COMMON_PACKAGES) \
$(INSTALL2_PACKAGES) \
./packages
MKI_PACK_RESULTS = squash:altinst
include $(MKIMAGE_PREFIX)/targets.mk
all: | build-image run-image-scripts pack-image

View File

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

View File

@@ -25,7 +25,7 @@ MKI_PACK_RESULTS = data
include $(MKIMAGE_PREFIX)/targets.mk
all: $(GLOBAL_DEBUG) copy-packages pack-image
all: $(GLOBAL_DEBUG) copy-packages pack-image $(GLOBAL_CLEAN_WORKDIR)
debug:
@echo "** main: IMAGE_PACKAGES: $(IMAGE_PACKAGES)"

View File

@@ -21,18 +21,18 @@ COPY_TREE = ./files
include $(MKIMAGE_PREFIX)/targets.mk
# here we try and come up with the installer kernel/modules, if any;
# only a single kernel might be needed (INSTALLER_KFLAVOUR sets explicitly);
# only a single kernel might be needed (STAGE1_KFLAVOUR sets explicitly);
# kernel image copied from instrumental chroot into .work/syslinux/alt0/
INSTALLER_KFLAVOUR ?= $(lastword $(KFLAVOURS))
STAGE1_KFLAVOUR ?= $(lastword $(KFLAVOURS))
# propagator needed iff stage1 kernel installed (not for e.g. syslinux.iso)
ifeq "$(INSTALLER_KFLAVOUR)" ""
ifeq "$(STAGE1_KFLAVOUR)" ""
build-propagator:
@echo "** skipping build-propagator target, no kernel installed"
else
CHROOT_PACKAGES_REGEXP := $(call kpackages,$(INSTALLER_KMODULES_REGEXP),$(INSTALLER_KFLAVOUR))
INFO_INSTALLER_KFLAVOUR := $(INSTALLER_KFLAVOUR)
CHROOT_PACKAGES_REGEXP := $(call kpackages,$(STAGE1_KMODULES_REGEXP),$(STAGE1_KFLAVOUR))
INFO_STAGE1_KFLAVOUR := $(STAGE1_KFLAVOUR)
endif
CHROOT_PACKAGES_REGEXP += $(STAGE1_PACKAGES_REGEXP)
@@ -41,11 +41,15 @@ CHROOT_PACKAGES = $(STAGE1_PACKAGES) $(COMMON_PACKAGES)
# scripts prepare bootloader configuration, too
# NB: we pass tested squashfs options for ../install2/Makefile
all: | debug prepare-workdir copy-tree run-scripts build-propagator \
copy-$(BOOTLOADER) pack-image
@cp $(OUTDIR)/squashcfg.mk $(GLOBAL_BUILDDIR)/
copy-$(BOOTLOADER) $(COPY_SQUASHCFG) pack-image $(GLOBAL_CLEAN_WORKDIR)
@if test -s $(OUTDIR)/squashcfg.mk; then \
cp $(OUTDIR)/squashcfg.mk $(GLOBAL_BUILDDIR)/; \
fi
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

@@ -7,10 +7,10 @@
к составу STAGE1_PACKAGES и объёму этой стадии.
Обратите внимание: если не указать явно требуемый вариант
ядра посредством INSTALLER_KFLAVOUR, будет взят последний
ядра посредством STAGE1_KFLAVOUR, будет взят последний
из перечисленных в KFLAVOURS; если не указать явно регэкс,
описывающий требуемые в инсталяторе модули, посредством
INSTALLER_KMODULES_REGEXP -- будет подмножество модулей
STAGE1_KMODULES_REGEXP -- будет подмножество модулей
из kernel-image (упаковываются в syslinux/alt0/full.cz).
Требуется для инсталяционных, live- и rescue-образов.

40
sub.in/stage2/Makefile Normal file
View File

@@ -0,0 +1,40 @@
# 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)
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
# 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))
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))
include $(MKIMAGE_PREFIX)/targets.mk
all: | $(GLOBAL_DEBUG) build-image run-image-scripts pack-image \
$(GLOBAL_CLEAN_WORKDIR)
debug:
@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