[pacman-dev] [PATCH] Add the --no-ldconfig flag
Dave Reisner
d at falconindy.com
Sun Jul 15 09:15:33 EDT 2012
On Sun, Jul 15, 2012 at 05:33:34PM +1000, Allan McRae wrote:
> On 06/07/12 21:33, Alex Chamberlain wrote:
> > 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!
>
> Great! New contributors are always appreciated. Fairly minor comments
> inlined below.
>
As I mentioned to Alex in IRC, there's also a lack of a manpage addition
to go with this patch.
> > 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
>
> If you put all this below the "---" line after the Signoff-off-by, then
> it does not affect the commit.
>
>
> I'll start with the comment that even with --noldconfig, all your
> install scriptlets probably fail running too. So not running ldconfig
> is only one of the issues to solve.
>
> Did running ldconfig in this situation actually cause pacman have
> issues. A very brief look at the code indicates that the call will fail
> but pacman will solder on. So I am not sure what this is solving.
>
> Saying that, preventing ldconfig running is probably a needed step in
> allowing pacman to install a system with different architecture, so I
> see value in this patch.
>
>
> > 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.
>
> All the other --no* options have no "-" in the middle so you should be
> consistent and go with --noldconfig.
>
> > 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) {
>
> whitespace issues...
>
> > + _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;
> > +
>
> I'd put that above the if block above it. (being picky!)
>
> > 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
>
> OP_NOLDCONFIG <- none of the other options have _ separating the words.
>
> > };
> >
> > /* 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;
>
> This should only be added to parsearg_trans as it is used for -S, -R,
> and -U operations.
>
> > + 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}
> > };
> >
> >
>
>
>
More information about the pacman-dev
mailing list