core: major rework
This patch prepares RpmOstreeContext for supporting package layering. A relabel operation is added as well to support relabeling imported packages if the sepolicy of the rootfs we're overlaying onto is different from during import. Closes: #289 Approved by: cgwalters
This commit is contained in:
parent
1ccc560c26
commit
a25cdde25c
@ -294,7 +294,7 @@ install_packages_in_root (RpmOstreeTreeComposeContext *self,
|
||||
g_autoptr(RpmOstreeTreespec) treespec_value = rpmostree_treespec_new_from_keyfile (treespec, &tmp_error);
|
||||
g_assert_no_error (tmp_error);
|
||||
|
||||
if (!rpmostree_context_setup (ctx, gs_file_get_path_cached (yumroot), treespec_value,
|
||||
if (!rpmostree_context_setup (ctx, gs_file_get_path_cached (yumroot), "/", treespec_value,
|
||||
cancellable, error))
|
||||
goto out;
|
||||
}
|
||||
@ -348,7 +348,7 @@ install_packages_in_root (RpmOstreeTreeComposeContext *self,
|
||||
}
|
||||
|
||||
/* --- Downloading packages --- */
|
||||
if (!rpmostree_context_download_rpms (ctx, -1, hifinstall, cancellable, error))
|
||||
if (!rpmostree_context_download (ctx, hifinstall, cancellable, error))
|
||||
goto out;
|
||||
|
||||
{ g_auto(GLnxConsoleRef) console = { 0, };
|
||||
|
@ -114,7 +114,7 @@ roc_context_prepare_for_root (ROContainerContext *rocctx,
|
||||
if (!rocctx->ctx)
|
||||
goto out;
|
||||
|
||||
if (!rpmostree_context_setup (rocctx->ctx, NULL, treespec, cancellable, error))
|
||||
if (!rpmostree_context_setup (rocctx->ctx, NULL, "/", treespec, cancellable, error))
|
||||
goto out;
|
||||
|
||||
ret = TRUE;
|
||||
@ -301,19 +301,29 @@ rpmostree_container_builtin_assemble (int argc,
|
||||
if (!rpmostree_context_prepare_install (rocctx->ctx, &install, cancellable, error))
|
||||
goto out;
|
||||
|
||||
/* --- Download and import as necessary --- */
|
||||
if (!rpmostree_context_download_import (rocctx->ctx, install,
|
||||
cancellable, error))
|
||||
/* --- Download as necessary --- */
|
||||
if (!rpmostree_context_download (rocctx->ctx, install, cancellable, error))
|
||||
goto out;
|
||||
|
||||
{ glnx_fd_close int tmpdir_dfd = -1;
|
||||
|
||||
if (!glnx_opendirat (rocctx->userroot_dfd, "tmp", TRUE, &tmpdir_dfd, error))
|
||||
/* --- Import as necessary --- */
|
||||
if (!rpmostree_context_import (rocctx->ctx, install, cancellable, error))
|
||||
goto out;
|
||||
|
||||
if (!rpmostree_context_assemble_commit (rocctx->ctx, tmpdir_dfd, name,
|
||||
&commit, cancellable, error))
|
||||
{ g_autofree char *tmprootfs = g_strdup ("tmp/rpmostree-commit-XXXXXX");
|
||||
glnx_fd_close int tmprootfs_dfd = -1;
|
||||
|
||||
if (!glnx_mkdtempat (rocctx->userroot_dfd, tmprootfs, 0755, error))
|
||||
goto out;
|
||||
|
||||
if (!glnx_opendirat (rocctx->userroot_dfd, tmprootfs, TRUE,
|
||||
&tmprootfs_dfd, error))
|
||||
goto out;
|
||||
|
||||
if (!rpmostree_context_assemble_commit (rocctx->ctx, tmprootfs_dfd, NULL,
|
||||
NULL, &commit, cancellable, error))
|
||||
goto out;
|
||||
|
||||
glnx_shutil_rm_rf_at (rocctx->userroot_dfd, tmprootfs, cancellable, NULL);
|
||||
}
|
||||
|
||||
g_print ("Checking out %s @ %s...\n", name, commit);
|
||||
@ -507,20 +517,30 @@ rpmostree_container_builtin_upgrade (int argc, char **argv, GCancellable *cancel
|
||||
}
|
||||
}
|
||||
|
||||
/* --- Download and import as necessary --- */
|
||||
if (!rpmostree_context_download_import (rocctx->ctx, install,
|
||||
/* --- Download as necessary --- */
|
||||
if (!rpmostree_context_download (rocctx->ctx, install, cancellable, error))
|
||||
goto out;
|
||||
|
||||
/* --- Import as necessary --- */
|
||||
if (!rpmostree_context_import (rocctx->ctx, install, cancellable, error))
|
||||
goto out;
|
||||
|
||||
{ g_autofree char *tmprootfs = g_strdup ("tmp/rpmostree-commit-XXXXXX");
|
||||
glnx_fd_close int tmprootfs_dfd = -1;
|
||||
|
||||
if (!glnx_mkdtempat (rocctx->userroot_dfd, tmprootfs, 0755, error))
|
||||
goto out;
|
||||
|
||||
if (!glnx_opendirat (rocctx->userroot_dfd, tmprootfs, TRUE,
|
||||
&tmprootfs_dfd, error))
|
||||
goto out;
|
||||
|
||||
if (!rpmostree_context_assemble_commit (rocctx->ctx, tmprootfs_dfd, NULL,
|
||||
NULL, &new_commit_checksum,
|
||||
cancellable, error))
|
||||
goto out;
|
||||
|
||||
{ glnx_fd_close int tmpdir_dfd = -1;
|
||||
|
||||
if (!glnx_opendirat (rocctx->userroot_dfd, "tmp", TRUE, &tmpdir_dfd, error))
|
||||
goto out;
|
||||
|
||||
if (!rpmostree_context_assemble_commit (rocctx->ctx, tmpdir_dfd, name,
|
||||
&new_commit_checksum,
|
||||
cancellable, error))
|
||||
goto out;
|
||||
glnx_shutil_rm_rf_at (rocctx->userroot_dfd, tmprootfs, cancellable, NULL);
|
||||
}
|
||||
|
||||
g_print ("Checking out %s @ %s...\n", name, new_commit_checksum);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -57,12 +57,15 @@ const char *rpmostree_treespec_get_ref (RpmOstreeTreespec *spec);
|
||||
|
||||
gboolean rpmostree_context_setup (RpmOstreeContext *self,
|
||||
const char *install_root,
|
||||
const char *source_root,
|
||||
RpmOstreeTreespec *treespec,
|
||||
GCancellable *cancellable,
|
||||
GError **error);
|
||||
|
||||
void rpmostree_context_set_repo (RpmOstreeContext *self,
|
||||
OstreeRepo *repo);
|
||||
void rpmostree_context_set_sepolicy (RpmOstreeContext *self,
|
||||
OstreeSePolicy *sepolicy);
|
||||
|
||||
void rpmostree_hif_add_checksum_goal (GChecksum *checksum, HyGoal goal);
|
||||
char *rpmostree_context_get_state_sha512 (RpmOstreeContext *self);
|
||||
@ -80,20 +83,27 @@ gboolean rpmostree_context_prepare_install (RpmOstreeContext *self,
|
||||
GCancellable *cancellable,
|
||||
GError **error);
|
||||
|
||||
gboolean rpmostree_context_download_rpms (RpmOstreeContext *self,
|
||||
int target_dfd,
|
||||
gboolean rpmostree_context_download (RpmOstreeContext *self,
|
||||
RpmOstreeInstall *install,
|
||||
GCancellable *cancellable,
|
||||
GError **error);
|
||||
|
||||
gboolean rpmostree_context_download_import (RpmOstreeContext *self,
|
||||
gboolean rpmostree_context_import (RpmOstreeContext *self,
|
||||
RpmOstreeInstall *install,
|
||||
GCancellable *cancellable,
|
||||
GError **error);
|
||||
|
||||
gboolean rpmostree_context_relabel (RpmOstreeContext *self,
|
||||
RpmOstreeInstall *install,
|
||||
GCancellable *cancellable,
|
||||
GError **error);
|
||||
|
||||
/* NB: tmprootfs_dfd is allowed to have pre-existing data */
|
||||
/* devino_cache can be NULL if no previous cache established */
|
||||
gboolean rpmostree_context_assemble_commit (RpmOstreeContext *self,
|
||||
int tmpdir_dfd,
|
||||
const char *name,
|
||||
int tmprootfs_dfd,
|
||||
OstreeRepoDevInoCache *devino_cache,
|
||||
const char *parent,
|
||||
char **out_commit,
|
||||
GCancellable *cancellable,
|
||||
GError **error);
|
||||
|
Loading…
Reference in New Issue
Block a user