Ubuntu Server Seed Changes for 25.10

What follows is a public spec related to the Ubuntu Server seeds. It does not contain specific definitions about seeds, how they relate to the ISOs, nor a long history. It is an implementation spec to show changes planned for 25.10. This is separated into sections: changes for 25.10 and Future. there are also tags with => showing expected change times. Anything in the future is very loose, while those marked for 25.10 will have an MP up in short time. Now on to the spec.

Server Seed

Abstract

Ubuntu Server seeds contain duplication between them (minimal and ā€œfull-fatā€), repetitive tooling (duplication of functionality), and nothing in the supported-server seed, which defines packages in main, but not seeded into an ISO. The goal of this document is to define a set of seeds that properly define opinionated minimal and ā€œfull-fatā€ server ISO installations and the set of supported by server team software.

Rationale

The Ubuntu server seed has not been evaluated in quite some time. The goal is to trim down installs to what is required and useful. There is also an evaluation of ā€œis this still supported?ā€ This spec aims to document a way forward that creates a default Ubuntu Server installation that serves a broad audience while trimming the total installed packages.

Specification

The Seeds

There is server, server-minimal, server-live, and supported-server. Below there is also discussion ā€œof the poolā€

  • Server-minimal must define the smallest amount of packages to have an Ubuntu up and running
    • No editors, no human niceties, etc
  • Server must define a fully-functional, opinionated, performant, easy to manage Ubuntu server
  • Server-live must define packages available for users in an install environment. These are tools the installer requires
  • Supported-server are packages not a part of the install media or the meta-packages
  • ā€œThe poolā€ are packages made available in the Ubuntu installer for setup and installation, based not only on what the installer may need, but also the choices a user may make. They are needed on disk to support offline-installations

25.10 Changes

Terminal multiplexer

Both screen and tmux are available. Tmux is the newer of the two. Move screen to supported and leave tmux the opinionated install.

=> 25.10

Byobu

Remove byobu entirely, letting it fall into universe. Server team will stay subscribed and help triage bugs. Upstream support has stalled in the recent year(s), and while it’s a ā€œnice to haveā€ set of additions, it’s not a required piece of functionality on a server, and does not fit into Ubuntu’s current plans.

=> 25.10

cloud-guest-utils

Stated as being pulled in for growpart for resizing partitions. Why? What is the context here? Is it part of the subiquity experience again? We (Dan Bungert and I) do not believe this is true. Is it part of MAAS and used for resizing on deployment? The use case isn’t discussed. Maybe vmware thin disk provisioning?

Cloud-init depends on it from cloud-init-base as it might use it.

Cloud-init will keep it in main and on images where it is present.

=> 25.10

dirmngr

As a standalone, I’m a little confused. I thought perhaps apt required it, but it doesn’t (only needed gpgv for verification). gnupg relies upon dirmngr and gunpg is seeded. We can drop dirmngr from the direct seed since gnupg will bring it in appropriately.

Drop from seeds, will be kept via GPG until it is no more needed.

=> 25.10

The Future

Curl and wget

Questions questions. wget is listed as ā€œfetch data from the command line.ā€ curl is the same. wget is ā€œeasier to useā€ out of the box. Gut says remove wget from server, put it in supported. This change will cause a large amount of issues – I question the wisdom in doing it, maybe waiting for 26.10 (first post LTS release, 1.5 years to bake)

=> 25.10 possibly

MAAS Requirements

This is an interesting case.

  1. MAAS is, at this time, technically a ā€œcloud-imageā€

  2. There are 6 packages listed as ā€œrequired for MAASā€

    1. lvm2
    2. open-iscsi
    3. bcache-tools
    4. cloud-initramfs-copymods
    5. cloud-initramfs-dyn-netconf
    6. overlayroot
  3. open-iscsi is used as a default for Oracle Cloud images as well, but that’s a CPC issue

    1. Currently installed in the build hook, not as part of a seed (it’s only one image)
    2. open-iscsi is in the server-minimal seed
  4. server-minimal includes a portion of the MAAS requirements as well

    1. bcache-tools
    2. lvm2
    3. Open-iscsi

Maas team already does customization on the images CPC sends them, if needed they can add more there.

Reaction

  • Keep lvm2, open-iscsi
  • To pool: Bcache-tools
  • cloud-initramfs-copymods, cloud-initramfs-dyn-netconf, overlayroot, find out info from MAAS
    • If strictly needed, figure out a new MAAS seed?
    • If not, remove

=> 26.10

Filesystem tools (btrfs-progs, xfsprogs)

Need to evaluate their need – is it about ā€œneed in the pool, and available based on subiquity options?ā€ or ā€œrequired default functionality.ā€ Having more things be available but not a part of the meta-package or installed everywhere makes a ton of sense. zfs is in server-ship-live.

recommendation is to move filesystem tools to the pool, available for use by curtin and the installer when detecting a specific filesystem existing or setting a specific filesystem during installation.

  • Needs installer change to tolerate it. It may be a no-op as curtin is already equipped to do this work. We (Dan Bungert and I) believe it ā€œshould just workā€ but lots of testing will need to be done.
  • Zfs is an example of what could be.

=> 26.10

open-vm-tools

I wish there was a way to put this in the pool, and know if the installer is being run in an VMWare setup. I’d also love for it to be in a specific vmware guest image rather than seeded everywhere. This has caused major problems in the past (having an extra agent running in a cloud-image, which can still happen because cloud-image seed installs ubuntu-server). Personally, moving to supported and having it in the pool, with a dynamic installation if in a VMWare guest setup makes the most sense, but I don’t see that happening until 26.10 at the earliest (don’t break an LTS and there will need to be roadmapped work in the installer and other things).

VMware can use any image (OVA by CPC) or ISO (with installer experience). That’s where some complexity rolls in as we need to ensure that that open-vm-tools is available for launching an instance. There’s also questions about portability. However, the same is true when thinking across clouds – by default, an Ubuntu instance running in Azure does not have the google-guest-agent installed. To move a cloud instance from Azure to Google one would need to 1) install google-guest-agent; 2) remove walinuxagent.

  • Needs installer effort to tolerate
  • Needs coordination with VMware and other interested parties to ensure we are always doing the right thing (for installation, portability, etc).

=> 26.10

4 Likes

Some notes from my phone:

tmux vs Screen: ubuntu-release-upgrader uses screen

dirmngr I thought I patched out, or rather I changed seeds to gpg from gnupg, hence added that back in.

curl Vs wget: Id add curl in 25.10/26.04, remove wget in 26.10. having the transition for the default by temporarily having both in an lts is useful, that said apt also has a downloader so it’s not like people are entirely lost without a separate program.

1 Like

In the spirit of ā€˜Linux for human beings’, I’d love to see byobu kept, maintained, and pushed forward :smiling_face_with_three_hearts:

1 Like

Upstream Byobu has stalled, with several breaking bugs not being addressed there. I patched one bug, but couldn’t get help with verification (for some reason I was never able to trigger it).

with upstream stale, many bugs in current versions, and not many people complaining (you’re the first!), it has felt like a universe package of ā€œnice to havesā€ not a default package. I can see its utility, and I’m not voting from dropping it from the archive. If it adds value to you, awesome! and maybe you can help maintain it :slight_smile:

1 Like

I absolutely agree with the position, given the state of upstream and nobody stepping in (sorry, I guess I’ve got too much on my plate already). I wonder if there are modern (Rust?) alternatives that would be more or less drop-in replacement and would have some upstream momentum :thinking:

I was mostly mentioning it because I feel it really makes a key difference for a human on a server, but maybe in 2025, with containers and clusters and lambdas, nobody bothers SSH-ing onto their machines anymore? Thanks for the reply anyway and making the position clearer :+1:

:smiley:

2 Likes

Hehe, I’m already aware of Zellij, but I had the feeling that this was a bit slightly overkill to put on a server. :smiley:
I’ll pretend this wasn’t sarcasm and develop my point for anyone reading this. This feels more like a developer tool to have on a dev machine, rather than a simple lightweight terminal multiplexer that could spawn on any kind of server machine, from a constrained raspi zero to a mainframe. In that sense, both tmux and screen do the job, but they’re definitely not battery included, and byobu offers a really nice middle ground here when one just needs to automatically reconnect to a long running debugging session with three windows.

there’s definitely space in this world for a batteries included configuration for tmux (i’m excluding screen because i’m proposing dropping screen from default installs :slight_smile: )

byobu is a combo of tmux config and bash functions that add functionality into a tmux session. but first you’ve got to set up your ssh session to run byobu as your entry point, not a straight ssh into the machine. that’s likely why i never ran into it during my 10+ years as an Ubuntu admin – i didn’t know it was there, and i never configured my sessions to use it. So having it available for all users seems great. the drop to universe is mainly around support status than usefulness.

I think having a wishlist item that the default entrypoint to a server session have more niceties, while staying as lightweight as possible, is very admirable, and worthy of a longer term plan.

1 Like

tmux vs Screen: ubuntu-release-upgrader uses screen

then ubuntu-release-upgrader should rely upon screen as a dependency. No intention of dropping screen from main. We’ll even keep it distinctly supported, separate from ā€œjustā€ being a dependency of ubuntu-release-upgrader

dirmngr I thought I patched out, or rather I changed seeds to gpg from gnupg, hence added that back in.

it’s still hanging in the seed directly. as a dependency of gnupg, it’s not required to be distinctly listed.

curl Vs wget:

right now they’re both listed. So the change will be to communicate that we plan on dropping one (wget) to supported, but not installed by default in 26.10.

There was a request in the PR to provide outputs, so I have (to the best of germinate and my abilities).

https://people.ubuntu.com/~jchittum/germinate_tests/

from the README.txt

How This Was Generated

  1. seed branches were made in my personal repo
  2. hacked on the branches a bit to create germinate --vcs friendly
    branches
    • required removing ā€œlanguagesā€ entries from everything, as --vcs
      handles this incorrectly
  3. germinate --vcs git --seed-source git://git.launchpad.net/~jchittum/ubuntu-seeds/+git/ -d questing --seed-dist ubuntu.questing-hack-DO-NOT-MERGE server
  4. downloaded all the germinate outputs from Index of /germinate-output/ubuntu.questing
  5. ran scripts container here:
    • germ2json.py : takes germinate output files and makes them json.
      this is slightly easier for later machine parsing, but not necessary. I
      just did it because it’d sure be nice to have a json output not just
      tabular
    • compgermjson.py : given 2 directories, if a file exists in dir1
      and in dir2, compare the entries, and provide highlight of the diff
      (maybe)

On The Diff

very few diffs occurred, with the primary thing being server.json.
That’s to be expected. What you’ll see is

json-germ-output: My outputs
json-current-real: otuputs from the ubuntu-archive-team files

the changes for byobu, cloud-guest-utils, and screen show they are
pulled in by the ubuntu-server meta. this makes sense because the
ubuntu-server meta is not updated as of running germinate. Since
ubuntu-server meta will be updated upon run, they will get removed

FINAL QUESTION

cloud-guest-utils states the why as ā€œubuntu-server.ā€ Will this change to
ā€œcloud-initā€ properly once the meta is updated? I hope so!

For everyone that has followed:

the seed changes have been merged, and ubuntu-server meta is getting uploaded.

Please watch out for major changes.

Just a passing comment… They are not the only options in town.

Dvtm is also in the repos and is a fairly good match to Tmux.

Also since the move to Rust-based coretools and so on, perhaps Zellij should be in consideration here?

we’re definitely evaluating new tools as well! i haven’t looked at dvtm in a very long time, and it looks like it’s ben orphaned in debian and upstream development has stopped. Too bad, because it was definitely a cool thing. That doesn’t make it a hard blocker from being in main, but it does mean if we think it’s the right way, we’d have to fully adopt it and become more than distro maintainers.

Zellij is definitely in consideration for future things :slight_smile: It isn’t packaged yet but I know some folks that have worked on a debian package version, and it’s available as a snap.

For the immediate future, we’re working on ā€œcleaning up.ā€ But you’ll see some new things incoming the next few cycles too

1 Like

There’s another quality of life change to Ubuntu server (i.e. something that makes the use much easier/safer).

It’s about adding Bash shell aliases to the cp, mv, and rm commands so that they ask you before overwriting. It’s the --interactive flag.

i.e.

alias mv='mv --interactive'

Reading through /etc/skel/.bashrc it appears that such aliases should be fine to include.

Can such changes make it to /etc/skel/.bashrc?

I think it was Ubuntu 12.04 that would run byobu by default? I remember it being one of the packages I’d remove out of a default install because it was bloated and slow on small VMs. I’d be happy to see it go. While I personally use screen out of habit (tmux is ā€œnewā€), I’d be fine with tmux replacing screen.

wget is easier to use for doing a simple down than curl although I come across curl more often in scripts than wget. Removing wget will cause annoyance.

Having neither wget nor curl is particularly annoying when building docker containers that need to fetch something off the internet, as that requires updating the apt cache, which is somewhat expensive. I wish server-minimal had something capable of downloading over https.

Sorry for the late reply. I really do not like Discourse as a medium, but I don’t like any web fora.

(Please please please can someone make a web forum that has a good mailing list gateway? Failing that, Usenet news over NNTP? Because this is not it.)

That’s a fair point.

This has prompted me to take a fresh look at this area. So far, I’ve discovered:

  • GNU Screen (the oldest, but by far the hardest to use, IMHO)
  • tmux (complex, quite hard to use, does both tiling & session management),
  • dvtm (small, simple, only does tiling & relies on abduco for session management)
  • mtm (extremely minimal, no binary packages)
  • twin (packaged, in the repos, looks good, somewhat easy to use, does overlapping terminal windows & more, & supports a mouse)
  • Zellij (has a snap, easy to use, works well)
  • Byobu (makes screen or tmux a bit easier)

With tabs instead of tiling…

1 Like

I’d like to point out that curl now ships wcurl: ā€œa command line tool which lets you download URLs without having to remember any parameters.ā€

wcurl comes shipped with curl since 8.14.0 upstream, but we have been shipping it on Debian since June 2024, Ubuntu 24.10 is the first release that contains it. In summary, if you have curl installed on Ubuntu 24.10 or newer, you have wcurl installed too.

If you’re not using any specific unusual wget parameters (wcurl supports -O), you can s/wget/wcurl and you will get parallel downloads if multiple URLs are provided and HTTP/3 support.

https://curl.se/wcurl/

2 Likes

BTW I found enough new stuff that I turned it into an article:

https://www.theregister.com/2025/06/24/tiling_multiplexers_survey/

1 Like

After more discussion, and testing, we’ve gone ahead and moved wget for 25.10.

This is made much easier because of wcurl being made available in the version of curl in 25.10. It is a drop-in replacement for the simple calls, and has the majority of wget functionality. For more complex cases, such as mirroring, wget is still the correct answer. This is all included in the release notes for 25.10 (once I hit submit in a bit…)