Skip to content

Commit

Permalink
lib: Add option for specifying the mountpoint for the erofs image
Browse files Browse the repository at this point in the history
Otherwise the random tmpdir will be encoded in the mount options. We
want to use this in ostree so we can find the deploy dir from the
root (overlay) mount.

Signed-off-by: Alexander Larsson <[email protected]>
  • Loading branch information
alexlarsson committed Apr 28, 2023
1 parent b61e1a6 commit 3e07198
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 13 deletions.
40 changes: 27 additions & 13 deletions libcomposefs/lcfs-mount.c
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,7 @@ static int lcfs_mount_erofs_ovl(struct lcfs_mount_state_s *state,
uint32_t image_flags;
char imagemountbuf[] = "/tmp/.composefs.XXXXXX";
char *imagemount;
bool created_tmpdir = false;
char loopname[PATH_MAX];
int res, errsv;
int lowerdir_alt = 0;
Expand All @@ -506,11 +507,16 @@ static int lcfs_mount_erofs_ovl(struct lcfs_mount_state_s *state,
if (loopfd < 0)
return loopfd;

imagemount = mkdtemp(imagemountbuf);
if (imagemount == NULL) {
errsv = errno;
close(loopfd);
return -errsv;
if (options->image_mountdir) {
imagemount = (char *)options->image_mountdir;
} else {
imagemount = mkdtemp(imagemountbuf);
if (imagemount == NULL) {
errsv = errno;
close(loopfd);
return -errsv;
}
created_tmpdir = true;
}

res = lcfs_mount_erofs(loopname, imagemount, image_flags, state);
Expand Down Expand Up @@ -582,7 +588,9 @@ static int lcfs_mount_erofs_ovl(struct lcfs_mount_state_s *state,
free(overlay_options);

umount2(imagemount, MNT_DETACH);
rmdir(imagemount);
if (created_tmpdir) {
rmdir(imagemount);
}

return res;
}
Expand Down Expand Up @@ -621,12 +629,16 @@ static int lcfs_mount_cfs(struct lcfs_mount_state_s *state,
needs_overlay = options->upperdir != NULL;

if (needs_overlay) {
imagemount = mkdtemp(imagemountbuf);
if (imagemount == NULL) {
res = -errno;
goto fail;
if (options->image_mountdir) {
imagemount = options->image_mountdir;
} else {
imagemount = mkdtemp(imagemountbuf);
if (imagemount == NULL) {
res = -errno;
goto fail;
}
created_tmpdir = true;
}
created_tmpdir = true;
} else {
imagemount = state->mountpoint;
}
Expand Down Expand Up @@ -684,11 +696,13 @@ static int lcfs_mount_cfs(struct lcfs_mount_state_s *state,

fail:

if (created_tmpdir) {
if (needs_overlay) {
if (mounted_cfs) {
umount2(imagemount, MNT_DETACH);
}
rmdir(imagemount);
if (created_tmpdir) {
rmdir(imagemount);
}
}
free(cfsimg);
free(basedir);
Expand Down
1 change: 1 addition & 0 deletions libcomposefs/lcfs-mount.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ struct lcfs_mount_options_s {
const char *expected_digest;
uint32_t flags;
int idmap_fd; /* userns fd */
const char *image_mountdir; /* Temporary location to mount images if needed */

uint32_t reserved[4];
void *reserved2[4];
Expand Down

0 comments on commit 3e07198

Please sign in to comment.