The app-admin/livecd's last ebuild installs a software that tries to work with the gentoo-1.3b. It doesn't seems to be working anymore... I looked into the /usr/sbin/livecd script which is the central component of this tool. I thank that it was not simple to modify it simply. I have made changes to fix the bug and to make the tool more adaptable... I put the code here. It seems to work... :c) -- Begining of /usr/sbin/livecd -- #!/bin/sh -e # # Live CD generation script # # Christoph Lameter, July 13, 2002, <christoph@lameter.com> # (C)2002 TelemetryBox Corporation, http://telemetrybox.biz # # Baptiste SIMON, November 15, 2002, <bs-public@duval.dyndns.org> # (C)2002 Baptiste SIMON, http://www-beta.duval.dyndns.org # # Released under GPL v2 # LLOC=/usr/lib/livecd STAGE=3 ARCH=i586 GLOBALARCH=x86 ROOT=isoroot IMLOC="http://www.ibiblio.org/pub/Linux/distributions/gentoo/releases/build/" VERSION="1.4_rc1" EXTENSION="tar.bz2" URL="${IMLOC}/${VERSION}/${GLOBALARCH}/" TEMP=`getopt -o 123bi:czeus:r:h --long help,setup:,bootable,iso:,compress,cleanup,enter,size,root: -n 'livecd' -- "$@"` if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi eval set -- "$TEMP" chroot_generate() { if [ -d $ROOT ]; then umount $ROOT/proc 2>/dev/null||true umount $ROOT/usr/portage 2>/dev/null||true rm -rf $ROOT fi mkdir $ROOT if [ "$STAGE" = "3" ]; then if [ ! -f stage3-$1-*.${EXTENSION} ]; then wget ${URL}/stage3-$1-${VERSION}.${EXTENSION} fi (cd $ROOT;tar jxpf ../stage3-$1-*.${EXTENSION}) fi if [ "$STAGE" = "2" ]; then if [ ! -f stage2-$1-*.${EXTENSION} ]; then wget ${URL}/stage2-$1-${VERSION}.${EXTENSION} fi (cd $ROOT;tar jxpf ../stage2-$1-*.${EXTENSION}) fi if [ "$STAGE" = "1" ]; then if [ ! -f stage1-*.${EXTENSION} ]; then wget ${URL}/stage1-ix86-${VERSION}.${EXTENSION} fi (cd $ROOT;tar jxpf ../stage1-*.${EXTENSION}) fi cp -a $LLOC/prototype/* $ROOT cp /etc/resolv.conf $ROOT/etc mount -o bind /proc $ROOT/proc mount -o bind /usr/portage $ROOT/usr/portage chroot $ROOT /bin/bash -e <<EOF env-update source /etc/profile ln -sf ../usr/share/zoneinfo/GMT /etc/localtime #emerge rsync EOF cp $LLOC/$1/make.conf $ROOT/etc if [ "$STAGE" "<" 2 ]; then chroot $ROOT /bin/bash -e <<EOF source /etc/profile cd usr/portage scripts/bootstrap.sh EOF fi if [ "$STAGE" "<" 3 ]; then chroot $ROOT /bin/bash -e <<EOF source /etc/profile # Fix broken emerge emerge -i sys-apps/grub-0.90-r7 emerge system emerge gentoo-sources sysklogd EOF fi cp $LLOC/$1/config $ROOT/usr/src/linux/.config cp $LLOC/bootpeng/penguins.boot.gz >$ROOT/boot/penguins.boot chroot $ROOT /bin/bash -e <<EOF source /etc/profile emerge lilo emerge irssi mp3blaster ntp joe grub gentoolkit traceroute emerge strace dialog ncftp boa vcron rc-update add net.eth0 default cd /usr/src/linux make oldconfig # make aborts due to lilo script not found but at that # point we already have a working kernel make install||true make modules modules_install make clean emerge pcmcia-cs EOF umount $ROOT/usr/portage umount $ROOT/proc } cleanup() { # maybe check for use right now and then remove stuff as needed? umount $ROOT/usr/portage 2>/dev/null || true umount $ROOT/proc 2>/dev/null || true rm -rf $ROOT/var/tmp/portage/* rm -rf $ROOT/usr/portage/distfiles/* rm -rf $ROOT/tmp/* rm -rf $ROOT/usr/portage/* X=`find $ROOT -name "*~"` if [ "$X" != "" ]; then echo "Removing $X" rm $X fi } makeinitrd() { mkdir ${ROOT}-initrd/{bin,etc,usr,proc,tmp} ln -s bin ${ROOT}-initrd/sbin ln -s ../bin ${ROOT}-initrd/usr/bin ln -s ../bin ${ROOT}-initrd/usr/sbin ln -s ../lib ${ROOT}-initrd/usr/lib (mkdir ${ROOT}-initrd/dev;cd ${ROOT}-initrd/dev;MAKEDEV generic-i386;MAKEDEV scd) cat >${ROOT}-initrd/etc/fstab <<EOF /dev/ram0 / cramfs defaults proc /proc proc defaults 0 0 EOF install -m755 $LLOC/linuxrc ${ROOT}-initrd cp $LLOC/driverlist ${ROOT}-initrd >${ROOT}-x cd $ROOT for i in `cat $LLOC/driverlist`; do if ! find lib/modules -name $i.o >>$ROOT-x; then echo "Driver $i not found" fi done tar cf - `cat ${ROOT}-x` | (cd ../${ROOT}-initrd;tar xf -) cd .. rm ${ROOT}-x cp $LLOC/busybox ${ROOT}-initrd/bin # Generate busybox links. We really do not need all of them but its good to # have a fall back in case we need them someday. for i in '[' ash basename cat chroot cp dirname echo env false find \ grep gunzip gzip insmod ln loadkmap ls lsmod mkdir modprobe more mount mv \ pivot_root ps pwd rm rmdir rmmod sh sleep tar test touch true umount uname \ xargs yes zcat; do ln ${ROOT}-initrd/bin/busybox ${ROOT}-initrd/bin/$i done } show_iso_size() { echo "Size of iso filesystem is `du -s $ROOT` KB" } make_isolinux() { if [ ! -f $ROOT/boot/vmlinuz ]; then echo "Linux Kernel not available" exit 1 fi cp -a $LLOC/isolinux $ROOT cp $ROOT/boot/vmlinuz $ROOT/isolinux/linux mkdir ${ROOT}-initrd dd if=/dev/zero of=${ROOT}-img bs=1k count=3000 mke2fs -F -q -N3000 ${ROOT}-img mount -text2 -oloop ${ROOT}-img ${ROOT}-initrd makeinitrd umount ${ROOT}-initrd gzip -f -9 ${ROOT}-img cp ${ROOT}-img.gz $ROOT/isolinux/initrd # mkcramfs initrd $ROOT/isolinux/initrd >mkcramfs.log # genromfs -f $ROOT/isolinux/initrd -d initrd if [ ! -f $ROOT/etc/inittab.gentoo ]; then echo "Setting up special inittab ...." cp $ROOT/etc/inittab $ROOT/etc/inittab.gentoo # The patch makes init spawn the deploy script on tty1 patch ${ROOT}/etc/inittab <$LLOC/inittab.patch fi rm -r ${ROOT}-initrd ${ROOT}-img.gz } iso_generate() { X=$ROOT if [ "$COMPRESS" != "" ]; then echo "Compressing iso tree. This could take some time...." mkdir ${ROOT}-compressed for i in index.html telemetrybox.jpg README isolinux mnt tmp proc root dev; do echo "Copying /$i ..." cp -a ${ROOT}/$i ${ROOT}-compressed|| true done for i in usr var boot etc sbin bin home lib opt; do echo "Compressing /$i ..." mkzftree ${ROOT}/$i ${ROOT}-compressed/$i done echo "Size of compressed iso filesystem is `du -s ${ROOT}-compressed` KB" X="${ROOT}-compressed" fi mkisofs -z -R -l -o ${1:-tboxgentoo.iso} -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table $X if [ "$COMPRESS" != "" ]; then echo "Cleaning up" rm -rf ${ROOT}-compressed fi } enter_livecd() { mount -o bind /proc $ROOT/proc || true mount -o bind /usr/portage $ROOT/usr/portage || true chroot $ROOT /bin/bash umount $ROOT/proc umount $ROOT/usr/portage } usage() { cat <<EOF livecd: tools to generate a live cd v0.5 Syntax: livecd <command1> <command2> .... Commands: -s ARCH Setup a new isotree using stage3 (default) for i386/i486/i586/i686 -b Generate directories and files necessary in iso tree to make it bootable -i isofile Generate .iso image from iso tree -z Remove unneeded files from iso tree -e Run a shell in a chrooted environment o fthe iso tree. Use for merging new software. -u Show the space of the isotree (this is only an estimate!) Options: -1 Use first stage tarball -2 Use second stage tarball -3 Use third stage tarball -r root Use <root> as the root directory for the iso directory tree. Default is "isoroot" -c Compress files when generating .iso image (C) 2002 TelemetryBox Corporation, Christoph Lameter, http://telemetrybox.biz Distributed under the GPL v2 EOF } #echo $* while true ; do case "$1" in -1) STAGE=1;shift;; -2) STAGE-2;shift;; -3) STAGE=3;shift;; -c) COMPRESS=1;shift;; -s|--setup) chroot_generate $2;shift 2;; -b|--bootable) shift;make_isolinux;; -i|--iso) iso_generate $2;shift 2;; -z|--cleanup) shift;cleanup;; -e|--enter) shift;enter_livecd;; -u|--size) shift;show_iso_size;; -r|--root) ROOT=$2;shift 2;; -h|--help) shift;usage;; --) shift;break;; *) echo "Internal error!"; exit 1;; esac done if [ "$1" != "" ]; then echo "Unknown parameter:$*" exit 1 fi exit 0 -- End of usr/sbin/livecd -- Thx for your attention ! Baptiste SIMON
EOF fi cp $LLOC/$1/config $ROOT/usr/src/linux/.config >>> cp $LLOC/bootpeng/penguins.boot.gz >$ROOT/boot/penguins.boot chroot $ROOT /bin/bash -e <<EOF source /etc/profile emerge lilo There also have a problem here... I think (don't tested) that we have to change this line by : cp $LLOC/bootpeng/penguins.boot.gz $ROOT/boot/penguins.boot Baptiste SIMON
Problem emerging kernel and logger using the "stage3" : <Original> if [ "$STAGE" "<" 3 ]; then chroot $ROOT /bin/bash -e <<EOF source /etc/profile # Fix broken emerge emerge -i sys-apps/grub-0.90-r7 emerge system emerge gentoo-sources sysklogd EOF fi </Original> We emerge gentoo-sources only if the var $STAGE is < 3 so you don't if you make your LiveCD from a stage3 ! I propose to extract the line : "emerge gentoo-sources sysklogd" from the condition... like this : <Reviewed> if [ "$STAGE" "<" 3 ]; then chroot $ROOT /bin/bash -e <<EOF source /etc/profile # Fix broken emerge emerge -i sys-apps/grub-0.90-r7 emerge system EOF fi emerge gentoo-sources sysklogd </Reviewed>
I propose this synthesis of the corrections I proposed for this bug. I do not garanty anything about that because I have just test it by hand, not in entirely by this script. An other warning is that I just tried to run the chroot_generate() fonction... I hope all my proposals will be ok... :c) Baptiste SIMON <Reviewed> #!/bin/sh -e # # Live CD generation script # # Christoph Lameter, July 13, 2002, <christoph@lameter.com> # (C)2002 TelemetryBox Corporation, http://telemetrybox.biz # # Baptiste SIMON, November 15, 2002, <bs-public@duval.dyndns.org> # (C)2002 Baptiste SIMON, http://www-beta.duval.dyndns.org # # Released under GPL v2 # LLOC=/usr/lib/livecd STAGE=3 ARCH=i586 ROOT=isoroot IMLOC="http://www.ibiblio.org/pub/Linux/distributions/gentoo/releases/build/" # Fix Bug #10763 @ bugs.gentoo.org part1 GLOBALARCH=x86 VERSION="1.4_rc1" EXTENSION="tar.bz2" URL="${IMLOC}/${VERSION}/${GLOBALARCH}/" TEMP=`getopt -o 123bi:czeus:r:h --long help,setup:,bootable,iso:,compress,cleanup,enter,size,root: -n 'livecd' -- "$@"` if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi eval set -- "$TEMP" chroot_generate() { if [ -d $ROOT ]; then umount $ROOT/proc 2>/dev/null||true umount $ROOT/usr/portage 2>/dev/null||true rm -rf $ROOT fi mkdir $ROOT if [ "$STAGE" = "3" ]; then # Fix Bug #10763 part1 if [ ! -f stage3-$1-*.${EXTENSION} ]; then wget ${URL}/stage3-$1-${VERSION}.${EXTENSION} fi (cd $ROOT;tar jxpf ../stage3-$1-*.${EXTENSION}) fi if [ "$STAGE" = "2" ]; then # Fix Bug #10763 part1 if [ ! -f stage2-$1-*.${EXTENSION} ]; then wget ${URL}/stage2-$1-${VERSION}.${EXTENSION} fi (cd $ROOT;tar jxpf ../stage2-$1-*.${EXTENSION}) fi if [ "$STAGE" = "1" ]; then # Fix Bug #10763 @ bugs.gentoo.org part1 if [ ! -f stage1-*.${EXTENSION} ]; then wget ${URL}/stage1-ix86-${VERSION}.${EXTENSION} fi (cd $ROOT;tar jxpf ../stage1-*.${EXTENSION}) fi cp -a $LLOC/prototype/* $ROOT cp /etc/resolv.conf $ROOT/etc mount -o bind /proc $ROOT/proc mount -o bind /usr/portage $ROOT/usr/portage chroot $ROOT /bin/bash -e <<EOF env-update source /etc/profile ln -sf ../usr/share/zoneinfo/GMT /etc/localtime #emerge rsync EOF cp $LLOC/$1/make.conf $ROOT/etc if [ "$STAGE" "<" 2 ]; then chroot $ROOT /bin/bash -e <<EOF source /etc/profile cd usr/portage scripts/bootstrap.sh EOF fi if [ "$STAGE" "<" 3 ]; then chroot $ROOT /bin/bash -e <<EOF source /etc/profile # Fix broken emerge emerge -i sys-apps/grub-0.90-r7 emerge system EOF fi # Fix bug #10763 @ bugs.gentoo.org part 3 emerge gentoo-sources sysklogd cp $LLOC/$1/config $ROOT/usr/src/linux/.config # Fix bug #10763 @ bugs.gentoo.org part 2 cp $LLOC/bootpeng/penguins.boot.gz $ROOT/boot/penguins.boot chroot $ROOT /bin/bash -e <<EOF source /etc/profile emerge lilo emerge irssi mp3blaster ntp joe grub gentoolkit traceroute emerge strace dialog ncftp boa vcron rc-update add net.eth0 default cd /usr/src/linux make oldconfig # make aborts due to lilo script not found but at that # point we already have a working kernel make install||true make modules modules_install make clean emerge pcmcia-cs EOF umount $ROOT/usr/portage umount $ROOT/proc } cleanup() { # maybe check for use right now and then remove stuff as needed? umount $ROOT/usr/portage 2>/dev/null || true umount $ROOT/proc 2>/dev/null || true rm -rf $ROOT/var/tmp/portage/* rm -rf $ROOT/usr/portage/distfiles/* rm -rf $ROOT/tmp/* rm -rf $ROOT/usr/portage/* X=`find $ROOT -name "*~"` if [ "$X" != "" ]; then echo "Removing $X" rm $X fi } makeinitrd() { mkdir ${ROOT}-initrd/{bin,etc,usr,proc,tmp} ln -s bin ${ROOT}-initrd/sbin ln -s ../bin ${ROOT}-initrd/usr/bin ln -s ../bin ${ROOT}-initrd/usr/sbin ln -s ../lib ${ROOT}-initrd/usr/lib (mkdir ${ROOT}-initrd/dev;cd ${ROOT}-initrd/dev;MAKEDEV generic-i386;MAKEDEV scd) cat >${ROOT}-initrd/etc/fstab <<EOF /dev/ram0 / cramfs defaults proc /proc proc defaults 0 0 EOF install -m755 $LLOC/linuxrc ${ROOT}-initrd cp $LLOC/driverlist ${ROOT}-initrd >${ROOT}-x cd $ROOT for i in `cat $LLOC/driverlist`; do if ! find lib/modules -name $i.o >>$ROOT-x; then echo "Driver $i not found" fi done tar cf - `cat ${ROOT}-x` | (cd ../${ROOT}-initrd;tar xf -) cd .. rm ${ROOT}-x cp $LLOC/busybox ${ROOT}-initrd/bin # Generate busybox links. We really do not need all of them but its good to # have a fall back in case we need them someday. for i in '[' ash basename cat chroot cp dirname echo env false find \ grep gunzip gzip insmod ln loadkmap ls lsmod mkdir modprobe more mount mv \ pivot_root ps pwd rm rmdir rmmod sh sleep tar test touch true umount uname \ xargs yes zcat; do ln ${ROOT}-initrd/bin/busybox ${ROOT}-initrd/bin/$i done } show_iso_size() { echo "Size of iso filesystem is `du -s $ROOT` KB" } make_isolinux() { if [ ! -f $ROOT/boot/vmlinuz ]; then echo "Linux Kernel not available" exit 1 fi cp -a $LLOC/isolinux $ROOT cp $ROOT/boot/vmlinuz $ROOT/isolinux/linux mkdir ${ROOT}-initrd dd if=/dev/zero of=${ROOT}-img bs=1k count=3000 mke2fs -F -q -N3000 ${ROOT}-img mount -text2 -oloop ${ROOT}-img ${ROOT}-initrd makeinitrd umount ${ROOT}-initrd gzip -f -9 ${ROOT}-img cp ${ROOT}-img.gz $ROOT/isolinux/initrd # mkcramfs initrd $ROOT/isolinux/initrd >mkcramfs.log # genromfs -f $ROOT/isolinux/initrd -d initrd if [ ! -f $ROOT/etc/inittab.gentoo ]; then echo "Setting up special inittab ...." cp $ROOT/etc/inittab $ROOT/etc/inittab.gentoo # The patch makes init spawn the deploy script on tty1 patch ${ROOT}/etc/inittab <$LLOC/inittab.patch fi rm -r ${ROOT}-initrd ${ROOT}-img.gz } iso_generate() { X=$ROOT if [ "$COMPRESS" != "" ]; then echo "Compressing iso tree. This could take some time...." mkdir ${ROOT}-compressed for i in index.html telemetrybox.jpg README isolinux mnt tmp proc root dev; do echo "Copying /$i ..." cp -a ${ROOT}/$i ${ROOT}-compressed|| true done for i in usr var boot etc sbin bin home lib opt; do echo "Compressing /$i ..." mkzftree ${ROOT}/$i ${ROOT}-compressed/$i done echo "Size of compressed iso filesystem is `du -s ${ROOT}-compressed` KB" X="${ROOT}-compressed" fi mkisofs -z -R -l -o ${1:-tboxgentoo.iso} -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table $X if [ "$COMPRESS" != "" ]; then echo "Cleaning up" rm -rf ${ROOT}-compressed fi } enter_livecd() { mount -o bind /proc $ROOT/proc || true mount -o bind /usr/portage $ROOT/usr/portage || true chroot $ROOT /bin/bash umount $ROOT/proc umount $ROOT/usr/portage } usage() { cat <<EOF livecd: tools to generate a live cd v0.5 Syntax: livecd <command1> <command2> .... Commands: -s ARCH Setup a new isotree using stage3 (default) for i386/i486/i586/i686 -b Generate directories and files necessary in iso tree to make it bootable -i isofile Generate .iso image from iso tree -z Remove unneeded files from iso tree -e Run a shell in a chrooted environment o fthe iso tree. Use for merging new software. -u Show the space of the isotree (this is only an estimate!) Options: -1 Use first stage tarball -2 Use second stage tarball -3 Use third stage tarball -r root Use <root> as the root directory for the iso directory tree. Default is "isoroot" -c Compress files when generating .iso image (C) 2002 TelemetryBox Corporation, Christoph Lameter, http://telemetrybox.biz Distributed under the GPL v2 EOF } #echo $* while true ; do case "$1" in -1) STAGE=1;shift;; -2) STAGE-2;shift;; -3) STAGE=3;shift;; -c) COMPRESS=1;shift;; -s|--setup) chroot_generate $2;shift 2;; -b|--bootable) shift;make_isolinux;; -i|--iso) iso_generate $2;shift 2;; -z|--cleanup) shift;cleanup;; -e|--enter) shift;enter_livecd;; -u|--size) shift;show_iso_size;; -r|--root) ROOT=$2;shift 2;; -h|--help) shift;usage;; --) shift;break;; *) echo "Internal error!"; exit 1;; esac done if [ "$1" != "" ]; then echo "Unknown parameter:$*" exit 1 fi exit 0 </Reviewed>
Created attachment 5700 [details] Pre-fixed version of the /usr/sbin/livecd script This script WOULD permit to fix the bug #10763 It hasn't been entirely tested !! My principal point of investigation would be the difference between the old technique chosen to build the un-adaptable kernel automatically (and install it) and my technique which permit a kernel which can be more adapted (and install it as /boot/bzImage). I hope it will work ! ;c) Baptiste SIMON