This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "IPFire 2.x development tree".
The branch, master has been updated via 4c3656d99deb897a6571fa82da2502df991a657e (commit) via 4c8608f0160f9a0e0b3cbf0adece33ac16baeeb5 (commit) from 7c3fec29d0687950251a7fb9828dc3867631487b (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit 4c3656d99deb897a6571fa82da2502df991a657e Merge: 4c8608f 7c3fec2 Author: Michael Tremer michael.tremer@ipfire.org Date: Wed Dec 28 16:46:46 2011 +0100
Merge branch 'master' of ssh://git.ipfire.org/pub/git/ipfire-2.x
commit 4c8608f0160f9a0e0b3cbf0adece33ac16baeeb5 Author: Michael Tremer michael.tremer@ipfire.org Date: Sun Dec 11 12:17:19 2011 +0100
Build preload lib to fake output of uname.
-----------------------------------------------------------------------
Summary of changes: lfs/{tunctl => fake-environ} | 22 +++++++++++------- make.sh | 4 ++- src/fake-environ/Makefile | 31 ++++++++++++++++++++++++++ src/fake-environ/uname.c | 50 ++++++++++++++++++++++++++++++++++++++++++ tools/make-functions | 21 +++++++++++++++++ 5 files changed, 118 insertions(+), 10 deletions(-) copy lfs/{tunctl => fake-environ} (86%) create mode 100644 src/fake-environ/Makefile create mode 100644 src/fake-environ/uname.c
Difference in files: diff --git a/lfs/fake-environ b/lfs/fake-environ new file mode 100644 index 0000000..7a0f1a4 --- /dev/null +++ b/lfs/fake-environ @@ -0,0 +1,58 @@ +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007 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 http://www.gnu.org/licenses/. # +# # +############################################################################### + +############################################################################### +# Definitions +############################################################################### + +include Config + +VER = 1.0 + +THISAPP = fake-environ +DIR_APP = $(DIR_SRC)/$(THISAPP) +TARGET = $(DIR_INFO)/$(THISAPP)-tools$(PASS) + +############################################################################### +# Top-level Rules +############################################################################### + +install : $(TARGET) + +check : + +download : + +md5 : + +############################################################################### +# Installation Details +############################################################################### + +$(TARGET) : + @$(PREBUILD) + @rm -rf $(DIR_APP) + cp -rvf $(DIR_SRC)/src/$(THISAPP) $(DIR_APP) + + cd $(DIR_APP) && make install CFLAGS="$(CFLAGS)" \ + TOOLS_DIR="$(TOOLS_DIR)" + + @rm -rf $(DIR_APP) + @$(POSTBUILD) diff --git a/make.sh b/make.sh index f98d84a..8b9f48a 100755 --- a/make.sh +++ b/make.sh @@ -37,7 +37,7 @@ KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'` MACHINE=`uname -m` GIT_TAG=$(git tag | tail -1) # Git Tag GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8) # Last commit -TOOLCHAINVER=1 +TOOLCHAINVER=2
BUILDMACHINE=$MACHINE if [ "$MACHINE" = "x86_64" ]; then @@ -242,6 +242,7 @@ buildtoolchain() { export NATIVEGCC GCCmajor=${NATIVEGCC:0:1} GCCminor=${NATIVEGCC:2:1} GCCrelease=${NATIVEGCC:4:1} ORG_PATH=$PATH export PATH=$BASEDIR/build/usr/local/bin:$BASEDIR/build/tools/bin:$PATH + lfsmake1 fake-environ PASS=1 lfsmake1 ccache PASS=1 lfsmake1 make PASS=1 lfsmake1 binutils PASS=1 @@ -253,6 +254,7 @@ buildtoolchain() { fi lfsmake1 glibc lfsmake1 cleanup-toolchain PASS=1 + lfsmake1 fake-environ PASS=2 lfsmake1 tcl lfsmake1 expect lfsmake1 dejagnu diff --git a/src/fake-environ/Makefile b/src/fake-environ/Makefile new file mode 100644 index 0000000..a75bdf2 --- /dev/null +++ b/src/fake-environ/Makefile @@ -0,0 +1,31 @@ + +ifeq "$(CFLAGS)" "" + $(error CLFAGS not defined.) +endif + +ifeq "$(TOOLS_DIR)" "" + $(error TOOLS_DIR not defined.) +endif + +LIB = libpakfire_preload.so + +SOURCES = $(wildcard *.c) +OBJECTS = $(patsubst %.c,%.o,$(SOURCES)) + +.PHONY: all +all: $(LIB) + +%.o: %.c Makefile + $(CC) $(CFLAGS) -o $@ -c $< + +$(LIB): $(OBJECTS) + $(CC) $(CFLAGS) -shared -o $@ $? -ldl + +.PHONY: install +install: all + -mkdir -pv $(TOOLS_DIR)/lib/ + install -p -m 755 $(LIB) $(TOOLS_DIR)/lib + +.PHONY: clean +clean: + $(LIB) diff --git a/src/fake-environ/uname.c b/src/fake-environ/uname.c new file mode 100644 index 0000000..2485a81 --- /dev/null +++ b/src/fake-environ/uname.c @@ -0,0 +1,50 @@ + + +#include <stdio.h> +#include <string.h> +#include <dlfcn.h> +#include <stdlib.h> /* for EXIT_FAILURE */ +#include <unistd.h> /* for _exit() */ +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <sys/syslog.h> +#include <sys/utsname.h> + +#ifndef RTLD_NEXT +#define RTLD_NEXT ((void *) -1l) +#endif + +typedef int (*uname_t)(struct utsname * buf); + +static void *get_libc_func(const char *funcname) { + char *error; + + void *func = dlsym(RTLD_NEXT, funcname); + if ((error = dlerror()) != NULL) { + fprintf(stderr, "I can't locate libc function `%s' error: %s", funcname, error); + _exit(EXIT_FAILURE); + } + + return func; +} + +int uname(struct utsname *buf) { + char *env = NULL; + + /* Call real uname to get the information we need. */ + uname_t real_uname = (uname_t)get_libc_func("uname"); + int ret = real_uname((struct utsname *) buf); + + /* Replace release if requested. */ + if ((env = getenv("UTS_RELEASE")) != NULL) { + strncpy(buf->release, env, _UTSNAME_RELEASE_LENGTH); + } + + /* Replace machine type if requested. */ + if ((env = getenv("UTS_MACHINE")) != NULL) { + strncpy(buf->machine, env, _UTSNAME_MACHINE_LENGTH); + } + + return ret; +} diff --git a/tools/make-functions b/tools/make-functions index e693ff9..144411c 100644 --- a/tools/make-functions +++ b/tools/make-functions @@ -270,10 +270,26 @@ exiterror() { exit 1 }
+fake_environ() { + [ -e "${BASEDIR}/build/tools/lib/libpakfire_preload.so" ] || return + + local env="LD_PRELOAD=/tools/lib/libpakfire_preload.so" + + # Fake kernel version, because some of the packages do not compile + # with kernel 3.0 and later. + env="${env} UTS_RELEASE=${KVER}" + + # Fake machine version. + env="${env} UTS_MACHINE=${MACHINE}" + + echo "${env}" +} + entershell() { if [ ! -e $BASEDIR/build/usr/src/lfs/ ]; then exiterror "No such file or directory: $BASEDIR/build/usr/src/lfs/" fi + echo "Entering to a shell inside LFS chroot, go out with exit" $linux32 chroot $LFS /tools/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w$ ' \ PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ @@ -288,6 +304,7 @@ entershell() { MACHINE="$MACHINE" \ MACHINE_TYPE="$MACHINE_TYPE" \ KGCC="ccache /usr/bin/gcc" \ + $(fake_environ) \ /tools/bin/bash if [ $? -ne 0 ]; then beautify message FAIL @@ -371,6 +388,7 @@ lfsmake1() { ROOT=$LFS \ KVER=$KVER \ MAKETUNING=$MAKETUNING \ + $(fake_environ) \ install >> $LOGFILE 2>&1 local COMPILE_SUCCESS=$? local PKG_TIME_END=`date +%s` @@ -401,6 +419,7 @@ lfsmake2() { KVER=$KVER MAKETUNING=$MAKETUNING \ BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \ MACHINE_TYPE="$MACHINE_TYPE" \ + $(fake_environ) \ /tools/bin/bash -x -c "cd /usr/src/lfs && \ make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1 local COMPILE_SUCCESS=$? @@ -433,6 +452,7 @@ ipfiremake() { KVER=$KVER MAKETUNING=$MAKETUNING \ BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \ MACHINE_TYPE="$MACHINE_TYPE" \ + $(fake_environ) \ /bin/bash -x -c "cd /usr/src/lfs && \ make -f $* LFS_BASEDIR=/usr/src install" >>$LOGFILE 2>&1
@@ -464,6 +484,7 @@ ipfiredist() { KVER=$KVER \ BUILDTARGET="$BUILDTARGET" MACHINE="$MACHINE" \ MACHINE_TYPE="$MACHINE_TYPE" \ + $(fake_environ) \ /bin/bash -x -c "cd /usr/src/lfs && \ make -f $1 LFS_BASEDIR=/usr/src dist" >>$LOGFILE 2>&1
hooks/post-receive -- IPFire 2.x development tree