diff --git a/meta/packages/pseudo/pseudo/ld_sacredness.patch b/meta/packages/pseudo/pseudo/ld_sacredness.patch new file mode 100644 index 0000000000..55a39d99b4 --- /dev/null +++ b/meta/packages/pseudo/pseudo/ld_sacredness.patch @@ -0,0 +1,68 @@ +Image creation runs under a pseudo context and calls a script which refers +to the build systems's python. This loads but can find a libpython from staging +if these are incompatible, anything can break. These scripts should *not* be +changing LD_LIBRARY_PATH, just adding an LD_PRELOAD with an absolute path. The +dyanmic linker can figure out anything else with rpaths. + +Inspired by RP's patch of a similar intent for fakeroot + +JL 15/07/10 + +Index: git/pseudo_util.c +=================================================================== +--- git.orig/pseudo_util.c 2010-03-25 17:57:24.000000000 +0000 ++++ git/pseudo_util.c 2010-07-15 16:13:09.431459640 +0100 +@@ -362,40 +362,25 @@ + */ + void + pseudo_setupenv(char *opts) { +- char *ld_env; + char *newenv; + size_t len; + char debugvalue[64]; + +- newenv = "libpseudo.so"; ++ /* need to set LD_PRELOAD to the absolute library path, as tweaking ++ * LD_LIBRARY_PATH makes the Beaver sad. ++ * Fortunately we can hack this as we know we don't use lib64 :-) ++ */ ++ ++ char *libname = "libpseudo.so"; ++ char *prefix = pseudo_prefix_path("lib"); ++ len = strlen(prefix) + strlen(libname) + 2; ++ newenv = malloc(len); ++ ++ snprintf(newenv, len, "%s/%s", prefix, libname); ++ + setenv("LD_PRELOAD", newenv, 1); + +- ld_env = getenv("LD_LIBRARY_PATH"); +- if (ld_env) { +- char *prefix = pseudo_prefix_path(NULL); +- if (!strstr(ld_env, prefix)) { +- char *e1, *e2; +- e1 = pseudo_prefix_path("lib"); +- e2 = pseudo_prefix_path("lib64"); +- len = strlen(ld_env) + strlen(e1) + strlen(e2) + 3; +- newenv = malloc(len); +- snprintf(newenv, len, "%s:%s:%s", ld_env, e1, e2); +- free(e1); +- free(e2); +- setenv("LD_LIBRARY_PATH", newenv, 1); +- free(newenv); +- } +- free(prefix); +- } else { +- char *e1, *e2; +- e1 = pseudo_prefix_path("lib"); +- e2 = pseudo_prefix_path("lib64"); +- len = strlen(e1) + strlen(e2) + 2; +- newenv = malloc(len); +- snprintf(newenv, len, "%s:%s", e1, e2); +- setenv("LD_LIBRARY_PATH", newenv, 1); +- free(newenv); +- } ++ free(newenv); + + if (max_debug_level) { + sprintf(debugvalue, "%d", max_debug_level); diff --git a/meta/packages/pseudo/pseudo/path-munge.patch b/meta/packages/pseudo/pseudo/path-munge.patch new file mode 100644 index 0000000000..2327f2e5af --- /dev/null +++ b/meta/packages/pseudo/pseudo/path-munge.patch @@ -0,0 +1,161 @@ +Pseudo defaults to storing state files in ${prefix}/var/pseudo, we want them in +$(localstatedir) so this quick hack makes pseudo use a data directory specified +with --data, and defaults to pseudo's way if it's not set. + +JL 14/07/10 + +Index: git/Makefile.in +=================================================================== +--- git.orig/Makefile.in 2010-07-14 16:50:45.772094105 +0100 ++++ git/Makefile.in 2010-07-14 16:50:45.897400059 +0100 +@@ -20,6 +20,7 @@ + # configuration flags + PREFIX=@PREFIX@ + SUFFIX=@SUFFIX@ ++DATA=@DATA@ + SQLITE=@SQLITE@ + BITS=@BITS@ + MARK64=@MARK64@ +@@ -27,11 +28,15 @@ + + LIBDIR=$(PREFIX)/lib + BINDIR=$(PREFIX)/bin ++ifndef DATA + DATADIR=$(PREFIX)/var/pseudo ++else ++DATADIR=$(DATA)/pseudo ++endif + + CFLAGS_BASE=-pipe -std=gnu99 -Wall + CFLAGS_CODE=-fPIC -D_LARGEFILE64_SOURCE -D_ATFILE_SOURCE -m$(BITS) +-CFLAGS_DEFS=-DPSEUDO_PREFIX='"$(PREFIX)"' -DPSEUDO_SUFFIX='"$(SUFFIX)"' -DPSEUDO_VERSION='"$(VERSION)"' ++CFLAGS_DEFS=-DPSEUDO_PREFIX='"$(PREFIX)"' -DPSEUDO_SUFFIX='"$(SUFFIX)"' -DPSEUDO_VERSION='"$(VERSION)"' -DPSEUDO_DATA='"$(DATADIR)"' + CFLAGS_DEBUG=-O2 -g + CFLAGS_SQL=-L$(SQLITE)/lib -I$(SQLITE)/include + EXTRA_CFLAGS=$(CFLAGS_BASE) $(CFLAGS_CODE) $(CFLAGS_DEFS) \ +Index: git/configure +=================================================================== +--- git.orig/configure 2010-03-25 17:57:24.000000000 +0000 ++++ git/configure 2010-07-14 16:50:45.897400059 +0100 +@@ -20,13 +20,14 @@ + # not a real configure script... + opt_prefix= + opt_suffix= ++opt_data= + opt_bits=32 + opt_sqlite=/usr + + usage() + { + echo >&2 "usage:" +- echo >&2 " configure --prefix=... [--suffix=...] [--with-sqlite=...] [--bits=32|64]" ++ echo >&2 " configure --prefix=... [--suffix=...] [--data=...] [--with-sqlite=...] [--bits=32|64]" + exit 1 + } + +@@ -43,6 +44,9 @@ + --suffix=*) + opt_suffix=${arg#--suffix=} + ;; ++ --data=*) ++ opt_data=${arg#--data=} ++ ;; + --bits=*) + opt_bits=${arg#--bits=} + case $opt_bits in +@@ -65,6 +69,7 @@ + sed -e ' + s,@PREFIX@,'"$opt_prefix"',g + s,@SUFFIX@,'"$opt_suffix"',g ++ s,@DATA@,'"$opt_data"',g + s,@SQLITE@,'"$opt_sqlite"',g + s,@MARK64@,'"$opt_mark64"',g + s,@BITS@,'"$opt_bits"',g +Index: git/pseudo.c +=================================================================== +--- git.orig/pseudo.c 2010-03-25 17:57:24.000000000 +0000 ++++ git/pseudo.c 2010-07-14 16:50:45.898400595 +0100 +@@ -191,7 +191,7 @@ + pseudo_new_pid(); + + pseudo_debug(3, "opening lock.\n"); +- lockname = pseudo_prefix_path(PSEUDO_LOCKFILE); ++ lockname = strdup(PSEUDO_LOCKFILE); + if (!lockname) { + pseudo_diag("Couldn't allocate a file path.\n"); + exit(1); +Index: git/pseudo.h +=================================================================== +--- git.orig/pseudo.h 2010-03-25 17:57:24.000000000 +0000 ++++ git/pseudo.h 2010-07-14 16:50:45.899360463 +0100 +@@ -121,8 +121,7 @@ + + extern char *pseudo_version; + +-#define PSEUDO_DATA "var/pseudo/" +-#define PSEUDO_LOCKFILE PSEUDO_DATA "pseudo.lock" +-#define PSEUDO_LOGFILE PSEUDO_DATA "pseudo.log" +-#define PSEUDO_PIDFILE PSEUDO_DATA "pseudo.pid" +-#define PSEUDO_SOCKET PSEUDO_DATA "pseudo.socket" ++#define PSEUDO_LOCKFILE PSEUDO_DATA "/pseudo.lock" ++#define PSEUDO_LOGFILE PSEUDO_DATA "/pseudo.log" ++#define PSEUDO_PIDFILE PSEUDO_DATA "/pseudo.pid" ++#define PSEUDO_SOCKET PSEUDO_DATA "/pseudo.socket" +Index: git/pseudo_db.c +=================================================================== +--- git.orig/pseudo_db.c 2010-03-25 17:57:24.000000000 +0000 ++++ git/pseudo_db.c 2010-07-14 16:51:07.506464213 +0100 +@@ -458,11 +458,11 @@ + if (*db) + return 0; + if (db == &file_db) { +- dbfile = pseudo_prefix_path(PSEUDO_DATA "files.db"); ++ dbfile = strdup(PSEUDO_DATA "/files.db"); + rc = sqlite3_open(dbfile, db); + free(dbfile); + } else { +- dbfile = pseudo_prefix_path(PSEUDO_DATA "logs.db"); ++ dbfile = strdup(PSEUDO_DATA "/logs.db"); + rc = sqlite3_open(dbfile, db); + free(dbfile); + } +Index: git/pseudo_server.c +=================================================================== +--- git.orig/pseudo_server.c 2010-03-25 17:57:24.000000000 +0000 ++++ git/pseudo_server.c 2010-07-14 16:50:45.901462874 +0100 +@@ -101,9 +101,9 @@ + } + + /* cd to the data directory */ +- pseudo_path = pseudo_prefix_path(PSEUDO_DATA); ++ pseudo_path = strdup(PSEUDO_DATA); + if (!pseudo_path) { +- pseudo_diag("can't find prefix/%s directory.\n", PSEUDO_DATA); ++ pseudo_diag("can't find %s directory.\n", PSEUDO_DATA); + return 1; + } + if (chdir(pseudo_path) == -1) { +@@ -132,9 +132,9 @@ + return 0; + } + setsid(); +- pseudo_path = pseudo_prefix_path(PSEUDO_PIDFILE); ++ pseudo_path = strdup(PSEUDO_PIDFILE); + if (!pseudo_path) { +- pseudo_diag("Couldn't get path for prefix/%s\n", PSEUDO_PIDFILE); ++ pseudo_diag("Couldn't get path for %s\n", PSEUDO_PIDFILE); + return 1; + } + fp = fopen(pseudo_path, "w"); +@@ -152,9 +152,9 @@ + pseudo_new_pid(); + fclose(stdin); + fclose(stdout); +- pseudo_path = pseudo_prefix_path(PSEUDO_LOGFILE); ++ pseudo_path = strdup(PSEUDO_LOGFILE); + if (!pseudo_path) { +- pseudo_diag("can't get path for prefix/%s\n", PSEUDO_LOGFILE); ++ pseudo_diag("can't get path for %s\n", PSEUDO_LOGFILE); + return 1; + } + fd = open(pseudo_path, O_WRONLY | O_APPEND | O_CREAT, 0644); diff --git a/meta/packages/pseudo/pseudo_git.bb b/meta/packages/pseudo/pseudo_git.bb index dd62e6f3bc..1ba43c07f7 100644 --- a/meta/packages/pseudo/pseudo_git.bb +++ b/meta/packages/pseudo/pseudo_git.bb @@ -1,23 +1,30 @@ DESCRIPTION = "Pseudo gives fake root capabilities to a normal user" +HOMEPAGE = "http://wiki.github.com/wrpseudo/pseudo/" +LIC_FILES_CHKSUM = "file://COPYING;md5=243b725d71bb5df4a1e5920b344b86ad" SECTION = "base" LICENSE = "LGPL2.1" DEPENDS = "sqlite3" PV = "0.0+git${SRCPV}" -PR = "r3" +PR = "r4" SRC_URI = "git://github.com/wrpseudo/pseudo.git;protocol=git \ - file://tweakflags.patch;patch=1" + file://tweakflags.patch \ + file://path-munge.patch \ + file://ld_sacredness.patch" + +FILES_${PN} = "${libdir}/libpseudo.so ${bindir}/* ${localstatedir}/pseudo" +PROVIDES += "virtual/fakeroot" S = "${WORKDIR}/git" inherit siteinfo do_configure () { - ${S}/configure --prefix=${prefix} --with-sqlite=${STAGING_DIR_TARGET}${exec_prefix} --bits=${SITEINFO_BITS} + ${S}/configure --prefix=${prefix} --with-sqlite=${STAGING_DIR_TARGET}${exec_prefix} --bits=${SITEINFO_BITS} --data=${localstatedir} } -do_install() { +do_install () { oe_runmake 'DESTDIR=${D}' install }