Silverblue and Ublue-OS updates sizes

Hi there, I’ve been playing lately with Silverblue and Ublue-OS because I really like the concept of the transactional desktop. I ended up creating my custom image using blue-build and ublue-os as the base.
There is something I don’t fully understand, though. Whenever I get an update, what’s the typical size I should expect?
I mean, I’ve been running this in a vm and applying updates daily next to my other Fedora Workstation boxes and there was times when in Fedora WS there was an update that would be around the hundreds MB, but in the Silverblue based it wasn’t strange to have an update closer to the GB (or larger!).

I can show you today’s update for example. In theory it only updated just but the update size was still around 500 MB (if I’m reading it correctly).

franute@fedora:~$ sudo rpm-ostree update
note: automatic updates (stage) are enabled
Pulling manifest: ostree-image-signed:docker://ghcr.io/franute/nimbus-os:latest
Importing: ostree-image-signed:docker://ghcr.io/franute/nimbus-os:latest (digest: sha256:96b616dec8b7d6f60c0d843819dd4ca3ec4c4c1f3dd949e05dadb5d3467c02af)
ostree chunk layers already present: 61
ostree chunk layers needed: 4 (200,9 MB)
custom layers needed: 9 (384,4 MB)
Fetching ostree chunk sha256:1751e5ff4885 (25,7 MB)... done
Fetching ostree chunk sha256:af9b5fb87f36 (9,8 MB)... done
Fetching ostree chunk sha256:55f1e5edef32 (159,8 MB)... done
Fetching ostree chunk sha256:087dc93d2b69 (5,5 MB)... done
Fetching layer sha256:85eeadb689bb (274,0 MB)... done
Fetching layer sha256:c4b821d9513a (390 bytes)... done
Fetching layer sha256:89bfa59c5862 (53,7 MB)... done
Fetching layer sha256:f26b67df578e (2,4 kB)... done
Fetching layer sha256:2c72a3e8b79d (56,5 MB)... done
Fetching layer sha256:f6c3a4cbba30 (3,5 kB)... done
Fetching layer sha256:1636b300ce7d (71,6 kB)... done
Fetching layer sha256:90d18a806224 (640 bytes)... done
Fetching layer sha256:1c1aede669da (189 bytes)... done
Staging deployment... done
Pruned images: 1 (layers: 0)
Upgraded:
  just 1.25.2-1.fc40 -> 1.27.0-1.fc40
Run "systemctl reboot" to start a reboot

I guess it’s probably expected to have this kind of results, but I wanted to ask around to have a better understanding.

Thanks!

When using a custom image based on silverblue it pulls down the entire custom layer on every update. The size depends on how much stuff you add.

Stock silverblue still uses ostree remotes so it also has way smaller updates.

Here’s the spec to track to make this more efficient:

https://fedoraproject.org/wiki/Changes/zstd:chunked

1 Like

Thanks @castrojo, I still wonder though. If I compare the update in workstation from June 13th:

Fedora Workstation Update Log from June 13th
========================================================================================================
 Paquete                           Arquitectura     Versión                     Repositorio        Tam.
========================================================================================================
Actualizando:
 bolt                              x86_64           0.9.8-2.fc40                updates           190 k
 cpp                               x86_64           14.1.1-5.fc40               updates            12 M
 firefox                           x86_64           127.0-1.fc40                updates            70 M
 firefox-langpacks                 x86_64           127.0-1.fc40                updates            46 M
 gcc                               x86_64           14.1.1-5.fc40               updates            37 M
 gcc-c++                           x86_64           14.1.1-5.fc40               updates            14 M
 gcc-plugin-annobin                x86_64           14.1.1-5.fc40               updates            51 k
 gnome-initial-setup               x86_64           46.2-1.fc40                 updates           563 k
 libatomic                         x86_64           14.1.1-5.fc40               updates            39 k
 libgcc                            x86_64           14.1.1-5.fc40               updates           130 k
 libgomp                           x86_64           14.1.1-5.fc40               updates           350 k
 libstdc++                         x86_64           14.1.1-5.fc40               updates           882 k
 libstdc++-devel                   x86_64           14.1.1-5.fc40               updates           2.7 M
 selinux-policy                    noarch           40.22-1.fc40                updates            58 k
 selinux-policy-targeted           noarch           40.22-1.fc40                updates           6.9 M
 vulkan-loader                     x86_64           1.3.283.0-2.fc40            updates           150 k
 zlib-ng                           x86_64           2.1.6-5.fc40                updates            84 k
 zlib-ng-compat                    x86_64           2.1.6-5.fc40                updates            77 k
 zlib-ng-compat-devel              x86_64           2.1.6-5.fc40                updates            36 k

Resumen de la transacción
========================================================================================================
Actualizar  19 Paquetes

Tamaño total de la descarga: 191 M

It’s about 191 MB. Ignoring the fact that some packages will not be present in Silverblue, I updated today and got what I think is the corresponding update:

Silverblue based system Update Log from June 14th
note: automatic updates (stage) are enabled
Pulling manifest: ostree-image-signed:docker://ghcr.io/franute/nimbus-os:latest
Importing: ostree-image-signed:docker://ghcr.io/franute/nimbus-os:latest (digest: sha256:701cc82bf5c9055f8aa84e84923eed52dc35c08b7747705e096263408675d1fb)
ostree chunk layers already present: 43
ostree chunk layers needed: 22 (773,2 MB)
custom layers needed: 9 (384,2 MB)
Fetching ostree chunk sha256:0c01b2ae87df (96,0 MB)... done
Fetching ostree chunk sha256:c1a54e4f43c3 (25,7 MB)... done
Fetching ostree chunk sha256:5920e1da7ebc (54,5 MB)... done
Fetching ostree chunk sha256:1b3a86f028e4 (16,1 MB)... done
Fetching ostree chunk sha256:3a0750e2e34c (9,8 MB)... done
Fetching ostree chunk sha256:f14dad974bfe (22,9 MB)... done
Fetching ostree chunk sha256:ce0f3cf68801 (11,7 MB)... done
Fetching ostree chunk sha256:4dd9f3bf36ec (15,0 MB)... done
Fetching ostree chunk sha256:05aa19a0dcd8 (13,7 MB)... done
Fetching ostree chunk sha256:6114350fd29f (12,8 MB)... done
Fetching ostree chunk sha256:feae9e082731 (20,3 MB)... done
Fetching ostree chunk sha256:dcc20bbd6126 (12,4 MB)... done
Fetching ostree chunk sha256:4a2a61426ff6 (5,1 MB)... done
Fetching ostree chunk sha256:4edd312196bc (87,8 MB)... done
Fetching ostree chunk sha256:27a7752866f1 (105,2 MB)... done
Fetching ostree chunk sha256:55ab058ccdad (24,6 MB)... done
Fetching ostree chunk sha256:61607e46a5b3 (13,8 MB)... done
Fetching ostree chunk sha256:c487f738f29b (22,0 MB)... done
Fetching ostree chunk sha256:59276daf6646 (23,1 MB)... done
Fetching ostree chunk sha256:756914a06308 (15,5 MB)... done
Fetching ostree chunk sha256:a6310e4d5e38 (159,8 MB)... done
Fetching ostree chunk sha256:0655733fcbac (5,5 MB)... done
Fetching layer sha256:cae8d7faf482 (273,9 MB)... done
Fetching layer sha256:04bf63a8c0de (389 bytes)... done
Fetching layer sha256:beda1040e978 (53,7 MB)... done
Fetching layer sha256:7ca9b53408cc (2,4 kB)... done
Fetching layer sha256:2019e966e3cf (56,6 MB)... done
Fetching layer sha256:5171ceac52a8 (3,5 kB)... done
Fetching layer sha256:770878b5c243 (71,6 kB)... done
Fetching layer sha256:351975d2f4a7 (641 bytes)... done
Fetching layer sha256:dda3a220d0e3 (189 bytes)... done
Staging deployment... done
Freed: 364,8 MB (pkgcache branches: 0)
Upgraded:
  bolt 0.9.7-1.fc40 -> 0.9.8-2.fc40
  cpp 14.1.1-4.fc40 -> 14.1.1-5.fc40
  firefox 126.0-7.fc40 -> 127.0-1.fc40
  firefox-langpacks 126.0-7.fc40 -> 127.0-1.fc40
  libatomic 14.1.1-4.fc40 -> 14.1.1-5.fc40
  libgcc 14.1.1-4.fc40 -> 14.1.1-5.fc40
  libgomp 14.1.1-4.fc40 -> 14.1.1-5.fc40
  libstdc++ 14.1.1-4.fc40 -> 14.1.1-5.fc40
  selinux-policy 40.20-1.fc40 -> 40.22-1.fc40
  selinux-policy-targeted 40.20-1.fc40 -> 40.22-1.fc40
  vulkan-loader 1.3.283.0-1.fc40 -> 1.3.283.0-2.fc40
Removed:
  squashfs-tools-4.6.1-4.fc40.x86_64
Run "systemctl reboot" to start a reboot

If I understand it correctly, the custom layers mentioned there are my changes on top of Ublue (?), but the rest of the changes are about 770MB, way above the original 190-ish. I’m still trying to get used to a transactional system and want to learn how it works compared to traditional ones :thinking:

1 Like