source: common/libs/func_install_blfs@ 9f89fae

ablfs-more trunk
Last change on this file since 9f89fae was 9f89fae, checked in by Pierre Labastie <pierre.labastie@…>, 3 years ago

LFS: Simplify git repo management

Use inly one variable, REPO, containing the LFS git repo url. The
BLFS Makefile hardcodes the LFS and BLFS git repo urls, so no need
to pass them.

  • Property mode set to 100644
File size: 8.6 KB
Line 
1#!/bin/bash
2
3#----------------------------# Prepare BLFS_ROOT and extract
4install_blfs_tools() { # the scriptlets to build
5#----------------------------# the dependency tools
6set -e
7# Install the files
8[[ ! -d "${BUILDDIR}${BLFS_ROOT}" ]] && {
9 sudo mkdir -pv "${BUILDDIR}${BLFS_ROOT}"
10 sudo chown "$USER" "${BUILDDIR}${BLFS_ROOT}"
11}
12cp -r BLFS/* ${BUILDDIR}${BLFS_ROOT}
13cp -r menu ${BUILDDIR}${BLFS_ROOT}
14cp $COMMON_DIR/progress_bar.sh ${BUILDDIR}${BLFS_ROOT}
15cp README.BLFS ${BUILDDIR}${BLFS_ROOT}
16if [ "$WRAP_INSTALL" = y ]; then
17 sed -e 's/PKGDIR/JH_UNPACKDIR/' \
18 -e 's/PKG_DEST/JH_PKG_DIR/' \
19 $PKGMNGTDIR/packInstall.sh > ${BUILDDIR}${BLFS_ROOT}/packInstall.sh
20fi
21
22# Set some harcoded envars to their proper values
23sed -i s@tracking-dir@$TRACKING_DIR@ \
24 ${BUILDDIR}${BLFS_ROOT}/{Makefile,gen-makefile.sh,gen_pkg_book.sh}
25sed -i s@trunk/BOOK@$BLFS_TREE@ \
26 ${BUILDDIR}${BLFS_ROOT}/Makefile
27
28# If we have a working copy, copy it:
29if [[ "$BLFS_WORKING_COPY" = "y" ]]; then
30echo "copying the local BLFS working copy (may take some time)"
31# -r: recursive; -u: only if newer; -T: otherwise, would copy to a subdirectory
32# of blfs-xml, if blfs-xml already exists; --preserve=timestamps: if the local
33# book has already been validated, tmp is posterior to the others, and
34# validation will not be done again.
35 cp -ruT --preserve=timestamps $BLFS_WC_LOCATION \
36 ${BUILDDIR}${BLFS_ROOT}/$BLFS_XML
37fi
38
39# Copy the LFS book. Note that now, the book is downloaded before running
40# the BLFS tools.
41cp -ruT --preserve=timestamps $BOOK \
42 ${BUILDDIR}${BLFS_ROOT}/$LFS_XML
43
44# Downloads the book if necessary, initialize the tracking file and the
45# package database.
46# sudo is needed if $BUILDDIR/var/lib is owned by root and /var/lib/jhalfs
47# has to be created
48sudo make -j1 -C $BUILDDIR$BLFS_ROOT \
49 REV=$INITSYS \
50 TRACKING_DIR=$BUILDDIR$TRACKING_DIR \
51 LFS_XML=$BUILDDIR$BLFS_ROOT/$LFS_XML \
52 LFS-BRANCH=${LFS_TREE} \
53 BLFS_XML=$BUILDDIR$BLFS_ROOT/$BLFS_XML \
54 BLFS-BRANCH=${BLFS_TREE} \
55 $BUILDDIR$BLFS_ROOT/packages.xml
56
57# But then $BUILDDIR/var/lib/ is owned by root if just created, which
58# prevents $LUSER to create "nss_db". The problem is that $LUSER
59# May not have been created yet. So do not change ownership here
60# and do it in master.sh for chapter 4.
61#sudo chown $LUSER:$LGROUP $BUILDDIR/var/lib
62
63# Because the BLFS Makefile is supposed to be used in chroot (or booted)
64# mode, the tracking file has wrong path for DTD. Change it:
65sudo sed -i s@$BUILDDIR@@ $BUILDDIR$TRACKING_DIR/instpkg.xml
66
67# Manually build a 'configuration' file
68if [ "$DEP_LIBXML" = y ]; then
69 LINE_LIBXML='CONFIG_libxml2=y'
70else
71 LINE_LIBXML='#CONFIG_libxml2 is not set'
72fi
73if [ "$DEP_LIBXSLT" = y ]; then
74 LINE_LIBXSLT='CONFIG_libxslt=y'
75else
76 LINE_LIBXSLT='#CONFIG_libxslt is not set'
77fi
78# DocBook is a rec dep of libxslt
79# if [ "$DEP_DBXML" = y ]; then
80# LINE_DBXML='CONFIG_DocBook=y'
81# else
82# LINE_DBXML='#CONFIG_DocBook is not set'
83# fi
84if [ "$DEP_LYNX" = y ]; then
85 LINE_LYNX='CONFIG_lynx=y'
86else
87 LINE_LYNX='#CONFIG_lynx is not set'
88fi
89if [ "$DEP_SUDO" = y ]; then
90 LINE_SUDO='CONFIG_sudo=y'
91else
92 LINE_SUDO='#CONFIG_sudo is not set'
93fi
94if [ "$DEP_WGET" = y ]; then
95 LINE_WGET='CONFIG_wget=y'
96else
97 LINE_WGET='#CONFIG_wget is not set'
98fi
99if [ "$DEP_GPM" = y ]; then
100 LINE_GPM='CONFIG_gpm=y'
101else
102 LINE_GPM='#CONFIG_gpm is not set'
103fi
104if [ "$DEP_GIT" = y ]; then
105 LINE_GIT='CONFIG_git=y'
106else
107 LINE_GIT='#CONFIG_git is not set'
108fi
109
110cat >$BUILDDIR$BLFS_ROOT/configuration <<EOF
111$LINE_LIBXML
112$LINE_LIBXSLT
113$LINE_WGET
114$LINE_GIT
115$LINE_GPM
116$LINE_LYNX
117$LINE_SUDO
118MAIL_SERVER=sendmail
119optDependency=2
120SUDO=n
121LANGUAGE=$LANG
122WRAP_INSTALL=$WRAP_INSTALL
123PACK_INSTALL=/blfs_root/packInstall.sh
124DEL_LA_FILES=$DEL_LA_FILES
125STATS=n
126SRC_ARCHIVE=/sources
127BUILD_ROOT=/sources
128BUILD_SUBDIRS=y
129JOBS=$(if [ -n "$N_PARALLEL" ]; then echo $N_PARALLEL; else echo 1; fi)
130EOF
131for OPT_VAR in CFLAGS CXXFLAGS LDFLAGS; do
132 eval optVal=\$${OPT_VAR}_$DEF_OPT_MODE
133 if [ -n "$optVal" ] && [ "$optVal" != unset ]; then
134 echo "CFG_$OPT_VAR"=\"$optVal\" >> $BUILDDIR$BLFS_ROOT/configuration
135 else
136 echo "CFG_$OPT_VAR"=EMPTY >> $BUILDDIR$BLFS_ROOT/configuration
137 fi
138done
139
140# Generates the scripts for the blfs tools dependencies (in ./scripts)
141yes "yes" | $BUILDDIR$BLFS_ROOT/gen_pkg_book.sh \
142 $BUILDDIR$TRACKING_DIR/instpkg.xml \
143 $BUILDDIR$BLFS_ROOT
144
145# Move the scriptlets where they should be
146sudo rm -rf $BUILDDIR$BLFS_ROOT/scripts
147mv scripts $BUILDDIR$BLFS_ROOT
148
149# Generates a list containing download and copying instructions for tarballs
150echo -e '#!/bin/bash\nset -e\n' > $BUILDDIR$BLFS_ROOT/download_script
151sed -n -e '/PACKAGE=/,/^fi/{/^fi/a\
152cp $PACKAGE $JH_SRC_ARCHIVE
153p}' \
154 -e '/|[ ]*md5sum/p' \
155 -e '/PACKAGE1=/,/^fi/{/^fi/a\
156cp $PACKAGE1 $JH_SRC_ARCHIVE
157p}' \
158 -e '/PATCH=/,/^fi/{/^fi/a\
159cp $PATCH $JH_SRC_ARCHIVE
160p}' \
161 -e '/URL=/,/^fi/{/^fi/a\
162cp $BOOTPACKG $JH_SRC_ARCHIVE
163p}' \
164 $BUILDDIR$BLFS_ROOT/scripts/* >> $BUILDDIR$BLFS_ROOT/download_script
165chmod u+x $BUILDDIR$BLFS_ROOT/download_script
166
167# Downloads (or copy) to build_dir/sources
168pushd $BUILDDIR/sources
169# Remove `unpacked' files if some have been left
170sudo find . -name unpacked -exec rm \{\} \;
171if [ "$GETPKG" = "y" ]; then
172 JH_FTP_SERVER=$SERVER/pub/blfs/ \
173 JH_SRC_ARCHIVE=${SRC_ARCHIVE:-/dev/null} \
174 $BUILDDIR$BLFS_ROOT/download_script
175else # Save the download script in case the user wants to run it later
176 cp $BUILDDIR$BLFS_ROOT/download_script .
177fi
178popd
179rm -v $BUILDDIR$BLFS_ROOT/download_script
180
181# Suppresses unneeded parts of the scriptlets
182if [ "$DEP_LIBXSLT" = y ]; then
183 # libxslt pulls docbook-xsl in, which populates the catalog with annoying
184 # **EDITME** references. Fortunately, those lines are regognizable because
185 # they occur between lines containing '/etc/xml/catalog' at the end of the
186 # line (without '&&'). I have not found a simple way to delete lines
187 # between 2 addresses, excluding either the first or the last one. So use
188 # a loop for accumulating lines and deleting at the end.
189 # Sorry for sed syntax.
190 sed -i '\@^[[:space:]]*/etc/xml/catalog$@{
191n
192:a
193\@/etc/xml/catalog$@bb
194N
195ba
196:b
197d}' \
198 $BUILDDIR$BLFS_ROOT/scripts/*docbook-xsl
199fi
200if [ "$DEP_SUDO" = y ]; then
201 sed -i '/cat.*pam.d/i mkdir -p /etc/pam.d' $BUILDDIR$BLFS_ROOT/scripts/*sudo
202fi
203# At last generates the build Makefile
204mkdir -p $BUILDDIR$BLFS_ROOT/work
205pushd $BUILDDIR$BLFS_ROOT/work
206../gen-makefile.sh
207# The generated Makefile updates the tracking file after each package
208# installation, using libxslt, which is not installed yet. So move
209# updating to the end of the process, adding an 'update' target
210sed -i -e '/xsltproc/,+6d' \
211 -e '/^all/s@$@ update@' \
212 -e 's/touch/@touch/' Makefile
213cat >> Makefile << EOF
214update:
215 @echo Updating the tracking file
216 @for pack in \$\$(grep '<productname' ../$LFS_XML/tmp/lfs-full.xml | \\
217 sed 's/.*>\([^<]*\)<.*/\1/' | \\
218 sort | uniq); do \\
219 case "x\$\$pack" in \\
220 xgcc* | *pass[12] | xvim | \\
221 xshadow | xPython | xlinux-headers | xdbus | xsystemd )\\
222 continue ;; \\
223 esac; \\
224 VERSION=\$\$(grep -A1 ">\$\$pack</product" \\
225 ../$LFS_XML/tmp/lfs-full.xml | \\
226 head -n2| \\
227 sed -n '2s/.*>\([^<]*\)<.*/\1/p'); \\
228 xsltproc --stringparam packages ../packages.xml \\
229 --stringparam package \$\$pack \\
230 --stringparam version \$\$VERSION \\
231 -o track.tmp \\
232 ../xsl/bump.xsl \$(TRACKING_FILE); \\
233 sed -i 's@PACKDESC@$BLFS_ROOT/packdesc.dtd@' track.tmp; \\
234 xmllint --format --postvalid track.tmp > \$(TRACKING_FILE); \\
235 rm track.tmp; \\
236 done; \\
237 VERSION=\$\$(grep 'echo.*lfs-release' ../$LFS_XML/tmp/lfs-full.xml | \\
238 sed 's/.*echo[ ]*\([^ ]*\).*/\1/'); \\
239 xsltproc --stringparam packages ../packages.xml \\
240 --stringparam package LFS-Release \\
241 --stringparam version \$\$VERSION \\
242 -o track.tmp \\
243 ../xsl/bump.xsl \$(TRACKING_FILE); \\
244 sed -i 's@PACKDESC@$BLFS_ROOT/packdesc.dtd@' track.tmp; \\
245 xmllint --format --postvalid track.tmp > \$(TRACKING_FILE); \\
246 rm track.tmp; \\
247 for file in *-*; do \\
248 xsltproc --stringparam packages ../packages.xml \\
249 --stringparam package \$\${file##*z-} \\
250 -o track.tmp \\
251 ../xsl/bump.xsl \$(TRACKING_FILE); \\
252 sed -i 's@PACKDESC@$BLFS_ROOT/packdesc.dtd@' track.tmp; \\
253 xmllint --format --postvalid track.tmp > \$(TRACKING_FILE); \\
254 rm track.tmp; \\
255 done
256 @touch \$@
257 @echo -e "\n\n "\$(BOLD)Target \$(BLUE)\$@ \$(BOLD)OK
258 @echo --------------------------------------------------------------------------------\$(WHITE)
259EOF
260popd
261}
Note: See TracBrowser for help on using the repository browser.