pseudo: various enhancements to integrate with Poky
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>
This commit is contained in:
parent
f23aa92f08
commit
1b6535dc2e
|
@ -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);
|
|
@ -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);
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue