Pacmans installierte Pakete und Pacmans Cache aufräumen

Ungenutzte Pakete entfernen

Beim Deinstallieren von Pakete sollte immer der Parameter -Rs anstatt nur -R verwendet werden, um auch alle nicht mehr benötigten Pakete mit zu deinstallieren:

$ pacman -Rs paketname

Eine Liste aller Pakete, die nicht mehr benötigt werden erhält man mit dem Kommando:

$ pacman -Qtdq

Man kann diese Liste auch gleich als Eingabe für das Entfernen durch pacman geben:

$ sudo pacman -Rns $(pacman -Qtdq)

Ob wirklich all die daraufhin gelisteten Pakete wirklich deinstalliert werden, sollte man unbedingt vorher überprüfen.

Pacman Cache säubern

Mit der Zeit sammeln sich auf einem Archlinuxsystem einige Pakete im Verzeichnis /var/cache/pacman/pkg/. Das sind vor allem verschiedene Versionen jemals installierter (und mittlerweile auch deinstallierter) Pakete.

Am einfachsten ist es die Pakete aufräumen zu lassen. Das geht mit dem Tool paccache. Mit den folgenden beiden Kommandos kann man zunächst eine Trockenübung machen, ob sich das Aufräumen überhaupt lohnt:

$ paccache -d

==> finished dry run: 4639 candidates (disk space saved: 19.6 GiB)
$ paccache -duk0

==> finished dry run: 476 candidates (disk space saved: 4.31 GiB)

Der erste Aufruf von paccache mit dem Parameter -d zählt die Anzahl der installierten Pakete, die gelöscht werden können. Dabei werden die drei neuesten Paketversionen noch behalten, sodass man im Zweifelsfall noch zu einer älteren Version downgraden kann. Beim zweiten Aufruf mit dem Parameter -duk0 werden alle nicht mehr installierten Pakete in allen Versionen gezählt und der dafür verbrauchte Speicherplatz gemessen.

Da sich bei mir das Aufräumen des Caches von pacman durchaus lohnt, kann ich die paccache Kommandos nun scharfschalten, in dem ich beim Parameter das d durch ein r ersetze:

$ paccache -r ; paccache -ruk0
==> Privilege escalation required
[sudo] Passwort: 

==> finished: 4639 packages removed (disk space saved: 19.6 GiB)
==> Privilege escalation required

==> finished: 239 packages removed (disk space saved: 1.34 GiB)

Für das eigentliche Löschen wird nun auch das Passwort benötigt, weil root Rechte gebraucht werden, um die Pakete zu löschen. Die Differenz zwischen dem Trockenlauf und dem eigentlichen Löschen der Pakete, die nicht mehr installiert sind, kann ich mir im Moment nicht erklären. Denn schließlich sind auch keine Löschkandidaten mehr gefunden worden:

$ paccache -d ; paccache -duk0
==> no candidate packages found for pruning
==> no candidate packages found for pruning

Weitere Infos

Weitere Infos gibt es wie immer im Archlinux Wiki:

Dezember 2, 2015 · 2 Minuten

Mirror verwalten unter Archlinux

Unter Archlinux sollte man ab und zu mal die Mirrorliste von pacman aktualisieren.

Dazu überschreibt man zunächst die aktuelle mit der neuesten mirrorlist Datei und erstellt anschließend eine Kopie davon:

$ sudo cp /etc/pacman.d/mirrorlist.pacnew /etc/pacman.d/mirrorlist
$ sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.forranking

In der Kopie müssen nun zunächst alle Mirrorserver aktiviert. Das geht am einfachsten mit sed:

$ sudo sed -i 's/^#Server/Server/' /etc/pacman.d/mirrorlist.forranking

Anschließend kann mit dem Programm rankmirrors eine Liste der drei schnellsten Mirror erstellt werden. Dies kann einige Minuten dauern.

$ sudo rankmirrors /etc/pacman.d/mirrorlist.forranking -n 3
# Server list generated by rankmirrors on 2015-12-02
##
## Arch Linux repository mirrorlist
## Generated on 2015-11-22
##
## Worldwide
## Australia
## Austria
## Bangladesh
## Belarus
## Belgium
## Brazil
## Bulgaria
## Canada
## Chile
## China
## Colombia
## Croatia
## Czech Republic
## Denmark
## Ecuador
## France
## Germany
## Greece
## Hungary
## Iceland
## India
## Indonesia
## Iran
## Ireland
## Israel
## Italy
## Japan
## Kazakhstan
## Latvia
## Lithuania
## Luxembourg
## Macedonia
## Netherlands
## New Caledonia
## New Zealand
## Norway
## Philippines
## Poland
## Portugal
## Romania
## Russia
## Serbia
## Singapore
## Slovakia
## South Africa
## South Korea
## Spain
## Sweden
## Switzerland
## Taiwan
## Turkey
## Ukraine
## United Kingdom
## United States
## Vietnam
Server = http://ftp5.gwdg.de/pub/linux/archlinux/$repo/os/$arch
Server = http://mirror.23media.de/archlinux/$repo/os/$arch
Server = http://ftp.hosteurope.de/mirror/ftp.archlinux.org/$repo/os/$arch

Abschließend werden die drei gelisteten Server noch manuell in der eigentlich mirrorlist Datei für pacman aktiviert und die Arbeitskopie der Mirrorliste gelöscht.

$ sudo vi /etc/pacman.d/mirrorlist
$ sudo rm /etc/pacman.d/mirrorlist.forranking
Dezember 2, 2015 · 2 Minuten

Tiny Tiny RSS systemd Service Unit

Inspiriert von TauSys Blogeintrag Tiny Tiny RSS Update-Daemon unter systemd betreiben habe ich mein init.d Script für TT-RSS mal entfernt und durch eine systemd Service Unit ersetzt. Ganz übernehmen konnte ich Tausys Unit nicht, minimale Änderungen mussten her und nun sieht meine Unit so aus:

$ cat /lib/systemd/system/ttrss.service
[Unit]
Description=Tiny Tiny RSS update daemon
After=network.target mysql.service
Requires=network.target remote-fs.target nss-lookup.target mysql.service

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/ttrss
Type=simple
StandardOutput=null
StandardError=journal
ExecStart=/usr/bin/php ./update_daemon2.php
PrivateTmp=true
InaccessibleDirectories=/home /root /boot /opt /mnt /media
ReadOnlyDirectories=/etc /usr
Restart=always

[Install]
WantedBy=multi-user.target

Update 16.8.16: Service umbenannt, StandardOutput=journal, StandardError=journal, Restart=always

Update 22.8.16: StandardOutput=null

September 22, 2015 · 1 Minute

logcheck Regel Update #2

Hier das zweite Update meiner logcheck Regeln. Aktuell nutze ich logcheck 1.3.17 unter Debian GNU/Linux 8.

diff --git a/logcheck/ignore.d.server/amavisd-new b/logcheck/ignore.d.server/amavisd-new
index fb794bd..a6121f3 100644
--- a/logcheck/ignore.d.server/amavisd-new
+++ b/logcheck/ignore.d.server/amavisd-new
@@ -3,5 +3,5 @@
 ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ amavis\[[[:digit:]]+\]: \([-[:digit:]]+\) NOTICE: Not sending DSN in response to bulk mail from <[^.]*> containing [[:upper:] ]+, mail intentionally dropped$
 ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ amavis\[[[:digit:]]+\]: \([-[:digit:]]+\) INFO: unfolded [[:digit:]]+ illegal all-whitespace continuation lines$
 ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ amavis\[[[:digit:]]+\]: \([-[:digit:]]+\) WARN: address modified \((sender|recipient)\): <[^>]+> -> <[^>]+>$
-^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ amavis\[[[:digit:]]+\]: \([-[:digit:]]+\) Passed (BAD-HEADER-[[:digit:]]|UNCHECKED|CLEAN|SPAM(MY)?) {(RelayedInbound|RelayedTaggedInbound|RelayedOpenRelay|RelayedInternal)(,Quarantined)?},( LOCAL)? (\[[.[:digit:]]+\]:[[:digit:]]+ )?(\[[.:[:alnum:]]+\] )?<([._-=@[:alnum:]]+)?> -> <([._-=@[:alnum:]]+)?>,( quarantine: [._-=/@[:alnum:]]+,)? (Queue-ID: [[:alnum:]]+, )?(Message-ID: <.*>, )?mail_id: [-_[:alnum:]]+, Hits: -?[.[:xdigit:]]*, size: [[:digit:]]+, queued_as: [_[:alnum:]]+, [[:digit:]]+ ms$
+^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ amavis\[[[:digit:]]+\]: \([-[:digit:]]+\) Passed (BAD-HEADER-[[:digit:]]|UNCHECKED|CLEAN|SPAM(MY)?|UNCHECKED-ENCRYPTED) {(RelayedInbound|RelayedTaggedInbound|RelayedOpenRelay|RelayedInternal)(,Quarantined)?},( LOCAL)? (\[[.[:digit:]]+\]:[[:digit:]]+ )?(\[[.:[:alnum:]]+\] )?<([._-=@[:alnum:]]+)?> -> <([._-=@[:alnum:]]+)?>,( quarantine: [._-=/@[:alnum:]]+,)? (Queue-ID: [[:alnum:]]+, )?(Message-ID: <.*>, )?mail_id: [-_[:alnum:]]+, Hits: -?[.[:xdigit:]]*, size: [[:digit:]]+, queued_as: [_[:alnum:]]+, [[:digit:]]+ ms$
 ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ amavis\[[[:digit:]]+\]: \([-[:digit:]]+\) Blocked BANNED \(.*\) {(No)?BouncedInbound,Quarantined}, (\[[.[:digit:]]+\]:[[:digit:]]+ )?(\[[.:[:alnum:]]+\] )?<([._-=@[:alnum:]]+)?> -> <([._-=@[:alnum:]]+)?>, (quarantine: [[:alnum:]]/.*, )?(Queue-ID: [[:alnum:]]+, )?(Message-ID: <[._-$%@[:alnum:]]+>, )?mail_id: [-_[:alnum:]]+, Hits: -?[.[:xdigit:]]*, size: [[:digit:]]+, (queued_as: [_[:alnum:]]+, )?[[:digit:]]+ ms$

diff --git a/logcheck/ignore.d.server/clamav-freshclam b/logcheck/ignore.d.server/clamav-freshclam
index 73df35f..2608bd3 100644
--- a/logcheck/ignore.d.server/clamav-freshclam
+++ b/logcheck/ignore.d.server/clamav-freshclam
@@ -1,6 +1,6 @@
 ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ freshclam\[[0-9]+\]: ClamAV update process started at .*$
 ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ freshclam\[[0-9]+\]: Received signal: (wake up|re-opening log file)$
-^\w{3} [ :0-9]{11} [._[:alnum:]-]+ freshclam\[[0-9]+\]: (daily|main)\.c(l|v)d (is up to date|updated) \(version: [0-9]+, sigs: [0-9]+, f-level: [0-9]+, builder: \w+\)$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ freshclam\[[0-9]+\]: (bytecode|daily|main)\.c(l|v)d (is up to date|updated) \(version: [0-9]+, sigs: [0-9]+, f-level: [0-9]+, builder: \w+\)$
 ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ freshclam\[[0-9]+\]: Clamd successfully notified about the update\.$
 ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ freshclam\[[0-9]+\]: --------------------------------------$
 ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ freshclam\[[0-9]+\]: Database updated \([0-9]+ signatures\) from .* \(IP: [0-9.]+\)$

diff --git a/logcheck/ignore.d.server/dovecot b/logcheck/ignore.d.server/dovecot
index 643a4e4..047fb97 100644
--- a/logcheck/ignore.d.server/dovecot
+++ b/logcheck/ignore.d.server/dovecot
@@ -28,4 +28,5 @@
 ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ dovecot: (pop3|imap)-login: (Disconnected|Aborted login)(: Inactivity)? \(
 ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ dovecot: imap\([-_.@[:alnum:]]+\): Disconnected
 ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ dovecot: lda\([-_.@[:alnum:]]+\): sieve: msgid=.*: stored mail into mailbox '[-.[:alnum:]]+'$
+^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ dovecot: lda\([-_.@[:alnum:]]+\): sieve: msgid=.*: marked message to be discarded if not explicitly delivered \(discard action\)$
 ^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ dovecot: auth-worker\([-_.[:alnum:]]+\): (pg|my)sql\([.:[:xdigit:]]+\): Connected to database [-_.[:alnum:]]+$

diff --git a/logcheck/ignore.d.server/apache b/logcheck/ignore.d.server/apache
index 9faac7e..040caa2 100644
--- a/logcheck/ignore.d.server/apache
+++ b/logcheck/ignore.d.server/apache
@@ -1 +1,2 @@
 ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ apache: nss_ldap: reconnect(ing|ed) to LDAP server(\.\.\.| after [0-9]+ attempt\(s\))$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ apache2\[[0-9]+\]: Reloading web server: apache2.$

diff --git a/logcheck/ignore.d.server/rsyslog b/logcheck/ignore.d.server/rsyslog
index 171f20e..594b869 100644
--- a/logcheck/ignore.d.server/rsyslog
+++ b/logcheck/ignore.d.server/rsyslog
@@ -3,3 +3,5 @@
 ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ rsyslogd: \[origin software="rsyslogd" swVersion="[0-9.]+" x-pid="[0-9]+" x-info="http://www.rsyslog.com"\] start$
 ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ rsyslogd: \[origin software="rsyslogd" swVersion="[0-9.]+" x-pid="[0-9]+" x-info="http://www.rsyslog.com"\] exiting on signal [0-9]+.$
 ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ rsyslogd: \[origin software="rsyslogd" swVersion="[0-9.]+" x-pid="[0-9]+" x-info="http://www.rsyslog.com"\] rsyslogd was HUPed$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ rsyslogd(-)?[0-9]+: action 'action 17' resumed \(module 'builtin:ompipe'\) \[try http://www.rsyslog.com/e/[0-9]+ \]$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ rsyslogd(-)?[0-9]+: action 'action 17' suspended, next retry is \w{3} \w{3} [ :0-9]{16} \[try http://www.rsyslog.com/e/[0-9]+ \]$

Neu hinzugekommen ist eine Datei für systemd und systemd-login mit dem folgenden Inhalt:

^\w{3} [ :0-9]{11} [._[:alnum:]-]+ systemd\[[0-9]+\]: Reload(ed|ing) LSB: Apache2 web server.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ systemd\[[0-9]+\]: Start(ed|ing) Cleanup of Temporary Directories[.]+$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ systemd\[[0-9]+\]: Start(ed|ing) Session [0-9]+ of user [._[:alnum:]-]+\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ systemd-logind\[[0-9]+\]: New session [0-9]+ of user [._[:alnum:]-]+\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ systemd-logind\[[0-9]+\]: Removed session [0-9]+\.$

Vergangene logcheck Regel Updates: #1

August 9, 2015 · 3 Minuten

Grub ohne automatische Gruppierungen

Man kann in Grub die automatische Gruppierung von Einträgen in der Liste abschalten. Daraufhin hat man dann keinerlei Untermenüs mehr und direkt alle möglichen Einträge in der Liste. Das geht mit der folgenden Zeile in der /etc/default/grub:

GRUB_DISABLE_SUBMENU=y

Abschließend noch die grub.cfg neu generieren:

$ sudo grub-mkconfig -o /boot/grub/grub.cfg
August 4, 2015 · 1 Minute