diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..772f3da --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.iso +toolchain/log +toolchain/src diff --git a/01-toolchain b/01-toolchain new file mode 100755 index 0000000..86d4993 --- /dev/null +++ b/01-toolchain @@ -0,0 +1,25 @@ +#!/bin/bash -e + +source $(dirname $0)/toolchain/functions + +for script in $(ls toolchain | grep ^[0-9]); do + if [ "$1" = "fetch" ]; then + $(dirname $0)/toolchain/$script "$1" + elif [ -f /tools/"$script" ]; then + echo "--- $script skipped ---" + else + echo "*** $script ***" + $(dirname $0)/toolchain/$script + echo; echo "*** $script done ***"; echo + [ "$1" = $(echo $script | cut -d - -f1) ] && exit + fi +done + +[ "$1" = "fetch" ] && exit 0 + +sudo chown -Rv 0:0 $LFS + +echo +echo "**************************************************" +echo "********* Toolchain build complete *********" +echo "**************************************************" diff --git a/02-lfs-base b/02-lfs-base new file mode 100755 index 0000000..f026dd6 --- /dev/null +++ b/02-lfs-base @@ -0,0 +1,194 @@ +#!/bin/bash + +LFS=/mnt/lfs + +lfs_dirs() { + mkdir -pv $LFS/{dev,proc,sys,run} + mknod -m 600 $LFS/dev/console c 5 1 + mknod -m 666 $LFS/dev/null c 1 3 + + mkdir -pv $LFS/{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt} + mkdir -pv $LFS/{media/{floppy,cdrom},sbin,srv,var} + install -dv -m 0750 $LFS/root + install -dv -m 1777 $LFS/tmp $LFS/var/tmp + mkdir -pv $LFS/usr/{,local/}{bin,include,lib,sbin,src} + mkdir -pv $LFS/usr/{,local/}share/{color,dict,doc,info,locale,man} + mkdir -v $LFS/usr/{,local/}share/{misc,terminfo,zoneinfo} + mkdir -v $LFS/usr/libexec + mkdir -pv $LFS/usr/{,local/}share/man/man{1..8} + + case $(uname -m) in + x86_64) mkdir -v $LFS/lib64 ;; + esac + + mkdir -v $LFS/var/{log,mail,spool} + ln -sv /run $LFS/var/run + ln -sv /run/lock $LFS/var/lock + mkdir -pv $LFS/var/{opt,cache,lib/{color,misc,locate},local} + + ln -sv /tools/bin/{bash,cat,dd,echo,ln,pwd,rm,stty} $LFS/bin + ln -sv /tools/bin/{env,install,perl} $LFS/usr/bin + ln -sv /tools/lib/libgcc_s.so{,.1} $LFS/usr/lib + ln -sv /tools/lib/libstdc++.{a,so{,.6}} $LFS/usr/lib + for lib in blkid lzma mount uuid + do + ln -sv /tools/lib/lib$lib.so* $LFS/usr/lib + done + ln -svf /tools/include/blkid $LFS/usr/include + ln -svf /tools/include/libmount $LFS/usr/include + ln -svf /tools/include/uuid $LFS/usr/include + install -vdm755 $LFS/usr/lib/pkgconfig + for pc in blkid mount uuid + do + sed 's@tools@usr@g' /tools/lib/pkgconfig/${pc}.pc \ + > $LFS/usr/lib/pkgconfig/${pc}.pc + done + ln -sv bash $LFS/bin/sh + + ln -sv /proc/self/mounts $LFS/etc/mtab + + cat > $LFS/etc/passwd << "EOF" +root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/dev/null:/bin/false +daemon:x:6:6:Daemon User:/dev/null:/bin/false +messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false +nobody:x:99:99:Unprivileged User:/dev/null:/bin/false +EOF + + cat > $LFS/etc/group << "EOF" +root:x:0: +bin:x:1:daemon +sys:x:2: +kmem:x:3: +tape:x:4: +tty: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: +cdrom:x:15: +adm:x:16: +messagebus:x:18: +systemd-journal:x:23: +input:x:24: +mail:x:34: +nogroup:x:99: +users:x:999: +EOF + + touch $LFS/var/log/{btmp,lastlog,faillog,wtmp} + chgrp -v utmp $LFS/var/log/lastlog + chmod -v 664 $LFS/var/log/lastlog + chmod -v 600 $LFS/var/log/btmp + + mkdir -p $LFS/etc/pkg $LFS/var/lib/pkg $LFS/var/lib/pkg/sources $LFS/usr/pkgscripts + touch $LFS/var/lib/pkg/db + [ -d toolchain/src ] && cp -Rv toolchain/src/* $LFS/var/lib/pkg/sources +} + +mount_pseudo() { + mount --bind /dev $LFS/dev + mount -t devpts devpts $LFS/dev/pts -o gid=5,mode=620 + mount -t proc proc $LFS/proc + mount -t sysfs sysfs $LFS/sys + mount -t tmpfs tmpfs $LFS/run + if [ -h $LFS/dev/shm ]; then + mkdir -p $LFS/$(readlink $LFS/dev/shm) + fi +} + +umount_pseudo() { + umount $LFS/dev/pts + umount $LFS/dev + umount $LFS/run + umount $LFS/proc + umount $LFS/sys +} + +runchroot() { + pushd $LFS &>/dev/null + mount_pseudo + cp -L /etc/resolv.conf $LFS/etc/ + chroot "$LFS" /usr/bin/env -i \ + HOME=/root TERM="$TERM" \ + PS1='(lfs chroot) \u:\w\$ ' \ + PATH=/bin:/usr/bin:/sbin:/usr/sbin \ + /bin/bash $@ + retval=$? + umount_pseudo + popd &>/dev/null + return $retval +} + +runinchroot() { + pushd $LFS &>/dev/null + mount_pseudo + cp -L /etc/resolv.conf $LFS/etc/ + chroot "$LFS" /tools/bin/env -i \ + HOME=/root \ + TERM="$TERM" \ + PS1='(lfs chroot) \u:\w\$ ' \ + PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ + /tools/bin/bash $@ + retval=$? + umount_pseudo + popd &>/dev/null + return $retval +} + +interrupted() { + die "Abort by user." +} + +die() { + [ "$@" ] && printerror $@ + umount_pseudo + exit 1 +} + +printerror() { + echo -e "ERROR: $@" +} + +trap "interrupted" SIGHUP SIGINT SIGQUIT SIGTERM + +PKGS="linux-api-headers man-pages glibc zlib file readline m4 bc binutils gmp mpfr mpc shadow gcc bzip2 +pkg-config ncurses attr acl libcap sed psmisc iana-etc bison flex grep bash libtool gdbm gperf expat inetutils perl perl-xml-parser +intltool autoconf automake xz kmod gettext libelf libffi openssl python3 ninja meson procps-ng e2fsprogs coreutils check diffutils +gawk findutils groff grub less gzip iproute2 kbd libpipeline make patch sysklogd sysvinit eudev util-linux man-db tar texinfo vim +cpio mkinitramfs linux lfs-bootscripts lfs-files libtasn1 p11-kit make-ca wget" + +EXTRA_PKGS="dhcpcd libnl wpa_supplicant" + +if [ ! -f $LFS/var/lib/pkg/db ]; then + lfs_dirs +fi + +cp lfs/pkgscripts/* $LFS/usr/pkgscripts/ +cp lfs/functions $LFS/var/lib/pkg/ +cp lfs/pkg.conf $LFS/etc/pkg/ + +for i in $PKGS; do + if [[ $(grep "^$i " $LFS/var/lib/pkg/db) ]]; then + echo "--- $i skipped ---" + else + echo "*** $i ***" + runinchroot /usr/pkgscripts/$i || die "$i build error!" + fi +done + +for i in $EXTRA_PKGS; do + if [[ $(grep "^$i " $LFS/var/lib/pkg/db) ]]; then + echo "--- $i skipped ---" + else + echo "*** $i ***" + runchroot /usr/pkgscripts/$i || die "$i build error!" + fi +done + +exit 0 diff --git a/03-mklfsiso b/03-mklfsiso new file mode 100755 index 0000000..98c2f70 --- /dev/null +++ b/03-mklfsiso @@ -0,0 +1,54 @@ +#!/bin/bash + +trap "exit 1" SIGHUP SIGINT SIGQUIT SIGTERM + +LFSVERSIOM=8.3 + +CWD=$PWD +WDIR=/tmp/lfsiso +ISOLINUXDIR=$CWD/livecd/isolinux +DISTRONAME="LFS" +LABEL=LfsLiveCD +LFS=/mnt/lfs +OUTPUT=lfs-$LFSVERSIOM-livecd.iso + +isolinux_files="chain.c32 isolinux.bin ldlinux.c32 libutil.c32 reboot.c32 menu.c32 +isohdpfx.bin isolinux.cfg libcom32.c32 poweroff.c32" + +rm -fr $WDIR +mkdir -p $WDIR + +# prepare isolinux in working dir +mkdir -p $WDIR/{filesystem,isolinux,boot} +for file in $isolinux_files; do + cp $ISOLINUXDIR/$file $WDIR/isolinux +done +echo "$DISTRONAME" > $WDIR/isolinux/venomlive +[ -d livecd/virootfs ] && cp -aR livecd/virootfs $WDIR + +cp $LFS/boot/vmlinuz-*-lfs $WDIR/boot/vmlinuz +cp $LFS/boot/initrd-*-lfs.img $WDIR/boot/initrd + +mksquashfs $LFS $WDIR/filesystem/root.sfs \ + -b 1048576 -comp xz -Xdict-size 100% \ + -e $LFS/tools/ \ + -e $LFS/var/lib/pkg/sources/* \ + -e $LFS/var/lib/pkg/work/* \ + -e $LFS/tmp/* + +rm -f $OUTPUT +xorriso -as mkisofs \ + -r -J -joliet-long \ + -l -cache-inodes \ + -isohybrid-mbr $ISOLINUXDIR/isohdpfx.bin \ + -partition_offset 16 \ + -volid "$LABEL" \ + -b isolinux/isolinux.bin \ + -c isolinux/boot.cat \ + -no-emul-boot \ + -boot-load-size 4 \ + -boot-info-table \ + -o $OUTPUT \ + $WDIR + +rm -fr $WDIR diff --git a/lfs/functions b/lfs/functions new file mode 100755 index 0000000..266e598 --- /dev/null +++ b/lfs/functions @@ -0,0 +1,30 @@ +#!/bin/bash + +mkdir -p $SOURCE_DIR $WORK_DIR $LOG_DIR +touch /var/lib/pkg/db + +export CFLAGS CXXFLAGS MAKEFLAGS + +fetch() { + filename=$(basename $1) + if [ -f $SOURCE_DIR/$filename ]; then + return 0 + else + if [ -f $SOURCE_DIR/$filename.part ]; then + wget -c --output-document=$SOURCE_DIR/$filename.part $1 + else + wget --output-document=$SOURCE_DIR/$filename.part $1 + fi + if [ $? = 0 ]; then + mv $SOURCE_DIR/$filename.part $SOURCE_DIR/$filename + else + return 1 + fi + fi +} + +registerpkg() { + sed "/^$1 /d" -i /var/lib/pkg/db + echo "$1 $2" >> /var/lib/pkg/db + echo "::: $1 $2 installed :::" +} diff --git a/lfs/pkg.conf b/lfs/pkg.conf new file mode 100755 index 0000000..e8e291c --- /dev/null +++ b/lfs/pkg.conf @@ -0,0 +1,7 @@ +CFLAGS="-O2 -march=x86-64 -pipe" +CXXFLAGS="${CFLAGS}" +MAKEFLAGS="-j$(nproc)" + +SOURCE_DIR="/var/lib/pkg/sources" +WORK_DIR="/var/lib/pkg/work" +LOG_DIR="/var/lib/pkg/log" diff --git a/lfs/pkgscripts/acl b/lfs/pkgscripts/acl new file mode 100755 index 0000000..47eca74 --- /dev/null +++ b/lfs/pkgscripts/acl @@ -0,0 +1,38 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.2.53 +url=http://download.savannah.gnu.org/releases/acl/acl-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --bindir=/bin \ + --disable-static \ + --libexecdir=/usr/lib \ + --docdir=/usr/share/doc/acl-$version + make + make install + mv -v /usr/lib/libacl.so.* /lib + ln -sfv ../../lib/$(readlink /usr/lib/libacl.so) /usr/lib/libacl.so + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/attr b/lfs/pkgscripts/attr new file mode 100755 index 0000000..f395e82 --- /dev/null +++ b/lfs/pkgscripts/attr @@ -0,0 +1,38 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.4.48 +url=http://download.savannah.gnu.org/releases/attr/attr-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --bindir=/bin \ + --disable-static \ + --sysconfdir=/etc \ + --docdir=/usr/share/doc/attr-$version + make + make install + mv -v /usr/lib/libattr.so.* /lib + ln -sfv ../../lib/$(readlink /usr/lib/libattr.so) /usr/lib/libattr.so + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/autoconf b/lfs/pkgscripts/autoconf new file mode 100755 index 0000000..ef4b0a3 --- /dev/null +++ b/lfs/pkgscripts/autoconf @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.69 +url=http://ftp.gnu.org/gnu/autoconf/autoconf-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/automake b/lfs/pkgscripts/automake new file mode 100755 index 0000000..3a12da6 --- /dev/null +++ b/lfs/pkgscripts/automake @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.16.1 +url=http://ftp.gnu.org/gnu/automake/automake-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr --docdir=/usr/share/doc/automake-$version + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/base-lfs b/lfs/pkgscripts/base-lfs new file mode 100755 index 0000000..fc7035e --- /dev/null +++ b/lfs/pkgscripts/base-lfs @@ -0,0 +1,87 @@ +#!/tools/bin/bash -e + +#. /etc/pkg/pkg.conf +#. /var/lib/pkg/functions + +mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt} +mkdir -pv /{media/{floppy,cdrom},sbin,srv,var} +install -dv -m 0750 /root +install -dv -m 1777 /tmp /var/tmp +mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src} +mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man} +mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo} +mkdir -v /usr/libexec +mkdir -pv /usr/{,local/}share/man/man{1..8} + +case $(uname -m) in + x86_64) mkdir -v /lib64 ;; +esac + +mkdir -v /var/{log,mail,spool} +ln -sv /run /var/run +ln -sv /run/lock /var/lock +mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local} + + +ln -sv /tools/bin/{bash,cat,dd,echo,ln,pwd,rm,stty} /bin +ln -sv /tools/bin/{env,install,perl} /usr/bin +ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib +ln -sv /tools/lib/libstdc++.{a,so{,.6}} /usr/lib +for lib in blkid lzma mount uuid +do + ln -sv /tools/lib/lib$lib.so* /usr/lib +done +ln -svf /tools/include/blkid /usr/include +ln -svf /tools/include/libmount /usr/include +ln -svf /tools/include/uuid /usr/include +install -vdm755 /usr/lib/pkgconfig +for pc in blkid mount uuid +do + sed 's@tools@usr@g' /tools/lib/pkgconfig/${pc}.pc \ + > /usr/lib/pkgconfig/${pc}.pc +done +ln -sv bash /bin/sh + +ln -sv /proc/self/mounts /etc/mtab + +cat > /etc/passwd << "EOF" +root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/dev/null:/bin/false +daemon:x:6:6:Daemon User:/dev/null:/bin/false +messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false +nobody:x:99:99:Unprivileged User:/dev/null:/bin/false +EOF + +cat > /etc/group << "EOF" +root:x:0: +bin:x:1:daemon +sys:x:2: +kmem:x:3: +tape:x:4: +tty: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: +cdrom:x:15: +adm:x:16: +messagebus:x:18: +systemd-journal:x:23: +input:x:24: +mail:x:34: +nogroup:x:99: +users:x:999: +EOF + +exec /tools/bin/bash --login +h + +touch /var/log/{btmp,lastlog,faillog,wtmp} +chgrp -v utmp /var/log/lastlog +chmod -v 664 /var/log/lastlog +chmod -v 600 /var/log/btmp + diff --git a/lfs/pkgscripts/bash b/lfs/pkgscripts/bash new file mode 100755 index 0000000..d615fb6 --- /dev/null +++ b/lfs/pkgscripts/bash @@ -0,0 +1,36 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=4.4.18 +url=http://ftp.gnu.org/gnu/bash/bash-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --docdir=/usr/share/doc/bash-$version \ + --without-bash-malloc \ + --with-installed-readline + make + make install + mv -vf /usr/bin/bash /bin + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/bc b/lfs/pkgscripts/bc new file mode 100755 index 0000000..697dd7e --- /dev/null +++ b/lfs/pkgscripts/bc @@ -0,0 +1,52 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.07.1 +url=http://ftp.gnu.org/gnu/bc/bc-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + cat > bc/fix-libmath_h << "EOF" +#! /bin/bash +sed -e '1 s/^/{"/' \ + -e 's/$/",/' \ + -e '2,$ s/^/"/' \ + -e '$ d' \ + -i libmath.h + +sed -e '$ s/$/0}/' \ + -i libmath.h +EOF + + ln -sv /tools/lib/libncursesw.so.6 /usr/lib/libncursesw.so.6 + ln -sfv libncurses.so.6 /usr/lib/libncurses.so + + sed -i -e '/flex/s/as_fn_error/: ;; # &/' configure + + ./configure --prefix=/usr \ + --with-readline \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/binutils b/lfs/pkgscripts/binutils new file mode 100755 index 0000000..efdc14a --- /dev/null +++ b/lfs/pkgscripts/binutils @@ -0,0 +1,42 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.31.1 +url=http://ftp.gnu.org/gnu/binutils/binutils-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + mkdir -v build + cd build + + ../configure --prefix=/usr \ + --enable-gold \ + --enable-ld=default \ + --enable-plugins \ + --enable-shared \ + --disable-werror \ + --enable-64-bit-bfd \ + --with-system-zlib + make tooldir=/usr + make tooldir=/usr install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/bison b/lfs/pkgscripts/bison new file mode 100755 index 0000000..82ddda9 --- /dev/null +++ b/lfs/pkgscripts/bison @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=3.0.5 +url=http://ftp.gnu.org/gnu/bison/bison-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr --docdir=/usr/share/doc/bison-$version + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/bzip2 b/lfs/pkgscripts/bzip2 new file mode 100755 index 0000000..8a64760 --- /dev/null +++ b/lfs/pkgscripts/bzip2 @@ -0,0 +1,47 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.0.6 +url=http://anduin.linuxfromscratch.org/LFS/bzip2-$version.tar.gz + +fetch $url +fetch http://www.linuxfromscratch.org/patches/lfs/8.3/bzip2-$version-install_docs-1.patch + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + patch -Np1 -i $SOURCE_DIR/bzip2-$version-install_docs-1.patch + + sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile + sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile + + make -f Makefile-libbz2_so + make clean + + make + 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 + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/check b/lfs/pkgscripts/check new file mode 100755 index 0000000..46a44d0 --- /dev/null +++ b/lfs/pkgscripts/check @@ -0,0 +1,33 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=0.12.0 +url=https://github.com/libcheck/check/releases/download/$version/check-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr + make + make install + sed -i '1 s/tools/usr/' /usr/bin/checkmk + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/coreutils b/lfs/pkgscripts/coreutils new file mode 100755 index 0000000..ada4b91 --- /dev/null +++ b/lfs/pkgscripts/coreutils @@ -0,0 +1,46 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=8.30 +url=http://ftp.gnu.org/gnu/coreutils/coreutils-$version.tar.xz + +fetch $url +fetch http://www.linuxfromscratch.org/patches/lfs/8.3/coreutils-$version-i18n-1.patch + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + patch -Np1 -i $SOURCE_DIR/coreutils-8.30-i18n-1.patch + sed -i '/test.lock/s/^/#/' gnulib-tests/gnulib.mk + + autoreconf -fiv + FORCE_UNSAFE_CONFIGURE=1 ./configure \ + --prefix=/usr \ + --enable-no-install-program=kill,uptime + FORCE_UNSAFE_CONFIGURE=1 make + make install + mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin + mv -v /usr/bin/{false,ln,ls,mkdir,mknod,pwd,rm} /bin + mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin + mv -v /usr/bin/chroot /usr/sbin + mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8 + sed -i s/\"1\"/\"8\"/1 /usr/share/man/man8/chroot.8 + mv -v /usr/bin/{head,sleep,nice,mv} /bin + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/cpio b/lfs/pkgscripts/cpio new file mode 100755 index 0000000..b0c35c6 --- /dev/null +++ b/lfs/pkgscripts/cpio @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.12 +url=https://ftp.gnu.org/gnu/cpio/cpio-$version.tar.bz2 + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --bindir=/bin \ + --enable-mt \ + --with-rmt=/usr/libexec/rmt + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/dhcpcd b/lfs/pkgscripts/dhcpcd new file mode 100755 index 0000000..ee9df5c --- /dev/null +++ b/lfs/pkgscripts/dhcpcd @@ -0,0 +1,37 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=7.0.7 +url=http://roy.marples.name/downloads/dhcpcd/dhcpcd-$version.tar.xz + +fetch $url +fetch http://anduin.linuxfromscratch.org/BLFS/blfs-bootscripts/blfs-bootscripts-20180105.tar.xz + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --libexecdir=/lib/dhcpcd \ + --dbdir=/var/lib/dhcpcd + make + make install + tar -xvf $SOURCE_DIR/blfs-bootscripts-20180105.tar.xz + cd blfs-bootscripts-20180105 + make install-service-dhcpcd + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/diffutils b/lfs/pkgscripts/diffutils new file mode 100755 index 0000000..2853c11 --- /dev/null +++ b/lfs/pkgscripts/diffutils @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=3.6 +url=http://ftp.gnu.org/gnu/diffutils/diffutils-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/e2fsprogs b/lfs/pkgscripts/e2fsprogs new file mode 100755 index 0000000..d16b712 --- /dev/null +++ b/lfs/pkgscripts/e2fsprogs @@ -0,0 +1,46 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.44.3 +url=https://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/v$version/e2fsprogs-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + mkdir -v build + cd build + + ../configure --prefix=/usr \ + --bindir=/bin \ + --with-root-prefix="" \ + --enable-elf-shlibs \ + --disable-libblkid \ + --disable-libuuid \ + --disable-uuidd \ + --disable-fsck + make + make install + make install-libs + chmod -v u+w /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a + gunzip -v /usr/share/info/libext2fs.info.gz + install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/eudev b/lfs/pkgscripts/eudev new file mode 100755 index 0000000..0fc6cdd --- /dev/null +++ b/lfs/pkgscripts/eudev @@ -0,0 +1,56 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=3.2.5 +url=https://dev.gentoo.org/~blueness/eudev/eudev-$version.tar.gz + +fetch $url +fetch http://anduin.linuxfromscratch.org/LFS/udev-lfs-20171102.tar.bz2 + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + cat > config.cache << "EOF" +HAVE_BLKID=1 +BLKID_LIBS="-lblkid" +BLKID_CFLAGS="-I/tools/include" +EOF + + ./configure --prefix=/usr \ + --bindir=/sbin \ + --sbindir=/sbin \ + --libdir=/usr/lib \ + --sysconfdir=/etc \ + --libexecdir=/lib \ + --with-rootprefix= \ + --with-rootlibdir=/lib \ + --enable-manpages \ + --disable-static \ + --config-cache + LIBRARY_PATH=/tools/lib make + mkdir -pv /lib/udev/rules.d + mkdir -pv /etc/udev/rules.d + make LD_LIBRARY_PATH=/tools/lib install + + tar -xvf $SOURCE_DIR/udev-lfs-20171102.tar.bz2 + make -f udev-lfs-20171102/Makefile.lfs install + + LD_LIBRARY_PATH=/tools/lib udevadm hwdb --update + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/expat b/lfs/pkgscripts/expat new file mode 100755 index 0000000..fec6de2 --- /dev/null +++ b/lfs/pkgscripts/expat @@ -0,0 +1,36 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.2.6 +url=https://prdownloads.sourceforge.net/expat/expat-$version.tar.bz2 + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i 's|usr/bin/env |bin/|' run.sh.in + + ./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/expat-$version + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/file b/lfs/pkgscripts/file new file mode 100755 index 0000000..7fdf97d --- /dev/null +++ b/lfs/pkgscripts/file @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=file +version=5.34 +url=ftp://ftp.astron.com/pub/file/file-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$name-$version.tar.gz -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/findutils b/lfs/pkgscripts/findutils new file mode 100755 index 0000000..bf17db4 --- /dev/null +++ b/lfs/pkgscripts/findutils @@ -0,0 +1,39 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=4.6.0 +url=http://ftp.gnu.org/gnu/findutils/findutils-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i 's/test-lock..EXEEXT.//' tests/Makefile.in + sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' gl/lib/*.c + sed -i '/unistd/a #include ' gl/lib/mountlist.c + echo "#define _IO_IN_BACKUP 0x100" >> gl/lib/stdio-impl.h + + ./configure --prefix=/usr --localstatedir=/var/lib/locate + make + make install + mv -v /usr/bin/find /bin + sed -i 's|find:=${BINDIR}|find:=/bin|' /usr/bin/updatedb + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/flex b/lfs/pkgscripts/flex new file mode 100755 index 0000000..17e5357 --- /dev/null +++ b/lfs/pkgscripts/flex @@ -0,0 +1,36 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.6.4 +url=https://github.com/westes/flex/releases/download/v$version/flex-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i "/math.h/a #include " src/flexdef.h + + HELP2MAN=/tools/bin/true \ + ./configure --prefix=/usr --docdir=/usr/share/doc/flex-$version + make + make install + ln -sv flex /usr/bin/lex + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/gawk b/lfs/pkgscripts/gawk new file mode 100755 index 0000000..e828a54 --- /dev/null +++ b/lfs/pkgscripts/gawk @@ -0,0 +1,33 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=4.2.1 +url=http://ftp.gnu.org/gnu/gawk/gawk-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i 's/extras//' Makefile.in + ./configure --prefix=/usr + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/gcc b/lfs/pkgscripts/gcc new file mode 100755 index 0000000..5e1d7ad --- /dev/null +++ b/lfs/pkgscripts/gcc @@ -0,0 +1,68 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=8.2.0 +url=http://ftp.gnu.org/gnu/gcc/gcc-$version/gcc-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + case $(uname -m) in + x86_64) + sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 + ;; + esac + + rm -f /usr/lib/gcc + + mkdir -v build + cd build + + SED=sed \ + ../configure --prefix=/usr \ + --enable-languages=c,c++ \ + --disable-multilib \ + --disable-bootstrap \ + --disable-libmpx \ + --with-system-zlib + make + make install + ln -svf ../usr/bin/cpp /lib + ln -svf gcc /usr/bin/cc + install -v -dm755 /usr/lib/bfd-plugins + ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/8.2.0/liblto_plugin.so \ + /usr/lib/bfd-plugins/ + + echo 'int 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 -v dummy.c a.out dummy.log + mkdir -pv /usr/share/gdb/auto-load/usr/lib + mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/gdbm b/lfs/pkgscripts/gdbm new file mode 100755 index 0000000..c8ca584 --- /dev/null +++ b/lfs/pkgscripts/gdbm @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.17 +url=http://ftp.gnu.org/gnu/gdbm/gdbm-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --disable-static \ + --enable-libgdbm-compat + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/gettext b/lfs/pkgscripts/gettext new file mode 100755 index 0000000..ccb2e90 --- /dev/null +++ b/lfs/pkgscripts/gettext @@ -0,0 +1,41 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=0.19.8.1 +url=http://ftp.gnu.org/gnu/gettext/gettext-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i '/^TESTS =/d' gettext-runtime/tests/Makefile.in && + sed -i 's/test-lock..EXEEXT.//' gettext-tools/gnulib-tests/Makefile.in + + sed -e '/AppData/{N;N;p;s/\.appdata\./.metainfo./}' \ + -i gettext-tools/its/appdata.loc + + ./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/gettext-$version + make + make install + chmod -v 0755 /usr/lib/preloadable_libintl.so + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/glibc b/lfs/pkgscripts/glibc new file mode 100755 index 0000000..16c1f7a --- /dev/null +++ b/lfs/pkgscripts/glibc @@ -0,0 +1,139 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=glibc +version=2.28 +url=http://ftp.gnu.org/gnu/glibc/glibc-$version.tar.xz + +fetch $url +fetch http://www.linuxfromscratch.org/patches/lfs/8.3/glibc-$version-fhs-1.patch +fetch https://www.iana.org/time-zones/repository/releases/tzdata2018e.tar.gz + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$name-$version.tar.xz -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + patch -Np1 -i $SOURCE_DIR/glibc-$version-fhs-1.patch + + ln -sfv /tools/lib/gcc /usr/lib + + case $(uname -m) in + i?86) GCC_INCDIR=/usr/lib/gcc/$(uname -m)-pc-linux-gnu/8.2.0/include + ln -sfv ld-linux.so.2 /lib/ld-lsb.so.3 + ;; + x86_64) GCC_INCDIR=/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/include + ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64 + ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3 + ;; + esac + + rm -f /usr/include/limits.h + + mkdir -v build + cd build + + CC="gcc -isystem $GCC_INCDIR -isystem /usr/include" \ + ../configure --prefix=/usr \ + --disable-werror \ + --enable-kernel=3.2 \ + --enable-stack-protector=strong \ + libc_cv_slibdir=/lib + unset GCC_INCDIR + make + touch /etc/ld.so.conf + sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile + make install + cp -v ../nscd/nscd.conf /etc/nscd.conf + mkdir -pv /var/cache/nscd + mkdir -pv /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 + + tar -xf $SOURCE_DIR/tzdata2018e.tar.gz + +ZONEINFO=/usr/share/zoneinfo +mkdir -pv $ZONEINFO/{posix,right} + +for tz in etcetera southamerica northamerica europe africa antarctica \ + asia australasia backward pacificnew systemv; do + zic -L /dev/null -d $ZONEINFO -y "sh yearistype.sh" ${tz} + zic -L /dev/null -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz} + zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz} +done + +cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO +zic -d $ZONEINFO -p America/New_York +unset ZONEINFO + + ln -svf /usr/share/zoneinfo/UTC /etc/localtime + + cat > /etc/ld.so.conf << "EOF" +# Begin /etc/ld.so.conf +/usr/local/lib +/opt/lib + +EOF + +cat >> /etc/ld.so.conf << "EOF" +# Add an include directory +include /etc/ld.so.conf.d/*.conf + +EOF +mkdir -pv /etc/ld.so.conf.d + +if [ ! -f /tools/bin/ld-old ]; then + mv -v /tools/bin/{ld,ld-old} + mv -v /tools/$(uname -m)-pc-linux-gnu/bin/{ld,ld-old} + mv -v /tools/bin/{ld-new,ld} + ln -sv /tools/bin/ld /tools/$(uname -m)-pc-linux-gnu/bin/ld + + gcc -dumpspecs | sed -e 's@/tools@@g' \ + -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \ + -e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' > \ + `dirname $(gcc --print-libgcc-file-name)`/specs + + echo 'int 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 -B1 '^ /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 -v dummy.c a.out dummy.log +fi + + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/gmp b/lfs/pkgscripts/gmp new file mode 100755 index 0000000..e1bb986 --- /dev/null +++ b/lfs/pkgscripts/gmp @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=6.1.2 +url=http://ftp.gnu.org/gnu/gmp/gmp-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --enable-cxx \ + --disable-static \ + --docdir=/usr/share/doc/gmp-$version + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/gperf b/lfs/pkgscripts/gperf new file mode 100755 index 0000000..cea0279 --- /dev/null +++ b/lfs/pkgscripts/gperf @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=3.1 +url=http://ftp.gnu.org/gnu/gperf/gperf-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr --docdir=/usr/share/doc/gperf-$version + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/grep b/lfs/pkgscripts/grep new file mode 100755 index 0000000..0cadf63 --- /dev/null +++ b/lfs/pkgscripts/grep @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=3.1 +url=http://ftp.gnu.org/gnu/grep/grep-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr --bindir=/bin + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/groff b/lfs/pkgscripts/groff new file mode 100755 index 0000000..75145bb --- /dev/null +++ b/lfs/pkgscripts/groff @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.22.3 +url=http://ftp.gnu.org/gnu/groff/groff-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + PAGE=A4 ./configure --prefix=/usr + make -j1 + make -j1 install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/grub b/lfs/pkgscripts/grub new file mode 100755 index 0000000..334ded7 --- /dev/null +++ b/lfs/pkgscripts/grub @@ -0,0 +1,36 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.02 +url=https://ftp.gnu.org/gnu/grub/grub-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --sbindir=/sbin \ + --sysconfdir=/etc \ + --disable-efiemu \ + --disable-werror + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/gzip b/lfs/pkgscripts/gzip new file mode 100755 index 0000000..32104e6 --- /dev/null +++ b/lfs/pkgscripts/gzip @@ -0,0 +1,36 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.9 +url=http://ftp.gnu.org/gnu/gzip/gzip-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c + echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h + + ./configure --prefix=/usr + make + make install + mv -v /usr/bin/gzip /bin + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/iana-etc b/lfs/pkgscripts/iana-etc new file mode 100755 index 0000000..3b232d9 --- /dev/null +++ b/lfs/pkgscripts/iana-etc @@ -0,0 +1,31 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.30 +url=http://anduin.linuxfromscratch.org/LFS/iana-etc-$version.tar.bz2 + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/inetutils b/lfs/pkgscripts/inetutils new file mode 100755 index 0000000..c380774 --- /dev/null +++ b/lfs/pkgscripts/inetutils @@ -0,0 +1,42 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.9.4 +url=http://ftp.gnu.org/gnu/inetutils/inetutils-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --localstatedir=/var \ + --disable-logger \ + --disable-whois \ + --disable-rcp \ + --disable-rexec \ + --disable-rlogin \ + --disable-rsh \ + --disable-servers + make + make install + mv -v /usr/bin/{hostname,ping,ping6,traceroute} /bin + mv -v /usr/bin/ifconfig /sbin + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/intltool b/lfs/pkgscripts/intltool new file mode 100755 index 0000000..d6a759e --- /dev/null +++ b/lfs/pkgscripts/intltool @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=0.51.0 +url=https://launchpad.net/intltool/trunk/$version/+download/intltool-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i 's:\\\${:\\\$\\{:' intltool-update.in + + ./configure --prefix=/usr + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/iproute2 b/lfs/pkgscripts/iproute2 new file mode 100755 index 0000000..ddde06c --- /dev/null +++ b/lfs/pkgscripts/iproute2 @@ -0,0 +1,36 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=4.18.0 +url=https://www.kernel.org/pub/linux/utils/net/iproute2/iproute2-4.18.0.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i /ARPD/d Makefile + rm -fv man/man8/arpd.8 + + sed -i 's/.m_ipt.o//' tc/Makefile + + make + make DOCDIR=/usr/share/doc/iproute2-$version install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/kbd b/lfs/pkgscripts/kbd new file mode 100755 index 0000000..4394114 --- /dev/null +++ b/lfs/pkgscripts/kbd @@ -0,0 +1,38 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.0.4 +url=https://www.kernel.org/pub/linux/utils/kbd/kbd-$version.tar.xz + +fetch $url +fetch http://www.linuxfromscratch.org/patches/lfs/8.3/kbd-$version-backspace-1.patch + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + patch -Np1 -i $SOURCE_DIR/kbd-2.0.4-backspace-1.patch + + sed -i 's/\(RESIZECONS_PROGS=\)yes/\1no/g' configure + sed -i 's/resizecons.8 //' docs/man/man8/Makefile.in + + PKG_CONFIG_PATH=/tools/lib/pkgconfig ./configure --prefix=/usr --disable-vlock + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/kmod b/lfs/pkgscripts/kmod new file mode 100755 index 0000000..2610178 --- /dev/null +++ b/lfs/pkgscripts/kmod @@ -0,0 +1,41 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=25 +url=https://www.kernel.org/pub/linux/utils/kernel/kmod/kmod-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --bindir=/bin \ + --sysconfdir=/etc \ + --with-rootlibdir=/lib \ + --with-xz \ + --with-zlib + make + make install + for target in depmod insmod lsmod modinfo modprobe rmmod; do + ln -sfv ../bin/kmod /sbin/$target + done + ln -sfv kmod /bin/lsmod + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/less b/lfs/pkgscripts/less new file mode 100755 index 0000000..1fed790 --- /dev/null +++ b/lfs/pkgscripts/less @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=530 +url=http://www.greenwoodsoftware.com/less/less-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr --sysconfdir=/etc + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/lfs-bootscripts b/lfs/pkgscripts/lfs-bootscripts new file mode 100755 index 0000000..d9f47fa --- /dev/null +++ b/lfs/pkgscripts/lfs-bootscripts @@ -0,0 +1,30 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=20180820 +url=http://www.linuxfromscratch.org/lfs/downloads/8.3/lfs-bootscripts-$version.tar.bz2 + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/lfs-files b/lfs/pkgscripts/lfs-files new file mode 100755 index 0000000..8e23b28 --- /dev/null +++ b/lfs/pkgscripts/lfs-files @@ -0,0 +1,431 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=8.3 + +{ time \ + { +echo "$version" > /etc/lfs-release + +cat > /etc/lsb-release << "EOF" +DISTRIB_ID="Linux From Scratch" +DISTRIB_RELEASE="8.3" +DISTRIB_CODENAME="Emmett1" +DISTRIB_DESCRIPTION="Linux From Scratch" +EOF + +cat > /etc/inittab << "EOF" +# Begin /etc/inittab + +id:3:initdefault: + +si::sysinit:/etc/rc.d/init.d/rc S + +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 --noclear 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 + +cat > /etc/inputrc << "EOF" +# Begin /etc/inputrc +# Modified by Chris Lynn + +# 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/shells << "EOF" +# Begin /etc/shells + +/bin/sh +/bin/bash + +# End /etc/shells +EOF + +cat > /etc/fstab << "EOF" +# Begin /etc/fstab + +# file system mount-point type options dump fsck +# order + +#/dev/ / defaults 1 1 +#/dev/ swap swap pri=1 0 0 +proc /proc proc nosuid,noexec,nodev 0 0 +sysfs /sys sysfs nosuid,noexec,nodev 0 0 +devpts /dev/pts devpts gid=5,mode=620 0 0 +tmpfs /run tmpfs defaults 0 0 +devtmpfs /dev devtmpfs mode=0755,nosuid 0 0 + +# End /etc/fstab +EOF + +install -v -m755 -d /etc/modprobe.d +cat > /etc/modprobe.d/usb.conf << "EOF" +# Begin /etc/modprobe.d/usb.conf + +install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true +install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true + +# End /etc/modprobe.d/usb.conf +EOF + +cat > /etc/sysconfig/ifconfig.wired << "EOF" +ONBOOT="no" +IFACE="eth0" +SERVICE="dhcpcd" +#DHCP_START="-b -q " +#DHCP_STOP="-k " +EOF + + +cat > /etc/resolv.conf << "EOF" +# Begin /etc/resolv.conf + +nameserver 8.8.8.8 +nameserver 8.8.4.4 + +# End /etc/resolv.conf +EOF + +echo "lfs" > /etc/hostname + +cat > /etc/hosts << "EOF" +# Begin /etc/hosts + +127.0.0.1 localhost lfs +::1 localhost lfs + +# End /etc/hosts +EOF + +cat > /etc/profile << "EOF" +# Begin /etc/profile +# Written for Beyond Linux From Scratch +# by James Robertson +# modifications by Dagmar d'Surreal + +# System wide environment variables and startup programs. + +# System wide aliases and functions should go in /etc/bashrc. Personal +# environment variables and startup programs should go into +# ~/.bash_profile. Personal aliases and functions should go into +# ~/.bashrc. + +# Functions to help us manage paths. Second argument is the name of the +# path variable to be modified (default: PATH) +pathremove () { + local IFS=':' + local NEWPATH + local DIR + local PATHVARIABLE=${2:-PATH} + for DIR in ${!PATHVARIABLE} ; do + if [ "$DIR" != "$1" ] ; then + NEWPATH=${NEWPATH:+$NEWPATH:}$DIR + fi + done + export $PATHVARIABLE="$NEWPATH" +} + +pathprepend () { + pathremove $1 $2 + local PATHVARIABLE=${2:-PATH} + export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}" +} + +pathappend () { + pathremove $1 $2 + local PATHVARIABLE=${2:-PATH} + export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1" +} + +export -f pathremove pathprepend pathappend + +# Set the initial path +export PATH=/bin:/usr/bin + +if [ $EUID -eq 0 ] ; then + pathappend /sbin:/usr/sbin + unset HISTFILE +fi + +# Setup some environment variables. +export HISTSIZE=1000 +export HISTIGNORE="&:[bf]g:exit" + +# Set some defaults for graphical systems +export XDG_DATA_DIRS=${XDG_DATA_DIRS:-/usr/share/} +export XDG_CONFIG_DIRS=${XDG_CONFIG_DIRS:-/etc/xdg/} +export XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-/tmp/xdg-$USER} + +# Setup a red prompt for root and a green one for users. +NORMAL="\[\e[0m\]" +RED="\[\e[1;31m\]" +GREEN="\[\e[1;32m\]" +if [[ $EUID == 0 ]] ; then + PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL" +else + PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL" +fi + +for script in /etc/profile.d/*.sh ; do + if [ -r $script ] ; then + . $script + fi +done + +unset script RED GREEN NORMAL + +# End /etc/profile +EOF + +install --directory --mode=0755 --owner=root --group=root /etc/profile.d + +cat > /etc/profile.d/bash_completion.sh << "EOF" +# Begin /etc/profile.d/bash_completion.sh +# Import bash completion scripts + +for script in /etc/bash_completion.d/*.sh ; do + if [ -r $script ] ; then + . $script + fi +done +# End /etc/profile.d/bash_completion.sh +EOF + +install --directory --mode=0755 --owner=root --group=root /etc/bash_completion.d + +cat > /etc/profile.d/dircolors.sh << "EOF" +# Setup for /bin/ls and /bin/grep to support color, the alias is in /etc/bashrc. +if [ -f "/etc/dircolors" ] ; then + eval $(dircolors -b /etc/dircolors) +fi + +if [ -f "$HOME/.dircolors" ] ; then + eval $(dircolors -b $HOME/.dircolors) +fi + +alias ls='ls --color=auto' +alias grep='grep --color=auto' +EOF + +cat > /etc/profile.d/extrapaths.sh << "EOF" +if [ -d /usr/local/lib/pkgconfig ] ; then + pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH +fi +if [ -d /usr/local/bin ]; then + pathprepend /usr/local/bin +fi +if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then + pathprepend /usr/local/sbin +fi + +# Set some defaults before other applications add to these paths. +pathappend /usr/share/man MANPATH +pathappend /usr/share/info INFOPATH +EOF + +cat > /etc/profile.d/readline.sh << "EOF" +# Setup the INPUTRC environment variable. +if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then + INPUTRC=/etc/inputrc +fi +export INPUTRC +EOF + +cat > /etc/profile.d/umask.sh << "EOF" +# By default, the umask should be set. +if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then + umask 002 +else + umask 022 +fi +EOF + +cat > /etc/profile.d/i18n.sh << "EOF" +# Set up i18n variables +export LANG=en_US.UTF-8 +EOF + +cat > /etc/bashrc << "EOF" +# Begin /etc/bashrc +# Written for Beyond Linux From Scratch +# by James Robertson +# updated by Bruce Dubbs + +# System wide aliases and functions. + +# System wide environment variables and startup programs should go into +# /etc/profile. Personal environment variables and startup programs +# should go into ~/.bash_profile. Personal aliases and functions should +# go into ~/.bashrc + +# Provides colored /bin/ls and /bin/grep commands. Used in conjunction +# with code in /etc/profile. + +alias ls='ls --color=auto' +alias grep='grep --color=auto' + +# Provides prompt for non-login shells, specifically shells started +# in the X environment. [Review the LFS archive thread titled +# PS1 Environment Variable for a great case study behind this script +# addendum.] + +NORMAL="\[\e[0m\]" +RED="\[\e[1;31m\]" +GREEN="\[\e[1;32m\]" +if [[ $EUID == 0 ]] ; then + PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL" +else + PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL" +fi + +unset RED GREEN NORMAL + +# End /etc/bashrc +EOF + +cat > ~/.bash_profile << "EOF" +# Begin ~/.bash_profile +# Written for Beyond Linux From Scratch +# by James Robertson +# updated by Bruce Dubbs + +# Personal environment variables and startup programs. + +# Personal aliases and functions should go in ~/.bashrc. System wide +# environment variables and startup programs are in /etc/profile. +# System wide aliases and functions are in /etc/bashrc. + +if [ -f "$HOME/.bashrc" ] ; then + source $HOME/.bashrc +fi + +if [ -d "$HOME/bin" ] ; then + pathprepend $HOME/bin +fi + +# Having . in the PATH is dangerous +#if [ $EUID -gt 99 ]; then +# pathappend . +#fi + +# End ~/.bash_profile +EOF + +cat > ~/.profile << "EOF" +# Begin ~/.profile +# Personal environment variables and startup programs. + +if [ -d "$HOME/bin" ] ; then + pathprepend $HOME/bin +fi + +# Set up user specific i18n variables +#export LANG=_.<@modifiers> + +# End ~/.profile +EOF + +cat > ~/.bashrc << "EOF" +# Begin ~/.bashrc +# Written for Beyond Linux From Scratch +# by James Robertson + +# Personal aliases and functions. + +# Personal environment variables and startup programs should go in +# ~/.bash_profile. System wide environment variables and startup +# programs are in /etc/profile. System wide aliases and functions are +# in /etc/bashrc. + +if [ -f "/etc/bashrc" ] ; then + source /etc/bashrc +fi + +# Set up user specific i18n variables +#export LANG=_.<@modifiers> + +# End ~/.bashrc +EOF + +cat > ~/.bash_logout << "EOF" +# Begin ~/.bash_logout +# Written for Beyond Linux From Scratch +# by James Robertson + +# Personal items to perform on logout. + +# End ~/.bash_logout +EOF + +dircolors -p > /etc/dircolors + + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +#rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/libcap b/lfs/pkgscripts/libcap new file mode 100755 index 0000000..60439e8 --- /dev/null +++ b/lfs/pkgscripts/libcap @@ -0,0 +1,36 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.25 +url=https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i '/install.*STALIBNAME/d' libcap/Makefile + + make + make RAISE_SETFCAP=no lib=lib prefix=/usr install + chmod -v 755 /usr/lib/libcap.so + mv -v /usr/lib/libcap.so.* /lib + ln -sfv ../../lib/$(readlink /usr/lib/libcap.so) /usr/lib/libcap.so + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/libelf b/lfs/pkgscripts/libelf new file mode 100755 index 0000000..1b4892e --- /dev/null +++ b/lfs/pkgscripts/libelf @@ -0,0 +1,33 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=elfutils +version=0.173 +url=https://sourceware.org/ftp/elfutils/$version/elfutils-$version.tar.bz2 + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr + make + make -C libelf install + install -vm644 config/libelf.pc /usr/lib/pkgconfig + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/libffi b/lfs/pkgscripts/libffi new file mode 100755 index 0000000..8b8ab9b --- /dev/null +++ b/lfs/pkgscripts/libffi @@ -0,0 +1,39 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=3.2.1 +url=ftp://sourceware.org/pub/libffi/libffi-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -e '/^includesdir/ s/$(libdir).*$/$(includedir)/' \ + -i include/Makefile.in + + sed -e '/^includedir/ s/=.*$/=@includedir@/' \ + -e 's/^Cflags: -I${includedir}/Cflags:/' \ + -i libffi.pc.in + + ./configure --prefix=/usr --disable-static --with-gcc-arch=native + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/libnl b/lfs/pkgscripts/libnl new file mode 100755 index 0000000..e5a88d2 --- /dev/null +++ b/lfs/pkgscripts/libnl @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=3.4.0 +url=https://github.com/thom311/libnl/releases/download/libnl${version//./_}/libnl-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --disable-static + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/libpipeline b/lfs/pkgscripts/libpipeline new file mode 100755 index 0000000..6ed7c09 --- /dev/null +++ b/lfs/pkgscripts/libpipeline @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.5.0 +url=http://download.savannah.gnu.org/releases/libpipeline/libpipeline-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/libtasn1 b/lfs/pkgscripts/libtasn1 new file mode 100755 index 0000000..2679db9 --- /dev/null +++ b/lfs/pkgscripts/libtasn1 @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=4.13 +url=ftp://ftp.gnu.org/gnu/libtasn1/libtasn1-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr --disable-static + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/libtool b/lfs/pkgscripts/libtool new file mode 100755 index 0000000..c674fbc --- /dev/null +++ b/lfs/pkgscripts/libtool @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.4.6 +url=http://ftp.gnu.org/gnu/libtool/libtool-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/linux b/lfs/pkgscripts/linux new file mode 100755 index 0000000..2c7917d --- /dev/null +++ b/lfs/pkgscripts/linux @@ -0,0 +1,46 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=4.19.2 +url=https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-$version.tar.xz + +fetch $url +fetch https://raw.githubusercontent.com/emmett1/ports/1.0/extra/linux/config-$version + +rm -fr /usr/src/$name-$version-old +[ -d /usr/src/$name-$version ] && mv /usr/src/$name-$version /usr/src/$name-$version-old +tar -xvf $SOURCE_DIR/$(basename $url) -C /usr/src +#ln -svf /usr/src/$name-$version /usr/src/linux + +cd /usr/src/$name-$version +{ time \ + { + make mrproper + cp $SOURCE_DIR/config-$version .config + + sed '/^CONFIG_LOCALVERSION=/d' -i .config + echo 'CONFIG_LOCALVERSION="-lfs"' >> .config + + make + make modules_install + cp arch/x86/boot/bzImage /boot/vmlinuz-$version-lfs + + if [ $(type -p mkinitramfs) ]; then + kernver=$(file /boot/vmlinuz-$version-lfs | cut -d ' ' -f9) + mkinitramfs -k $kernver -o /boot/initrd-$version-lfs.img + fi + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +#rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/linux-api-headers b/lfs/pkgscripts/linux-api-headers new file mode 100755 index 0000000..e9d05db --- /dev/null +++ b/lfs/pkgscripts/linux-api-headers @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=linux +version=4.19.2 + +fetch https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-$version.tar.xz + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/linux-$version.tar.xz -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + make mrproper + make INSTALL_HDR_PATH=dest headers_install + find dest/include \( -name .install -o -name ..install.cmd \) -delete + cp -rv dest/include/* /usr/include + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/m4 b/lfs/pkgscripts/m4 new file mode 100755 index 0000000..825bd51 --- /dev/null +++ b/lfs/pkgscripts/m4 @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=m4 +version=1.4.18 +url=http://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c + echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h + + ./configure --prefix=/usr + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/make b/lfs/pkgscripts/make new file mode 100755 index 0000000..1280edd --- /dev/null +++ b/lfs/pkgscripts/make @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=4.2.1 +url=http://ftp.gnu.org/gnu/make/make-$version.tar.bz2 + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i '211,217 d; 219,229 d; 232 d' glob/glob.c + + ./configure --prefix=/usr + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/make-ca b/lfs/pkgscripts/make-ca new file mode 100755 index 0000000..0b35cee --- /dev/null +++ b/lfs/pkgscripts/make-ca @@ -0,0 +1,43 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=0.9 +url=https://github.com/djlucas/make-ca/archive/v$version/make-ca-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + install -vdm755 /etc/ssl/local + wget http://www.cacert.org/certs/root.crt + wget http://www.cacert.org/certs/class3.crt + openssl x509 -in root.crt -text -fingerprint -setalias "CAcert Class 1 root" \ + -addtrust serverAuth -addtrust emailProtection -addtrust codeSigning \ + > /etc/ssl/local/CAcert_Class_1_root.pem + openssl x509 -in class3.crt -text -fingerprint -setalias "CAcert Class 3 root" \ + -addtrust serverAuth -addtrust emailProtection -addtrust codeSigning \ + > /etc/ssl/local/CAcert_Class_3_root.pem + make install + mkdir -pv /etc/pki/tls/certs + ln -svf /etc/ssl/ca-bundle.crt \ + /etc/pki/tls/certs/ca-bundle.crt + /usr/sbin/make-ca -g + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/man-db b/lfs/pkgscripts/man-db new file mode 100755 index 0000000..5785418 --- /dev/null +++ b/lfs/pkgscripts/man-db @@ -0,0 +1,40 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.8.4 +url=http://download.savannah.gnu.org/releases/man-db/man-db-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --docdir=/usr/share/doc/man-db-$version \ + --sysconfdir=/etc \ + --disable-setuid \ + --enable-cache-owner=bin \ + --with-browser=/usr/bin/lynx \ + --with-vgrind=/usr/bin/vgrind \ + --with-grap=/usr/bin/grap \ + --with-systemdtmpfilesdir= + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/man-pages b/lfs/pkgscripts/man-pages new file mode 100755 index 0000000..b775578 --- /dev/null +++ b/lfs/pkgscripts/man-pages @@ -0,0 +1,29 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=man-pages +version=4.16 + +fetch https://www.kernel.org/pub/linux/docs/man-pages/man-pages-$version.tar.xz + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$name-$version.tar.xz -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/meson b/lfs/pkgscripts/meson new file mode 100755 index 0000000..6d04499 --- /dev/null +++ b/lfs/pkgscripts/meson @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=0.47.1 +url=https://github.com/mesonbuild/meson/releases/download/$version/meson-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + python3 setup.py build + python3 setup.py install --root=dest + cp -rv dest/* / + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/mkinitramfs b/lfs/pkgscripts/mkinitramfs new file mode 100755 index 0000000..fb9b51d --- /dev/null +++ b/lfs/pkgscripts/mkinitramfs @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=72992208c32e3aac22a086659b00c034960992cd +url=https://github.com/emmett1/mkinitramfs/archive/$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./INSTALL.sh + + #if [ $(type -p mkinitramfs) ]; then + # kernver=$(file /boot/vmlinuz-4.19.2-lfs | cut -d ' ' -f9) + # mkinitramfs -k $kernver -o /boot/initrd-4.19.2-lfs.img + #fi + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/mpc b/lfs/pkgscripts/mpc new file mode 100755 index 0000000..b1c3026 --- /dev/null +++ b/lfs/pkgscripts/mpc @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.1.0 +url=https://ftp.gnu.org/gnu/mpc/mpc-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/mpc-$version + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/mpfr b/lfs/pkgscripts/mpfr new file mode 100755 index 0000000..a1daddc --- /dev/null +++ b/lfs/pkgscripts/mpfr @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=4.0.1 +url=http://www.mpfr.org/mpfr-$version/mpfr-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --disable-static \ + --enable-thread-safe \ + --docdir=/usr/share/doc/mpfr-$version + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/ncurses b/lfs/pkgscripts/ncurses new file mode 100755 index 0000000..81f2627 --- /dev/null +++ b/lfs/pkgscripts/ncurses @@ -0,0 +1,50 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=6.1 +url=http://ftp.gnu.org/gnu/ncurses/ncurses-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i '/LIBTOOL_INSTALL/d' c++/Makefile.in + + ./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --with-shared \ + --without-debug \ + --without-normal \ + --enable-pc-files \ + --enable-widec + make + make install + mv -v /usr/lib/libncursesw.so.6* /lib + ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so + for lib in 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}w.pc /usr/lib/pkgconfig/${lib}.pc + done + rm -vf /usr/lib/libcursesw.so + echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so + ln -sfv libncurses.so /usr/lib/libcurses.so + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/ninja b/lfs/pkgscripts/ninja new file mode 100755 index 0000000..91ccfc8 --- /dev/null +++ b/lfs/pkgscripts/ninja @@ -0,0 +1,41 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.8.2 +url=https://github.com/ninja-build/ninja/archive/v$version/ninja-$version.tar.gz + +fetch $url +fetch http://www.linuxfromscratch.org/patches/lfs/8.3/ninja-$version-add_NINJAJOBS_var-1.patch + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + export NINJAJOBS=4 + + patch -Np1 -i $SOURCE_DIR/ninja-$version-add_NINJAJOBS_var-1.patch + + python3 configure.py --bootstrap + python3 configure.py + ./ninja ninja_test + ./ninja_test --gtest_filter=-SubprocessTest.SetWithLots + install -vm755 ninja /usr/bin/ + install -vDm644 misc/bash-completion /usr/share/bash-completion/completions/ninja + install -vDm644 misc/zsh-completion /usr/share/zsh/site-functions/_ninja + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/openssl b/lfs/pkgscripts/openssl new file mode 100755 index 0000000..4903e45 --- /dev/null +++ b/lfs/pkgscripts/openssl @@ -0,0 +1,37 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.1.0i +url=https://openssl.org/source/openssl-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./config --prefix=/usr \ + --openssldir=/etc/ssl \ + --libdir=lib \ + shared \ + zlib-dynamic + make + sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile + make MANSUFFIX=ssl install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/p11-kit b/lfs/pkgscripts/p11-kit new file mode 100755 index 0000000..9bc9f3d --- /dev/null +++ b/lfs/pkgscripts/p11-kit @@ -0,0 +1,42 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=0.23.14 +url=https://github.com/p11-glue/p11-kit/releases/download/$version/p11-kit-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed '20,$ d' -i trust/trust-extract-compat.in && +cat >> trust/trust-extract-compat.in << "EOF" +echo "Please create an OpenSSL Trusted Certificate with appropriate" +echo "trust arguments in /etc/ssl/local/ and run '/usr/sbin/make-ca -f'" +echo "as the root user." +exit 1 +EOF + + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --with-trust-paths=/etc/pki/anchors + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/patch b/lfs/pkgscripts/patch new file mode 100755 index 0000000..e4124bc --- /dev/null +++ b/lfs/pkgscripts/patch @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.7.6 +url=http://ftp.gnu.org/gnu/patch/patch-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/perl b/lfs/pkgscripts/perl new file mode 100755 index 0000000..316fce3 --- /dev/null +++ b/lfs/pkgscripts/perl @@ -0,0 +1,44 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=5.28.0 +url=https://www.cpan.org/src/5.0/perl-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + echo "127.0.0.1 localhost lfs" > /etc/hosts + + export BUILD_ZLIB=False + export BUILD_BZIP2=0 + + sh Configure -des -Dprefix=/usr \ + -Dvendorprefix=/usr \ + -Dman1dir=/usr/share/man/man1 \ + -Dman3dir=/usr/share/man/man3 \ + -Dpager="/usr/bin/less -isR" \ + -Duseshrplib \ + -Dusethreads + make + make install + unset BUILD_ZLIB BUILD_BZIP2 + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/perl-xml-parser b/lfs/pkgscripts/perl-xml-parser new file mode 100755 index 0000000..6858621 --- /dev/null +++ b/lfs/pkgscripts/perl-xml-parser @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=XML-Parser +version=2.44 +url=https://cpan.metacpan.org/authors/id/T/TO/TODDR/XML-Parser-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + perl Makefile.PL + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/pkg-config b/lfs/pkgscripts/pkg-config new file mode 100755 index 0000000..01fd3d0 --- /dev/null +++ b/lfs/pkgscripts/pkg-config @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=0.29.2 +url=https://pkg-config.freedesktop.org/releases/pkg-config-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --with-internal-glib \ + --disable-host-tool \ + --docdir=/usr/share/doc/pkg-config-$version + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/procps-ng b/lfs/pkgscripts/procps-ng new file mode 100755 index 0000000..88b41cb --- /dev/null +++ b/lfs/pkgscripts/procps-ng @@ -0,0 +1,39 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=3.3.15 +url=https://sourceforge.net/projects/procps-ng/files/Production/procps-ng-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --exec-prefix= \ + --libdir=/usr/lib \ + --docdir=/usr/share/doc/procps-ng-3.3.15 \ + --disable-static \ + --disable-kill + make + make install + mv -v /usr/lib/libprocps.so.* /lib + ln -sfv ../../lib/$(readlink /usr/lib/libprocps.so) /usr/lib/libprocps.so + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/psmisc b/lfs/pkgscripts/psmisc new file mode 100755 index 0000000..f316ed2 --- /dev/null +++ b/lfs/pkgscripts/psmisc @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=23.1 +url=https://sourceforge.net/projects/psmisc/files/psmisc/psmisc-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr + make + make install + mv -v /usr/bin/fuser /bin + mv -v /usr/bin/killall /bin + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/python3 b/lfs/pkgscripts/python3 new file mode 100755 index 0000000..0d16807 --- /dev/null +++ b/lfs/pkgscripts/python3 @@ -0,0 +1,38 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=Python +version=3.7.0 +url=https://www.python.org/ftp/python/$version/Python-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + --with-ensurepip=yes + make + make install + chmod -v 755 /usr/lib/libpython3.7m.so + chmod -v 755 /usr/lib/libpython3.so + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/readline b/lfs/pkgscripts/readline new file mode 100755 index 0000000..389102c --- /dev/null +++ b/lfs/pkgscripts/readline @@ -0,0 +1,42 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=readline +version=7.0 +url=http://ftp.gnu.org/gnu/readline/readline-7.0.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i '/MV.*old/d' Makefile.in + sed -i '/{OLDSUFF}/c:' support/shlib-install + + ./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/readline-$version + make SHLIB_LIBS="-L/tools/lib -lncursesw" + make SHLIB_LIBS="-L/tools/lib -lncurses" install + + mv -v /usr/lib/lib{readline,history}.so.* /lib + chmod -v u+w /lib/lib{readline,history}.so.* + ln -sfv ../../lib/$(readlink /usr/lib/libreadline.so) /usr/lib/libreadline.so + ln -sfv ../../lib/$(readlink /usr/lib/libhistory.so ) /usr/lib/libhistory.so + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/sed b/lfs/pkgscripts/sed new file mode 100755 index 0000000..ecdde0f --- /dev/null +++ b/lfs/pkgscripts/sed @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=4.5 +url=http://ftp.gnu.org/gnu/sed/sed-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i 's/usr/tools/' build-aux/help2man + sed -i 's/testsuite.panic-tests.sh//' Makefile.in + + ./configure --prefix=/usr --bindir=/bin + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/shadow b/lfs/pkgscripts/shadow new file mode 100755 index 0000000..97bfc93 --- /dev/null +++ b/lfs/pkgscripts/shadow @@ -0,0 +1,43 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=4.6 +url=https://github.com/shadow-maint/shadow/releases/download/$version/shadow-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i 's/groups$(EXEEXT) //' src/Makefile.in + find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \; + find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \; + find man -name Makefile.in -exec sed -i 's/passwd\.5 / /' {} \; + + sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \ + -e 's@/var/spool/mail@/var/mail@' etc/login.defs + + sed -i 's/1000/999/' etc/useradd + + ./configure --sysconfdir=/etc --with-group-name-max-length=32 + make + make install + mv -v /usr/bin/passwd /bin + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/sysklogd b/lfs/pkgscripts/sysklogd new file mode 100755 index 0000000..80960b3 --- /dev/null +++ b/lfs/pkgscripts/sysklogd @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.5.1 +url=http://www.infodrom.org/projects/sysklogd/download/sysklogd-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i '/Error loading kernel symbols/{n;n;d}' ksym_mod.c + sed -i 's/union wait/int/' syslogd.c + + make + make BINDIR=/sbin install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/sysvinit b/lfs/pkgscripts/sysvinit new file mode 100755 index 0000000..f50c877 --- /dev/null +++ b/lfs/pkgscripts/sysvinit @@ -0,0 +1,33 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.90 +url=http://download.savannah.gnu.org/releases/sysvinit/sysvinit-$version.tar.xz + +fetch $url +fetch http://www.linuxfromscratch.org/patches/lfs/8.3/sysvinit-$version-consolidated-1.patch + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + patch -Np1 -i $SOURCE_DIR/sysvinit-$version-consolidated-1.patch + make -C src + make -C src install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/tar b/lfs/pkgscripts/tar new file mode 100755 index 0000000..61b5dab --- /dev/null +++ b/lfs/pkgscripts/tar @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.30 +url=http://ftp.gnu.org/gnu/tar/tar-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + FORCE_UNSAFE_CONFIGURE=1 \ + ./configure --prefix=/usr \ + --bindir=/bin + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/template b/lfs/pkgscripts/template new file mode 100755 index 0000000..89975c7 --- /dev/null +++ b/lfs/pkgscripts/template @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version= +url= + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/texinfo b/lfs/pkgscripts/texinfo new file mode 100755 index 0000000..44790ea --- /dev/null +++ b/lfs/pkgscripts/texinfo @@ -0,0 +1,40 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=6.5 +url=http://ftp.gnu.org/gnu/texinfo/texinfo-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + sed -i '5481,5485 s/({/(\\{/' tp/Texinfo/Parser.pm + + ./configure --prefix=/usr --disable-static + make + make install + pushd /usr/share/info + rm -v dir + for f in * + do install-info $f dir 2>/dev/null + done + popd + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/util-linux b/lfs/pkgscripts/util-linux new file mode 100755 index 0000000..28ff3bc --- /dev/null +++ b/lfs/pkgscripts/util-linux @@ -0,0 +1,48 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.32.1 +url=https://www.kernel.org/pub/linux/utils/util-linux/v${version::4}/util-linux-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + mkdir -pv /var/lib/hwclock + + rm -vf /usr/include/{blkid,libmount,uuid} + + ./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --docdir=/usr/share/doc/util-linux-$version \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-static \ + --without-python \ + --without-systemd \ + --without-systemdsystemunitdir + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/vim b/lfs/pkgscripts/vim new file mode 100755 index 0000000..626b28d --- /dev/null +++ b/lfs/pkgscripts/vim @@ -0,0 +1,57 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=8.1 +url=ftp://ftp.vim.org/pub/vim/unix/vim-$version.tar.bz2 + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/vim81 +{ time \ + { + echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h + + ./configure --prefix=/usr + make + make install + ln -svf vim /usr/bin/vi + for L in /usr/share/man/{,*/}man1/vim.1; do + ln -svf vim.1 $(dirname $L)/vi.1 + done + ln -sfv ../vim/vim81/doc /usr/share/doc/vim-$version + cat > /etc/vimrc << "EOF" +" Begin /etc/vimrc + +" Ensure defaults are set before customizing settings, not after +source $VIMRUNTIME/defaults.vim +let skip_defaults_vim=1 + +set nocompatible +set backspace=2 +set mouse= +syntax on +if (&term == "xterm") || (&term == "putty") + set background=dark +endif + +" End /etc/vimrc +EOF + + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/vim81 + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/wget b/lfs/pkgscripts/wget new file mode 100755 index 0000000..fbc89f4 --- /dev/null +++ b/lfs/pkgscripts/wget @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=1.19.5 +url=https://ftp.gnu.org/gnu/wget/wget-$version.tar.gz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --with-ssl=openssl + make + make install + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/wpa_supplicant b/lfs/pkgscripts/wpa_supplicant new file mode 100755 index 0000000..597c3e2 --- /dev/null +++ b/lfs/pkgscripts/wpa_supplicant @@ -0,0 +1,81 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=2.6 +url=https://w1.fi/releases/wpa_supplicant-$version.tar.gz + +fetch $url +fetch http://www.linuxfromscratch.org/patches/blfs/8.3/wpa_supplicant-$version-upstream_fixes-2.patch +fetch http://anduin.linuxfromscratch.org/BLFS/blfs-bootscripts/blfs-bootscripts-20180105.tar.xz + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + cat > wpa_supplicant/.config << "EOF" +CONFIG_BACKEND=file +CONFIG_CTRL_IFACE=y +CONFIG_DEBUG_FILE=y +CONFIG_DEBUG_SYSLOG=y +CONFIG_DEBUG_SYSLOG_FACILITY=LOG_DAEMON +CONFIG_DRIVER_NL80211=y +CONFIG_DRIVER_WEXT=y +CONFIG_DRIVER_WIRED=y +CONFIG_EAP_GTC=y +CONFIG_EAP_LEAP=y +CONFIG_EAP_MD5=y +CONFIG_EAP_MSCHAPV2=y +CONFIG_EAP_OTP=y +CONFIG_EAP_PEAP=y +CONFIG_EAP_TLS=y +CONFIG_EAP_TTLS=y +CONFIG_IEEE8021X_EAPOL=y +CONFIG_IPV6=y +CONFIG_LIBNL32=y +CONFIG_PEERKEY=y +CONFIG_PKCS12=y +CONFIG_READLINE=y +CONFIG_SMARTCARD=y +CONFIG_WPS=y +CFLAGS += -I/usr/include/libnl3 +EOF + + patch -p1 -i $SOURCE_DIR/wpa_supplicant-$version-upstream_fixes-2.patch + + cd wpa_supplicant + make BINDIR=/sbin LIBDIR=/lib + install -v -m755 wpa_{cli,passphrase,supplicant} /sbin/ + install -v -m644 doc/docbook/wpa_supplicant.conf.5 /usr/share/man/man5/ + install -v -m644 doc/docbook/wpa_{cli,passphrase,supplicant}.8 /usr/share/man/man8/ + tar -xvf $SOURCE_DIR/blfs-bootscripts-20180105.tar.xz + cd blfs-bootscripts-20180105 + make install-service-wpa + cat > /etc/sysconfig/ifconfig.wifi << "EOF" +ONBOOT="no" +IFACE="wlan0" +SERVICE="wpa" + +# Additional arguments to wpa_supplicant +WPA_ARGS="" + +WPA_SERVICE="dhcpcd" +#DHCP_START="-b -q " +#DHCP_STOP="-k " +EOF + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/xz b/lfs/pkgscripts/xz new file mode 100755 index 0000000..9e16915 --- /dev/null +++ b/lfs/pkgscripts/xz @@ -0,0 +1,37 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=$(basename $0) +version=5.2.4 +url=https://tukaani.org/xz/xz-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$(basename $url) -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/xz-$version + make + make install + mv -v /usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} /bin + mv -v /usr/lib/liblzma.so.* /lib + ln -svf ../../lib/$(readlink /usr/lib/liblzma.so) /usr/lib/liblzma.so + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/lfs/pkgscripts/zlib b/lfs/pkgscripts/zlib new file mode 100755 index 0000000..7f5aa37 --- /dev/null +++ b/lfs/pkgscripts/zlib @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +. /etc/pkg/pkg.conf +. /var/lib/pkg/functions + +name=zlib +version=1.2.11 +url=https://zlib.net/zlib-$version.tar.xz + +fetch $url + +rm -fr $WORK_DIR/$name-$version +tar -xvf $SOURCE_DIR/$name-$version.tar.xz -C $WORK_DIR + +cd $WORK_DIR/$name-$version +{ time \ + { + ./configure --prefix=/usr + make + make install + mv -v /usr/lib/libz.so.* /lib + ln -sfv ../../lib/$(readlink /usr/lib/libz.so) /usr/lib/libz.so + } +} 2>&1 | tee -a $LOG_DIR/$(basename $0).log + +if [ $PIPESTATUS -ne 0 ]; then exit 1; fi; + +rm -fr $WORK_DIR/$name-$version + +registerpkg $(basename $0) $version + +exit 0 diff --git a/livecd/isolinux/chain.c32 b/livecd/isolinux/chain.c32 new file mode 100755 index 0000000..aa1e03e Binary files /dev/null and b/livecd/isolinux/chain.c32 differ diff --git a/livecd/isolinux/isohdpfx.bin b/livecd/isolinux/isohdpfx.bin new file mode 100755 index 0000000..8937173 Binary files /dev/null and b/livecd/isolinux/isohdpfx.bin differ diff --git a/livecd/isolinux/isolinux.bin b/livecd/isolinux/isolinux.bin new file mode 100755 index 0000000..200e5cc Binary files /dev/null and b/livecd/isolinux/isolinux.bin differ diff --git a/livecd/isolinux/isolinux.cfg b/livecd/isolinux/isolinux.cfg new file mode 100755 index 0000000..2ba816a --- /dev/null +++ b/livecd/isolinux/isolinux.cfg @@ -0,0 +1,43 @@ +UI /isolinux/menu.c32 +DEFAULT silent +TIMEOUT 100 +#MENU RESOLUTION 1024 768 + +MENU VSHIFT 3 +#MENU ROWS 7 + +# Refer to http://syslinux.zytor.com/wiki/index.php/Doc/menu +MENU TITLE Linux From Scratch 8.3 LiveCD +#MENU BACKGROUND splash.png +#MENU COLOR border 30;44 #40ffffff #a0000000 std +#MENU COLOR title 1;36;44 #9033ccff #a0000000 std +#MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all +#MENU COLOR unsel 37;44 #50ffffff #a0000000 std +#MENU COLOR help 37;40 #c0ffffff #a0000000 std +#MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std +#MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std +#MENU COLOR msg07 37;40 #90ffffff #a0000000 std +#MENU COLOR tabmsg 31;40 #30ffffff #00000000 std + +LABEL silent + MENU LABEL Boot Linux From Scratch 8.3 + KERNEL /boot/vmlinuz + APPEND initrd=/boot/initrd quiet + +LABEL debug + MENU LABEL Linux From Scratch 8.3 (Debug) + KERNEL /boot/vmlinuz + APPEND initrd=/boot/initrd verbose + +LABEL existing + MENU LABEL Boot existing OS + COM32 chain.c32 + APPEND hd0 0 + +LABEL reboot + MENU LABEL Reboot + COM32 reboot.c32 + +LABEL poweroff + MENU LABEL Poweroff + COM32 poweroff.c32 \ No newline at end of file diff --git a/livecd/isolinux/ldlinux.c32 b/livecd/isolinux/ldlinux.c32 new file mode 100755 index 0000000..0d8f2ef Binary files /dev/null and b/livecd/isolinux/ldlinux.c32 differ diff --git a/livecd/isolinux/libcom32.c32 b/livecd/isolinux/libcom32.c32 new file mode 100755 index 0000000..aedab33 Binary files /dev/null and b/livecd/isolinux/libcom32.c32 differ diff --git a/livecd/isolinux/libutil.c32 b/livecd/isolinux/libutil.c32 new file mode 100755 index 0000000..496fc30 Binary files /dev/null and b/livecd/isolinux/libutil.c32 differ diff --git a/livecd/isolinux/menu.c32 b/livecd/isolinux/menu.c32 new file mode 100755 index 0000000..3ab63e2 Binary files /dev/null and b/livecd/isolinux/menu.c32 differ diff --git a/livecd/isolinux/poweroff.c32 b/livecd/isolinux/poweroff.c32 new file mode 100755 index 0000000..eca2e48 Binary files /dev/null and b/livecd/isolinux/poweroff.c32 differ diff --git a/livecd/isolinux/reboot.c32 b/livecd/isolinux/reboot.c32 new file mode 100755 index 0000000..969244e Binary files /dev/null and b/livecd/isolinux/reboot.c32 differ diff --git a/livecd/virootfs/etc/fstab b/livecd/virootfs/etc/fstab new file mode 100755 index 0000000..94d59bb --- /dev/null +++ b/livecd/virootfs/etc/fstab @@ -0,0 +1,13 @@ +# Begin /etc/fstab + +# modified for liveiso + +# file system mount-point type options dump fsck +# order +proc /proc proc nosuid,noexec,nodev 0 0 +sysfs /sys sysfs nosuid,noexec,nodev 0 0 +devpts /dev/pts devpts gid=5,mode=620 0 0 +tmpfs /run tmpfs defaults 0 0 +devtmpfs /dev devtmpfs mode=0755,nosuid 0 0 + +# End /etc/fstab diff --git a/livecd/virootfs/etc/issue b/livecd/virootfs/etc/issue new file mode 100755 index 0000000..394e19e --- /dev/null +++ b/livecd/virootfs/etc/issue @@ -0,0 +1,17 @@ +Linux From Scratch 8.3 \r (\l) + +login: + root : root + +networking (wired): + sed "s/eth0//" -i /etc/sysconfig/ifconfig.wired + ifup wired + +networking (wifi): + sed "s/wlan0//" -i /etc/sysconfig/ifconfig.wifi + ifup wifi + +project page: + https://github.com/emmett1/lfs-scripts + + diff --git a/livecd/virootfs/root/custom_script.sh b/livecd/virootfs/root/custom_script.sh new file mode 100755 index 0000000..bf04b14 --- /dev/null +++ b/livecd/virootfs/root/custom_script.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +#USER=mylfs +#PASSWORD=mylfs + +#useradd -m -G users,wheel,audio,video -s /bin/bash $USER +#passwd -d $USER &>/dev/null +passwd -d root &>/dev/null + +echo "root:root" | chpasswd -c SHA512 +#echo "$USER:$PASSWORD" | chpasswd -c SHA512 + +#chmod -R 775 /home/$USER/.config + + diff --git a/toolchain/01-binutils-pass1 b/toolchain/01-binutils-pass1 new file mode 100755 index 0000000..bdbc2fb --- /dev/null +++ b/toolchain/01-binutils-pass1 @@ -0,0 +1,49 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=binutils +VERSION=${BINUTILS_VER} + +fetch "http://ftp.gnu.org/gnu/binutils/binutils-$BINUTILS_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + mkdir -v build + cd build + + ../configure --prefix=/tools \ + --with-sysroot=$LFS \ + --with-lib-path=/tools/lib \ + --target=$LFS_TGT \ + --disable-nls \ + --disable-werror + make + case $(uname -m) in + x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;; + esac + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/02-gcc-pass1 b/toolchain/02-gcc-pass1 new file mode 100755 index 0000000..f891b28 --- /dev/null +++ b/toolchain/02-gcc-pass1 @@ -0,0 +1,92 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=gcc +VERSION=${GCC_VER} + +fetch "http://www.mpfr.org/mpfr-$MPFR_VER/mpfr-$MPFR_VER.tar.xz" $SRC +fetch "https://ftp.gnu.org/gnu/mpc/mpc-$MPC_VER.tar.gz" $SRC +fetch "http://ftp.gnu.org/gnu/gmp/gmp-$GMP_VER.tar.xz" $SRC +fetch "http://ftp.gnu.org/gnu/gcc/gcc-$GCC_VER/gcc-$GCC_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP +tar -xf $SRC/mpfr-$MPFR_VER.tar.xz -C $TMP/$NAME-$VERSION +tar -xf $SRC/gmp-$GMP_VER.tar.xz -C $TMP/$NAME-$VERSION +tar -xf $SRC/mpc-$MPC_VER.tar.gz -C $TMP/$NAME-$VERSION + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + mv -v mpfr-$MPFR_VER mpfr + mv -v gmp-$GMP_VER gmp + mv -v mpc-$MPC_VER mpc + + for file in gcc/config/{linux,i386/linux{,64}}.h + do + cp -uv $file{,.orig} + sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \ + -e 's@/usr@/tools@g' $file.orig > $file + echo ' + #undef STANDARD_STARTFILE_PREFIX_1 + #undef STANDARD_STARTFILE_PREFIX_2 + #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/" + #define STANDARD_STARTFILE_PREFIX_2 ""' >> $file + touch $file.orig + done + + case $(uname -m) in + x86_64) + sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 + ;; + esac + + mkdir -v build + cd build + + ../configure \ + --target=$LFS_TGT \ + --prefix=/tools \ + --with-glibc-version=2.11 \ + --with-sysroot=$LFS \ + --with-newlib \ + --without-headers \ + --with-local-prefix=/tools \ + --with-native-system-header-dir=/tools/include \ + --disable-nls \ + --disable-shared \ + --disable-multilib \ + --disable-decimal-float \ + --disable-threads \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libmpx \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libvtv \ + --disable-libstdcxx \ + --enable-languages=c,c++ + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/03-linux-api-headers b/toolchain/03-linux-api-headers new file mode 100755 index 0000000..4f85de8 --- /dev/null +++ b/toolchain/03-linux-api-headers @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=linux +VERSION=${LINUX_VER} + +fetch "https://www.kernel.org/pub/linux/kernel/v4.x/linux-$LINUX_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + make mrproper + make INSTALL_HDR_PATH=dest headers_install + cp -rv dest/include/* /tools/include + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/04-glibc b/toolchain/04-glibc new file mode 100755 index 0000000..3100299 --- /dev/null +++ b/toolchain/04-glibc @@ -0,0 +1,48 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=glibc +VERSION=${GLIBC_VER} + +fetch "http://ftp.gnu.org/gnu/glibc/glibc-$GLIBC_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + mkdir -v build + cd build + + ../configure \ + --prefix=/tools \ + --host=$LFS_TGT \ + --build=$(../scripts/config.guess) \ + --enable-kernel=3.2 \ + --with-headers=/tools/include \ + libc_cv_forced_unwind=yes \ + libc_cv_c_cleanup=yes + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/05-libstdc++ b/toolchain/05-libstdc++ new file mode 100755 index 0000000..476299d --- /dev/null +++ b/toolchain/05-libstdc++ @@ -0,0 +1,48 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=gcc +VERSION=${GCC_VER} + +fetch "http://ftp.gnu.org/gnu/gcc/gcc-$GCC_VER/gcc-$GCC_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + mkdir -v build + cd build + + ../libstdc++-v3/configure \ + --host=$LFS_TGT \ + --prefix=/tools \ + --disable-multilib \ + --disable-nls \ + --disable-libstdcxx-threads \ + --disable-libstdcxx-pch \ + --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/$GCC_VER + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/06-binutils-pass2 b/toolchain/06-binutils-pass2 new file mode 100755 index 0000000..a941e13 --- /dev/null +++ b/toolchain/06-binutils-pass2 @@ -0,0 +1,52 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=binutils +VERSION=${BINUTILS_VER} + +fetch "http://ftp.gnu.org/gnu/binutils/binutils-$BINUTILS_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + mkdir -v build + cd build + + CC=$LFS_TGT-gcc \ + AR=$LFS_TGT-ar \ + RANLIB=$LFS_TGT-ranlib \ + ../configure \ + --prefix=/tools \ + --disable-nls \ + --disable-werror \ + --with-lib-path=/tools/lib \ + --with-sysroot + make + make install + make -C ld clean + make -C ld LIB_PATH=/usr/lib:/lib + cp -v ld/ld-new /tools/bin + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/07-gcc-pass2 b/toolchain/07-gcc-pass2 new file mode 100755 index 0000000..a0b3ab9 --- /dev/null +++ b/toolchain/07-gcc-pass2 @@ -0,0 +1,87 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=gcc +VERSION=${GCC_VER} + +fetch "http://www.mpfr.org/mpfr-$MPFR_VER/mpfr-$MPFR_VER.tar.xz" $SRC +fetch "https://ftp.gnu.org/gnu/mpc/mpc-$MPC_VER.tar.gz" $SRC +fetch "http://ftp.gnu.org/gnu/gmp/gmp-$GMP_VER.tar.xz" $SRC +fetch "http://ftp.gnu.org/gnu/gcc/gcc-$GCC_VER/gcc-$GCC_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP +tar -xf $SRC/mpfr-$MPFR_VER.tar.xz -C $TMP/$NAME-$VERSION +tar -xf $SRC/gmp-$GMP_VER.tar.xz -C $TMP/$NAME-$VERSION +tar -xf $SRC/mpc-$MPC_VER.tar.gz -C $TMP/$NAME-$VERSION + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ + `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h + + for file in gcc/config/{linux,i386/linux{,64}}.h + do + cp -uv $file{,.orig} + sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \ + -e 's@/usr@/tools@g' $file.orig > $file + echo ' + #undef STANDARD_STARTFILE_PREFIX_1 + #undef STANDARD_STARTFILE_PREFIX_2 + #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/" + #define STANDARD_STARTFILE_PREFIX_2 ""' >> $file + touch $file.orig + done + + case $(uname -m) in + x86_64) + sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 + ;; + esac + + mv -v mpfr-$MPFR_VER mpfr + mv -v gmp-$GMP_VER gmp + mv -v mpc-$MPC_VER mpc + + mkdir -v build + cd build + + CC=$LFS_TGT-gcc \ + CXX=$LFS_TGT-g++ \ + AR=$LFS_TGT-ar \ + RANLIB=$LFS_TGT-ranlib \ + ../configure \ + --prefix=/tools \ + --with-local-prefix=/tools \ + --with-native-system-header-dir=/tools/include \ + --enable-languages=c,c++ \ + --disable-libstdcxx-pch \ + --disable-multilib \ + --disable-bootstrap \ + --disable-libgomp + make + make install + ln -sv gcc /tools/bin/cc + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/08-tcl b/toolchain/08-tcl new file mode 100755 index 0000000..afcb520 --- /dev/null +++ b/toolchain/08-tcl @@ -0,0 +1,42 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=tcl +VERSION=${TCL_VER} + +fetch "https://downloads.sourceforge.net/tcl/tcl$TCL_VER-src.tar.gz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/${NAME}${VERSION} + + cd unix + ./configure --prefix=/tools + make + make install + chmod -v u+w /tools/lib/libtcl8.6.so + make install-private-headers + ln -sv tclsh8.6 /tools/bin/tclsh + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/09-expect b/toolchain/09-expect new file mode 100755 index 0000000..4ea0a97 --- /dev/null +++ b/toolchain/09-expect @@ -0,0 +1,42 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=expect +VERSION=${EXPECT_VER} + +fetch "https://prdownloads.sourceforge.net/expect/expect$EXPECT_VER.tar.gz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/${NAME}${VERSION} + + cp -v configure{,.orig} + sed 's:/usr/local/bin:/bin:' configure.orig > configure + ./configure --prefix=/tools \ + --with-tcl=/tools/lib \ + --with-tclinclude=/tools/include + make + make SCRIPTS="" install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/10-dejagnu b/toolchain/10-dejagnu new file mode 100755 index 0000000..90200a4 --- /dev/null +++ b/toolchain/10-dejagnu @@ -0,0 +1,37 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=dejagnu +VERSION=${DEJAGNU_VER} + +fetch "http://ftp.gnu.org/gnu/dejagnu/dejagnu-$DEJAGNU_VER.tar.gz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/11-m4 b/toolchain/11-m4 new file mode 100755 index 0000000..6ebd221 --- /dev/null +++ b/toolchain/11-m4 @@ -0,0 +1,42 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=m4 +VERSION=${M4_VER} + +fetch "http://ftp.gnu.org/gnu/m4/m4-$M4_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + # fixes required by glibc-2.28 + sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c + echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/12-ncurses b/toolchain/12-ncurses new file mode 100755 index 0000000..6b55d44 --- /dev/null +++ b/toolchain/12-ncurses @@ -0,0 +1,45 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=ncurses +VERSION=${NCURSES_VER} + +fetch "http://ftp.gnu.org/gnu/ncurses/ncurses-$NCURSES_VER.tar.gz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + sed -i s/mawk// configure + + ./configure --prefix=/tools \ + --with-shared \ + --without-debug \ + --without-ada \ + --enable-widec \ + --enable-overwrite + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/13-bash b/toolchain/13-bash new file mode 100755 index 0000000..a3e85aa --- /dev/null +++ b/toolchain/13-bash @@ -0,0 +1,39 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=bash +VERSION=${BASH_VER} + +fetch "http://ftp.gnu.org/gnu/bash/bash-$BASH_VER.tar.gz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools --without-bash-malloc + make + make install + ln -sv bash /tools/bin/sh + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/14-bison b/toolchain/14-bison new file mode 100755 index 0000000..d472aad --- /dev/null +++ b/toolchain/14-bison @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=bison +VERSION=${BISON_VER} + +fetch "http://ftp.gnu.org/gnu/bison/bison-$BISON_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/15-bzip2 b/toolchain/15-bzip2 new file mode 100755 index 0000000..6025071 --- /dev/null +++ b/toolchain/15-bzip2 @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=bzip2 +VERSION=${BZIP_VER} + +fetch "http://anduin.linuxfromscratch.org/LFS/bzip2-$BZIP_VER.tar.gz" $SRC +#fetch "http://www.bzip.org/$BZIP_VER/bzip2-$BZIP_VER.tar.gz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + make + make PREFIX=/tools install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/16-coreutils b/toolchain/16-coreutils new file mode 100755 index 0000000..1684de9 --- /dev/null +++ b/toolchain/16-coreutils @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=coreutils +VERSION=${COREUTILS_VER} + +fetch "http://ftp.gnu.org/gnu/coreutils/coreutils-$COREUTILS_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools --enable-install-program=hostname + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/17-diffutils b/toolchain/17-diffutils new file mode 100755 index 0000000..dd23241 --- /dev/null +++ b/toolchain/17-diffutils @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=diffutils +VERSION=${DIFFUTILS_VER} + +fetch "http://ftp.gnu.org/gnu/diffutils/diffutils-$DIFFUTILS_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/18-file b/toolchain/18-file new file mode 100755 index 0000000..f54c573 --- /dev/null +++ b/toolchain/18-file @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=file +VERSION=${FILE_VER} + +fetch "ftp://ftp.astron.com/pub/file/file-$FILE_VER.tar.gz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/19-findutils b/toolchain/19-findutils new file mode 100755 index 0000000..bd46cca --- /dev/null +++ b/toolchain/19-findutils @@ -0,0 +1,43 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=findutils +VERSION=${FINDUTILS_VER} + +fetch "http://ftp.gnu.org/gnu/findutils/findutils-$FINDUTILS_VER.tar.gz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + # fixes required by glibc-2.28 + sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' gl/lib/*.c + sed -i '/unistd/a #include ' gl/lib/mountlist.c + echo "#define _IO_IN_BACKUP 0x100" >> gl/lib/stdio-impl.h + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/20-gawk b/toolchain/20-gawk new file mode 100755 index 0000000..0b9c215 --- /dev/null +++ b/toolchain/20-gawk @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=gawk +VERSION=${GAWK_VER} + +fetch "http://ftp.gnu.org/gnu/gawk/gawk-$GAWK_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/21-gettext b/toolchain/21-gettext new file mode 100755 index 0000000..3eb9440 --- /dev/null +++ b/toolchain/21-gettext @@ -0,0 +1,43 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=gettext +VERSION=${GETTEXT_VER} + +fetch "http://ftp.gnu.org/gnu/gettext/gettext-$GETTEXT_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + cd gettext-tools + EMACS="no" ./configure --prefix=/tools --disable-shared + make -C gnulib-lib + make -C intl pluralx.c + make -C src msgfmt + make -C src msgmerge + make -C src xgettext + cp -v src/{msgfmt,msgmerge,xgettext} /tools/bin + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/22-grep b/toolchain/22-grep new file mode 100755 index 0000000..eb0db14 --- /dev/null +++ b/toolchain/22-grep @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=grep +VERSION=${GREP_VER} + +fetch "http://ftp.gnu.org/gnu/grep/grep-$GREP_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/23-gzip b/toolchain/23-gzip new file mode 100755 index 0000000..258f7b2 --- /dev/null +++ b/toolchain/23-gzip @@ -0,0 +1,42 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=gzip +VERSION=${GZIP_VER} + +fetch "http://ftp.gnu.org/gnu/gzip/gzip-$GZIP_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + #fixes required by glibc-2.28 + sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c + echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/24-make b/toolchain/24-make new file mode 100755 index 0000000..3fafae4 --- /dev/null +++ b/toolchain/24-make @@ -0,0 +1,39 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=make +VERSION=${MAKE_VER} + +fetch "http://ftp.gnu.org/gnu/make/make-$MAKE_VER.tar.bz2" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + sed -i '211,217 d; 219,229 d; 232 d' glob/glob.c + ./configure --prefix=/tools --without-guile + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/25-patch b/toolchain/25-patch new file mode 100755 index 0000000..7d38049 --- /dev/null +++ b/toolchain/25-patch @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=patch +VERSION=${PATCH_VER} + +fetch "http://ftp.gnu.org/gnu/patch/patch-$PATCH_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/26-perl b/toolchain/26-perl new file mode 100755 index 0000000..522a0b0 --- /dev/null +++ b/toolchain/26-perl @@ -0,0 +1,40 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=perl +VERSION=${PERL_VER} + +fetch "https://www.cpan.org/src/5.0/perl-$PERL_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + sh Configure -des -Dprefix=/tools -Dlibs=-lm + make + cp -v perl cpan/podlators/scripts/pod2man /tools/bin + mkdir -pv /tools/lib/perl5/$VERSION + cp -Rv lib/* /tools/lib/perl5/$VERSION + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/27-sed b/toolchain/27-sed new file mode 100755 index 0000000..84a70d1 --- /dev/null +++ b/toolchain/27-sed @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=sed +VERSION=${SED_VER} + +fetch "http://ftp.gnu.org/gnu/sed/sed-$SED_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/28-tar b/toolchain/28-tar new file mode 100755 index 0000000..d86278e --- /dev/null +++ b/toolchain/28-tar @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=tar +VERSION=${TAR_VER} + +fetch "http://ftp.gnu.org/gnu/tar/tar-$TAR_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/29-texinfo b/toolchain/29-texinfo new file mode 100755 index 0000000..e582caa --- /dev/null +++ b/toolchain/29-texinfo @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=texinfo +VERSION=${TEXINFO_VER} + +fetch "http://ftp.gnu.org/gnu/texinfo/texinfo-$TEXINFO_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/30-util-linux b/toolchain/30-util-linux new file mode 100755 index 0000000..a2f6d64 --- /dev/null +++ b/toolchain/30-util-linux @@ -0,0 +1,43 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=util-linux +VERSION=${UTILLINUX_VER} + +fetch "https://www.kernel.org/pub/linux/utils/util-linux/v${UTILLINUX_VER::4}/util-linux-$UTILLINUX_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools \ + --without-python \ + --disable-makeinstall-chown \ + --without-systemdsystemunitdir \ + --without-ncurses \ + PKG_CONFIG="" + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/31-xz b/toolchain/31-xz new file mode 100755 index 0000000..a5abb09 --- /dev/null +++ b/toolchain/31-xz @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=xz +VERSION=${XZ_VER} + +fetch "https://tukaani.org/xz/xz-$XZ_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/32-openssl b/toolchain/32-openssl new file mode 100755 index 0000000..ff9f5b3 --- /dev/null +++ b/toolchain/32-openssl @@ -0,0 +1,42 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=openssl +VERSION=${OPENSSL_VER} + +fetch "https://openssl.org/source/openssl-$OPENSSL_VER.tar.gz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./config --prefix=/tools \ + --openssldir=/tools/etc/ssl \ + --libdir=lib \ + shared \ + no-ssl3-method + make + make -j1 MANDIR=/tools/share/man MANSUFFIX=ssl install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/33-certs b/toolchain/33-certs new file mode 100755 index 0000000..fbd2fe7 --- /dev/null +++ b/toolchain/33-certs @@ -0,0 +1,160 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=certdata + +fetch "http://anduin.linuxfromscratch.org/BLFS/other/certdata.txt" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP/cert $LOG $SRC + +cp $SRC/$tarballname $TMP/cert + +{ time \ + { + + cd $TMP/cert + + cat > make-cert.pl << "EOF" +#!/usr/bin/perl -w +# Used to generate PEM encoded files from Mozilla certdata.txt. +# Run as ./make-cert.pl > certificate.crt +# +# Parts of this script courtesy of RedHat (mkcabundle.pl) +# +# This script modified for use with single file data (tempfile.cer) extracted +# from certdata.txt, taken from the latest version in the Mozilla NSS source. +# mozilla/security/nss/lib/ckfw/builtins/certdata.txt +# +# Authors: DJ Lucas +# Bruce Dubbs +# +# Version 20120211 +my $certdata = './tempfile.cer'; +open( IN, "cat $certdata|" ) + || die "could not open $certdata"; +my $incert = 0; +while ( ) +{ + if ( /^CKA_VALUE MULTILINE_OCTAL/ ) + { + $incert = 1; + open( OUT, "|openssl x509 -text -inform DER -fingerprint" ) + || die "could not pipe to openssl x509"; + } + elsif ( /^END/ && $incert ) + { + close( OUT ); + $incert = 0; + print "\n\n"; + } + elsif ($incert) + { + my @bs = split( /\\/ ); + foreach my $b (@bs) + { + chomp $b; + printf( OUT "%c", oct($b) ) unless $b eq ''; + } + } +} +EOF + chmod +x make-cert.pl + cat > make-ca.sh << "EOF" +#!/bin/sh +# Begin make-ca.sh +# Script to populate OpenSSL's CApath from a bundle of PEM formatted CAs +# +# The file certdata.txt must exist in the local directory +# Version number is obtained from the version of the data. +# +# Authors: DJ Lucas +# Bruce Dubbs +# +# Version 20120211 +certdata="certdata.txt" +if [ ! -r $certdata ]; then + echo "$certdata must be in the local directory" + exit 1 +fi +REVISION=$(grep CVS_ID $certdata | cut -f4 -d'$') +if [ -z "${REVISION}" ]; then + echo "$certfile has no 'Revision' in CVS_ID" + exit 1 +fi +VERSION=$(echo $REVISION | cut -f2 -d" ") +TEMPDIR=$(mktemp -d) +TRUSTATTRIBUTES="CKA_TRUST_SERVER_AUTH" +BUNDLE="BLFS-ca-bundle.crt" +CONVERTSCRIPT="${PWD}/make-cert.pl" +SSLDIR="/tools/etc/ssl" +mkdir "${TEMPDIR}/certs" +# Get a list of starting lines for each cert +CERTBEGINLIST=$(grep -n "^# Certificate" "${certdata}" | cut -d ":" -f1) +# Get a list of ending lines for each cert +CERTENDLIST=`grep -n "^CKA_TRUST_STEP_UP_APPROVED" "${certdata}" | cut -d ":" -f 1` +# Start a loop +for certbegin in ${CERTBEGINLIST}; do + for certend in ${CERTENDLIST}; do + if test "${certend}" -gt "${certbegin}"; then + break + fi + done + # Dump to a temp file with the name of the file as the beginning line number + sed -n "${certbegin},${certend}p" "${certdata}" > "${TEMPDIR}/certs/${certbegin}.tmp" +done +unset CERTBEGINLIST CERTDATA CERTENDLIST certbegin certend +mkdir -p certs +rm -f certs/* # Make sure the directory is clean +for tempfile in ${TEMPDIR}/certs/*.tmp; do + # Make sure that the cert is trusted... + grep "CKA_TRUST_SERVER_AUTH" "${tempfile}" | \ + egrep "TRUST_UNKNOWN|NOT_TRUSTED" > /dev/null + if test "${?}" = "0"; then + # Throw a meaningful error and remove the file + cp "${tempfile}" tempfile.cer + perl ${CONVERTSCRIPT} > tempfile.crt + keyhash=$(openssl x509 -noout -in tempfile.crt -hash) + echo "Certificate ${keyhash} is not trusted! Removing..." + rm -f tempfile.cer tempfile.crt "${tempfile}" + continue + fi + # If execution made it to here in the loop, the temp cert is trusted + # Find the cert data and generate a cert file for it + cp "${tempfile}" tempfile.cer + perl ${CONVERTSCRIPT} > tempfile.crt + keyhash=$(openssl x509 -noout -in tempfile.crt -hash) + mv tempfile.crt "certs/${keyhash}.pem" + rm -f tempfile.cer "${tempfile}" + echo "Created ${keyhash}.pem" +done +# Remove blacklisted files +# MD5 Collision Proof of Concept CA +if test -f certs/8f111d69.pem; then + echo "Certificate 8f111d69 is not trusted! Removing..." + rm -f certs/8f111d69.pem +fi +# Finally, generate the bundle and clean up. +cat certs/*.pem > ${BUNDLE} +rm -r "${TEMPDIR}" +EOF + chmod +x make-ca.sh + ./make-ca.sh + install -v -m644 BLFS-ca-bundle.crt /tools/etc/ssl/certs/ca-certificates.crt + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME" > /tools/$filename || exit $PIPESTATUS + +#rm -fr $TMP diff --git a/toolchain/34-zlib b/toolchain/34-zlib new file mode 100755 index 0000000..dbf0756 --- /dev/null +++ b/toolchain/34-zlib @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=zlib +VERSION=${ZLIB_VER} + +fetch "https://zlib.net/zlib-$ZLIB_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/35-wget b/toolchain/35-wget new file mode 100755 index 0000000..17f0721 --- /dev/null +++ b/toolchain/35-wget @@ -0,0 +1,44 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=wget +VERSION=${WGET_VER} + +fetch "https://ftp.gnu.org/gnu/wget/wget-$WGET_VER.tar.gz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools \ + --with-ssl=openssl \ + --without-libidn \ + --without-libpsl \ + --without-metalink + make + make install + + echo "ca_certificate = /tools/etc/ssl/certs/ca-certificates.crt" > /tools/etc/wgetrc + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/36-nano b/toolchain/36-nano new file mode 100755 index 0000000..7ebab16 --- /dev/null +++ b/toolchain/36-nano @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME=nano +VERSION=${NANO_VER} + +fetch "https://www.nano-editor.org/dist/v3/nano-$NANO_VER.tar.xz" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + ./configure --prefix=/tools + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP diff --git a/toolchain/99-cleaning b/toolchain/99-cleaning new file mode 100755 index 0000000..645dd6a --- /dev/null +++ b/toolchain/99-cleaning @@ -0,0 +1,8 @@ +#!/bin/bash + +[ "$1" = "fetch" ] && exit 0 + +strip --strip-debug /tools/lib/* +/usr/bin/strip --strip-unneeded /tools/{,s}bin/* +rm -rf /tools/{,share}/{info,man,doc} +find /tools/{lib,libexec} -name \*.la -delete diff --git a/toolchain/bootstrap b/toolchain/bootstrap new file mode 100755 index 0000000..6d04a45 --- /dev/null +++ b/toolchain/bootstrap @@ -0,0 +1,25 @@ +#!/bin/bash -e + +source $(dirname $0)/functions + +for script in $(ls | grep ^[0-9]); do + if [ "$1" = "fetch" ]; then + $(dirname $0)/$script "$1" + elif [ -f /tools/"$script" ]; then + echo "--- $script skipped ---" + else + echo "*** $script ***" + $(dirname $0)/$script + echo; echo "*** $script done ***"; echo + [ "$1" = $(echo $script | cut -d - -f1) ] && exit + fi +done + +[ "$1" = "fetch" ] && exit 0 + +sudo chown -Rv 0:0 $LFS + +echo +echo "**************************************************" +echo "********* Toolchain build complete *********" +echo "**************************************************" diff --git a/toolchain/functions b/toolchain/functions new file mode 100755 index 0000000..d85c718 --- /dev/null +++ b/toolchain/functions @@ -0,0 +1,49 @@ +# functions and variable loaded by scripts + +JOBS=$(nproc) +export MAKEFLAGS="-j${JOBS}" +export LFS="/mnt/lfs" +export LFS_TGT=$(uname -m)-lfs-linux-gnu + +PATH=/tools/bin:/bin:/usr/bin + +export LC_ALL=C + +fetch() { + + tarballname=$(echo $1 | rev | cut -d / -f 1 | rev) + WGETCMD="wget --passive-ftp --tries=3 --waitretry=3 --output-document=$2/$tarballname.partial" + WGETRESUME="-c" + + if [ -f $2/$tarballname ]; then + echo "Source file $tarballname found." + return 0 + else + if [ -f $2/$tarballname.partial ]; then + echo "Resuming $1" + $WGETCMD $WGETRESUME $1 + else + mkdir -p "$2" + echo "Downloading $1" + $WGETCMD $1 + fi + fi + + if [ $? = 0 ]; then + mv $2/$tarballname.partial $2/$tarballname + fi + +} + +if [ ! -d $LFS/tools ]; then + sudo mkdir -pv $LFS/tools +fi + +if [ ! -w $LFS ]; then + sudo chown -Rv $USER:$USER $LFS +fi + +if [ ! -L /tools ] || [ $(realpath /tools) != $LFS/tools ]; then + sudo ln -svf $LFS/tools / +fi + diff --git a/toolchain/pkgversion b/toolchain/pkgversion new file mode 100755 index 0000000..9c79e82 --- /dev/null +++ b/toolchain/pkgversion @@ -0,0 +1,36 @@ +BINUTILS_VER=2.31.1 +GCC_VER=8.2.0 +GMP_VER=6.1.2 +MPFR_VER=4.0.1 +MPC_VER=1.1.0 +LINUX_VER=4.19.2 +GLIBC_VER=2.28 +TCL_VER=8.6.9 +EXPECT_VER=5.45.4 +DEJAGNU_VER=1.6.1 +M4_VER=1.4.18 +NCURSES_VER=6.1 +BASH_VER=4.4.18 +BISON_VER=3.2.1 +BZIP_VER=1.0.6 +COREUTILS_VER=8.30 +DIFFUTILS_VER=3.6 +FILE_VER=5.35 +FINDUTILS_VER=4.6.0 +GAWK_VER=4.2.1 +GETTEXT_VER=0.19.8.1 +GREP_VER=3.1 +GZIP_VER=1.9 +MAKE_VER=4.2.1 +PATCH_VER=2.7.6 +PERL_VER=5.28.0 +SED_VER=4.5 +TAR_VER=1.30 +TEXINFO_VER=6.5 +UTILLINUX_VER=2.33 +XZ_VER=5.2.4 +OPENSSL_VER=1.0.2q +ZLIB_VER=1.2.11 +WGET_VER=1.19.5 +NANO_VER=3.2 + diff --git a/toolchain/template b/toolchain/template new file mode 100755 index 0000000..983a5ea --- /dev/null +++ b/toolchain/template @@ -0,0 +1,38 @@ +#!/bin/bash -e + +source $(dirname $0)/functions +source $(dirname $0)/pkgversion + +filename=$(echo $0 | rev | cut -d / -f1 | rev) + +TMP=${TMP:-/tmp/build} +LOG=${LOG:-$(dirname $0)/log} +SRC=${SRC:-$(dirname $0)/src} + +NAME= +VERSION=${_VER} + +fetch "urlhere" $SRC + +[ "$1" = "fetch" ] && exit 0 + +rm -fr $TMP +mkdir -p $TMP $LOG $SRC + +tar xf $SRC/$tarballname -C $TMP + +{ time \ + { + + cd $TMP/$NAME-$VERSION + + + make + make install + + } +} 2>&1 | tee $LOG/$filename.log + +[ $PIPESTATUS = 0 ] && echo "$NAME-$VERSION" > /tools/$filename || exit $PIPESTATUS + +rm -fr $TMP