#!/bin/bash package_map=" +00-dirtree -automake17 -automake18 -automake19 -gcc2 -gcc33 -gcc34 -gcc40 -gcc41 -gcc42 -gmp -mpfr -rockinitrd +stone -linux24-source -linux26-header -linux24 +udev -linux26-source -linux26-header -linux26 -postinstall -binutils -bin86 -nasm -dietlibc +grub +lilo +yaboot +aboot +silo +parted +mac-fdisk +pdisk +xfsprogs +dosfstools +jfsutils +hfsutils +e2fsprogs +reiserfsprogs +genromfs +device-mapper +popt +file +mdadm +lvm2 +dump +eject +disktype +lvm-wrapper +hdparm +memtest86 +cpuburn +bonnie++ -mine -bize -termcap +ncurses +readline -strace -ltrace -perl5 -m4 -time -gettext -zlib +util-linux-ng +attr +acl +findutils +mktemp +coreutils -diffutils -patch -make +grep +sed +gzip +tar +gawk -flex +bzip2 -texinfo +less -groff -man +nvi -bison +bc +cpio +ed -autoconf -automake -libtool +curl +wget +dialog +minicom +lrzsz +rsync +tcpdump +module-init-tools +sysvinit +shadow +util-linux +wireless-tools +net-tools +procps +psmisc +rockplug +modutils +pciutils -cron +portmap +sysklogd +devfsd +setserial +iproute2 +netkit-base +netkit-ftp +netkit-telnet +netkit-tftp +sysfiles +libpcap +iptables +tcp_wrappers -kiss +kbd -syslinux +ntfsprogs -ethtool -uml_utilities +ddrescue +libelf" package_map=" +$ROCKCFG_PKG_GLIBC_BRANCH +$ROCKCFG_PKG_BASH_DEFAULT \ +$ROCKCFG_PKG_LINUX_DEFAULT $package_map" if pkginstalled bize && ! pkginstalled mine ; then packager=bize else packager=mine fi package_map="+$packager $package_map" progs="agetty bash cat cp date dd df ifconfig ln ls $packager mkdir mke2fs \ mkswap mount mv rm reboot route sleep swapoff swapon sync umount \ eject chmod chroot grep halt rmdir sh shutdown uname killall5 \ stone mktemp sort fold sed mkreiserfs cut head tail disktype" progs="$progs fdisk sfdisk" if [ $arch = ppc ] ; then progs="$progs mac-fdisk pdisk" fi if [ $packager = bize ] ; then progs="$progs bzip2 md5sum" fi disksdir="$root/ROCK/target-finish" # datadir is relative to $base. datadir="build/${ROCKCFG_ID}/ROCK/target-finish" mainfunction="second_stage_mainfunction" second_stage_mainfunction () { if [ "$ROCK_BUILD_TARGET" != 1 ] ; then echo "$xpkg can only be built with ./scripts/Build-Target!" false fi echo "Creating 2nd stage filesystem:" rm -rf $disksdir/2nd_stage{,_small} mkdir -p $disksdir/2nd_stage cd $disksdir/2nd_stage mkdir -p mnt/{source,target} # if [ "$ROCKCFG_CREATE_TARBZ2" == 1 ] ; then pkg_suffix='.tar.bz2' install_pkg() { eval tar $taropt $1 || true ; } elif [ "$ROCKCFG_CREATE_GEM" == 1 ] ; then pkg_suffix='.gem' install_pkg() { eval mine -if -R . $1 || true ; } else echo "Creation of binary packages not enabled, can't continue!" false fi if [ "$ROCKCFG_PKGFILE_VER" == 1 ] ; then pkg_suffix='-$pkg_ver-$pkg_extraver'$pkg_suffix fi echo "Extracting the packages archives." grep "^X" $base/config/$config/packages | cut -f5-7 -d" " | \ while read pkg pkg_ver pkg_extraver do xpkg="${pkg#*=}" ; pkg="{pkg%=*}" eval x="$root/ROCK/pkgs/$xpkg$pkg_suffix" if [ -z "${xpkg##*:dev*}" -o -z "${xpkg##*:doc*}" ] then # simply ignore :dev and :doc packages continue elif echo "" $package_map "" | grep -q " +$xpkg " then if [ ! -f $x ] ; then echo "- `basename $x` not found - ignored ..." else eval echo "- Extracting $xpkg$pkg_suffix ..." install_pkg $root/ROCK/pkgs/$xpkg$pkg_suffix fi elif ! echo "" $package_map "" | grep -q " -$xpkg " then echo "- Not found in \$package_map: $xpkg" echo " ... $confdir/2nd_stage.conf" fi done # echo "Remove the stuff we do not need ..." rm -rf boot rm -rf home usr/{local,doc,man,info,games,share} rm -rf var/{adm,games,mail,opt} rm -rf usr/{include,src,*-linux-gnu} {,usr/}lib/*.{a,la,o} # save a few MB by removing unneeded modules rm -rf lib/modules/*/kernel/{drivers/media,sound} for x in usr/lib/*/ ; do rm -rf ${x%/} ; done # if [ "$arch" = arm ] ; then echo "Installing /usr/lib/libgcc_s.so.1 ..." cp -v $root/usr/lib/libgcc_s.so* usr/lib/ fi ldconfig -r $disksdir/2nd_stage echo "Installing some terminfo databases ..." pkg_ver="$( grep " ncurses " $base/config/$config/packages | cut -f6 -d" " )" pkg_extraver="$( grep " ncurses " $base/config/$config/packages | cut -f7 -d" " )" echo "$pkg_suffix $pkg_ver $pkg_extraver" eval echo $pkg_suffix eval x=$root/ROCK/pkgs/ncurses$pkg_suffix if [[ "$pkg_suffix" == *gem ]] ; then mine -k pkg_tarbz2 $x > tmp/ncurses.tar.bz2 x=tmp/ncurses.tar.bz2 fi tar $taropt $x \ usr/share/terminfo/x/xterm usr/share/terminfo/a/ansi \ usr/share/terminfo/n/nxterm usr/share/terminfo/l/linux \ usr/share/terminfo/v/vt200 usr/share/terminfo/v/vt220 \ usr/share/terminfo/v/vt100 usr/share/terminfo/s/screen # if pkginstalled kbd ; then echo "Installing some keymaps ..." pkg_ver="$( grep " kbd " $base/config/$config/packages | cut -f6 -d" " )" pkg_extraver="$( grep " kbd " $base/config/$config/packages | cut -f7 -d" " )" eval x=$root/ROCK/pkgs/kbd$pkg_suffix if [[ "$pkg_suffix" == *gem ]] ; then mine -k pkg_tarbz2 $x > tmp/kbd.tar.bz2 x=tmp/kbd.tar.bz2 fi tar $taropt $x \ usr/share/kbd/keymaps/amiga usr/share/kbd/keymaps/i386/qwerty \ usr/share/kbd/keymaps/atari usr/share/kbd/keymaps/i386/qwertz \ usr/share/kbd/keymaps/sun find usr/share/kbd -name '*dvo*' -o -name '*az*' -o -name '*fgG*' | \ xargs rm -f fi # if pkginstalled pciutils ; then pkg_ver="$( grep " pciutils " $base/config/$config/packages | cut -f6 -d" " )" pkg_extraver="$( grep " pciutils " $base/config/$config/packages | cut -f7 -d" " )" eval x=$root/ROCK/pkgs/pciutils$pkg_suffix if [[ "$pkg_suffix" == *gem ]] ; then mine -k pkg_tarbz2 $x > tmp/pciutils.tar.bz2 x=tmp/pciutils.tar.bz2 fi echo "Installing pci.ids ..." tar $taropt $x usr/share/pci.ids fi # Remove temporary .tar.bz2 packages, if any. rm -f tmp/*.tar.bz2 # echo "Creating 2nd stage linuxrc." cp -v $confdir/linuxrc2.sh sbin/init ; chmod -v +x sbin/init cp -v $confdir/shutdown sbin/shutdown ; chmod -v +x sbin/shutdown echo '$STONE install' > etc/stone.d/default.sh # echo "Creating 2nd stage setup scripts." cat <<- EOT > etc/setup-00-start-udevd.sh #!/bin/sh if [ "$( type -p udevd )" ] ; then udevd --daemon udevtrigger udevsettle fi EOT # echo "Creating 2nd_stage.tar.gz archive." tar -czvf ../2nd_stage.tar.gz * ; cd .. echo "Creating small 2nd stage filesystem:" mkdir -pv 2nd_stage_small ; cd 2nd_stage_small mkdir -pv dev proc sys tmp bin lib etc share mkdir -pv mnt/source mnt/target ln -sv bin sbin ; ln -sv . usr # echo "Copy the most important programs ..." for x in $progs ; do fn="" [ -f ../2nd_stage/bin/$x ] && fn="bin/$x" [ -f ../2nd_stage/sbin/$x ] && fn="sbin/$x" [ -f ../2nd_stage/usr/bin/$x ] && fn="usr/bin/$x" [ -f ../2nd_stage/usr/sbin/$x ] && fn="usr/sbin/$x" if [ "$fn" ] ; then cp -v ../2nd_stage/$fn $fn else echo "- Program not found: $x" fi done # echo "Copy the required libraries ..." found=1 ; while [ $found = 1 ] do found=0 for x in ../2nd_stage/lib ../2nd_stage/usr/lib do for y in $( cd $x ; ls *.so.* 2> /dev/null ) do if [ ! -f lib/$y ] && grep -q $y bin/* lib/* 2> /dev/null then echo "- Found $y." cp -v $x/$y lib/$y ; found=1 fi done done done # echo "Copy linuxrc." cp -v ../2nd_stage/sbin/init sbin/init echo "Copy /etc/fstab." cp -v ../2nd_stage/etc/fstab etc echo "Copy stone.d." mkdir -pv etc/stone.d cp -v ../2nd_stage/etc/stone.d/* etc/stone.d # echo "Creating links for identical files." while read ck fn do if [ "$oldck" = "$ck" ] ; then echo "- Found $fn -> $oldfn." rm -v $fn ; ln -v $oldfn $fn else oldck=$ck ; oldfn=$fn fi done < <( find -type f | xargs md5sum | sort ) # echo "Creating 2nd_stage_small.tar.gz archive." tar -cvf- * | gzip -9 > ../2nd_stage_small.tar.gz ; cd .. echo "Creating ISO filesystem description." rm -rf 2nd-stage-isofs; mkdir -p 2nd-stage-isofs echo "Creating isofs directory.." ln 2nd_stage.tar.gz 2nd_stage_small.tar.gz 2nd-stage-isofs/ echo "Creating isofs.txt file .." cat > $root/ROCK/isofs_2nd-stage.txt <<- EOT DISK1 $datadir/2nd-stage-isofs/ ${ROCKCFG_SHORTID}/ EOT }