eth0s/02-base
2021-06-13 19:27:19 +08:00

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