176 lines
3.8 KiB
Bash
Executable file
176 lines
3.8 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
lfs_dirs() {
|
|
mkdir -pv $LFS/bin $LFS/usr/lib $LFS/usr/bin $LFS/etc || true
|
|
for i in bash cat chmod dd echo ln mkdir pwd rm stty touch; do
|
|
ln -svf /tools/bin/$i $LFS/bin
|
|
done
|
|
for i in env install perl printf; do
|
|
ln -svf /tools/bin/$i $LFS/usr/bin
|
|
done
|
|
ln -svf /tools/lib/libgcc_s.so /tools/lib/libgcc_s.so.1 $LFS/usr/lib
|
|
ln -svf /tools/lib/libstdc++.a /tools/lib/libstdc++.so /tools/lib/libstdc++.so.6 $LFS/usr/lib
|
|
ln -svf bash $LFS/bin/sh
|
|
ln -svf /proc/self/mounts $LFS/etc/mtab
|
|
|
|
cat > $LFS/etc/passwd << "EOF"
|
|
root:x:0:0:root:/root:/bin/bash
|
|
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:
|
|
input:x:24:
|
|
mail:x:34:
|
|
kvm:x:61:
|
|
wheel:x:97:
|
|
nogroup:x:99:
|
|
users:x:999:
|
|
EOF
|
|
|
|
# pkgutils
|
|
mkdir -p \
|
|
$LFS/var/lib/pkg/pkg \
|
|
$LFS/var/lib/pkg/src \
|
|
$LFS/var/lib/pkg/work
|
|
touch $LFS/var/lib/pkg/db
|
|
}
|
|
|
|
mount_pseudo() {
|
|
mkdir -p $LFS/dev $LFS/run $LFS/proc $LFS/sys
|
|
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() {
|
|
unmount $LFS/dev/pts
|
|
unmount $LFS/dev
|
|
unmount $LFS/run
|
|
unmount $LFS/proc
|
|
unmount $LFS/sys
|
|
}
|
|
|
|
mountbind_srcpkg() {
|
|
mount --bind $SRCDIR $LFS/var/lib/pkg/src
|
|
mount --bind $PKGDIR $LFS/var/lib/pkg/pkg
|
|
}
|
|
|
|
unmountbind_srcpkg() {
|
|
unmount $LFS/var/lib/pkg/src
|
|
unmount $LFS/var/lib/pkg/pkg
|
|
}
|
|
|
|
unmount() {
|
|
while true; do
|
|
mountpoint -q $1 || break
|
|
umount $1 2>/dev/null
|
|
done
|
|
}
|
|
|
|
runinchroot() {
|
|
cd $LFS >/dev/null 2>&1
|
|
mount_pseudo
|
|
mountbind_srcpkg
|
|
cp -L /etc/resolv.conf $LFS/etc/
|
|
chroot "$LFS" $ENVLFS -i \
|
|
HOME=/root \
|
|
TERM="$TERM" \
|
|
PS1='(lfs chroot) \u:\w\$ ' \
|
|
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin $@
|
|
retval=$?
|
|
unmountbind_srcpkg
|
|
umount_pseudo
|
|
cd - >/dev/null 2>&1
|
|
return $retval
|
|
}
|
|
|
|
interrupted() {
|
|
die "script $(basename $0) aborted!"
|
|
}
|
|
|
|
die() {
|
|
[ "$@" ] && printerror $@
|
|
unmountbind_srcpkg
|
|
umount_pseudo
|
|
exit 1
|
|
}
|
|
|
|
printerror() {
|
|
echo "ERROR: $@"
|
|
}
|
|
|
|
trap "interrupted" 1 2 3 15
|
|
|
|
if [ $(id -u) != 0 ]; then
|
|
echo "$0 script need to run as root!"
|
|
exit 1
|
|
fi
|
|
|
|
CWD=$PWD
|
|
|
|
if [ -f $CWD/config ]; then
|
|
. $CWD/config
|
|
fi
|
|
|
|
MAKEFLAGS="${MAKEFLAGS:--j$(nproc)}"
|
|
LFS="${LFS:-$CWD/lfs-rootfs}"
|
|
PKGDIR="${PKGDIR:-$CWD/pkg}"
|
|
SRCDIR="${SRCDIR:-$CWD/src}"
|
|
WORKDIR="${WORKDIR:-$CWD/work}"
|
|
CFLAGS="${CFLAGS:--O2 -march=x86-64 -pipe}"
|
|
|
|
mkdir -p $PKGDIR $SRCDIR $WORKDIR
|
|
|
|
if [ -x $LFS/usr/bin/env ]; then
|
|
ENVLFS=/usr/bin/env
|
|
else
|
|
ENVLFS=/tools/bin/env
|
|
fi
|
|
|
|
PKGS="filesystem linux-api-headers man-pages glibc tzdata zlib bzip2 file readline m4 bc binutils gmp mpfr mpc attr acl shadow gcc
|
|
pkgconf ncurses libcap sed psmisc iana-etc bison flex grep bash libtool gdbm gperf expat inetutils
|
|
perl perl-xml-parser intltool autoconf automake xz kmod gettext openssl ca-certificates curl elfutils libffi python3 coreutils
|
|
diffutils gawk findutils groff fuse2 grub less gzip iproute2 kbd libpipeline make patch man-db tar texinfo vim procps-ng
|
|
util-linux e2fsprogs sysklogd sysvinit eudev lfs-bootscripts linux-firmware libarchive mkinitramfs linux libtasn1 p11-kit
|
|
wget pkgutils libnl dbus libxml2 dhcpcd wpa_supplicant lzo lz4 squashfs-tools popt efivar pciutils efibootmgr libpng which freetype2 dosfstools grub-efi
|
|
ports httpup gpm libevent links mtools syslinux"
|
|
|
|
if [ ! -f $LFS/var/lib/pkg/db ]; then
|
|
lfs_dirs
|
|
fi
|
|
|
|
rm -fr $LFS/usr/ports
|
|
mkdir -p $LFS/usr/ports/
|
|
echo "==> Copying ports"
|
|
cp -Ra ports/* $LFS/usr/ports/
|
|
|
|
for pkg in $PKGS; do
|
|
case $pkg in
|
|
filesystem|gcc|bash|perl|coreutils) runinchroot pkgin -i -ic $pkg || die;;
|
|
*) runinchroot pkgin -i $pkg || die;;
|
|
esac
|
|
done
|
|
|
|
exit 0
|