924076f0b5
If all cores are used, it should be set to 0, which will use nproc after the cpuset has been defined, and not nproc (which is the number of cores/threads on the machine).
272 lines
9.3 KiB
Bash
272 lines
9.3 KiB
Bash
#!/bin/bash
|
|
|
|
#----------------------------# Prepare BLFS_ROOT and extract
|
|
install_blfs_tools() { # the scriptlets to build
|
|
#----------------------------# the dependency tools
|
|
set -e
|
|
# Install the files
|
|
[[ ! -d "${BUILDDIR}${BLFS_ROOT}" ]] && {
|
|
sudo mkdir -pv "${BUILDDIR}${BLFS_ROOT}"
|
|
sudo chown "$USER" "${BUILDDIR}${BLFS_ROOT}"
|
|
}
|
|
cp -r BLFS/* ${BUILDDIR}${BLFS_ROOT}
|
|
cp -r menu ${BUILDDIR}${BLFS_ROOT}
|
|
cp $COMMON_DIR/progress_bar.sh ${BUILDDIR}${BLFS_ROOT}
|
|
cp README.BLFS ${BUILDDIR}${BLFS_ROOT}
|
|
if [ "$WRAP_INSTALL" = y ]; then
|
|
sed -e 's/PKGDIR/JH_UNPACKDIR/' \
|
|
-e 's/PKG_DEST/JH_PKG_DIR/' \
|
|
$PKGMNGTDIR/packInstall.sh > ${BUILDDIR}${BLFS_ROOT}/packInstall.sh
|
|
fi
|
|
|
|
# Set some harcoded envars to their proper values
|
|
sed -i s@tracking-dir@$TRACKING_DIR@ \
|
|
${BUILDDIR}${BLFS_ROOT}/{Makefile,gen-makefile.sh,gen_pkg_book.sh}
|
|
|
|
# If we have a working copy, copy it:
|
|
if [[ "$BLFS_WORKING_COPY" = "y" ]]; then
|
|
echo "copying the local BLFS working copy (may take some time)"
|
|
# -r: recursive; -u: only if newer; -T: otherwise, would copy to a subdirectory
|
|
# of blfs-xml, if blfs-xml already exists; --preserve=timestamps: if the local
|
|
# book has already been validated, tmp is posterior to the others, and
|
|
# validation will not be done again.
|
|
# sudo is needed because make (below) may already have been run and
|
|
# may have put some files owned by root
|
|
sudo cp -ruT --preserve=timestamps $BLFS_WC_LOCATION \
|
|
${BUILDDIR}${BLFS_ROOT}/$BLFS_XML
|
|
fi
|
|
|
|
# Copy the LFS book. Note that now, the book is downloaded before running
|
|
# the BLFS tools.
|
|
sudo cp -ruT --preserve=timestamps $BOOK \
|
|
${BUILDDIR}${BLFS_ROOT}/$LFS_XML
|
|
|
|
# Downloads the book if necessary, initialize the tracking file and the
|
|
# package database.
|
|
# updating first is needed if the xml sources have already been cloned
|
|
# and we want to set the branches.
|
|
# Note that if LFS-BRANCH or BLFS-BRANCH is empty, which may happen
|
|
# if using a working copy, then the corresponding update is not
|
|
# performed by make (see BLFS/Makefile).
|
|
# sudo is needed if $BUILDDIR/var/lib is owned by root and /var/lib/jhalfs
|
|
# has to be created
|
|
sudo make -j1 -C $BUILDDIR$BLFS_ROOT \
|
|
REV=$INITSYS \
|
|
LFS-BRANCH=${COMMIT} \
|
|
BLFS-BRANCH=${BLFS_COMMIT} \
|
|
update
|
|
sudo make -j1 -C $BUILDDIR$BLFS_ROOT \
|
|
REV=$INITSYS \
|
|
TRACKING_DIR=$BUILDDIR$TRACKING_DIR \
|
|
LFS_XML=$BUILDDIR$BLFS_ROOT/$LFS_XML \
|
|
LFS-BRANCH="${COMMIT}" \
|
|
BLFS_XML=$BUILDDIR$BLFS_ROOT/$BLFS_XML \
|
|
BLFS-BRANCH=${BLFS_COMMIT} \
|
|
$BUILDDIR$BLFS_ROOT/packages.xml
|
|
|
|
# But then $BUILDDIR/var/lib/ is owned by root if just created, which
|
|
# prevents $LUSER to create "nss_db". The problem is that $LUSER
|
|
# May not have been created yet. So do not change ownership here
|
|
# and do it in master.sh for chapter 4.
|
|
#sudo chown $LUSER:$LGROUP $BUILDDIR/var/lib
|
|
|
|
# Because the BLFS Makefile is supposed to be used in chroot (or booted)
|
|
# mode, the tracking file has wrong path for DTD. Change it:
|
|
sudo sed -i s@$BUILDDIR@@ $BUILDDIR$TRACKING_DIR/instpkg.xml
|
|
|
|
# Manually build a 'configuration' file
|
|
if [ "$DEP_LIBXML" = y ]; then
|
|
LINE_LIBXML='CONFIG_libxml2=y'
|
|
else
|
|
LINE_LIBXML='#CONFIG_libxml2 is not set'
|
|
fi
|
|
if [ "$DEP_LIBXSLT" = y ]; then
|
|
LINE_LIBXSLT='CONFIG_libxslt=y'
|
|
else
|
|
LINE_LIBXSLT='#CONFIG_libxslt is not set'
|
|
fi
|
|
# DocBook is a rec dep of libxslt
|
|
# if [ "$DEP_DBXML" = y ]; then
|
|
# LINE_DBXML='CONFIG_DocBook=y'
|
|
# else
|
|
# LINE_DBXML='#CONFIG_DocBook is not set'
|
|
# fi
|
|
if [ "$DEP_LYNX" = y ]; then
|
|
LINE_LYNX='CONFIG_lynx=y'
|
|
else
|
|
LINE_LYNX='#CONFIG_lynx is not set'
|
|
fi
|
|
if [ "$DEP_SUDO" = y ]; then
|
|
LINE_SUDO='CONFIG_sudo=y'
|
|
else
|
|
LINE_SUDO='#CONFIG_sudo is not set'
|
|
fi
|
|
if [ "$DEP_WGET" = y ]; then
|
|
LINE_WGET='CONFIG_wget=y'
|
|
else
|
|
LINE_WGET='#CONFIG_wget is not set'
|
|
fi
|
|
if [ "$DEP_GPM" = y ]; then
|
|
LINE_GPM='CONFIG_gpm=y'
|
|
else
|
|
LINE_GPM='#CONFIG_gpm is not set'
|
|
fi
|
|
if [ "$DEP_GIT" = y ]; then
|
|
LINE_GIT='CONFIG_git=y'
|
|
else
|
|
LINE_GIT='#CONFIG_git is not set'
|
|
fi
|
|
|
|
cat >$BUILDDIR$BLFS_ROOT/configuration <<EOF
|
|
$LINE_LIBXML
|
|
$LINE_LIBXSLT
|
|
$LINE_WGET
|
|
$LINE_GIT
|
|
$LINE_GPM
|
|
$LINE_LYNX
|
|
$LINE_SUDO
|
|
MAIL_SERVER=sendmail
|
|
optDependency=2
|
|
SUDO=n
|
|
LANGUAGE=$LANG
|
|
WRAP_INSTALL=$WRAP_INSTALL
|
|
PACK_INSTALL=/blfs_root/packInstall.sh
|
|
DEL_LA_FILES=$DEL_LA_FILES
|
|
STATS=n
|
|
SRC_ARCHIVE=/sources
|
|
BUILD_ROOT=/sources
|
|
BUILD_SUBDIRS=y
|
|
JOBS=$(if [ "$ALL_CORES" = y ]; then echo 0; else echo $N_PARALLEL; fi)
|
|
EOF
|
|
# The 0 value above is for using all cores
|
|
for OPT_VAR in CFLAGS CXXFLAGS LDFLAGS; do
|
|
eval optVal=\$${OPT_VAR}_$DEF_OPT_MODE
|
|
if [ -n "$optVal" ] && [ "$optVal" != unset ]; then
|
|
echo "CFG_$OPT_VAR"=\"$optVal\" >> $BUILDDIR$BLFS_ROOT/configuration
|
|
else
|
|
echo "CFG_$OPT_VAR"=EMPTY >> $BUILDDIR$BLFS_ROOT/configuration
|
|
fi
|
|
done
|
|
|
|
# Generates the scripts for the blfs tools dependencies (in ./scripts)
|
|
yes "yes" | $BUILDDIR$BLFS_ROOT/gen_pkg_book.sh \
|
|
$BUILDDIR$TRACKING_DIR/instpkg.xml \
|
|
$BUILDDIR$BLFS_ROOT
|
|
|
|
# Move the scriptlets where they should be
|
|
sudo rm -rf $BUILDDIR$BLFS_ROOT/scripts
|
|
mv scripts $BUILDDIR$BLFS_ROOT
|
|
|
|
# Generates a list containing download and copying instructions for tarballs
|
|
echo -e '#!/bin/bash\nset -e\n' > $BUILDDIR$BLFS_ROOT/download_script
|
|
sed -n -e '/PACKAGE=/,/^fi/{/^fi/a\
|
|
[ ! -f "$JH_SRC_ARCHIVE/$PACKAGE" ] && cp $PACKAGE $JH_SRC_ARCHIVE
|
|
p}' \
|
|
-e '/|[ ]*md5sum/p' \
|
|
-e '/PACKAGE1=/,/^fi/{/^fi/a\
|
|
[ ! -f "$JH_SRC_ARCHIVE/$PACKAGE1" ] && cp $PACKAGE1 $JH_SRC_ARCHIVE
|
|
p}' \
|
|
-e '/PATCH=/,/^fi/{/^fi/a\
|
|
[ ! -f "$JH_SRC_ARCHIVE/$PATCH" ] && cp $PATCH $JH_SRC_ARCHIVE
|
|
p}' \
|
|
-e '/URL=/,/^fi/{/^fi/a\
|
|
[ ! -f "$JH_SRC_ARCHIVE/$BOOTPACKG" ] && cp $BOOTPACKG $JH_SRC_ARCHIVE
|
|
p}' \
|
|
$BUILDDIR$BLFS_ROOT/scripts/* >> $BUILDDIR$BLFS_ROOT/download_script
|
|
chmod u+x $BUILDDIR$BLFS_ROOT/download_script
|
|
|
|
# Downloads (or copy) to build_dir/sources
|
|
pushd $BUILDDIR/sources
|
|
# Remove `unpacked' files if some have been left
|
|
sudo find . -name unpacked -exec rm \{\} \;
|
|
if [ "$GETPKG" = "y" ]; then
|
|
JH_FTP_SERVER=$SERVER/pub/blfs/ \
|
|
JH_SRC_ARCHIVE=${SRC_ARCHIVE:-/dev/null} \
|
|
$BUILDDIR$BLFS_ROOT/download_script
|
|
else # Save the download script in case the user wants to run it later
|
|
cp $BUILDDIR$BLFS_ROOT/download_script .
|
|
fi
|
|
popd
|
|
rm -v $BUILDDIR$BLFS_ROOT/download_script
|
|
|
|
# Suppresses unneeded parts of the scriptlets
|
|
if [ "$DEP_LIBXSLT" = y ]; then
|
|
# libxslt pulls docbook-xsl in, which populates the catalog with annoying
|
|
# **EDITME** references. Fortunately, those lines are regognizable because
|
|
# they occur between lines containing '/etc/xml/catalog' at the end of the
|
|
# line (without '&&'). I have not found a simple way to delete lines
|
|
# between 2 addresses, excluding either the first or the last one. So use
|
|
# a loop for accumulating lines and deleting at the end.
|
|
# Sorry for sed syntax.
|
|
sed -i '\@^[[:space:]]*/etc/xml/catalog$@{
|
|
n
|
|
:a
|
|
\@/etc/xml/catalog$@bb
|
|
N
|
|
ba
|
|
:b
|
|
d}' \
|
|
$BUILDDIR$BLFS_ROOT/scripts/*docbook-xsl
|
|
fi
|
|
if [ "$DEP_SUDO" = y ]; then
|
|
sed -i '/cat.*pam.d/i mkdir -p /etc/pam.d' $BUILDDIR$BLFS_ROOT/scripts/*sudo
|
|
fi
|
|
# At last generates the build Makefile
|
|
mkdir -p $BUILDDIR$BLFS_ROOT/work
|
|
pushd $BUILDDIR$BLFS_ROOT/work
|
|
../gen-makefile.sh
|
|
# The generated Makefile updates the tracking file after each package
|
|
# installation, using libxslt, which is not installed yet. So move
|
|
# updating to the end of the process, adding an 'update' target
|
|
sed -i -e '/xsltproc/,+6d' \
|
|
-e '/^all/i update:' \
|
|
-e 's/touch/@touch/' Makefile
|
|
cat >> Makefile << EOF
|
|
update: all
|
|
@echo Updating the tracking file
|
|
@for pack in \$\$(grep '<productname' ../$LFS_XML/tmp/lfs-full.xml | \\
|
|
sed 's/.*>\([^<]*\)<.*/\1/' | \\
|
|
sort | uniq); do \\
|
|
case "x\$\$pack" in \\
|
|
xgcc* | *pass[12] | xvim | \\
|
|
xshadow | xPython | xlinux-headers | xdbus | xsystemd )\\
|
|
continue ;; \\
|
|
esac; \\
|
|
VERSION=\$\$(grep -A1 ">\$\$pack</product" \\
|
|
../$LFS_XML/tmp/lfs-full.xml | \\
|
|
head -n2| \\
|
|
sed -n '2s/.*>\([^<]*\)<.*/\1/p'); \\
|
|
xsltproc --stringparam packages ../packages.xml \\
|
|
--stringparam package \$\$pack \\
|
|
--stringparam version \$\$VERSION \\
|
|
-o track.tmp \\
|
|
../xsl/bump.xsl \$(TRACKING_FILE); \\
|
|
sed -i 's@PACKDESC@$BLFS_ROOT/packdesc.dtd@' track.tmp; \\
|
|
xmllint --format --postvalid track.tmp > \$(TRACKING_FILE); \\
|
|
rm track.tmp; \\
|
|
done; \\
|
|
VERSION=\$\$(grep 'echo.*lfs-release' ../$LFS_XML/tmp/lfs-full.xml | \\
|
|
sed 's/.*echo[ ]*\([^ ]*\).*/\1/'); \\
|
|
xsltproc --stringparam packages ../packages.xml \\
|
|
--stringparam package LFS-Release \\
|
|
--stringparam version \$\$VERSION \\
|
|
-o track.tmp \\
|
|
../xsl/bump.xsl \$(TRACKING_FILE); \\
|
|
sed -i 's@PACKDESC@$BLFS_ROOT/packdesc.dtd@' track.tmp; \\
|
|
xmllint --format --postvalid track.tmp > \$(TRACKING_FILE); \\
|
|
rm track.tmp; \\
|
|
for file in *-*; do \\
|
|
xsltproc --stringparam packages ../packages.xml \\
|
|
--stringparam package \$\${file##*z-} \\
|
|
-o track.tmp \\
|
|
../xsl/bump.xsl \$(TRACKING_FILE); \\
|
|
sed -i 's@PACKDESC@$BLFS_ROOT/packdesc.dtd@' track.tmp; \\
|
|
xmllint --format --postvalid track.tmp > \$(TRACKING_FILE); \\
|
|
rm track.tmp; \\
|
|
done
|
|
@touch \$@
|
|
@echo -e "\n\n "\$(BOLD)Target \$(BLUE)\$@ \$(BOLD)OK
|
|
@echo --------------------------------------------------------------------------------\$(WHITE)
|
|
EOF
|
|
popd
|
|
}
|