Wer mehrere pfSense-Installationen betreut kommt schnell an den Punkt, an dem es eher unbequem wird sich zu jeder Installation verbinden und das Update mittels Web-Interface anstarten zu müssen. Schneller und automatisierbar geht dies mit einem Befehl.

Mittels “pfSense-upgrade” (Gross-/Kleinschreibung beachten! Bordmittel) kann via ssh das Update bzw. Upgrade auf eine neue Version durchgeführt werden. ssh muss zuvor aktiviert werden:

pfSense – HOWTO enable SSH access

Via ssh verbinden, Punkt “8) Shell” auswählen und folgenden Befehl ausführen:

pfSense-upgrade

Nach kurzer Zeit erscheint eine Abfrage, ob weitergemacht werden soll:

Reboot will be required!!
Proceed with upgrade? (y/N)

Möchte man direkt ohne weitere Abfrage das Upgrade durchführen, fügt man “-y” an den Befehl an. Dabei wird das Upgrade ausgeführt und pfSense automatisch neu gestartet.

Der gesamte Vorgang kann z.B. unter Windows mittels plink als Skript automatisiert werden. In nachfolgendem Beispiel wird zunächst das Upgrade durchgeführt, dann fünf Minuten gewartet und anschließend ein neues selbst-signiertes Zertifikat generiert als auch eingebunden. Für diesen Beitrag wurde eine pfSense-Installation auf Version 3.4.3 aktualisiert und eine erforderliche Nacharbeit, gemeint ist das Zertifikat (Link), durchgeführt.

@echo off

plink.exe -ssh -l root -pw <Passwort> <IP> "pfSense-upgrade -y"
timeout /t 300
plink.exe -ssh -l root -pw <Passwort> <IP> "pfSsh.php playback generateguicert"

Bemerkung 1: Damit plink automatisiert ablaufen kann, muss einmalig eine Verbindung hergestellt und der Schlüssel werden.

Bemerkung 2: Unbedingt den Benutzer “root” verwenden, mit “admin” funktioniert es nicht.

Anbei die weiteren Optionen von “pfSense-upgrade”:

Usage: pfSense-upgrade [-46bdfhnRUy] [-l LOG_PATH] [-p SOCKET_PATH] [-c|-u|-i PKG_NAME|-r PKG_NAME]
        -4          - Force IPv4
        -6          - Force IPv6
        -b          - Platform is booting
        -d          - Turn on debug
        -f          - Force package installation
        -h          - Show this usage help
        -l          - Logfile path (defaults to /cf/conf/upgrade_log.txt)
        -p socket   - Write pkg progress to socket
        -R          - Do not reboot (this can be dangerous)
        -n          - Dry run
        -U          - Do not update repository information
        -y          - Assume yes as the answer to any possible interaction

The following parameters are mutually exclusive:
        -c          - Check if upgrade is necessary
        -i PKG_NAME - Install package PKG_NAME
        -r PKG_NAME - Remove package PKG_NAME
        -u          - Update repository information

Mit “-c” kann auf Updates/Upgrades geprüft werden. Zum vorangehenden Testen kann “-n” benutzt werden. Grundsätzlich sollten Upgrades nicht ungeprüft durchgeführt werden! Zumindest an einer Referenz-Installation zunächst den Vorgang testen, bevor man mittels Skript mehrere Installationen aktualisiert.