bash gets built with a /bin/bash that is missing the executable bit
Metadata
Current evaluation
Staging bash+quilt in a classic core24 snap produces a non-executable bin/bash: craft-parts' normalize.py _try_copy_local uses shutil.copyfile, which drops file modes. Confirmed root cause, no fix landed.
Suggested action: keep open
Reason: Reproducible with a minimal snapcraft.yaml, and @lengau traced it precisely to craft_parts/packages/normalize.py#L148-L157, which I verified still calls shutil.copyfile() — content-only, so the 0755 mode of /usr/bin/bash is lost (the sibling `elif path.exists(): _fix_filemode(path)` branch is skipped for symlinks, so nothing repairs it). The fix is a one-line switch to shutil.copy2/copystat plus an existing snapcraft spread test asserting the mode. Inactivity is expected because the defect lives in craft-parts, not snapcraft; that is a cross-repo ownership reason for the silence, not evidence the bug is obsolete. Kept open rather than closed because nothing in the source shows resolution.
Evaluated by: mr-cal-bot
Issue body
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| stealth/space-bunny-alpha |
Impact:
45
Quick Win:
33
Complexity:
15
Confidence:
88
Actionability:
85
|
keep open | Staging bash+quilt in a classic core24 snap produces a non-executable bin/bash: craft-parts' normalize.py _try_copy_local uses shutil.copyfile, which drops file modes. Confirmed root cause, no fix landed. | |
| stealth/space-bunny-alpha |
Impact:
38
Quick Win:
14
Complexity:
42
Confidence:
78
Actionability:
62
|
keep open | Staging quilt alongside bash yields a non-executable bin/bash: craft-parts' _try_copy_local uses shutil.copyfile, dropping file modes. Maintainers pinpointed normalize.py; workaround is override-stage chmod. Unfixed. | |
| stealth/space-bunny-alpha |
Impact:
45
Quick Win:
23
Complexity:
35
Confidence:
80
Actionability:
78
|
keep open | Staging bash+quilt in a classic core24 snap yields a non-executable bin/bash (lost mode when craft-parts copies the symlink target); maintainers traced it to craft_parts/packages/normalize.py, still unresolved | |
| qwen/qwen3.6-35b-a3b |
Impact:
70
Quick Win:
39
Complexity:
30
Confidence:
85
Actionability:
80
|
keep open | bash staged via craft-parts loses executable bit when quilt's absolute symlink is resolved, due to shutil.copyfile not preserving permissions | |
| qwen/qwen3.8-27b |
Impact:
45
Quick Win:
32
Staleness:
70
Complexity:
30
Confidence:
70
Support Request:
10
|
keep open | Staging bash+quilt in a classic snap yields a non-executable bin/bash because craft-parts normalize copies the symlink target from the system via shutil.copyfile, dropping the executable bit. Unfixed in craft-parts; reporter has a chmod workaround. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
88
Complexity:
55
Confidence:
75
Support Request:
10
|
close stale | Staging bash and quilt in a classic snap causes /bin/bash to lose its executable bit due to craft-parts symlink normalization. The issue has been inactive for over a year with a provided workaround but no fix. | |
| qwen3.6-35b-a3b-mtp-q6 |
Staleness:
95
Complexity:
45
Confidence:
85
Support Request:
15
|
close stale | Staging bash and quilt in a classic snap causes bin/bash to lose its executable bit. Currently inactive for over 630 days with a workaround available. |
Update history
No update history recorded yet.
Related work
-
Blocked By:
canonical/craft-parts
(confidence 90%)
The defect is in craft_parts/packages/normalize.py::_try_copy_local, not snapcraft; fixing it requires an upstream craft-parts change (shutil.copyfile -> copy2/copystat). @lengau and @mr-cal/@cmatsuoka were already pinged about it.
Related issues
No related issues found above the similarity threshold.