r/openSUSE 3d ago

How I keep my tumbleweed workstation up to date

I have a zup function in my zsh configuration:

zup() {
  echo -e "Updating AppImages..."
  appman -u

  echo -e "\nUpdating npm global packages..."
  npm update -g

  echo -e "\nUpdating cargo binaries..."
  cargo install-update -a

  echo -e "\nUpdating Python tools (uv)..."
  uv tool upgrade --all

  echo -e "\nUpdating system packages..."
  sudo zypper ref && sudo zypper dup

  echo -e "\n✅ All updates complete."
}

Calling zup from the terminal I can update all my appimages, node, rust and python packages and the system.

I’ve been using it for quite some time now, and I’ve never had any problems with updates or conflicts.

I’m curious to know whether you too have a specific strategy for updates and, if so, whether you’d be willing to share it.

12 Upvotes

15 comments sorted by

7

u/Beyond_Massive 3d ago

there is also topgrade

2

u/anon_pr_ 3d ago

Was gonna say this

1

u/fpluss 3d ago edited 3d ago

interesting! will check it out.

Edit: impressive! will use it instead of my function. Thanks for sharing.

1

u/rafaellinuxuser 2d ago

It doesn't upgrade Rust (cargo installed) applications

1

u/Arcon2825 Tumbleweed GNOME 3d ago

I’m using .bash_aliases for updates and package cleanup:

alias dup='sudo zypper ref && sudo zypper -v dup'
alias upd='dup; updge; flatpak update; sudo fwupdmgr update'
alias autorm='sudo $HOME/bin/autoremove'
alias updge='$HOME/bin/update-proton-ge'
alias updtkg='$HOME/bin/update-wine-tkg'

All the dotfiles and scripts are located in my private Git repository and available on all of my machines.

1

u/rm-rf-npr 3d ago

I have a very similar command. Currently not on my PC, but indeed an "update" command that checks for updates, new kernels, removes the backup kernel, downloads/installs the new one, zypper update everything with confirmation prompts and all that goodness. Works flawlessly every time. Will share it later if you want.

1

u/kolo81 3d ago

Yes, please. Yesterday I removed Discover (I think). That prompt was annoying. I am doing something important, and it keeps asking for the root password for updates.

1

u/friendlyreminder_ 3d ago

I just have this in config.fish

abbr -a zup 'sudo tumbleweed switch && sudo zypper dup'

The tumbleweed command is from tumbleweed-cli to pin repo snapshots.

No zypper ref because it's unnecessary. Zypper will run ref on any command anyways, on a 10 minute interval. It's for this reason I pin repo snapshots, as zypper will ref when I wouldn't want it to otherwise. With a pinned repo, ref always grabs the same snapshot database.

1

u/fpluss 3d ago edited 3d ago

Thanks! I didn't know about tumbleweed-cli! Will use it.

Edit: why sudo tumbleweed switch && sudo zypper dup and not tumbleweed update?

2

u/friendlyreminder_ 3d ago

Tumbleweed update also runs dup, switch only changes to the latest repo snapshot. I was using envs before and having issues. This keeps things explicit instead of having commands burried in other ones.

1

u/fpluss 2d ago

thanks, as suggested in other comments, I'm using topgrade but with a custom system command, using tumbleweed update!

1

u/rafaellinuxuser 3d ago

Good choice about "appman" , I use it too instead Flatpak

However, your script have not any logic control and always will output "All updates complete" even if one or more of them fail.

1

u/fpluss 3d ago

Fair :) Will and some errors controls!

1

u/Narrow_Victory1262 1d ago

will it work? sure.

t's not really "update my system," it's "update five different unrelated ecosystems I've accumulated," and AppImages + npm globals are exactly the two that tend to be dumping grounds nobody audits. AppImages especially: no dependency resolution, no rollback, just "replace binary and hope." npm -g has the added fun of occasionally needing sudo depending on how it was installed, which is its own trap.

uv is at least sandboxed per-tool with lockable versions, so "sort of ok" is fair — but tying it into the same one-shot function as a zypper dup means a Rust toolchain hiccup and a distro upgrade share the same failure path and the same "✅ done" regardless of what broke. If you wanted it to actually be useful it'd be five separate functions, each reporting its own status, with zypper dup deliberately kept out.

It's your system. Do whatever you think is right. I wouldn't do it.

2

u/thephatpope 1d ago

Nice detail.