Skip to content

Navigation Menu

Sign in
Sign up

Migrate to mkosi + sysupdate - #809

Open
jumpyvi wants to merge 106 commits into
elementary:main from
jumpyvi:sysupdate
Open

Migrate to mkosi + sysupdate #809
jumpyvi wants to merge 106 commits into
elementary:main from
jumpyvi:sysupdate

Conversation

@jumpyvi

@jumpyvi jumpyvi commented Jul 22, 2026
edited by ryonakano
Loading

Copy link
Copy Markdown

Migrate to mkosi and sysupdate

I got basic boot, missing a few package update to be able to check the full experience with Resolute.

Fixes elementary/settings-daemon#167
Fixes #717
Fixes #724

kurisubrooks, nikodunk, fizzyizzy05, lenemter, xerz-one, and rdebeasi reacted with hooray emoji danirabbit, nikodunk, fizzyizzy05, lenemter, xerz-one, and rdebeasi reacted with heart emoji
@danirabbit danirabbit moved this to In progress in OS 9 Jul 22, 2026

nikodunk commented Jul 22, 2026
edited
Loading

Copy link
Copy Markdown

This is more elegant than #808, and builds out the mkosi/sysupdate method from #793 that fully supports ubuntu already. In comparison to my bootc suggestion, this:

  • Build: mkosi build --profile=sysupdate Create disk image (currently .raw but could be a fake .iso).
  • Install: rsync mkosi.output/elementary.raw https://r2.cloudflarestorage.com/installer/x86.iso Copy the image to the download link, so users can download it and write to a USB drive. Live boot session would need to copy this image to disk. Installer would need to be adapted.
  • Update: rsync mkosi.output/* https://r2.cloudflarestorage.com/updates Push image to any static host so all existing ElementaryOS installs can run updatectl update (settings app would need to be adapted). This checks a static folder at ie. updates.elementary.io (currently set to 10.0.2.2:7676 for testing), downloads anything newer than the currently-booted IMAGE_VERSION, drops it into the inactive A/B slot, and reboots into it on next boot. Even over major versions like 8=>9=>10.

nikodunk commented Jul 23, 2026
edited
Loading

Copy link
Copy Markdown

@danirabbit what's the best way to land this? This PR currently replaces the old stuff, but I'm guessing some the 8.1 stable jobs might be run in parallel with the 9.0 sysupdate jobs until 8.1 reaches EOL?

Edit: My proposal, not speaking for @jumpyvi here:

  • When ready to merge, make current os/main branch into archive and keep running the 8.1 stable jobs off of that archive branch.
  • This becomes main, and starts building the sysupdate isos and updates.

This comment was marked as resolved.

This comment was marked as resolved.

This comment was marked as outdated.

nikodunk commented Jul 23, 2026
edited
Loading

Copy link
Copy Markdown

OK so going back on my above suggestions, how about we keep sysupdate on a branch, and add a 4th job on a sysupdate branch then:

  • daily-8.1 (main branch)
  • daily-9.0 (main branch)
  • stable-8.1 (main branch)
  • image-9.0 (sysupdate branch this can be a manual kick-off, and not advertised until there's delta updates?)
danirabbit reacted with thumbs up emoji

jumpyvi commented Jul 23, 2026

Copy link
Copy Markdown
Author
* image-9.0 (sysupdate branch this can be a manual kick-off, and not advertised until there's delta updates?)

We don't know when/if systemd will choose to implement this.

idk if there is any other solutions

systemd/systemd#28227

nikodunk reacted with thumbs up emoji

This comment was marked as resolved.

This comment was marked as resolved.

Copy link
Copy Markdown
Member

For S3 compatible storage I would recommend Cloudflare R2. We already use Cloudflare and there is no bandwidth billing there, only storage and action costs.

nikodunk, jumpyvi, and kurisubrooks reacted with thumbs up emoji nikodunk reacted with hooray emoji

nikodunk commented Jul 24, 2026
edited
Loading

Copy link
Copy Markdown

Thank you! Looks like we were holding it wrong: cost won’t be a problem at 0ドル.60 for 10,000 users downloading a 4gb image once a week on Cloudflare R2 (50 gb, 4 writes per mo, 70% egress, 40,000 reads per mo) - thank you @lewisgoddard .

OK so maybe @jumpyvi we don't optimize for transmission size yet for now then, and optimize for deltas later as sysupdate matures - other projects will have this problem too.

danirabbit reacted with heart emoji

JumpyVi and others added 3 commits July 24, 2026 14:17
* re-add sysupdate jobs
* make only monthly image.
* make monthly
* update scripts
* done
* merge
* revert
* fix typo, PR feedback on build
* add date to raw
* better update file matching
* update sha
* update upload.py for cloudflare R2

nikodunk commented Jul 25, 2026
edited
Loading

Copy link
Copy Markdown

@jumpyvi got updates working (hosted on a temporary CDN), @jumpyvi has also booted the .raw off of a usb stick (I don't have one that's big enough).

Screenshot_20260724_113227

Finally, an initial job has been added @danirabbit - edited upload.py to upload to Cloudflare R2

danirabbit and kurisubrooks reacted with rocket emoji

This comment was marked as outdated.

This comment was marked as outdated.

ryonakano self-requested a review August 30, 2026 13:01

@danirabbit danirabbit left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Few more comments/questions

I kind think we should put that install script in a package or something. It doesn't really belong in this repo. But I get it's temporary so I won't block on it

Comment thread mkosi.images/base/mkosi.conf.d/elementary.conf Outdated
Comment thread mkosi.images/liveiso/mkosi.extra/opt/repart-target/home/50-home.conf Outdated
Comment thread mkosi.images/sysupdate/mkosi.extra/usr/lib/sysupdate.d/ext-sdk.feature Outdated
Comment thread mkosi.images/sysupdate/mkosi.extra/usr/lib/sysupdate.d/ext-sdk.transfer Outdated
Comment thread mkosi.images/sysupdate/mkosi.extra/usr/lib/sysupdate.d/ext-virt.transfer Outdated
Comment thread README.md Outdated

@danirabbit danirabbit left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I'm happy to move this to testing. Just waiting on re-review from @ryonakano I think :)

Copy link
Copy Markdown
Member

Sorry for my late review, I will take a look at this again when getting back home today.

danirabbit reacted with heart emoji

@ryonakano ryonakano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm sorry for my late review. Leaving a few nitpicking comments and questions, otherwise LGTM.

Comment thread mkosi.images/base/mkosi.extra/usr/lib/systemd/system/apparmor-firstboot.service Outdated
Comment thread mkosi.images/base/mkosi.extra/usr/lib/tmpfiles.d/etc.conf Outdated
Comment thread mkosi.images/base/mkosi.extra/usr/lib/tmpfiles.d/etc.conf Outdated
Comment thread mkosi.images/liveiso/mkosi.extra/iso_root/.disk/info Outdated
Comment thread .github/workflows/daily-9.0.yml
Comment thread .github/workflows/daily-9.0.yml Outdated

@ryonakano ryonakano left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the fix, leaving tiny EOF comments.

Comment thread mkosi.images/liveiso/mkosi.profiles/aarch64/mkosi.conf Outdated
Comment thread mkosi.images/liveiso/mkosi.profiles/x86-64/mkosi.conf Outdated
Comment thread mkosi.profiles/aarch64/mkosi.conf Outdated
Comment thread mkosi.profiles/x86-64/mkosi.conf Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@lewisgoddard lewisgoddard lewisgoddard approved these changes
@danirabbit danirabbit danirabbit approved these changes
@lenemter lenemter lenemter approved these changes
@davidmhewitt davidmhewitt Awaiting requested review from davidmhewitt
@ryonakano ryonakano Awaiting requested review from ryonakano
+1 more reviewer
@nikodunk nikodunk nikodunk left review comments
Reviewers whose approvals may not affect merge requirements

Assignees

No one assigned

Labels

None yet

Projects

Status: Needs Review

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Build systemd-sysupdate compatible images There isn't a way to upgrade between OS releases Switch to SystemD Boot

AltStyle によって変換されたページ (->オリジナル) /