bootc-dev / bootc-dev/bootc

Support locking an existing staged deployment with --download-only

オープン
#2,425 コメント 5 件 リアクション 0 件 担当者 0 名 GitHub で見る
triaged
主要言語
Rust
スター
2.3k
フォーク
230
平均マージ
3日 12時間
マージ済み PR(30日)
38

説明

## Problem
Running bootc switch --download-only for the same image that is already
staged does not convert the staged deployment from unlocked to download-only.
Instead, bootc exits successfully without changing the staged deployment:
```
Image specification is unchanged.
```

The staged deployment continues to report:
```
{
"downloadOnly": false
}
```
This means management software cannot safely enable a policy requiring an
explicit apply operation after the image has already been staged.

The result was reproduced on both:
- OSTree backend using XFS
- composefs backend using ext4, GRUB and BLS

Both returned `Image specification is unchanged`. with exit status 0, and both
left `status.staged.downloadOnly` set to `false`.

The OSTree-specific `ostree admin lock-finalization` command may provide a
low-level workaround, but it is not a backend-independent bootc interface.

## Background Why this matters https://github.com/bootc-dev/bootc-operator/pull/151
While implementing `RequireSoftReboot` support in bootc-operator, we need to
guarantee that a staged deployment cannot be applied by an ordinary reboot
before the operator explicitly applies it.

For `RequireSoftReboot`, the operator must ensure that an ordinary reboot
cannot accidentally apply the staged image.

If `RequireSoftReboot` is enabled after an update was staged normally,
bootc-operator currently cannot safely lock that existing stage. It must reject
the policy transition and report SoftRebootStageUnlocked.

## Expected Behavior:

If changing the state is unsupported, the command should return a clear error
instead of successfully reporting that the image specification is unchanged.

The operation should ideally be idempotent:
- An unlocked staged deployment becomes locked.
- An already locked deployment remains locked.
- The selected image and digest do not change.

A backend-independent bootc operation would let the operator safely adopt the
existing stage instead.

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

Start by reproducing `bootc switch --download-only` against an already staged image on the OSTree and composefs backends, then trace the handling of the staged deployment state. The work is done when an unlocked stage becomes locked without changing its image or digest, an already locked stage remains unchanged, and unsupported changes return a clear error.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
rust
領域
operating-systems
issue の種類
機能追加
難易度
4/5
見積もり時間
3〜5日
活発さ
活発
明瞭さ
おおむね明確
初心者へのやさしさ
52/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。