Diskussion und Hilfe zu PKGBASE

Yamagi

Possessed With Psi Powers
Teammitglied
Wenn FreeBSD 15.0 in einigen Monaten erscheint, wird es das Basisystem als Pakete ausliefern. freebsd-update und co. werden verschwinden. Sprich das lange erwartete PKGBASE ist endlich da.

PKGBASE bedeutet die wohl größte Umstellung in der täglichen Arbeit mit FreeBSD seit vielen Jahren. Vor allem hebt es die bisher klare Trennung
zwischen Basissystem und Ports auf. In Zukunft sind alles Pakete. Darüber gab es in den letzten Monaten, nachdem klar wurde, das PKGBASE kommen wird, einige emotionale Diskussionen auf den Maillingslisten.

In Vorbereitung auf FreeBSD 15.0 und die damit verbundene, notwendige Anpassung unseres internen Toolings auf PKGBASE habe ich viel damit
beschäftigt. Ich möchte in diesem Beitrag meine Erfahrungen teilen und die nach dem Release von 15.0 kommenden Fragen etwas vorwegzunehmen. Und auch um zu sensibilisieren, dass 15.0 für viele Anwender nicht einfach ein weiteres Updates wird, sondern Vorbereitung braucht.

Ich möchte nicht auf das Für und Wider von PKGBASE eingehen. Das ist an anderen Stellen schon endlos diskutiert worden. Es kommt und mehr muss man an grundsätzlichen Dingen dazu nicht mehr sagen. Nur so viel: Zwar ist PKGBASE am Anfang ungewohnt, weil sich FreeBSD damit viel mehr wie ein modernes Linux verhält. Man merkt aber schnell, dass es viele Dinge einfacher macht und zumindest für mich den anfänglichen Schmerz wert ist.

Mit 15.0 kann bzw. wird:

  • Das Basissystem kann weiterhin wie gehabt mit make buildworld gebaut werden. Wird es mit make installworld installiert, verhält es sich wie bisher. Es ist nicht in Pakete zerlegt und wird nicht mit pkg verwaltet.
  • Stattdessen können mit make packages Pakete erstellt werden, die anschließend lokal oder über einen HTTP-Server auf anderen Systemen mit pkg installiert und verwaltet werden können.
  • freebsd-update wird verschwinden und durch ein offizielles Repo für PKGBASE ersetzt werden. tatsächlich gibt es dieses offizielle Repo schon seit einigen Jahren seit ich glaube 13.0. Es wurde bisher nur wenig genutzt.
  • Eventuell wird freebsd-update durch einen Wrapper ersetzt werden, sodass der Workflow zumindest teilweise gleich bleiben kann. Ich würde aber davon abraten den zu nutzen, sondern die Workflows anpassen. Denn nur so kann man die Vorteile von PKGBASE wirklich nutzen.

Vorhandene Systeme können mit einem Script pkgbasify vom klassischen Weg auf PKGBASE konvertiert werden. Generell würde ich meiner Erfahrung nach:

  • Wenn möglich reinstallieren. Das ist oft schneller und robuster. Vor allem, wenn das jeweilige System eh unter Configmanagement ist (und
    das wird es bei Servern im Jahr 2025 hoffentlich sein) und man nach der Reinstallation nur einmal neu deployen muss.
  • Nur dann konvertieren, wenn eine Reinstallation aufwändig ist.

Was passiert denn nun genau? Ab 15.0 gibt es drei Repos für pkg:

  • FreeBSD-ports sind die ganz normalen, seit Jahren bekannten Pakete. Bisher hieß dieses Repo nur FreeBSD. Ich erwähne das, weil es unten wichtig wird.
  • Schon mit FreeBSD 14.3 kam FreeBSD-kmod hinzu, was aus den Ports gebaute Kernelmodule beinhaltet.
  • Neu ist FreeBSD-base, was das Basissystem beihnaltet.

Dazu hat pkg in den letzten Monaten bis Jahren nach und nach einige neue Optionen bekomen, um die Arbeit mit dem Basissystem zu erleichtern. Wichtig sind vor allem zwei:

  • Bei vielen Operationen kann man mit --repository das Repo, dessen Pakete aktualisiert oder installiert werden auswählen. So lässt sich das Basisystem weiterhin getrennt von den Ports behandeln.
  • Einzelen Pakete können als vital markiert werden. pkg wird diese Pakete und ihre Abhängigkeiten niemals deinstallieren. Das verhindert, dass das Basisystem als Ganzes oder wesentliche Teile davon entfernt und das System damit zerstört wird.

Außerdem verschwinden etcupdate und das nie wirklich gestorbenemergemaster. Geänderte Configdateien werden durch pkg wie schon jetzt bei Ports automatisch gemerged. Ist ein Merge nicht möglich, wird die neue Version mit der Endung .pkgsave daneben gelegt und muss anschließend manuell gemerged werden. Linuxnutzer kennen das bereits.

Nach der Installation sieht es so aus:

Code:
% pkg info | grep FreeBSD
FreeBSD-acct-15.0.a2.20250919040617 System Accounting Utilities
FreeBSD-acpi-15.0.a2.20250919040617 ACPI Utilities
FreeBSD-apm-15.0.a2.20250919040617 APM Utilities
FreeBSD-at-15.0.a2.20250919040617 AT Utilities
FreeBSD-atf-15.0.a2.20250919040617 Automated Testing Framework
FreeBSD-atf-dev-15.0.a2.20250919040617 Automated Testing Framework (development files)
FreeBSD-atf-lib-15.0.a2.20250919040617 Automated Testing Framework (libraries)
FreeBSD-audit-15.0.a2.20250919040617 OpenBSM auditing utilities
FreeBSD-audit-dev-15.0.a2.20250912171634 OpenBSM auditing utilities (development files)
FreeBSD-autofs-15.0.a2.20250919040617 Autofs Utilities
FreeBSD-bhyve-15.0.a2.20250919040617 Bhyve Utilities
FreeBSD-blocklist-15.0.a2.20250919040617 Blocklist Utilities
FreeBSD-blocklist-dev-15.0.a2.20250912171634 Blocklist Utilities (development files)
FreeBSD-bluetooth-15.0.a2.20250919040617 Bluetooth Utilities
FreeBSD-bluetooth-dev-15.0.a2.20250912171634 Bluetooth Utilities (development files)
FreeBSD-bmake-15.0.a2.20250919040617 Program maintenance utility
FreeBSD-bootloader-15.0.a2.20250919040617 Bootloader
FreeBSD-bootloader-dev-15.0.a2.20250912171634 Bootloader (development files)
FreeBSD-bsdconfig-15.0.a2.20250919040617 System configuration utility
FreeBSD-bsdinstall-15.0.a2.20250919040617 BSDInstall Utilities
FreeBSD-bsnmp-15.0.a2.20250919040617 BSNMP Utilities
FreeBSD-bsnmp-dev-15.0.a2.20250912171634 BSNMP Utilities (development files)
FreeBSD-caroot-15.0.a2.20250912171634 SSL Certificates
FreeBSD-ccdconfig-15.0.a2.20250919040617 Concatenated disk driver (ccd) configuration utility
FreeBSD-certctl-15.0.a2.20250919040617 SSL Certificate Utility
FreeBSD-clang-15.0.a2.20250919040617 Clang Utilities
FreeBSD-clang-dev-15.0.a2.20250912171634 Clang Utilities (development files)
FreeBSD-clibs-15.0.a2.20250919040617 Core C Libraries
FreeBSD-clibs-dev-15.0.a2.20250919101318 Core C Libraries (development files)
FreeBSD-clibs-lib32-15.0.a2.20250919040617 Core C Libraries (32-bit libraries)
FreeBSD-console-tools-15.0.a2.20250919040617 Console Utilities
FreeBSD-cron-15.0.a2.20250919040617 cron(8) and crontab(1)
FreeBSD-csh-15.0.a2.20250919040617 C Shell
FreeBSD-ctf-tools-15.0.a2.20250919040617 CTF Utilities
FreeBSD-ctl-15.0.a2.20250919040617 CAM Target Layer
FreeBSD-cxgbe-tools-15.0.a2.20250919040617 Chelsio cxbge Utilities
FreeBSD-devd-15.0.a2.20250919040617 Devd Utility and scripts
FreeBSD-devmatch-15.0.a2.20250919040617 Automatically load kernel drivers for attached hardware
FreeBSD-devmatch-dev-15.0.a2.20250912171634 Devmatch Utility (development files)
FreeBSD-dhclient-15.0.a2.20250919040617 DHCP Client
FreeBSD-dma-15.0.a2.20250919040617 DragonFly Mail Agent
FreeBSD-dtrace-15.0.a2.20250919040617 Dtrace Utilities
FreeBSD-dtrace-dev-15.0.a2.20250914025216 Dtrace Utilities (development files)
FreeBSD-dwatch-15.0.a2.20250919040617 Dwatch Utilities
FreeBSD-ee-15.0.a2.20250919040617 Easy Editor Utilities
FreeBSD-efi-tools-15.0.a2.20250919040617 UEFI Utilities
FreeBSD-efi-tools-dev-15.0.a2.20250912171634 UEFI Utilities (development files)
FreeBSD-examples-15.0.a2.20250912171634 Examples in /usr/share/examples
FreeBSD-fd-15.0.a2.20250919040617 Floppy disk support
FreeBSD-fetch-15.0.a2.20250919040617 Retrieve a file from a remote URL
FreeBSD-fetch-dev-15.0.a2.20250912171634 Fetch Utility (development files)
FreeBSD-firmware-iwm-15.0.a2.20250912171634 iwm(4) firmwares
FreeBSD-ftp-15.0.a2.20250919040617 FTP Utilities
FreeBSD-ftpd-15.0.a2.20250919040617 FTP Daemon
FreeBSD-fwget-15.0.a2.20250919040617 Install firmware packages for the running system
FreeBSD-games-15.0.a2.20250919040617 Games
FreeBSD-geom-15.0.a2.20250919040617 GEOM configuration utilities
FreeBSD-ggate-15.0.a2.20250919040617 GEOM Gate Utilities
FreeBSD-gssd-15.0.a2.20250919040617 gssd(8) daemon for kernel GSS-API
FreeBSD-hast-15.0.a2.20250919040617 Highly Available Storage daemon
FreeBSD-hostapd-15.0.a2.20250919040617 802.11 Access Point Daemon an Utilities
FreeBSD-hyperv-tools-15.0.a2.20250919040617 Microsoft Hyper-V utilities
FreeBSD-inetd-15.0.a2.20250919040617 Internet super-server
FreeBSD-ipf-15.0.a2.20250919040617 IP Filter (ipf) packet filter management tools
FreeBSD-ipfw-15.0.a2.20250919040617 ipfw (IP firewall) management utilities
FreeBSD-iscsi-15.0.a2.20250919040617 iSCSI target, initiator, and management tools
FreeBSD-jail-15.0.a2.20250919040617 Jail Utilities
FreeBSD-kerberos-15.0.a2.20250919040617 Kerberos utilities
FreeBSD-kerberos-dev-15.0.a2.20250912171634 Kerberos utilities (development files)
FreeBSD-kerberos-kdc-15.0.a2.20250919040617 Kerberos key distribution center
FreeBSD-kerberos-lib-15.0.a2.20250912171634 Kerberos utilities (libraries)
FreeBSD-kernel-generic-15.0.a2.20250919101318 FreeBSD GENERIC Kernel
FreeBSD-kernel-man-15.0.a2.20250918141646 Kernel manual pages
FreeBSD-kyua-15.0.a2.20250919040617 Testing framework for infrastructure software
FreeBSD-lib9p-15.0.a2.20250915044833 9P network protocol library
FreeBSD-lib9p-dev-15.0.a2.20250915044833 9P network protocol library (development files)
FreeBSD-libarchive-15.0.a2.20250919040617 Archive handling library
FreeBSD-libarchive-dev-15.0.a2.20250912171634 Archive handling library (development files)
FreeBSD-libbegemot-15.0.a2.20250919040617 rpoll(3) interface for event-driven I/O
FreeBSD-libbegemot-dev-15.0.a2.20250912171634 rpoll(3) interface for event-driven I/O (development files)
FreeBSD-libblocksruntime-15.0.a2.20250912171634 LLVM BlocksRuntime library
FreeBSD-libblocksruntime-dev-15.0.a2.20250912171634 LLVM BlocksRuntime library (development files)
FreeBSD-libbsdstat-15.0.a2.20250912171634 Periodic statistics library
FreeBSD-libbsdstat-dev-15.0.a2.20250912171634 Periodic statistics library (development files)
FreeBSD-libbsm-15.0.a2.20250919040617 Basic Security Module (BSM) audit library
FreeBSD-libbsm-dev-15.0.a2.20250912171634 Basic Security Module (BSM) audit library (development files)
FreeBSD-libbz2-15.0.a2.20250912171634 bzip2 compression library
FreeBSD-libbz2-dev-15.0.a2.20250912171634 bzip2 compression library (development files)
FreeBSD-libcasper-15.0.a2.20250919040617 Casper library
FreeBSD-libcasper-dev-15.0.a2.20250912171634 Casper library (development files)
FreeBSD-libcompat-15.0.a2.20250919040617 Compatibility library
FreeBSD-libcompat-dev-15.0.a2.20250912171634 Compatibility library (development files)
FreeBSD-libcompiler_rt-dev-15.0.a2.20250912171634 LLVM compiler_rt library (development files)
FreeBSD-libcuse-15.0.a2.20250919040617 Userland character device library
FreeBSD-libcuse-dev-15.0.a2.20250912171634 Userland character device library (development files)
FreeBSD-libdwarf-15.0.a2.20250919040617 DWARF access library
FreeBSD-libdwarf-dev-15.0.a2.20250912171634 DWARF access library (development files)
FreeBSD-libevent1-15.0.a2.20250915044833 Private libevent1 library
FreeBSD-libevent1-dev-15.0.a2.20250915044833 Private libevent1 library (development files)
FreeBSD-libexecinfo-15.0.a2.20250919040617 NetBSD stack backtrace library
FreeBSD-libexecinfo-dev-15.0.a2.20250912171634 NetBSD stack backtrace library (development files)
FreeBSD-libipt-15.0.a2.20250912171634 Intel(R) Processor Trace decoder library
FreeBSD-libipt-dev-15.0.a2.20250912171634 Intel(R) Processor Trace decoder library (development files)
FreeBSD-libldns-15.0.a2.20250912171634 NLnet Labs LDNS library
FreeBSD-libldns-dev-15.0.a2.20250912171634 NLnet Labs LDNS library (development files)
FreeBSD-liblzma-15.0.a2.20250912171634 XZ LZMA library
FreeBSD-liblzma-dev-15.0.a2.20250912171634 XZ LZMA library (development files)
FreeBSD-libmagic-15.0.a2.20250919040617 Magic number recognition library
FreeBSD-libmagic-dev-15.0.a2.20250912171634 Magic number recognition library (development files)
FreeBSD-libmilter-15.0.a2.20250912171634 sendmail Mail Filter API library
FreeBSD-libmilter-dev-15.0.a2.20250912171634 sendmail Mail Filter API library (development files)
FreeBSD-libpathconv-15.0.a2.20250919040617 Library for handling relative and absolute pathnames
FreeBSD-libpathconv-dev-15.0.a2.20250912171634 Library for handling relative and absolute pathnames (development files)
FreeBSD-librpcsec_gss-15.0.a2.20250919040617 RPC GSS-API authentication library
FreeBSD-librpcsec_gss-dev-15.0.a2.20250912171634 RPC GSS-API authentication library (development files)
FreeBSD-librss-15.0.a2.20250912171634 Receive-side scaling library
FreeBSD-librss-dev-15.0.a2.20250912171634 Receive-side scaling library (development files)
FreeBSD-libsdp-15.0.a2.20250919040617 Bluetooth Service Discovery Protocol library
FreeBSD-libsdp-dev-15.0.a2.20250918110710 Bluetooth Service Discovery Protocol library (development files)
FreeBSD-libsqlite3-15.0.a2.20250912171634 Private SQLite library
FreeBSD-libsqlite3-dev-15.0.a2.20250912171634 Private SQLite library (development files)
FreeBSD-libstdbuf-15.0.a2.20250919040617 Preloaded library to change standard streams initial buffering
FreeBSD-libstdbuf-dev-15.0.a2.20250912171634 Preloaded library to change standard streams initial buffering (development files)
FreeBSD-libstdthreads-15.0.a2.20250919040617 C11 threading library
FreeBSD-libstdthreads-dev-15.0.a2.20250912171634 C11 threading library (development files)
FreeBSD-libthread_db-15.0.a2.20250912171634 Library for interacting with threaded processes
FreeBSD-libthread_db-dev-15.0.a2.20250912171634 Library for interacting with threaded processes (development files)
FreeBSD-libucl-15.0.a2.20250919040617 Private Universal Configuration Library (UCL) library
FreeBSD-libucl-dev-15.0.a2.20250912171634 Private Universal Configuration Library (UCL) library (development files)
FreeBSD-libvgl-15.0.a2.20250919040617 Video Graphics Library
FreeBSD-libvgl-dev-15.0.a2.20250912171634 Video Graphics Library (development files)
FreeBSD-libvmmapi-15.0.a2.20250912171634 Front-end to vmm(4) virtualization driver
FreeBSD-libvmmapi-dev-15.0.a2.20250912171634 Front-end to vmm(4) virtualization driver (development files)
FreeBSD-liby-dev-15.0.a2.20250912171634 YACC library (development files)
FreeBSD-libyaml-15.0.a2.20250912171634 Private YAML library
FreeBSD-libyaml-dev-15.0.a2.20250912171634 Private YAML library (development files)
FreeBSD-lld-15.0.a2.20250919040617 ELF linker from the LLVM project
FreeBSD-lldb-15.0.a2.20250919040617 LLVM debugger
FreeBSD-lldb-dev-15.0.a2.20250912171634 LLVM debugger (development files)
FreeBSD-locales-15.0.a2.20250912171634 Locale definitions
FreeBSD-lp-15.0.a2.20250919040617 Printer subsystem
FreeBSD-mandoc-15.0.a2.20250919040617 Online manual page reader
FreeBSD-mlx-tools-15.0.a2.20250919040617 Mellanox Utilities
FreeBSD-mtree-15.0.a2.20250919172630 MTREE Files
FreeBSD-natd-15.0.a2.20250919040617 Network Address Translation (NAT) daemon for ipfw
FreeBSD-natd-dev-15.0.a2.20250912171634 Network Address Translation (NAT) daemon for ipfw (development files)
FreeBSD-netmap-15.0.a2.20250919040617 Netmap Library and Utilities
FreeBSD-netmap-dev-15.0.a2.20250912171634 Netmap Library and Utilities (development files)
FreeBSD-newsyslog-15.0.a2.20250919040617 Create and rotate system log files
FreeBSD-nfs-15.0.a2.20250919040617 NFS Utilities
FreeBSD-ntp-15.0.a2.20250919040617 Network Time Protocol server and client
FreeBSD-nuageinit-15.0.a2.20250919040617 CloudInit support scripts
FreeBSD-nvme-tools-15.0.a2.20250919040617 NVME Utilities
FreeBSD-openssl-15.0.a2.20250919040617 OpenSSL Utility
FreeBSD-openssl-dev-15.0.a2.20250912171634 OpenSSL Utility (development files)
FreeBSD-openssl-lib-15.0.a2.20250912171634 OpenSSL Utility (libraries)
FreeBSD-periodic-15.0.a2.20250919040617 Run periodic system functions
FreeBSD-pf-15.0.a2.20250919040617 OpenBSD packet filter
FreeBSD-pf-dev-15.0.a2.20250912171634 OpenBSD packet filter (development files)
FreeBSD-pkg-bootstrap-15.0.a2.20250919040617 pkg(7) bootstrap utility
FreeBSD-ppp-15.0.a2.20250919040617 Userland PPP implementation
FreeBSD-quotacheck-15.0.a2.20250919040617 Filesystem quota consistency checker
FreeBSD-rc-15.0.a2.20250919040617 rc(8) subsystem
FreeBSD-rcmds-15.0.a2.20250919040617 BSD/SunOS remote status commands
FreeBSD-rdma-15.0.a2.20250919040617 RDMA Utilities
FreeBSD-rescue-15.0.a2.20250918162547 Rescue Utilities
FreeBSD-resolvconf-15.0.a2.20250919040617 A framework for managing multiple DNS configurations
FreeBSD-rip-15.0.a2.20250919040617 RIP routing protocol
FreeBSD-runtime-15.0.a2.20250919040617 Core system
FreeBSD-runtime-dev-15.0.a2.20250918085708 FreeBSD Base System (development files)
FreeBSD-sendmail-15.0.a2.20250919040617 sendmail mail transport agent
FreeBSD-set-base-15.0.a2.20250919040617 Base system (metapackage)
FreeBSD-set-devel-15.0.a2.20250919040617 Development tools (metapackage)
FreeBSD-set-minimal-15.0.a2.20250919040617 Basic multi-user system (metapackage)
FreeBSD-smbutils-15.0.a2.20250919040617 SMB Utilities
FreeBSD-smbutils-dev-15.0.a2.20250912171634 SMB Utilities (development files)
FreeBSD-ssh-15.0.a2.20250919040617 Secure Shell Utilities
FreeBSD-ssh-dev-15.0.a2.20250912171634 Secure Shell Utilities (development files)
FreeBSD-syscons-data-15.0.a2.20250912171634 syscons(4) fonts and keymaps
FreeBSD-syslogd-15.0.a2.20250919040617 System logging daemon
FreeBSD-tcpd-15.0.a2.20250919040617 TCP Wrapper utilities
FreeBSD-tcpd-dev-15.0.a2.20250912171634 TCP Wrapper utilities (development files)
FreeBSD-telnet-15.0.a2.20250919040617 Telnet client
FreeBSD-toolchain-15.0.a2.20250919040617 Utilities for program development
FreeBSD-toolchain-dev-15.0.a2.20250912171634 Utilities for program development (development files)
FreeBSD-ufs-15.0.a2.20250919040617 UFS Libraries and Utilities
FreeBSD-ufs-dev-15.0.a2.20250919040617 UFS Libraries and Utilities (development files)
FreeBSD-ufs-lib-15.0.a2.20250919040617 UFS Libraries and Utilities (libraries)
FreeBSD-unbound-15.0.a2.20250919040617 Unbound DNS Resolver
FreeBSD-unbound-dev-15.0.a2.20250916142656 Unbound DNS Resolver (development files)
FreeBSD-utilities-15.0.a2.20250919195855 Non-vital programs and libraries
FreeBSD-utilities-dev-15.0.a2.20250915044833 Non-vital programs and libraries (development files)
FreeBSD-vi-15.0.a2.20250919040617 Text editor
FreeBSD-vt-data-15.0.a2.20250912171634 vt(4) fonts and keymaps
FreeBSD-wpa-15.0.a2.20250919040617 802.11 Supplicant
FreeBSD-yp-15.0.a2.20250919040617 Yellow Pages (YP) / Network Information Service (NIS)
FreeBSD-zfs-15.0.a2.20250919040617 ZFS Libraries and Utilities
FreeBSD-zfs-dev-15.0.a2.20250919040617 ZFS Libraries and Utilities (development files)
FreeBSD-zfs-lib-15.0.a2.20250919040617 ZFS Libraries and Utilities (libraries)
FreeBSD-zoneinfo-15.0.a2.20250912171634 Timezone database

Es sind so viele Pakete, da man erreichen möchte, dass nicht mehr jeder Nutzer zwingend das komplette Basisystem installieren muss. Für normale Systeme ist das eher uninteressant, aber so lassen sich z.B. schlanke Jails erstellen.

Weil niemand mit so vielen Paketen arbeiten will und es einen Weg geben muss, in der Zukunft hinzukommende Pakete automatisch zu installieren
bzw. weggefallene Pakete zu deinstallieren, gibt es eine Metapakete. Sie werden als Sets bezeichnet. In meinem Beispiel is nur eines
installiert:

  • FreeBSD-set-base: Das vollständige Basisystem. Beinhaltet Abhängigkeiten auf die meisten anderen Sets.

Die anderen Sets sind:
  • FreeBSD-set-base-dbg: Debugsymbole für das Basisystem
  • FreeBSD-set-devel: Entwicklertools
  • FreeBSD-set-devel-dbg: Debugsymbole für ENtwicklertools
  • FreeBSD-set-kernels: GENERIC und alternativer Kernel wie MINIMAL
  • FreeBSD-set-kernels-dbg: Debugsymbole für Kernel
  • FreeBSD-set-lib32: 32 Bit Kompatibilität
  • FreeBSD-set-lib32-dbg: Debugsymbole für 32 Bit Kompatibilität
  • FreeBSD-set-minimal: Minimal lauffähiges Basissystem
  • FreeBSD-set-minimal-dbg: Debugsymbole für das minimale Basisystem
  • FreeBSD-set-minimal-jail: Minimal lauffähiges Basissystem für Jails
  • FreeBSD-set-minimal-jail-dbg: Debugsymbole für minimale Jails
  • FreeBSD-set-src: /usr/src
  • FreeBSD-set-tests: /usr/lib/tests

Sets sind als vital markiert, sodass das vollständige Basisystem (die Sets selber und alle anderen Komponenten als deren Abhängigkeiten) aufkeinen Fall deinstalliert werden.

Updates innerhalbs eines Releases sind dann:
  • pkg update ; pkg upgrade aktualisiert alle Ports und das Basisystem.
  • pkg --repository FreeBSD-base update ; pkg --repository FreeBSD-base upgrade aktualisiert nur das Basisystem.
  • pkg --repository FreeBSD-ports update ; pkg --repository FreeBSD-ports upgrade aktualisiert nur nur die Ports.

Ein Update auf ein neues FreeBSD-Release ist dann:

  1. Passe die Versionsnummer in /etc/pkg/FreeBSD.conf an.
  2. pkg --repository FreeBSD-base update
  3. Zuerst den Kernel: pkg upgrade FreeBSD-kernel-generic
  4. shutdown -r now
  5. Dann das Basissystem: pkg-static --repository FreeBSD-base upgrade
  6. Und zum Schluss den Rest: pkg-static upgrade
  7. shutdown -r now

Wenn man nicht reinstallieren, sondern konvertieren möchte, sollte man zuerst mit freebsd-upgrade auf FreeBSD 14.3 mit allen Updates
aktualisieren. Danach ein ein Backup machen! Wirklich. Macht ein Backup! Kein Backup, kein Mitleid. Anschließend pkgbasify wie unter
https://github.com/FreeBSDFoundation/pkgbasify beschrieben ausführen. Sprich es einmal laufen lassen, bei Abbrüchen die Ursache beheben und einen neuen Versuch starten. Bis man am Ende angekommen ist. Danach wie oben beschrieben mit pkg von 14.3 auf 15.0 aktualisieren.

Ich merge Configs so:

  1. find / -name "*pkgsave"
  2. Alle Funde mit vimdiff behandeln.
  3. find / -name "*pkgsave" -delete

Ich finde es tatsächlich schöner als etcupdate und co. da vimdiffein um Welten besseres Mergetool ist.
 
Zuletzt bearbeitet:
Ich habe diesen Thread erstellt, da wir in den nächsten Wochen und Monaten sicher viel über PKGBASE diskutieren wollen und einige Nutzer Hilfe brauchen. Mir geht es vor allem um technische Dinge, Fragen, Austausch von Best Practices und so weiter. Lass uns bitte die Grundsatzdiskussion pro und contra PKGBASE hier raushalten. Dafür kann ein eigener Thread erstellt werden.

Und auch wenn PKGBASE mit 14.3 funktionsfähig ist, würde ich dazu raten zum Testen gleich mit FreeBSD 15.0 (derzeit 15.0-ALPHA2) anzufangen. Denn gerade in den letzten Wochen wurde jede Menge Kritik eingearbeitet, die Änderungen sind in 14.3 noch nicht vorhanden.
 
Mir stellen sich da gerade drei Fragen:
1. Welches Set würde ich benutzten, wenn ich nur "base" haben will, ohne dbg/lib32/src/etc?
So wie ich den Post verstehe, würde FreeBSD-set-base auch die anderen Sets mit installieren.

2. Wie installiere/erstelle ich damit eine Jail?
Bisher benutze ich bsdinstall jail /path/to/jail.
Daran ändert sich vermutlich nichts, sondern nur wie ich die Jail aktualisiere?

3. Wie aktualisiere ich eine nicht laufende Jail?
Aktuell fahre ich die Jail einfach runter und aktualisiere die vom Host aus:
Code:
# update
freebsd-update -b /path/to/jail fetch install

# upgrade
freebsd-update --currently-running `/path/to/jail/bin/freebsd-version` -r 14.2-RELEASE -b /path/to/jail upgrade
freebsd-update -b /path/to/jail install
freebsd-update -b /path/to/jail install
 
Zuletzt bearbeitet:
1. Welches Set würde ich benutzten, wenn ich nur "base" haben will, ohne dbg/lib32/src/etc?
Ich würde in den sauren Apfel beißen und einfach FreeBSD-set-base nehmen. Das ist nicht so irre umfangreich und wahrscheinlich auf Dauer schmerzfreier als FreeBSD-set-minimal durch weitere Pakete zu ergänzen. Die Abhängigkeiten sind:

Code:
yamagi@fbsd15:pts/0 ~: pkg info -dx FreeBSD-set-base | sort
	FreeBSD-acct-15.0.a2.20250919040617
	FreeBSD-acpi-15.0.a2.20250919040617
	FreeBSD-apm-15.0.a2.20250919040617
	FreeBSD-atf-15.0.a2.20250919040617
	FreeBSD-atf-lib-15.0.a2.20250919040617
	FreeBSD-audit-15.0.a2.20250919040617
	FreeBSD-autofs-15.0.a2.20250919040617
	FreeBSD-bhyve-15.0.a2.20250919040617
	FreeBSD-blocklist-15.0.a2.20250919040617
	FreeBSD-bluetooth-15.0.a2.20250919040617
	FreeBSD-bsdconfig-15.0.a2.20250919040617
	FreeBSD-bsdinstall-15.0.a2.20250919040617
	FreeBSD-bsnmp-15.0.a2.20250919040617
	FreeBSD-ccdconfig-15.0.a2.20250919040617
	FreeBSD-console-tools-15.0.a2.20250919040617
	FreeBSD-csh-15.0.a2.20250919040617
	FreeBSD-ctl-15.0.a2.20250919040617
	FreeBSD-cxgbe-tools-15.0.a2.20250919040617
	FreeBSD-dma-15.0.a2.20250919040617
	FreeBSD-dtrace-15.0.a2.20250919040617
	FreeBSD-dwatch-15.0.a2.20250919040617
	FreeBSD-ee-15.0.a2.20250919040617
	FreeBSD-efi-tools-15.0.a2.20250919040617
	FreeBSD-examples-15.0.a2.20250912171634
	FreeBSD-fd-15.0.a2.20250919040617
	FreeBSD-ftp-15.0.a2.20250919040617
	FreeBSD-ftpd-15.0.a2.20250919040617
	FreeBSD-games-15.0.a2.20250919040617
	FreeBSD-ggate-15.0.a2.20250919040617
	FreeBSD-gssd-15.0.a2.20250919040617
	FreeBSD-hast-15.0.a2.20250919040617
	FreeBSD-hostapd-15.0.a2.20250919040617
	FreeBSD-ipf-15.0.a2.20250919040617
	FreeBSD-ipfw-15.0.a2.20250919040617
	FreeBSD-iscsi-15.0.a2.20250919040617
	FreeBSD-jail-15.0.a2.20250919040617
	FreeBSD-kerberos-15.0.a2.20250919040617
	FreeBSD-kerberos-kdc-15.0.a2.20250919040617
	FreeBSD-kerberos-lib-15.0.a2.20250912171634
	FreeBSD-kyua-15.0.a2.20250919040617
	FreeBSD-lib9p-15.0.a2.20250915044833
	FreeBSD-libarchive-15.0.a2.20250919040617
	FreeBSD-libbegemot-15.0.a2.20250919040617
	FreeBSD-libblocksruntime-15.0.a2.20250912171634
	FreeBSD-libbsdstat-15.0.a2.20250912171634
	FreeBSD-libbsm-15.0.a2.20250919040617
	FreeBSD-libbz2-15.0.a2.20250912171634
	FreeBSD-libcasper-15.0.a2.20250919040617
	FreeBSD-libcompat-15.0.a2.20250919040617
	FreeBSD-libcuse-15.0.a2.20250919040617
	FreeBSD-libdwarf-15.0.a2.20250919040617
	FreeBSD-libevent1-15.0.a2.20250915044833
	FreeBSD-libexecinfo-15.0.a2.20250919040617
	FreeBSD-libipt-15.0.a2.20250912171634
	FreeBSD-libldns-15.0.a2.20250912171634
	FreeBSD-liblzma-15.0.a2.20250912171634
	FreeBSD-libmagic-15.0.a2.20250919040617
	FreeBSD-libmilter-15.0.a2.20250912171634
	FreeBSD-libpathconv-15.0.a2.20250919040617
	FreeBSD-librpcsec_gss-15.0.a2.20250919040617
	FreeBSD-librss-15.0.a2.20250912171634
	FreeBSD-libsdp-15.0.a2.20250919040617
	FreeBSD-libsqlite3-15.0.a2.20250912171634
	FreeBSD-libstdbuf-15.0.a2.20250919040617
	FreeBSD-libstdthreads-15.0.a2.20250919040617
	FreeBSD-libthread_db-15.0.a2.20250912171634
	FreeBSD-libucl-15.0.a2.20250919040617
	FreeBSD-libvgl-15.0.a2.20250919040617
	FreeBSD-libvmmapi-15.0.a2.20250912171634
	FreeBSD-libyaml-15.0.a2.20250912171634
	FreeBSD-lp-15.0.a2.20250919040617
	FreeBSD-mlx-tools-15.0.a2.20250919040617
	FreeBSD-natd-15.0.a2.20250919040617
	FreeBSD-netmap-15.0.a2.20250919040617
	FreeBSD-nfs-15.0.a2.20250919040617
	FreeBSD-ntp-15.0.a2.20250919040617
	FreeBSD-nvme-tools-15.0.a2.20250919040617
	FreeBSD-openssl-15.0.a2.20250919040617
	FreeBSD-openssl-lib-15.0.a2.20250912171634
	FreeBSD-pf-15.0.a2.20250919040617
	FreeBSD-quotacheck-15.0.a2.20250919040617
	FreeBSD-rcmds-15.0.a2.20250919040617
	FreeBSD-rdma-15.0.a2.20250919040617
	FreeBSD-rip-15.0.a2.20250919040617
	FreeBSD-sendmail-15.0.a2.20250919040617
	FreeBSD-set-devel-15.0.a2.20250919040617
	FreeBSD-set-minimal-15.0.a2.20250919040617
	FreeBSD-smbutils-15.0.a2.20250919040617
	FreeBSD-ssh-15.0.a2.20250919040617
	FreeBSD-syscons-data-15.0.a2.20250912171634
	FreeBSD-tcpd-15.0.a2.20250919040617
	FreeBSD-telnet-15.0.a2.20250919040617
	FreeBSD-unbound-15.0.a2.20250919040617
	FreeBSD-yp-15.0.a2.20250919040617

Bisher benutze ich bsdinstall jail /path/to/jail.
Daran ändert sich vermutlich nichts, sondern nur wie ich die Jail aktualisiere?

Genau. Ich habe es eben ausprobiert. Es fragt, ob die PKGBASE oder den traditionellen Weg möchtest. Beim traditionellen Weg müsste man dann später mit make installworld aus dem Sourcen aktualisieren. Vielleicht ändert sich an der Abfrage aber bis zum Release auch noch was.

Aktuell fahre ich die Jail einfach runter und aktualisiere die vom Host aus:

Ebenfalls mit pkg. Ungefähr, aber ungetestet, so:

Code:
# pkg -r /pfad/zum/jail update
# pkg -r /pfad/zum/jail upgrade

Wenn ich so drüber nachdenke, müsste ich nochmal ausloten, ob das Update der PKGBASE-Pakete aus dem Jail überhaupt funktioniert. freebsd-update versagte in Jails gerne mal, da es Dateien mit dem schg-Attribut nicht verändern konnte. Außer man weichte die Einstellungen des Jails auf.
 
Super, vielen dank für die ganzen Infos :)

Wenn ich so drüber nachdenke, müsste ich nochmal ausloten, ob das Update der PKGBASE-Pakete aus dem Jail überhaupt funktioniert. freebsd-update versagte in Jails gerne mal, da es Dateien mit dem schg-Attribut nicht verändern konnte. Außer man weichte die Einstellungen des Jails auf.
Stimmt, das könnte sogar einer der Gründe sein, warum ich dazu übergegangen bin die von Außen zu aktualisieren (ist schon lange her).
Plus, es ist angenehmer, gerade wenn man mehrere Jails aktualisiert kann man da einfach mit einer for-Schleife drüber.
 
Die sollten da ebenfalls automatisch gemerged werden und ansonsten gibts die .pkgsave Files.
Wie denn, wenn ich pkg nicht dafür nutzen möchte? Nach installworld kann man im Moment entweder per etcupdate oder mergemaster die Konfigurationsdateien mergen. Wenn beide Tools wegfallen, was ist dann die Alternative?

Rob
 
Nach installworld kann man im Moment entweder per etcupdate oder mergemaster die Konfigurationsdateien mergen. Wenn beide Tools wegfallen, was ist dann die Alternative?
Das habe ich schlecht ausgedrückt: Beide Tools bleiben vorhanden und können mit make installworld problemlos genutzt werden. Sie machen nur mit PKGBASE keinen Sinn und anders als bei freebsd-update wird die Datenbank nicht mehr gepflegt. Was aber kein Problem ist, dass man make installworld und PKGBASE eben nicht sinnvoll kombinieren kann. Es ist entweder das eine / oder das andere.
 
Kurz auch mein Senf zur Causa: Ich hab schon mit 14.3 alle meine Systeme mit pkgbasify umgestellt, und habe bisher keine Probleme bemerkt. Zugegeben sind meine FreeBSD Setups nicht übertrieben komplex.
 
Ich habe gerade ein recht komplexes System von FreeBSD 14.2 auf 15.0-ALPHA3 aktualisiert. Es soll mit ALPHA4 etwas weniger hampelig werden und auch das nächste pkg-Release soll noch einige Verbesserungen bringen. Für den Moment muss man aber einige Sonderfälle beachten, zum Beispiel versucht pkg sich selbst zu früh zu aktualisieren und stürzt ab. Die Folge ist ein halb-geschrottetes System.

Code:
1. Erstmal normal mit `freebsd-update` auf FreeBSD 14.3-p3 aktualisieren.

2. Jetzt ein Backup machen. Oder in diesem Fall einen Snapshot der VM. Bei ZFS Boot Enviroments ist jetzt ein guter Zeitpunkt ein weitere Environment zu erstellen, sodass man später wieder in das unveränderte 14.3 rebooten kann.

3. Mit `pkgbasify` das System auf PKGBASE umstellen. Bei mir lief es problemlos durch:
   % fetch https://github.com/FreeBSDFoundation/pkgbasify/raw/refs/heads/main/pkgbasify.lua
   % chmod +x pkgbasify.lua
   % ./pkgbasify.lua

4. pkgbasify bittet am Ende darum, dass man einige Dateien manuell prüft. Das sollte man machen, denn geschrottete Passwortdateien zu fixen ist mehr Aufwand als einmal reinzuschauen.

5. Zum ersten Mal rebooten.

6. Die pkg-Repos zum ersten Mal anpassen. Es sind drei Repos, die je nach Anpassungsgrad an unterschiedlichen Stellen konfiguriert sein können. Da 15.0 noch nicht veröffentlicht ist, gibt es nur Latest-Pakete. Am Ende braucht man 3 Repos mit diesen URLs:
   * FreeBSD: pkg+https://pkg.FreeBSD.org/${ABI}/latest
   * FreeBSD-kmod: pkg+https://pkg.FreeBSD.org/${ABI}/kmods_latest
   * pkg+https://pkg.FreeBSD.org/${ABI}/base_latest

7. Jetzt die Signaturen der Repos holen. Fehler zu OSVERSION kann man ignorieren bzw. wegdrücken. Wir sind auf 14.x, das Repo ist aber für 15.x, weshalb pkg sich korrekterweise beschwert. pkg wird außerdem dazu auffordern sich selbst mit 'pkg bootstrap -f' zu aktualisieren. Das auf keinen Fall machen, da das Binary für 15.x auf unserem 14.3 nicht funktionieren wird. Hinterher schauen, dass für alle drei Repos erfolgreich Signaturen gezogen wurden:
   % pkg -o ABI=FreeBSD:15:amd64 update -f

8. Von diesem Punkt an wird nur noch das eigentlich für Rettungszwecke gedachte pkg-static genutzt, um die Abhängigkeit ggü. dem Basissystem zu minimieren.

9. Im ersten Schritt habe ich alle Pakete heruntergeladen. Es gibt ein paar Randfälle, wo pkg erst nachdem es die Pakete wirklich verarbeitet eventuell geänderte Abhängigkeiten erkennt. Dennoch sollte es den absoluten Großteil herunterladen und die nächsten Schritte unabhängig vom Netzwerk machen:
   % pkg-static -o ABI=FreeBSD:15:amd64 upgrade --fetch-only

10. Einer der Dinge, die sich noch ändern werden ist, dass sich pkg gerne zu früh selbst aktualisiert und damit schrottet. Um das zu verhindern, wird das Paket gelockt:
   % pkg lock -y pkg

11. Jetzt den Kernel aktualisieren:
   % pkg-static -o ABI=FreeBSD:15:amd64 upgrade FreeBSD-kernel-generic

12. Und zum zweiten Mal rebooten.

13. Das Basissystem aktualisieren. Da sich die Zuordnung welche Datei in welchem Paket ist zwischen 14.3 und 15.0 ändert, wird es einige kollidierende Dateien geben. Das ist normal und kann ignoriert werden:
   % pkg-static -o ABI=FreeBSD:15:amd64 upgrade -r FreeBSD-base

14. Und die Ports bzw. deren Pakete aktualisieren:
   % pkg-static -o ABI=FreeBSD:15:amd64 upgrade

15. Die Configs mergen:
   % find /etc -name "*pkgsave"
   % # Funde mit 'vimdiff' oder so behandeln
   % find /etc -name "*pkgsave" -delete

16. Alle Pakete des Basisystem sollen als automatisch installiert markiert sein. Ausnahmen sind die Metapakete der Sets und der Kernel. ichwar faul und hab mit tolle Dinge mit awk gespart, es stattdessen manuell in drei Schritten gemacht:
   % pkg-static set -A 1 -y --glob "FreeBSD-*
   % pkg-static set -A 0 -y FreeBSD-kernel-generic
   % pkg-static set -A 0 -y --glob "FreeBSD-set-*"

17. pkg selbst aktualisieren:
   % pkg unlock -y pkg
   % pkg bootstrap -f

18. Das Repo FreeBSD wurde in FreeBSD-ports umbenannt, um konsistent zu den beiden anderen Repos ist. Es ist extrem wichtig an dieser Stelle sicherzustellen, dass es in den Configs nur das repo FreeBSD-ports und nicht mehr das Repo FreeBSD gibt. Sonst wird das gleiche Repo doppelt referenziert und das wird Ärger machen.

19. Zum Schluss alle Pakete, die zwischen 14.3 und 15.0 sowie durch Änderungen an den normalen Paketen weggefallen sind, entfernen:
   % pkg autoremove

20. Den Cache löschen:
   % pkg clean

21. Der dritte und letzte Reboot.

Das so aktualisierte System kann dann normal mit pkg aktualisiert werden. Ich mache Basisystem und Ports getrennt, aber das kann man sehen wie man will. Letztendlich fehlen da noch die Praxiserfahrungen. Ich denke, dass 15.0 schon jetzt stabil genug sein sollte, dass man den Kernel nicht mehr gesondert behandeln muss.

Code:
1. Signaturen aktualisieren.
   % pkg update

2. Das Basisystem.
   % pkg upgrade -r FreeBSD-base

3. Alles andere.
   % pkg upgrade

4. Nach Basisystemupdates sollte man rebooten.

Genauso kann man nur die Pakete der Ports aktualisieren und das Basissystem ausklammern.
 
Zurück
Oben