[pacman-dev] [PATCH] Add the --no-ldconfig flag
Alex Chamberlain
alex at alexchamberlain.co.uk
Fri Jul 6 07:33:17 EDT 2012
Hi all,
This is my first time submitting a patch to any open source project,
so I hope I've done it it right. Apologies in advance for anything I
have done wrong!
Below is a small patch adding an additional command-line flag to pacman,
which prevents ld-config from being run by libalpm. I was having
problems installing packages to a loop-mounted ARM image and I think
preventing ldconfig from running is the best solution.
Kind Regards,
Alex Chamberlain
Add the --no-ldconfig flag to the command line to prevent
ldconfig from being run. It is useful for installing
packages onto a loop- mounted image.
Signed-off-by: Alex Chamberlain <alex at alexchamberlain.co.uk>
---
lib/libalpm/alpm.h | 3 +++
lib/libalpm/handle.c | 14 ++++++++++++++
lib/libalpm/handle.h | 1 +
lib/libalpm/util.c | 23 ++++++++++++-----------
src/pacman/conf.c | 4 ++++
src/pacman/conf.h | 5 ++++-
src/pacman/pacman.c | 5 +++++
7 files changed, 43 insertions(+), 12 deletions(-)
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index bb792cf..a8fdd11 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -547,6 +547,9 @@ int alpm_option_set_deltaratio(alpm_handle_t *handle, double ratio);
int alpm_option_get_checkspace(alpm_handle_t *handle);
int alpm_option_set_checkspace(alpm_handle_t *handle, int checkspace);
+int alpm_option_get_ldconfig(alpm_handle_t *handle);
+int alpm_option_set_ldconfig(alpm_handle_t *handle, int ldconfig);
+
alpm_siglevel_t alpm_option_get_default_siglevel(alpm_handle_t *handle);
int alpm_option_set_default_siglevel(alpm_handle_t *handle, alpm_siglevel_t level);
diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c
index 816162b..e126421 100644
--- a/lib/libalpm/handle.c
+++ b/lib/libalpm/handle.c
@@ -44,6 +44,7 @@ alpm_handle_t *_alpm_handle_new(void)
CALLOC(handle, 1, sizeof(alpm_handle_t), return NULL);
handle->deltaratio = 0.0;
+ handle->ldconfig = 1;
return handle;
}
@@ -265,6 +266,12 @@ int SYMEXPORT alpm_option_get_checkspace(alpm_handle_t *handle)
return handle->checkspace;
}
+int SYMEXPORT alpm_option_get_ldconfig(alpm_handle_t *handle)
+{
+ CHECK_HANDLE(handle, return -1);
+ return handle->ldconfig;
+}
+
int SYMEXPORT alpm_option_set_logcb(alpm_handle_t *handle, alpm_cb_log cb)
{
CHECK_HANDLE(handle, return -1);
@@ -600,6 +607,13 @@ int SYMEXPORT alpm_option_set_checkspace(alpm_handle_t *handle, int checkspace)
return 0;
}
+int SYMEXPORT alpm_option_set_ldconfig(alpm_handle_t *handle, int ldconfig)
+{
+ CHECK_HANDLE(handle, return -1);
+ handle->ldconfig = ldconfig;
+ return 0;
+}
+
int SYMEXPORT alpm_option_set_default_siglevel(alpm_handle_t *handle,
alpm_siglevel_t level)
{
diff --git a/lib/libalpm/handle.h b/lib/libalpm/handle.h
index c0ad668..cccdf12 100644
--- a/lib/libalpm/handle.h
+++ b/lib/libalpm/handle.h
@@ -91,6 +91,7 @@ struct __alpm_handle_t {
double deltaratio; /* Download deltas if possible; a ratio value */
int usesyslog; /* Use syslog instead of logfile? */ /* TODO move to frontend */
int checkspace; /* Check disk space before installing */
+ int ldconfig; /* Should we run ldconfig? Default: 1 */
alpm_siglevel_t siglevel; /* Default signature verification level */
/* error code */
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index c2b5d44..3b1ee6e 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -616,17 +616,18 @@ cleanup:
int _alpm_ldconfig(alpm_handle_t *handle)
{
char line[PATH_MAX];
-
- _alpm_log(handle, ALPM_LOG_DEBUG, "running ldconfig\n");
-
- snprintf(line, PATH_MAX, "%setc/ld.so.conf", handle->root);
- if(access(line, F_OK) == 0) {
- snprintf(line, PATH_MAX, "%ssbin/ldconfig", handle->root);
- if(access(line, X_OK) == 0) {
- char arg0[32];
- char *argv[] = { arg0, NULL };
- strcpy(arg0, "ldconfig");
- return _alpm_run_chroot(handle, "/sbin/ldconfig", argv);
+ if(handle->ldconfig) {
+ _alpm_log(handle, ALPM_LOG_DEBUG, "running ldconfig\n");
+
+ snprintf(line, PATH_MAX, "%setc/ld.so.conf", handle->root);
+ if(access(line, F_OK) == 0) {
+ snprintf(line, PATH_MAX, "%ssbin/ldconfig", handle->root);
+ if(access(line, X_OK) == 0) {
+ char arg0[32];
+ char *argv[] = { arg0, NULL };
+ strcpy(arg0, "ldconfig");
+ return _alpm_run_chroot(handle, "/sbin/ldconfig", argv);
+ }
}
}
diff --git a/src/pacman/conf.c b/src/pacman/conf.c
index 4aaacb5..094c141 100644
--- a/src/pacman/conf.c
+++ b/src/pacman/conf.c
@@ -58,6 +58,8 @@ config_t *config_new(void)
ALPM_SIG_DATABASE | ALPM_SIG_DATABASE_OPTIONAL;
}
+ newconfig->ldconfig = 1;
+
return newconfig;
}
@@ -622,6 +624,8 @@ static int setup_libalpm(void)
alpm_option_set_noupgrades(handle, config->noupgrade);
alpm_option_set_noextracts(handle, config->noextract);
+ alpm_option_set_ldconfig(handle, config->ldconfig);
+
return 0;
}
diff --git a/src/pacman/conf.h b/src/pacman/conf.h
index 69c955e..389cfa3 100644
--- a/src/pacman/conf.h
+++ b/src/pacman/conf.h
@@ -95,6 +95,8 @@ typedef struct __config_t {
alpm_list_t *explicit_adds;
alpm_list_t *explicit_removes;
+
+ int ldconfig; /* Should ldconfig be called? Default: 1 */
} config_t;
/* Operations */
@@ -127,7 +129,8 @@ enum {
OP_PRINTFORMAT,
OP_GPGDIR,
OP_DBONLY,
- OP_FORCE
+ OP_FORCE,
+ OP_NO_LDCONFIG
};
/* clean method */
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 73d5be9..23af6bc 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -201,6 +201,7 @@ static void usage(int op, const char * const myname)
addlist(_(" --gpgdir <path> set an alternate home directory for GnuPG\n"));
addlist(_(" --logfile <path> set an alternate log file\n"));
addlist(_(" --noconfirm do not ask for any confirmation\n"));
+ addlist(_(" --no-ldconfig do not run ldconfig\n"));
}
list = alpm_list_msort(list, alpm_list_count(list), options_cmp);
for(i = list; i; i = alpm_list_next(i)) {
@@ -436,6 +437,9 @@ static int parsearg_global(int opt)
break;
case 'r': check_optarg(); config->rootdir = strdup(optarg); break;
case 'v': (config->verbose)++; break;
+ case OP_NO_LDCONFIG:
+ config->ldconfig = 0;
+ break;
default: return 1;
}
return 0;
@@ -628,6 +632,7 @@ static int parseargs(int argc, char *argv[])
{"print-format", required_argument, 0, OP_PRINTFORMAT},
{"gpgdir", required_argument, 0, OP_GPGDIR},
{"dbonly", no_argument, 0, OP_DBONLY},
+ {"no-ldconfig", no_argument, 0, OP_NO_LDCONFIG},
{0, 0, 0, 0}
};
--
1.7.11.1
More information about the pacman-dev
mailing list