openSUSE
Tumbleweed
rolling release

ISO image file:
https://download.opensuse.org/tumbleweed/iso/

Installer [~4GB]  •  Netinst [~200MB]   Rescue [~600MB]

Tumbleweed does not use the $releasever variable in repos and does not utilize DRPM (Delta RPM) packages. System updates are done through zypper dup.

SuSE = Software und System Entwicklung (Software and Systems Development)

Extra package sources

$ zypper in opi

Example:

$ opi msteams

Keep the added repo but lower its priority and disable autorefresh.

$ zypper mr -Fp 105 teams


Quick and simple method to install via opi.

$ opi codecs

The longer manual way to add a repo and install packages.

$ zypper ar -p 90 https://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Tumbleweed/ packman

$ zypper refresh

$ zypper dup --allow-vendor-change

$ zypper install ffmpeg gstreamer-plugins-{good,bad,ugly,libav} libavcodec-full vlc-codecs


$ zypper ar -p 105 https://download.opensuse.org/repositories/multimedia:/proaudio/openSUSE_Tumbleweed/ geekosdaw


$ zypper ar -p 105 https://download.opensuse.org/repositories/utilities/openSUSE_Factory/utilities.repo


$ zypper ar -p 105 https://download.opensuse.org/repositories/X11:Wayland/openSUSE_Tumbleweed/X11:Wayland.repo

More https://download.opensuse.org/repositories/

Configuration tweaks

Eliminate repo flip-flop for installed packages.  [video]

1. Always allow dup vendor change.

/etc/zypp/zypp.conf

solver.dupAllowVendorChange = true

2. Set proper repo priorities:

Example:

$ zypper mr -p 90 packman

$ zypper mr -p 105 utilities

$ zypper lr -EP


packman | Packman | 90

download.opensuse.org-non-oss | Main Repository (NON-OSS) | 99

download.opensuse.org-oss | Main Repository (OSS) | 99

download.opensuse.org-tumbleweed | Main Update Repository | 99

utilities | all the small tools for the shell (openSUSE_Factory) | 105


Switch from a geo-detected mirror to a specific mirror.  [list]

1. Main repos (for oss, non-oss, update)

/etc/zypp/repos.d/download.opensuse.org-oss.repo

#baseurl=http://download.opensuse.org/tumbleweed/repo/oss/

#baseurl=http://mirrors.kernel.org/opensuse/tumbleweed/repo/oss/

baseurl=http://provo-mirror.opensuse.org/tumbleweed/repo/oss/

#baseurl=http://mirror.us.leaseweb.net/opensuse/tumbleweed/repo/oss/

#baseurl=http://codingflyboy.mm.fcix.net/opensuse/tumbleweed/repo/oss/

#baseurl=http://ftp.ussg.iu.edu/linux/opensuse/opensuse/tumbleweed/repo/oss/

#baseurl=http://mirror.clarkson.edu/opensuse/opensuse/tumbleweed/repo/oss/

#baseurl=http://mirror.fcix.net/opensuse/tumbleweed/repo/oss/

#baseurl=http://mirror.umd.edu/opensuse/tumbleweed/repo/oss/

#baseurl=http://mirrors.acm.wpi.edu/opensuse/tumbleweed/repo/oss/

#baseurl=http://opensuse-mirror-gce-ap.susecloud.net/tumbleweed/repo/oss/

#baseurl=http://opensusemirror.vod.comcast.com/tumbleweed/repo/oss/

2. Mirrors with Build Service (for multimedia:/proaudio/openSUSE_Tumbleweed/ and utilities/openSUSE_Factory/ etc.)

/etc/zypp/repos.d/multimedia-proaudio.repo

#baseurl=http://download.opensuse.org/repositories/multimedia:/proaudio/openSUSE_Tumbleweed/

baseurl=http://provo-mirror.opensuse.org/repositories/multimedia:/proaudio/openSUSE_Tumbleweed/

#baseurl=http://ftp.gwdg.de/pub/opensuse/repositories/multimedia:/proaudio/openSUSE_Tumbleweed/

#baseurl=http://mirror.aardsoft.fi/opensuse/repositories/multimedia:/proaudio/openSUSE_Tumbleweed/

#baseurl=http://ftp.lysator.liu.se/pub/opensuse/repositories/multimedia:/proaudio/openSUSE_Tumbleweed/

#baseurl=http://mirror.tspu.ru/opensuse/repositories/multimedia:/proaudio/openSUSE_Tumbleweed/

#baseurl=http://mirror.linux-ia64.org/opensuse/repositories/multimedia:/proaudio/openSUSE_Tumbleweed/


Set low repo connection timeout to prevent long hangs. (default = 60)

/etc/zypp/zypp.conf

download.connect_timeout = 10


By default install only required packages. (Do not install recommended packages.)

/etc/zypp/zypp.conf

solver.onlyRequires = true


Clean dependencies when removing packages.

/etc/zypp/zypp.conf

solver.cleandepsOnRemove = true


Keep 3 most recent kernel versions + currently running.

/etc/zypp/zypp.conf

multiversion.kernels = latest,latest-1,latest-2,running


Disable autorefresh for all repos to make searching and other operations faster. Manually refresh when needed via zypper ref

$ zypper mr -Fa


Disable the service that purges old kernels on boot. Handle manually via zypper purge-kernels

$ systemctl disable purge-kernels.service


Disable PackageKit to prevent conflicts with zypper.

$ systemctl disable packagekit-background.timer


Configure sudo to ask for the user's instead of root's password.

$ visudo


Defaults env_keep += "LANG DISPLAY XAUTHORITY"


#Defaults targetpw   # ask for the password of the target user i.e. root

#ALL   ALL=(ALL) ALL   # WARNING! Only use this together with 'Defaults targetpw'!


%wheel ALL=(ALL:ALL) ALL


$ gpasswd -a myusername wheel


$ echo "alias sudo='sudo '" >> ~/.bashrc

/etc/polkit-1/rules.d/40-wheel.rules

// pkexec like sudo rather than su

polkit.addAdminRule(function(action, subject) {

    return ["unix-group:wheel"];

});


$ chmod +r /etc/polkit-1/rules.d/40-wheel.rules

General customization

Disable hardware speaker beep.

$ echo "blacklist pcspkr" > /etc/modprobe.d/nobeep.conf


Disable Ctrl+Alt+Delete reboot in console.

$ systemctl mask ctrl-alt-del.target


Enable Ctrl+Alt+Backspace to terminate X.

/etc/X11/xorg.conf.d/10-zap.conf


Section "InputClass"

    Identifier "system-keyboard"

    MatchIsKeyboard "on"

    Option "XkbOptions" "terminate:ctrl_alt_bksp"

EndSection


Adjust Touchpad scrolling sensitivity and momentum.

$ zypper in xf86-input-synaptics

$ synclient -l

/etc/X11/xorg.conf.d/70-synaptics.conf


Section "InputClass"

    Identifier "touchpad"

    Driver "synaptics"

    MatchIsTouchpad "on"

    Option "VertScrollDelta" "300"

    Option "HorizScrollDelta" "300"

    Option "CoastingSpeed" "0"

EndSection


Switch selections using the alternatives system.

$ update-alternatives --get-selections

$ update-alternatives --list default-displaymanager

$ update-alternatives --config default-displaymanager

System maintenance routine

$ zypper ref

$ zypper lu

$ zypper dup


$ rpmconf -at

$ rpmconf -af vimdiff


$ zypper pa --unneeded

$ zypper rm unneededpackagename unneededpackagename unneededpackagename ...


$ zypper purge-kernels

$ zypper verify

Package management tools

Log file reader.

$ zypper-log

RPM query.

$ rpm -ql packagename    #--query --list (list all files in package)

$ rpm -qlp packagename.rpm    #--package (list all files in .rpm file)

$ rpm -qc packagename    #--configfiles (list only configuration files in package)

$ rpm -qf /path/to/file    #--file (show which package owns file)

$ rpm -qa --last    #--all (query all packages and sort by install time with latest on top)

Handle .rpmnew, .rpmsave, .rpmorig system configuration files.

$ rpmconf -at    #--all --test (find all affected config files and only report without taking action)

$ rpmconf -a    #(prompt to keep, delete, or merge)

$ rpmconf -af vimdiff    #--frontend (merge using vimdiff)

$ rpmconf -c    #--clean (delete orphaned .rpmnew and .rpmsave files)

Use dnf instead of (or in addition to) zypper

Install DNF.

$ zypper install dnf

Either install the package that adds standard repos or manually symlink/copy the existing repo files.

$ zypper install rpm-repos-openSUSE-Tumbleweed

$ ls /etc/yum.repos.d


$ cd /etc/yum.repos.d

$ ln -s /etc/zypp/repos.d/myfavrepo1

$ ln -s /etc/zypp/repos.d/myfavrepo2

...

Edit DNF configuration.

/etc/dnf/dnf.conf

allow_vendor_change=True

protect_running_kernel=False

install_weak_deps=False

defaultyes=True

fastestmirror=True

max_parallel_downloads=6

Refresh repos.

$ dnf makecache

Perform system upgrade à la  zypper dup.

$ dnf --allowerasing distro-sync

Optionally enable timed expiring of metadata cache to trigger automatic repo refresh.

$ systemctl enable --now dnf-makecache.timer

zypper usage

$ zypper se /regexp/    #search

$ zypper search namestring*anotherstring*

$ zypper --no-refresh search namestring    #(disable autorefresh before command = faster)

$ zypper search -s namestring    #--details (show versions and repos and more)

$ zypper search -d descriptionstring    #--search-descriptions

$ zypper search -x exactmatchstring    #--match-exact

$ zypper search -i installedpackagestring

$ zypper search -u notinstalledpackagestring

$ zypper search -du notinstalleddescriptionstring

$ zypper search --provides namestring    #(or /path/to/file)

$ zypper search -f /path/to/file    #--file-list (metadata /etc/, /bin/, /sbin/)

$ zypper search -t pattern groupstring

$ zypper search -t package namestring    #(package type only, no srcpackage)

$ zypper search -r reponame namestring


$ zypper in packagename    #install

$ zypper install --no-recommends packagename

$ zypper install --recommends packagename

$ zypper install --oldpackage 'packagename<currentversion'

$ zypper install -f packagename    #--force (reinstall)

$ zypper install -t pattern groupname    #--type (default type = package, pattern=group)

$ zypper in pattern:groupname

$ zypper in reponame:packagename

$ zypper install-new-recommends    #inr

$ zypper inr --recommends    #(install even when recommends are disabled)


$ zypper rm packagename    #remove

$ zypper remove -u packagename    #--clean-deps (also remove dependencies that will become unneeded)

$ zypper remove -t pattern groupname

$ zypper rm $(zypper -s 11 pa --unneeded | awk 'NR>4 {print $5}')    #(remove unneeded packages)


$ zypper locks    #ll (list locked packages)

$ zypper addlock packagename    #al (prevent removing or installing specific packages)

$ zypper al -r reponame packagename    #(restrict lock to a repo)

$ zypper removelock packagename    #rl


$ zypper refresh    #ref

$ zypper refresh --force    #-f

$ zypper ref --repo repoID1 repoID2    #-r (refresh specific repo)


$ zypper repos    #lr (list repositories)

$ zypper repos --uri    #-u

$ zypper repos --priority    #-p

$ zypper lr -EP    #--show-enabled-only --sort-by-priority


$ zypper modifyrepo --no-refresh 1 2 3    #mr -F (disable autorefresh for repos 1, 2, 3)

$ zypper modifyrepo --priority 105 repoID    #mr -p (set repo priority)

$ zypper mr -p 0 repoID    #(reset repo priority to default)

$ zypper mr -d repoID    #--disable (disable repo)

$ zypper mr -e repoID    #--enable (enable a previously disabled repo)

$ zypper mr -kt    #--keep-packages --remote (keep packages from all remote repos)


$ zypper renamerepo oldname newname    #nr (change repo alias; use old name or repoID number)


$ zypper list-patches    #lp (list bugfixes on Leap)

$ zypper list-updates    #lu (list newer package versions)

$ zypper lu -a    #--all (show non-installable newer package versions from lower priority repos)

$ zypper -q lu | awk -F'|' 'NR>2 {gsub(/ /,""); print $3}' ORS=' '


$ zypper patch    #(get bugfixes on Leap)

$ zypper update    #up (get all package updates on Leap)

$ zypper up packagename    #(update specific package on Tumbleweed and Leap)

$ zypper dist-upgrade    #dup (get updates on Tumbleweed / upgrade to next version on Leap)

$ zypper dup --details    #(show versions and repos)

$ zypper dup --no-recommends    #(skip installing recommended packages)

$ zypper dup --allow-vendor-change    #(favor repo priorities over package versions)


$ zypper ps -s    #--short (list processes still using deleted files)

$ zypper verify    #ve (verify dependencies)

$ zypper purge-kernels

$ zypper clean    #cc (clean downloaded packages cache)

$ zypper clean -a    #(clean repo metadata and package cache)


$ zypper pa    #packages

$ zypper packages -r reponame    #--repo (list all packages in repo)

$ zypper packages -i    #--installed-only

$ zypper packages -i -r reponame

$ zypper packages -u    #--not-installed-only

$ zypper packages --recommended --not-installed-only

$ zypper packages --unneeded

$ zypper packages --orphaned


$ zypper pt    #patterns

$ zypper patterns --installed-only        #-i

$ zypper patterns --not-installed-only    #-u


$ zypper if packagename    #info

$ zypper info packagename | awk '/Version/ {print $3}'

$ zypper info -t package "*" | less

$ zypper info -t pattern "*" | less


$ zypper -n command argument    #--non-interactive (no user prompts)

openSUSE Leap version upgrade

(consecutive only e.g. 15.3 to 15.4)

First, update all packages in the current release version. Refresh repos if autorefresh has been disabled.

$ zypper refresh

$ zypper update

Upgrade to the new release version. Refresh repos first if needed.

$ zypper --releasever 15.4 refresh

$ zypper --releasever 15.4 dist-upgrade

If prompted to insert the old installation CD/DVD medium, disable its corresponding repo and retry upgrading.

$ zypper lr -Eu

$ zypper mr --disable oldCDrepoID

Switch from Leap to Tumbleweed

Update all current packages first.

$ zypper refresh

$ zypper update

Remove all current repos (or back up rather than delete).

$ rm /etc/zypp/repos.d/*.repo

Add new repos.

$ zypper addrepo -c http://download.opensuse.org/tumbleweed/repo/oss repo-oss

$ zypper addrepo -c http://download.opensuse.org/tumbleweed/repo/non-oss repo-non-oss

$ zypper addrepo -c http://download.opensuse.org/update/tumbleweed/ repo-update

(The update repo is usually empty and is only used as a last resort when the next snapshot of Tumbleweed is late and a big security hole has to be fixed fast.)

Upgrade — execute within screen in case of any display/console issues.

$ screen -DR upgrade

$ zypper clean --all

$ zypper refresh

$ zypper dist-upgrade --allow-vendor-change

If errors occur...

Retrieving: package-1.0-1.x86_64.rpm ............................................................[error]

File './x86_64/package-1.0-1.x86_64.rpm' not found on medium 'http://download.opensuse.org/repositories/path:/app/openSUSE_Tumbleweed/'

...force-refresh all repos and re-run upgrade.

$ zypper refresh --force

$ zypper dist-upgrade