]> code.ossystems Code Review - openembedded-core.git/commitdiff
pseudo: various enhancements to integrate with Poky
authorJoshua Lock <josh@linux.intel.com>
Wed, 14 Jul 2010 09:25:06 +0000 (10:25 +0100)
committerJoshua Lock <josh@linux.intel.com>
Fri, 16 Jul 2010 14:40:32 +0000 (15:40 +0100)
Pseudo defaults to storing state files in ${prefix}/var/pseudo, we want them in
$(localstatedir) so a quick hack (path-munge.patch) makes pseudo use a data
directory specified with --data, and defaults to pseudo's way if it's not set.

Touching LD_LIBRARY_PATH can confuse the system into running Python against a
staging python library. When these two are sufficiently diverse in version
significant breakage can occur.

HOMEPAGE and LIC_FILES_CHKSUM are handy metadata variables to have defined.

Signed-off-by: Joshua Lock <josh@linux.intel.com>
meta/packages/pseudo/pseudo/ld_sacredness.patch [new file with mode: 0644]
meta/packages/pseudo/pseudo/path-munge.patch [new file with mode: 0644]
meta/packages/pseudo/pseudo_git.bb

diff --git a/meta/packages/pseudo/pseudo/ld_sacredness.patch b/meta/packages/pseudo/pseudo/ld_sacredness.patch
new file mode 100644 (file)
index 0000000..55a39d9
--- /dev/null
@@ -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 (file)
index 0000000..2327f2e
--- /dev/null
@@ -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);
index dd62e6f3bc4b62579b91979a4fc95ffe746d90c8..1ba43c07f726399429b2d591c75bc00ce158f50f 100644 (file)
@@ -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
 }