Inhaltsverzeichnis

FreeBSD - PKG

Das Management von Binärpaketen unter FreeBSD, ist derzeit suboptimal. Es hat viele Gründe, aber hauptsächlich zu nennen sind dort 2:

  1. Die Paketdatenbank in /var/db/pkg speichert nicht alle notwendigen Informationen, sie ist langsam, ineffizient und fehleranfällig.
  2. Die im Basissystem enthaltenen pkg_* Tools sind ebenso fehlerhaft und bieten nicht genug Funktionen.

In der Vergangenheit gab es mehrere Versuche um beide Nachteile herumzufrickeln. Reine Port-Tools wie Portmaster wurden erweitert, um auch Binärpakete verwalten zu können. Portupgrade implementierte seine eigene Datenbank. Dennoch erreicht man nie die Klasse, die Nutzer von Linuxdistributionen gewohnt sind. Aus diesem Grund wurde in den letzten Monaten der Binärpaketmanager pkgng geschrieben. Die Designziele waren:

  1. Ersetze /var/db/pkg durch eine neue Datenbank, die schneller und robuster als die derzeitige Struktur ist. Die Wahl fiel auf eine sqlite-Datenbank.
  2. Erlaube weitere Metadaten und verändere das Paketformat so, dass es diese Metadaten speichern kann. Diese Metadaten werden nun in Form von YAML-Dateien gespeichert, denn dieses Format ist problemlos von Menschen lesbar und auch maschinell leicht zu handhaben.
  3. Entkoppele das Basissystem von den Ports. So wie ich es verstanden habe, soll pkgng nicht mehr Teil des Basisystems werden, viel mehr ein integraler Bestandteil der Ports. Es muss im Rahmen der Installation des Portstree installiert werden. Vielleicht kann hier noch jemand etwas zu sagen, der mit der Materie vertrauter ist.
  4. Stelle ein Interface bereit, was sich an gängigen Linux-Paketmanagern orientiert. pkgng ist daher ein Hybrid geworden, der Funktionen aus apt, yum, packman und einigen anderen Tools aus der Linuxwelt kombiniert.

BITTE BEACHTET: Die Paketdatenbank muss konvertiert werden! Ein Weg zurück zu den bisherigen pkg_* Tools, ist nicht möglich!

alle installierten Pakete zählen:

> pkg -N
pkg: 854 packages installed

die explizit installierten Pakte, ohne Abhängigkeiten, auflisten:

> pkg prime-list
> pkg prime-origins

pkg-lock(8) wird verwendet, um Pakete gegen Neuinstallation, Änderung oder Löschung zu sperren. pkg-unlock(8) entsperrt die genannten Pakete. Beide Varianten wirken sich nur auf aktuell installierte Pakete aus. Folglich ist es unmöglich, die Installation eines neuen Pakets mit diesem Mechanismus zu blockieren, es sei denn, eine solche Installation erfordert die Aktualisierung eines gesperrten Pakets.

> pkg lock nginx-lite
> pkg unlock nginx-lite

alle bekannten Sicherheitslücken der installierten Pakete auflisten:

> pkg audit -F
...

cyrus-sasl-2.1.27_2 is vulnerable:
  cyrus-sasl -- Fix off by one error
  CVE: CVE-2019-19906
  WWW: https://vuxml.FreeBSD.org/freebsd/a80c6273-988c-11ec-83ac-080027415d17.html

46 problem(s) in 24 installed package(s) found.

alle Kommentare, von einem bestimmten installierten Paket (FFmpeg), anzeigen

> pkg info ffmpeg

aus den Kommentaren nur den TAG "FreeBSD_version" anzeigen

> pkg annotate -S ffmpeg FreeBSD_version
ffmpeg-6.0,1: Tag: FreeBSD_version Value: 1302001

von allen installierten Paketen den TAG "FreeBSD_version" anzeigen

> pkg annotate -aS FreeBSD_version
...
ffmpeg-6.0,1: Tag: FreeBSD_version Value: 1302001
...

Paket-Name suchen:

> pkg search exiftool
p5-Image-ExifTool-12.00        Perl module for getting EXIF data from image files
p5-Image-ExifTool-devel-10.66  Perl module for getting EXIF data from image files

Versionsunabhängigen Paket-Name suchen:

> pkg search -o exiftool
graphics/p5-Image-ExifTool     Perl module for getting EXIF data from image files
graphics/p5-Image-ExifTool-devel Perl module for getting EXIF data from image files

Paket installieren:

> pkg install graphics/p5-Image-ExifTool

Informationen über das Paket auslesen:

> pkg info graphics/p5-Image-ExifTool
p5-Image-ExifTool-12.00
Name           : p5-Image-ExifTool
Version        : 12.00
Installed on   : Sat Apr 10 13:26:31 2021 CEST
Origin         : graphics/p5-Image-ExifTool
Architecture   : FreeBSD:13:*
Prefix         : /usr/local
Categories     : perl5 graphics
Licenses       : GPLv1+, ART10
Maintainer     : devin@sevenlayer.studio
WWW            : https://sno.phy.queensu.ca/~phil/exiftool/
Comment        : Perl module for getting EXIF data from image files
...

Statistikwerte über das Paket auslesen:

> pkg stats graphics/p5-Image-ExifTool
Local package database:
        Installed packages: 592
        Disk space occupied: 6 GiB

Remote package database(s):
        Number of repositories: 1
        Packages available: 29890
        Unique packages: 29890
        Total size of packages: 86 GiB

ermitteln, welches Paket dieses Programm installiert hat:

> pkg which /usr/local/bin/exiftool
/usr/local/bin/exiftool was installed by package p5-Image-ExifTool-12.00

> pkg which -o /usr/local/bin/exiftool
/usr/local/bin/exiftool was installed by package graphics/p5-Image-ExifTool

alle installierten Pakete anzeigen:

root@FreeBSD10:~ # pkg info -a
...
bash-5.1.4                     GNU Project's Bourne Again SHell
...

root@FreeBSD10:~ # pkg info -ao
...
bash-5.1.4                     shells/bash
...
root@FreeBSD10:~ # pkg info -l shells/bash
bash-5.1.4:
        /usr/local/bin/bash
        /usr/local/bin/bashbug
        /usr/local/bin/rbash
...

Ein Paket als "automatisch installiert" markieren:

> pkg set -A 1 lang/gcc12
Mark gcc12-12.2.0_6 as automatically installed? [y/N]: y

Abhängigkeiten, von denen dieses Paket abhängt, anzeigen:

root@FreeBSD10:~ # pkg info -d shells/bash
bash-4.3.42:
        indexinfo-0.2.4
        gettext-runtime-0.19.6

Abhängigkeiten, die von diesem Paket abhängen, anzeigen:

root@FreeBSD10:~ # pkg info -r shells/bash
bash-4.3.33:

Abhängigkeiten überprüfen und ggf. reparieren:

# pkg check -d
Checking all packages: 100%

das Quell-Paket zu einer Datei finden:

root@FreeBSD10:~ # pkg which /usr/local/bin/mp4box
/usr/local/bin/mp4box was installed by package gpac-mp4box-0.5.0

alle installierten Dateien von einem Paket anzeigen:

root@FreeBSD10:~ # pkg info -ol shells/bash
bash-4.3.33
Origin         : shells/bash
Files          :
        /usr/local/bin/bash
        /usr/local/bin/bashbug
        /usr/local/bin/rbash
        /usr/local/info/bash.info
        /usr/local/man/man1/bash.1.gz
        ...

Meta-Daten eines Paketes ausgeben:

root@FreeBSD10:~ # pkg info bash
bash-4.3.33
Name           : bash
Version        : 4.3.33
Installed on   : Thu Mar 19 20:59:38 UTC 2015
Origin         : shells/bash
Architecture   : freebsd:10:x86:64
Prefix         : /usr/local
Categories     : shells
Licenses       : GPLv3
Maintainer     : ehaupt@FreeBSD.org
WWW            : http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
Comment        : The GNU Project's Bourne Again SHell
...

das Origin eines Paketes anzeigen:

root@FreeBSD10:~ # pkg info -o dokuwiki-20140929_1
dokuwiki-20140929_1            www/dokuwiki

das Origin von allen installierten Paketen anzeigen:

root@FreeBSD10:~ # pkg info -oa

Paket suchen:

root@FreeBSD10:~ # pkg search dvd
dvd+rw-tools-7.1
dvd-slideshow-0.8.4_1
...

Paket installieren:

root@FreeBSD10:~ # pkg install dvd+rw-tools-7.1
root@FreeBSD10:~ # pkg install www/dokuwiki

alle installierten Pakete anzeigen:

root@FreeBSD10:~ # pkg info
...
dvd+rw-tools-7.1               DVD burning software
...

Paket wieder löschen:

root@FreeBSD10:~ # pkg info | grep -F dvd
dvd+rw-tools-7.1               DVD burning software

root@FreeBSD10:~ # pkg delete dvd+rw-tools-7.1

Paket rekursiv löschen:

root@FreeBSD10:~ # pkg delete -fa dvd+rw-tools-7.1

Aktualisieren Sie die lokale pkgng-Datenbank:

root@FreeBSD10:~ # pkg update -f

alle installierten Pakete aktuallisieren:

root@FreeBSD10:~ # pkg update && pkg updating | tee updating.txt && pkg upgrade

unsichere Pakete suchen:

root@FreeBSD10:~ # pkg audit
0 problem(s) in the installed packages found.

die Abhängigkeiten aller installierten Pakete überprüfen:

root@FreeBSD10:~ # pkg check -d

die Schecksummen aller installierten Pakete neu generieren:

root@FreeBSD10:~ # pkg check -r

die Schecksummen aller installierten Pakete überprüfen:

root@FreeBSD10:~ # pkg check -s

Installation von Binärpaketen

wenn man einfach nur den Paketnamen angibt, dann passiert folgendes:

root@FreeBSD10:~ # pkg install postfix dovecot
Updating repository catalogue
digests.txz                                  100% 1043KB  40.1KB/s  43.5KB/s   00:26    
The following 7 packages will be installed:

        Installing pcre: 8.33
        Installing postfix: 2.7.15,1
        Installing postfix: 2.8.16,1
        Installing postfix: 2.9.8,1
        Installing dovecot: 1.2.17
        Installing dovecot: 2.2.9
        Installing postfix: 2.10.2,1

The installation will require 80 MB more space

13 MB to be downloaded

Proceed with installing packages [y/N]: 

…das wollen wir natürlich nicht…

deshalb müssen wir immer erst den Paketnamen mit Versionsnummer ermitteln:

root@FreeBSD10:~ # pkg search postfix
postfix-2.10.2,1
postfix-2.7.15,1
postfix-2.8.16,1
postfix-2.9.8,1
postfix-current-2.11.20131001,4
postfix-logwatch-1.40.00
postfix-policyd-sf-1.82_1,1
postfix-policyd-spf-perl-2.007
postfix-policyd-weight-0.1.15.1_2
postfix-postfwd-1.35
postfixadmin-2.3.6
py27-postfix-policyd-spf-python-1.2
trac-email2trac-postfix-2.6.2

root@FreeBSD10:~ # pkg search dovecot
cyrus2dovecot-1.2
dovecot-1.2.17
dovecot-2.2.9
dovecot-antispam-1.3_1,1
dovecot-managesieve-0.11.13
dovecot-pigeonhole-0.4.2_1
dovecot-sieve-1.2+0.1.19
dovecot2-antispam-plugin-20130429_4

jetzt können wir die Pakete installieren:

root@FreeBSD10:~ # pkg install postfix-2.10.2,1 dovecot-2.2.9
Updating repository catalogue
digests.txz                                   100% 1043KB  38.7KB/s  43.5KB/s   00:27    
The following 3 packages will be installed:

        Installing pcre: 8.33
        Installing dovecot: 2.2.9
        Installing postfix: 2.10.2,1

The installation will require 33 MB more space

6 MB to be downloaded

Proceed with installing packages [y/N]: