I was experimenting using dash as /bin/sh and noticed that a lot of
packages were having errors in their install scriptlets.

popen passes commands to /bin/sh so we need to explicitly invoke bash,
which the scriptlets are written for. WOO!

Signed-off-by: Loui Chang <louipc....@gmail.com>
---
 lib/libalpm/trans.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index d1c0e93..5e63326 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -435,6 +435,7 @@ int _alpm_runscriptlet(const char *root, const char 
*installfn,
 {
        char scriptfn[PATH_MAX];
        char cmdline[PATH_MAX];
+       char cmdargs[PATH_MAX];
        char tmpdir[PATH_MAX];
        char *scriptpath;
        int clean_tmpdir = 0;
@@ -486,13 +487,16 @@ int _alpm_runscriptlet(const char *root, const char 
*installfn,
        }
 
        if(oldver) {
-               snprintf(cmdline, PATH_MAX, ". %s; %s %s %s",
+               snprintf(cmdargs, PATH_MAX, "%s; %s %s %s",
                                scriptpath, script, ver, oldver);
        } else {
-               snprintf(cmdline, PATH_MAX, ". %s; %s %s",
+               snprintf(cmdargs, PATH_MAX, "%s; %s %s",
                                scriptpath, script, ver);
        }
 
+       /* Explicitly run scriptlets in bash */
+       snprintf(cmdline, PATH_MAX, "/bin/bash -c 'source %s'", cmdargs);
+
        retval = _alpm_run_chroot(root, cmdline);
 
 cleanup:
-- 
1.6.3.3

_______________________________________________
pacman-dev mailing list
pacman-dev@archlinux.org
http://www.archlinux.org/mailman/listinfo/pacman-dev

Reply via email to