Merge the new_features branch (manully, thanks to svn)

This commit is contained in:
Pierre Labastie 2017-04-09 10:29:32 +00:00
parent 909ee37e1a
commit 945ccaa75e
13 changed files with 810 additions and 117 deletions

View file

@ -26,6 +26,7 @@ declare BLFS_XML="${TOPDIR}/blfs-xml"
declare -a TARGET declare -a TARGET
declare DEP_LEVEL declare DEP_LEVEL
declare SUDO declare SUDO
declare WRAP_INSTALL
#--------------------------# #--------------------------#
parse_configuration() { # parse_configuration() { #
@ -44,6 +45,7 @@ parse_configuration() { #
# Create global variables for these parameters. # Create global variables for these parameters.
optDependency=* | \ optDependency=* | \
MAIL_SERVER=* | \ MAIL_SERVER=* | \
WRAP_INSTALL=* | \
SUDO=* ) eval ${REPLY} # Define/set a global variable.. SUDO=* ) eval ${REPLY} # Define/set a global variable..
continue ;; continue ;;
esac esac
@ -62,13 +64,14 @@ parse_configuration() { #
TARGET=(${optTARGET[*]}) TARGET=(${optTARGET[*]})
DEP_LEVEL=$optDependency DEP_LEVEL=$optDependency
SUDO=${SUDO:-n} SUDO=${SUDO:-n}
WRAP_INSTALL=${WRAP_INSTALL:-n}
} }
#--------------------------# #--------------------------#
validate_configuration() { # validate_configuration() { #
#--------------------------# #--------------------------#
local -r dotSTR=".................." local -r dotSTR=".................."
local -r PARAM_LIST="DEP_LEVEL SUDO MAIL_SERVER" local -r PARAM_LIST="DEP_LEVEL SUDO MAIL_SERVER WRAP_INSTALL"
local -r PARAM_VALS='${config_param}${dotSTR:${#config_param}} ${L_arrow}${BOLD}${!config_param}${OFF}${R_arrow}' local -r PARAM_VALS='${config_param}${dotSTR:${#config_param}} ${L_arrow}${BOLD}${!config_param}${OFF}${R_arrow}'
local config_param local config_param
local -i index local -i index
@ -179,6 +182,7 @@ echo -en "\n\tGenerating the build scripts ...\n"
rm -rf scripts rm -rf scripts
xsltproc --xinclude --nonet \ xsltproc --xinclude --nonet \
--stringparam sudo $SUDO \ --stringparam sudo $SUDO \
--stringparam wrap-install $WRAP_INSTALL \
-o ./scripts/ ${MakeScripts} \ -o ./scripts/ ${MakeScripts} \
${BookXml} ${BookXml}
# Make the scripts executable. # Make the scripts executable.

View file

@ -58,6 +58,16 @@ config SUDO
help help
Select if sudo will be used (you build as a normal user) Select if sudo will be used (you build as a normal user)
otherwise sudo is not needed (you build as root) otherwise sudo is not needed (you build as root)
config WRAP_INSTALL
bool "Use `porg style' package management"
default n
help
Select if you want the installation commands to be wrapped
between "wrapInstall '" and "' ; packInstall" functions,
where wrapInstall is used to set up a LD_PRELOAD library (for
example using porg), and packInstall makes the package tarball
</xsl:text> </xsl:text>
</xsl:template> </xsl:template>

View file

@ -21,6 +21,10 @@
</xsl:choose> </xsl:choose>
</xsl:variable> </xsl:variable>
<!-- Wrap "root" commands inside a wrapper function, allowing
"porg style" package management -->
<xsl:param name="wrap-install" select="'n'"/>
<!-- Build as user (y) or as root (n)? --> <!-- Build as user (y) or as root (n)? -->
<xsl:param name="sudo" select="'y'"/> <xsl:param name="sudo" select="'y'"/>
@ -69,8 +73,10 @@
<xsl:choose> <xsl:choose>
<!-- Package page --> <!-- Package page -->
<xsl:when test="sect2[@role='package']"> <xsl:when test="sect2[@role='package']">
<!-- We build in a subdirectory --> <!-- We build in a subdirectory, whose name may be needed
<xsl:text>PKG_DIR=</xsl:text> if using package management (see envars.conf), so
"export" it -->
<xsl:text>export PKG_DIR=</xsl:text>
<xsl:value-of select="$filename"/> <xsl:value-of select="$filename"/>
<xsl:text> <xsl:text>
SRC_DIR=${SRC_ARCHIVE}${SRC_SUBDIRS:+/${PKG_DIR}} SRC_DIR=${SRC_ARCHIVE}${SRC_SUBDIRS:+/${PKG_DIR}}
@ -149,6 +155,7 @@ case $PACKAGE in
cp $(find . -mindepth 1 -maxdepth 1 -type l) $UNPACKDIR cp $(find . -mindepth 1 -maxdepth 1 -type l) $UNPACKDIR
;; ;;
esac esac
export UNPACKDIR
cd $UNPACKDIR&#xA; cd $UNPACKDIR&#xA;
</xsl:text> </xsl:text>
<xsl:apply-templates select=".//screen | .//para/command"/> <xsl:apply-templates select=".//screen | .//para/command"/>
@ -407,12 +414,30 @@ fi
<xsl:if test="child::* = userinput and not(@role = 'nodump')"> <xsl:if test="child::* = userinput and not(@role = 'nodump')">
<xsl:choose> <xsl:choose>
<xsl:when test="@role = 'root'"> <xsl:when test="@role = 'root'">
<xsl:if test="$sudo = 'y'"> <xsl:if test="not(preceding-sibling::screen[1][@role='root'])">
<xsl:text>sudo -E sh &lt;&lt; ROOT_EOF&#xA;</xsl:text> <xsl:if test="$sudo = 'y'">
<xsl:text>sudo -E sh &lt;&lt; ROOT_EOF&#xA;</xsl:text>
</xsl:if>
<xsl:if test="$wrap-install = 'y' and
ancestor::sect2[@role='installation']">
<xsl:text>if [ -r "$PACK_INSTALL" ]; then
source $PACK_INSTALL
export -f wrapInstall
export -f packInstall
fi
wrapInstall '
</xsl:text>
</xsl:if>
</xsl:if> </xsl:if>
<xsl:apply-templates mode="root"/> <xsl:apply-templates mode="root"/>
<xsl:if test="$sudo = 'y'"> <xsl:if test="not(following-sibling::screen[1][@role='root'])">
<xsl:text>&#xA;ROOT_EOF</xsl:text> <xsl:if test="$wrap-install = 'y' and
ancestor::sect2[@role='installation']">
<xsl:text>'&#xA;packInstall</xsl:text>
</xsl:if>
<xsl:if test="$sudo = 'y'">
<xsl:text>&#xA;ROOT_EOF</xsl:text>
</xsl:if>
</xsl:if> </xsl:if>
</xsl:when> </xsl:when>
<xsl:otherwise> <xsl:otherwise>
@ -514,6 +539,8 @@ popd</xsl:text>
</xsl:call-template> </xsl:call-template>
</xsl:template> </xsl:template>
<xsl:variable name="APOS">'</xsl:variable>
<xsl:template name="output-root"> <xsl:template name="output-root">
<xsl:param name="out-string" select="''"/> <xsl:param name="out-string" select="''"/>
<xsl:choose> <xsl:choose>
@ -561,6 +588,19 @@ popd</xsl:text>
select="substring-after($out-string,'\')"/> select="substring-after($out-string,'\')"/>
</xsl:call-template> </xsl:call-template>
</xsl:when> </xsl:when>
<xsl:when test="contains($out-string,string($APOS))
and $wrap-install = 'y'
and ancestor::sect2[@role='installation']">
<xsl:call-template name="output-root">
<xsl:with-param name="out-string"
select="substring-before($out-string,string($APOS))"/>
</xsl:call-template>
<xsl:text>'\''</xsl:text>
<xsl:call-template name="output-root">
<xsl:with-param name="out-string"
select="substring-after($out-string,string($APOS))"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise> <xsl:otherwise>
<xsl:value-of select="$out-string"/> <xsl:value-of select="$out-string"/>
</xsl:otherwise> </xsl:otherwise>

152
Config.in
View file

@ -757,13 +757,12 @@ depends !BOOK_BLFS
# #
# You will have to select between: # You will have to select between:
# #
# - Only final system Glibc, GCC and Binutils testsuites # - Only critical final system testsuites
# - All final system testsuites # - All final system testsuites
# - Both temporary tools and final system testsuites # - Both temporary tools and final system testsuites
# #
# HLFS and CLFS have no testsuites available in the # HLFS and CLFS have no testsuites available in the
# temporary tools phase # temporary tools phase
# You will be prompted also about the "flavour" of the # You will be prompted also about the "flavour" of the
# testsuites run: # testsuites run:
# #
@ -771,19 +770,38 @@ depends !BOOK_BLFS
# - Abort the build at the first test suite failure # - Abort the build at the first test suite failure
# #
menu "Test settings"
depends CONFIG_TESTS
choice choice
prompt "Tests level" prompt "Tests level"
depends CONFIG_TESTS
default TST_1 default TST_1
config TST_1 config TST_1
bool "Only final critical testsuites" if !BOOK_CLFS2 && !BOOK_CLFS3 bool "Only final system critical testsuites"
help
#-- Critical tests:
# Only Glibc, Binutils, GMP, MPFR, MPC and GCC
# testsuites for final system
config TST_2 config TST_2
bool "All final system testsuites" bool "All final system testsuites"
config TST_3 config TST_3
bool "Both temporary tools and final system testsuites" if !BOOK_HLFS && !BOOK_CLFS bool "All testsuites" if !BOOK_HLFS && !BOOK_CLFS
help
#-- All tests:
# Runs all the testsuites for both temporary tools
# and final system
endchoice
choice
prompt "Flavour"
config NO_BOMB
bool "Don't stop on test failures"
config BOMB
bool "Abort the build on the first test failure"
endchoice endchoice
config TEST config TEST
@ -793,23 +811,13 @@ depends !BOOK_BLFS
default "2" if TST_2 default "2" if TST_2
default "3" if TST_3 default "3" if TST_3
choice
prompt "Flavour"
depends CONFIG_TESTS
config NO_BOMB
bool "Don't stop on testsuite failures"
config BOMB
bool "Abort the build on the first testsuite failure"
endchoice
config BOMB_TEST config BOMB_TEST
bool bool
default n if NO_BOMB default n if NO_BOMB
default y if BOMB default y if BOMB
#--- End Test Suites #--- End Test Suites
endmenu # test settings
#--- Package Management #--- Package Management
config PKGMNGT config PKGMNGT
@ -819,10 +827,18 @@ depends !BOOK_BLFS
help help
#-- Use package management #-- Use package management
# #
# If set, the packages in the final phase are built # If set, you'll have to choose between
# in a separate directory, PKG_DEST. # two package management styles:
# You should provide a bash function for packing # - Build and install:
# and installing the package. # the packages in the final phase are built
# in a separate directory, PKG_DEST.
# You should provide a bash function for
# packaing and installing the package.
# - Preload a library before install:
# Run the install instructions inside a
# wrapper command, which monitors the
# installed files.
#
# Also, you have to provide the instructions # Also, you have to provide the instructions
# to build the package manager during the # to build the package manager during the
# temporary tools phase, in the form of a # temporary tools phase, in the form of a
@ -830,7 +846,22 @@ depends !BOOK_BLFS
# sect1. See README.PACKAGE_MANAGEMENT # sect1. See README.PACKAGE_MANAGEMENT
# #
# For now, this only works with LFS # For now, this only works with LFS
choice
depends PKGMNGT
prompt "Package management style"
default PKG_PACK
config PKG_PACK
bool "Build and pack (pacman or dpkg style)"
config LIB_LOAD
bool "Preload a library before installing (porg style)"
endchoice
config WRAP_INSTALL
bool
default y if LIB_LOAD
default n if PKG_PACK
#--- End package management #--- End package management
#--- Installed files logs #--- Installed files logs
@ -843,13 +874,31 @@ depends !BOOK_BLFS
#--- End Installed files logs #--- End Installed files logs
config STRIP
bool "Strip Installed Binaries/Libraries"
default n
depends on !BOOK_CLFS3
config NO_PROGRESS_BAR
bool "DO NOT use/display progress_bar "
default n
help
#-- Do not use the progress bar routine. On slower machines
# this function consumes precious CPU cycles.
#--- End Build Settings
endmenu
menu "System configuration
depends !BOOK_BLFS
#--- FSTAB #--- FSTAB
config HAVE_FSTAB config HAVE_FSTAB
bool "Use a custom fstab file" bool "Use a custom fstab file"
default n default n
help help
#-- Select this if you have an fstab file with entries #-- Select this if you have an fstab file with entries
# for the target system # for the target system
config FSTAB config FSTAB
string "Fstab file (optional)" string "Fstab file (optional)"
@ -880,11 +929,6 @@ depends !BOOK_BLFS
# and renamed 'kernel-config' # and renamed 'kernel-config'
#--- End Kernel #--- End Kernel
config STRIP
bool "Strip Installed Binaries/Libraries"
default n
depends on !BOOK_CLFS3
config VIMLANG config VIMLANG
bool "Install vim-lang package" bool "Install vim-lang package"
default n default n
@ -894,13 +938,6 @@ depends !BOOK_BLFS
# NOTE: This option is obsolete with the 7.3 release of Vim # NOTE: This option is obsolete with the 7.3 release of Vim
# which is included in all recent releases of LFS. # which is included in all recent releases of LFS.
config NO_PROGRESS_BAR
bool "DO NOT use/display progress_bar "
default n
help
#-- Do not use the progress bar routine. On slower machines
# this function consumes precious CPU cycles.
config TIMEZONE config TIMEZONE
string "TimeZone" string "TimeZone"
default "GMT" default "GMT"
@ -946,8 +983,53 @@ depends !BOOK_BLFS
default "A4" if PAGE_A4 default "A4" if PAGE_A4
#--- End Groff page #--- End Groff page
#--- End Build Settings config HOSTNAME
endmenu string "Hostname"
default "**EDITME**"
menu "Network configuration"
config INTERFACE
string "netword card name"
default "eth0"
config IP_ADDR
string "Static IP address"
default "10.0.2.9"
config GATEWAY
string "Gateway"
default "10.0.2.2"
config PREFIX
string "Subnet prefix"
default "24"
config BROADCAST
string "Broadcast address"
default "10.0.2.255"
config DOMAIN
string "Domain name"
default "lfs.org"
config DNS1
string "Primary Name server"
default "10.0.2.3"
config DNS2
string "Secondary Name server"
default "8.8.8.8"
endmenu # Network configuration
menu "Console configuration"
config FONT
string "Console font"
default "lat0-16"
config FONTMAP
string "Font map (-m option to setfont)"
default "8859-1"
config UNICODE
bool "Unicode mode"
default y
config KEYMAP
string "Keymap name"
default "us"
endmenu # Console configuration
endmenu #--- System configuration
menu "Advanced Features" menu "Advanced Features"
depends !BOOK_BLFS depends !BOOK_BLFS

View file

@ -8,6 +8,8 @@
extension-element-prefixes="exsl" extension-element-prefixes="exsl"
version="1.0"> version="1.0">
<!-- Parameters -->
<!-- which revision attribute to include: can only be sysv or systemd, <!-- which revision attribute to include: can only be sysv or systemd,
but we leave checking to the caller--> but we leave checking to the caller-->
<xsl:param name="revision" select="'sysv'"/> <xsl:param name="revision" select="'sysv'"/>
@ -16,11 +18,18 @@
n = no, original behavior n = no, original behavior
y = yes, add PKG_DEST to scripts in install commands of chapter06-08 y = yes, add PKG_DEST to scripts in install commands of chapter06-08
--> -->
<xsl:param name="pkgmngt" select="n"/> <xsl:param name="pkgmngt" select="'n'"/>
<!-- Package management with "porg style" ?
n = no, same as pkgmngt description above
y = yes, wrap install commands of chapter06-08 into a bash function.
note that pkgmngt must be 'y' in this case
-->
<xsl:param name="wrap-install" select='"n"'/>
<!-- Run test suites? <!-- Run test suites?
0 = none 0 = none
1 = only chapter06 Glibc, GCC and Binutils testsuites 1 = only chapter06 critical testsuites
2 = all chapter06 testsuites 2 = all chapter06 testsuites
3 = all chapter05 and chapter06 testsuites 3 = all chapter05 and chapter06 testsuites
--> -->
@ -30,23 +39,39 @@
n = no, I want to build the full system and review the logs n = no, I want to build the full system and review the logs
y = yes, bomb at the first test suite failure to can review the build dir y = yes, bomb at the first test suite failure to can review the build dir
--> -->
<xsl:param name="bomb-testsuite" select="n"/> <xsl:param name="bomb-testsuite" select="'n'"/>
<!-- Install vim-lang package? OBSOLETE should always be 'n'--> <!-- Install vim-lang package? OBSOLETE should always be 'n'-->
<xsl:param name="vim-lang" select="n"/> <xsl:param name="vim-lang" select="'n'"/>
<!-- Time zone --> <!-- Time zone -->
<xsl:param name="timezone" select="GMT"/> <xsl:param name="timezone" select="'GMT'"/>
<!-- Page size --> <!-- Page size -->
<xsl:param name="page" select="letter"/> <xsl:param name="page" select="'letter'"/>
<!-- Locale settings --> <!-- Locale settings -->
<xsl:param name="lang" select="C"/> <xsl:param name="lang" select="'C'"/>
<!-- Install the whole set of locales --> <!-- Install the whole set of locales -->
<xsl:param name='full-locale' select='n'/> <xsl:param name='full-locale' select='"n"'/>
<!-- Hostname -->
<xsl:param name='hostname' select='"HOSTNAME"'/>
<!-- Network parameters: interface, ip, gateway, prefix, broadcast, domain
and nameservers -->
<xsl:param name='interface' select="'eth0'"/>
<xsl:param name='ip' select='"10.0.2.9"'/>
<xsl:param name='gateway' select='"10.0.2.2"'/>
<xsl:param name='prefix' select='24'/>
<xsl:param name='broadcast' select='"10.0.2.255"'/>
<xsl:param name='domain' select='"lfs.org"'/>
<xsl:param name='nameserver1' select='"10.0.2.3"'/>
<xsl:param name='nameserver2' select='"8.8.8.8"'/>
<!-- End parameters -->
<xsl:template match="/"> <xsl:template match="/">
<xsl:apply-templates select="//sect1[not(@revision) or <xsl:apply-templates select="//sect1[not(@revision) or
@revision=$revision]"/> @revision=$revision]"/>
@ -176,7 +201,13 @@
descendant::screen[not(@role) or descendant::screen[not(@role) or
@role != 'nodump']/userinput[ @role != 'nodump']/userinput[
@remap='install']"> @remap='install']">
<xsl:text>mkdir -pv $PKG_DEST/{boot,etc,lib,bin,sbin} <xsl:choose>
<xsl:when test="$wrap-install='y'">
<xsl:text>wrapInstall '
</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>mkdir -pv $PKG_DEST/{boot,etc,lib,bin,sbin}
mkdir -pv $PKG_DEST/usr/{lib,bin,sbin,include} mkdir -pv $PKG_DEST/usr/{lib,bin,sbin,include}
mkdir -pv $PKG_DEST/usr/share/{doc,info,man} mkdir -pv $PKG_DEST/usr/share/{doc,info,man}
mkdir -pv $PKG_DEST/usr/share/man/man{1..8} mkdir -pv $PKG_DEST/usr/share/man/man{1..8}
@ -185,10 +216,13 @@ case $(uname -m) in
x86_64) ln -sv lib $PKG_DEST/lib64 &amp;&amp; ln -sv lib $PKG_DEST/usr/lib64 ;; x86_64) ln -sv lib $PKG_DEST/lib64 &amp;&amp; ln -sv lib $PKG_DEST/usr/lib64 ;;
esac esac
</xsl:text> </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:if> </xsl:if>
<xsl:if test="../@id = 'ch-system-glibc' and <xsl:if test="../@id = 'ch-system-glibc' and
@role='installation' and @role='installation' and
$pkgmngt = 'y'"> $pkgmngt = 'y' and
$wrap-install = 'n'">
<xsl:text>mkdir -pv $PKG_DEST/usr/include/{rpc,rpcsvc} <xsl:text>mkdir -pv $PKG_DEST/usr/include/{rpc,rpcsvc}
</xsl:text> </xsl:text>
</xsl:if> </xsl:if>
@ -202,27 +236,54 @@ esac
descendant::screen[not(@role) or descendant::screen[not(@role) or
@role != 'nodump']/userinput[ @role != 'nodump']/userinput[
@remap='install']"> @remap='install']">
<xsl:if test="../@id = 'ch-system-man-pages'"> <xsl:choose>
<xsl:when test="$wrap-install='y'">
<xsl:if test="../@id = 'ch-system-man-pages'">
<!-- these files are provided by the shadow package --> <!-- these files are provided by the shadow package -->
<xsl:text>rm -fv $PKG_DEST/usr/share/man/{man3/getspnam.3,man5/passwd.5} <xsl:text>rm -fv /usr/share/man/{man3/getspnam.3,man5/passwd.5}
</xsl:text> </xsl:text>
</xsl:if> </xsl:if>
<!-- Attr man/man2 pages are already installed by man-pages. As of <!-- Attr man/man2 pages are already installed by man-pages. As of
March 2013, they are the same pages. March 2013, they are the same pages.
November 2015: now they are more accurate November 2015: now they are more accurate
in man-pages, and the man5 section is also in man-pages... --> in man-pages, and the man5 section is also in man-pages... -->
<xsl:if test="../@id = 'ch-system-attr'"> <xsl:if test="../@id = 'ch-system-attr'">
<xsl:text>rm -fv $PKG_DEST/usr/share/man/man2/* <xsl:text>rm -fv /usr/share/man/man2/*
rm -fv /usr/share/man/man5/*
</xsl:text>
</xsl:if>
<!-- nologin is installed by util-linux. remove it from shadow -->
<xsl:if test="../@id = 'ch-system-shadow'">
<xsl:text>rm -fv /usr/share/man/man8/nologin.8
rm -fv /sbin/nologin
</xsl:text>
</xsl:if>
<xsl:text>'
packInstall
</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:if test="../@id = 'ch-system-man-pages'">
<!-- these files are provided by the shadow package -->
<xsl:text>rm -fv $PKG_DEST/usr/share/man/{man3/getspnam.3,man5/passwd.5}
</xsl:text>
</xsl:if>
<!-- Attr man/man2 pages are already installed by man-pages. As of
March 2013, they are the same pages.
November 2015: now they are more accurate
in man-pages, and the man5 section is also in man-pages... -->
<xsl:if test="../@id = 'ch-system-attr'">
<xsl:text>rm -fv $PKG_DEST/usr/share/man/man2/*
rm -fv $PKG_DEST/usr/share/man/man5/* rm -fv $PKG_DEST/usr/share/man/man5/*
</xsl:text> </xsl:text>
</xsl:if> </xsl:if>
<!-- nologin is installed by util-linux. remove it from shadow --> <!-- nologin is installed by util-linux. remove it from shadow -->
<xsl:if test="../@id = 'ch-system-shadow'"> <xsl:if test="../@id = 'ch-system-shadow'">
<xsl:text>rm -fv $PKG_DEST/usr/share/man/man8/nologin.8 <xsl:text>rm -fv $PKG_DEST/usr/share/man/man8/nologin.8
rm -fv $PKG_DEST/sbin/nologin rm -fv $PKG_DEST/sbin/nologin
</xsl:text> </xsl:text>
</xsl:if> </xsl:if>
<xsl:text>rm -fv $PKG_DEST/{,usr/}lib64 <xsl:text>rm -fv $PKG_DEST/{,usr/}lib64
rm -fv $PKG_DEST/usr/{man,doc,info} rm -fv $PKG_DEST/usr/{man,doc,info}
for dir in $PKG_DEST/usr/share/man/man{1..8}; do for dir in $PKG_DEST/usr/share/man/man{1..8}; do
[[ -z $(ls $dir) ]] &amp;&amp; rmdir -v $dir [[ -z $(ls $dir) ]] &amp;&amp; rmdir -v $dir
@ -239,6 +300,8 @@ done
packInstall packInstall
rm -rf $PKG_DEST rm -rf $PKG_DEST
</xsl:text> </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:if> </xsl:if>
<xsl:if test="$testsuite='3' and <xsl:if test="$testsuite='3' and
../@id='ch-tools-glibc' and ../@id='ch-tools-glibc' and
@ -309,7 +372,7 @@ cd $PKGDIR
mode="pkgmngt"/> mode="pkgmngt"/>
<xsl:if test="$dirname = 'chapter06'"> <xsl:if test="$dirname = 'chapter06'">
<xsl:text>packInstall <xsl:text>packInstall
rm -rf $PKG_DEST rm -rf "$PKG_DEST"
</xsl:text> </xsl:text>
</xsl:if> </xsl:if>
<xsl:apply-templates <xsl:apply-templates
@ -452,7 +515,26 @@ exit
</xsl:otherwise> </xsl:otherwise>
</xsl:choose> </xsl:choose>
</xsl:when> </xsl:when>
<xsl:otherwise><!--pkgmngt = 'y'--> <xsl:when test="$wrap-install='y'">
<xsl:choose>
<xsl:when test="./literal">
<xsl:call-template name="output-wrap">
<xsl:with-param name="commands" select="text()[1]"/>
</xsl:call-template>
<xsl:apply-templates select="literal"/>
<xsl:call-template name="output-wrap">
<xsl:with-param name="commands" select="text()[2]"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="output-wrap">
<xsl:with-param name="commands" select="string()"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
<xsl:text>&#xA;</xsl:text>
</xsl:when>
<xsl:otherwise><!--pkgmngt = 'y' and wrap-install='n'-->
<xsl:choose> <xsl:choose>
<xsl:when test="./literal"> <xsl:when test="./literal">
<xsl:call-template name="outputpkgdest"> <xsl:call-template name="outputpkgdest">
@ -476,7 +558,7 @@ exit
tzdata. --> tzdata. -->
<xsl:when test="contains(string(),'tzdata') and $pkgmngt='y'"> <xsl:when test="contains(string(),'tzdata') and $pkgmngt='y'">
<xsl:text> <xsl:text>
OLD_PKG_DEST=$PKG_DEST OLD_PKG_DEST="$PKG_DEST"
OLD_PKGDIR=$PKGDIR OLD_PKGDIR=$PKGDIR
PKG_DEST=$(dirname $OLD_PKG_DEST)/001-tzdata PKG_DEST=$(dirname $OLD_PKG_DEST)/001-tzdata
PKGDIR=$(dirname $PKGDIR)/tzdata-</xsl:text> PKGDIR=$(dirname $PKGDIR)/tzdata-</xsl:text>
@ -485,12 +567,28 @@ PKGDIR=$(dirname $PKGDIR)/tzdata-</xsl:text>
'.tar')"/> '.tar')"/>
<xsl:text> <xsl:text>
</xsl:text> </xsl:text>
<xsl:copy-of select="substring-before(string(),'ZONEINFO=')"/> <xsl:choose>
<xsl:text>ZONEINFO=$PKG_DEST</xsl:text> <xsl:when test="$wrap-install='n'">
<xsl:copy-of select="substring-after(string(),'ZONEINFO=')"/> <xsl:copy-of select="substring-before(string(),'ZONEINFO=')"/>
<xsl:text> <xsl:text>ZONEINFO=$PKG_DEST</xsl:text>
<xsl:copy-of select="substring-after(string(),'ZONEINFO=')"/>
<xsl:text>
packInstall packInstall
rm -rf $PKG_DEST rm -rf $PKG_DEST
</xsl:text>
</xsl:when>
<xsl:otherwise><!-- wrap-install='y' -->
<xsl:copy-of select="substring-before(string(),'ZONEINFO=')"/>
<xsl:text>
wrapInstall '
ZONEINFO=</xsl:text>
<xsl:copy-of select="substring-after(string(),'ZONEINFO=')"/>
<xsl:text>'
packInstall
</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>
PKG_DEST=$OLD_PKG_DEST PKG_DEST=$OLD_PKG_DEST
unset OLD_PKG_DEST unset OLD_PKG_DEST
PKGDIR=$OLD_PKGDIR PKGDIR=$OLD_PKGDIR
@ -517,6 +615,34 @@ unset OLD_PKGDIR
<xsl:when test="contains(string(.),'&lt;ll&gt;_&lt;CC&gt;')"> <xsl:when test="contains(string(.),'&lt;ll&gt;_&lt;CC&gt;')">
<xsl:value-of select="$lang"/> <xsl:value-of select="$lang"/>
</xsl:when> </xsl:when>
<xsl:when test="contains(string(.),'Domain')">
<xsl:value-of select="$domain"/>
</xsl:when>
<xsl:when test="contains(string(.),'primary')">
<xsl:value-of select="$nameserver1"/>
</xsl:when>
<xsl:when test="contains(string(.),'secondary')">
<xsl:value-of select="$nameserver2"/>
</xsl:when>
<xsl:when test="contains(string(.),'192.168.1.1')">
<xsl:value-of select="$ip"/>
</xsl:when>
<xsl:when test="contains(string(.),'192.168.0.2')">
<xsl:value-of select="$ip"/>
</xsl:when>
<!-- Only adapted to LFS-20170310 and later -->
<xsl:when test="contains(string(.),'HOSTNAME')">
<xsl:value-of select="$hostname"/>
</xsl:when>
<xsl:when test="contains(string(.),'FQDN')">
<xsl:value-of select="$hostname"/>
<xsl:text>.</xsl:text>
<xsl:value-of select="$domain"/>
</xsl:when>
<xsl:when test="contains(string(.),'alias')"/>
<xsl:when test="contains(string(.),'&lt;lfs&gt;')">
<xsl:value-of select="$hostname"/>
</xsl:when>
<xsl:otherwise> <xsl:otherwise>
<xsl:text>**EDITME</xsl:text> <xsl:text>**EDITME</xsl:text>
<xsl:apply-templates/> <xsl:apply-templates/>
@ -525,6 +651,185 @@ unset OLD_PKGDIR
</xsl:choose> </xsl:choose>
</xsl:template> </xsl:template>
<xsl:template match="literal">
<xsl:choose>
<xsl:when test="contains(string(),'ONBOOT')">
<xsl:call-template name="outputnet">
<xsl:with-param name="netstring" select="string()"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="contains(string(),'[Match]')">
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring" select="string()"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="outputnet">
<xsl:param name="netstring" select="''"/>
<!-- We suppose that book example has the following values:
- interface: eth0
- ip: 192.168.1.2
- gateway: 192.168.1.1
- prefix: 24
- broadcast: 192.168.1.255
Change below if book changes -->
<xsl:choose>
<xsl:when test="contains($netstring,'eth0')">
<xsl:call-template name="outputnet">
<xsl:with-param name="netstring"
select="substring-before($netstring,'eth0')"/>
</xsl:call-template>
<xsl:value-of select="$interface"/>
<xsl:call-template name="outputnet">
<xsl:with-param name="netstring"
select="substring-after($netstring,'eth0')"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="contains($netstring,'192.168.1.1')">
<xsl:call-template name="outputnet">
<xsl:with-param name="netstring"
select="substring-before($netstring,'192.168.1.1')"/>
</xsl:call-template>
<xsl:value-of select="$gateway"/>
<xsl:call-template name="outputnet">
<xsl:with-param name="netstring"
select="substring-after($netstring,'192.168.1.1')"/>
</xsl:call-template>
</xsl:when>
<!-- must test this before the following, because 192.168.1.255 contains
192.168.1.2! -->
<xsl:when test="contains($netstring,'192.168.1.255')">
<xsl:call-template name="outputnet">
<xsl:with-param name="netstring"
select="substring-before($netstring,'192.168.1.255')"/>
</xsl:call-template>
<xsl:value-of select="$broadcast"/>
<xsl:call-template name="outputnet">
<xsl:with-param name="netstring"
select="substring-after($netstring,'192.168.1.255')"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="contains($netstring,'192.168.1.2')">
<xsl:call-template name="outputnet">
<xsl:with-param name="netstring"
select="substring-before($netstring,'192.168.1.2')"/>
</xsl:call-template>
<xsl:value-of select="$ip"/>
<xsl:call-template name="outputnet">
<xsl:with-param name="netstring"
select="substring-after($netstring,'192.168.1.2')"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="contains($netstring,'24')">
<xsl:call-template name="outputnet">
<xsl:with-param name="netstring"
select="substring-before($netstring,'24')"/>
</xsl:call-template>
<xsl:value-of select="$prefix"/>
<xsl:call-template name="outputnet">
<xsl:with-param name="netstring"
select="substring-after($netstring,'24')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$netstring"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="outputsysdnet">
<xsl:param name="netstring" select="''"/>
<!-- We suppose that book example has the following values:
- interface: eth0
- ip: 192.168.0.2
- gateway: 192.168.0.1
- prefix: 24
- DNS: 192.168.0.1
- Domain: <Your Domain Name>
and gateway comes before DNS. Change below if book changes -->
<xsl:choose>
<xsl:when test="contains($netstring,'eth0')">
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring"
select="substring-before($netstring,'eth0')"/>
</xsl:call-template>
<xsl:value-of select="$interface"/>
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring"
select="substring-after($netstring,'eth0')"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="contains($netstring,'192.168.0.1') and
contains($netstring,'Gateway')">
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring"
select="substring-before($netstring,'192.168.0.1')"/>
</xsl:call-template>
<xsl:value-of select="$gateway"/>
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring"
select="substring-after($netstring,'192.168.0.1')"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="contains($netstring,'192.168.0.1') and
not(contains($netstring,'Gateway'))">
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring"
select="substring-before($netstring,'192.168.0.1')"/>
</xsl:call-template>
<xsl:value-of select="$nameserver1"/>
<xsl:text>
DNS=</xsl:text>
<xsl:value-of select="$nameserver2"/>
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring"
select="substring-after($netstring,'192.168.0.1')"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="contains($netstring,'192.168.0.2')">
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring"
select="substring-before($netstring,'192.168.0.2')"/>
</xsl:call-template>
<xsl:value-of select="$ip"/>
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring"
select="substring-after($netstring,'192.168.0.2')"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="contains($netstring,'24')">
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring"
select="substring-before($netstring,'24')"/>
</xsl:call-template>
<xsl:value-of select="$prefix"/>
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring"
select="substring-after($netstring,'24')"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="contains($netstring,'&lt;Your Domain Name&gt;')">
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring"
select="substring-before($netstring,'&lt;Your Domain Name&gt;')"/>
</xsl:call-template>
<xsl:value-of select="$domain"/>
<xsl:call-template name="outputsysdnet">
<xsl:with-param name="netstring"
select="substring-after($netstring,'&lt;Your Domain Name&gt;')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$netstring"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="outputpkgdest"> <xsl:template name="outputpkgdest">
<xsl:param name="outputstring" select="foo"/> <xsl:param name="outputstring" select="foo"/>
<xsl:choose> <xsl:choose>
@ -623,4 +928,26 @@ unset OLD_PKGDIR
</xsl:otherwise> </xsl:otherwise>
</xsl:choose> </xsl:choose>
</xsl:template> </xsl:template>
<xsl:variable name="APOS">'</xsl:variable>
<xsl:template name="output-wrap">
<xsl:param name="commands" select="''"/>
<xsl:choose>
<xsl:when test="contains($commands,string($APOS))">
<xsl:call-template name="output-wrap">
<xsl:with-param name="commands"
select="substring-before($commands,string($APOS))"/>
</xsl:call-template>
<xsl:text>'\''</xsl:text>
<xsl:call-template name="output-wrap">
<xsl:with-param name="commands"
select="substring-after($commands,string($APOS))"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$commands"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet> </xsl:stylesheet>

View file

@ -6,32 +6,49 @@ $Id$
There are several hints discussing package management for LFS, but There are several hints discussing package management for LFS, but
nothing under jhalfs. There used to be a patch for PACO that I cannot nothing under jhalfs. There used to be a patch for PACO that I cannot
find now. This is a modification ("DESTDIR install" automation), which find now. So there was a need for such a tool, and an infrastructure,
allows to use a package manager inside jhalfs. I hope it is flexible enough which allows using a package manager inside jhalfs, has been developped.
to support several package managers, at least among those who use DESTDIR I hope it is flexible enough to support several package managers, at least
install. My initial implementation used dpkg, from Debian, in a very among those who use DESTDIR install and/or LD_PRELOAD during install.
crude way (Debian has a sophisticated package management system, which It has been tested with dpkg from Debian, pacman from Arch Linux,
I have not tried to use here). There is also a port to Pacman from and porg. Sample configuration files are given for those three packages.
Arch Linux (http://www.archlinux.org). I am sorry to say I have (almost) I am sorry to say I have (almost) no experience with rpm, so I cannot
no experience with rpm, so I cannot tell whether it would fit. tell whether it would fit.
2. OVERVIEW OF THE SYSTEM: 2. OVERVIEW OF THE SYSTEM:
Presently, package management is only available for LFS. I plan to For now, package management is only available for LFS. The `porg style'
upgrade BLFS tools, but nothing usable right now. I have not attempted (see below) package management has been ported to BLFS, but not the distro
to adapt this tool for the other flavours of LFS. style one (the book layout makes it rather difficult). I have not attempted
to adapt this tool for the other flavours of LFS (TODO).
To use package management, you need to create the required files in This tool comes in two flavours:
the pkgmngt directory (see below), and to select "package management" in - for distros package managers (e.g dpkg or pacman), it basically performs
the build settings. Note that this is incompatible with creating an SBU a "DESTDIR install" for all pages in chapter 6, 7 and 8 of the book. The
and usage report. name of the DESTDIR directory is the same as the one of the executed
script. The path to this directory is available to the scriplets through
the PKG_DEST variable. The details of the DESTDIR part are given below.
After the package is installed in $PKG_DEST, a function "packInstall" is
called, which is supposed to create a binary package (e.g. make a .deb
file), store it to a repository and install it to the system.
- for porg style package manager, the install instructions are wrapped
between pairs of single quotes ('). This allows passing those instructions
to a function ("wrapInstall"), which may itself call porg or another
(e.g. fakeroot, not tested) instruction wrapper. Note that if the
instructions contain single quote charaters, they are changed to '\'',
which pass them literally. At the end of the installation, a function
"packInstall" is called, with a slighly different aim compared to the
DESTDIR one: it is used to make a tarball of the installed files (e.g.
using "porgball") and store them into some repository. But there is no
need to install them to the system, since this has already been done.
3. DETAILS OF OPERATION: Note that with carefully crafted "packInstall" and "wrapInstall"
functions, a combination of the two methods could be used, for example for
DESTDIR installs using fakeroot. This is work in progress and not fully
implemented yet.
3. DETAILS:
This system performs basically a "DESTDIR install" for all pages
in chapter 6, 7 and 8 of the book. The name of the DESTDIR directory is the
same as the one of the executed script. The path to this directory is
made available to the scriplets through the PKG_DEST variable.
The XSL stylesheet used for generating the scriptlets, automatically The XSL stylesheet used for generating the scriptlets, automatically
adds DESTDIR install instructions when "package management" is selected. adds DESTDIR install instructions when "package management" is selected.
Also all the paths beginning with " /" or ">/" (absolute paths) are prepended Also all the paths beginning with " /" or ">/" (absolute paths) are prepended
@ -43,6 +60,7 @@ $Id$
creates a reasonable subset of the FHS hierarchy into the destination creates a reasonable subset of the FHS hierarchy into the destination
directory. Empty directories are then removed before packing the directory. Empty directories are then removed before packing the
binary package. binary package.
In order to use the package manager, it has to be installed at the end of In order to use the package manager, it has to be installed at the end of
chapter 5 (temporary installation in /tools) and chapter 6 (final install). chapter 5 (temporary installation in /tools) and chapter 6 (final install).
Furthermore, the administrative files and directories have to be created Furthermore, the administrative files and directories have to be created
@ -51,20 +69,21 @@ $Id$
the necessary instructions and enough information to download the tarball. the necessary instructions and enough information to download the tarball.
This file should reside in the `pkgmngt' directory and be named This file should reside in the `pkgmngt' directory and be named
`packageManager.xml'. A template named `packageManager.xml.template' is `packageManager.xml'. A template named `packageManager.xml.template' is
provided in the `pkgmngt' subdirectory. There are also two XML files for provided in the `pkgmngt' subdirectory. There are also three XML files for
dpkg and pacman, respectively `packageManager.xml.dpkg' and dpkg, pacman, and porg, respectively `packageManager.xml.dpkg',
`packageManager.xml.pacman', that you can copy to `packageManager.xml'. `packageManager.xml.pacman', and `packageManager.xml.porg', that you can
copy to `packageManager.xml' and modify to suit your needs.
They are not updated often, so the versions used can be rather old. They are not updated often, so the versions used can be rather old.
The last thing to do is to tell how to use the package manager. When
the binary package is ready, the scriptlets call a shell function named The last thing to do is to tell how to use the package manager. The user
`packInstall', which should pack the binary package and install it on the has to provide two functions, "wrapInstall" and "packInstall", as described
system. Note that nothing has been done to manage configuration files, above. Please note that nothing has been done to manage configuration files,
which are ususally treated specially by package managers: depending on which are ususally treated specially by package managers: depending on
the book layout, it is sometimes possible to create those files afterwards, the book layout, it is sometimes possible to create those files afterwards,
and sometimes not, which means that you have to check them after each and sometimes not, which means that you have to check them after each
upgrade. The user has to write his own `packInstall' function. The shell upgrade. Both functions should be defined in a file named `packInstall.sh',
function should be defined in a file named `packInstall.sh', residing in residing in the `pkgmngt' directory. A template is provided (actually a copy
the `pkgmngt' directory. A template is provided, as well as two example of the file for dpkg), as well as three example scripts for dpkg, pacman,
scripts for dpkg and pacman. Note that, due to the way pacman checks the and porg. Pacman Note: due to the way pacman checks the available space on
available space on disk, the root directory in chroot must be a mount point, disk, the root directory in chroot must be a mount point, otherwise the
otherwise the installation of packages fails. installation of packages fails.

View file

@ -164,19 +164,29 @@ extract_commands() { #
fi fi
popd > /dev/null popd > /dev/null
xsltproc --nonet \ xsltproc --nonet \
--xinclude \ --xinclude \
--stringparam revision $INITSYS \ --stringparam revision $INITSYS \
--stringparam testsuite $TEST \ --stringparam testsuite $TEST \
--stringparam bomb-testsuite $BOMB_TEST \ --stringparam bomb-testsuite $BOMB_TEST \
--stringparam vim-lang $VIMLANG \ --stringparam vim-lang $VIMLANG \
--stringparam full-locale $FULL_LOCALE \ --stringparam full-locale $FULL_LOCALE \
--stringparam timezone $TIMEZONE \ --stringparam timezone $TIMEZONE \
--stringparam page $PAGE \ --stringparam page $PAGE \
--stringparam lang $LANG \ --stringparam lang $LANG \
--stringparam pkgmngt $PKGMNGT \ --stringparam pkgmngt $PKGMNGT \
--output ./${PROGNAME}-commands/ \ --stringparam wrap-install $WRAP_INSTALL \
$XSL \ --stringparam hostname $HOSTNAME \
--stringparam interface $INTERFACE \
--stringparam ip $IP_ADDR \
--stringparam gateway $GATEWAY \
--stringparam prefix $PREFIX \
--stringparam broadcast $BROADCAST \
--stringparam domain $DOMAIN \
--stringparam nameserver1 $DNS1 \
--stringparam nameserver2 $DNS2 \
--output ./${PROGNAME}-commands/ \
$XSL \
$BOOK/index.xml >> $LOGDIR/$LOG 2>&1 $BOOK/index.xml >> $LOGDIR/$LOG 2>&1
;; ;;
*) echo -n " ${L_arrow}${PROGNAME}${R_arrow} book invalid, terminate build... " *) echo -n " ${L_arrow}${PROGNAME}${R_arrow} book invalid, terminate build... "

View file

@ -12,6 +12,11 @@ cp -r BLFS/* ${BUILDDIR}${BLFS_ROOT}
cp -r menu ${BUILDDIR}${BLFS_ROOT} cp -r menu ${BUILDDIR}${BLFS_ROOT}
cp $COMMON_DIR/progress_bar.sh ${BUILDDIR}${BLFS_ROOT} cp $COMMON_DIR/progress_bar.sh ${BUILDDIR}${BLFS_ROOT}
cp README.BLFS ${BUILDDIR}${BLFS_ROOT} cp README.BLFS ${BUILDDIR}${BLFS_ROOT}
if [ "$WRAP_INSTALL" = y ]; then
sed -e 's/PKGDIR/UNPACKDIR/' \
-e 's/PKG_DEST/PKG_DIR/' \
$PKGMNGTDIR/packInstall.sh > ${BUILDDIR}${BLFS_ROOT}/packInstall.sh
fi
# Clean-up # Clean-up
make -C ${BUILDDIR}${BLFS_ROOT}/menu clean make -C ${BUILDDIR}${BLFS_ROOT}/menu clean
@ -115,6 +120,7 @@ $LINE_SUDO
MAIL_SERVER=sendmail MAIL_SERVER=sendmail
optDependency=2 optDependency=2
SUDO=n SUDO=n
WRAP_INSTALL=$WRAP_INSTALL
EOF EOF
# Generates the scripts for the blfs tools dependencies (in ./scripts) # Generates the scripts for the blfs tools dependencies (in ./scripts)

View file

@ -41,14 +41,17 @@ inline_doc
local -r CLFS3_book="$BOOK_common $BOOK_clfsX PLATFORM MIPS_LEVEL" local -r CLFS3_book="$BOOK_common $BOOK_clfsX PLATFORM MIPS_LEVEL"
# Build Settings by book # Build Settings by book
local -r LFS_build="$BUILD_chroot VIMLANG $BUILD_common PKGMNGT FULL_LOCALE" local -r LFS_build="$BUILD_chroot VIMLANG $BUILD_common PKGMNGT FULL_LOCALE WRAP_INSTALL"
local -r HLFS_build="$BUILD_chroot $BUILD_common" local -r HLFS_build="$BUILD_chroot $BUILD_common"
local -r CLFS_build="$BUILD_chroot VIMLANG $BUILD_common" local -r CLFS_build="$BUILD_chroot VIMLANG $BUILD_common"
local -r CLFS2_build="STRIP VIMLANG $BUILD_common" local -r CLFS2_build="STRIP VIMLANG $BUILD_common"
local -r CLFS3_build=" $BUILD_common" local -r CLFS3_build=" $BUILD_common"
# System Settings by book (only LFS for now)
local -r LFS_system="HOSTNAME INTERFACE IP_ADDR GATEWAY PREFIX BROADCAST DOMAIN DNS1 DNS2 FONT CONSOLE_MAP UNICODE KEYMAP"
# Full list of books settings # Full list of books settings
local -r lfs_PARAM_LIST="$LFS_book $GENERAL_common $LFS_build $ADVANCED_chroot $ADVANCED_common" local -r lfs_PARAM_LIST="$LFS_book $GENERAL_common $LFS_build $LFS_system $ADVANCED_chroot $ADVANCED_common"
local -r hlfs_PARAM_LIST="$HLFS_book $GENERAL_common $HLFS_build $ADVANCED_chroot $ADVANCED_common" local -r hlfs_PARAM_LIST="$HLFS_book $GENERAL_common $HLFS_build $ADVANCED_chroot $ADVANCED_common"
local -r clfs_PARAM_LIST="$CLFS_book $GENERAL_common $CLFS_build $ADVANCED_chroot $ADVANCED_common" local -r clfs_PARAM_LIST="$CLFS_book $GENERAL_common $CLFS_build $ADVANCED_chroot $ADVANCED_common"
local -r clfs2_PARAM_LIST="$CLFS2_book $GENERAL_common $CLFS2_build $ADVANCED_common" local -r clfs2_PARAM_LIST="$CLFS2_book $GENERAL_common $CLFS2_build $ADVANCED_common"
@ -193,6 +196,11 @@ inline_doc
echo echo
;; ;;
# Treatment of HOSTNAME
HOSTNAME) echo -e "`eval echo $PARAM_VALS`"
[[ "${!config_param}" = "**EDIT ME**" ]] && write_error_and_die
;;
# Case of PKGMNGT: two files, packageManager.xml and packInstall.sh # Case of PKGMNGT: two files, packageManager.xml and packInstall.sh
# must exist in $PKGMNGTDIR if PKGMNGT='y': # must exist in $PKGMNGTDIR if PKGMNGT='y':
PKGMNGT) echo -e "`eval echo $PARAM_VALS`" PKGMNGT) echo -e "`eval echo $PARAM_VALS`"

View file

@ -115,6 +115,7 @@ define get_pkg_root2
echo "export PKG_DEST=$(SRC)/$@" >> envars; \ echo "export PKG_DEST=$(SRC)/$@" >> envars; \
echo "source packInstall.sh" >> envars; \ echo "source packInstall.sh" >> envars; \
echo "export -f packInstall" >> envars; \ echo "export -f packInstall" >> envars; \
echo "export -f wrapInstall" >> envars; \
fi; fi;
endef endef

2
jhalfs
View file

@ -124,6 +124,7 @@ COMPARE=${COMPARE:-n}
RUN_FARCE=${RUN_FARCE:-n} RUN_FARCE=${RUN_FARCE:-n}
RUN_ICA=${RUN_ICA:-n} RUN_ICA=${RUN_ICA:-n}
PKGMNGT=${PKGMNGT:-n} PKGMNGT=${PKGMNGT:-n}
WRAP_INSTALL=${WRAP_INSTALL:-n}
BOMB_TEST=${BOMB_TEST:-n} BOMB_TEST=${BOMB_TEST:-n}
STRIP=${STRIP:=n} STRIP=${STRIP:=n}
REPORT=${REPORT:=n} REPORT=${REPORT:=n}
@ -141,6 +142,7 @@ SET_HARDENED_TMP=${SET_HARDENED_TMP:=n}
SET_WARNINGS=${SET_WARNINGS:=n} SET_WARNINGS=${SET_WARNINGS:=n}
SET_MISC=${SET_MISC:=n} SET_MISC=${SET_MISC:=n}
SET_BLOWFISH=${SET_BLOWFISH:=n} SET_BLOWFISH=${SET_BLOWFISH:=n}
UNICODE=${UNICODE:=n}
if [[ "${NO_PROGRESS_BAR}" = "y" ]] ; then if [[ "${NO_PROGRESS_BAR}" = "y" ]] ; then
NO_PROGRESS="#" NO_PROGRESS="#"

104
pkgmngt/packInstall.sh.porg Normal file
View file

@ -0,0 +1,104 @@
# $Id:$
# functions for recording installation of a package and make a tarball,
# or using fakeroot type commands for install, then packing and installing
# the package.
# We only have access to variables PKGDIR and PKG_DEST. Other variables could
# be set in the environment
extract_version() {
local VERSION
case $1 in
expect*|tcl*|tk*|mozjs*)
VERSION=$(echo $1 | sed 's/^[^0-9]*//')
;;
vim*|unzip*|zip*)
VERSION=$(echo $1 | sed 's/^[^0-9]*\([0-9]\)\([0-9]\)/\1.\2/')
;;
wireless_tools*|LVM2*)
VERSION=$(echo $1 | sed 's/^[^.]*\.//')
;;
x264*)
VERSION=$(echo $1 | sed 's/.*shot-//')
;;
icu*) # No version in PCKGVRS! Use version directly from xml book.
# PACK_INSTALL contains the path to this script, which is in the
# parent dir of the book.
local PACKENT=$(dirname $PACK_INSTALL)/blfs-xml/packages.ent
local VERSION1=$(sed -n 's/.*icu-major[^0-9]*\([^"]*\).*/\1/p' $PACKENT)
local VERSION2=$(sed -n 's/.*icu-minor[^0-9]*\([^"]*\).*/\1/p' $PACKENT)
VERSION=$VERSION1.$VERSION2
;;
soundtouch*)
local PACKENT=$(dirname $PACK_INSTALL)/blfs-xml/packages.ent
VERSION=$(sed -n 's/.*soundtouch[^0-9]*\([^"]*\).*/\1/p' $PACKENT)
;;
xf86-video-intel)
local PACKENT=$(dirname $PACK_INSTALL)/blfs-xml/x/installing/x7driver-intel.xml
VERSION=$(sed -n '/<!--/!s/.*-version[^;][^0-9]*\([^"]*\).*/\1/p' $PACKENT)
;;
jdk8*)
VERSION=1.8.0.$(echo $1 | sed 's/.*u\([0-9]\+\).*/\1/')
;;
docbook-xml)
VERSION=4.5
;;
cacerts*)
VERSION=0.1
;;
*)
VERSION=$(echo $1 | sed 's/^.*[-_]\([0-9]\)/\1/' | sed 's/_/./g')
;;
# the last sed above is because some package managers do not want a '_'
# in version.
esac
echo ${VERSION,,} # convert to lowercase, in case there is a capital letter
# in version
}
# Export the previous function, since it is used by the others
export -f extract_version
# The other "official" functions, wrapInstall and packInstall, are exported
# by "envars" (in LFS), and the scripts (in BLFS).
wrapInstall() {
# a bash command is passed as an argument (that may be a compound command).
# It is executed by this function, after various set-ups...
# Note that PKGDIR is changed to UNPACKDIR
# and PKG_DEST is changed to PKG_DIR in BLFS tools.
# The sed for PACKAGE is therefore not needed in BLFS,
# but it does not hurt, either.
local PCKGVRS=$(basename $PKGDIR)
local TGTPKG=$(basename $PKG_DEST)
local PACKAGE=$(echo ${TGTPKG} | sed 's/^[0-9]\{3\}-//' |
sed 's/^[0-9]\{1\}-//')
# Porg converts package names to lowercase anyway, so do the conversion
# ourselves
PACKAGE=${PACKAGE,,}
# version is only accessible from PKGDIR name. Since the format of the
# name is not normalized, several hacks are necessary (now in function
# extract_version)...
VERSION=$(extract_version $PCKGVRS)
porg -lp ${PACKAGE}-${VERSION} sh << PORG_EOF
$*
PORG_EOF
}
#----------------
packInstall() {
# With porg, we need only the package name to make the tarball
local TGTPKG=$(basename $PKG_DEST)
local PACKAGE=$(echo ${TGTPKG} | sed 's/^[0-9]\{3\}-//' |
sed 's/^[0-9]\{1\}-//')
local PCKGVRS=$(basename $PKGDIR)
# Porg converts package names to lowercase anyway, so do the conversion
# ourselves
PACKAGE=${PACKAGE,,}
# Building the binary package
porgball ${PACKAGE}
# The package is in the current directory
VERSION=$(extract_version $PCKGVRS)
mv -v ${PACKAGE}-${VERSION}.porg* /var/lib/packages
}

View file

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" >
<article>
<sect1 id="package">
<title>Package Information</title>
<para>Download: <ulink url="https://sourceforge.net/projects/porg/files/porg-0.10.tar.gz"/></para>
<para>MD5 sum: <literal>2eceb8a73bb188dbb06b12d90cabdbb4</literal></para>
</sect1>
<sect1 id="ch-tools-pkgmngt" role="wrap">
<?dbhtml filename="porg.html"?>
<title>Porg in tools</title>
<sect2 role="installation">
<title>Instructions</title>
<screen><userinput remap="configure">./configure --prefix=/tools \
--disable-grop \
--with-porg-logdir=/tools/var/porg</userinput></screen>
<para>
<parameter>--disable-grop</parameter> is needed to prevent the sytem from
trying to build the graphical interface, and
<parameter>--with-porg-logdir=...</parameter> is needed because
<command>make install</command> insists on creating a directory in
<filename class="directory">/var</filename>, where we do not want
to write.
</para>
<screen><userinput remap="make">make</userinput></screen>
<screen><userinput remap="install">make install</userinput></screen>
<screen><userinput>cat &gt;&gt; /tools/etc/porgrc &lt;&lt; EOF
# Porg logdir on LFS system
LOGDIR=/var/lib/porg
EOF
sed -e '/EXCLUDE/{s/^#//;s@$@:/sources:/home@}' \
-i /tools/etc/porgrc</userinput></screen>
</sect2>
</sect1>
<sect1 id="ch-pkgmngt-creatingdirs">
<title>Directories</title>
<screen><userinput>mkdir -pv /var/lib/porg
mkdir -pv /var/lib/packages</userinput></screen>
</sect1>
<sect1 id="ch-pkgmngt-createfiles">
<title>Files</title>
<para><command>porgball</command> needs <filename>porgrc</filename>
in <filename class="directory">/etc</filename>:</para>
<screen><userinput>cp /tools/etc/porgrc /etc</userinput></screen>
</sect1>
<sect1 id="ch-system-pkgmngt" role="wrap">
<?dbhtml filename="porg.html"?>
<title>Final Porg</title>
<sect2 role="installation">
<title>Instructions</title>
<screen><userinput remap="configure">./configure --prefix=/usr \
--disable-grop \
--sysconfdir=/etc \
--with-porg-logdir=/var/lib/porg</userinput></screen>
<screen><userinput remap="make">make</userinput></screen>
<screen><userinput remap="install">porg -lD "make install"</userinput></screen>
<screen><userinput>sed -e '/EXCLUDE/{s/^#//;s@$@:/sources:/home@}' \
-i /etc/porgrc</userinput></screen>
</sect2>
</sect1>
</article>