Skip to content

Migrate to mkosi + sysupdate - #809

Merged
jumpyvi merged 120 commits into
elementary:mainfrom
jumpyvi:sysupdate
Sep 14, 2026
Merged

jumpyvi merged 120 commits into
elementary:mainfrom
jumpyvi:sysupdate

Conversation

@jumpyvi

@jumpyvi jumpyvi commented Jul 22, 2026

Copy link
Copy Markdown
Member

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

@danirabbit danirabbit added this to OS 9 Jul 22, 2026
@danirabbit danirabbit moved this to In progress in OS 9 Jul 22, 2026
@nikodunk

nikodunk commented Jul 22, 2026

Copy link
Copy Markdown
Collaborator

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

nikodunk commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator

@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.

@danirabbit

This comment was marked as resolved.

@danirabbit

This comment was marked as resolved.

@jumpyvi

This comment was marked as outdated.

@nikodunk

nikodunk commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator

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?)

@jumpyvi

jumpyvi commented Jul 23, 2026

Copy link
Copy Markdown
Member 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

This comment was marked as resolved.

@danirabbit

This comment was marked as resolved.

@lewisgoddard

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

nikodunk commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

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.

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

nikodunk commented Jul 25, 2026

Copy link
Copy Markdown
Collaborator

@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

@nikodunk

This comment was marked as outdated.

@danirabbit

This comment was marked as 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
@jumpyvi
jumpyvi requested a review from ryonakano September 9, 2026 23:24

@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.

Sorry, I have some additional comments.

Comment thread .github/workflows/build-release.yml Outdated
Comment thread .github/workflows/daily-9.0.yml Outdated
Comment thread .github/workflows/stable-9.0.yml Outdated
Comment thread mkosi.images/sysupdate/mkosi.extra/usr/lib/systemd/import-pubring.gpg Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
jumpyvi and others added 9 commits September 12, 2026 10:39
Co-authored-by: Ryo Nakano <ryonakaknock3@gmail.com>
Co-authored-by: Ryo Nakano <ryonakaknock3@gmail.com>
Co-authored-by: Ryo Nakano <ryonakaknock3@gmail.com>
Co-authored-by: Ryo Nakano <ryonakaknock3@gmail.com>
Co-authored-by: Ryo Nakano <ryonakaknock3@gmail.com>
Co-authored-by: Ryo Nakano <ryonakaknock3@gmail.com>
@jumpyvi
jumpyvi requested a review from ryonakano September 12, 2026 14:47
@ryonakano

Copy link
Copy Markdown
Member

@jumpyvi Thanks for quick fix! Did you see the 3 remaining comments which unfortunately hidden by default?

@jumpyvi

jumpyvi commented Sep 12, 2026

Copy link
Copy Markdown
Member Author

@ryonakano

All fixed now

I'm not fixing the remaining one, while I get the point, I want everything in sysupdate/mkosi to keep the same format

@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 used MacBook Air (13-inch, Early 2015) and confirmed the liveiso written to a USB flash drive using the dd command boots up and installation of both sysupdate and classical succeeds. Although I noticed some problem with sysupdate installation e.g. the embedded touchpad doesn't work, while it works with classical installation, but that might be my hardware-specific problem so I think it's fine to go.

@ryonakano

Copy link
Copy Markdown
Member

@davidmhewitt I would appreciate if you would take a look at this too if you have time.

@danirabbit

Copy link
Copy Markdown
Member

@ryonakano I'm not sure David is around lately. Should we block on that? It would be great to move forward on working on installer and settings-daemon

@ryonakano

Copy link
Copy Markdown
Member

Yeah I'm not opposed to go ahead and merge this.

@jumpyvi
jumpyvi merged commit 527222d into elementary:main Sep 14, 2026
@github-project-automation github-project-automation Bot moved this from Needs Review to Done in OS 9 Sep 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

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

6 participants