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_autoptr(RpmOstreeTreespec) treespec_value = rpmostree_treespec_new_from_keyfile (treespec, &tmp_error);
|
||||||
g_assert_no_error (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))
|
cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@ -348,7 +348,7 @@ install_packages_in_root (RpmOstreeTreeComposeContext *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* --- Downloading packages --- */
|
/* --- Downloading packages --- */
|
||||||
if (!rpmostree_context_download_rpms (ctx, -1, hifinstall, cancellable, error))
|
if (!rpmostree_context_download (ctx, hifinstall, cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
{ g_auto(GLnxConsoleRef) console = { 0, };
|
{ g_auto(GLnxConsoleRef) console = { 0, };
|
||||||
|
@ -114,7 +114,7 @@ roc_context_prepare_for_root (ROContainerContext *rocctx,
|
|||||||
if (!rocctx->ctx)
|
if (!rocctx->ctx)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!rpmostree_context_setup (rocctx->ctx, NULL, treespec, cancellable, error))
|
if (!rpmostree_context_setup (rocctx->ctx, NULL, "/", treespec, cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
@ -301,19 +301,29 @@ rpmostree_container_builtin_assemble (int argc,
|
|||||||
if (!rpmostree_context_prepare_install (rocctx->ctx, &install, cancellable, error))
|
if (!rpmostree_context_prepare_install (rocctx->ctx, &install, cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
/* --- Download and import as necessary --- */
|
/* --- Download as necessary --- */
|
||||||
if (!rpmostree_context_download_import (rocctx->ctx, install,
|
if (!rpmostree_context_download (rocctx->ctx, install, cancellable, error))
|
||||||
cancellable, error))
|
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
{ glnx_fd_close int tmpdir_dfd = -1;
|
/* --- Import as necessary --- */
|
||||||
|
if (!rpmostree_context_import (rocctx->ctx, install, cancellable, error))
|
||||||
if (!glnx_opendirat (rocctx->userroot_dfd, "tmp", TRUE, &tmpdir_dfd, error))
|
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!rpmostree_context_assemble_commit (rocctx->ctx, tmpdir_dfd, name,
|
{ g_autofree char *tmprootfs = g_strdup ("tmp/rpmostree-commit-XXXXXX");
|
||||||
&commit, cancellable, error))
|
glnx_fd_close int tmprootfs_dfd = -1;
|
||||||
|
|
||||||
|
if (!glnx_mkdtempat (rocctx->userroot_dfd, tmprootfs, 0755, error))
|
||||||
goto out;
|
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);
|
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 --- */
|
/* --- Download as necessary --- */
|
||||||
if (!rpmostree_context_download_import (rocctx->ctx, install,
|
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))
|
cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
{ glnx_fd_close int tmpdir_dfd = -1;
|
glnx_shutil_rm_rf_at (rocctx->userroot_dfd, tmprootfs, cancellable, NULL);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_print ("Checking out %s @ %s...\n", name, new_commit_checksum);
|
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,
|
gboolean rpmostree_context_setup (RpmOstreeContext *self,
|
||||||
const char *install_root,
|
const char *install_root,
|
||||||
|
const char *source_root,
|
||||||
RpmOstreeTreespec *treespec,
|
RpmOstreeTreespec *treespec,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
void rpmostree_context_set_repo (RpmOstreeContext *self,
|
void rpmostree_context_set_repo (RpmOstreeContext *self,
|
||||||
OstreeRepo *repo);
|
OstreeRepo *repo);
|
||||||
|
void rpmostree_context_set_sepolicy (RpmOstreeContext *self,
|
||||||
|
OstreeSePolicy *sepolicy);
|
||||||
|
|
||||||
void rpmostree_hif_add_checksum_goal (GChecksum *checksum, HyGoal goal);
|
void rpmostree_hif_add_checksum_goal (GChecksum *checksum, HyGoal goal);
|
||||||
char *rpmostree_context_get_state_sha512 (RpmOstreeContext *self);
|
char *rpmostree_context_get_state_sha512 (RpmOstreeContext *self);
|
||||||
@ -80,20 +83,27 @@ gboolean rpmostree_context_prepare_install (RpmOstreeContext *self,
|
|||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
gboolean rpmostree_context_download_rpms (RpmOstreeContext *self,
|
gboolean rpmostree_context_download (RpmOstreeContext *self,
|
||||||
int target_dfd,
|
|
||||||
RpmOstreeInstall *install,
|
RpmOstreeInstall *install,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
gboolean rpmostree_context_download_import (RpmOstreeContext *self,
|
gboolean rpmostree_context_import (RpmOstreeContext *self,
|
||||||
RpmOstreeInstall *install,
|
RpmOstreeInstall *install,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
GError **error);
|
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,
|
gboolean rpmostree_context_assemble_commit (RpmOstreeContext *self,
|
||||||
int tmpdir_dfd,
|
int tmprootfs_dfd,
|
||||||
const char *name,
|
OstreeRepoDevInoCache *devino_cache,
|
||||||
|
const char *parent,
|
||||||
char **out_commit,
|
char **out_commit,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
Loading…
Reference in New Issue
Block a user