Basis-Build - Teil 1+2

bitmuncher

Moderator
Da architect seine Toolchain schon fertig hat, hier schonmal der erste Teil des Basis-Builds. Ich möchte aber darauf hinweisen, dass es evtl. noch Änderungen bezüglich der Patches, Configure- und Compiler-Parameter usw. geben kann, wenn sich im weiteren Build noch Fehler aufzeigen oder das System nach dem Build nicht wie erwartet funktioniert.

Die Fortsetzung gibt es dann am WE.

Nachdem man wie unter Nach dem Server-Crash... beschrieben die Toolchain gebaut und in diese chrootet hat, wird zuerstmal die Standard-Ordnerstruktur eines Linux-Systems erzeugt. In der Chroot-Umgebung werden dafür folgende Befehle verwendet:

Code:
mkdir -p /{bin,boot,etc/opt,home,lib,mnt,opt}
mkdir -p /{media/{floppy,cdrom},sbin,srv,var}
install -d -m 0750 /root
install -d -m 1777 /tmp /var/tmp
mkdir -p /usr/{,local/}{bin,include,lib,sbin,src}
mkdir -p /usr/{,local/}share/{doc,info,locale,man}
mkdir  /usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -p /usr/{,local/}share/man/man{1..8}
for dir in /usr /usr/local; do
  ln -s share/{man,doc,info} $dir
done
mkdir /var/{lock,log,mail,run,spool}
mkdir -p /var/{opt,cache,lib/{misc,locate},local}

Ausserdem sollten wir ein paar notwendige Tools und Libs im Zielsystem verfügbar machen. Später werden sie ersetzt.

Code:
ln -sv /tools/bin/{bash,cat,echo,grep,pwd,stty} /bin
ln -sv /tools/bin/perl /usr/bin
ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib
ln -sv bash /bin/sh

Dann brauchen wir noch eine password- und eine group-Datei und die mtab, damit grundlegende Rechte-Verteilung funktioniert:

Code:
cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
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:
uucp:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
mail:x:34:
nogroup:x:99:
EOF
touch /etc/mtab

Damit die Auflösung von User- und Gruppennamen korrekt funktioniert, wird eine neue Shell gestartet:
Code:
exec /tools/bin/bash --login +h

login, agetty und init brauchen ein paar Standard-Logs:

Code:
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

Nun kann das eigentliche Kompilieren beginnen. Ich habe die folgenden Anweisungen für die Pakete auf das eigentliche Kompilieren beschränkt. Das Runterladen und Entpacken der Sources, die unter http://www.habolinux.de/sources/ zu finden sind, sollte bis zur Installation von tar und wget im Host-System gemacht werden. Danach kann es auch innerhalb der chroot-Umgebung geschehen. Runtergeladen werden Pakete mittels

Code:
wget http://www.habolinux.de/sources/<paketname>.tar.gz

Entpackt wird dann mit

Code:
tar -xzf <paketname>.tar.gz

wodurch ein Ordner '<paketname>' entsteht, der die Sources enthält.

Bevor man mit dem Build beginnt, sollte der Inhalt des sources-Ordner gelöscht werden, in dem sich ja die kompilierten Sources der Toolchain befinden.

Bei den hier aufgeführten Befehlen gehe ich also davon aus, dass man sich im entpackten Source-Ordner in der chroot-Umgebung befindet und dass diese im sources-Ordner abgelegt sind, der im Host-System unter /hl/sources und in der chroot-Umgebung unter /sources verfügbar ist.

Linux API Headers (Paket: kernel.tar.gz)
Code:
make mrproper
make headers_check
make INSTALL_HDR_PATH=dest headers_install
cp -r dest/include/* /usr/include

Man-Pages (Paket: man-pages.tar.gz)
Code:
make install

GlibC (Paket: glibc.tar.gz)
Code:
sed -i '/vi_VN.TCVN/d' localedata/SUPPORTED
sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in
cd /sources
mkdir glibc-build
cd glibc-build
echo "CFLAGS += -march=i486 -mtune=native" > configparms
../glibc/configure --prefix=/usr --disable-profile --enable-add-ons --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc
make
cp ../glibc/iconvdata/gconv-modules iconvdata
touch /etc/ld.so.conf
make install
mkdir -p /usr/lib/locale
make localedata/install-locales
cat > /etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf

passwd: files
group: files
shadow: files

hosts: files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

# End /etc/nsswitch.conf
EOF
tzselect
cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf

/usr/local/lib
/opt/lib

# End /etc/ld.so.conf
EOF

Toolchain "aufräumen"
Code:
mv -v /tools/bin/{ld,ld-old}
mv /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}
mv /tools/bin/{ld-new,ld}
ln -s /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld
gcc -dumpspecs | sed -e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g' -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' -e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' > `dirname $(gcc --print-libgcc-file-name)`/specs

Binutils (Paket: binutils.tar.gz)
Code:
mkdir ../binutils-build
cd ../binutils-build
../binutils/configure --prefix=/usr --enable-shared
make tooldir=/usr
make tooldir=/usr install
cp ../binutils/include/libiberty.h /usr/include

GMP (Paket: gmp.tar.gz)
Code:
./configure --prefix=/usr --enable-cxx --enable-mpbsd
make
make install
mkdir /usr/share/doc/gmp-4.3.0
cp doc/{isa_abi_headache,configuration} doc/*.html /usr/share/doc/gmp-4.3.0

MPFR (Paket: mpfr.tar.gz)
Code:
./configure --prefix=/usr --enable-thread-safe
make
make install

Tar (Paket: tar.tar.gz)
Code:
./configure --prefix=/usr --bindir=/bin --libexecdir=/usr/sbin
make
make install

GCC (Paket: gcc.tar.gz)
Code:
sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
sed -i 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in
sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
mkdir ../gcc-build
cd ../gcc-build
../gcc/configure --prefix=/usr --libexecdir=/usr/lib --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-languages=c,c++ --disable-bootstrap
make
make -k check
../gcc/contrib/test_summary
make install
ln -s ../usr/bin/cpp /lib
ln -s gcc /usr/bin/cc
echo 'main(){}' > dummy.c
cc dummy.c -v -Wl,--verbose &> dummy.log
readelf -l a.out | grep ': /lib'
grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log
grep -B4 '^ /usr/include' dummy.log
grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
grep "/lib/libc.so.6 " dummy.log
grep found dummy.log
rm dummy.c a.out dummy.log
Wie der korrekte Output für die grep-Befehle auszusehen hat, kann man im LFS-Handbuch nachlesen.

DB4 (Paket: db4.tar.gz)
Code:
patch -Np1 -i patches/db-4.7.25-upstream_fixes-1.patch
cd build_unix
../dist/configure --prefix=/usr --enable-compat185 --enable-cxx
make
make docdir=/usr/share/doc/db-4.7.25 install
chown -Rv root:root /usr/share/doc/db-4.7.25

Sed (Paket: sed.tar.gz)
Code:
./configure --prefix=/usr --bindir=/bin --enable-html
make
make install

e2fsprogs (Paket: e2fsprogs.tar.gz)
Code:
sed -i 's@/bin/rm@/tools&@' lib/blkid/test_probe.in
mkdir build
cd build
../configure --prefix=/usr --with-root-prefix="" --enable-elf-shlibs
make
make install
make install-libs
chmod -v u+w /usr/lib/{libblkid,libcom_err,libe2p,libext2fs,libss,libuuid}.a
gunzip -v /usr/share/info/libext2fs.info.gz
install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info
makeinfo -o      doc/com_err.info ../lib/et/com_err.texinfo
install -v -m644 doc/com_err.info /usr/share/info
install-info --dir-file=/usr/share/info/dir /usr/share/info/com_err.info
install -v -m644 -D ../doc/libblkid.txt /usr/share/doc/e2fsprogs-1.41.5/libblkid.txt

Coreutils (coreutils.tar.gz)
Code:
./configure --prefix=/usr --enable-install-program=hostname --enable-no-install-program=kill,uptime
make
make NON_ROOT_USERNAME=nobody check-root
echo "dummy:x:1000:nobody" >> /etc/group
chown -Rv nobody config.log {gnulib-tests,lib,src}/.deps
sed -i '/dummy/d' /etc/group
make install
mv /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
mv /usr/bin/{false,hostname,ln,ls,mkdir,mknod,mv,pwd,readlink,rm} /bin
mv /usr/bin/{rmdir,stty,sync,true,uname} /bin
mv /usr/bin/chroot /usr/sbin
mv /usr/bin/{head,sleep,nice} /bin

M4 (Paket: m4.tar.gz)
Code:
./configure --prefix=/usr --enable-threads
make
make check
make install

Bison (Paket: bison.tar.gz)
Code:
./configure --prefix=/usr
echo '#define YYENABLE_NLS 1' >> config.h
make
make check
make install

Ncurses (Paket: ncurses.tar.gz)
Code:
./configure --prefix=/usr --with-shared --without-debug --enable-widec
make
make install
chmod 644 /usr/lib/libncurses++w.a
mv /usr/lib/libncursesw.so.5* /lib
ln -sf ../../lib/libncursesw.so.5 /usr/lib/libncursesw.so
for lib in curses ncurses form panel menu ; do \
    rm -vf /usr/lib/lib${lib}.so ; \
    echo "INPUT(-l${lib}w)" >/usr/lib/lib${lib}.so ; \
    ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a ; \
done
ln -sf libncurses++w.a /usr/lib/libncurses++.a
rm -f /usr/lib/libcursesw.so
echo "INPUT(-lncursesw)" >/usr/lib/libcursesw.so
ln -sf libncurses.so /usr/lib/libcurses.so
ln -sf libncursesw.a /usr/lib/libcursesw.a
ln -sf libncurses.a /usr/lib/libcurses.a
mkdir /usr/share/doc/ncurses-5.7
cp -R doc/* /usr/share/doc/ncurses-5.7
make distclean
./configure --prefix=/usr --with-shared --without-normal --without-debug --without-cxx-binding
make sources libs
cp -av lib/lib*.so.5* /usr/lib

ProcPS (Paket: procps.tar.gz
Code:
make
make install

Libtool (Paket: libtool.tar.gz)
Code:
./configure --prefix=/usr
make
make install

Zlib (Paket: zlib.tar.gz)
Code:
./configure --prefix=/usr --shared --libdir=/lib
make
make install
rm /lib/libz.so
ln -sf ../../lib/libz.so.1.2.3 /usr/lib/libz.so
make clean
./configure --prefix=/usr
make
make install
chmod -v 644 /usr/lib/libz.a

Perl (Paket: perl.tar.gz)
Code:
echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
patch -Np1 -i patches/perl-5.10.0-consolidated-1.patch
sed -i -e "s|BUILD_ZLIB\s*= True|BUILD_ZLIB = False|"           \
	-e "s|INCLUDE\s*= ./zlib-src|INCLUDE    = /usr/include|" \
	-e "s|LIB\s*= ./zlib-src|LIB        = /usr/lib|"         \
      ext/Compress/Raw/Zlib/config.in
sh Configure -des -Dprefix=/usr -Dvendorprefix=/usr -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dpager="/usr/bin/less -isR"
make
make test
make install

Readline (Paket: readline.tar.gz)
Code:
sed -i '/MV.*old/d' Makefile.in
sed -i '/{OLDSUFF}/c:' support/shlib-install
./configure --prefix=/usr --libdir=/lib
make SHLIB_LIBS=-lncurses
make install
mv -v /lib/lib{readline,history}.a /usr/lib
rm -v /lib/lib{readline,history}.so
ln -sfv ../../lib/libreadline.so.6 /usr/lib/libreadline.so
ln -sfv ../../lib/libhistory.so.6 /usr/lib/libhistory.so
mkdir /usr/share/doc/readline-6.0
install -v -m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline-6.0

Autoconf (Paket: autoconf.tar.gz)
Code:
./configure --prefix=/usr
make
make install

Automake (Paket: automake.tar.gz)
Code:
./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.10.2
make
make install

Bash (Paket: bash-3.2.48.tar.gz)
Code:
./configure --prefix=/usr --bindir=/bin --without-bash-malloc --with-installed-readline ac_cv_func_working_mktime=yes
make
sed -i 's/LANG/LC_ALL/' tests/intl.tests
sed -i 's@tests@& </dev/tty@' tests/run-test
chown -Rv nobody ./
su-tools nobody -s /bin/bash -c "make tests"
make install
exec /bin/bash --login +h

Bzip2 (Paket: bzip2.tar.gz)
Code:
patch -Np1 -i patches/bzip2-1.0.5-install_docs-1.patch
make -f Makefile-libbz2_so
make clean
make PREFIX=/usr install
cp -v bzip2-shared /bin/bzip2
cp -av libbz2.so* /lib
ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
rm -v /usr/bin/{bunzip2,bzcat,bzip2}
ln -sv bzip2 /bin/bunzip2
ln -sv bzip2 /bin/bzcat

Diffutils (Paket: diffutils.tar.gz)
Code:
patch -Np1 -i patches/diffutils-2.8.1-i18n-1.patch
touch man/diff.1
./configure --prefix=/usr
make
make install

File (Paket: file.tar.gz)
Code:
./configure --prefix=/usr
make
make install

Gawk
Code:
./configure --prefix=/usr --libexecdir=/usr/lib ac_cv_func_working_mktime=yes
make
make install
mkdir /usr/share/doc/gawk-3.1.6
cp doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk-3.1.6

Findutils
Code:
./configure --prefix=/usr --libexecdir=/usr/lib/findutils --localstatedir=/var/lib/locate
make
make check
make install
mv /usr/bin/find /bin
sed -i -e 's/find:=${BINDIR}/find:=\/bin/' /usr/bin/updatedb

Flex (Paket: flex.tar.gz)
Code:
./configure --prefix=/usr
make
make check
make install
ln -sv libfl.a /usr/lib/libl.a
cat > /usr/bin/lex << "EOF"
#!/bin/sh
# Begin /usr/bin/lex

exec /usr/bin/flex -l "$@"

# End /usr/bin/lex
EOF
chmod 755 /usr/bin/lex
mkdir /usr/share/doc/flex-2.5.35
cp doc/flex.pdf /usr/share/doc/flex-2.5.35

Grub (Paket: grub.tar.gz)
Code:
patch -Np1 -i patches/grub-0.97-disk_geometry-1.patch
patch -Np1 -i patches/grub-0.97-256byte_inode-1.patch
./configure --prefix=/usr
make
make install
mkdir /boot/grub
cp /usr/lib/grub/i386-pc/stage{1,2} /boot/grub

Gettext (Paket: gettext.tar.gz)
Code:
./configure --prefix=/usr --docdir=/usr/share/doc/gettext-0.17
make
make check
make install
 

moveax1

New member
bis auf gettext bin ich erstmal durch.

Da ist bei mir noch der Wurm drin aber ich schau erstmal ob ich es selber finde.

// EDIT: Nach einem erneuten kompilieren mit neu entpackten Sources hat alles anstandslos funktioniert
 

bitmuncher

Moderator
Basis-Build - Teil 2

Grep (Paket: grep.tar.gz)
Code:
./configure --prefix=/usr --bindir=/bin --without-included-regex
make
make install

Groff (Paket: groff-1.20.tar.gz)
Code:
sed -i -e 's/2010/002D/' -e 's/2212/002D/' -e 's/2018/0060/' -e 's/2019/0027/' font/devutf8/R.proto
PAGE=a4 ./configure --prefix=/usr
make
ln -s eqn /usr/bin/geqn
ln -s tbl /usr/bin/gtbl

Eine Anmerkung zu groff: Da derzeit noch keine endgültigen Berichte darüber vorliegen inwiefern sich die Änderungen in groff 1.20 auf ein System auswirken, stehen unter http://www.habolinux.de/sources die Versionen 1.18 und 1.20 zur Verfügung. Für eigene Tests fehlt mir momentan die Zeit. Die in den Tarballs enthaltenen Ordner heissen nicht 'groff' sondern '1.20' bzw. '1.18'. Die Version 1.20 ist die von uns derzeit eingesetzte. Sollten sich Probleme aufzeigen, werden wir ggf. ein Downgrade auf 1.18 machen. Beim Build bereitet die 1.20 jedenfalls keine Probleme.

Gzip (Paket: gzip.tar.gz)
Code:
sed -i 's/futimens/gl_&/' gzip.c lib/utimens.{c,h}
./configure --prefix=/usr --bindir=/bin
make
make check
make install
mv /bin/{gzexe,uncompress,zcmp,zdiff,zegrep} /usr/bin
mv /bin/{zfgrep,zforce,zgrep,zless,zmore,znew} /usr/bin

Inetutils (Paket: inetutils.tar.gz)
Code:
./configure --prefix=/usr --libexecdir=/usr/sbin --sysconfdir=/etc --localstatedir=/var --disable-ifconfig --disable-logger --disable-syslogd --disable-whois --disable-servers
make
make install
mv /usr/bin/ping /bin

Iproute2 (Paket: iproute2.tar.gz)
Code:
make DESTDIR= SBINDIR=/sbin
make DESTDIR= SBINDIR=/sbin MANDIR=/usr/share/man DOCDIR=/usr/share/doc/iproute2-2.6.29 install
mv /sbin/arpd /usr/sbin

Kbd (Paket: kbd.tar.gz)
Code:
./configure --prefix=/usr --datadir=/lib/kbd
make
make install
mv /usr/bin/{kbd_mode,loadkeys,openvt,setfont} /bin
mkdir /usr/share/doc/kbd-1.15
cp -R doc/* /usr/share/doc/kbd-1.15

Less (Paket: less.tar.gz)
Code:
./configure --prefix=/usr --sysconfdir=/etc
make
make install

Make (Paket: make.tar.gz)
Code:
./configure --prefix=/usr
make
make check
make install

Man-DB (Paket: man-db.tar.gz)
Code:
sed -i -e '\%\t/usr/man%d' -e '\%\t/usr/local/man%d' src/man_db.conf.in
./configure --prefix=/usr --libexecdir=/usr/lib --sysconfdir=/etc --disable-setuid --enable-mb-groff --with-browser=/usr/bin/lynx --with-col=/usr/bin/col --with-vgrind=/usr/bin/vgrind --with-grap=/usr/bin/grap
make
make install
cat >> convert-mans << "EOF"
#!/bin/sh -e
FROM="$1"
TO="$2"
shift ; shift
while [ $# -gt 0 ]
do
  FILE="$1"
  shift
  iconv -f "$FROM" -t "$TO" "$FILE" >.tmp.iconv
  mv .tmp.iconv "$FILE"
done
EOF
install -m755 convert-mans  /usr/bin

Module-Init-Tools (Paket: module-init-tools.tar.gz)
Code:
./configure --prefix=/ --enable-zlib --mandir=/usr/share/man
make
make INSTALL=install install

Patch (Paket: patch.tar.gz)
Code:
./configure --prefix=/usr
make
make install

Psmisc (Paket: psmisc.tar.gz)
Code:
./configure --prefix=/usr --exec-prefix=""
make
make install
mv /bin/pstree* /usr/bin
ln -s killall /bin/pidof

Shadow:
Code:
sed -i 's/groups$(EXEEXT) //' src/Makefile.in
find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \;
sed -i -e 's/ ko//' -e 's/ zh_CN zh_TW//' man/Makefile.in
for i in de es fi fr id it pt_BR; do
    convert-mans UTF-8 ISO-8859-1 man/${i}/*.?
done
for i in cs hu pl; do
    convert-mans UTF-8 ISO-8859-2 man/${i}/*.?
done
convert-mans UTF-8 EUC-JP man/ja/*.?
convert-mans UTF-8 KOI8-R man/ru/*.?
convert-mans UTF-8 ISO-8859-9 man/tr/*.?
sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD MD5@' -e 's@/var/spool/mail@/var/mail@' etc/login.defs
./configure --sysconfdir=/etc
make
make install
pwconv
grpconv
sed -i 's/yes/no/' /etc/default/useradd
passwd root

Sysklogd (Paket: sysklogd.tar.gz)
Code:
make
make install
cat > /etc/syslog.conf << "EOF"
auth,authpriv.* -/var/log/auth.log
*.*;auth,authpriv.none -/var/log/sys.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
*.emerg *
# End /etc/syslog.conf
EOF

Sysvinit (Paket: sysvinit.tar.gz)
Code:
sed -i 's@Sending processes@& configured via /etc/inittab@g' src/init.c
sed -i -e 's/utmpdump wall/utmpdump/' -e 's/mountpoint.1 wall.1/mountpoint.1/' src/Makefile
make -C src
make -C src install
cat > /etc/inittab << "EOF"
# Begin /etc/inittab

id:3:initdefault:

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

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

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

su:S016:once:/sbin/sulogin

1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600

# End /etc/inittab
EOF

Tar (Paket: tar.tar.gz)
Code:
./configure --prefix=/usr --bindir=/bin --libexecdir=/usr/sbin
make
make check
make install

Texinfo (Paket: texinfo.tar.gz)
Code:
./configure --prefix=/usr
make
make install

Udev (Paket: udev.tar.gz)
Code:
install -dv /lib/{firmware,udev/devices/{pts,shm}}
mknod -m0666 /lib/udev/devices/null c 1 3
mknod -m0600 /lib/udev/devices/kmsg c 1 11
ln -s /proc/self/fd /lib/udev/devices/fd
ln -s /proc/self/fd/0 /lib/udev/devices/stdin
ln -s /proc/self/fd/1 /lib/udev/devices/stdout
ln -s /proc/self/fd/2 /lib/udev/devices/stderr
ln -s /proc/kcore /lib/udev/devices/core
./configure --prefix=/usr --exec-prefix= --sysconfdir=/etc
make
make install
install -m644 -v rules/packages/64-*.rules /lib/udev/rules.d/
install -m644 -v rules/packages/40-pilot-links.rules /lib/udev/rules.d/
cd udev-config
make install 
make install-doc
make install-extra-doc
cd ..
install -m644 -v -D docs/writing_udev_rules/index.html /usr/share/doc/udev-142/index.html

Pkg-Config (Paket: pkg-config.tar.gz)
Code:
./configure --prefix=/usr
make
make install

Util-Linux-NG (Paket: util-linux-ng.tar.gz)
Code:
sed -e 's@etc/adjtime@var/lib/hwclock/adjtime@g' -i $(grep -rl '/etc/adjtime' .)
mkdir -p /var/lib/hwclock
./configure --enable-arch --enable-partx --enable-write
make
make install

Vim (Paket: vim.tar.gz)
Code:
patch -Np1 -i patches/vim-7.2-fixes-4.patch
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h
./configure --prefix=/usr --enable-multibyte
make
make test
make install
ln -s vim /usr/bin/vi
for L in  /usr/share/man/{,*/}man1/vim.1; do
    ln -sv vim.1 $(dirname $L)/vi.1
done
ln -s ../vim/vim72/doc /usr/share/doc/vim-7.2
cat > /etc/vimrc << "EOF"
" Begin /etc/vimrc

set nocompatible
set backspace=2
syntax on
if (&term == "iterm") || (&term == "putty")
  set background=dark
endif

" End /etc/vimrc
EOF

Diverse Nacharbeiten:
Code:
logout
chroot /hl /tools/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin /tools/bin/bash --login
/tools/bin/find /{,usr/}{bin,lib,sbin} -type f -exec /tools/bin/strip --strip-debug '{}' ';'
logout
chroot /hl /usr/bin/env -i HOME=/root TERM="$TERM" PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash --login
Ab diesem Zeitpunkt verwendet man nur noch 'chroot /hl /usr/bin/env -i HOME=/root TERM="$TERM" PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash --login' um die chroot-Umgebung zu betreten.

Code:
cat > /etc/sysconfig/clock << "EOF"
# Begin /etc/sysconfig/clock

UTC=1

# End /etc/sysconfig/clock
EOF
cat > /etc/sysconfig/console << "EOF"
# Begin /etc/sysconfig/console

KEYMAP="de-latin1"
KEYMAP_CORRECTIONS="euro2"
FONT="lat0-16 -m 8859-15"

# End /etc/sysconfig/console
EOF

cat > /etc/inputrc << "EOF"
# Begin /etc/inputrc
# Modified by Chris Lynn <roryo@roryo.dynup.net>

# Allow the command prompt to wrap to the next 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

# All of the following map the escape sequence of the value
# contained in 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

cat > /etc/profile << "EOF"
export LANG=de_DE@euro
EOF

Ab diesem Punkt sollte man der LFS-Anleitung (ab Kapitel 7.10 - "Configuring the localnet Script") bis zum Reboot des Systems folgen, da Netzwerkeinstellungen usw. ja recht individuelle Dinge sind. Die Kernel-Konfiguration kann man ggf. von einem anderen System übernehmen, wenn man möchte. Ich arbeite gerade an einer Config, die auf den meisten Geräten funktionieren dürfte. Sobald diese fertig ist, packe ich sie auf den Server. Später müssen die hier erstellten Konfigurationen und Skripte natürlich vom Installer bzw. einem Paket angelegt werden. Welche Default-Einstellungen wir für bestimmte Dinge nehmen sollten, müssen wir aber an anderer Stelle nochmal durchsprechen. Die hier von mir genutzten Einstellungen sind erstmal eine minimale Basis, die wir auf jeden Fall ausbauen sollten. Gerade die Konfiguration der Shell und die sysconfig-Einstellungen sind nicht unbedingt optimal.

Wenn das System dann bootfähig ist, geht es weiter mit der Integration von apt und der Umsetzung sämtlicher Pakete als Debs. Eine entsprechend e Anleitung dafür ist in Arbeit. Allerdings kann ich noch nicht genau sagen, wann ich diese fertig haben werde.
 
Oben