163 lines
5.1 KiB
Markdown
163 lines
5.1 KiB
Markdown
# 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
|
|
``` |