1
0
mirror of https://github.com/krglaws/MyLFS.git synced 2025-07-26 15:46:59 +00:00

working on massive rewrite

This commit is contained in:
Kyle Glaws
2022-03-26 17:55:10 -04:00
parent a9ff53703c
commit 59f094cc23
165 changed files with 822 additions and 1620 deletions

View File

@ -9,10 +9,8 @@ then
exit -1
fi
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)"
source $SCRIPT_DIR/config/global.sh
echo "Cleaning LFS image..."
cd $(dirname $0)
source ./config.sh
# unmount $LFS
if [ -n "$(mount | grep $LFS)" ]
@ -32,10 +30,14 @@ fi
if [ -f $LFS_IMG ]
then
read -p "WARNING: This will delete ${LFS_IMG}. Continue? (Y/N): " CONFIRM
[[ $CONFIRM == [yY] || $CONFIRM == [yY][eE][sS] ]] || exit
[[ $CONFIRM == [yY] || $CONFIRM == [yY][eE][sS] ]] || { echo "Cancelled." && exit -1; }
echo "Deleting ${LFS_IMG}..."
rm $LFS_IMG
fi
echo "Done."
# delete logs
if [ -n "$(ls ./logs)" ]
then
rm -rf ./logs/*log ./logs/*gz
fi

37
config.sh Normal file
View File

@ -0,0 +1,37 @@
# #######################
# LFS Build Configuration
# ~~~~~~~~~~~~~~~~~~~~~~~
FULLPATH=$(cd $(dirname $0) && pwd)
export MAKEFLAGS=-j8
export PACKAGE_LIST=$FULLPATH/pkgs.sh
export PACKAGE_DIR=$FULLPATH/pkgs
export LOG_DIR=$FULLPATH/logs
export LFS=/mnt/lfs
export LFS_TGT=$(uname -m)-lfs-linux-gnu
export LFS_FS=ext4
export LFS_IMG=$FULLPATH/lfs.img
export LFS_IMG_SIZE=$((10*1024*1024*1024)) # 10 GiB
export ROOT_PASSWD=password
export RUN_TESTS=false
export BUILDLOG_DIR=$FULLPATH/buildlogs
export TESTLOG_DIR=$FULLPATH/testlogs
export LFSHOSTNAME=lfs
export LFSROOTLABEL=LFSROOT
export LFSEFILABEL=LFSEFI
export LFSFSTYPE=ext4
KEYS="MAKEFLAGS PACKAGE_LIST PACKAGE_DIR LOG_DIR"\
" LFS LFS_TGT LFS_FS LFS_IMG LFS_IMG_SIZE ROOT_PASSWD RUN_TESTS TESTLOG_DIR"\
" LFSHOSTNAME LFSROOTLABEL LFSEFILABEL LFSFSTYPE"
for KEY in $KEYS
do
if [ -z ${!KEY} ]
then
echo "ERROR: '$KEY' config is not set."
exit -1
fi
done

View File

@ -1,38 +0,0 @@
# LFS Build Configuration
# ~~~~~~~~~~~~~~~~~~~~~~~
# This file should be sourced by the other scripts
# that need these variables.
export CONF_DIR=$(cd $(dirname $BASH_SOURCE) && pwd)
export MAIN_DIR=$(dirname $CONF_DIR)
export GLOBAL_CONF=$CONF_DIR/global.sh
export USER_CONF=$CONF_DIR/user.sh
export MAKEFLAGS=-j4
export PACKAGE_LIST=$CONF_DIR/pkgs.sh
export LFS=/mnt/lfs
export LFS_TGT=$(uname -m)-lfs-linux-gnu
export LFS_FS=ext4
export LFS_IMG=$MAIN_DIR/lfs.img
export LFS_IMG_SIZE=$((10*1024*1024*1024)) # 10 GiB
export LFS_USER=lfs
export ROOT_PASSWD=password
export RUN_TESTS=false
export TESTLOG_DIR=/sources/tests
export HOSTNAME=lfs
export LFSROOTLABEL=lfsroot
export LFSEFILABEL=lfsefi
export LFSFSTYPE=ext4
KEYS="CONF_DIR MAIN_DIR GLOBAL_CONF USER_CONF MAKEFLAGS PACKAGE_LIST"\
" LFS LFS_TGT LFS_FS LFS_IMG LFS_IMG_SIZE LFS_USER ROOT_PASSWD RUN_TESTS TESTLOG_DIR"\
" HOSTNAME LFSROOTLABEL LFSEFILABEL LFSFSTYPE"
for KEY in $KEYS
do
if [ -z ${!KEY} ]
then
echo "ERROR: '$KEY' config is not set."
exit -1
fi
done

View File

@ -1,31 +0,0 @@
# LFS User shell configuration file.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
set +h
umask 022
PATH=/usr/bin
if [ ! -L /bin ]
then
PATH=/bin:$PATH
fi
PATH=$LFS/tools/bin:$PATH
CONFIG_SITE=$LFS/usr/share/config.site
LC_ALL=POSIX
function build_package {
PACKAGE_NAME=$1
BUILD_SCRIPT=$2
BUILD_LOG=$3
echo -n "Building ${PACKAGE_NAME}... "
if ! { $BUILD_SCRIPT &> $BUILD_LOG && rm $BUILD_LOG && echo "done."; }
then
echo "failed. Check $BUILD_LOG for more information."
exit -1
fi
}
export -f build_package
export LC_ALL PATH CONFIG_SITE

2
logs/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*
!.gitignore

546
main.sh
View File

@ -1,30 +1,540 @@
#!/usr/bin/env bash
# main.sh
# ~~~~~~~
# This is the main entry point for this project.
set -e
if [ "$UID" != "0" ]
then
echo "ERROR: $0 must be run as root."
exit -1
fi
cd $(dirname $0)
source ./config/global.sh
source ./config.sh
function build_stage {
local STAGE_NO=$1
while read pkg;
do
eval $pkg
export $(echo $pkg | cut -d"=" -f1)
done < ./pkgs.sh
echo "Starting stage $STAGE_NO... "
./clean_img.sh
{ ./stage$STAGE_NO/main.sh && echo "Completed stage $STAGE_NO."; } ||
{ echo "Stage $STAGE_NO failed." && exit -1; }
# #########
# Functions
# ~~~~~~~~~
function compare_version {
local MINVERS=$1
local CURRVERS=$2
local NDIGS=$(echo $MINVERS | tr . ' ' | wc -w)
for ((FIELD=1; FIELD < NDIGS; FIELD++))
do
MINDIGIT=$(echo $MINVERS | cut -d"." -f$FIELD)
CURRDIGIT=$(echo $CURRVERS | cut -d"." -f$FIELD)
if [[ "0x$CURRDIGIT" -gt "0x$MINDIGIT" ]]
then
return 0
elif [[ "0x$CURRDIGIT" -eq "0x$MINDIGIT" ]]
then
continue
else
return -1
fi
done
return 0
}
for ((STAGE = 1; STAGE <= 6; STAGE++))
function check_dependency {
local PROG=$1
local MINVERS=$2
local CURRVERSFIELD=$3
if ! command -v $PROG 1 > /dev/null
then
echo "ERROR: '$PROG' not found"
return -1
fi
CURRVERS=$($PROG --version 2>&1 | head -n1 | cut -d" " -f$CURRVERSFIELD | cut -d"(" -f1 | cut -d"," -f1 | cut -d"-" -f1)
CURRVERS=${CURRVERS%"${CURRVERS##*[0-9]}"}
if ! compare_version "$MINVERS" "$CURRVERS"
then
echo "ERROR: $PROG $CURRVERS does not satisfy minimum version $MINVERS"
fi
}
function get_packages {
PACKAGE_URLS=$(cat $PACKAGE_LIST | cut -d"=" -f2)
PACKAGES=$(ls ./pkgs)
# check if packages have already been downloaded
if [ -z "$PACKAGES" ]
then
# no indent because here-doc
wget --quiet --directory-prefix $PACKAGE_DIR --input-file - <<EOF
$PACKAGE_URLS
EOF
fi
cp $PACKAGE_DIR/* $LFS/sources
}
function install_static {
FILENAME=$1
FULLPATH="$LFS/$(basename $FILENAME | sed 's/__/\//g')"
mkdir -p $(dirname $FULLPATH)
cp $FILENAME $FULLPATH
}
function install_template {
FILENAME=$1
FULLPATH="$LFS/$(basename $FILENAME | sed 's/__/\//g')"
mkdir -p $(dirname $FULLPATH)
cp $FILENAME $FULLPATH
shift
for var in $@
do
sed -i "s/$var/${!var}/g" $FULLPATH
done
}
function build_package {
NAME=$1
OVERRIDE=$2
echo -n "Building $NAME phase $PHASE... "
PKG_NAME=PKG_$([ -n "$OVERRIDE" ] && echo $OVERRIDE || echo $NAME | tr a-z A-Z)
PKG_NAME=$(basename ${!PKG_NAME})
PATCH_NAME=PATCH_$([ -n "$OVERRIDE" ] && echo $OVERRIDE || echo $NAME | tr a-z A-Z)
PATCH_NAME=$([ -n "${!PATCH_NAME}" ] && basename ${!PATCH_NAME} || echo "")
DIR_NAME=${PKG_NAME%.tar*}
LOG_FILE=$LOG_DIR/${NAME}_phase${PHASE}.log
BUILD_INSTR="
set -e
pushd sources > /dev/null
tar -xf $PKG_NAME
cd $DIR_NAME
$(cat ./phase${PHASE}/${NAME}.sh)
popd
rm -r sources/$DIR_NAME
"
pushd $LFS > /dev/null
if $CHROOT
then
if ! chroot "$LFS" /usr/bin/env -i \
HOME=/root \
TERM=$TERM \
PATH=/usr/bin:/usr/sbin &> $LOG_FILE \
LFS_TGT=$LFS_TGT \
ROOT_PASSWD=$ROOT_PASSWD \
RUN_TESTS=$RUN_TESTS \
"$(cat $PACKAGE_LIST)" \
/bin/bash +h -c "$BUILD_INSTR" &> $LOG_FILE
then
echo -e "\nERROR: $NAME Phase $PHASE failed:"
tail $LOG_FILE
return -1
fi
elif ! (eval "$BUILD_INSTR") &> $LOG_FILE
then
echo -e "\nERROR: $NAME Phase $PHASE failed:"
tail $LOG_FILE
return -1
fi
popd > /dev/null
(cd $LOG_DIR && gzip $LOG_FILE)
echo "done."
return 0
}
# #########################
# Check system dependencies
# ~~~~~~~~~~~~~~~~~~~~~~~~~
EXIT_STATUS=0
echo -n "Checking system dependencies... "
if ! check_dependency bash 3.2 4; then EXIT_STATUS=-1; fi
if ! check_dependency ld 2.13.1 7; then EXIT_STATUS=-1; fi # binutils
if ! check_dependency bison 2.7 4; then EXIT_STATUS=-1; fi
if ! check_dependency chown 6.9 4; then EXIT_STATUS=-1; fi # coreutils
if ! check_dependency diff 2.8.1 4; then EXIT_STATUS=-1; fi
if ! check_dependency find 4.2.31 4; then EXIT_STATUS=-1; fi
if ! check_dependency gawk 4.0.1 3; then EXIT_STATUS=-1; fi
if ! check_dependency gcc 4.8 4; then EXIT_STATUS=-1; fi
if ! check_dependency g++ 4.8 4; then EXIT_STATUS=-1; fi
if ! check_dependency grep 2.5.1a 4; then EXIT_STATUS=-1; fi
if ! check_dependency gzip 1.3.12 2; then EXIT_STATUS=-1; fi
if ! check_dependency m4 1.4.10 4; then EXIT_STATUS=-1; fi
if ! check_dependency make 4.0 3; then EXIT_STATUS=-1; fi
if ! check_dependency patch 2.5.4 3; then EXIT_STATUS=-1; fi
if ! check_dependency python3 3.4 2; then EXIT_STATUS=-1; fi
if ! check_dependency sed 4.1.5 4; then EXIT_STATUS=-1; fi
if ! check_dependency tar 1.22 4; then EXIT_STATUS=-1; fi
if ! check_dependency makeinfo 4.7 4; then EXIT_STATUS=-1; fi # texinfo
if ! check_dependency xz 5.0.0 4; then EXIT_STATUS=-1; fi
# check that yacc is a link to bison
if [ ! -h /usr/bin/yacc -a "$(readlink -f /usr/bin/yacc)"="/usr/bin/bison.yacc" ]
then
echo "ERROR: /usr/bin/yacc needs to be a link to /usr/bin/bison.yacc"
EXIT_STATUS=-1
fi
# check that awk is a link to gawk
if [ ! -h /usr/bin/awk -a "$(readlink -f /usr/bin/awk)"="/usr/bin/gawk" ]
then
echo "ERROR: /usr/bin/awk needs to be a link to /usr/bin/gawk"
EXIT_STATUS=-1
fi
# check linux version
MIN_LINUX_VERS=3.2
LINUX_VERS=$(cat /proc/version | head -n1 | cut -d" " -f3 | cut -d"-" -f1)
if ! compare_version "$MIN_LINUX_VERSION" "$LINUX_VERS"
then
echo "ERROR: Linux kernel version '$LINUX_VERS' does not satisfy minium version $MIN_LINUX_VERS"
EXIT_STATUS=-1
fi
# check perl version
MIN_PERL_VERS=5.8.8
PERL_VERS=$(perl -V:version | cut -d"'" -f2)
if ! compare_version "$MIN_PERL_VERS" "$PERL_VERS"
then
echo "ERROR: Perl version '$PERL_VERS' does not satisfy minium version $MIN_PERL_VERS"
EXIT_STATUS=-1
fi
# check G++ compilation
echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c
if [ ! -x dummy ]
then
echo "ERROR: g++ compilation failed"
EXIT_STATUS=-1
fi
rm -f dummy.c dummy
echo "done."
[ "$EXIT_STATUS" == "0" ] || exit $EXIT_STATUS
# ####################
# Create OS image file
# ~~~~~~~~~~~~~~~~~~~~
echo -n "Creating image file... "
# create image file
fallocate -l$LFS_IMG_SIZE $LFS_IMG
# attach loop device
LOOP=$(losetup -f)
losetup $LOOP $LFS_IMG
# partition the device
FDISK_STR="
g # create GPT
n # new partition
# default 1st partition
# default start sector (2048)
+512M # 512 MiB
t # modify parition type
uefi # EFI type
n # new partition
# default 2nd partition
# default start sector
# default end sector
w # write to device and quit
"
FDISK_STR=$(echo "$FDISK_STR" | sed 's/ *#.*//g')
# fdisk fails to get kernel to re-read the partition table
# so ignore non-zero exit code, and manually re-read
set +e
fdisk $LOOP &>> /dev/null <<EOF
$FDISK_STR
EOF
set -e
# reattach loop device to re-read partition table
losetup -d $LOOP
sleep 1 # give the kernel a sec
losetup -P $LOOP $LFS_IMG
LOOP_P1=${LOOP}p1
LOOP_P2=${LOOP}p2
# setup root partition
mkfs -t $LFS_FS $LOOP_P2 &> /dev/null
mkdir -p $LFS
mount $LOOP_P2 $LFS
# setup EFI partition
mkfs.vfat $LOOP_P1 &> /dev/null
mkdir -p $LFS/boot/efi
mount -t vfat $LOOP_P1 $LFS/boot/efi
# label the partitions
dosfslabel $LOOP_P1 $LFSEFILABEL &> /dev/null
e2label $LOOP_P2 $LFSROOTLABEL
echo "done."
# #######################
# Basic file system setup
# ~~~~~~~~~~~~~~~~~~~~~~~
echo -n "Creating basic directory layout... "
mkdir -p $LFS/{bin,boot,dev,etc,home,lib64,media,mnt,opt,proc,run,srv,sys,tools,usr,var}
mkdir -p $LFS/boot/grub
mkdir -p $LFS/etc/{modprobe.d,opt,sysconfig}
mkdir -p $LFS/media/{cdrom,floppy}
mkdir -p $LFS/usr/{bin,lib/{,firmware},sbin}
mkdir -p $LFS/usr/local/{bin,include,lib,sbin,share,src}
mkdir -p $LFS/usr/local/share/{color,dict,doc,info,locale,man,misc,terminfo,zoneinfo}
mkdir -p $LFS/usr/local/share/man/{1..8}
mkdir -p $LFS/var/{cache,lib,local,log,mail,opt,spool}
mkdir -p $LFS/var/lib/{color,misc,locate}
install -d -m 0750 $LFS/root
install -d -m 1777 $LFS/tmp $LFS/var/tmp
# removed at end of build
mkdir -p $LFS/home/tester
chown 101:101 $LFS/home/tester
mkdir -p $LFS/sources
# create symlinks
for i in bin lib sbin
do
build_stage $STAGE
ln -s usr/$i $LFS/$i
done
ln -s /run $LFS/var/run
ln -s /run/lock $LFS/var/lock
ln -s /proc/self/mounts $LFS/etc/mtab
# install static files
echo $LFSHOSTNAME > $LFS/etc/hostname
for file in ./static/*
do
install_static $file
done
# install templates
install_template ./templates/boot__grub__grub.cfg LFSROOTLABEL
install_template ./templates/etc__fstab LFSROOTLABEL LFSEFILABEL LFSFSTYPE
install_template ./templates/etc__hosts LFSHOSTNAME
# make special device files
mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3
# create login log files
touch $LFS/var/log/{btmp,lastlog,faillog,wtmp}
chgrp 13 $LFS/var/log/lastlog
chmod 664 $LFS/var/log/lastlog
chmod 600 $LFS/var/log/btmp
# mount stuff from the host onto the target disk
mount --bind /dev $LFS/dev
mount --bind /dev/pts $LFS/dev/pts
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
echo "done."
echo -n "Downloading packages to $LFS/sources... "
get_packages
echo "done."
# ######################
# Setup environment vars
# ~~~~~~~~~~~~~~~~~~~~~~
TMP_PATH=$PATH
PATH=/usr/bin
if [ ! -L /bin ];
then
PATH=/bin:$PATH;
fi
PATH=$LFS/tools/bin:$PATH
CONFIG_SITE=$LFS/usr/share/config.site
LC_ALL=POSIX
export LC_ALL PATH CONFIG_SITE
echo -e \
"# #######\n"\
"# Phase 1\n"\
"# ~~~~~~~"
CHROOT=false
PHASE=1
build_package binutils
build_package gcc
build_package linux_headers LINUX
build_package glibc
build_package libstdcpp GCC
echo -e \
"# #######\n"\
"# Phase 2\n"\
"# ~~~~~~~"
PHASE=2
build_package m4
build_package ncurses
build_package bash
build_package coreutils
build_package diffutils
build_package file
build_package findutils
build_package gawk
build_package grep
build_package gzip
build_package make
build_package patch
build_package sed
build_package tar
build_package xz
build_package binutils
build_package gcc
echo -e \
"# #######\n"\
"# Phase 3\n"\
"# ~~~~~~~"
PATH=$TMP_PATH
CHROOT=true
PHASE=3
build_package libstdcpp GCC
build_package gettext
build_package bison
build_package perl
build_package python
build_package texinfo
build_package utillinux
# Cleanup
rm -rf $LFS/usr/share/{info,man,doc}/*
find $LFS/usr/{lib,libexec} -name \*.la -delete
rm -rf $LFS/tools
echo -e \
"# #######\n"\
"# Phase 4\n"\
"# ~~~~~~~"
exit
PHASE=4
build_package manpages
build_package ianaetc
build_package glibc
build_package zlib
build_package bzip2
build_package xz
build_package zstd
build_package file
build_package readline
build_package m4
build_package bc
build_package flex
build_package tcl
build_package expect
build_package dejagnu
build_package binutils
build_package gmp
build_package mpfr
build_package mpc
build_package attr
build_package acl
build_package libcap
build_package shadow
build_package gcc
build_package pkgconfig
build_package ncurses
build_package sed
build_package psmisc
build_package gettext
build_package bison
build_package grep
build_package bash
build_package libtool
build_package gdbm
build_package gperf
build_package expat
build_package inetutils
build_package less
build_package perl
build_package xmlparser
build_package intltool
build_package autoconf
build_package automake
build_package openssl
build_package kmod
build_package elfutils
build_package libffi
build_package python
build_package ninja
build_package meson
build_package coreutils
build_package check
build_package diffutils
build_package gawk
build_package findutils
build_package groff
# Skipping GRUB MBR build since we are using UEFI
build_package gzip
build_package iproute2
build_package kbd
build_package libpipeline
build_package make
build_package patch
build_package tar
build_package texinfo
build_package vim
build_package eudev
build_package mandb
build_package procps
build_package utillinux
build_package e2fsprogs
build_package sysklogd
build_package sysvinit
build_package lfsbootscripts
# UEFI Boot Dependencies
build_pakcage popt
build_package mandoc
build_package efivar
build_package efibootmgr
build_package grub
# delete tmp files created during builds
rm -rf $LFS/tmp/*
# delete libtool archives (only useful when linking to static libs)
find $LFS/usr/lib $LFS/usr/libexec -name \*.la -delete
# delete cross compiler tools from previous stages
find $LFS/usr -depth -name $LFS_TGT\* | xargs rm -rf
# remove 'tester' user account
rm -r $LFS/home/tester
sed -i 's/^.*tester.*$//' $LFS/etc/{passwd,group}

15
phase1/binutils.sh Normal file
View File

@ -0,0 +1,15 @@
# Bintuils Phase 1
mkdir build
cd build
../configure \
--prefix=$LFS/tools \
--with-sysroot=$LFS \
--target=$LFS_TGT \
--disable-nls \
--disable-werror
make
make install

25
stage3/gcc.sh → phase1/gcc.sh Executable file → Normal file
View File

@ -1,19 +1,8 @@
#!/usr/bin/env bash
# GCC Stage 3
# ~~~~~~~~~~~
set -e
cd $LFS/sources
eval "$(grep "PKG_GCC\|PKG_MPFR\|PKG_GMP\|PKG_MPC" $PACKAGE_LIST)"
PKG_GCC=$(basename $PKG_GCC)
# GCC Phase 1
PKG_MPFR=$(basename $PKG_MPFR)
PKG_GMP=$(basename $PKG_GMP)
PKG_MPC=$(basename $PKG_MPC)
tar -xf $PKG_GCC
cd ${PKG_GCC%.tar*}
tar -xf ../$PKG_MPFR
mv ${PKG_MPFR%.tar*} mpfr
@ -24,9 +13,9 @@ tar -xf ../$PKG_MPC
mv ${PKG_MPC%.tar*} mpc
case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
;;
x86_64)
sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
;;
esac
mkdir build
@ -57,9 +46,7 @@ make
make install
cd ..
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h
cd $LFS/sources
rm -rf ${PKG_GCC%.tar*}
$(dirname $($LFS_TGT-gcc -print-libgcc-file-name))/install-tools/include/limits.h

20
stage3/glibc.sh → phase1/glibc.sh Executable file → Normal file
View File

@ -1,17 +1,4 @@
#!/usr/bin/env bash
# Glibc Stage 3
# ~~~~~~~~~~~~~
set -e
cd $LFS/sources
eval "$(grep "PKG_GLIBC\|PATCH_GLIBC" $PACKAGE_LIST)"
PKG_GLIBC=$(basename $PKG_GLIBC)
PATCH_GLIBC=$(basename $PATCH_GLIBC)
tar -xf $PKG_GLIBC
cd ${PKG_GLIBC%.tar*}
# Glibc Phase 1
case $(uname -m) in
i?86)
ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
@ -45,7 +32,7 @@ sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd
# check that everything is good
echo 'int main(){}' > dummy.c
$LFS_TGT-gcc dummy.c
OUTPUT=$(readelf -l a.out | grep '/ld-linux')
OUTPUT=$(readelf -l a.out | grep '/ld-linux')
EXPECTED='[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]'
if [[ "$OUTPUT" != *"${EXPECTED}"* ]]
then
@ -58,6 +45,3 @@ rm dummy.c a.out
$LFS/tools/libexec/gcc/$LFS_TGT/11.2.0/install-tools/mkheaders
cd $LFS/sources
rm -rf ${PKG_GLIBC%.tar*}

17
stage3/libstdcpp.sh → phase1/libstdcpp.sh Executable file → Normal file
View File

@ -1,16 +1,4 @@
#!/usr/bin/env bash
# Libstdc++ Stage 3
# ~~~~~~~~~~~~~~~~~
set -e
cd $LFS/sources
eval "$(grep PKG_GCC $PACKAGE_LIST)"
PKG_GCC=$(basename $PKG_GCC)
tar -xf $PKG_GCC
cd ${PKG_GCC%.tar*}
# Libstdc++ Phase 1
mkdir build
cd build
@ -26,6 +14,3 @@ cd build
make
make DESTDIR=$LFS install
cd $LFS/sources
rm -rf ${PKG_GCC%.tar*}

8
phase1/linux_headers.sh Normal file
View File

@ -0,0 +1,8 @@
# Linux API headers Phase 1
make mrproper
make headers
find usr/include -name '.*' -delete
rm usr/include/Makefile
cp -r usr/include $LFS/usr

17
stage4/bash.sh → phase2/bash.sh Executable file → Normal file
View File

@ -1,16 +1,4 @@
#!/usr/bin/env bash
# Bash Stage 4
# ~~~~~~~~~~~~
set -e
cd $LFS/sources
eval "$(grep BASH $PACKAGE_LIST)"
PKG_BASH=$(basename $PKG_BASH)
tar -xf $PKG_BASH
cd ${PKG_BASH%.tar*}
# Bash Phase 2
./configure --prefix=/usr \
--build=$(support/config.guess) \
--host=$LFS_TGT \
@ -20,6 +8,3 @@ make
make DESTDIR=$LFS install
ln -sv bash $LFS/bin/sh
cd $LFS/sources
rm -rf ${PKG_BASH%.tar*}

17
stage4/binutils.sh → phase2/binutils.sh Executable file → Normal file
View File

@ -1,16 +1,4 @@
#!/usr/bin/env bash
# Binutils Stage 4
# ~~~~~~~~~~~~~~~~
set -e
cd $LFS/sources
eval "$(grep BINUTILS $PACKAGE_LIST)"
PKG_BINUTILS=$(basename $PKG_BINUTILS)
tar -xf $PKG_BINUTILS
cd ${PKG_BINUTILS%.tar*}
# Binutils Phase 2
sed '6009s/$add_dir//' -i ltmain.sh
mkdir build
@ -28,6 +16,3 @@ cd build
make
make DESTDIR=$LFS install
cd $LFS/sources
rm -rf ${PKG_BINUTILS%.tar*}

15
phase2/coreutils.sh Normal file
View File

@ -0,0 +1,15 @@
# Coreutils Phase 2
./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(build-aux/config.guess) \
--enable-install-program=hostname \
--enable-no-install-program=kill,uptime
make
make DESTDIR=$LFS install
mv $LFS/usr/bin/chroot $LFS/usr/sbin
mkdir -p $LFS/usr/share/man/man8
mv $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8
sed -i 's/"1"/"8"/' $LFS/usr/share/man/man8/chroot.8

6
phase2/diffutils.sh Normal file
View File

@ -0,0 +1,6 @@
# Diffutils Phase 2
./configure --prefix=/usr --host=$LFS_TGT
make
make DESTDIR=$LFS install

16
stage4/file.sh → phase2/file.sh Executable file → Normal file
View File

@ -1,16 +1,4 @@
#!/usr/bin/env bash
# File Stage 4
# ~~~~~~~~~~~~
set -e
cd $LFS/sources
eval "$(grep FILE $PACKAGE_LIST)"
PKG_FILE=$(basename $PKG_FILE)
tar -xf $PKG_FILE
cd ${PKG_FILE%.tar*}
# File Phase 2
mkdir build
pushd build
../configure --disable-bzlib \
@ -24,5 +12,3 @@ popd
make FILE_COMPILE=$(pwd)/build/src/file
make DESTDIR=$LFS install
cd $LFS/sources
rm -rf ${PKG_FILE%.tar*}

9
phase2/findutils.sh Normal file
View File

@ -0,0 +1,9 @@
# Findutils Phase 2
./configure --prefix=/usr \
--localstatedir=/var/lib/locate \
--host=$LFS_TGT \
--build=$(build-aux/config.guess)
make
make DESTDIR=$LFS install

10
phase2/gawk.sh Normal file
View File

@ -0,0 +1,10 @@
# Gawk Phase 2
sed -i 's/extras//' Makefile.in
./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(build-aux/config.guess)
make
make DESTDIR=$LFS install

16
stage4/gcc.sh → phase2/gcc.sh Executable file → Normal file
View File

@ -1,19 +1,8 @@
#!/usr/bin/env bash
# GCC Stage 4
# ~~~~~~~~~~~
set -e
cd $LFS/sources
eval "$(grep "PKG_GCC\|PKG_MPFR\|PKG_GMP\|PKG_MPC" $PACKAGE_LIST)"
PKG_GCC=$(basename $PKG_GCC)
# GCC Phase 2
PKG_MPFR=$(basename $PKG_MPFR)
PKG_GMP=$(basename $PKG_GMP)
PKG_MPC=$(basename $PKG_MPC)
tar -xf $PKG_GCC
cd ${PKG_GCC%.tar*}
tar -xf ../$PKG_MPFR
mv ${PKG_MPFR%.tar*} mpfr
@ -58,6 +47,3 @@ make DESTDIR=$LFS install
ln -s gcc $LFS/usr/bin/cc
cd $LFS/sources
rm -rf ${PKG_GCC%.tar*}

6
phase2/grep.sh Normal file
View File

@ -0,0 +1,6 @@
# Grep Phase 2
./configure --prefix=/usr \
--host=$LFS_TGT
make
make DESTDIR=$LFS install

6
phase2/gzip.sh Normal file
View File

@ -0,0 +1,6 @@
# Gzip Phase 2
./configure --prefix=/usr --host=$LFS_TGT
make
make DESTDIR=$LFS install

8
phase2/m4.sh Normal file
View File

@ -0,0 +1,8 @@
# M4 Phase 2
./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(build-aux/config.guess)
make
make DESTDIR=$LFS install

9
phase2/make.sh Normal file
View File

@ -0,0 +1,9 @@
# Make Phase 2
./configure --prefix=/usr \
--without-guile \
--host=$LFS_TGT \
--build=$(build-aux/config.guess)
make
make DESTDIR=$LFS install

17
stage4/ncurses.sh → phase2/ncurses.sh Executable file → Normal file
View File

@ -1,16 +1,4 @@
#!/usr/bin/env bash
# ncurses Stage 4
# ~~~~~~~~~~~~~~~
set -e
cd $LFS/sources
eval "$(grep NCURSES $PACKAGE_LIST)"
PKG_NCURSES=$(basename $PKG_NCURSES)
tar -xf $PKG_NCURSES
cd ${PKG_NCURSES%.tar*}
# ncurses Phase 2
sed -i s/mawk// configure
mkdir build
@ -36,6 +24,3 @@ make
make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install
echo "INPUT(-lncursesw)" > $LFS/usr/lib/libncurses.so
cd $LFS/sources
rm -rf ${PKG_NCURSES%.tar*}

8
phase2/patch.sh Normal file
View File

@ -0,0 +1,8 @@
# Patch Phase 2
./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(build-aux/config.guess)
make
make DESTDIR=$LFS install

7
phase2/sed.sh Normal file
View File

@ -0,0 +1,7 @@
# Sed Phase 2
./configure --prefix=/usr \
--host=$LFS_TGT
make
make DESTDIR=$LFS install

8
phase2/tar.sh Normal file
View File

@ -0,0 +1,8 @@
# Tar Phase 2
./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(build-aux/config.guess)
make
make DESTDIR=$LFS install

17
stage4/xz.sh → phase2/xz.sh Executable file → Normal file
View File

@ -1,16 +1,4 @@
#!/usr/bin/env bash
# Xz Stage 4
# ~~~~~~~~~~
set -e
cd $LFS/sources
eval "$(grep XZ $PACKAGE_LIST)"
PKG_XZ=$(basename $PKG_XZ)
tar -xf $PKG_XZ
cd ${PKG_XZ%.tar*}
# Xz Phase 2
./configure --prefix=/usr \
--host=$LFS_TGT \
--build=$(build-aux/config.guess) \
@ -20,6 +8,3 @@ cd ${PKG_XZ%.tar*}
make
make DESTDIR=$LFS install
cd $LFS/sources
rm -rf ${PKG_XZ%.tar*}

7
phase3/bison.sh Normal file
View File

@ -0,0 +1,7 @@
# Bison Phase 3
./configure --prefix=/usr \
--docdir=/usr/share/doc/${PKG_BISON%.tar*}
make
make install

7
phase3/gettext.sh Normal file
View File

@ -0,0 +1,7 @@
# Gettext Phase 3
./configure --disable-shared
make
cp gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin

View File

@ -1,16 +1,4 @@
#!/usr/bin/env bash
# Libstdc++ Stage 5
# ~~~~~~~~~~~~~~~~~
set -e
cd /sources
eval "$(grep PKG_GCC $PACKAGE_LIST)"
PKG_GCC=$(basename $PKG_GCC)
tar -xf $PKG_GCC
cd ${PKG_GCC%.tar*}
# Libstdc++ Phase 3
ln -s gthr-posix.h libgcc/gthr-default.h
mkdir build
@ -18,15 +6,12 @@ cd build
../libstdc++-v3/configure \
CXXFLAGS="-g -O2 -D_GNU_SOURCE" \
--host=$LFS_TGT \
--prefix=/usr \
--disable-multilib \
--disable-nls \
--disable-libstdcxx-pch \
--host=$LFS_TGT \
--disable-libstdcxx-pch
make
make install
cd /sources
rm -rf ${PKG_GCC%.tar*}

View File

@ -1,16 +1,4 @@
#!/usr/bin/env bash
# Perl Stage 5
# ~~~~~~~~~~~~
set -e
cd /sources
eval "$(grep PERL $PACKAGE_LIST)"
PKG_PERL=$(basename $PKG_PERL)
tar -xf $PKG_PERL
cd ${PKG_PERL%.tar*}
# Perl Phase 3
sh Configure -des \
-Dprefix=/usr \
-Dvendorprefix=/usr \
@ -24,6 +12,3 @@ sh Configure -des \
make
make install
cd /sources
rm -rf ${PKG_PERL%.tar*}

8
phase3/python.sh Normal file
View File

@ -0,0 +1,8 @@
# Python Phase 3
./configure --prefix=/usr \
--enable-shared \
--without-ensurepip
make
make install

9
phase3/texinfo.sh Normal file
View File

@ -0,0 +1,9 @@
# Texinfo Phase 3
sed -e 's/__attribute_nonnull__/__nonnull/' \
-i gnulib/lib/malloc/dynarray-skeleton.c
./configure --prefix=/usr
make
make install

View File

@ -1,16 +1,4 @@
#!/usr/bin/env bash
# Util Linux Stage 5
# ~~~~~~~~~~~~~~~~~~
set -e
cd /sources
eval "$(grep UTILLINUX $PACKAGE_LIST)"
PKG_UTILLINUX=$(basename $PKG_UTILLINUX)
tar -xf $PKG_UTILLINUX
cd ${PKG_UTILLINUX%.tar*}
# Util Linux Phase 3
mkdir -p /var/lib/hwclock
./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \
@ -30,6 +18,3 @@ mkdir -p /var/lib/hwclock
make
make install
cd /sources
rm -rf ${PKG_UTILLINUX%.tar*}

View File

@ -1,17 +1,4 @@
#!/usr/bin/env bash
# Bzip2 Stage 6
# ~~~~~~~~~~~~~
set -e
cd /sources
eval "$(grep BZIP2 $PACKAGE_LIST)"
PKG_BZIP2=$(basename $PKG_BZIP2)
PATCH_BZIP2=$(basename $PATCH_BZIP2)
tar -xf $PKG_BZIP2
cd ${PKG_BZIP2%.tar*}
# Bzip2 Phase 4
patch -Np1 -i ../$PATCH_BZIP2
sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile
@ -30,6 +17,3 @@ for i in /usr/bin/{bzcat,bunzip2}; do
done
rm -f /usr/lib/libbz2.a
cd /sources
rm -rf ${PKG_BZIP2%.tar*}

14
phase4/file.sh Normal file
View File

@ -0,0 +1,14 @@
# File Phase 4
./configure --prefix=/usr
make
if $RUN_TESTS
then
set +e
make check
set -e
fi
make install

View File

@ -1,17 +1,5 @@
#!/usr/bin/env bash
# Glibc Stage6
# ~~~~~~~~~~~~
set -e
cd /sources
eval "$(grep GLIBC $PACKAGE_LIST)"
PKG_GLIBC=$(basename $PKG_GLIBC)
tar -xf $PKG_GLIBC
cd ${PKG_GLIBC%.tar*}
patch -Np1 -i ../glibc-2.35-fhs-1.patch
# Glibc Phase 4
patch -Np1 -i ../$PATCH_GLIBC
mkdir build
cd build
@ -30,7 +18,7 @@ make
if $RUN_TESTS
then
set +e
make check &> $TESTLOG_DIR/glibc.log
make check
set -e
fi
@ -79,8 +67,6 @@ localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS
localedef -i zh_TW -f UTF-8 zh_TW.UTF-8
cat > /etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files
@ -92,8 +78,6 @@ protocols: files
services: files
ethers: files
rpc: files
# End /etc/nsswitch.conf
EOF
tar -xf ../../tzdata2021e.tar.gz
@ -115,12 +99,7 @@ unset ZONEINFO
ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime
cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib
EOF
cd /sources
rm -rf ${PKG_GLIBC%.tar*}

3
phase4/ianaetc.sh Normal file
View File

@ -0,0 +1,3 @@
# Iana-Etc Phase 4
cp services protocols /etc

3
phase4/manpages.sh Normal file
View File

@ -0,0 +1,3 @@
# Man Pages Phase 4
make prefix=/usr install

Some files were not shown because too many files have changed in this diff Show More