# Paketmanager

# dpkg / APT / Aptitude

# Alle durch Benutzer geänderten paketierte Konfigurationsdateien ausgeben

<div id="bkmrk-dpkg-query--w--f%3D%27%24%7B">```
dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | LANG=C md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK$/{print $1}' | sort
```

</div>

# Alle installierten Pakete auf einen anderen Server übertragen

<p class="callout info">Vorher sollten als entfernt markierte Pakete gelöscht werden, siehe [hier](https://wiki.magenbrot.net/books/paketmanager/page/dpkg-rc-pakete-entfernen "dpkg-rc Pakete entfernen").</p>

Quelle:

```code
dpkg --get-selections > selection.txt
```

dann die Datei per scp oder Copy&amp;Paste auf das Ziel übertragen. Dort:

```code
dpkg --set-selections < selection.txt
```

Falls hier Warnings auftreten siehe unten.

Danach können die Pakete installiert werden:

```code
aptitude install
# oder
apt-get -u dselect-upgrade
```

Sollte es bei „–set-selections“ Warnungen gegeben haben, muss noch dselect installiert werden:

```code
apt-get install dselect
dselect 
   -> Update
   -> Install
   -> Quit
```

Folgende Alternative funktioniert auch, wenn man Pakete nur selektiv übertragen möchte. Mit diesem Beispiel erhalte ich eine einfach zu übertragende Liste aller Pakete, die `perl` im Namen oder der Beschreibung haben (läßt sich dann einfach an `aptitude install` übergeben):

```code
dpkg -l | grep perl | awk '{ printf "%s ", $2 }'
```

# dpkg-Cheat-Sheet

#### Pakete auf Version festhalten / hold

ein Paket auf „hold“ setzen

<div id="bkmrk-echo-%3Cpaketname%3E-hol"><div>```
echo <paketname> hold | dpkg --set-selections
```

</div></div>ein Paket wieder fürs Updaten freigeben

<div id="bkmrk-echo-%3Cpaketname%3E-ins"><div>```
echo <paketname> install | dpkg --set-selections
```

</div></div>gehaltene Pakete anzeigen

<div id="bkmrk-dpkg---get-selection">```
dpkg --get-selections | awk '$2 == "hold" { print $1 }'
```

</div>#### Fremdpakete finden

<div id="bkmrk-die-folgenden-tipps-"><div><div>Die folgenden Tipps sind nicht immer zuverlässig</div></div></div>Pakete finden, die aus keinem der konfigurierten Repositories stammen (auf einem sauberen System sollte diese Liste leer sein):

<div id="bkmrk-aptitude-search-%27%3Fna"><div>```
aptitude search '?narrow(?not(?archive("^[^n][^o].*$")),?version(CURRENT))'
```

</div></div>Pakete finden, die nicht aus einem Debian-Repo stammen

<div id="bkmrk-dpkg--l-%7C-awk-%27%2F%5E.i%2F">```
dpkg -l | awk '/^.i/ {print $2}' | xargs apt-cache policy | awk '/^[a-z0-9.\-]+:/ {pkg=$1}; /\*\*\*/ {OFS="\t"; ver=$2; getline; print pkg,ver,$2,$3}'
```

</div>

# dpkg-rc Pakete entfernen

Auf einem gut gereiften System oder z.B auch nach einem Dist-Upgrade sammeln sich gerne teilweise entfernte Pakete an. Diese erkennt man an dem rc im dpkg Status. Das bedeutet, dass das Paket entfernt wurde, aber die Konfigurationsdateien noch auf dem System verblieben sind.

Am besten vorher noch ein autoremove fahren:

```
apt autoremove
```

Danach kann man sich die Liste der halb-deinstallierten Pakete anschauen:

```code
dpkg --list | grep "^rc"
```

Das sieht dann z.B. so aus:

```code
rc  dctrl-tools                      2.14.5                                amd64        Command-line tools to process Debian package information
rc  libaugeas0                       0.7.2-1                               amd64        The augeas configuration editing library and API
rc  libbind9-60                      1:9.7.3.dfsg-1~squeeze10              amd64        BIND9 Shared Library used by BIND
rc  libdns69                         1:9.7.3.dfsg-1~squeeze10              amd64        DNS Shared Library used by BIND
rc  libisc62                         1:9.7.3.dfsg-1~squeeze10              amd64        ISC Shared Library used by BIND
rc  libisccc60                       1:9.7.3.dfsg-1~squeeze10              amd64        Command Channel Library used by BIND
```

Das rc steht dabei für als „entfernt“ markierte Pakete, deren Konfigurationsdateien noch auf dem System liegen.

Gelegentlich empfiehlt es sich dann aufzuräumen. Mit folgendem Snippet lassen sich all diese Pakete bequem auf einmal entfernen:

```code
dpkg --list | grep "^rc" | cut -d " " -f 3 | xargs dpkg --purge
```

Alternativ mit einem apt Kommando:

```code
apt-get purge $(dpkg -l | awk '/^rc/ { print $2 }')
```

# Was bedeuten die verschiedenen flags bei dpkg -l?

m Header von „dpkg -l“ steht die Erklärung dazu. Hier eine kurze Übersicht:

```code
$ dpkg -l | head -6

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                        Version                                             Architecture Description

ii  accountsservice                             0.6.35-0ubuntu7.2                                   amd64        query and manipulate user account information

```

Hier die Beschreibung der einzelnen Felder:

<div id="bkmrk-erster-buchstabe-gew"><div><table class="inline"><thead><tr class="row0"><th class="col0">Erster Buchstabe</th><th class="col1">gewünschter Zustand („selection state“)</th></tr></thead><tbody><tr class="row1"><td class="col0">u</td><td class="col1">unknown</td></tr><tr class="row2"><td class="col0">i</td><td class="col1">install</td></tr><tr class="row3"><td class="col0">r</td><td class="col1">remove/deinstall</td></tr><tr class="row4"><td class="col0">p</td><td class="col1">purge (Paket soll inklusive der Konfigurationsdateien entfernt werden)</td></tr><tr class="row5"><td class="col0">h</td><td class="col1">hold</td></tr></tbody></table>

</div></div><div id="bkmrk-zweiter-buchstabe-ak"><div><table class="inline"><thead><tr class="row0"><th class="col0">Zweiter Buchstabe</th><th class="col1">aktueller Zustand</th></tr></thead><tbody><tr class="row1"><td class="col0">n</td><td class="col1">not-installed</td></tr><tr class="row2"><td class="col0">i</td><td class="col1">installed</td></tr><tr class="row3"><td class="col0">c</td><td class="col1">config-files (nur Konfigurationsdateien sind installiert)</td></tr><tr class="row4"><td class="col0">u</td><td class="col1">unpacked</td></tr><tr class="row5"><td class="col0">f</td><td class="col1">half-configured (Konfiguration ist aus irgendeinem Grund fehl geschlagen)</td></tr><tr class="row6"><td class="col0">h</td><td class="col1">half-installed (Installation ist aus irgendeinem Grund fehl geschlagen)</td></tr><tr class="row7"><td class="col0">w</td><td class="col1">triggers-awaited (Paket wartet auf Trigger durch ein anderes Paket)</td></tr><tr class="row8"><td class="col0">t</td><td class="col1">triggers-pending (Paket wurde getriggert)</td></tr><tr class="row9"><td class="col0">B</td><td class="col1">broken (Installation/Update fehlgeschlagen)</td></tr></tbody></table>

</div></div><div id="bkmrk-dritter-buchstabe-fe"><table class="inline"><thead><tr class="row0"><th class="col0">Dritter Buchstabe</th><th class="col1">Fehler (da sollte normalerweise nichts stehen)</th></tr></thead><tbody><tr class="row1"><td class="col0">r</td><td class="col1">reinst-required (Paket ist kaputt und sollte neu installiert werden)</td></tr></tbody></table>

</div>

# APT / Aptitude - Tipps und Tricks

- Verfügbare Updates anzeigen, aber nicht installieren:

```code
# aptitude -F%p --disable-columns search ~U
# oder:
# apt-get --just-print dist-upgrade
```

- durch „aptitude hold“ gehaltene Pakete:

```code
aptitude search ~ahold
```

- <div>Abhängigkeiten, Vorschläge, Empfohlen, Konflikte eines Paketes anzeigen:</div>

```code
# apt-cache depends tar
tar
  PreDepends: libc6
  Suggests: bzip2
  Suggests: ncompress
  Suggests: xz-utils
  Conflicts: cpio
  Breaks: dpkg-dev
  Replaces: cpio
```

- <div>warum ist ein bestimmtes Paket installiert worden (required by):</div>

```code
# aptitude why tar
i   dpkg PreDepends tar (>= 1.23)
```

- <div>Installierte Pakete anzeigen die kein anderes Paket voraussetzt (depends on):</div>

```code
aptitude search '~i ! ~R ~i'

# erweitert auf "Empfohlen" oder "Vorgeschlagen" (recommends / suggests):
aptitude search '~i ! ~R ~i ! ~Rrecommends:~i  ! ~Rsuggests:~i'

# für alle Pakete, installiert oder nicht:
aptitude search '! ~R .'
```

# GPG-Key eines Repositorys in Apt hinzufügen

Beim Einbinden eines neuen Repositorys erscheint diese Meldung, wenn der GPG-Key, mit dem die Pakete signiert wurden, nicht in der APT-Datenbank enthalten ist:

```code
W: GPG error: http://packages.linuxmint.com sarah Release: 
The following signatures couldn't be verified because the 
public key is not available: NO_PUBKEY A6616109451BBBF2
```

Das läßt sich ganz einfach beheben:

```code
# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com A6616109451BBBF2

Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.in8AoFu6Qi --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyring /etc/apt/trusted.gpg.d/steam.gpg --recv-keys --keyserver keyserver.ubuntu.com A6616109451BBBF2
gpg: requesting key 451BBBF2 from hkp server keyserver.ubuntu.com
gpg: key 451BBBF2: public key "Linux Mint Repository Signing Key <root@linuxmint.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
```

# RPM / YUM

# RPM Kurzübersicht

Einige Tips zum Umgang mit dem Redhat Package Manager (RPM)

\* Alle installierten Pakete anzeigen (in dieser Liste läßt sich auch suchen, wenn man in der Ausgabe grept)

```code
rpm -qa
```

\* Informationen zu einem installierten Paket ausgeben:

```code
rpm -qi paketname
```

\* Herausfinden zu welchem Paket eine bestimmte Datei gehört

```code
rpm -qf /bin/cp
```

\* Liste aller in einem Paket enthaltenen Dateien anzeigen

```code
rpm -ql paketname
```

\* Mit der zusätzlichen Angabe des Parameters p kann man auch ein nicht installiertes RPM-Paket abfragen

```code
rpm -qlp programm-1.0.rpm
```

\* ein installiertes Paket auf Veränderungen prüfen

```code
rpm -V paketname
```

\* ein runtergeladenes Paket überprüfen

```code
rpm -K paketname
```

\* Die Dateirechte aller RPM-Pakete auf den Installationszustand zurücksetzen (für Dateien, die NICHT im Päckchen enthalten sind, gilt dies nicht)

```code
for package in `rpm -qa` ; do rpm --setperms --setugids "${package}"; done
```

# RPM-Datenbank abfragen

Mit `rpm -q` lassen sich detailierte Informationen aus der RPM-Datenbank ziehen. Welche Tags einem hier zur Verfügung stehen zeigt dieser Befehl:

```code
[root@ov ~]# rpm --querytags | sort
ARCH                               
ARCHIVESIZE                        
BASENAMES                          
BUILDARCHS                         
BUILDHOST                          
BUILDTIME                          
C                                  
CAPABILITY                         
CHANGELOGNAME                      
CHANGELOGTEXT                      
CHANGELOGTIME                      
CLASSDICT                          
CONFLICTFLAGS                      
CONFLICTNAME                       
CONFLICTS                          
CONFLICTVERSION                    
COOKIE                             
DEPENDSDICT                        
DESCRIPTION                        
DIRINDEXES                         
DIRNAMES                           
DISTRIBUTION                       
DISTTAG                            
DISTURL                            
DSAHEADER                          
E                                  
EPOCH                              
EXCLUDEARCH                        
EXCLUDEOS                          
EXCLUSIVEARCH                      
EXCLUSIVEOS                        
FILECLASS                          
FILECOLORS                         
FILECONTEXTS                       
FILEDEPENDSN                       
FILEDEPENDSX                       
FILEDEVICES                        
FILEDIGESTALGO                     
FILEDIGESTS                        
FILEFLAGS                          
FILEGROUPNAME                      
FILEINODES                         
FILELANGS                          
FILELINKTOS                        
FILEMD5S                           
FILEMODES                          
FILEMTIMES                         
FILENAMES                          
FILEPROVIDE                        
FILERDEVS                          
FILEREQUIRE                        
FILESIZES                          
FILESTATES                         
FILEUSERNAME                       
FILEVERIFYFLAGS                    
FSCONTEXTS                         
FSNAMES                            
FSSIZES                            
GIF                                
GROUP                              
HDRID                              
HEADERI18NTABLE                    
HEADERIMAGE                        
HEADERIMMUTABLE                    
HEADERREGIONS                      
HEADERSIGNATURES                   
ICON                               
INSTALLCOLOR                       
INSTALLTID                         
INSTALLTIME                        
INSTPREFIXES                       
LICENSE                            
LONGARCHIVESIZE                    
LONGFILESIZES                      
LONGSIGSIZE                        
LONGSIZE                           
N                                  
NAME                               
O                                  
OBSOLETEFLAGS                      
OBSOLETENAME                       
OBSOLETES                          
OBSOLETEVERSION                    
OLDFILENAMES                       
OPTFLAGS                           
ORIGBASENAMES                      
ORIGDIRINDEXES                     
ORIGDIRNAMES                       
ORIGFILENAMES                      
OS                                 
P                                  
PACKAGER                           
PATCH                              
PATCHESFLAGS                       
PATCHESNAME                        
PATCHESVERSION                     
PAYLOADCOMPRESSOR                  
PAYLOADFLAGS                       
PAYLOADFORMAT                      
PKGID                              
PLATFORM                           
POLICIES                           
POSTIN                             
POSTINPROG
POSTTRANS
POSTTRANSPROG
POSTUN
POSTUNPROG
PREFIXES
PREIN
PREINPROG
PRETRANS
PRETRANSPROG
PREUN
PREUNPROG
PROVIDEFLAGS
PROVIDENAME
PROVIDES
PROVIDEVERSION
PUBKEYS
R
RECONTEXTS
RELEASE
REMOVETID
REQUIREFLAGS
REQUIRENAME
REQUIRES
REQUIREVERSION
RHNPLATFORM
RPMVERSION
RSAHEADER
SHA1HEADER
SIGGPG
SIGMD5
SIGPGP
SIGSIZE
SIZE
SOURCE
SOURCEPACKAGE
SOURCEPKGID
SOURCERPM
SUMMARY
TRIGGERCONDS
TRIGGERFLAGS
TRIGGERINDEX
TRIGGERNAME
TRIGGERSCRIPTPROG
TRIGGERSCRIPTS
TRIGGERTYPE
TRIGGERVERSION
URL
V
VENDOR
VERIFYSCRIPT
VERIFYSCRIPTPROG
VERSION
XPM
```

Nun läßt sich mit Hilfe dieser Tags und dem Parameter `--queryformat` eine ordentliche Ausgabe erzeugen. Will man z.B. wissen für welche Architektur ein Paket gebaut wurde empfiehlt sich etwa dieser Befehl:

```code
[root@ov ~]# rpm -q --queryformat "%{NAME}-%{VERSION}.%{ARCH}\n" libxml2
libxml2-2.7.3.x86_64
libxml2-2.7.3.i386
```

dies bedeutet, dass das Paket libxml in der i386 und in der 64bit Version (x86\_64) installiert ist.

Eine praktische Anwendung des Queryformat bietet sich auch an. Vor allem auf Systemen, auf denen 64- und 32-bit Pakete installiert sind. Einfach folgenden Code in /etc/profile oder in eine Datei in /etc/profile.d eintragen. Nach erneuter Anmeldung oder sourcen von /etc/profile steht das „rpmqa“-Kommando zur Verfügung, das folgende Ausgabeformat hat:

```code
acl-2.2.39-6.el5.x86_64
acpid-1.0.4-9.el5_4.2.x86_64
alsa-lib-1.0.17-1.el5.i386
alsa-lib-1.0.17-1.el5.x86_64
amavisd-new-2.4.5-1.el5.noarch
amtu-1.0.6-1.el5.x86_64
anacron-2.3-45.el5.centos.x86_64
ant-1.6.5-2jpp.2.x86_64
antlr-2.7.6-4jpp.2.x86_64
apr-1.2.7-11.el5_3.1.i386
apr-1.2.7-11.el5_3.1.x86_64
apr-devel-1.2.7-11.el5_3.1.x86_64
apr-util-1.2.7-11.el5.i386
apr-util-1.2.7-11.el5.x86_64
apr-util-devel-1.2.7-11.el5.x86_64
[...]
```

# RPM-Datenbank defekt

Wenn rpm oder yum beim Aufruf hängen und keine Abfragen mehr gehen ist mit ziemlicher Wahrscheinlichkeit die RPM-Datenbank defekt. Die Datenbank kann folgendermaßen wiederhergestellt werden:

zuerst alle laufenden rpm-Prozesse abwürgen:

```code
ps -ax | grep rpm
kill -9 <pid>
```

mit folgenden Befehlen läßt sich die rpm-Datenbank neu aufbauen:

```code
rm /var/lib/rpm/__*
rpm --rebuilddb
rpm --initdb 
```

# RPM-Paket entpacken

Alle Dateien aus einem RPM entpacken:

```code
$ rpm2cpio RPM_file | cpio -idv
```

Ein bestimmtes File aus einem RPM entpacken:

```code
$ rpm2cpio RPM_file | cpio -id individual_file(s)
```

z.B. libcrypto.so.0.9.7a und libssl.so.0.9.7a aus openssl-0.9.7a-2.i386.rpm extrahieren:

```code
$ rpm2cpio openssl-0.9.7a-2.i386.rpm | cpio -it egrep "libcrypto.so.0.9.7a|libssl.so.0.9.7a"

-rwxr-xr-x   1 root     root       992092 Feb 27 12:10 ./lib/libcrypto.so.0.9.7a
-rwxr-xr-x   1 root     root       216004 Feb 27 12:10 ./lib/libssl.so.0.9.7a

$ rpm2cpio openssl-0.9.7a-2.i386.rpm | cpio -idv ./lib/libssl.so.0.9.7a ./lib/libcrypto.so.0.9.7a
```

Eine cpio Datei entpacken:

```code
$ cpio -iv < cpio_file
```

Den Inhalt einer cpio Datei anzeigen:

```code
$ cpio -itv < cpio_file
```

Ein cpio file mit den Dateien im aktuellen Verzeichnis erstellen:

```code
$ ls | cpio -o > cpio_file
```

# YUM - Tipps und Tricks

- Pakete nach Namen und Beschreibung suchen:

```code
yum search blabla
```

- Info zu einem bestimmten Paket anzeigen:

```code
yum info bind
```

- Pakete nur nach Namen suchen:

```code
yum list blabla
```

- Suchen welches Paket eine bestimmte Datei zur Verfügung stellt:

```code
yum whatprovides 'libstdc++.so.5'
```

- kürzlich neu hinzugekommene Pakete eines Repos anzeigen

```code
yum list recent
```

- Alle Abhängigkeiten eines Paketes anzeigen:

```code
yum deplist bind
```

- lokal runtergeladenes Paket mit yum installieren und eventuelle Abhängigkeiten gleich aus dem Repository nachziehen, z.B.:

```code
yum --nogpgcheck localinstall opera opera-9.24-20071015.6-shared-qt.i386-en.rpm
```

# Häufig genutzte 3rd-Party Repositories

Beschreibt die schnelle Einrichtung von häufig genutzten 3rd-Party Repositories wie z.B. für docker oder des Icinga2-Clients

# download.docker.com (Docker + Compose)

```bash
apt-get update
apt-get install ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

from [https://docs.docker.com/engine/install/debian/](https://docs.docker.com/engine/install/debian/)

# packages.icinga.com (Icinga2)

```bash
apt update
apt -y install apt-transport-https wget gnupg
wget -O - https://packages.icinga.com/icinga.key | gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg
DIST=$(awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release); \
 echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-${DIST} main" > \
 /etc/apt/sources.list.d/${DIST}-icinga.list
 echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-${DIST} main" >> \
 /etc/apt/sources.list.d/${DIST}-icinga.list
apt update
```

from [https://icinga.com/docs/icinga-2/latest/doc/02-installation/01-Debian/](https://icinga.com/docs/icinga-2/latest/doc/02-installation/01-Debian/)

# deb.sury.org (PHP)

```bash
apt update
apt -y install lsb-release ca-certificates curl
curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
dpkg -i /tmp/debsuryorg-archive-keyring.deb
sh -c 'echo "deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt update
```

from [https://packages.sury.org/php/](https://packages.sury.org/php/)

# repo.mongodb.org (MongoDB Community Edition)

#### Add the MongoDB apt repository and install the MongoDB packages

Replace the Version (4.4) with the one you want to install.

```bash
apt-get install gnupg curl
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main" | tee /etc/apt/sources.list.d/mongodb-org-8.0.list
apt-get update
apt-get install -y mongodb-org
```

from [https://www.mongodb.com/docs/v8.0/tutorial/install-mongodb-on-debian/](https://www.mongodb.com/docs/v8.0/tutorial/install-mongodb-on-debian/)

# repo.percona.com (Percona MySQL and others)

```bash
apt update
apt install curl gnupg2 lsb-release
curl -O https://repo.percona.com/apt/percona-release_latest.generic_all.deb
dpkg -i percona-release_latest.generic_all.deb
percona-release enable tools
```

from [https://docs.percona.com/percona-server/8.0/apt-repo.html](https://docs.percona.com/percona-server/8.0/apt-repo.html)

# packagecloud.io/crowdsec (Crowdsec Security)

```
apt update
apt install debian-archive-keyring
apt install -y curl gnupg apt-transport-https
mkdir -p /etc/apt/keyrings/
curl -fsSL https://packagecloud.io/crowdsec/crowdsec/gpgkey | gpg --dearmor > /etc/apt/keyrings/crowdsec_crowdsec-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/crowdsec_crowdsec-archive-keyring.gpg] https://packagecloud.io/crowdsec/crowdsec/any any main" > /etc/apt/sources.list.d/crowdsec_crowdsec.list
echo "#deb-src [signed-by=/etc/apt/keyrings/crowdsec_crowdsec-archive-keyring.gpg] https://packagecloud.io/crowdsec/crowdsec/any any main" >> /etc/apt/sources.list.d/crowdsec_crowdsec.list
apt update
apt install crowdsec
```

from [https://docs.crowdsec.net/u/getting\_started/installation/linux/](https://docs.crowdsec.net/u/getting_started/installation/linux/)

# packages.gitlab.com (Gitlab)

### gitlab-ce

```bash
apt update
apt install -y curl ca-certificates apt-transport-https gnupg2
curl --location "https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh" | bash
apt update
EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ce
# or
# GITLAB_ROOT_EMAIL="admin@example.com" GITLAB_ROOT_PASSWORD="strongpassword" EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ce
cat /etc/gitlab/initial_root_password
```

from [https://docs.gitlab.com/install/package/debian/](https://docs.gitlab.com/install/package/debian/)

### gitlab-runner

```bash
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | bash
cat <<EOF | sudo tee /etc/apt/preferences.d/pin-gitlab-runner.pref
Explanation: Prefer GitLab provided packages over the Debian native ones
Package: gitlab-runner
Pin: origin packages.gitlab.com
Pin-Priority: 1001
EOF
apt update
apt install gitlab-runner
```

from [https://docs.gitlab.com/runner/install/linux-repository/](https://docs.gitlab.com/runner/install/linux-repository/)

# nginx.org (nginx)

```bash
apt update
apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
# stable nginx
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
# mainline nginx
#echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | tee /etc/apt/preferences.d/99nginx
apt update
apt install nginx
```

from [https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/#debian-packages](https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/#debian-packages)

# artifacts.elastic.co (Elasticsearch)

```bash
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
apt install apt-transport-https
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/9.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-9.x.list
apt update
apt install elasticsearch
```

from [https://www.elastic.co/docs/deploy-manage/deploy/self-managed/install-elasticsearch-with-debian-package](https://www.elastic.co/docs/deploy-manage/deploy/self-managed/install-elasticsearch-with-debian-package)

# nodejs.org (nodeJS)

<p class="callout info">NodeJS bietet viele verschiedene Varianten. Daher ist es am einfachsten direkt auf der Herstellerseite zu schauen:  
  
für Debian und Co: https://github.com/nodesource/distributions  
andere: [https://nodejs.org/en/download/package-manager](https://nodejs.org/en/download/package-manager)</p>

# mydumper.github.io (MyDumper MySQL Backup)

```bash
mkdir -p /etc/apt/keyrings/
wget -qO- 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x1D357EA7D10C9320371BDD0279EA15C0E82E34BA&exact=on' | tee /etc/apt/keyrings/mydumper.asc
echo "deb [signed-by=/etc/apt/keyrings/mydumper.asc] https://mydumper.github.io/mydumper/repo/apt/debian trixie main" > /etc/apt/sources.list.d/mydumper.list
echo "#deb [signed-by=/etc/apt/keyrings/mydumper.asc] https://mydumper.github.io/mydumper/repo/apt/debian trixie testing" >> /etc/apt/sources.list.d/mydumper.list
apt update
apt install mydumper
```

From [https://mydumper.github.io/mydumper/docs/html/installing.html](https://mydumper.github.io/mydumper/docs/html/installing.html)