project-machine / puzzlefs

Apache License 2.0
380 stars 18 forks source link

Cannot create overlay on top of a puzzlefs mount #63

Closed ariel-miculas closed 1 year ago

ariel-miculas commented 1 year ago

AllowOther option needs to be set.

diff --git a/reader/src/lib.rs b/reader/src/lib.rs
index c5a1a6b..b34bc10 100644
--- a/reader/src/lib.rs
+++ b/reader/src/lib.rs
@@ -29,5 +29,5 @@ pub fn spawn_mount(
 ) -> Result<fuse_ffi::BackgroundSession> {
     let pfs = PuzzleFS::open(image, tag)?;
     let fuse = Fuse::new(pfs, sender);
-    Ok(fuse_ffi::spawn_mount2(fuse, mountpoint, &[])?)
+    Ok(fuse_ffi::spawn_mount2(fuse, mountpoint, &[fuser::MountOption::AllowOther])?)
 }

Build and mount puzzlefs:

$ target/debug/puzzlefs build ../test-puzzlefs/simple_rootfs /tmp/oci-simple first_try
$ mkdir /tmp/puzzle
$ target/debug/puzzlefs mount /tmp/oci-simple first_try /tmp/puzzle

Create an overlay:

$ mkdir /tmp/ovl && cd /tmp/ovl
$ mkdir upperdir workdir result
$ sudo mount -t overlay overlay -o lowerdir=/tmp/puzzle,workdir=/tmp/ovl/workdir,upperdir=/tmp/ovl/upperdir /tmp/ovl/result
$ ls result
ls: reading directory 'result': Read-only file system

Strace:

openat(AT_FDCWD, "result", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
newfstatat(3, "", {st_mode=S_IFDIR|0755, st_size=40, ...}, AT_EMPTY_PATH) = 0
getdents64(3, 0x557b9b047730, 32768)    = -1 EROFS (Read-only file system)
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 4
newfstatat(4, "", {st_mode=S_IFREG|0644, st_size=2998, ...}, AT_EMPTY_PATH) = 0

The same steps work for sshfs:

$ mkdir /tmp/ssh-mount
$ sshfs -o allow_other amiculas@127.0.0.1:/home/amiculas/dotfiles /tmp/ssh-mount
$ sudo mount -t overlay overlay -o lowerdir=/tmp/ssh-mount,workdir=/tmp/ovl/workdir,upperdir=/tmp/ovl/upperdir /tmp/ovl/result
ariel-miculas commented 1 year ago

two issues: