This commit is contained in:
Xavier Beaudouin
2025-03-17 15:29:13 +01:00
parent a97e82ec24
commit 3b54995a82
3 changed files with 378 additions and 0 deletions

163
t/PKGBase.md Normal file
View File

@ -0,0 +1,163 @@
# 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
```