Доброе время суток.
Потратил некоторое время на то что бы разобраться - как же сделать свой livecd в gentoo. Собрал по кусочкам из нескольких мануалов, и вот что получилось.
Собирать будем из бинарных пакетов
export ACCEPT_KEYWORDS="amd64"
export PORTAGE_BINHOST="ssh://<binhost>/var/binpkgs/"
export ROOT=<где собираем>
mkdir -p $ROOT
git init $ROOT
USE="build" emerge --root=$ROOT -O baselayout
MAKEDEV -d $ROOT/dev console hda input ptmx std sd tty
rm -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/db
rm -rf $ROOT/tmp/*
rm -f $ROOT/etc/mtab
touch $ROOT/etc/mtab
rm -rf $ROOT/etc/portage
rm -rf $ROOT/usr/share/doc
rm -rf $ROOT/usr/src/
mount -o bind /dev $ROOT/dev
mount -t proc none $ROOT/proc
chroot $ROOT /bin/bash
<конфигурируем>
umount $ROOT/dev
umount $ROOT/proc
rm $ROOT/root/.bash_history
rm -f /var/tmp/genkernel/*
genkernel --no-install --all-ramdisk-modules --kerneldir=<path to kernel> --e2fsprogs --disklabel --oldconfig --busybox all --unionfs --menuconfig all
cd <kernel source>
INSTALL_MOD_PATH=$ROOT make modules_install
mkdir -p ./target/boot/grub
cp /var/tmp/genkernel/initramfs* ./target/
cp /var/tmp/genkernel/kernel* ./target/
cp /var/tmp/genkernel/System* ./target/
touch ./target/livecd
set default="0"
loadfont unicode
set gfxmode=800x600x32
insmod vbe
insmod vga
insmod gfxterm
set locale_dir=$prefix/locale
set lang=ru_RU
insmod gettext
terminal_output gfxterm
set 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.files
mksquashfs $ROOT ./target/root.fs -comp xz -ef exclude.files
grub2-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
Какие будут замечания и предложения по данному методу?