feat(utils): add FUSE partition and volume mounting utilities
Metadata
Current evaluation
Merged #428 in commit 33e8c5d, adding FUSE mount utilities and polling for loop partition nodes to prevent an udev race.
Resolution: closed resolved
Reason: PR #428 was approved and merged with all CI checks passing. Commit 33e8c5d added ext4, FAT, and composite-volume mounting and fixed loop partition device-node synchronization.
Evaluated by: mr-cal-bot
No scores available.
Issue body
## Description
Adds FUSE-based partition and volume mounting utilities under `imagecraft.utils.mount` using `fuse2fs`, `fusefat`, and `fusefile`, enabling mounting of ext4, FAT, and composite GPT/MBR volume hierarchies without kernel loop devices.
Also fixes a race condition where `/dev/loopXpY` partition device nodes are accessed before udev finishes creating them after `losetup --partscan`.
### Key Changes
- **FUSE Mounts (`imagecraft.utils.mount`)**: `mount_partition()` and `mount_volume()` context managers supporting ext4 (`fuse2fs`), FAT (`fusefat`), and partition offsets via `fusefile`.
- **Loop Device Partition Sync (`imagecraft.services.image`)**: Polls for `/dev/loopXpY` nodes after `losetup --partscan`.
- **Packaging & Tests**: Stages FUSE utilities in snapcraft and adds unit and integration tests.
IMAGECRAFT-176
---
- [x] I've followed the [contribution guidelines](https://github.com/canonical/imagecraft/blob/main/CONTRIBUTING.md).
- [x] I've signed the [CLA](http://www.ubuntu.com/legal/contributors/).
- [x] I've successfully run `make lint && make test`.
- [ ] I've added or updated any relevant documentation.
- [ ] In documents I changed, I [added a meta description](https://canonical-starflow.readthedocs-hosted.com/how-to/add-a-page-meta-description/) if one was missing.
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| stealth/space-bunny-alpha | — | closed resolved | Merged #428 in commit 33e8c5d, adding FUSE mount utilities and polling for loop partition nodes to prevent an udev race. | |
| stealth/space-bunny-alpha | — | closed resolved | Merged in canonical/imagecraft#428: added FUSE-based partition and volume mounting using fuse2fs, fusefat and fusefile, and fixed a loop-partition device-node race. | |
| qwen/qwen3.6-35b-a3b | — | — | Merged after passing CI and approvals. Added FUSE-based partition and volume mounting utilities using fuse2fs, fusefat, and fusefile, and resolved a loop device partition race condition. The change spans 18 files. | |
| qwen/qwen3.8-27b |
Impact:
55
Quick Win:
16
Staleness:
5
Complexity:
70
Confidence:
80
|
needs review | Adds FUSE-based partition and composite volume mounting utilities under imagecraft.utils.mount for zero-copy unprivileged ext4/FAT/GPT mounting in LXD. Approved by 2 reviewers, CI green, 3 unresolved review comments. | |
| qwen/qwen3.8-27b |
Impact:
55
Quick Win:
16
Staleness:
5
Complexity:
70
Confidence:
85
|
needs review | Adds FUSE-based partition and composite volume mounting utilities (ext4, FAT, GPT/MBR) under imagecraft.utils.mount, with snap packaging and root-gated tests. Approved by 2 reviewers, all CI green, 3 unresolved comments; loop-device removal tracked in IMAGECRAFT-192. | |
| qwen/qwen3.8-27b |
Impact:
55
Quick Win:
16
Staleness:
5
Complexity:
70
Confidence:
80
|
needs review | Adds FUSE-based partition and composite volume mounting utilities under imagecraft.utils.mount, snap packaging for fuse binaries, and unit/integration tests. Approved by 1 reviewer; 2 unresolved comments; CI green with 2 spread checks pending. | |
| qwen/qwen3.8-27b |
Impact:
55
Quick Win:
14
Staleness:
5
Complexity:
75
Confidence:
78
|
needs review | Adds FUSE-based partition and composite volume mounting utilities (ext4, FAT, GPT/MBR) under imagecraft.utils.mount, snap packaging for fuse binaries, and unit/integration tests. CI mostly green with 2 checks pending; review pending with 2 unresolved comments. | |
| qwen/qwen3.8-27b |
Impact:
55
Quick Win:
19
Staleness:
5
Complexity:
65
Confidence:
80
|
needs review | Adds FUSE-based partition and composite volume mounting utilities under imagecraft.utils.mount for unprivileged ext4/FAT mounting in LXD containers. Fresh PR (3 days old), all CI passing, 3 unresolved review comments, 0 reviewers assigned, pending snap build jobs. | |
| qwen/qwen3.8-27b |
Impact:
50
Quick Win:
15
Staleness:
5
Complexity:
70
Confidence:
80
|
needs review | Adds FUSE-based partition and composite volume mounting utilities under imagecraft.utils.mount for unprivileged LXD mounting, plus fuse2fs/fusefat/fusefile snap packaging and tests. CI green, 3 checks pending; 4 unresolved review comments, 0 reviewers. | |
| qwen/qwen3.8-27b |
Impact:
55
Quick Win:
15
Staleness:
5
Complexity:
72
Confidence:
80
|
needs review | Adds FUSE-based partition and volume mounting utilities under imagecraft.utils.mount with context managers, factories, snap packaging for fuse2fs/fusefat/fusefile, and unit/integration tests. 3 days old, all CI green, pending first review. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
90
|
needs review | Adds FUSE-based mounting utilities for ext4, FAT, and composite volumes under imagecraft.utils.mount, including context managers, factory functions, and snap packaging updates. Currently pending maintainer review with 0 approvals and 1 unresolved comment. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
90
|
needs review | Adds FUSE-based partition and volume mounting utilities to imagecraft.utils, including context managers, factory functions, and snap packaging. Currently pending maintainer review with all CI checks passing. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
90
|
needs review | Adds FUSE-based mounting utilities for ext4, FAT, and composite volumes with context managers and factory functions. Includes snap packaging updates and comprehensive tests. Currently pending maintainer review with CI checks in progress. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
85
|
needs review | Adds FUSE-based partition and volume mounting utilities to imagecraft.utils, including context managers, factory functions, and snap dependencies. Currently pending maintainer review with minor CI failures on specific platforms noted as unrelated. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
85
|
needs review | Adds FUSE-based partition and volume mounting utilities for ext4, FAT, and composite GPT/MBR volumes, including context managers, factory functions, snap packaging updates, and comprehensive tests. Currently awaiting maintainer review with CI checks pending. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
90
|
needs review | Adds FUSE-based mounting utilities for ext4, FAT, and composite volumes with context managers and factory functions. Includes snap packaging updates and comprehensive tests. Currently awaiting maintainer review with mostly passing CI. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
85
|
needs review | Adds FUSE-based partition and volume mounting utilities with context managers, factory functions, and snap packaging. Includes comprehensive unit and integration tests. Currently pending maintainer review with one failing ARM test and several pending CI jobs. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
85
|
needs review | Adds FUSE-based mounting utilities for ext4, FAT, and composite volumes with context managers, factory functions, and snap packaging updates. Currently awaiting maintainer review with most CI checks passing. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
90
|
needs review | Adds FUSE-based partition and volume mounting utilities with context managers, factory functions, and snap packaging. Includes unit and integration tests. Currently awaiting maintainer review with some root-required tests failing. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
85
|
needs review | Adds FUSE-based mounting utilities for ext4, FAT, and composite volumes with context managers, factory functions, and snap packaging updates. Currently awaiting maintainer review with most CI checks passing. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
85
|
needs review | Adds FUSE-based utilities for mounting ext4, FAT, and composite volumes in unprivileged environments. Includes new mount context managers, factory functions, snap packaging updates, and comprehensive tests. Currently pending maintainer review with some ARM and slow test failures. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
70
Confidence:
85
|
needs review | Adds FUSE-based utilities for mounting ext4, FAT, and composite volumes in LXD containers. Includes context managers, factory functions, snap packaging updates, and tests. Currently pending review with one unresolved comment and failing snap/arm64 CI checks. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
85
|
needs review | Adds FUSE-based partition and volume mounting utilities for ext4 and FAT filesystems, including composite volume support and snap packaging updates. Currently awaiting maintainer review with CI checks pending. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
5
Complexity:
65
Confidence:
85
|
needs review | Adds FUSE-based mounting utilities for ext4, FAT, and composite volumes, including context managers, factory functions, snap packaging updates, and tests. Currently pending maintainer review with mixed CI results. |
Update history
| Date | Change |
|---|---|
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| updated | |
| created |
Related issues
| Issue | Project | State | Summary | Similarity |
|---|---|---|---|---|
| #458 feat: use fusefile virtual partition devices instead of loop devices | imagecraft | merged | Merged PR replacing loop-device attachment with fusefile virtual partition files per volume slice; removes losetup and udev partition-node waits. |