Собирать будем из бинарных пакетов
export ACCEPT_KEYWORDS="amd64"export PORTAGE_BINHOST="ssh:///var/binpkgs/"export ROOT=<где собираем>
Для удобства обслуживания - всё будет происходить под управлением git
mkdir -p $ROOTgit init $ROOT
Далее создаём базовую структуру каталогов и устанавливаем «минимум необходимого
USE="build" emerge --root=$ROOT -O baselayoutMAKEDEV -d $ROOT/dev console hda input ptmx std sd ttyrm -f $ROOT/dev/fd[0-9]*rm -f $ROOT/dev/sd[a-d][a-z]* $ROOT/dev/sd[e-z]*rm -f $ROOT/dev/tty[a-zA-Z]*
emerge --root=$ROOT -gK openrc vim bash vixie-cron gpm udev file findutils gawk grep \ groff iproute2 man man-pages-ru net-tools pciutils \ sed shadow usbutils util-linux which syslog-ng screen nfs-utils openssh wget socat rsync ntp \ gcc tar util-linux shadow udev procps psmisc cracklib gzip kbd dhcp
далее можно поставить всё что угодно, по желанию
emerge --root=$ROOT -gK <ваши пакеты>
почистим ненужный мусор
rm -rf $ROOT/var/tmp/*rm -rf $ROOT/var/cache/*rm -rf $ROOT/var/dbrm -rf $ROOT/tmp/*rm -f $ROOT/etc/mtabtouch $ROOT/etc/mtabrm -rf $ROOT/etc/portagerm -rf $ROOT/usr/share/docrm -rf $ROOT/usr/src/
Далее по стандартному пути, можно сделать chroot, сменить пароль рута, прописать сервисы в автозагрузку,итд.
mount -o bind /dev $ROOT/devmount -t proc none $ROOT/procchroot $ROOT /bin/bash<конфигурируем>umount $ROOT/devumount $ROOT/procrm $ROOT/root/.bash_history
В сторонке можно нужно собрать ядро. Проще всего сделать это genkernel.Как то так.
rm -f /var/tmp/genkernel/*genkernel --no-install --all-ramdisk-modules --kerneldir= --e2fsprogs --disklabel --oldconfig --busybox all --unionfs --menuconfig all
забрать результат работы можно будет в /var/tmp/genkernel/ модули поставим вручную.
cd INSTALL_MOD_PATH=$ROOT make modules_install
создадим структуру livecd
mkdir -p ./target/boot/grubcp /var/tmp/genkernel/initramfs* ./target/cp /var/tmp/genkernel/kernel* ./target/cp /var/tmp/genkernel/System* ./target/touch ./target/livecd
создаём конфиг grub2 в ./target/boot/grub/grub.cfg, примерно следующего содержания:
set default="0"loadfont unicodeset gfxmode=800x600x32insmod vbeinsmod vgainsmod gfxtermset locale_dir=$prefix/localeset lang=ru_RUinsmod gettext
terminal_output gfxtermset timeout=2
menuentry 'Linux livecd' { set gfxpayload=keep insmod gzio insmod part_msdos insmod ext2 set root='cd,msdos1' echo 'Загружается Linux ' linux (cd)/kernel-genkernel root=/dev/ram0 ro real_root=/dev/loop0 looptype=squashfs loop=/root.fs cdroot video=vesafb:ywrap,mtrr:3 console=tty1 quiet net.ifnames=0 echo 'Загружается начальный виртуальный диск …' initrd (cd)/initramfs}
теперь всё упаковываем и собираем итоговый образ.
echo ".git" > exclude.filesmksquashfs $ROOT ./target/root.fs -comp xz -ef exclude.filesgrub2-mkrescue -d /usr/lib64/grub/i386-pc/ --modules="boot cat cpuid disk echo font file fshelp gettext gfxmenu gfxterm gfxterm_menu halt help iso9660 linux loopback ls lspci msdospart normal squash4 terminal vbe vga video xzio" -o cdrom.iso ./target