INSTALL IN CHROOT (<- LFS <- LINUX <- HOME)

Prepare for chroot

$ su -
# cat > $LFS/etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
claudio:x:500:500:Claudio Nieder:/home/claudio:/bin/bash
EOF

# cat > $LFS/etc/group << "EOF"
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
uucp:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
claudio:x:500:
admin:x:50000:claudio
EOF  

# mount proc $LFS/proc -t proc
# cat > $LFS/root/.bashrc << 'EOF'

umask 022

export LESS='-degiqMh3'
export LESSCHARSET='latin1'
export PAGER='/usr/bin/less'
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
if [ "$PS1" != "" ]; then
 export PS1='\nRC=$?; \d \t; \u@\H ${DISPLAY}\nLFS: ${DIRSTACK[*]}\n\$ '
 
 auto_resume='prefix'
 shopt -s checkhash
 shopt -s checkwinsize
 shopt -s cmdhist
 shopt -s execfail
 shopt -s histreedit
 shopt -s histverify
 shopt -s mailwarn
 shopt -s shift_verbose
 
 dir() { ls -CF "$@"; }
 ll() { ls -lF "$@"; }

fi

EOF
# ln -s .bashrc $LFS/root/.bash_profile

chroot and create devices

The devfs filesystem is used later, but some devices are needed already during installation, so they have to be created right away.

Note:To keep the setting of TERM one should add TERM=$TERM after HOME=/root. I don't know if here it does more harm than good, as glibc is not installed, maybe it's better to add later.

# cd $LFS
# chroot $LFS /usr/bin/env -i HOME=/root /bin/bash --login
# mknod /dev/null c 1 3
# chmod 666 /dev/null
# mknod /dev/hda13 b 3 13
# chmod 600 /dev/hda13

man-pages

   
# cd /var/src/man-pages
# tar xyvf man-pages-1.35.tar.bz2
# cd man-pages-1.35
# make install

glibc

# cd /var/src/glibc
# tar xzvf glibc-2.2.3.tar.gz
# cd glibc-2.2.3
# tar xzvf ../glibc-linuxthreads-2.2.3.tar.gz
# mkdir /var/src/glibc/glibc-build
# cd /var/src/glibc/glibc-build
# sed s/"\$(PERL)"/"\/usr\/bin\/perl"/ ../glibc-2.2.3/malloc/Makefile > tmp~
# mv tmp~ ../glibc-2.2.3/malloc/Makefile
# sed "s/root/0/" ../glibc-2.2.3/login/Makefile > tmp~
# mv tmp~ ../glibc-2.2.3/login/Makefile
# ../glibc-2.2.3/configure --prefix=/usr --enable-add-ons --libexecdir=/usr/bin
# sed s/"cross-compiling = yes"/"cross-compiling = no"/ config.make > config.make~
# mv config.make~ config.make
# make
# touch /etc/ld.so.conf
# make install
# make localedata/install-locales
# ln -sf /usr/share/zoneinfo/right/Europe/Zurich /etc/localtime
# exit
# chroot $LFS /usr/bin/env -i HOME=/root TERM=$TERM /bin/bash --login

/home/claudio

I want again to be able to compile under a non-root user

# mkdir /home/claudio
# chown claudio:claudio /home/claudio
# cp -i /root/.bashrc /home/claudio/.bashrc
# ln -s .bashrc /home/claudio/.bash_profile

ed

# su - claudio
$ cd /var/src/ed
$ tar xzvf ed-0.2.tar.gz
$ cd ed-0.2
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/ed/ed-0.2
# make install
# mv -i /usr/bin/ed /usr/bin/red /bin

patch

# su - claudio
$ cd /var/src/patch
$ tar xzvf patch-2.5.4.tar.gz
$ cd patch-2.5.4
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/patch/patch-2.5.4
# make install

findutils

# su - claudio
$ cd /var/src/findutils
$ tar xzvf findutils-4.1.tar.gz
$ cd findutils-4.1
$ bzcat ../findutils-4.1.patch.bz2 | patch -Np1
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/findutils/findutils-4.1
# make libexecdir=/usr/bin install

mawk

# su - claudio
$ cd /var/src/mawk
$ mv -i mawk-1.3.3 mawk-1.3.3-static
$ tar xzvf mawk1.3.3.tar.gz
$ cd mawk-1.3.3
$ ./configure
$ make
$ exit
# cd /var/src/mawk/mawk-1.3.3
# make BINDIR=/usr/bin MANDIR=/usr/share/man/man1 install
# cd /usr/bin
# ln -s mawk awk

ncurses

# su - claudio
$ cd /var/src/ncurses
$ tar xzvf ncurses-5.2.tar.gz
$ cd ncurses-5.2
$ ./configure --prefix=/usr --libdir=/lib --with-shared --disable-termcap
$ make
$ exit
# cd /var/src/ncurses/ncurses-5.2
# make install
# cd /lib
# ln -s libncurses.a libcurses.a

vim

# su - claudio
$ cd /var/src/vim
$ tar xzvf vim-5.7-src.tar.gz
$ tar xzvf vim-5.7-rt.tar.gz
$ cd vim-5.7
$ ./configure --prefix=/usr --localstatedir=/var/lib/vim
$ make
$ exit
# cd /var/src/vim/vim-5.7
# make install
# cd /usr/bin
# ln -s vim vi
# mkdir /var/lib/vim

gcc

# su - claudio
$ cd /var/src/gcc
$ mv -i gcc-2.95.3 gcc-2.95.3-static
$ mv -i gcc-build gcc-build-static
$ tar xzvf gcc-2.95.3.tar.gz
$ mkdir /var/src/gcc/gcc-build
$ cd /var/src/gcc/gcc-build
$ ../gcc-2.95.3/configure --prefix=/usr \
   --with-gxx-include-dir=/usr/include/g++ \
   --enable-shared --enable-languages=c,c++
$ make bootstrap
$ exit
# cd /var/src/gcc/gcc-build
# make install

bison

# su - claudio
$ cd /var/src/bison
$ tar xzvf bison-1.28.tar.gz
$ cd bison-1.28
$ ./configure --prefix=/usr --datadir=/usr/share/bison
$ make
$ exit
# cd /var/src/bison/bison-1.28
# make install
# cat > /usr/bin/yacc << "EOF"
#!/bin/sh
/usr/bin/bison -y "$@"
EOF
# chmod 755 /usr/bin/yacc

less

# su - claudio
$ cd /var/src/less
$ tar xzvf less-358.tar.gz
$ cd less-358
$ ./configure --prefix=/usr --bindir=/bin
$ make
$ exit
# cd /var/src/less/less-358
# make install

groff

It seems groff 1.17 exists. Review build instructions

# su - claudio
$ cd /var/src/groff
$ tar xzvf groff-1.16.1.tar.gz
$ cd groff-1.16.1
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/groff/groff-1.16.1
# make install

man

# su - claudio
$ cd /var/src/man
$ tar xyvf man-1.5i.tar.bz2
$ cd man-1.5i
$ bzcat ../man-1.5i.patch.bz2 | patch -Np1
$ ./configure -default
$ make
$ exit
# cd /var/src/man/man-1.5i
# make install

perl

Note:If possible I'd prefer building perl only after a reboot into LFS.

# su - claudio
$ cd /var/src/perl
$ tar xzvf perl-5.6.1.tar.gz
$ cd perl-5.6.1
$ ./Configure -Dprefix=/usr
$ make
$ exit
# cd /var/src/perl/perl-5.6.1
# make install

m4

# su - claudio
$ cd /var/src/m4
$ tar xzvf m4-1.4.tar.gz
$ cd m4-1.4
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/m4/m4-1.4
# make install

texinfo

# su - claudio
$ cd /var/src/texinfo
$ mv -i texinfo-4.0 texinfo-4.0-static
$ tar xzvf texinfo-4.0.tar.gz
$ cd texinfo-4.0
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/texinfo/texinfo-4.0
# make install
# make TEXMF=/usr/share/texmf install-tex

autoconf

# su - claudio
$ cd /var/src/autoconf
$ tar xzvf autoconf-2.13.tar.gz
$ cd autoconf-2.13
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/autoconf/autoconf-2.13
# make install

automake

# su - claudio
$ cd /var/src/automake
$ tar xzvf automake-1.4.tar.gz
$ cd automake-1.4
$ ./configure --prefix=/usr
$ exit
# cd /var/src/automake/automake-1.4
# make install

bash

# su - claudio
$ cd /var/src/bash
$ mv -i bash-2.05 bash-2.05-static
$ tar xzvf bash-2.05.tar.gz
$ cd bash-2.05
$ ./configure --prefix=/usr --enable-usg-echo-default --with-curses 
$ make
$ exit
# cd /var/src/bash/bash-2.05
# make install
# exit
# mv $LFS/usr/bin/bash $LFS/usr/bin/bashbug $LFS/bin
# chroot $LFS /usr/bin/env -i HOME=/root TERM=$TERM /bin/bash --login

flex

# su - claudio
$ cd /var/src/flex
$ tar xzvf flex-2.5.4a.tar.gz
$ cd flex-2.5.4
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/flex/flex-2.5.4
# make install
# cd /usr/bin
# ln -s flex lex

file

# su - claudio
$ cd /var/src/file
$ tar xzvf file-3.35.tar.gz
$ cd file-3.35
$ ./configure --prefix=/usr --datadir=/usr/share/misc
$ make
$ exit
# cd /var/src/file/file-3.35
# make install

libtool

libtool is up to 1.4. Review build instructions.

# su - claudio
$ cd /var/src/libtool
$ tar xzvf libtool-1.3.5.tar.gz
$ cd libtool-1.3.5
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/libtool/libtool-1.3.5
# make install

bin86

Needs INSTALL_OPTS="-m 755" in make install.

# su - claudio
$ cd /var/src/bin86
$ tar xzvf bin86-0.15.5.tar.gz
$ mv -i bin86 bin86-0.15.5
$ cd bin86-0.15.5
$ make
$ exit
# cd /var/src/bin86/bin86-0.15.5
# make PREFIX=/usr install

binutils

# su - claudio
$ cd /var/src/binutils
$ mv -i binutils-2.11 binutils-2.11-static
$ tar xzvf binutils-2.11.tar.gz
$ cd binutils-2.11
$ ./configure --prefix=/usr --enable-shared
$ make -e tooldir=/usr
$ exit
# cd /var/src/binutils/binutils-2.11
# make -e tooldir=/usr install
# make -e tooldir=/usr install-info

bzip2

# su - claudio
$ cd /var/src/bzip2
$ mv -i bzip2-1.0.1 bzip2-1.0.1-static
$ tar xzvf bzip2-1.0.1.tar.gz
$ cd bzip2-1.0.1
$ make -f Makefile-libbz2_so
$ make bzip2recover libbz2.a
$ exit
# cd /var/src/bzip2/bzip2-1.0.1
# cp bzip2-shared /bin/bzip2
# cp bzip2recover /bin
# cp bzip2.1 /usr/share/man/man1
# cp bzlib.h /usr/include
# cp -a libbz2.so* libbz2.a /lib
# rm /usr/lib/libbz2.a
# cd /bin
# ln -sf bzip2 bunzip2
# ln -sf bzip2 bzcat
# cd /usr/share/man/man1
# ln -s bzip2.1 bunzip2.1
# ln -s bzip2.1 bzcat.1
# ln -s bzip2.1 bzip2recover.1

gettext

# su - claudio
$ cd /var/src/gettext
$ tar xzvf gettext-0.10.37.tar.gz
$ cd gettext-0.10.37
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/gettext/gettext-0.10.37
# make install

kbd

# su - claudio
$ cd /var/src/kbd
$ tar xzvf kbd-1.05.tar.gz
$ cd kbd-1.05
$ ./configure --datadir=/usr/share/kbd
$ make
$ exit
# cd /var/src/kbd/kbd-1.05
# make install
# rm /usr/share/kbd/keymaps/i386/qwerty/defkeymap.map.gz
# cd /usr/share/kbd/keymaps
# ln -s i386/qwertz/sg-latin1.map.gz defkeymap.map.gz

diffutils

# su - claudio
$ cd /var/src/diffutils
$ mv -i diffutils-2.7 diffutils-2.7-static
$ tar xzvf diffutils-2.7.tar.gz
$ cd diffutils-2.7
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/diffutils/diffutils-2.7
# make install

e2fsprogs

# su - claudio
$ cd /var/src/e2fsprogs
$ tar xzvf e2fsprogs-1.19.tar.gz
$ cd e2fsprogs-1.19
$ ./configure --prefix=/usr --with-root-prefix= --enable-elf-shlibs
$ make
$ exit
# cd /var/src/e2fsprogs/e2fsprogs-1.19
# make install
# make install-libs

fileutils

It seems fileutils-4.1 is out. Verify the build instructions.

# su - claudio
$ cd /var/src/fileutils
$ mv -i fileutils-4.0 fileutils-4.0-static
$ tar xzvf fileutils-4.0.tar.gz
$ cd fileutils-4.0
$ bzcat ../fileutils-4.0.patch.bz2 | patch -Np1
$ ./configure --prefix=/usr --bindir=/bin --libexecdir=/bin
$ make
$ exit
# cd /var/src/fileutils/fileutils-4.0
# make install

grep

# su - claudio
$ cd /var/src/grep
$ mv -i grep-2.4.2 grep-2.4.2-static
$ tar xzvf grep-2.4.2.tar.gz
$ cd grep-2.4.2
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/grep/grep-2.4.2
# make install

gzip

# su - claudio
$ cd /var/src/gzip
$ mv -i gzip-1.2.4a gzip-1.2.4a-static
$ tar xzvf gzip-1.2.4a.tar.gz
$ cd gzip-1.2.4a
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/gzip/gzip-1.2.4a
# make install
# cd /usr/bin
# mv gzip /bin
# cd /bin
# ln -sf gzip gunzip
# ln -sf gzip zcat
# ln -s gzip compress
# ln -s gzip uncompress

lilo

# su - claudio
$ cd /var/src/lilo
$ tar xzvf lilo-21.7.3.tar.gz
$ mv -i lilo-21.7.3 lilo-21.7.4
$ cd lilo-21.7.4
$ patch -Np1 -i ../patch-21.7.3-to-21.7.4-diff.txt
$ make
$ exit
# cd /var/src/lilo/lilo-21.7.4
# make install

make

Note: make want to install itself sgid kmem, to be able to get loadavg (needed for working -l option). Because /dev/kmem is missing, configure can't determine the group of kmem. Because of that chgrp fails during make install, but that's harmless.

# su - claudio
$ cd /var/src/make
$ mv -i make-3.79.1 make-3.79.1-static
$ tar xzvf make-3.79.1.tar.gz
$ cd make-3.79.1
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/make/make-3.79.1
# make install

modutils

newer version available.review build instructions

# su - claudio
$ cd /var/src/modutils
$ tar xyvf modutils-2.4.5.tar.bz2
$ cd modutils-2.4.5
$ ./configure
$ make
$ exit
# cd /var/src/modutils/modutils-2.4.5
# make install

procinfo

# su - claudio
$ cd /var/src/procinfo
$ tar xzvf procinfo-18.tar.gz
$ cd procinfo-18
$ sed "s/-ltermcap/-lncurses/" Makefile | make -f -
$ exit
# cd /var/src/procinfo/procinfo-18
# make install

procps

# su - claudio
$ cd /var/src/procps
$ tar xzvf procps-2.0.7.tar.gz
$ cd procps-2.0.7
$ sed "s/XConsole/#XConsole/" Makefile | make -f -
$ exit
# cd /var/src/procps/procps-2.0.7
# sed "s/XConsole/#XConsole/" Makefile | make -f - install
# mv -i /usr/bin/kill /bin

psmisc

# su - claudio
$ cd /var/src/psmisc
$ tar xzvf psmisc-19.tar.gz
$ mv -i psmisc psmisc-19
$ cd psmisc-19
$ sed "s/-ltermcap/-lncurses/" Makefile | make -f -
$ exit
# cd /var/src/psmisc/psmisc-19
# make install

sed

# su - claudio
$ cd /var/src/sed
$ mv -i sed-3.02 sed-3.02-static
$ tar xzvf sed-3.02.tar.gz
$ cd sed-3.02
$ ./configure --prefix=/usr --bindir=/bin
$ make
$ exit
# cd /var/src/sed/sed-3.02
# make install

sh-utils

Note: newer LFS book patches sh-utils

# su - claudio
$ cd /var/src/sh-utils
$ mv -i sh-utils-2.0 sh-utils-2.0-static
$ tar xzvf sh-utils-2.0.tar.gz
$ cd sh-utils-2.0
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/sh-utils/sh-utils-2.0
# make install
# cd /usr/bin
# mv date echo false pwd stty /bin
# mv su true uname hostname /bin
# ln -s test [

shadowpwd

# su - claudio
$ cd /var/src/shadowpwd
$ tar xzvf shadow-20001016.tar.gz
$ cd shadow-20001016
$ bzcat ../shadow-20001016.patch.bz2 | patch -Np1
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/shadowpwd/shadow-20001016
# make install
# cd etc
# cp -i limits login.access /etc
# sed "s|/var/spool/mail|/var/mail|" login.defs.linux > /etc/login.defs

sysvinit

# su - claudio
$ cd /var/src/sysvinit
$ tar xzvf sysvinit-2.78.tar.gz
$ cd sysvinit-2.78
$ bzcat ../sysvinit-2.78.patch.bz2 | patch -Np1
$ cd src
$ make
$ exit
# cd /var/src/sysvinit/sysvinit-2.78/src
# make install

tar

Note: newer LFS version add --bindir=$LFS/bin to configure and tar is NOT moved from /usr/bin to /bin.

# su - claudio
$ cd /var/src/tar
$ mv -i tar-1.13 tar-1.13-static
$ tar xzvf tar-1.13.tar.gz
$ cd tar-1.13/src
$ bzcat ../../gnutarpatch.txt.bz2 | patch
$ cd ..
$ ./configure --prefix=/usr --libexecdir=/usr/bin
$ make
$ exit
# cd /var/src/tar/tar-1.13
# make install
# mv /usr/bin/tar /bin

textutils

# su - claudio
$ cd /var/src/textutils
$ mv -i textutils-2.0 textutils-2.0-static
$ tar xzvf textutils-2.0.tar.gz
$ cd textutils-2.0
$ ./configure --prefix=/usr
$ make
$ exit
# cd /var/src/textutils/textutils-2.0
# make install
# mv /usr/bin/cat /bin

utillinux

# su - claudio
$ cd /var/src/utillinux
$ tar xyvf util-linux-2.11a.tar.bz2
$ cd util-linux-2.11a
$ sed "s|etc/adjtime\"\$|var/lib/hwclock/adjtime\"|" hwclock/hwclock.c > hwclock~
$ mv hwclock~ hwclock/hwclock.c
$ sed -e s/HAVE_SLN=no/HAVE_SLN=yes/ MCONFIG > MCONFIG~
$ mv MCONFIG~ MCONFIG
$ ./configure
$ make
$ exit
# cd /var/src/utillinux/util-linux-2.11a
# make install
# mkdir /var/lib/hwclock

daemontools

This is installed as I did in the past. I wonder if some or all binaries should rather be installed in /bin or /sbin.

# su - claudio
$ cd /var/src/daemontools
$ tar xzvf daemontools-0.70.tar.gz
$ tar xzvf daemontools-0.70-man.tar.gz
$ cd daemontools-0.70
$ echo '/opt/daemontools-0.70' >conf-home
$ sed "s|<sys/time.h>|<time.h>|" tai64nlocal.c > tai64nlocal.c~
$ mv tai64nlocal.c~ tai64nlocal.c
$ make
$ exit
# cd /var/src/daemontools/daemontools-0.70
# mkdir -p /opt/daemontools-0.70
# make setup check
# cd ../daemontools-0.70-man
# mkdir -p /opt/daemontools-0.70/man/man8
# cp -i *.8 /opt/daemontools-0.70/man/man8
# ln -s /opt/daemontools-0.70/bin/* /usr/bin
# ln -s /opt/daemontools-0.70/man/man8/* /usr/man/man8

read_syslog

# su - claudio
$ cd /var/src/read_syslog
$ gcc -Wall -o read_syslog read_syslog.c
$ exit
# cd /var/src/read_syslog
# cp -i read_syslog /usr/bin

devfsd

# su - claudio
$ cd /var/src/devfsd
$ tar xyvf devfsd-v1.3.11.tar.bz2
$ mv -i devfsd devfsd-1.3.11
$ cd devfsd-1.3.11
$ make
$ exit
# cd /var/src/devfsd/devfsd-1.3.11
# make install

net-tools

# su - claudio
$ cd /var/src/net-tools
$ tar xyvf net-tools-1.60.tar.bz2
$ cd net-tools-1.60
$ make
$ exit
# cd /var/src/net-tools/net-tools-1.60
# make install

wget

# su - claudio
$ cd /var/src/wget
$ tar xzvf wget-1.6.tar.gz
$ cd wget-1.6
$ ./configure --prefix=/opt/wget-1.6
$ make
$ exit
# cd /var/src/wget/wget-1.6
# make install

Configurations

# touch /root/.vimrc
# cat > /etc/nsswitch.conf << "EOF"
passwd: files
group: files
shadow: files
publickey: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: db files
EOF
# pwconv
# passwd
# passwd claudio

# cat > /etc/protocols << "EOF"
ip 0 IP
icmp 1 ICMP
1gmp 2 IGMP
ipencap 4 IP-ENCAP
tcp 6 TCP
udp 17 UDP
ipv6 41 IPv6
ipv6-route 43 IPv6-Route
ipv6-frag 44 IPv6-Frag
ipv6-crypt 50 IPv6-Crypt
ipv6-auth 51 IPv6-Auth
ipv6-icmp 58 IPv6-ICMP
ipv6-nonxt 59 IPv6-NoNxt
ipv6-opts 60 IPv6-Opts
EOF

# cat > /etc/services << "EOF"
ssh 22/tcp
smtp 25/tcp
domain 53/tcp
domain 53/udp
http 80/tcp
pop3 110/tcp
auth 113/tcp
imap2 143/tcp
https 443/tcp
EOF

# cat > /etc/hosts << "EOF"
127.0.0.1 localhost.localdomain localhost
EOF

# cat > /etc/inittab << "EOF"
id:2:initdefault:

si::sysinit:/etc/rc.d/rc.startup

l0:0:wait:/etc/rc.d/rc.halt
l1:S1:wait:/etc/rc.d/rc.single
l2:2:wait:/etc/rc.d/rc.2
l3:3:wait:/etc/rc.d/rc.3
l4:4:wait:/etc/rc.d/rc.4
l5:5:wait:/etc/rc.d/rc.5
l6:6:wait:/etc/rc.d/rc.reboot

ft:06:respawn:/sbin/sulogin

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

su:S1:respawn:/sbin/sulogin

1:2345:respawn:/sbin/agetty /dev/vc/1 9600
2:2345:respawn:/sbin/agetty /dev/vc/2 9600
3:2345:respawn:/sbin/agetty /dev/vc/3 9600
4:2345:respawn:/sbin/agetty /dev/vc/4 9600
5:2345:respawn:/sbin/agetty /dev/vc/5 9600
6:2345:respawn:/sbin/agetty /dev/vc/6 9600
EOF
# touch /var/log/wtmp /var/log/btmp /var/log/lastlog
# chmod 644 /var/log/wtmp /var/log/btmp /var/log/lastlog
# mkdir /etc/rc.d
# cd /etc/rc.d
# cat >rc.startup << "EOF"
#!/bin/bash -v
/sbin/hwclock -u --hctosys
/usr/bin/loadkeys -d
/sbin/ifconfig lo 127.0.0.1
/bin/hostname garfield.inodes.ch
/bin/mount -n -t proc /proc /proc # Otherwise fsck can't use labels
/bin/mount -n -o remount,ro / # Make sure root is ro for fsck
/sbin/fsck -a -A -C -T
if [ $? -gt 1 ]; then
 /sbin/sulogin
 /sbin/reboot -f
fi
/bin/mount -n -o remount,rw / || /sbin/sulogin
ln -sf /proc/mounts /etc/mtab
ln -sf /boot/System.map-`uname -r` /boot/System.map
/bin/mount -n -a
/sbin/swapon -a
touch /var/run/utmp
chmod 644 /var/run/utmp
rm /boot/System.map
ln -s /boot/System.map-`uname -r` /boot/System.map
EOF
# cat >rc.single << "EOF"
#!/bin/bash -v
EOF
# cat >rc.2 << "EOF"
#!/bin/bash -v
cp -a /etc/daemons/* /service
( cd /service; svscan & )
ifconfig wvlan0 inet 10.0.16.1 netmask 255.255.255.0
route add default gw 10.0.16.2
EOF
# cat >rc.3 << "EOF"
#!/bin/bash -v
echo "This runlevel is not (yet) used."
EOF
# cp -i rc.3 rc.4
# cp -i rc.3 rc.5
# cat >rc.shutdown << "EOF"
/sbin/hwclock -u --systohc
/sbin/ifconfig eth0 down
/sbin/ifconfig lo down
/sbin/killall5 -15
/sbin/killall5 -9
/sbin/swapoff -a
/bin/umount -n -a -r
EOF
# cat >rc.halt << "EOF"
#!/bin/bash -v
. /etc/rc.d/rc.shutdown
/sbin/halt -d -f -i -p
EOF
# cat >rc.reboot << "EOF"
#!/bin/bash -v
. /etc/rc.d/rc.shutdown
/sbin/reboot -d -f -i
EOF
# chmod 754 *
# chmod 644 rc.shutdown

PCMCIA cardmgr

# mkdir -p /etc/daemons/cardmgr/log
# cd /etc/daemons/cardmgr
# cat >run << "EOF"
#!/bin/sh
/sbin/insmod /lib/modules/`uname -r`/pcmcia_core.o
/sbin/insmod /lib/modules/`uname -r`/i82365.o
/sbin/insmod /lib/modules/`uname -r`/ds.o
touch /var/run/pcmcia-scheme
exec /usr/bin/fghack /sbin/cardmgr -v -s /var/run/pcmcia_stab 2>&1
EOF
# cat >log/run << "EOF"
#!/bin/sh
exec /usr/bin/multilog t /var/log/cardmgr
EOF
# chmod +t .
# chmod 755 run log/run
# mkdir /var/log/cardmgr

syslog

# mkdir -p /etc/daemons/syslog/log
# cd /etc/daemons/syslog
# cat >run << "EOF"
#!/bin/sh
exec /usr/bin/read_syslog 2>&1
EOF
# cat >log/run << "EOF"
#!/bin/sh
exec /usr/bin/multilog t /var/log/syslog
EOF
# chmod +t .
# chmod 755 run log/run
# mkdir /var/log/syslog

klog

# mkdir /etc/daemons/klog
# cd /etc/daemons/klog
# cat >run << "EOF"
#!/bin/sh
exec /usr/bin/multilog t /var/log/klog </proc/kmsg
EOF
# chmod 755 run
# mkdir /var/log/klog
# mkdir /service
# cat >/etc/fstab << "EOF"
LABEL=lfs / ext2 defaults 1 1
/dev/ide/host0/bus0/target0/lun0/part6 swap swap defaults 0 0
proc /proc proc defaults 0 0
tmpfs /service tmpfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/lock tmpfs defaults 0 0
tmpfs /var/run tmpfs defaults 0 0
EOF

linux kernel

lilo.conf is set to install itself only in the boot record of the LFS partition, and not in the master boot record. This, because I use xosl as master boot loader.

# su - claudio
$ cd /var/src/linux/linux-2.4.4
$ make mrproper
$ make menuconfig
$ sed 's/^EXTRAVERSION =.*$/EXTRAVERSION = _lfs1/' Makefile > Makefile~
$ mv Makefile~ Makefile
$ make dep
$ make bzImage
$ make modules
$ exit
# cd /var/src/linux/linux-2.4.4
# make modules_install
# cp -i arch/i386/boot/bzImage /boot/vmlinuz-2.4.4_lfs1
# cp -i System.map /boot/System.map-2.4.4_lfs1
# cp -i .config /boot/config-2.4.4_lfs1
# cat > /etc/lilo.conf << "EOF"
boot=/dev/hda10
map=/boot/map
install=/boot/boot.b
timeout=100
delay=100
prompt
lba32
default=linux

image=/boot/vmlinuz-2.4.4_lfs1
 label=linux
 read-only
 root=/dev/hda10
 vga=2
 append="devfs=mount"

EOF
# /sbin/lilo
# exit
# umount $LFS/proc
# umount $LFS
# init 6