====== Apt ======
siehe: [[linux_paketmanager#apt_debian_ubuntu|APT (Debian/Ubuntu)]]
===== APT Einstellungen =====
Im folgenden werden **backports** die gleiche Priorität wie den jeweiligen dazugehörigen Repositories zugewiesen (Priorität ''500'', ist standardmäßig ''100''), um relativ sicher neuere Paketversionen zur Verfügung zu haben.
Allerdings ist dies nicht immer erwünscht, da **backports** nicht im gleichen Maße getestet werden wie die regulären Repositories.
* automatisch aus **stable** installieren (Priorität ''500'')
* niemals automatisch aus **testing** installieren (Priorität ''-1'')
* niemals automatisch aus **unstable** installieren (Priorität ''-1'')
# stable
Package: *
Pin: release n=trixie, o=Debian
Pin-Priority: 500
Package: *
Pin: release n=trixie-security, o=Debian
Pin-Priority: 500
Package: *
Pin: release n=trixie-updates, o=Debian
Pin-Priority: 500
# stable-backports
Package: *
Pin: release n=trixie-backports, o=Debian Backports
Pin-Priority: 500
# stable-backports: kernel
Package: linux-headers-* linux-image-*
Pin: release n=trixie-backports, o=Debian Backports
Pin-Priority: 100
# testing
Package: *
Pin: release n=forky, o=Debian
Pin-Priority: -1
Package: *
Pin: release n=forky-security, o=Debian
Pin-Priority: -1
Package: *
Pin: release n=forky-updates, o=Debian
Pin-Priority: -1
# testing-backports
Package: *
Pin: release n=forky-backports, o=Debian Backports
Pin-Priority: -1
# unstable
Package: *
Pin: release n=sid, o=Debian
Pin-Priority: -1
===== APT Quellen =====
* siehe
* [[https://wiki.debian.org/SourcesList]]
* [[https://wiki.ubuntuusers.de/Paketquellen_im_Format_deb822/]]
* [[https://wiki.ubuntuusers.de/sources.list/]]
* seit debian 13 ist das deb822 format standard (siehe ''man deb822''), die standard datei für apt quellen ist nun ''/etc/apt/sources.list.d/debian.sources''
* die alte datei ''/etc/apt/sources.list'' sollte gelöscht werden um konflikte zu vermeiden
* seit debian 12 gibt es die neue komponente ''non-free-firmware'', sie wurde von ''non-free'' abgespalten und enthält nicht freie firmware pakete
* dadurch wird folgende konfiguration erleichtert: ''Components: main non-free-firmware'' (möglichst wenig non-free pakete, aber gleichzeitig kritische firmware pakete)
# stable
Enabled: yes
Types: deb
URIs: https://deb.debian.org/debian
Suites: trixie trixie-updates trixie-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Enabled: yes
Types: deb
URIs: https://deb.debian.org/debian-security
Suites: trixie-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
# testing
Enabled: no
Types: deb
URIs: https://deb.debian.org/debian
Suites: forky forky-updates forky-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Enabled: no
Types: deb
URIs: https://deb.debian.org/debian-security
Suites: forky-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
# unstable
Enabled: no
Types: deb
URIs: https://deb.debian.org/debian
Suites: sid
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
falls der debian archiv keyring nicht aktuell oder kaputt ist:
# debian archive keyring installieren
apt upgrade debian-archive-keyring
# alternative: debian archive keyring neuinstallieren und dabei originale keys wiederherstellen (z.b. falls ausversehen gelöscht/verändert)
apt reinstall -o Dpkg::Options::="--force-confmiss,confnew" debian-archive-keyring
===== Upgrade =====
tags für suche: apt-get, apt, aptitude, update, upgrade, dist-upgrade, full-upgrade, autoremove
==== Skript ====
Dieses Skript in den PATH legen (z.B. ''/usr/local/sbin/upgrade.sh'' oder ''/root/.local/bin/upgrade.sh'') und dann als root mit ''upgrade.sh'' aufrufen
#!/bin/bash
#------------------------------------------------------------------------------#
#
# totsicheres Update
# es sollte alle gängigen Probleme, durch mehrmahligen Aufruf, beheben
#
#------------------------------------------------------------------------------#
time (
#apt -y purge plymouth
locale-gen ;
rm -fr /var/lib/apt/lists/partial/* ;
apt-get -y autoclean ;
apt-get -y autoremove ;
apt -y autoclean ;
apt -y autoremove ;
dpkg --configure -a ;
apt-get -y dist-upgrade ;
apt-get -y autoclean ;
apt-get -y autoremove ;
apt -y autoclean ;
apt -y autoremove ;
apt install linux-headers-generic linux-image-generic ;
apt autoremove
apt -y update && apt -y full-upgrade
#apt -y install ubuntu-drivers-common alsa-utils
#ubuntu-drivers install
) && echo OK
dpkg --configure -a
#ubuntu-drivers devices
#fwupdmgr get-upgrades
apt -y purge $(dpkg -l | sed "s/^ic[ ]*//;s/ .*//" | grep -E ^linux-)
apt -y purge $(dpkg -l | sed "s/^rc[ ]*//;s/ .*//" | grep -E ^linux-)
dpkg -l | awk '/linux-/{print $1,$2}'
lsb_release -a
uname -a
cat /var/run/reboot-required
==== Alternatives Skript ====
Dieses Skript in den PATH legen (z.B. ''~/.local/bin/up.sh'') und dann mit ''up.sh'' aufrufen
* aktuellste version: [[https://gitlab.com/m4st3rfl1tz3r/dotfiles/dotfiles/-/blob/main/.local/bin/up.sh]]
* __supported__: apt (debian), brew (linux/macos), dnf (fedora), flatpak (linux) und pipx (linux/macos)
* __not supported__: doas (sudo alternative)
* ohne sudo aufrufen, weil sudo am anfang des skripts aufgerufen wird (wenn user in der richtigen gruppe ist und nicht root ist)
* bevorzugt als sudoer aufrufen (nicht als root) wegen flatpak usw., funktioniert aber auch als root oder nicht sudoer, code blöcke werden je nachdem dann übersprungen
* sudo credential cache wird während der skript ausführung frisch gehalten, d.h. man muss nur 1x am anfang das passwort eingeben, egal wie lange das update braucht
#!/usr/bin/env bash
set -o nounset
set -o pipefail
has_sudo=false
is_root=false
sudo=""
if test "${EUID}" -eq 0
then
is_root=true
fi
if test "${is_root}" = false && command -v sudo > /dev/null 2>&1 && id -nG "${USER}" | grep -Eqw 'admin|sudo|wheel'
then
has_sudo=true
sudo -v
while true
do
sleep 60
sudo -nv
kill -0 "$$" || exit
done > /dev/null 2>&1 &
fi
if test "${has_sudo}" = true
then
sudo="sudo -H"
fi
# apt
if command -v apt > /dev/null 2>&1 && { test "${has_sudo}" = true || test "${is_root}" = true; }
then
kernel=(linux-headers-generic linux-image-generic)
if apt-cache show raspberrypi-bootloader > /dev/null 2>&1
then
kernel=(raspberrypi-bootloader raspberrypi-kernel raspberrypi-kernel-headers)
fi
time {
${sudo} locale-gen &&
${sudo} dpkg --configure -a &&
${sudo} apt-get update &&
${sudo} apt-get autoclean &&
${sudo} apt-get autoremove &&
${sudo} apt-get install "${kernel[@]}" &&
${sudo} apt-get dist-upgrade &&
${sudo} apt-get autoremove &&
${sudo} dpkg --configure -a
}
exit_code="${?}"
reboot_required=""
if test -e /run/reboot-required || test -e /run/reboot-required.pkgs
then
reboot_required=" -> REBOOT REQUIRED"
fi
if test "${exit_code}" -eq 0
then
printf "\nAPT SUCCEEDED%s\n\n" "${reboot_required}"
else
printf "\nAPT FAILED%s\n\n" "${reboot_required}"
fi
fi
# brew
if command -v brew > /dev/null 2>&1 && test "${is_root}" = false
then
brew update && brew upgrade && brew upgrade --cask --greedy
printf "\n"
fi
# dnf
if command -v dnf > /dev/null 2>&1 && { test "${has_sudo}" = true || test "${is_root}" = true; }
then
time {
${sudo} dnf --refresh upgrade &&
${sudo} dnf autoremove
}
exit_code="${?}"
reboot_required=""
if ! ${sudo} dnf needs-restarting -r > /dev/null 2>&1
then
reboot_required=" -> REBOOT REQUIRED"
fi
if test "${exit_code}" -eq 0
then
printf "\nDNF SUCCEEDED%s\n\n" "${reboot_required}"
else
printf "\nDNF FAILED%s\n\n" "${reboot_required}"
fi
fi
# flatpak
if command -v flatpak > /dev/null 2>&1
then
flatpak update
printf "\n"
fi
if test "${has_sudo}" = true && ${sudo} bash -c 'command -v flatpak > /dev/null 2>&1'
then
${sudo} flatpak update
printf "\n"
fi
# pipx
if command -v pipx > /dev/null 2>&1
then
pipx upgrade-all
printf "\n"
fi
if test "${has_sudo}" = true && ${sudo} bash -c 'command -v pipx > /dev/null 2>&1'
then
${sudo} pipx upgrade-all
printf "\n"
fi