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
```

View File

@ -0,0 +1,108 @@
getestet auf fatnetbox01 (vm) und fapelastic30-34
Boot Environment erstellen und in /mnt einhängen
```
bectl create 141
mkdir /mnt/141
bectl mount 141 /mnt/141
```
Heruntergeladene 14.1-RELEASE base und kernel txz auf Host kopieren und in eingehangenes Boot Environment entpacken
```
tar -xf base.txz -C /mnt/141 --unlink #wirft einige Fehler (not a directory), das ist okay
tar -xf kernel.txz -C /mnt/141 --unlink
```
Dateien kopieren anhand von https://git.cc.bka/projektecc15/projekte_ansible/systemkonfiguration/klara-postgres-cluster/-/blob/main/ansible/files/syncbe.conf?ref_type=heads
Zum Starten reicht hier meist
- `passwd`
- `master.passwd`
- `group`
- `*.db`
- `sshd_config`
Bestenfalls mit diff vergleichen
```
cd /mnt/141
git diff /etc/ssh/sshd_config /mnt/141/etc/ssh/sshd_config
cp /etc/ssh/sshd_config /mnt/141/etc/ssh/sshd_config
git diff /etc/passwd /mnt/141/etc/passwd
cp /etc/passwd /mnt/141/etc/passwd
git diff /etc/group /mnt/141/etc/group
cp /etc/group /mnt/141/etc/group
cp /etc/*.db /mnt/141/etc/
git diff /etc/master.passwd /mnt/141/etc/master.passwd
cp /etc/master.passwd /mnt/141/etc/master.passwd
```
Eventuell müssen die master.passwd Änderungen noch angewendet werden:
```
chroot /mnt/141 #boot env als chroot betreten
pwd_mkdb /etc/master.passwd
exit #aus boot env chroot raus
```
ggf. noch weitere (siehe Link) wie Zeitzone, resolv.conf etc. siehe unten.
Testen:
```
bectl activate -t 141
reboot
```
FreeBSD Version kontrollieren:
```
freebs-version -kru
```
Wenn alles klappt permanent Boot Environment verwenden
```
bectl activate 141
```
Danach muss pkg neu installiert werden
```
pkg bootstrap -f
pkg update
```
Weiter für Patches in [PKGBase](PKGBase.md)
Weitere Dateien nach Upgrade prüfen:
im besten Fall via DIFF vergleichen falls Neuerungen in dem Update dazu kamen.
```
/etc/resolv.conf
/etc/ssh/moduli
/etc/ssh/host-keys
/etc/rc.conf
/etc/services (checkmk)
/etc/inetd.conf (checkmk)
/etc/rc.conf.d/inetd
/etc/rc.conf.d/jail
/etc/rc.conf.d/ntpd
/etc/ssh-banner
/etc/localtime
/etc/passwd
/etc/master.passwd
/etc/group
/etc/*.db
/etc/jail.conf.d/*.conf
/etc/ntp.conf
/etc/fstab
/etc/crontab/periodic
boot/loader.conf
```
# ZFS Image für Boot Environment erstellen
*Doku siehe klara-mariadb-cluster/doc/upgrades*
Login auf fippuder02
Neues Poudriere Jail erstellen:
```
poudriere jail -c -j 141BEbuilderamd64 -v 14.1-RELEASE -K GENERIC
```
Dann das Image erstellen:
```
poudriere image -t zfs+send+be -j 141BEbuilderamd64 -s 4G -h '' -o /usr/local/poudriere/images -n 141BE
```
Dieses landet dann in /usr/local/poudriere/images

107
t/poudriere_image_bauen.md Normal file
View File

@ -0,0 +1,107 @@
*nicht getestet*
# Image in poudriere bauen
jail erstellen
```
poudriere jail -c -j 14amd64image -v 14.1-RELEASE -K GENERIC
```
```
poudriere image -t firmware -j 14amd64image -s 4g -h 14amd64image-hostname -n 14amd64image
```
-t image type
-j jail
-s size
-p portstree aus dem die images genommen werden
landet in `/usr/local/poudriere/data/images/14amd64image.img`
types siehe `man poudriere-image`
image temporär mounten
```
mdconfig -a -t vnode -f /usr/local/poudriere/data/images/14amd64image.img
gpart show -l md0
mount /dev/md0p3 /mnt/
```
eigenes Repo für ports anlegen
```
poudriere ports -c -p 14amd64imageports
```
Ports Liste anlegen
`/usr/local/etc/poudriere.d/14amd64imageports.list`
```
lang/python311
```
portstre bauen
```
poudriere bulk -j 14amd64 -p 14amd64imageports -f /usr/local/etc/poudriere.d/14amd64imageports.list
```
image erstellen
```
poudriere image -t firmware -j 14amd64 -s 4g -p 14amd64imageports -h 14amd64image-hostname -n 14amd64image -c /tmp/image -f 14amd64imageports.list
```
mit -c kann ein pfad angegeben werden, dessen Inhalt ins Jail gemountet wird.
-A würde ein shell Skript einfügen was am Ende ausgeführt wird
In diesem Fall wurde in /tmp/image ein Ordner root/.ssh/ mit authorized_keys erstellt um den SSH Key ins Image zu bekommen.
# Eigenes Installer ISO bauen
Jail erstellen
```
poudriere jail -c -j 142imageamd64 -v 14.2-RELEASE -K GENERIC
```
Paket Liste erstellen
```
vim /usr/local/etc/poudriere.d/142imageamd64.list
```
mit Inhalt (und ggf. weiteren Paketen)
```
lang/python
```
pakete bauen
```
poudriere bulk -j 142imageamd64 -f /usr/local/etc/poudriere.d/142imageamd64.list
```
in Image zu integrierende Dateien anlegen in `/usr/local/poudriere/images/overlay`
```
root@fippuder02:/usr/local/poudriere/images/overlay # tree -a
.
├── etc
│   ├── rc.local
│   └── ssh
│   └── sshd_config
├── root
│   └── .ssh
│   └── authorized_keys
└── usr
├── freebsd-dist
│   ├── MANIFEST
│   ├── base.txz
│   └── kernel.txz
└── local
└── etc
└── pkg
└── repos
├── FreeBSD.conf
└── poudriere.conf
```
Installer braucht /etc.rc.local um direkt beim Starten aufgerufen zu werden. Diese wurde aus einem offiziellen Installationsimage kopiert.
/usr/freebsd-dist enthält Installationsdateien für Installer.
Angepasste base.txz erzeugen:
```
poudriere image -t tar -j 142imageamd64 -f /usr/local/etc/poudriere.d/142imageamd64.list -s 4G -h '' -o /usr/local/poudriere/images/ -c /usr/local/poudriere/images/overlay/ -n base
```
und aus /usr/local/poudriere/images in overlay/usr/freebsd-dist verschieben
kernel.txz und Manifest von https://download.freebsd.org/ftp/releases/amd64/14.2-RELEASE/ herunterladen und in Ordner kopieren. Manifest anpassen (sha256sum von base.txz und zusätzliche Einträge außer base und kernel entfernen).
pkg repo config anlegen und authorized_keys in root/.ssh anlegen.
Image bauen
```
poudriere image -t hybridiso -j 142imageamd64 -f /usr/local/etc/poudriere.d/142imageamd64.list -s 4G -h '' -o /usr/local/poudriere/images/ -c /usr/local/poudriere/images/overlay/ -n 142imageamd64
```
Nach der Installation muss dann noch mit `rm /etc/rc.local` die rc.local entfernt werden damit beim booten nicht der Installer startet.
Zudem muss die sshd_config angepasst werden, damit PermitRootLogin aktiviert ist.