# Upgrade FreeBSD von 13.2 zu 14.1 oder 13.3 mit pkgbase Quellen: https://wiki.freebsd.org/PkgBase https://vermaden.wordpress.com/2023/12/09/personal-freebsd-pkgbase-update-server/ ## PKGBase Mirror Server erstellen In unserem Fall auf fippuder01.cc.bka ``` cd /usr/src #git clone https://github.com/freebsd/freebsd-src.git . #git fetch --all #git reset --hard origin/main #wirft alle Änderungen weg git pull git checkout releng/14.1 --force make -j48 buildworld && make -j48 buildkernel && make -j48 packages ``` Branches: https://github.com/freebsd/freebsd-src/branches Über den `git checkout releng/13.3` kann über den Branch zwischen Versionen gewechselt werden. Der Make Befehl erstellt die Pakete und legt sie unter `/usr/obj/usr/src/repo/FreeBSD:14:amd64/14.1p2` ab (je nach Version). ### ccache /etc/make.conf ``` CCACHE_DIR=/var/cache/ccache WITH_CCACHE_BUILD=yes ``` ### nginx config In der NGINX Config wird der Pfad mit den Paketen dann freigegeben `vim /usr/local/etc/nginx/nginx.conf` ``` location /FreeBSD:14:amd64 { alias /usr/obj/usr/src/repo/FreeBSD:14:amd64/; autoindex on; } ``` ``` service nginx reload ``` Bzw. für 13.3 jeweils checkout releng/13.3 und location/repo FreeBSD:13:amd64 ### Neue Version erstellen: Analog zu oben in den gewünschten Branch wechseln und build starten. Ggf. muss für neue Versionen (wie 15.0) die NGINX Config angepasst werden. ## Auf den Clients ### Upgrade auf 14.1 Sofern das Verzeichnis noch nicht existiert: `mkdir -p /usr/local/etc/pkg/repos` Erstellen eines upgrade Repos für pkg: `vim /usr/local/etc/pkg/repos/upgrade.conf` ``` freebsd-upgrade: { url = http://pkg.freebsd.org/FreeBSD:14:amd64/14.1p6 enabled = yes } ``` Zum Update muss die ABI der neuen Version als Umgebungsvariable mitgegeben werden. ``` env ABI=freebsd:14:amd64 pkg-static update -r FreeBSD-base-14.1 env ABI=freebsd:14:amd64 IGNORE_OSVERSION=yes pkg-static install -r freebsd-upgrade -g 'FreeBSD-*' ``` Wenn der Fehler `pkg: Fail to rename /usr/include/c++/v1/.pkgtemp.__string.YaGYjRyeEZcE -> /usr/include/c++/v1/__string:Not a directory` auftritt kann `/usr/include` gelöscht, und die Installation erneut versucht werden. ``` rm -rf /usr/include env ABI=freebsd:14:amd64 IGNORE_OSVERSION=yes pkg install -r FreeBSD-base-14.1 -g 'FreeBSD-*' ``` Durch das Update werden alle Konfigurationsdateien in `/etc` mit den Originaldateien überschrieben. Die bearbeiteten Versionen werden in .pkgsave gespeichert. Wird an dieser Stelle ein Neustart ausgeführt gibt es keine User und Passwörter mehr und die sshd_config ist wie bei einem frischen System. Daher werden die wichtigsten pkgsave Dateien zurück kopiert. ``` cp /etc/ssh/sshd_config.pkgsave /etc/ssh/sshd_config cp /etc/master.passwd.pkgsave /etc/master.passwd cp /etc/group.pkgsave /etc/group cp /etc/sysctl.conf.pkgsave /etc/sysctl.conf ``` Passwort Datenbank neu aufbauen: ``` pwd_mkdb -p /etc/master.passwd ``` Alle anderen .pkgsave Dateien können mit folgendem Befehl gelöscht werden, ggf. ist hier zu prüfen welche Dateien sich noch geändert haben. ``` find /etc -name \*.pkgsave -delete rm /boot/kernel/linker.hints ``` Alternativ können auch alle .pkgsave dateien gegen die originale ausgetauscht werden um die Konfiguration vor dem Update wiederherzustellen. ``` bash cd /etc for file in $(ls *.pkgsave); do echo cp $file ${file/.pkgsave/};done etcupdate find /etc -name \*.pkgsave -delete ``` Damit kann ggf. allerdings neue Konfigurationsoptionen in der neuen Version nicht mitgenommen werden, besser wäre ein Diff jeder .pkgsave Datei mit dem Original um etwaige Änderungen zusammen zu führen. Dann kann der Neustart des Clients durchgeführt werden. Mit `freebsd-version -kru`lassen sich die Versionsstände anzeigen. Runtime wird erst durch einen Neustart auf die neue Version gehoben. ``` reboot ``` Nach dem Upgrade muss pkg neu initialisiert und alle Pakete geupdatet werden. An dieser Stelle kann auch das Repository in der upgrade.conf auf `enabled = no` gesetzt werden. `vim /usr/local/etc/pkg/repos/upgrade.conf` ``` upgrade: { url = http://fippuder01.cc.bka/FreeBSD:14:amd64/14.1p2 enabled = no } ``` ``` pkg bootstrap -f pkg update pkg upgrade -y ``` ### Update auf 13.3 Analog zu 14.1, nur einfacher: `vim /usr/local/etc/pkg/repos/upgrade.conf` ``` upgrade { url = http://fippuder01.i.cc.bka/FreeBSD:13:amd64/13.3p4 enabled = yes } ``` ``` pkg-static update -r upgrade rm -rf /usr/include pkg-static install -r upgrade -g 'FreeBSD-*' ``` Auch hier gilt, Konfigurationsdateien zurück kopieren, siehe Upgrade auf 14.1 ``` cp /etc/ssh/sshd_config.pkgsave /etc/ssh/sshd_config cp /etc/master.passwd.pkgsave /etc/master.passwd cp /etc/group.pkgsave /etc/group pwd_mkdb -p /etc/master.passwd service sshd restart cp /etc/sysctl.conf.pkgsave /etc/sysctl.conf find / -name \*.pkgsave -delete rm /boot/kernel/linker.hints reboot pkg bootstrap -f pkg update pkg upgrade -y ``` ## Upgrade von 14.1p6 auf 14.2 upgrade.conf bearbeiten ``` vim /usr/local/etc/pkg/repos/upgrade.conf ``` ``` FreeBSD-base-14.2: { url = http://pkg.freebsd.org/FreeBSD:14:amd64/14.2 enabled = yes } ``` ``` pkg update pkg upgrade shutdown -r now ```