From: Michael Tremer Date: Sun, 8 Mar 2009 16:30:31 +0000 (+0100) Subject: Compressor. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=90111bbd75d55c5b691dbfd747b85a876745df98;p=ipfire-3.x.git Compressor. --- diff --git a/lfs/Config b/lfs/Config index c0f750666..ad9073269 100644 --- a/lfs/Config +++ b/lfs/Config @@ -57,6 +57,8 @@ DIR_TMP = /tmp DIR_PATCHES = $(DIR_DL)/../patches DIR_CONFIG = $(DIR_CONF) DIR_SOURCE = $(DIR_SRC)/src +DIR_PKG = $(LFS_BASEDIR)/lfs +DIR_TARGET = $(LFS_BASEDIR)/target VPATH = $(DIR_DL):$(DIR_PATCHES) @@ -88,19 +90,27 @@ PYTHON_COMPILE = find /usr/lib/python*/ -name *.py | xargs /usr/bin/py-compile define DO_PKG_INFO @## ALPHABETICAL ORDER ## - @echo "DEBUG=\"$(DEBUG)\"" - @echo "DEPS=\"$(DEPS)\"" - @echo "DESC=\"$(value LONG_DESC)\"" - @echo "EXTRA=\"$(EXTRA)\"" - @echo "FILES=\"$(objects)\"" - @echo "GROUP=\"$(GROUP)\"" - @echo "LICENSE=\"$(LICENSE)\"" - @echo "MAINTAINER=\"$(MAINTAINER)\"" - @echo "NAME=\"$(PKG_NAME)\"" - @echo "VERSION=\"$(PKG_VER)\"" - @echo "RELEASE=\"$(PKG_REL)\"" - @echo "SHORT=\"$(value SHORT_DESC)\"" - @echo "URL=\"$(URL)\"" + @echo "local DEBUG=\"$(DEBUG)\"" + @echo "local DEPS=\"$(DEPS)\"" + @echo "local DESC=\"$(value LONG_DESC)\"" + @echo "local EXTRA=\"$(EXTRA)\"" + @echo "local FILES=\"$(objects)\"" + @echo "local GROUP=\"$(GROUP)\"" + @echo "local LICENSE=\"$(LICENSE)\"" + @echo "local MAINTAINER=\"$(MAINTAINER)\"" + @echo "local NAME=\"$(PKG_NAME)\"" + @echo "local VERSION=\"$(PKG_VER)\"" + @echo "local RELEASE=\"$(PKG_REL)\"" + @echo "local SHORT=\"$(value SHORT_DESC)\"" + @echo "local URL=\"$(URL)\"" +endef + +define DO_PACKAGE + if [ -n "$$ROOTFILE" ]; then \ + NAME=$(NAME) SNAME=$(SNAME) VERSION=$(VERSION) KVER=$(KVER) \ + TARGET=$(TARGET) MACHINE=$(MACHINE) IFS_TARGET=$(IFS_TARGET) \ + $(DIR_SOURCE)/pakfire/compressor $(PKG_NAME) $(PKG_VER) $(PKG_REL) $$ROOTFILE; \ + fi endef # For each package we create a list of files that it installed under diff --git a/make.sh b/make.sh index 908eb0b10..6299f3d36 100755 --- a/make.sh +++ b/make.sh @@ -459,6 +459,12 @@ packages_build() { pkg_list_packages > $BASEDIR/doc/packages-list.txt beautify message DONE + # Build packages + #local package + #for package in $BASEDIR/lfs/*; do + # package_make $(basename $package) + #done + if [ ${EMB} -eq 0 ]; then ipfire_make initramfs ipfire_make images @@ -480,22 +486,10 @@ packages_build() { fi fi - # Build packages - for i in $(ls -1 $BASEDIR/src/rootfiles/extras); do - package=$(cut -d. -f2 <<< $i) - if [ -e $BASEDIR/lfs/$package ]; then - echo -n $package - beautify message SKIP - else - echo -n $package - beautify message SKIP - fi - done - # Cleanup stdumount rm -rf $LFS/tmp/* - + cd $PWD } diff --git a/src/pakfire/compressor b/src/pakfire/compressor new file mode 100755 index 000000000..ba9a35777 --- /dev/null +++ b/src/pakfire/compressor @@ -0,0 +1,79 @@ +#!/bin/bash +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007, 2008, 2009 Michael Tremer & Christian Schmidt # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +# # +############################################################################### + +PKG_NAME=$1 +PKG_VER=$2 +PKG_REL=$3 +ROOTFILE=$4 + +if [ -z "$TARGET" ]; then + echo "TARGET is not set. Cannot continue." >&2 + exit 1 +fi + +if [ ! -e "$ROOTFILE" ]; then + echo "Rootfile does not exist." >&2 + exit 1 +fi + +PKG_LIST="normal" +# Checking for a devel package +grep -q "^D" $ROOTFILE && PKG_LIST="$PKG_LIST devel" + +for PKG_EXTRA in $PKG_LIST; do + # Prepare target name. + PKG_TARGET=${PKG_NAME}-${PKG_VER}-${SNAME}-${PKG_REL} + if [ "$PKG_EXTRA" != "normal" ]; then + PKG_TARGET="$PKG_TARGET-$PKG_EXTRA" + fi + PKG_TARGET="$PKG_TARGET.$SNAME" + + echo "Running for $PKG_TARGET..." + + ARCHIEVE=$(mktemp) + + # Remove unused files from filelist + FILELIST=$(grep -v "^#" $ROOTFILE) + + if [ "$PKG_EXTRA" = "devel" ]; then + FILELIST=$(echo "$FILELIST" | grep "^D" | sed -e "s/^D//g") + else + FILELIST=$(echo "$FILELIST" | grep -v "^D") + fi + + FILELIST=$(echo "$FILELIST" | sed \ + -e "s/KVER/$KVER/g" \ + -e "s/IFS_TARGET/$IFS_TARGET/g") + + if [ -z "$FILELIST" ]; then + rm -f $ARCHIEVE + continue + fi + + # Changing to root + cd / + + echo "$FILELIST" | cpio -o | lzma -czv - > $ARCHIEVE + + cat $ARCHIEVE > /tmp/$PKG_TARGET + + rm -f $ARCHIEVE +done diff --git a/tools/make-include b/tools/make-include index 591cf3ae6..8cbf6e0f1 100644 --- a/tools/make-include +++ b/tools/make-include @@ -166,6 +166,9 @@ entershell() { ################################################################################ lfsmakecommoncheck() { + unset NAME VERSION + eval $(pkg_info $1) + logger "Building $*" build_spy package $1 @@ -174,8 +177,7 @@ lfsmakecommoncheck() exiterror "No such file or directory: $BASEDIR/lfs/$1" fi - local PKG_VER=$(get_pkg_ver $BASEDIR/lfs/$1) - beautify make_pkg "$PKG_VER $*" + beautify make_pkg "$VERSION $*" # Script slipped? local i @@ -355,6 +357,62 @@ ipfire_make() { return 0 } # End of ipfire_make() + +################################################################################ +# This is the function that compresses every package # +################################################################################ +package_make() { + SKIP_PACKAGE_LIST="SKIP_PACKAGE_LIST Config adjust-toolchain cdrom images pxe test-toolchain usb-key usb-stick" \ + lfsmakecommoncheck $* + [ $? == 1 ] && return 0 + + local PKG_VER=$(get_pkg_ver $BASEDIR/lfs/$1) + + local PKG_TIME_START=$(date +%s) + chroot $LFS $TOOLS_DIR/bin/env -i \ + HOME=/root \ + TERM=$TERM \ + PS1='\u:\w\$ ' \ + PATH=$PATH \ + CONFIG_ROOT=${CONFIG_ROOT} \ + VERSION=${VERSION} \ + NAME=${NAME} \ + SNAME=${SNAME} \ + SLOGAN="$SLOGAN" \ + LINKER=$LINKER \ + TOOLS_DIR=$TOOLS_DIR \ + INSTALLER_DIR=$INSTALLER_DIR \ + CDROM_DIR=$CDROM_DIR \ + IMAGES_DIR=$IMAGES_DIR \ + MACHINE="$MACHINE" \ + MACHINE_REAL="$MACHINE_REAL" \ + IFS_HOST="$IFS_HOST" \ + IFS_TARGET="$IFS_TARGET" \ + TARGET="$TARGET" \ + BUILD_DEBUG=$BUILD_DEBUG \ + BUILD_EXTRAS=$BUILD_EXTRAS \ + KVER=$KVER \ + EMB=$EMB \ + IMAGENAME=$IMAGENAME \ + ROOTFILE=$(rootfiles_findone $1 | sed "s,$BASEDIR,/usr/src,g") \ + LOGFILE=$(echo $LOGFILE | sed "s,$BASEDIR,/usr/src,g") \ + bash -x -c "cd /usr/src/lfs && \ + $EXTRA_MAKE make -f $* LFS_BASEDIR=/usr/src package" >>$LOGFILE 2>&1 + + local COMPILE_SUCCESS=$? + local PKG_TIME_END=$(date +%s) + + if [ $COMPILE_SUCCESS -ne 0 ]; then + beautify result FAIL $[ $PKG_TIME_END - $PKG_TIME_START ] $1 $PKG_VER $STAGE_ORDER $STAGE + exiterror "Packageing $*" + else + beautify result DONE $[ $PKG_TIME_END - $PKG_TIME_START ] $1 $PKG_VER $STAGE_ORDER $STAGE + PACKAGES_DONE="$PACKAGES_DONE $1" + fi + + return 0 +} # End of package_make() + ################################################################################ # This prepares the build environment # ################################################################################