Aktionen

NetBox unter Ubuntu 24.04 LTS installieren: Unterschied zwischen den Versionen

Aus znilwiki

K Textersetzung - „Enviroment“ durch „Environment“
 
(23 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 8: Zeile 8:
==Benötigte Programme für Netplan installieren==
==Benötigte Programme für Netplan installieren==
  apt install apache2 postgresql postgresql-common libpq-dev redis-server git certbot python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libssl-dev zlib1g-dev -y
  apt install apache2 postgresql postgresql-common libpq-dev redis-server git certbot python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libssl-dev zlib1g-dev -y
<br>
----
==PostgreSQL Datenbank einrichten==
sudo -u postgres psql
und dann<br>
CREATE USER netbox LOGIN CREATEDB PASSWORD 'password';
CREATE DATABASE netboxdb OWNER netbox;
\connect netbox;
GRANT CREATE ON SCHEMA public TO netbox;
quit;
bei {{code|password}} wählt ihr bitte euer eigenes, bitte keine exotischen Sonderzeichen!<br>
<br>
----
==NetBox Dienstbenutzer anlegen==
useradd -r -d /opt/netbox -s /usr/sbin/nologin netbox
<br>
==NetBox herunterladen==
mkdir /opt/netbox
chown -R netbox:netbox /opt/netbox/
sudo -u netbox /usr/bin/bash
cd ~
pwd
Der Benutzer {{code|netbox}} sollte im Verzeichnis {{code|/opt/netbox}} stehen (Ausgabe von {{code|pwd}}<br>
<nowiki>git clone https://github.com/netbox-community/netbox.git .</nowiki>
Jetzt könnten wir die gewünschte NetBox Version auswählen, dazu geht Ihr auf die Webseite<br>
https://github.com/netbox-community/netbox/releases
und schaut nach welches die aktuelle Version ist.<br>
Bei der Erstellung dieser Anleitung war das
v4.3.1 - 2025-05-13
Dementsprechend lautet der Befehl<br>
git checkout v4.3.1
Ihr könnte das aber auch lassen, dann seit Ihr automatisch auf dem neuesten Branch den Ihr mit
git pull
updaten könntet.<br>
{{Hinweis| Stand 17.05.025 würde ich die Version v4.2.9 nehmen - weil nur zu der die Masse der Plugins kompatibel ist. Nein, ein Downgrade funktioniert NICHT!}}
<br>
----
==NetBox Grundkonfiguration erstellen==
Immer noch als Benutzer {{code|netbox}}<br>
cd /opt/netbox/netbox/netbox
Jetzt müsst Ihr euch einen Secret Key generieren den Ihr euch wegkopiert:<br>
python3 ../generate_secret_key.py
Beispielausgabe:<br>
A6YrYjvHf(7Aoemm+_bC87_XN$yv)(UhQWSM9(!)5CPptpxp7a
Dann die Beispiel-Konfigurationsdatei kopieren und bearbeiten:<br>
cp configuration_example.py configuration.py
nano configuration.py
und die folgenden Abschnitte / Zeilen ändern:<br>
ALLOWED_HOSTS = ['netbox.znil.net','192.168.0.27']
Da tragt Ihr den DNS Namen ein über den Ihr später auf NetBox zugreifen wollt - und die lokale IP-Adresse, dann ginge ein Zugriff auch über diese.<br>
Alternativ ginge auch {{code|<nowiki>ALLOWED_HOSTS = ['*']</nowiki>}} was alle Namen etc. erlauben würde.<br>
Jetzt die Datenbank verbinden:<br>
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',  # Database engine
        <span style="background:yellow">'NAME': 'netbox',      # Database name</span>
        <span style="background:yellow">'USER': 'netbox',        # PostgreSQL username</span>
        <span style="background:yellow">'PASSWORD': 'password',  # PostgreSQL password</span>
        'HOST': 'localhost',      # Database server
        'PORT': '',              # Database port (leave blank for default)
        'CONN_MAX_AGE': 300,      # Max database connection age
    }
}
und den zuvor gespeicherten Secret Key eintragen:<br>
SECRET_KEY = 'A6YrYjvHf(7Aoemm+_bC87_XN$yv)(UhQWSM9(!)5CPptpxp7a'
Ggf. die Mailserver-Einstellungen anpassen:<br>
# Email settings
EMAIL = {
    'SERVER': '192.168.0.10',
    'PORT': 25,
    'USERNAME': '',
    'PASSWORD': '',
    ' USE_SSL': False,
    'USE_TLS': False,
    'TIMEOUT': 10,  # seconds
    'FROM_EMAIL': 'netbox@znil.net',
}
und noch ganz unten<br>
# Time zone (default: UTC)
TIME_ZONE = 'Europe/Berlin'
dann speichern.<br>
<br>
----
==NetBox Setup ausführen==
Immer noch als Benutzer {{code|netbox}}:<br>
/opt/netbox/upgrade.sh
Er richtet nun eine Python Umgebung ein und installiert eventuell notwendige Python-Pakete nach. Das kann eine Weile dauern.<br>
Kommt es zu einem Fehler, z.B. weil die Zugangsdaten zur Datenbank nicht stimmen, korrigiert diese in der Konfigurationsdatei und startet das Skript einfach noch einmal.<br>
Am Ende stand bei mir diese Meldung:<br>
Completed. Total entries: 6
Removing expired user sessions (python3 netbox/manage.py clearsessions)...
Upgrade complete! Don't forget to restart the NetBox services:
  > sudo systemctl restart netbox netbox-rq
<br>
----
==Benutzer für den Zugriff anlegen==
Immer noch als Benutzer {{code|netbox}}:<br>
source /opt/netbox/venv/bin/activate
cd /opt/netbox/netbox
und dann<br>
python3 manage.py createsuperuser
Beispielausgabe:<br>
Username: helmut
Email address: helmut@znil.com
Password:
Password (again):
Superuser created successfully.
<br>
----
==NetBox als Dienst laufen lassen==
Weiterhin als Benutzer {{code|netbox}}:<br>
cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
und diese bearbeiten:<br>
nano /opt/netbox/gunicorn.py
Änderungen:<br>
# The IP address (typically localhost) and port that the NetBox WSGI process should listen on
bind = '127.0.0.1:8001'
Falls Ihr den '''Apache Reverse Proxy''' direkt mit auf der VM mit NetBox laufen lasst, könnt Ihr den Eintrag so lassen.<br>
Falls der Reverse Proxy auf einem anderen System läuft, so solltet Ihr die {{code|127.0.0.1}} in {{code|0.0.0.0}} ändern.<br>
# Number of gunicorn workers to spawn. This should typically be 2n+1, where
# n is the number of CPU cores present.
workers = 5
Meine VM hat nur 2 Kerne, also ändere ich das in
workers = 3
Speichern und per {{code|exit}} zurück zum Benutzer root:<br>
'''Als Benutzer {{code|root}} ausführen!!!'''<br>
cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now netbox netbox-rq netbox-housekeeping
Jetzt sind die Dienst gestartet und NetBox läuft.<br>
<br>
----
==Apache Revers Proxy konfigurieren (auf dem gleichen Server)==
Zuerst die notwendige Apache2 Module aktivieren:<br>
a2enmod headers rewrite proxy_http ssl
Bei Bedarf erstellen wir ein selbst signiertes 10 Jahres Zertifikat für NetBox:<br>
openssl req -x509 -newkey rsa:2048 -nodes -days 3650 -keyout /etc/ssl/private/netbox.key -out /etc/ssl/certs/netbox.crt
Beispielausgabe (Gelb sind Fragen die Ihr beantworten müsst):<br>
...
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:<span style="background:yellow">DE</span>
State or Province Name (full name) [Some-State]:<span style="background:yellow">NI</span>
Locality Name (eg, city) []:<span style="background:yellow">Achim</span>
Organization Name (eg, company) [Internet Widgits Pty Ltd]:<span style="background:yellow">znil.org</span>
Organizational Unit Name (eg, section) []:<span style="background:yellow">netbox</span>
Common Name (e.g. server FQDN or YOUR name) []:<span style="background:yellow">netbox.znil.net</span>
Email Address []:<span style="background:yellow">admin@znil.org</span>
Dann kopieren wir die Konfigurationsvorlagen in das Apache Verzeichnis:<br>
cp /opt/netbox/contrib/apache.conf /etc/apache2/sites-available/netbox.conf
und bearbeiten diese:<br>
nano /etc/apache2/sites-available/netbox.conf
Gelb sind wieder notwendige Änderungen:<br>
<VirtualHost *:80>
    # CHANGE THIS TO YOUR SERVER'S NAME
    ServerName <span style="background:yellow">netbox.znil.net</span>
    <span style="background:yellow">ServerAlias 192.168.0.27</span>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>
<VirtualHost *:443>
    ProxyPreserveHost On
    # CHANGE THIS TO YOUR SERVER'S NAME
    ServerName <span style="background:yellow">netbox.znil.net</span>
    <span style="background:yellow">ServerAlias 192.168.0.27</span>
 
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/netbox.crt
    SSLCertificateKeyFile /etc/ssl/private/netbox.key
    Alias /static /opt/netbox/netbox/static
    <Directory /opt/netbox/netbox/static>
        Options FollowSymLinks MultiViews
        AllowOverride None
        Require all granted
    </Directory>
    <Location /static>
        ProxyPass !
    </Location>
    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
    ProxyPass / http://127.0.0.1:8001/
    ProxyPassReverse / http://127.0.0.1:8001/
</VirtualHost>
Den DNS-Namen und die IP-Adresse passt Ihr an euren Server an.<br>
Dann deaktivieren wir die Default Webseite des Servers:<br>
a2dissite 000-default.conf
und aktivieren die von NetBox:<br>
a2ensite netbox.conf
systemctl reload apache2.service
Jetzt solltet Ihr über die IP-Adresse (und nach einer Zertifikatswarnung) das Webinterface von NetBox erreichen können:<br>
:[[Datei:ClipCapIt-250516-174838.PNG]]<br>
<br>
----
==Noch ein Apache Reverse Proxy davor==
Im lokalen Netzwerk betreibe ich den NetBox-Server mit dem selbst signiertem Zertifikat,<br>
nach Außen habe ich da noch einmal einen zentralen Proxy davor.<br>
Auf diesem verwende ich dann ein Let's Encrypt Zertifikat und folgende Proxy-Einstellungen:<br>
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPass / <span style="background:yellow"><nowiki>https://192.168.0.27/</nowiki></span>
ProxyPassReverse / <span style="background:yellow"><nowiki>https://192.168.0.27/</nowiki></span>
ProxyPreserveHost On
ProxyAddHeaders Off
RequestHeader set X-Forwarded-For "expr=%{REMOTE_ADDR}"
<br>
----
==Python Environment automatisch laden wenn zum Benutzer netbox gewechselt wird==
Wir wechseln zum Benutzer '''''netbox''''':
sudo -u netbox /usr/bin/bash
cd ~
kopieren uns eine {{code|bashrc}} in das Home-Verzeichnis:<br>
cp /etc/skel/.bashrc .
und bearbeiten dessen <code>.bashrc</code><br>
nano /opt/netbox/.bashrc
und hängen nachfolgende Zeilen ganz unten an:
<source lang="bash">
export LC_ALL=de_DE.UTF-8
export LANG=de_DE.UTF-8
export LANGUAGE=de_DE.UTF-8
source /opt/netbox/venv/bin/activate
cd ~
</source>
Wenn Ihr nun zum Benutzer '''''netbox''''' wechselt, wird die Python-Umgebung automatisch geladen und in das Programmverzeichnis von NetBox gewechselt.<br>
Das ist dan ideal um Plugins zu Installieren oder die Umgebung zu updaten.
----
==Plugins installieren==
Die Installation von Plugins wird immer nach dem gleichen Schema laufen, nachfolgend findet ihr Plugins die ich installiert habe.<br>
Unter<br>
Admin => System => Plugins
findet Ihr eine Liste, mit Beschreibungen und auch immer eine Anleitung für die Installation.<br>
Und bis welche Version das Plugin kompatibel ist:<bt>
:[[Datei:ClipCapIt-250517-115511.PNG]]<br>
----
===QR-Code Plugin===
GitHub Seite: https://github.com/netbox-community/netbox-qrcode
Wir wechseln zum Benutzer'''netbox'''<br>
sudo -u netbox /usr/bin/bash
Falld Ihr das automatische Laden des Environment nicht aktiviert habt, müsst Ihr noch<br>
source /opt/netbox/venv/bin/activate
cd /opt/netbox
ausführen.<br>
Plugin installieren:<br>
pip install netbox-qrcode
Plugin aktivieren:<br>
nano /opt/netbox/netbox/netbox/configuration.py
und den folgenden Abschnitt suchen (um die Zeile 183 herum, {{key|Alt}} + {{key|N}} schaltet die Zeilenanzeige links ein, {{key|Alt}} + {{key|N}} schaltet diese unten ein}}:<br>
# Enable installed plugins. Add the name of each plugin to the list.
PLUGINS = []
und ändern diese auf<br>
PLUGINS = ['netbox_qrcode']
Falls da schon etwas drin steht, setzt ein Komma und ergänzt den Wert, also<br>
PLUGINS = ['xyz_plugin','netbox_qrcode']
<br>
Damit das Plugin auch alle Updates/Upgrades überlebt, tragt Ihr in der Datei<br>
nano /opt/netbox/local_requirements.txt
am Ende die Zeile<br>
netbox-qrcode
ein. Ja, beim ersten Plugin gibt es die Datei noch nicht bzw. diese ist leer.<br>
Wechselt dann wieder zum Benutzer '''root''' und startet die Dienste einmal neu:<br>
systemctl restart netbox netbox-rq netbox-housekeeping
In der Weboberfläche unter<br>
Admin => System => Plugins
könnt Ihr nachsehen ob es geladen wurde und läuft.<br>
Gibt es einen Fehler wie<br>
:[[Datei:ClipCapIt-250517-114525.PNG]]<br>
So müsst Ihr auf eine neue Version warten oder Ihr manipuliert die folgende Datei:<br>
nano /opt/netbox/venv/lib/python3.12/site-packages/netbox_qrcode/__init__.py
und ändert dortz die Zeile mit {{code|max_version}}:<br>
class QRCodeConfig(PluginConfig):
    name = 'netbox_qrcode'
    verbose_name = 'qrcode'
    description = 'Generate QR codes for the objects'
    version = __version__
    author = 'Nikolay Yuzefovich'
    author_email = 'mgk.kolek@gmail.com'
    required_settings = []
    min_version = '4.2.0'
    max_version = <span style="background:yellow">'4.3.1'</span>
    ...
anpassen. Ob das Funktioniert ist jedoch ohne Gewähr!<br>
----
==Update/Upgrade / update.sh - vorher Environment entladen==
NetBox updated da einen Tick anders, die {{code|update.sh}} löscht scheinbar bei jedem Aufruf das ganze Python Environment und erstellt dies im Anschluss neu.<br>
Wenn Ihr also den Updater aufruft während das Environment geladen ist, gibt es eine Fehlermeldung wie
--------------------------------------------------------------------
ERROR: Failed to create the virtual environment. Check that you have
the required system packages installed and the following path is
writable: /opt/netbox/venv
--------------------------------------------------------------------
Ihr müsst vorher die Dienste beenden (noch als root):<br>
systemctl stop netbox netbox-rq netbox-housekeeping
dann zum Benutzer NetBox wechseln
sudo -u netbox /usr/bin/bash
Und vor dem Aufruf von {{code|update.sh}} die Umgebung entladen:<br>
deactivate
Jetzt könnt Ihr die Umgebung ggf. auf den letzten Stand bringen:<br>
git pull
./update.sh
danach zurück zum root und die Dienste wieder starten:<br>
exit
systemctl start netbox netbox-rq netbox-housekeeping
<br>
----
==Quellen==
* https://netboxlabs.com/docs/netbox/en/stable/installation/
* https://www.howtoforge.com/how-to-install-netbox-irm-on-ubuntu-24-04-server/
<br>
----
==Kommentare==
<comments />

Aktuelle Version vom 30. Mai 2025, 11:56 Uhr

Changelog:

  • 16.05.2025 erste Version

Installation Ubuntu Server 24.04.x LTS (Long Term Support)


Einstellungen für die VM

Falls Ihr das System als virtuelle Maschine (VM) installiert so könnt Ihr folgenden Einstellungen als Beispiel nehmen.

  • Konfiguration: Typisch
  • Name und Speicherort: Nach eigener Wahl
  • Speicher: Nach eigener Wahl
  • Gastbetriebssystem: (*) Linux --> Ubuntu (64-Bit)
  • Netzwerk:
    • Wie viele Netzwerkkarten möchten Sie anschließen: 1
    • Netzwerk: Nach Wahl (VM Network?)
    • Adapter: VMXNET 3
  • Größe der virtuellen Festplatte:
    • Hängt von der Anzahl der Menge der Daten ab
    • Ich empfehle min 32GB für das Betriebssystem des Servers.
    • Die Festplatte kann bei einer VM nachträglich vergrößert werden - siehe dazu den Abschnitt in diesem Artikel weiter unten
    • Man kann auch jederzeit eine weitere Festplatte anhängen und die Daten dorthin migrieren
    • Thick-Provision Lazy-Zeroed

Danach Einstellungen der VM bearbeiten: Reiter Hardware:

  • Arbeitsspeicher:
    • 4GB oder mehr
  • CPUs:
    • Anzahl der virtuellen Sockets
      • 4 oder mehr
    • Anzahl der Cores pro Socket: 1 (Immer Anzahl der Sockets erhöhen)

Reiter Optionen

  • ...




Grundinstallation

Hinweis: Ich habe die offizielle ISO verwendet: https://ubuntu.com/download/server
Hinweis: Ich installiere mit Absicht OHNE LVM. Ubuntu erstellt inzwischen keine eigene Partition für SWAP mehr und ohne LVM lässt sich der Festplattenplatz bei einer Installation als VM auf einfachste Weise im laufenden Betrieb erweitern. Natürlich ginge das auch mit LVM (mit mehr Schritten), ich sehe hier den Nutzen und Vorteil aber nicht.

CD einlegen und los,
die Fragen beantwortet Ihr wie folgt (sind ggf. die Überschriften der Dialoge):

Try or Install Ubuntu Server
Deutsch
German / German
Wenn er einen neueren Installer findet und fragt ob er auf diesen aktualisieren soll - Ja!
Ubuntu Server
Jetzt könnt Ihr schon die gewünschte feste IP-Adresse einstellen. Wählt dazu mit den Pfeiltasten den ens160 Eintrag aus und drückt Enter:
ens192 => Bearbeite IPv4
Manuell
Bei Subnetz kommt nicht die Subnetzmaske sondern das Netzwerk mit Suffix. Bei einer 24 Maske (= 255.255.255.0) ist das die IP 0 mit Suffix /24
Erledigt
Bei Bedarf, sonst leer lassen
Erledigt
Nutzt die ganze Festplatte ohne LVM (also Haken entfernen). Die Festplatte lässt sich später trotzdem leicht vergrößern
Erledigt
Fortfahren
Den Servernamen festlegen. Ich lege hier den Benutzer installadmin an. Wählt euren Benutzer und Passwort nach Wunsch (Aufschreiben!)
Falls Ihr Ubuntu Pro habt, könnet Ihr es hier aktiveren, ansonsten einfach [Fortfahren]
OpenSSH-Server auswählen => Erledigt (für Zugriff z.B. mit Putty)
Erledigt

Ab jetzt heißt es abwarten. Wenn er kann lädt er gleich ein paar Sicherheitsupdates nach:

Jetzt neustarten
ISO aus der VM entfernen und Enter drücken
Nach dem Reboot wartet ab bis diverse Meldungen abgelaufen sind

PuTTY

Ab dieser Stelle könnt Ihr PuTTY oder den SSH Client eurer Wahl nutzen - was ich dringend empfehle. Denn dann könnt Ihr hier vorgeschlagenen Befehle einfach per Copy&Paste übernehmen.
Die IP-Adresse habt Ihr zu diesem Zeitpunkt ja bereits festgelegt:


Nach der Anmeldung nutze ich immer gerne ein

sudo -i

Damit wechselt man dauerhaft zum root Benutzer und muss nicht vor jedem Befehl ein sudo stellen.


root wieder freischalten

Hinweis: Ob nun wie ich immer als root arbeiten wollt oder aber als einfacher Benutzer und dann immer sudo verwendet müsst Ihr selbst wissen
  • Mit Benutzer installadmin anmelden
sudo -i
  • Kennwort des Benutzer installadmin eintippen
passwd root
  • neues Kennwort für "root" 2x eintippen
  • Lokal Anmelden kann man sich nun mit root - aber eine Anmeldung über SSH funktioniert dann immer noch nicht.
  • Damit diese auch funktioniert müsst ihr die sshd_config bearbeiten:
nano /etc/ssh/sshd_config

sucht nach der Zeile (STRG + W ist Suchen) nach

#PermitRootLogin without-password

und stellt den Cursor in die Zeile.
Drückt nun einmal F9 und 2x F10 - damit erstellt Ihr eine Kopie der Zeile.
Ändert die Kopie wie folgt ab:

PermitRootLogin yes

Speichert die Datei (STRG + x, dann y und Enter) und startet den ssh Dienst neu:

systemctl restart ssh.service

Ab dann klappt es auch mit dem SSH-Login für den Benutzer root, z.B. über puTTY
Jetzt 2x

exit

eintippen wodurch sich das PuTTY Fenster schließt - der (eingeschränkte) Benutzer installadmin hat sich somit abgemeldet

Hinweis:

Ja, ich persönlich arbeite gerne als root und habe diesen für die Anmeldung freigeschaltet. Was ich nicht mache ist das Login per SSH mit Passwort zu erlauben. Ich hinterlege also immer einen SSH-Key für die Anmeldung und nutze diesen statt des Kennwortes. Die Lösung hier ist einfach gehalten, der Profi mögen anpassen wie er es braucht. Ein Anmeldung als eingeschränkter Benutzer geht natürlich auch, das erste was ich dann immer mache ist ein sudo -i um dauerhaft zum root zu wechseln

Anmelden als root

Startet PuTTY wieder und meldet euch diesmal gleich als Benutzer root an.


nano & Co auf Deutsch

nano war eben z.B. noch auf Englisch, mit

apt install -y language-pack-de

ist es (und vieles andere) auf deutsch.


root farbiger Prompt

Als root anmelden:

nano ~/.bashrc

Zeile 39 (Alt + C aktiviert Zeilennummernanzeige):

#force_color_prompt=yes

ändern zu (# entfernen):

force_color_prompt=yes


nun wieder Abmelden - ab der nächsten Anmeldung ist der neue Prompt aktiv.


Wer den sofort haben will (ohne neu Anmelden):

source ~/.bashrc

Bash History aus mehreren Sitzungen gleichzeitig

Wenn man mehr als eine SSH Sitzung zum Zabbix-Server hat, gewinnt in der Bash-Histoy die Sitzung von der man sich zuletzt abmeldet.
Nachfolgende Änderung sorgt dafür das sich alle Sitzungen eine Bash-History teilen, was ich in Session 1 also aufrufe lässt sich sofort danach in Session 2 per Pfeil nach oben oder STRG + R Suche finden.
Dazu bearbeiten man noch einmal die

nano ~/.bashrc

und hängt ganz unten folgendes an:

# don't put duplicate lines in the history. See bash(1) for more options
# ... or force ignoredups and ignorespace
HISTCONTROL=ignoredups:ignorespace:erasedups

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=50000
HISTFILESIZE=50000

# After each command, append to the history file
#  and reread it
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'n'}history -a; history -c; history -r"

Damit es sofort aktiv wird wieder
Wer den sofort haben will (ohne neu Anmelden):

source ~/.bashrc

Ja, HISTSIZE und HISTFILESIZE stehen nun 2x in der Datei, der letzte Eintrag gewinnt.


Feste IP-Adresse vergeben

Der Server hat dank des neuen Setupdialoges nun bereits eine feste IP-Adresse.
Solltet Ihr an dieser etwas ändern müssen so müssen wir erst das Cloud-Init deaktivieren:

nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

Inhalt:

network: {config: disabled}

Dann könnte Ihr in der folgenden Datei etwas ändern, die Warnungen das es einen reboot nicht übersteht könnt Ihr ignorieren, dafür haben wir die andere Datei angelegt.

nano /etc/netplan/50-cloud-init.yaml

Hinweis: Weiter unten deinstalliere ich Cloud-Init komplett (wenn die VM nicht bei einem Hoster läuft), da könnte man sich diesen Schritt hier sparen

Updates einspielen

  • wieder anmelden als root bzw. zum root wechseln
  • Updates suchen für Betriebssystem: (aktualisiert den Katalog aus den Update-Quellen)
apt update
  • Updates einspielen:
apt upgrade -y
  • Nach Update überflüssige Pakete entfernen:
apt autoremove -y


Ich mache das normalerweise immer als Einzeiler:

apt update && apt upgrade -y && apt autoremove -y




VM Integrationsdienste installieren

Wenn euer Zabbix-Server eine VM, eine Virtuelle Maschine, ist, solltest Ihr je nach verwendeten Hypervisor die passenden Integrationsdienste installieren:


VMware

Unter VMware braucht ihr nichts tun, die

apt install open-vm-tools

sind per Default installiert und aktiv. Ist es keine VMware VM, so könnt Ihr die Tools per

apt remove open-vm-tools

entfernen


Hyper-V

In den Einstellungen der VM solltet Ihr hier den Haken setzen:


In der VM die folgende Datei bearbeiten:

nano /etc/initramfs-tools/modules

und ganz unten die folgenden 4 Zeilen anhängen:

hv_vmbus
hv_storvsc
hv_blkvsc
hv_netvsc

Und dann die Tools installieren:

apt -y install linux-virtual linux-cloud-tools-virtual linux-tools-virtual
update-initramfs -u
reboot

Quelle: https://community.veeam.com/blogs-and-podcasts-57/how-to-install-hyper-v-integration-services-in-the-ubuntu-linux-vm-6353


Proxmox PVE

In den Einstellungen der VM den Agenten aktivieren:


Und dann in der VM die Tools installieren:

apt -y install qemu-guest-agent



Multipathing deinstallieren (wenn der Server eine VM ist)

Ab Werk wird nun das

/var/log/syslog

mit Multipath-Meldungen vollgemüllt:

2024-05-27T12:32:47.571374+00:00 ubuntu2404 systemd[1]: Started multipathd.service - Device-Mapper Multipath Device Controller.
2024-05-27T12:32:47.592304+00:00 ubuntu2404 kernel: systemd[1]: Listening on multipathd.socket - multipathd control socket.
2024-05-27T12:32:47.592385+00:00 ubuntu2404 kernel: systemd[1]: Starting multipathd.service - Device-Mapper Multipath Device Controller...
2024-05-27T12:32:48.141146+00:00 ubuntu2404 multipathd[467]: sda: failed to get udev uid: No data available
2024-05-27T12:32:48.141212+00:00 ubuntu2404 multipathd[467]: sda: failed to get path uid
2024-05-27T12:32:48.141278+00:00 ubuntu2404 multipathd[467]: uevent trigger error
2024-05-27T12:32:57.634912+00:00 ubuntu2404 multipathd[467]: sda: triggering change event to reinitialize
2024-05-27T12:32:57.667862+00:00 ubuntu2404 multipathd[467]: sda: failed to get udev uid: No data available
2024-05-27T12:32:57.667930+00:00 ubuntu2404 multipathd[467]: sda: failed to get path uid
2024-05-27T12:32:57.667959+00:00 ubuntu2404 multipathd[467]: uevent trigger error
2024-05-27T12:33:07.637080+00:00 ubuntu2404 multipathd[467]: sda: triggering change event to reinitialize
2024-05-27T12:33:07.676773+00:00 ubuntu2404 multipathd[467]: sda: failed to get udev uid: No data available
2024-05-27T12:33:07.676839+00:00 ubuntu2404 multipathd[467]: sda: failed to get path uid
2024-05-27T12:33:07.676865+00:00 ubuntu2404 multipathd[467]: uevent trigger error
2024-05-27T12:33:17.641466+00:00 ubuntu2404 multipathd[467]: sda: triggering change event to reinitialize
2024-05-27T12:33:17.709843+00:00 ubuntu2404 multipathd[467]: sda: failed to get sysfs uid: No such file or directory
2024-05-27T12:33:17.709915+00:00 ubuntu2404 multipathd[467]: sda: failed to get sgio uid: No such file or directory
2024-05-27T12:33:17.709942+00:00 ubuntu2404 multipathd[467]: sda: failed to get path uid
2024-05-27T12:33:17.709969+00:00 ubuntu2404 multipathd[467]: uevent trigger error
2024-05-27T12:33:28.134951+00:00 ubuntu2404 multipathd[467]: sda: not initialized after 3 udev retriggers
2024-05-27T12:33:29.139933+00:00 ubuntu2404 multipathd[467]: sda: add missing path
2024-05-27T12:33:29.140037+00:00 ubuntu2404 multipathd[467]: sda: failed to get sysfs uid: No such file or directory
2024-05-27T12:33:29.140063+00:00 ubuntu2404 multipathd[467]: sda: failed to get sgio uid: No such file or directory
2024-05-27T12:33:29.140086+00:00 ubuntu2404 multipathd[467]: sda: no WWID in state "undef
2024-05-27T12:33:29.140109+00:00 ubuntu2404 multipathd[467]: ", giving up
2024-05-27T12:33:29.140181+00:00 ubuntu2404 multipathd[467]: sda: check_path() failed, removing

Unter Ubuntu 24.04/22.04 scheint es nicht mehr ganz so schlimm wie unter 20.04 - aber in einer VM macht Multipath keinen Sinn, also deaktivieren und deinstallieren um das Syslog von den Meldungen befreien:

systemctl stop multipathd.service && systemctl disable multipathd.service
apt install kpartx libsgutils2-1.46-2 sg3-utils sg3-utils-udev
apt remove -y multipath-tools && apt purge -y multipath-tools

Die apt install Zeile ist da drin weil diese Pakete ggf. von anderen Anleitung vorausgesetzt werden. Die Pakte werden dadurch auf manuell installiert gesetzt und dann nicht bei einem apt autoremove deinstalliert


Cloud-Init deinstallieren (Wenn es keine VM bei einem Cloudanbieter ist)

Wenn Ihr die VM reboootet und die Console betrachtet tauchen kurz nach dem Reboot (Fehler-)Meldungen zum Cloud-init auf:


Das Cloud-Init ist - wenn ich mich recht erinnere - dafür da falls eure VM z.B. bei Amazon AWS, Azure oder andere Anbieter läuft um z.B. die Netzwerkinformationen vom Hoster/Provider zu erhalten.
Brauchen wir nicht, also weg damit:

echo 'datasource_list: [ None ]' | tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg
apt purge -y cloud-init
rm -rf /etc/cloud/ && sudo rm -rf /var/lib/cloud/
apt install eatmydata libeatmydata1 python-babel-localedata python3-babel python3-jinja2 python3-json-pointer python3-jsonpatch python3-jsonschema python3-markupsafe python3-pyrsistent python3-tz -y
reboot

Die apt install Zeile ist da drin weil diese Pakete ggf. von anderen Anleitung vorausgesetzt werden. Die Pakte werden dadurch auf manuell installiert gesetzt und dann nicht bei einem apt autoremove deinstalliert


OpenIPMI und IPMItool deinstallieren

Bei meinen VMs schlägt der Start dieses Dienstes eh immer fehl (weil es keine passende Hardware gibt), also weg damit:

apt remove openipmi ipmitool -y && apt purge openipmi ipmitool && apt autoremove -y

Unter Hyper-V wird das Paket scheinbar nicht automatisch installiert.


Zeitzone setzen

In meiner VM ist die Uhrzeit zu diesem Zeitpunkt falsch (gebt mal probeweise date ein) - weil der ESXi-Host auf UTC Zeit läuft und die Ubuntu in der VM die richtige Zeitzone nicht eingestellt hat.
Wir korrigieren das mit

timedatectl set-timezone Europe/Berlin

ein

date

sollte dann die richtige Uhrzeit ausspucken.


Zeitserver setzen

Hinweis: Wenn Ihr diesen Schritt überspringt, wird ntp.ubuntu.com als Zeitserver verwendet

Für die Zeitsynchronisierung ist der Dienst systemd-timesyncd.service zuständig, dieser wird über die Datei

nano /etc/systemd/timesyncd.conf

konfiguriert:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it under the
#  terms of the GNU Lesser General Public License as published by the Free
#  Software Foundation; either version 2.1 of the License, or (at your option)
#  any later version.
#
# Entries in this file show the compile time defaults. Local configuration
# should be created by either modifying this file (or a copy of it placed in
# /etc/ if the original file is shipped in /usr/), or by creating "drop-ins" in
# the /etc/systemd/timesyncd.conf.d/ directory. The latter is generally
# recommended. Defaults can be restored by simply deleting the main
# configuration file and all drop-ins located in /etc/.
#
# Use 'systemd-analyze cat-config systemd/timesyncd.conf' to display the full config.
#
# See timesyncd.conf(5) for details.

[Time]
NTP=192.168.1.81
FallbackNTP=192.168.1.198 de.pool.ntp.org
RootDistanceMaxSec=30
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
#ConnectionRetrySec=30
#SaveIntervalSec=60

Sowohl die Liste der NTP= als auch der FallbackNTP= erwartet eine per Leerzeichen getrennte Liste der möglichen Server.
Laut Anleitung hört der Dienst aber beim ersten Treffer auf zu suchen. In der Praxis setzt also einen NTP-Server und ggf. die Fallback. Setzt Ihr einen Wert nicht, lasst diesen also auskommentiert, so gilt der Default-Wert, beim Fallback gilt dann FallbackNTP=ntp.ubuntu.com.
Nach der Änderung müsst Ihr den Dienst einmal neu starten:

systemctl restart systemd-timesyncd.service

und mit folgenden Befehl könnt Ihr den Status abfragen:

timedatectl show-timesync

Beispielausgabe:

LinkNTPServers=fd00::1eed:6fff:fe71:f1c0
SystemNTPServers=192.168.1.81
FallbackNTPServers=192.168.1.198 de.pool.ntp.org
ServerName=192.168.1.81
ServerAddress=192.168.1.81
RootDistanceMaxUSec=30s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=2min 8s
NTPMessage={ Leap=0, Version=3, Mode=4, Stratum=3, Precision=-23, RootDelay=20.324ms, RootDispersion=28.579ms, Reference=C0A801C6, OriginateTimestamp=Tue 2024-06-04 08:22:24 CEST, 
ReceiveTimestamp=Tue 2024-06-04 08:22:24 CEST, TransmitTimestamp=Tue 2024-06-04 08:22:24 CEST, DestinationTimestamp=Tue 2024-06-04 08:22:24 CEST, Ignored=no, PacketCount=2, Jitter=239us }
Frequency=1158037

Wenn die untere Zeile mit NTPMessage= nicht erscheint, habt Ihr ein Problem!
Mit

journalctl -fu systemd-timesyncd.service

könnte Ihr nach dem Grund suchen. Steht da etwas wie Server has to large root distance. Disconnecting und es gegen einen Domänencontroller geht so stellt sicher das

  • Es der PDC ist
  • Dieser sich auch selbst mit einer externen Quelle synchronisiert
  • Stellt ggf. den Wert von RootDistanceMaxUSec=30s noch höher.

Automatische Updates deaktivieren

Ich persönlich möchte nicht das der Zabbix-Server automatisch Updates einspielt.
Die automatischen Updates aktualisieren - soweit ich das beobachten konnte - nur den Kernel. Aber auch das möchte ich nicht. Ich möchte das geplant durchführen.
Die automatischen Updates verhindern wir mit

apt remove -y unattended-upgrades

Automatischen Neustart von Diensten deaktivieren

Wie schon zuvor beschrieben aktualisiere ich Ubuntu (und andere Software aus Repositorien wie Zabbix) gerne per folgenden Einzeiler:

apt update && apt upgrade -y && apt autoremove -y

In neueren Versionen werden dabei Dienste ggf. automatische neu gestartet, es gibt dann eine Meldung wie diese:

systemctl restart apache2.service cron.service fwupd.service mariadb.service open-vm-tools.service packagekit.service polkit.service rsyslog.service snmptrapd.service snmptt.service udisks2.service upower.service vgauth.service zabbix-agent2.service zabbix-web-service.service

Dienste deren Neustart verschoben wurde:
 systemctl restart ModemManager.service
 /etc/needrestart/restart.d/dbus.service
 systemctl restart getty@tty1.service
 systemctl restart systemd-logind.service

Im Normalfall ist es kein Problem. Allerdings scheinen die Abhängigkeiten der Dienste nicht beachtet zu werden.
Zum Beispiel der Zabbix-Server Dienst ist abhängig von der Datenbank, das steht auch so in der /usr/lib/systemd/system/zabbix-server.service:

After=mysql.service
After=mysqld.service
After=mariadb.service

Der automatische Neustart startet aber z.B. MariaDB gnadenlos durch ohne vorher den Zabbix zu beenden. Dabei hängt sich das ganze gerne mal weg. Per {{Key|STRG} + {Key|C} kann man das abbrechen und rebooten, schön ist das aber nicht.
Als Lösung schalte ich inzwischen den automatischen Neustart der Dienste ab, es wird dann nur eine Liste der Dienste ausgegeben die neu gestartet werden müssten:

nano /etc/needrestart/needrestart.conf

und dort ziemlich am Anfang:

# Restart mode: (l)ist only, (i)nteractive or (a)utomatically.
#
# ATTENTION: If needrestart is configured to run in interactive mode but is run
# non-interactive (i.e. unattended-upgrades) it will fallback to list only mode.
#
# UBUNTU: the default restart mode when running as part of the APT hook is 'a',
# unless a specific UI is configured (see below).
#$nrconf{restart} = 'i';

Bei der letzten Zeile entfernen wir das Kommentarzeichen davor und machen aus dem i ein l, wie es auch in der obersten Zeile beschrieben wird:

$nrconf{restart} = 'l';

So werden notwendige Neustarts nur aufgelistet.


Benötigte Programme für Netplan installieren

apt install apache2 postgresql postgresql-common libpq-dev redis-server git certbot python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libssl-dev zlib1g-dev -y



PostgreSQL Datenbank einrichten

sudo -u postgres psql

und dann

CREATE USER netbox LOGIN CREATEDB PASSWORD 'password';
CREATE DATABASE netboxdb OWNER netbox;
\connect netbox;
GRANT CREATE ON SCHEMA public TO netbox;
quit;

bei password wählt ihr bitte euer eigenes, bitte keine exotischen Sonderzeichen!


NetBox Dienstbenutzer anlegen

useradd -r -d /opt/netbox -s /usr/sbin/nologin netbox


NetBox herunterladen

mkdir /opt/netbox
chown -R netbox:netbox /opt/netbox/
sudo -u netbox /usr/bin/bash
cd ~
pwd

Der Benutzer netbox sollte im Verzeichnis /opt/netbox stehen (Ausgabe von pwd

git clone https://github.com/netbox-community/netbox.git .

Jetzt könnten wir die gewünschte NetBox Version auswählen, dazu geht Ihr auf die Webseite

https://github.com/netbox-community/netbox/releases

und schaut nach welches die aktuelle Version ist.
Bei der Erstellung dieser Anleitung war das

v4.3.1 - 2025-05-13

Dementsprechend lautet der Befehl

git checkout v4.3.1

Ihr könnte das aber auch lassen, dann seit Ihr automatisch auf dem neuesten Branch den Ihr mit

git pull

updaten könntet.

Hinweis: Stand 17.05.025 würde ich die Version v4.2.9 nehmen - weil nur zu der die Masse der Plugins kompatibel ist. Nein, ein Downgrade funktioniert NICHT!



NetBox Grundkonfiguration erstellen

Immer noch als Benutzer netbox

cd /opt/netbox/netbox/netbox

Jetzt müsst Ihr euch einen Secret Key generieren den Ihr euch wegkopiert:

python3 ../generate_secret_key.py

Beispielausgabe:

A6YrYjvHf(7Aoemm+_bC87_XN$yv)(UhQWSM9(!)5CPptpxp7a

Dann die Beispiel-Konfigurationsdatei kopieren und bearbeiten:

cp configuration_example.py configuration.py
nano configuration.py

und die folgenden Abschnitte / Zeilen ändern:

ALLOWED_HOSTS = ['netbox.znil.net','192.168.0.27']

Da tragt Ihr den DNS Namen ein über den Ihr später auf NetBox zugreifen wollt - und die lokale IP-Adresse, dann ginge ein Zugriff auch über diese.
Alternativ ginge auch ALLOWED_HOSTS = ['*'] was alle Namen etc. erlauben würde.
Jetzt die Datenbank verbinden:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',  # Database engine
        'NAME': 'netbox',       # Database name
        'USER': 'netbox',         # PostgreSQL username
        'PASSWORD': 'password',   # PostgreSQL password
        'HOST': 'localhost',      # Database server
        'PORT': ,               # Database port (leave blank for default)
        'CONN_MAX_AGE': 300,      # Max database connection age
    }
}

und den zuvor gespeicherten Secret Key eintragen:

SECRET_KEY = 'A6YrYjvHf(7Aoemm+_bC87_XN$yv)(UhQWSM9(!)5CPptpxp7a'

Ggf. die Mailserver-Einstellungen anpassen:

# Email settings
EMAIL = {
    'SERVER': '192.168.0.10',
    'PORT': 25,
    'USERNAME': ,
    'PASSWORD': ,
   ' USE_SSL': False,
    'USE_TLS': False,
    'TIMEOUT': 10,  # seconds
    'FROM_EMAIL': 'netbox@znil.net',
}

und noch ganz unten

# Time zone (default: UTC)
TIME_ZONE = 'Europe/Berlin'

dann speichern.


NetBox Setup ausführen

Immer noch als Benutzer netbox:

/opt/netbox/upgrade.sh

Er richtet nun eine Python Umgebung ein und installiert eventuell notwendige Python-Pakete nach. Das kann eine Weile dauern.
Kommt es zu einem Fehler, z.B. weil die Zugangsdaten zur Datenbank nicht stimmen, korrigiert diese in der Konfigurationsdatei und startet das Skript einfach noch einmal.
Am Ende stand bei mir diese Meldung:

Completed. Total entries: 6
Removing expired user sessions (python3 netbox/manage.py clearsessions)...
Upgrade complete! Don't forget to restart the NetBox services:
  > sudo systemctl restart netbox netbox-rq



Benutzer für den Zugriff anlegen

Immer noch als Benutzer netbox:

source /opt/netbox/venv/bin/activate
cd /opt/netbox/netbox

und dann

python3 manage.py createsuperuser

Beispielausgabe:

Username: helmut
Email address: helmut@znil.com
Password:
Password (again):
Superuser created successfully.



NetBox als Dienst laufen lassen

Weiterhin als Benutzer netbox:

cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py

und diese bearbeiten:

nano /opt/netbox/gunicorn.py

Änderungen:

# The IP address (typically localhost) and port that the NetBox WSGI process should listen on
bind = '127.0.0.1:8001'

Falls Ihr den Apache Reverse Proxy direkt mit auf der VM mit NetBox laufen lasst, könnt Ihr den Eintrag so lassen.
Falls der Reverse Proxy auf einem anderen System läuft, so solltet Ihr die 127.0.0.1 in 0.0.0.0 ändern.

# Number of gunicorn workers to spawn. This should typically be 2n+1, where
# n is the number of CPU cores present.
workers = 5

Meine VM hat nur 2 Kerne, also ändere ich das in

workers = 3

Speichern und per exit zurück zum Benutzer root:
Als Benutzer root ausführen!!!

cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now netbox netbox-rq netbox-housekeeping

Jetzt sind die Dienst gestartet und NetBox läuft.


Apache Revers Proxy konfigurieren (auf dem gleichen Server)

Zuerst die notwendige Apache2 Module aktivieren:

a2enmod headers rewrite proxy_http ssl

Bei Bedarf erstellen wir ein selbst signiertes 10 Jahres Zertifikat für NetBox:

openssl req -x509 -newkey rsa:2048 -nodes -days 3650 -keyout /etc/ssl/private/netbox.key -out /etc/ssl/certs/netbox.crt

Beispielausgabe (Gelb sind Fragen die Ihr beantworten müsst):

...
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:NI
Locality Name (eg, city) []:Achim
Organization Name (eg, company) [Internet Widgits Pty Ltd]:znil.org
Organizational Unit Name (eg, section) []:netbox
Common Name (e.g. server FQDN or YOUR name) []:netbox.znil.net
Email Address []:admin@znil.org

Dann kopieren wir die Konfigurationsvorlagen in das Apache Verzeichnis:

cp /opt/netbox/contrib/apache.conf /etc/apache2/sites-available/netbox.conf

und bearbeiten diese:

nano /etc/apache2/sites-available/netbox.conf

Gelb sind wieder notwendige Änderungen:

<VirtualHost *:80>
    # CHANGE THIS TO YOUR SERVER'S NAME
    ServerName netbox.znil.net
    ServerAlias 192.168.0.27

    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

<VirtualHost *:443>
    ProxyPreserveHost On

    # CHANGE THIS TO YOUR SERVER'S NAME
    ServerName netbox.znil.net
    ServerAlias 192.168.0.27
 
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/netbox.crt
    SSLCertificateKeyFile /etc/ssl/private/netbox.key

    Alias /static /opt/netbox/netbox/static

    <Directory /opt/netbox/netbox/static>
        Options FollowSymLinks MultiViews
        AllowOverride None
        Require all granted
    </Directory>

    <Location /static>
        ProxyPass !
    </Location>

    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
    ProxyPass / http://127.0.0.1:8001/
    ProxyPassReverse / http://127.0.0.1:8001/
</VirtualHost>

Den DNS-Namen und die IP-Adresse passt Ihr an euren Server an.
Dann deaktivieren wir die Default Webseite des Servers:

a2dissite 000-default.conf

und aktivieren die von NetBox:

a2ensite netbox.conf
systemctl reload apache2.service

Jetzt solltet Ihr über die IP-Adresse (und nach einer Zertifikatswarnung) das Webinterface von NetBox erreichen können:




Noch ein Apache Reverse Proxy davor

Im lokalen Netzwerk betreibe ich den NetBox-Server mit dem selbst signiertem Zertifikat,
nach Außen habe ich da noch einmal einen zentralen Proxy davor.
Auf diesem verwende ich dann ein Let's Encrypt Zertifikat und folgende Proxy-Einstellungen:

SSLProxyEngine On
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPass / https://192.168.0.27/
ProxyPassReverse / https://192.168.0.27/
ProxyPreserveHost On
ProxyAddHeaders Off
RequestHeader set X-Forwarded-For "expr=%{REMOTE_ADDR}" 



Python Environment automatisch laden wenn zum Benutzer netbox gewechselt wird

Wir wechseln zum Benutzer netbox:

sudo -u netbox /usr/bin/bash
cd ~

kopieren uns eine bashrc in das Home-Verzeichnis:

cp /etc/skel/.bashrc .

und bearbeiten dessen .bashrc

nano /opt/netbox/.bashrc

und hängen nachfolgende Zeilen ganz unten an:

export LC_ALL=de_DE.UTF-8
export LANG=de_DE.UTF-8
export LANGUAGE=de_DE.UTF-8
source /opt/netbox/venv/bin/activate
cd ~

Wenn Ihr nun zum Benutzer netbox wechselt, wird die Python-Umgebung automatisch geladen und in das Programmverzeichnis von NetBox gewechselt.
Das ist dan ideal um Plugins zu Installieren oder die Umgebung zu updaten.


Plugins installieren

Die Installation von Plugins wird immer nach dem gleichen Schema laufen, nachfolgend findet ihr Plugins die ich installiert habe.
Unter

Admin => System => Plugins

findet Ihr eine Liste, mit Beschreibungen und auch immer eine Anleitung für die Installation.
Und bis welche Version das Plugin kompatibel ist:<bt>



QR-Code Plugin

GitHub Seite: https://github.com/netbox-community/netbox-qrcode Wir wechseln zum Benutzernetbox

sudo -u netbox /usr/bin/bash

Falld Ihr das automatische Laden des Environment nicht aktiviert habt, müsst Ihr noch

source /opt/netbox/venv/bin/activate
cd /opt/netbox

ausführen.
Plugin installieren:

pip install netbox-qrcode

Plugin aktivieren:

nano /opt/netbox/netbox/netbox/configuration.py

und den folgenden Abschnitt suchen (um die Zeile 183 herum, Alt + N schaltet die Zeilenanzeige links ein, Alt + N schaltet diese unten ein}}:

# Enable installed plugins. Add the name of each plugin to the list.
PLUGINS = []

und ändern diese auf

PLUGINS = ['netbox_qrcode']

Falls da schon etwas drin steht, setzt ein Komma und ergänzt den Wert, also

PLUGINS = ['xyz_plugin','netbox_qrcode']


Damit das Plugin auch alle Updates/Upgrades überlebt, tragt Ihr in der Datei

nano /opt/netbox/local_requirements.txt

am Ende die Zeile

netbox-qrcode

ein. Ja, beim ersten Plugin gibt es die Datei noch nicht bzw. diese ist leer.
Wechselt dann wieder zum Benutzer root und startet die Dienste einmal neu:

systemctl restart netbox netbox-rq netbox-housekeeping

In der Weboberfläche unter

Admin => System => Plugins

könnt Ihr nachsehen ob es geladen wurde und läuft.
Gibt es einen Fehler wie


So müsst Ihr auf eine neue Version warten oder Ihr manipuliert die folgende Datei:

nano /opt/netbox/venv/lib/python3.12/site-packages/netbox_qrcode/__init__.py

und ändert dortz die Zeile mit max_version:

class QRCodeConfig(PluginConfig):
    name = 'netbox_qrcode'
    verbose_name = 'qrcode'
    description = 'Generate QR codes for the objects'
    version = __version__
    author = 'Nikolay Yuzefovich'
    author_email = 'mgk.kolek@gmail.com'
    required_settings = []
    min_version = '4.2.0'
    max_version = '4.3.1'
    ...

anpassen. Ob das Funktioniert ist jedoch ohne Gewähr!


Update/Upgrade / update.sh - vorher Environment entladen

NetBox updated da einen Tick anders, die update.sh löscht scheinbar bei jedem Aufruf das ganze Python Environment und erstellt dies im Anschluss neu.
Wenn Ihr also den Updater aufruft während das Environment geladen ist, gibt es eine Fehlermeldung wie

--------------------------------------------------------------------
ERROR: Failed to create the virtual environment. Check that you have
the required system packages installed and the following path is
writable: /opt/netbox/venv
--------------------------------------------------------------------

Ihr müsst vorher die Dienste beenden (noch als root):

systemctl stop netbox netbox-rq netbox-housekeeping

dann zum Benutzer NetBox wechseln

sudo -u netbox /usr/bin/bash

Und vor dem Aufruf von update.sh die Umgebung entladen:

deactivate

Jetzt könnt Ihr die Umgebung ggf. auf den letzten Stand bringen:

git pull
./update.sh

danach zurück zum root und die Dienste wieder starten:

exit
systemctl start netbox netbox-rq netbox-housekeeping



Quellen



Kommentare

Loading comments...