diff --git a/t/PKGBase.md b/t/PKGBase.md new file mode 100644 index 0000000..1eb6962 --- /dev/null +++ b/t/PKGBase.md @@ -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 +``` \ No newline at end of file diff --git a/t/Upgrade_FreeBSD_via_Boot_Environment.md b/t/Upgrade_FreeBSD_via_Boot_Environment.md new file mode 100644 index 0000000..7c24604 --- /dev/null +++ b/t/Upgrade_FreeBSD_via_Boot_Environment.md @@ -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 \ No newline at end of file diff --git a/t/poudriere_image_bauen.md b/t/poudriere_image_bauen.md new file mode 100644 index 0000000..880951d --- /dev/null +++ b/t/poudriere_image_bauen.md @@ -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. \ No newline at end of file