Archaic wrote:
> On Wed, Aug 10, 2005 at 07:25:27AM +0100, Richard A Downing wrote:
>
>>My way now is never to type the commands directly, but create a
>>scriptlet for each package built from a template that is essentially
>>Bruce's script plus some checks.
>
>
> And to take automation one step further, you could put Bruce's code into
> a functions file and call it from the scriptlet to further reduce
> duplicated code. And then, you can write a very simple script to
> combine those scriptlets. Before you know it, you are typing one
> command and coming back a few hours later to a finished product. :)
>
Do you mean something like this? :)
-- Bruce
#!/tools/bin/bash
echo "Starting Chapter 6"
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin
export TZ=CST6CDT
set +h
SCRIPTDIR=/tools/src/scripts
cd /tools/src
# Change ownershp of everything to root
chown -R 0:0 /tools
# Create the directories
install -d /{bin,boot,dev,etc/opt,home,lib,mnt}
install -d /{sbin,srv,usr/local,var,opt}
install -d /root -m 0750
install -d /tmp /var/tmp -m 1777
install -d /media/{floppy,cdrom}
install -d /usr/{bin,include,lib,sbin,share,src}
ln -sf share/{man,doc,info} /usr
install -d /usr/share/{doc,info,locale,man}
install -d /usr/share/{misc,terminfo,zoneinfo}
install -d /usr/share/man/man{1,2,3,4,5,6,7,8}
install -d /usr/local/{bin,etc,include,lib,sbin,share,src}
ln -sf share/{man,doc,info} /usr/local
install -d /usr/local/share/{doc,info,locale,man}
install -d /usr/local/share/{misc,terminfo,zoneinfo}
install -d /usr/local/share/man/man{1,2,3,4,5,6,7,8}
install -d /var/{lock,log,mail,run,spool}
install -d /var/{opt,cache,lib/{misc,locate},local}
install -d /opt/{bin,doc,include,info}
install -d /opt/{lib,man/man{1,2,3,4,5,6,7,8}}
# Make essential symlinks
ln -sf /tools/bin/{bash,pwd,cat,stty} /bin
ln -sf /tools/bin/perl /usr/bin
ln -sf /tools/lib/libgcc_s.so.1 /usr/lib
ln -sf bash /bin/sh
# Password and group files
cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
EOF
cat > /etc/group << "EOF"
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
tape:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
EOF
touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}
chgrp utmp /var/run/utmp /var/log/lastlog
chmod 664 /var/run/utmp /var/log/lastlog
# Make devices
mknod -m 600 /dev/console c 5 1
mknod -m 666 /dev/null c 1 3
touch /etc/fstab
mount -n -t ramfs none /dev
/tools/sbin/udevstart
ln -sf /proc/self/fd /dev/fd
ln -sf /proc/self/fd/0 /dev/stdin
ln -sf /proc/self/fd/1 /dev/stdout
ln -sf /proc/self/fd/2 /dev/stderr
ln -sf /proc/kcore /dev/core
mkdir -p /dev/pts
mkdir -p /dev/shm
mount -t devpts -o gid=4,mode=620 none /dev/pts
mount -t tmpfs none /dev/shm
###################
$SCRIPTDIR/make6-kernel-headers || { echo "make6-kernel-headers failed" ;
exit 1; }
$SCRIPTDIR/make6-man-pages || { echo "make6-man-pages failed" ; exit 1; }
$SCRIPTDIR/make6-glibc || { echo "make6-glibc failed" ; exit 1; }
###################
# Re-adjust the toolchain
BINUTILS=binutils-2.15.91.0.2
before2=`df -k / | grep / | sed -e "s/ \{2,\}/ /g" | cut -d' ' -f3`
time { \
{
echo "Readjusting Toolchain"
date
pushd binutils-build &&
make -C ld INSTALL=/tools/bin/install install &&
popd &&
rm -rf binutils-build &&
rm -rf $BINUTILS &&
sed -i 's@ /tools/lib/ld-linux.so.2@ /lib/[EMAIL PROTECTED]' `gcc
--print-file specs`
}
} 2>&1 | tee -a build.log # Note - not '../build.log' here
if [ $PIPESTATUS -ne 0 ]; then exit 1; fi;
after2=`df -k / | grep / | sed -e "s/ \{2,\}/ /g" | cut -d" " -f3`
echo "$(($after2-$before2)) kilobytes / build size - $PROGRAM" | tee -a
build.log
echo 'main(){}' > dummy.c
echo "cc dummy.c" | tee -a build.log
cc dummy.c 2>&1 | tee -a build.log
if [ $PIPESTATUS -ne 0 ]; then echo "Failure in Toolchain check"; exit 1; fi;
readelf -l a.out | grep ': /lib' | tee -a build.log
rm dummy.c a.out
###################
$SCRIPTDIR/make6-binutils || { echo "make6-bunutils failed" ; exit 1; }
$SCRIPTDIR/make6-gcc || { echo "make6-gcc failed" ; exit 1; }
mount -t ext3 /dev/hda1 /boot
$SCRIPTDIR/make6-coreutils || { echo "make6-coreutils failed" ; exit 1; }
$SCRIPTDIR/make6-zlib || { echo "make6-zlib failed" ; exit 1; }
$SCRIPTDIR/make6-mktemp || { echo "make6-mktemp failed" ; exit 1; }
$SCRIPTDIR/make6-iana-etc || { echo "make6-iana-etc failed" ; exit 1; }
$SCRIPTDIR/make6-findutils || { echo "make6-findutils failed" ; exit 1; }
$SCRIPTDIR/make6-gawk || { echo "make6-gawk failed" ; exit 1; }
$SCRIPTDIR/make6-ncurses || { echo "make6-ncurses failed" ; exit 1; }
$SCRIPTDIR/make6-readline || { echo "make6-readline failed" ; exit 1; }
$SCRIPTDIR/make6-vim || { echo "make6-vim failed" ; exit 1; }
$SCRIPTDIR/make6-m4 || { echo "make6-m4 failed" ; exit 1; }
$SCRIPTDIR/make6-bison || { echo "make6-bison failed" ; exit 1; }
$SCRIPTDIR/make6-less || { echo "make6-less failed" ; exit 1; }
$SCRIPTDIR/make6-groff || { echo "make6-groff failed" ; exit 1; }
$SCRIPTDIR/make6-sed || { echo "make6-sed failed" ; exit 1; }
$SCRIPTDIR/make6-flex || { echo "make6-flex failed" ; exit 1; }
$SCRIPTDIR/make6-gettext || { echo "make6-gettext failed" ; exit 1; }
$SCRIPTDIR/make6-inetutils || { echo "make6-inetutils failed" ; exit 1;
}
$SCRIPTDIR/make6-iproute2 || { echo "make6-iproute2 failed" ; exit 1; }
$SCRIPTDIR/make6-perl || { echo "make6-perl failed" ; exit 1; }
$SCRIPTDIR/make6-texinfo || { echo "make6-texinfo failed" ; exit 1; }
$SCRIPTDIR/make6-autoconf || { echo "make6-autoconf failed" ; exit 1; }
$SCRIPTDIR/make6-automake || { echo "make6-automake failed" ; exit 1; }
$SCRIPTDIR/make6-bash || { echo "make6-bash failed" ; exit 1; }
$SCRIPTDIR/make6-file || { echo "make6-file failed" ; exit 1; }
$SCRIPTDIR/make6-libtool || { echo "make6-libtool failed" ; exit 1; }
$SCRIPTDIR/make6-bzip2 || { echo "make6-bzip2 failed" ; exit 1; }
$SCRIPTDIR/make6-diffutils || { echo "make6-diffutils failed" ; exit 1;
}
$SCRIPTDIR/make6-kbd || { echo "make6-kbd failed" ; exit 1; }
$SCRIPTDIR/make6-e2fsprogs || { echo "make6-e2fsprogs failed" ; exit 1;
}
$SCRIPTDIR/make6-grep || { echo "make6-grep failed" ; exit 1; }
$SCRIPTDIR/make6-grub || { echo "make6-grub failed" ; exit 1; }
$SCRIPTDIR/make6-gzip || { echo "make6-gzip failed" ; exit 1; }
$SCRIPTDIR/make6-man || { echo "make6-man failed" ; exit 1; }
$SCRIPTDIR/make6-make || { echo "make6-make failed" ; exit 1; }
$SCRIPTDIR/make6-mod-init-tools || { echo "make6-mod-init-tools failed" ;
exit 1; }
$SCRIPTDIR/make6-patch || { echo "make6-patch failed" ; exit 1; }
$SCRIPTDIR/make6-procps || { echo "make6-procps failed" ; exit 1; }
$SCRIPTDIR/make6-psmisc || { echo "make6-psmisc failed" ; exit 1; }
$SCRIPTDIR/make6-shadow || { echo "make6-shadow failed" ; exit 1; }
$SCRIPTDIR/make6-sysklogd || { echo "make6-sysklogd failed" ; exit 1; }
$SCRIPTDIR/make6-sysvinit || { echo "make6-sysvinit failed" ; exit 1; }
$SCRIPTDIR/make6-tar || { echo "make6-tar failed" ; exit 1; }
$SCRIPTDIR/make6-udev || { echo "make6-udev failed" ; exit 1; }
$SCRIPTDIR/make6-util-linux || { echo "make6-util-linux failed" ; exit 1;
}
###################
#### Start Chapter 7
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
before2=`df -k / | grep / | sed -e "s/ \{2,\}/ /g" | cut -d' ' -f3`
BOOTSCRIPTS=lfs-bootscripts-2.2.2
tar -jxf $BOOTSCRIPTS.tar.bz2
cd $BOOTSCRIPTS
{ time \
{
echo "Installing Bootscripts"
date
make install
}
} 2>&1 | tee -a ../build.log
echo "`du -k ../$BOOTSCRIPTS.tar.bz2` size" | tee -a ../build.log
after2=`df -k / | grep / | sed -e "s/ \{2,\}/ /g" | cut -d" " -f3`
echo "$(($after2-$before2)) kilobytes / build size - Bootscripts" | tee -a
../build.log
cd ..
rm -r $BOOTSCRIPTS
########
#ln -s path/to/keymap /usr/share/kbd/keymaps/defkeymap.map.gz
#loadkeys -m /usr/share/kbd/keymaps/defkeymap.map.gz > \
# /usr/src/linux-2.4.22/drivers/char/defkeymap.c
#########
# Configuring the setclock script
cat > /etc/sysconfig/clock << "EOF"
# Begin /etc/sysconfig/clock
UTC=1
# End /etc/sysconfig/clock
EOF
# Creating the /etc/inputrc file
cat > /etc/inputrc << "EOF"
# Begin /etc/inputrc
# Modified by Chris Lynn <[EMAIL PROTECTED]>
# Make sure we don't output everything on the 1 line
set horizontal-scroll-mode Off
# Enable 8bit input
set meta-flag On
set input-meta On
# Turns off 8th bit stripping
set convert-meta Off
# Keep the 8th bit for display
set output-meta On
# none, visible or audible
set bell-style none
# Give alternatives immediately
set show-all-if-ambiguous on
# All of the following map the escape sequence of the
# value contained inside the 1st argument to the
# readline specific functions
"\eOd": backward-word
"\eOc": forward-word
# for linux console
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
# for xterm
"\eOH": beginning-of-line
"\eOF": end-of-line
# for Konsole
"\e[H": beginning-of-line
"\e[F": end-of-line
# End /etc/inputrc
EOF
# Bash Shell Startup Files
cat > /etc/profile << "EOF"
# Begin /etc/profile
export LC_ALL=en_US
export LANG=en_US
export INPUTRC=/etc/inputrc
# End /etc/profile
EOF
# Configuring the localnet script
echo "HOSTNAME=station1" > /etc/sysconfig/network
# Creating the /etc/hosts file
cat > /etc/hosts << "EOF"
# Begin /etc/hosts (network card version)
127.0.0.1 localhost.localdomain localhost
10.11.130.210 station1.sac.accd.edu station1 s1
10.11.130.181 station2.sac.accd.edu station2 s2
10.11.130.211 station3.sac.accd.edu station3 s3
10.11.130.194 station4.sac.accd.edu station4 s4
10.11.130.199 station5.sac.accd.edu station5 s5
10.11.130.204 station6.sac.accd.edu station6 s6
10.11.130.47 station7.sac.accd.edu station7 s7
10.11.131.7 station8.sac.accd.edu station8 s8
10.11.130.235 station9.sac.accd.edu station9 s9
10.11.131.22 station10.sac.accd.edu station10 s10
10.11.130.201 station11.sac.accd.edu station11 s11
10.11.130.197 station12.sac.accd.edu station12 s12
10.11.131.12 station13.sac.accd.edu station13 s13
10.11.130.89 station14.sac.accd.edu station14 s14
# End /etc/hosts (network card version)
EOF
# Configuring the network script
pushd /etc/sysconfig/network-devices &&
mkdir ifconfig.eth0 &&cat > ifconfig.eth0/ipv4 << "EOF"
ONBOOT=yes
SERVICE=ipv4-static
IP=10.11.130.210
GATEWAY=10.11.130.1
PREFIX=23
BROADCAST=10.11.131.255
EOF
popd
cat > /etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf
search cis.sac.accd.edu
nameserver 10.12.100.25
nameserver 10.12.0.11
nameserver 10.12.100.7
# End /etc/resolv.conf
EOF
##### Start Chapter 8
cat > /etc/fstab << "EOF"
# Begin /etc/fstab
# filesystem mount-point fs-type options dump fsck
# order
/dev/hda1 /boot ext3 defaults 1 2
/dev/hda2 /home ext3 defaults 1 2
/dev/hda5 / ext3 defaults 1 1
/dev/hda3 swap swap pri=1 0 0
ramfs /dev ramfs defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
shm /dev/shm tmpfs defaults 0 0
#usbfs /proc/bus/usb usbfs devgid=14,devmode=0660 0 0
/dev/cdrom /media/cdrom auto defaults,noauto,owner,ro 0 0
/dev/fd0 /media/floppy auto noauto,owner 0 0
# End /etc/fstab
EOF
# Fix a problem with mountfs
sed -i -e "26i\ \t\tmount -f /dev || failed=1" /etc/rc.d/init.d/mountfs
$SCRIPTDIR/make6-kernel || { echo "make6-kernel failed" ; exit 1; }
#### Chapter 9
date=$(date +%Y%m%d)
echo "6.0-$date" > /etc/lfs-build-info
#### Finish
echo "Strip binaries and libraries from within the new environment:"
find /{,usr/}{bin,lib,sbin} -type f -exec strip --strip-debug {} \; 2>/dev/null
echo "Copy kernel and System.map to /boot"
echo "Set up /boot/grub/menu.lst"
cat > /boot/grub/menu.lst << EOF
# grub configuration file
default=0
timeout=30
title LFS 6.0
root (hd0,0)
kernel /linux-2.6.8.1-$date root=/dev/hda5
EOF
pushd /boot/grub
ln -s menu.lst grub.conf
popd
umount /boot
echo "Chapters 6, 7, and 8 are finished."
echo "1. Update HOSTNAME in /etc/sysconfig/network"
echo "2. Update IP address in /etc/sysconfig/network-devices/ifconfig.eth0/ipv4"
echo "3. Run GRUB"
echo "4. Remove CD"
echo "5. Reboot"
exit 0
--
http://linuxfromscratch.org/mailman/listinfo/blfs-dev
FAQ: http://www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page