Author: pierre Date: Sun Apr 9 03:29:32 2017 New Revision: 3958 Log: Merge the new_features branch (manully, thanks to svn)
Added: jhalfs/trunk/pkgmngt/packInstall.sh.porg jhalfs/trunk/pkgmngt/packageManager.xml.porg Modified: jhalfs/trunk/BLFS/gen_pkg_book.sh jhalfs/trunk/BLFS/xsl/gen_config.xsl jhalfs/trunk/BLFS/xsl/scripts.xsl jhalfs/trunk/Config.in jhalfs/trunk/LFS/lfs.xsl jhalfs/trunk/README.PACKAGE_MANAGEMENT jhalfs/trunk/common/libs/func_book_parser jhalfs/trunk/common/libs/func_install_blfs jhalfs/trunk/common/libs/func_validate_configs.sh jhalfs/trunk/common/makefile-functions jhalfs/trunk/jhalfs Modified: jhalfs/trunk/BLFS/gen_pkg_book.sh ============================================================================== --- jhalfs/trunk/BLFS/gen_pkg_book.sh Sat Apr 8 02:33:44 2017 (r3957) +++ jhalfs/trunk/BLFS/gen_pkg_book.sh Sun Apr 9 03:29:32 2017 (r3958) @@ -26,6 +26,7 @@ declare -a TARGET declare DEP_LEVEL declare SUDO +declare WRAP_INSTALL #--------------------------# parse_configuration() { # @@ -44,6 +45,7 @@ # Create global variables for these parameters. optDependency=* | \ MAIL_SERVER=* | \ + WRAP_INSTALL=* | \ SUDO=* ) eval ${REPLY} # Define/set a global variable.. continue ;; esac @@ -62,13 +64,14 @@ TARGET=(${optTARGET[*]}) DEP_LEVEL=$optDependency SUDO=${SUDO:-n} + WRAP_INSTALL=${WRAP_INSTALL:-n} } #--------------------------# validate_configuration() { # #--------------------------# 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 config_param local -i index @@ -179,6 +182,7 @@ rm -rf scripts xsltproc --xinclude --nonet \ --stringparam sudo $SUDO \ + --stringparam wrap-install $WRAP_INSTALL \ -o ./scripts/ ${MakeScripts} \ ${BookXml} # Make the scripts executable. Modified: jhalfs/trunk/BLFS/xsl/gen_config.xsl ============================================================================== --- jhalfs/trunk/BLFS/xsl/gen_config.xsl Sat Apr 8 02:33:44 2017 (r3957) +++ jhalfs/trunk/BLFS/xsl/gen_config.xsl Sun Apr 9 03:29:32 2017 (r3958) @@ -58,6 +58,16 @@ help Select if sudo will be used (you build as a normal user) 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:template> Modified: jhalfs/trunk/BLFS/xsl/scripts.xsl ============================================================================== --- jhalfs/trunk/BLFS/xsl/scripts.xsl Sat Apr 8 02:33:44 2017 (r3957) +++ jhalfs/trunk/BLFS/xsl/scripts.xsl Sun Apr 9 03:29:32 2017 (r3958) @@ -21,6 +21,10 @@ </xsl:choose> </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)? --> <xsl:param name="sudo" select="'y'"/> @@ -69,8 +73,10 @@ <xsl:choose> <!-- Package page --> <xsl:when test="sect2[@role='package']"> - <!-- We build in a subdirectory --> - <xsl:text>PKG_DIR=</xsl:text> + <!-- We build in a subdirectory, whose name may be needed + if using package management (see envars.conf), so + "export" it --> + <xsl:text>export PKG_DIR=</xsl:text> <xsl:value-of select="$filename"/> <xsl:text> SRC_DIR=${SRC_ARCHIVE}${SRC_SUBDIRS:+/${PKG_DIR}} @@ -149,6 +155,7 @@ cp $(find . -mindepth 1 -maxdepth 1 -type l) $UNPACKDIR ;; esac +export UNPACKDIR cd $UNPACKDIR
 </xsl:text> <xsl:apply-templates select=".//screen | .//para/command"/> @@ -407,12 +414,30 @@ <xsl:if test="child::* = userinput and not(@role = 'nodump')"> <xsl:choose> <xsl:when test="@role = 'root'"> - <xsl:if test="$sudo = 'y'"> - <xsl:text>sudo -E sh << ROOT_EOF
</xsl:text> + <xsl:if test="not(preceding-sibling::screen[1][@role='root'])"> + <xsl:if test="$sudo = 'y'"> + <xsl:text>sudo -E sh << ROOT_EOF
</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:apply-templates mode="root"/> - <xsl:if test="$sudo = 'y'"> - <xsl:text>
ROOT_EOF</xsl:text> + <xsl:if test="not(following-sibling::screen[1][@role='root'])"> + <xsl:if test="$wrap-install = 'y' and + ancestor::sect2[@role='installation']"> + <xsl:text>'
packInstall</xsl:text> + </xsl:if> + <xsl:if test="$sudo = 'y'"> + <xsl:text>
ROOT_EOF</xsl:text> + </xsl:if> </xsl:if> </xsl:when> <xsl:otherwise> @@ -514,6 +539,8 @@ </xsl:call-template> </xsl:template> + <xsl:variable name="APOS">'</xsl:variable> + <xsl:template name="output-root"> <xsl:param name="out-string" select="''"/> <xsl:choose> @@ -561,6 +588,19 @@ select="substring-after($out-string,'\')"/> </xsl:call-template> </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:value-of select="$out-string"/> </xsl:otherwise> Modified: jhalfs/trunk/Config.in ============================================================================== --- jhalfs/trunk/Config.in Sat Apr 8 02:33:44 2017 (r3957) +++ jhalfs/trunk/Config.in Sun Apr 9 03:29:32 2017 (r3958) @@ -757,13 +757,12 @@ # # You will have to select between: # - # - Only final system Glibc, GCC and Binutils testsuites + # - Only critical final system testsuites # - All final system testsuites # - Both temporary tools and final system testsuites # # HLFS and CLFS have no testsuites available in the # temporary tools phase - # You will be prompted also about the "flavour" of the # testsuites run: # @@ -771,45 +770,54 @@ # - Abort the build at the first test suite failure # + menu "Test settings" + depends CONFIG_TESTS choice prompt "Tests level" - depends CONFIG_TESTS default 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 bool "All final system testsuites" 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 - config TEST - int - default "0" if !CONFIG_TESTS - default "1" if TST_1 - default "2" if TST_2 - default "3" if TST_3 - choice prompt "Flavour" - depends CONFIG_TESTS config NO_BOMB - bool "Don't stop on testsuite failures" + bool "Don't stop on test failures" config BOMB - bool "Abort the build on the first testsuite failure" + bool "Abort the build on the first test failure" endchoice + config TEST + int + default "0" if !CONFIG_TESTS + default "1" if TST_1 + default "2" if TST_2 + default "3" if TST_3 + config BOMB_TEST bool default n if NO_BOMB default y if BOMB #--- End Test Suites + endmenu # test settings #--- Package Management config PKGMNGT @@ -819,10 +827,18 @@ help #-- Use package management # - # If set, the packages in the final phase are built - # in a separate directory, PKG_DEST. - # You should provide a bash function for packing - # and installing the package. + # If set, you'll have to choose between + # two package management styles: + # - Build and install: + # 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 # to build the package manager during the # temporary tools phase, in the form of a @@ -830,7 +846,22 @@ # sect1. See README.PACKAGE_MANAGEMENT # # 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 #--- Installed files logs @@ -843,13 +874,31 @@ #--- 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 config HAVE_FSTAB bool "Use a custom fstab file" default n help #-- Select this if you have an fstab file with entries - # for the target system + # for the target system config FSTAB string "Fstab file (optional)" @@ -880,11 +929,6 @@ # and renamed 'kernel-config' #--- End Kernel - config STRIP - bool "Strip Installed Binaries/Libraries" - default n - depends on !BOOK_CLFS3 - config VIMLANG bool "Install vim-lang package" default n @@ -894,13 +938,6 @@ # NOTE: This option is obsolete with the 7.3 release of Vim # 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 string "TimeZone" default "GMT" @@ -946,8 +983,53 @@ default "A4" if PAGE_A4 #--- End Groff page -#--- End Build Settings -endmenu + config HOSTNAME + 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" depends !BOOK_BLFS Modified: jhalfs/trunk/LFS/lfs.xsl ============================================================================== --- jhalfs/trunk/LFS/lfs.xsl Sat Apr 8 02:33:44 2017 (r3957) +++ jhalfs/trunk/LFS/lfs.xsl Sun Apr 9 03:29:32 2017 (r3958) @@ -8,6 +8,8 @@ extension-element-prefixes="exsl" version="1.0"> +<!-- Parameters --> + <!-- which revision attribute to include: can only be sysv or systemd, but we leave checking to the caller--> <xsl:param name="revision" select="'sysv'"/> @@ -16,11 +18,18 @@ n = no, original behavior 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? 0 = none - 1 = only chapter06 Glibc, GCC and Binutils testsuites + 1 = only chapter06 critical testsuites 2 = all 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 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'--> - <xsl:param name="vim-lang" select="n"/> + <xsl:param name="vim-lang" select="'n'"/> <!-- Time zone --> - <xsl:param name="timezone" select="GMT"/> + <xsl:param name="timezone" select="'GMT'"/> <!-- Page size --> - <xsl:param name="page" select="letter"/> + <xsl:param name="page" select="'letter'"/> <!-- Locale settings --> - <xsl:param name="lang" select="C"/> + <xsl:param name="lang" select="'C'"/> <!-- 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:apply-templates select="//sect1[not(@revision) or @revision=$revision]"/> @@ -176,7 +201,13 @@ descendant::screen[not(@role) or @role != 'nodump']/userinput[ @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/share/{doc,info,man} mkdir -pv $PKG_DEST/usr/share/man/man{1..8} @@ -185,10 +216,13 @@ x86_64) ln -sv lib $PKG_DEST/lib64 && ln -sv lib $PKG_DEST/usr/lib64 ;; esac </xsl:text> + </xsl:otherwise> + </xsl:choose> </xsl:if> <xsl:if test="../@id = 'ch-system-glibc' and @role='installation' and - $pkgmngt = 'y'"> + $pkgmngt = 'y' and + $wrap-install = 'n'"> <xsl:text>mkdir -pv $PKG_DEST/usr/include/{rpc,rpcsvc} </xsl:text> </xsl:if> @@ -202,27 +236,54 @@ descendant::screen[not(@role) or @role != 'nodump']/userinput[ @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 --> - <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:if> + </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/* + <xsl:if test="../@id = 'ch-system-attr'"> + <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/* </xsl:text> - </xsl:if> + </xsl:if> <!-- nologin is installed by util-linux. remove it from shadow --> - <xsl:if test="../@id = 'ch-system-shadow'"> - <xsl:text>rm -fv $PKG_DEST/usr/share/man/man8/nologin.8 + <xsl:if test="../@id = 'ch-system-shadow'"> + <xsl:text>rm -fv $PKG_DEST/usr/share/man/man8/nologin.8 rm -fv $PKG_DEST/sbin/nologin </xsl:text> - </xsl:if> - <xsl:text>rm -fv $PKG_DEST/{,usr/}lib64 + </xsl:if> + <xsl:text>rm -fv $PKG_DEST/{,usr/}lib64 rm -fv $PKG_DEST/usr/{man,doc,info} for dir in $PKG_DEST/usr/share/man/man{1..8}; do [[ -z $(ls $dir) ]] && rmdir -v $dir @@ -239,6 +300,8 @@ packInstall rm -rf $PKG_DEST </xsl:text> + </xsl:otherwise> + </xsl:choose> </xsl:if> <xsl:if test="$testsuite='3' and ../@id='ch-tools-glibc' and @@ -309,7 +372,7 @@ mode="pkgmngt"/> <xsl:if test="$dirname = 'chapter06'"> <xsl:text>packInstall -rm -rf $PKG_DEST +rm -rf "$PKG_DEST" </xsl:text> </xsl:if> <xsl:apply-templates @@ -452,7 +515,26 @@ </xsl:otherwise> </xsl:choose> </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>
</xsl:text> + </xsl:when> + <xsl:otherwise><!--pkgmngt = 'y' and wrap-install='n'--> <xsl:choose> <xsl:when test="./literal"> <xsl:call-template name="outputpkgdest"> @@ -476,7 +558,7 @@ tzdata. --> <xsl:when test="contains(string(),'tzdata') and $pkgmngt='y'"> <xsl:text> -OLD_PKG_DEST=$PKG_DEST +OLD_PKG_DEST="$PKG_DEST" OLD_PKGDIR=$PKGDIR PKG_DEST=$(dirname $OLD_PKG_DEST)/001-tzdata PKGDIR=$(dirname $PKGDIR)/tzdata-</xsl:text> @@ -485,12 +567,28 @@ '.tar')"/> <xsl:text> </xsl:text> - <xsl:copy-of select="substring-before(string(),'ZONEINFO=')"/> - <xsl:text>ZONEINFO=$PKG_DEST</xsl:text> - <xsl:copy-of select="substring-after(string(),'ZONEINFO=')"/> - <xsl:text> + <xsl:choose> + <xsl:when test="$wrap-install='n'"> + <xsl:copy-of select="substring-before(string(),'ZONEINFO=')"/> + <xsl:text>ZONEINFO=$PKG_DEST</xsl:text> + <xsl:copy-of select="substring-after(string(),'ZONEINFO=')"/> + <xsl:text> packInstall 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 unset OLD_PKG_DEST PKGDIR=$OLD_PKGDIR @@ -517,6 +615,34 @@ <xsl:when test="contains(string(.),'<ll>_<CC>')"> <xsl:value-of select="$lang"/> </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(.),'<lfs>')"> + <xsl:value-of select="$hostname"/> + </xsl:when> <xsl:otherwise> <xsl:text>**EDITME</xsl:text> <xsl:apply-templates/> @@ -525,6 +651,185 @@ </xsl:choose> </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,'<Your Domain Name>')"> + <xsl:call-template name="outputsysdnet"> + <xsl:with-param name="netstring" + select="substring-before($netstring,'<Your Domain Name>')"/> + </xsl:call-template> + <xsl:value-of select="$domain"/> + <xsl:call-template name="outputsysdnet"> + <xsl:with-param name="netstring" + select="substring-after($netstring,'<Your Domain Name>')"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$netstring"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + <xsl:template name="outputpkgdest"> <xsl:param name="outputstring" select="foo"/> <xsl:choose> @@ -623,4 +928,26 @@ </xsl:otherwise> </xsl:choose> </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> Modified: jhalfs/trunk/README.PACKAGE_MANAGEMENT ============================================================================== --- jhalfs/trunk/README.PACKAGE_MANAGEMENT Sat Apr 8 02:33:44 2017 (r3957) +++ jhalfs/trunk/README.PACKAGE_MANAGEMENT Sun Apr 9 03:29:32 2017 (r3958) @@ -6,32 +6,49 @@ There are several hints discussing package management for LFS, but nothing under jhalfs. There used to be a patch for PACO that I cannot - find now. This is a modification ("DESTDIR install" automation), which - allows to use a package manager inside jhalfs. I hope it is flexible enough - to support several package managers, at least among those who use DESTDIR - install. My initial implementation used dpkg, from Debian, in a very - crude way (Debian has a sophisticated package management system, which - I have not tried to use here). There is also a port to Pacman from - Arch Linux (http://www.archlinux.org). I am sorry to say I have (almost) - no experience with rpm, so I cannot tell whether it would fit. + find now. So there was a need for such a tool, and an infrastructure, + which allows using a package manager inside jhalfs, has been developped. + I hope it is flexible enough to support several package managers, at least + among those who use DESTDIR install and/or LD_PRELOAD during install. + It has been tested with dpkg from Debian, pacman from Arch Linux, + and porg. Sample configuration files are given for those three packages. + I am sorry to say I have (almost) no experience with rpm, so I cannot + tell whether it would fit. 2. OVERVIEW OF THE SYSTEM: - Presently, package management is only available for LFS. I plan to - upgrade BLFS tools, but nothing usable right now. I have not attempted - to adapt this tool for the other flavours of LFS. - - To use package management, you need to create the required files in - the pkgmngt directory (see below), and to select "package management" in - the build settings. Note that this is incompatible with creating an SBU - and usage report. - -3. DETAILS OF OPERATION: - - 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. + For now, package management is only available for LFS. The `porg style' + (see below) package management has been ported to BLFS, but not the distro + style one (the book layout makes it rather difficult). I have not attempted + to adapt this tool for the other flavours of LFS (TODO). + + This tool comes in two flavours: + - for distros package managers (e.g dpkg or pacman), it basically performs + 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 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. + + 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: + The XSL stylesheet used for generating the scriptlets, automatically adds DESTDIR install instructions when "package management" is selected. Also all the paths beginning with " /" or ">/" (absolute paths) are prepended @@ -43,6 +60,7 @@ creates a reasonable subset of the FHS hierarchy into the destination directory. Empty directories are then removed before packing the binary package. + 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). Furthermore, the administrative files and directories have to be created @@ -51,20 +69,21 @@ the necessary instructions and enough information to download the tarball. This file should reside in the `pkgmngt' directory and be named `packageManager.xml'. A template named `packageManager.xml.template' is - provided in the `pkgmngt' subdirectory. There are also two XML files for - dpkg and pacman, respectively `packageManager.xml.dpkg' and - `packageManager.xml.pacman', that you can copy to `packageManager.xml'. + provided in the `pkgmngt' subdirectory. There are also three XML files for + dpkg, pacman, and porg, respectively `packageManager.xml.dpkg', + `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. - 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 - `packInstall', which should pack the binary package and install it on the - system. Note that nothing has been done to manage configuration files, + + The last thing to do is to tell how to use the package manager. The user + has to provide two functions, "wrapInstall" and "packInstall", as described + above. Please note that nothing has been done to manage configuration files, which are ususally treated specially by package managers: depending on 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 - upgrade. The user has to write his own `packInstall' function. The shell - function should be defined in a file named `packInstall.sh', residing in - the `pkgmngt' directory. A template is provided, as well as two example - scripts for dpkg and pacman. Note that, due to the way pacman checks the - available space on disk, the root directory in chroot must be a mount point, - otherwise the installation of packages fails. + upgrade. Both functions should be defined in a file named `packInstall.sh', + residing in the `pkgmngt' directory. A template is provided (actually a copy + of the file for dpkg), as well as three example scripts for dpkg, pacman, + and porg. Pacman Note: due to the way pacman checks the available space on + disk, the root directory in chroot must be a mount point, otherwise the + installation of packages fails. Modified: jhalfs/trunk/common/libs/func_book_parser ============================================================================== --- jhalfs/trunk/common/libs/func_book_parser Sat Apr 8 02:33:44 2017 (r3957) +++ jhalfs/trunk/common/libs/func_book_parser Sun Apr 9 03:29:32 2017 (r3958) @@ -164,19 +164,29 @@ fi popd > /dev/null - xsltproc --nonet \ - --xinclude \ - --stringparam revision $INITSYS \ - --stringparam testsuite $TEST \ - --stringparam bomb-testsuite $BOMB_TEST \ - --stringparam vim-lang $VIMLANG \ - --stringparam full-locale $FULL_LOCALE \ - --stringparam timezone $TIMEZONE \ - --stringparam page $PAGE \ - --stringparam lang $LANG \ - --stringparam pkgmngt $PKGMNGT \ - --output ./${PROGNAME}-commands/ \ - $XSL \ + xsltproc --nonet \ + --xinclude \ + --stringparam revision $INITSYS \ + --stringparam testsuite $TEST \ + --stringparam bomb-testsuite $BOMB_TEST \ + --stringparam vim-lang $VIMLANG \ + --stringparam full-locale $FULL_LOCALE \ + --stringparam timezone $TIMEZONE \ + --stringparam page $PAGE \ + --stringparam lang $LANG \ + --stringparam pkgmngt $PKGMNGT \ + --stringparam wrap-install $WRAP_INSTALL \ + --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 ;; *) echo -n " ${L_arrow}${PROGNAME}${R_arrow} book invalid, terminate build... " Modified: jhalfs/trunk/common/libs/func_install_blfs ============================================================================== --- jhalfs/trunk/common/libs/func_install_blfs Sat Apr 8 02:33:44 2017 (r3957) +++ jhalfs/trunk/common/libs/func_install_blfs Sun Apr 9 03:29:32 2017 (r3958) @@ -12,6 +12,11 @@ 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/UNPACKDIR/' \ + -e 's/PKG_DEST/PKG_DIR/' \ + $PKGMNGTDIR/packInstall.sh > ${BUILDDIR}${BLFS_ROOT}/packInstall.sh +fi # Clean-up make -C ${BUILDDIR}${BLFS_ROOT}/menu clean @@ -115,6 +120,7 @@ MAIL_SERVER=sendmail optDependency=2 SUDO=n +WRAP_INSTALL=$WRAP_INSTALL EOF # Generates the scripts for the blfs tools dependencies (in ./scripts) Modified: jhalfs/trunk/common/libs/func_validate_configs.sh ============================================================================== --- jhalfs/trunk/common/libs/func_validate_configs.sh Sat Apr 8 02:33:44 2017 (r3957) +++ jhalfs/trunk/common/libs/func_validate_configs.sh Sun Apr 9 03:29:32 2017 (r3958) @@ -41,14 +41,17 @@ local -r CLFS3_book="$BOOK_common $BOOK_clfsX PLATFORM MIPS_LEVEL" # 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 CLFS_build="$BUILD_chroot VIMLANG $BUILD_common" local -r CLFS2_build="STRIP VIMLANG $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 - 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 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" @@ -193,6 +196,11 @@ 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 # must exist in $PKGMNGTDIR if PKGMNGT='y': PKGMNGT) echo -e "`eval echo $PARAM_VALS`" Modified: jhalfs/trunk/common/makefile-functions ============================================================================== --- jhalfs/trunk/common/makefile-functions Sat Apr 8 02:33:44 2017 (r3957) +++ jhalfs/trunk/common/makefile-functions Sun Apr 9 03:29:32 2017 (r3958) @@ -115,6 +115,7 @@ echo "export PKG_DEST=$(SRC)/$@" >> envars; \ echo "source packInstall.sh" >> envars; \ echo "export -f packInstall" >> envars; \ + echo "export -f wrapInstall" >> envars; \ fi; endef Modified: jhalfs/trunk/jhalfs ============================================================================== --- jhalfs/trunk/jhalfs Sat Apr 8 02:33:44 2017 (r3957) +++ jhalfs/trunk/jhalfs Sun Apr 9 03:29:32 2017 (r3958) @@ -124,6 +124,7 @@ RUN_FARCE=${RUN_FARCE:-n} RUN_ICA=${RUN_ICA:-n} PKGMNGT=${PKGMNGT:-n} +WRAP_INSTALL=${WRAP_INSTALL:-n} BOMB_TEST=${BOMB_TEST:-n} STRIP=${STRIP:=n} REPORT=${REPORT:=n} @@ -141,6 +142,7 @@ SET_WARNINGS=${SET_WARNINGS:=n} SET_MISC=${SET_MISC:=n} SET_BLOWFISH=${SET_BLOWFISH:=n} +UNICODE=${UNICODE:=n} if [[ "${NO_PROGRESS_BAR}" = "y" ]] ; then NO_PROGRESS="#" Added: jhalfs/trunk/pkgmngt/packInstall.sh.porg ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ jhalfs/trunk/pkgmngt/packInstall.sh.porg Sun Apr 9 03:29:32 2017 (r3958) @@ -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 +} Added: jhalfs/trunk/pkgmngt/packageManager.xml.porg ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ jhalfs/trunk/pkgmngt/packageManager.xml.porg Sun Apr 9 03:29:32 2017 (r3958) @@ -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 >> /tools/etc/porgrc << 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> -- http://lists.linuxfromscratch.org/listinfo/alfs-log Unsubscribe: See the above information page