/* @param reload set to > 0 if reloading libalpm so that cachedirs can be * reinitialized. */ static int setup_pacman_environment(int reload) { enum _alpm_errno_t err; alpm_list_t *i; if (reload) { pw_printf(PW_LOG_DEBUG, "Reloading pacman configuration\n"); pacman_cachedirs = NULL; } if (parse_pmconfig()) { /* Free cachedirs */ FREELIST(pacman_cachedirs); return error(PW_ERR_PM_CONF_PARSE); } if (!pacman_rootdir) { pacman_rootdir = xstrdup(PACMAN_DEF_ROOTDIR); } if (!pacman_dbpath) { pacman_dbpath = xstrdup(PACMAN_DEF_DBPATH); } if (!pacman_cachedirs) { pacman_cachedirs = alpm_list_add(pacman_cachedirs, xstrdup(PACMAN_DEF_CACHEDIR)); } alpm_option_set_cachedirs(config->handle, pacman_cachedirs); config->handle = alpm_initialize(pacman_rootdir, pacman_dbpath, &err); if (!config->handle) { return error(PW_ERR_INIT_ALPM_HANDLE); } /* Register sync dbs */ for (i = pacman_syncdbs; i; i = i->next) { if (!alpm_db_register_sync(config->handle, (const char *) i->data, ALPM_SIG_USE_DEFAULT)) { return error(PW_ERR_INIT_ALPM_REGISTER_SYNC); } } return 0; }
static alpm_handle_t * pk_backend_config_initialize_alpm (PkBackendConfig *config, GError **error) { alpm_handle_t *handle; alpm_errno_t errno; gsize dir = 1; g_return_val_if_fail (config != NULL, FALSE); if (config->root == NULL || *config->root == '\0') { g_free (config->root); config->root = g_strdup (PK_BACKEND_DEFAULT_ROOT); } else if (!g_str_has_suffix (config->root, G_DIR_SEPARATOR_S)) { dir = 0; } if (config->dbpath == NULL) { config->dbpath = g_strconcat (config->root, PK_BACKEND_DEFAULT_DBPATH + dir, NULL); } g_debug ("initializing alpm"); handle = alpm_initialize (config->root, config->dbpath, &errno); if (handle == NULL) { g_set_error_literal (error, ALPM_ERROR, errno, alpm_strerror (errno)); return handle; } if (config->gpgdir == NULL) { config->gpgdir = g_strconcat (config->root, PK_BACKEND_DEFAULT_GPGDIR + dir, NULL); } if (alpm_option_set_gpgdir (handle, config->gpgdir) < 0) { errno = alpm_errno (handle); g_set_error (error, ALPM_ERROR, errno, "GPGDir: %s", alpm_strerror (errno)); return handle; } if (config->logfile == NULL) { config->logfile = g_strconcat (config->root, PK_BACKEND_DEFAULT_LOGFILE + dir, NULL); } if (alpm_option_set_logfile (handle, config->logfile) < 0) { errno = alpm_errno (handle); g_set_error (error, ALPM_ERROR, errno, "LogFile: %s", alpm_strerror (errno)); return handle; } if (config->cachedirs == NULL) { gchar *path = g_strconcat (config->root, PK_BACKEND_DEFAULT_CACHEDIR + dir, NULL); config->cachedirs = alpm_list_add (NULL, path); } /* alpm takes ownership */ if (alpm_option_set_cachedirs (handle, config->cachedirs) < 0) { errno = alpm_errno (handle); g_set_error (error, ALPM_ERROR, errno, "CacheDir: %s", alpm_strerror (errno)); return handle; } config->cachedirs = NULL; return handle; }
/** Sets up libalpm global stuff in one go. Called after the command line * and initial config file parsing. Once this is complete, we can see if any * paths were defined. If a rootdir was defined and nothing else, we want all * of our paths to live under the rootdir that was specified. Safe to call * multiple times (will only do anything the first time). */ static int setup_libalpm(void) { int ret = 0; alpm_errno_t err; alpm_handle_t *handle; alpm_list_t *i; pm_printf(ALPM_LOG_DEBUG, "setup_libalpm called\n"); /* Configure root path first. If it is set and dbpath/logfile were not * set, then set those as well to reside under the root. */ if(config->rootdir) { char path[PATH_MAX]; if(!config->dbpath) { snprintf(path, PATH_MAX, "%s/%s", config->rootdir, DBPATH + 1); config->dbpath = strdup(path); } if(!config->logfile) { snprintf(path, PATH_MAX, "%s/%s", config->rootdir, LOGFILE + 1); config->logfile = strdup(path); } } else { config->rootdir = strdup(ROOTDIR); if(!config->dbpath) { config->dbpath = strdup(DBPATH); } } /* initialize library */ handle = alpm_initialize(config->rootdir, config->dbpath, &err); if(!handle) { pm_printf(ALPM_LOG_ERROR, _("failed to initialize alpm library\n(%s: %s)\n"), alpm_strerror(err), config->dbpath); if(err == ALPM_ERR_DB_VERSION) { fprintf(stderr, _("try running pacman-db-upgrade\n")); } return -1; } config->handle = handle; alpm_option_set_logcb(handle, cb_log); alpm_option_set_dlcb(handle, cb_dl_progress); alpm_option_set_eventcb(handle, cb_event); alpm_option_set_questioncb(handle, cb_question); alpm_option_set_progresscb(handle, cb_progress); config->logfile = config->logfile ? config->logfile : strdup(LOGFILE); ret = alpm_option_set_logfile(handle, config->logfile); if(ret != 0) { pm_printf(ALPM_LOG_ERROR, _("problem setting logfile '%s' (%s)\n"), config->logfile, alpm_strerror(alpm_errno(handle))); return ret; } /* Set GnuPG's home directory. This is not relative to rootdir, even if * rootdir is defined. Reasoning: gpgdir contains configuration data. */ config->gpgdir = config->gpgdir ? config->gpgdir : strdup(GPGDIR); ret = alpm_option_set_gpgdir(handle, config->gpgdir); if(ret != 0) { pm_printf(ALPM_LOG_ERROR, _("problem setting gpgdir '%s' (%s)\n"), config->gpgdir, alpm_strerror(alpm_errno(handle))); return ret; } /* add a default cachedir if one wasn't specified */ if(config->cachedirs == NULL) { alpm_option_add_cachedir(handle, CACHEDIR); } else { alpm_option_set_cachedirs(handle, config->cachedirs); } alpm_option_set_default_siglevel(handle, config->siglevel); config->localfilesiglevel = merge_siglevel(config->siglevel, config->localfilesiglevel, config->localfilesiglevel_mask); config->remotefilesiglevel = merge_siglevel(config->siglevel, config->remotefilesiglevel, config->remotefilesiglevel_mask); alpm_option_set_local_file_siglevel(handle, config->localfilesiglevel); alpm_option_set_remote_file_siglevel(handle, config->remotefilesiglevel); for(i = config->repos; i; i = alpm_list_next(i)) { register_repo(i->data); } if(config->xfercommand) { alpm_option_set_fetchcb(handle, download_with_xfercommand); } else if(!(alpm_capabilities() & ALPM_CAPABILITY_DOWNLOADER)) { pm_printf(ALPM_LOG_WARNING, _("no '%s' configured\n"), "XferCommand"); } if(config->totaldownload) { alpm_option_set_totaldlcb(handle, cb_dl_total); } alpm_option_set_arch(handle, config->arch); alpm_option_set_checkspace(handle, config->checkspace); alpm_option_set_usesyslog(handle, config->usesyslog); alpm_option_set_deltaratio(handle, config->deltaratio); alpm_option_set_ignorepkgs(handle, config->ignorepkg); alpm_option_set_ignoregroups(handle, config->ignoregrp); alpm_option_set_noupgrades(handle, config->noupgrade); alpm_option_set_noextracts(handle, config->noextract); for(i = config->assumeinstalled; i; i = i->next) { char *entry = i->data; alpm_depend_t *dep = alpm_dep_from_string(entry); if(!dep) { return 1; } pm_printf(ALPM_LOG_DEBUG, "parsed assume installed: %s %s\n", dep->name, dep->version); ret = alpm_option_add_assumeinstalled(handle, dep); if(ret) { pm_printf(ALPM_LOG_ERROR, _("Failed to pass %s entry to libalpm"), "assume-installed"); alpm_dep_free(dep); return ret; } } return 0; }
static alpm_handle_t * pk_alpm_config_initialize_alpm (PkAlpmConfig *config, GError **error) { alpm_handle_t *handle; alpm_errno_t errno; gsize dir = 1; g_return_val_if_fail (config != NULL, FALSE); if (config->root == NULL || *config->root == '\0') { g_free (config->root); config->root = g_strdup ("/"); } else if (!g_str_has_suffix (config->root, G_DIR_SEPARATOR_S)) { dir = 0; } if (config->dbpath == NULL) { config->dbpath = g_strconcat (config->root, "/var/lib/pacman/" + dir, NULL); } g_debug ("initializing alpm"); handle = alpm_initialize (config->root, config->dbpath, &errno); if (handle == NULL) { g_set_error_literal (error, PK_ALPM_ERROR, errno, alpm_strerror (errno)); return handle; } if (config->gpgdir == NULL) { config->gpgdir = g_strconcat (config->root, "/etc/pacman.d/gnupg/" + dir, NULL); } if (alpm_option_set_gpgdir (handle, config->gpgdir) < 0) { errno = alpm_errno (handle); g_set_error (error, PK_ALPM_ERROR, errno, "GPGDir: %s", alpm_strerror (errno)); return handle; } if (config->logfile == NULL) { config->logfile = g_strconcat (config->root, "/var/log/pacman.log" + dir, NULL); } if (alpm_option_set_logfile (handle, config->logfile) < 0) { errno = alpm_errno (handle); g_set_error (error, PK_ALPM_ERROR, errno, "LogFile: %s", alpm_strerror (errno)); return handle; } if (config->cachedirs == NULL) { gchar *path = g_strconcat (config->root, "/var/cache/pacman/pkg/" + dir, NULL); config->cachedirs = alpm_list_add (NULL, path); } /* alpm takes ownership */ if (alpm_option_set_cachedirs (handle, config->cachedirs) < 0) { errno = alpm_errno (handle); g_set_error (error, PK_ALPM_ERROR, errno, "CacheDir: %s", alpm_strerror (errno)); return handle; } config->cachedirs = NULL; return handle; }
/** * pacman_manager_set_cache_paths: * @manager: A #PacmanManager. * @paths: A list of directory names. * * Sets the list of CacheDirs to @paths. See pacman_manager_get_cache_paths(). */ void pacman_manager_set_cache_paths (PacmanManager *manager, PacmanList *paths) { g_return_if_fail (manager != NULL); g_return_if_fail (paths != NULL); alpm_option_set_cachedirs (alpm_list_strdup (paths)); }