Installation einer neueren PHP-Version auf einem älteren Ubuntu

Es kommt gerade bei den LTS-Versionen von Ubuntu immer häufiger vor, dass eine Software zwingend eine neuere PHP-Version voraussetzt, als auf einem Server mit einem Ubuntu Betriebssystem gerade installiert ist. Wie kann ein solche Herausforderung lösen?

Eine Möglichkeit diese Anforderung zu erfüllen ist ein Upgrade des Ubuntu auf ein neues Release. Oft möchte man dies aber nicht, da es andere Abhängigkeiten gibt, oder weil man nicht jeden Releasewechsel mitmachen möchte. Auch kann es vorkommen, dass selbst das neuste LTS Release ein zu alte Version von PHP beinhaltet. Somit stellt sich die Frage, nach einer Alternative zu einem Releasewechsel.

Dank dem offiziellen Repository für PHP von Ondřej Surý auf Launchpad gibt es eine weitere Lösung. Wenn man dieses Repository einbindet, wird es auch auf eine älteren Release von Ubuntu möglich neuere PHP Versionen zu installieren. Man kann z.B. auch auf einem Ubuntu 16.04 oder 18.04 problemlos ein ganz aktuelles PHP 7.4 installieren.

Um das Repository für PHP von Ondřej Surý bei einem Ubuntu 16.04 einzubinden, gibt man den folgenden Befehl in der Kommandozeile ein.

sudo add-apt-repository ppa:ondrej/php

Danach kann man ein PHP 7.4 mit den folgenden Zeilen installieren.

sudo apt-get update
sudo apt-get install php7.4

Im Anschluss sollte man noch einige Komponenten von PHP 7.4 installieren, welche meistens benötigt werden.

sudo apt-get install php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache

Sobald das durch ist, kann man die Standard PHP-Version innerhalb des Betriebssystem mit den folgende Befehlen festlegen.

sudo update-alternatives --config php
sudo update-alternatives --config php-cgi

Und schon kann man auch Software installieren, die das aktuelle PHP 7.4 voraussetzt …

Ubiquiti Unifi: Releaseupgrade eines Ubuntu 16.04 auf 18.04 mit einer Mongodb

Mehrere Installationen der Software Unifi von Ubiquiti liefen bei mir noch auf einem Ubuntu 16.04 LTS. Da die kostenlosen Sicherheitsupdates für dieses Ubuntu nur noch ein halbes Jahr erscheinen, war es Zeit für ein Releaseupgrade auf Ubuntu 18.04. Gesagt, getan… Nach einem Backup eines der Controller führte ich kurzerhand ein Releaseupgrade durch.

Das eigentliche Releaseupgrade lief ohne Probleme durch. Überraschender Weise startete die Unifi Software aber nicht mehr. Ein Blick in das Logfile /var/log/unifi/server.log der Unifi Software offenbarte, dass die MongoDB nicht mehr erreichbar war.

[2020-08-12 17:40:59,094] <db-server> ERROR system - [exec] error, rc=100
[2020-08-12 17:40:59,095] <db-server> INFO db - DbServer stopped

Ein weiterer Blick in das Logfile /var/log/unifi/mongod.log der MongoDB zeigte, dass der Grund ein zu großer Versionssprung von der vorherigen Version 2.6 der MongoDB war.

2020-08-25T16:44:07.964-0400 F CONTROL  [initandlisten] ** IMPORTANT: UPGRADE PROBLEM: The data files need to be fully upgraded to version 3.4 before attempting an upgrade to 3.6; see http://dochub.mongodb.org/core/3.6-upgrade-fcv for more details.
2020-08-25T16:44:07.964-0400 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2020-08-25T16:44:07.964-0400 I NETWORK  [initandlisten] removing socket file: /usr/lib/unifi/run/mongodb-27117.sock
2020-08-25T16:44:07.964-0400 I REPL     [initandlisten] shutdown: removing all drop-pending collections...
2020-08-25T16:44:07.964-0400 I REPL     [initandlisten] shutdown: removing checkpointTimestamp collection...
2020-08-25T16:44:07.964-0400 I STORAGE  [initandlisten] shutdown: waiting for fs preallocator...
2020-08-25T16:44:07.964-0400 I STORAGE  [initandlisten] shutdown: final commit...
2020-08-25T16:44:07.964-0400 I JOURNAL  [initandlisten] journalCleanup...
2020-08-25T16:44:07.964-0400 I JOURNAL  [initandlisten] removeJournalFiles
2020-08-25T16:44:07.970-0400 I JOURNAL  [initandlisten] old journal file /usr/lib/unifi/data/db/journal/j._0 will be reused as /usr/lib/unifi/data/db/journal/prealloc.0
2020-08-25T16:44:07.976-0400 I JOURNAL  [initandlisten] Terminating durability thread ...
2020-08-25T16:44:08.067-0400 I JOURNAL  [journal writer] Journal writer thread stopped
2020-08-25T16:44:08.067-0400 I JOURNAL  [durability] Durability thread stopped
2020-08-25T16:44:08.067-0400 I STORAGE  [initandlisten] shutdown: closing all files...
2020-08-25T16:44:08.070-0400 I STORAGE  [initandlisten] closeAllFiles() finished
2020-08-25T16:44:08.070-0400 I STORAGE  [initandlisten] shutdown: removing fs lock...
2020-08-25T16:44:08.070-0400 I CONTROL  [initandlisten] now exiting
2020-08-25T16:44:08.070-0400 I CONTROL  [initandlisten] shutting down with code:62

Um das Releaseupgrade erfolgreich durchzuführen, muss man also erst die MongoDB auf Version 3.4 aktualisieren und danach das Releaseupgrade starten. Ein Upgrade der MongoDB macht man am besten mit den Softwarepaketen von MongoDB.org und das geht wie folgt:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
sudo echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org
sudo systemctl unmask mongodb
sudo systemctl restart mongodb

Jetzt sollte die MongoDB auf Version 3.4 aktualisiert sein und man kann gefahrlos das Releaseupgrade auf Ubuntu 18.04 starten. Ein Backup sollte man natürlich dennoch vorsichtshalber machen.

Nach dem Upgrade auf Ubuntu 18.04 ist noch zu empfehlen die MongoDB ein weiteres mal auf die Version 3.6 zu aktualisieren, da es für die Version 3.4 nur bis Januar 2020 Support und Sicherheitsupdates gab. Für die Version 3.6 gibt es selbiges bis April 2021 und diese wird seit der Unifi Version 5.13.10 unterstützt. Das Upgrade geschieht mit den folgenden Befehlen.

wget -qO - https://www.mongodb.org/static/pgp/server-3.6.asc | sudo apt-key add -
echo "deb https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
apt update
apt upgrade
systemctl restart mongodb

Dell OpenNetwork Switches mit OS10

Dell hat im Jahre 2011 die Firma Force10 Networks übernommen. Seit dieser Zeit sind im Portfolio von Dell auch Enterprise Switches zu finden. Seit 2016 laufen einige dieser Switches mit dem auf Debian Linux basierenden OS10.

Das OS10 verwendet einen Standard-Linux-Kernel und bietet Zugriff auf die Netzwerkhardware über das Switch Abstraction Interface (SAI) des Open Compute Project. Ein Projekt das neben Dell von Microsoft, Facebook, Broadcom, Intel und Mellanox unterstützt und verwendet wird. Damit müssen sich Entwickler nicht mehr um die tatsächlich verwendete Switching-Hardware kümmern und können auf offene Standards aufsetzen.

Das OS10 System ist inzwischen sehr ausgereift und bietet nahezu den gleichen Funktionsumfang wie das vorherige OS9. Grund genug für mich mir die OS10 Switches in den letzten Monaten näher anzusehen und bei ersten Projekten einzusetzen. Zumal diese Geräte preislich sehr attraktiv sind.

Meine Erfahrungen in der Praxis mit den Switches sind sehr positiv und ich kann sie durchweg empfehlen. Allerdings sind die Dokumentationen und Updates bei Dell etwas schwierig zu finden. Deshalb schreibe ich mir hier einige wichtige Informationen und Links mal zusammen, um diese immer griffbereit zu haben.

Downloads der Updates für OS10 und Firmware

Über die Dell Webseite sind die Updates und die Firmware nur schwer zu finden. Leichter findet man die Updates in dem sogenannten Dell Digital Locker. Wenn man sich dort mit seinem Benutzer anmeldet, finden man dort die Updates von OS10, sofern man Produkte mit einem laufenden Wartungsvertrag hat, auf denen OS10 läuft.

Eine aktuellere Firmware oder ein aktuelleres BIOS findet man wiederum am einfachsten in der Rubrik Treiber und Downloads auf der Dell Webseite über den Service-Tag oder die genaue Modellbezeichnung des Switches.

Zugriff auf die Konsole

Die Standardeinstellungen bei dem Zugriff auf die Konsole sind wie folgt:

  • 115200 baud rate
  • No parity
  • 8 data bits
  • 1 stop bit
  • No flow control

Sichern der Konfiguration des Switches

Die Konfiguration des Switches kann mit copy über diverse Protokolle gesichert werden. Ich bevorzuge scp. Wichtig ist, dass der Pfad absolut angegeben wird. Bei einem Mac mit der IP-Adresse 192.168.140.157, dem User kristian und dem Passwort test muss man dann den folgenden Befehl eingeben.

copy running-configuration scp://kristian:test@192.168.140.157/Users/kristian/switch-maschen-23

Update des OS10

Ein Update des OS10 kann mit dem Befehl „image download“ durchgeführt werden. Wenn das Update von dem zuvor beschriebenen MacBook aus geladen werden soll und das Image des OS10 den Namen „PKGS_OS10-Enterprise-10.5.0.1P1.433stretch-installer-x86_64.bin“ hat, benötigt man den folgenden Befehl.

image download scp://kristian:test@192.168.140.157/Users/kristian/Downloads/PKGS_OS10-Enterprise-10.5.0.1P1.433stretch-installer-x86_64.bin

Um den Downloadstatus anzuzeigen, folgenden Befehl ausführen.

show image status

Um die heruntergeladene Images anzuzeigen, folgenden Befehl ausführen.

dir image

Zur Installation des heruntergeladenen Images, den folgenden Befehl benutzen.

image install image://PKGS_OS10-Enterprise-10.5.0.1P1.433stretch-installer-x86_64.bin

Der Fortschritt der Installation kann wieder mit folgendem Befehl „show image status“ kontrolliert werden. Nach erfolgreicher Installation muss die Boot Partition geändert werden.

boot system standby

Der Status des Bootimages kann mit folgendem Befehl abgefragt werden.

show boot detail

Sobald das Update erfolgreich ausgeführt wurde, muss der Switch zum Schluss noch einem neu gestartet werden. Dies geschieht mit dem Befehl „reload“. Nach dem Neustart sollte dann die neue OS10 Version gebootet sein. Dies kann mit dem Befehl „show version“ überprüft werden.

Einrichtung einer vlt Domain

Um eine vlt Domain 2 auf einem Switch mit der IP-Adresse „192.168.140.83 einzurichten, der über das Interface „ethernet1/1/1“ und „ethernet1/1/2 mit einem Switch mit der IP-Adresse „192.168.140.84“ verbunden ist, benötigt man die folgenden Konfigurationszeilen.

vlt-domain 2
 backup destination 192.168.140.84
 discovery-interface ethernet1/1/1-1/1/2

Um ein vlt mit dem vlt-port-channel 3 für einen Trunk einzurichten gibt man den folgenden Befehle ein.

interface port-channel3
 description "Name des vlt"
 no shutdown
 switchport mode trunk
 switchport access vlan 3002
 mtu 9216
 vlt-port-channel 3

Um z.B. das Interface „ethernet1/1/3“ diesem vlt hinzuzufügen benötigt man die folgenden Befehle.

interface ethernet1/1/3
 no shutdown
 channel-group 3 mode active
 no switchport
 flowcontrol receive off

Auf dem zweiten Switch muss im Anschluss natürlich die gleiche Konfiguration gemacht werden, wobei die IP-Adresse in der vlt Domain entsprechend angepasst werden muss.

Um im Anschluss die eingerichtete vlt 2 Domain anzuzeigen und den Erfolg zu kontrollieren gibt man den folgenden Befehl ein.

show vlt 2 vlt-port-detail

Installation von Ansible auf einem Windows System

Was ist Ansible? Dies war die Frage, die mir meine Windows-Administratoren stellten, als ich mit der Idee einer Automatisierung von Windows mit Ansible um die Ecke kam. Eine durchaus berechtigte Frage, zumal die Automatisierung und Provisionierung von Windows durch Scripts aktuell noch nicht sehr verbreitet ist. Vielmehr gibt es hier eher grafisch gesteuerte Software wie den System Center Configuration Manager oder Windows Server Update Services.

Ansible ist ein Open-Source Automatisierungs-Werkzeug zur Orchestrierung und allgemeinen Konfiguration und Administration von Computern. Mit der Hilfe von Ansible kann man wiederkehrende Aufgaben bequem simultan auf mehreren System ausführen, ohne dass auf dem jeweiligen System eine zusätzliche Software verwendet wird. Dazu logt sich Ansible via SSH oder RPC auf dem zu administrierenden System ein und führt  vorher definierte Aufgaben aus. Diese Aufgaben werden in sog. Playbooks gespeichert. Playbooks werden im YAML-Format erstellt, erkennbar durch die Endung .yaml. Weitere Infos zur Syntax und Notation von YAML sind in der Ansible-Dokumentation zu finden.

Verwendung von Ansible unter Windows

Ansible basiert auf Python. Dabei erfolgt der eigentliche Zugriff auf das Windows Zielsystem dann ausschließlich über RPC. Ein Zugriff auf UNIX oder Linux erfolgt ausschließlich über SSH. Somit muss auf einem Windows, Linux oder Unix Zielsystem keinerlei zusätzliche Software installiert werden.

Für das Ausführen der Ansible-Skripte auf dem Quellsystem wird logischer Weise Python benötigt. Unter Linux wird ein Python eigentlich immer mitgeliefert. Deshalb kann dort Ansible einfach installiert und gestartet werden. Bei einem Windows System muss zunächst Python installiert werden, bevor man Ansible installiert. Ansonsten läßt sich Ansible nicht starten.

Da ich meinen Windows-Administratoren nicht zumuten wollte mit Linux zu arbeiten, habe ich mich dafür entschieden eine Administrations-Maschine mit Windows aufzusetzen, auf der man die Ansible Skripte direkt starten kann. Hier folgt die Anleitung für die Installation.

Anleitung für die Installation von Ansible unter Windows

Für die Installation der benötigten Software öffnet man unter Windows als Administrator die PowerShell. Hierfür drückt man einfach die Windowstaste, gibt „PowerShell“ ein und wählt nach einem Rechtsklick auf „Windows PowerShell“ den Menüpunkt „Als Adminsitrator ausführen“ aus. Anschließend gibt man in dem Fester mit der PowerShell den folgenden Befehl ein:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Nach der Eingabe möchte der Rechner neu starten. Nach einem Neustart kann man sich bei Windows 10 im Store ein Linux Distribution aussuchen und diese installieren. Dazu öffnen man den Windows Store (dazu wieder einfach die Windows Taste drücken und „Store“ eingeben). Anschließend kann man im Windows Store entweder nach Linux, oder direkt nach der gewünschten Distro suchen und diese installieren.

Bei Windows 2019 Server gibt es leider keinen Store. Hier muss die Linux Distribution von Hand bei Microsoft runtergeladen und installiert werden. Eine Anleitung für die Installationen und eine Liste der Linux Distributionen findet man bei Microsoft auf der Seite https://docs.microsoft.com/en-us/windows/wsl/install-manual. Um die Debian Distribution per PowerShell runterladen und entpacken zu lassen, kann man z.B. die folgenden drei Befehl in einer als „Administrator“ gestarteten PowerShell eingeben:

Invoke-WebRequest -Uri https://aka.ms/wsl-debian-gnulinux -OutFile C:/Debian.appx -UseBasicParsing
Rename-Item C:/Debian.appx C:/Debian.zip
Expand-Archive C:/Debian.zip C:/Debian

Wenn die Befehle ausgeführt wurden, befinden sich die Installationsdaten von Debian Linux in dem Verzeichnis c:\Debian. Die eigentliche Installation startet man dann durch das ausführen der Datei Debian.exe in diesem Verzeichnis als Administrator. Es öffnet sich ein Fenster, in welchem die Installation durchläuft. Nach Abschluss der Installation wird man aufgefordert einen Benutzernamen für den Standardbenutzer und ein dazugehöriges Passwort einzugeben. Danach ist man in einer BASH Shell und kann das Debian Linux Benutzen.

Damit Linux von überall aufrufbar ist, sollte die Umgebungsvariable PATH noch entsprechend erweitert werden. Dies kann man mit den folgenden beiden PowerShell Befehlen machen:

$userenv = [System.Environment]::GetEnvironmentVariable("Path", "User")
[System.Environment]::SetEnvironmentVariable("PATH", $userenv + "C:\Debian;", "User")

Danach kann man sich in einer Kommandozeile die als Administrator gestaltet wurde jeder Zeit durch die Eingabe von „debian.exe“ eine Linux Bash starten.

Als erstes sollte man das installierte Debian auf den aktuellen Stand bringen. Dazu gibt man den Befehl „sudo -s“ ein und man wird um eine erneute eingäbe des Benutzerpasswortes gebeten. Nach der Eingabe erhält man eine root-shell. Wenn man in diese den folgenden eingibt, wird das Debian aktualisiert:

sudo apt update && sudo apt upgrade

Danach wird Python benötigt, da es die Grundlage von Ansible ist. Um Python zu installieren muss der folgende Befehle in eine root-Shell des Linux eigegeben werden:

apt-get -y install python-pip python-dev libffi-dev libssl-dev

Zum Schluss kommt dann die Installation von Ansible. Um immer die neuste Version von Ansible zu installieren, empfehle ich diese über das Python Paketverwaltungsprogramm (kurz Pip) zu machen. Dies geschieht durch die eingäbe des folgenden Befehlt in einer root-shell den Linux:

pip install ansible

Nachdem die Installation durchgelaufen ist, sollte Ansible funktionieren. Für alle weiteren Informationen empfiehlt sich ein Blick in die Ansible Dokumentation.

Let’s Encrypt Zertifikate für Postfix und Dovecot einrichten

In letzter Zeit wird die Verwendung der kostenlosen Zertifikate von Let’s Encrypt immer beliebter. Deshalb ist es naheliegend, diese auch für Verschlüsselung der Mails bei Postfix zu verwenden. Im folgenden sind die wenigen Schritte für die Einrichtung erklärt, die bei einem Ubuntu 18.04 notwendig sind.

Installation

Let’s Encrypt können mit dem certbot erzeugt werden. Die Installation des Programms bei Ubuntu 18.04 erfolgt mit den folgendenBefehlen.

sudo apt update
sudo apt install python-certbot-apache

Erzeugung eines Zertifikates

Das Zertifikat wir mit dem Programm certbot erzeugt. Da die Verifizierung des Host über den Webauftritt erfolgt. Ist es zwingend erforderlich, dass ein Apache auf dem Server installiert ist. Das Programm certbot macht dann die notwendigen Anpassungen an der Konfiguration des Apache Webservers. Mit der Option -d werden die Hostnamen angegeben, für welche das Zertifikat ausgestellt werden soll. Dabei ist es möglich das Zertifikat gleich für mehrere Hostnamen auszustellen. Nach dem ausführen des Programms certbot werden zudem einige Fragen gestellt, deren Beantwortung für das anpassen der Konfiguration des Apache Webservers notwendigen sind. Mit dem folgenden Befehl testet man z.B. das Ausstellen eines Zertifikates für die Hostnamen www.purrucker.de, purrucker.de imap.purrucker.de und smtp.purrucker.de. 

sudo certbot --apache --staging -d www.purrucker.de -d purrucker.de -d imap.purrucker.de -d smtp.purrucker.de

Wenn alles funktioniert, kann man das Kommando ohne die Option „–staging“ ausführen. Dann fordert certbot beim Let’s-Encrypt-Projekt die generierten Zertifikate an, lädt diese herunter, installiert alle erforderlichen Dateien in das Verzeichnis /etc/letsencrypt, verändert die Apache-Konfiguration und startet Apache schließlich neu.

Einbindung des Zertifikates

Die Einbindung des Zertifikates in den Apache Webserver hat das Programm certbot erledigt. Bei Postfix und Dovecot muss die Einbindung jedoch von Hand erfolgen. Bei Postfix fügt man dazu die beiden folgenden Zeilen in die Datei /etc/postfix/main.cf ein.

smtpd_tls_cert_file= /etc/letsencrypt/live/www.purrucker.de/fullchain.pem
smtpd_tls_key_file= /etc/letsencrypt/live/www.purrucker.de/privkey.pem

Bei Dovecot benötigt man die drei folgenden Zeilen in der Datei /etc/dovecot/conf.d/10-ssl.conf.

ssl = yes
ssl_cert = </etc/letsencrypt/live/www.purrucker.de/fullchain.pem
ssl_key  = </etc/letsencrypt/live/www.purrucker.de/privkey.pem

Danach müssen beide Programme einmal neu gestartet werden.

service postfix restart
service dovecot restart

Automatische Erneuerung des Zertifikates

Das Let’s Encrypt Zertifikat ist grundsätzlich immer nur drei Monate gültig. Deshalb ist es notwendig, dieses regelmäßig zu erneuern. Um dies nicht immer von Hand machen zu müssen, sollte man sich dazu einen wöchentlichen Cronjob anlegen. Dazu einfach die Datei /etc/cron.weekly/letsencrypt mit folgendem Inhalt anlegen und ausführbar machen.

#!/bin/sh
# Datei /etc/cron.weekly/letsencrypt
certbot renew
result=$(find /etc/letsencrypt/live/ -type l -mtime -1 )
if [ -n "$result" ]; then
  systemctl restart postfix
  systemctl restart dovecot
fi

IPv6 auf einem Ubuntu 18.04 Server deaktivieren

Selbst in der heutigen Zeit bereiten Server die sowohl eine IPv4 als auch eine IPv6 Adresse haben manchmal Probleme. Deshalb kann es nützlich sein, wenn man die IPv6 Adressen eines Server komplett deaktiviert. Bei Ubuntu 18.04 LTS geht das wie folgt.

Man legt die Datei /etc/sysctl.d/01-disable-ipv6.conf mit dem folgenden Inhalt an und startet den Server hinterher neu.

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Erster Test von Ubuntu 18.04 LTS

Ich habe mir gerade den RC (Release Candidate) von Ubuntu 18.04 LTS angesehen. Das LTS steht bei Ubuntu für Long Term Support und bedeutet, dass es 5 Jahre lang Sicherheitsupdates für die Release von Ubuntu geben wird. Die LTS Version erscheint aktuell alle zwei Jahre und ist durch den langen Zeitraum mit Sicherheitsupdates besonders für Server interessant.

Upgrade auf die neue Version von Ubuntu

Da bei einem Release Candidate ein Einsatz in der Produktion noch nicht sinnvoll ist, gibt es bei den üblichen Hostern und Rechenzentren aktuell natürlich noch kein Image für die Installation des neuen Ubuntu 18.04. Um es dennoch auf einen Server zu bekommen, muss man eine älter Installation aktualisieren. Um die neue Version von Ubuntu auf einen Server in einem Rechenzentrum zu bekommen, habe ich einfach bei einem Server mit einer Installierten Version 16.04 LTS die Datei /etc/apt/sources.list editiert und alle „xenial“ durch „bionic“ ersetzt.

#######################################################################################
# Hetzner APT-Mirror
#
deb http://mirror.hetzner.de/ubuntu/packages  bionic           main restricted universe multiverse
deb http://mirror.hetzner.de/ubuntu/packages  bionic-backports main restricted universe multiverse
deb http://mirror.hetzner.de/ubuntu/packages  bionic-updates   main restricted universe multiverse
deb http://mirror.hetzner.de/ubuntu/security  bionic-security  main restricted universe multiverse
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://de.archive.ubuntu.com/ubuntu/ bionic main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial main restricted
 
## Major bug fix updates produced after the final release of the
## distribution.
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
 
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## universe WILL NOT receive any review or updates from the Ubuntu security
## team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic universe
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial universe
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates universe
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-updates universe
 
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
 
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
 
## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu xenial partner
# deb-src http://archive.canonical.com/ubuntu xenial partner
 
deb http://security.ubuntu.com/ubuntu bionic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
# deb-src http://security.ubuntu.com/ubuntu xenial-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse
# deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse

Danach noch ein schnelles Update der lokalen Paketquellen mit dem folgenden Befehl.

sudo apt update

Und und schon konnte ich die Aktualisierung auf Version 18.04 LTS starten.

sudo apt dist-upgrade

Nachdem die Installation durchgelaufen war und ich den Server neu gestartet hatte, begrüßte mich der Login der neuen Ubuntu Version mit „Welcome to Ubuntu Bionic Beave“.

Mein erster Eindruck

Ubuntu hat wie üblich bei der LTS Version keine großen Experimente gewagt und aller Komponenten auf den aktuellen Stand gebracht. Cononical legt den Fokus bei den LTS-Versionen auf die Stabilität. Dies sieht man z. B. an dem X-Server. Als X-Server kommt immer noch der X-Server von x.org zu Einsatz, obwohl Canonical auf den schnelleren und moderneren X-Server Wayland setzt. Auf die Einführung des neuen Wayland wurde bei Ubuntu 18.04 LTS aber noch bewußt verzichtet, da es bei Wayland mit einigen X-Anwndungen noch Probleme gibt.

Alle Kernkomponenten und auf den aktuellen Stand gebracht worden. In der folgenden Tabelle habe ich mal einige Versionen von Kernkomponenten im Vergleich zu der vorherigen LTS-Version 16.04 zusammengefasst, die für mich immer besonders wichtig sind.

Softwarename Version bei 16.04 LTS Version bei 18.04 LTS
gcc (The GNU Compiler Collection) 5.4 7.3
Apache 2.4.18 2.4.29
php 7.0 7.2
perl 5.22.1 5.26.1
python  3.5.2 3.6.5
MariaDB 10.0.34  10.1.29

Fazit

Das neue Ubuntu 18.04 LTS macht einen soliden und stabilen Eindruck. Alle für mich wichtigen Komponenten wurden auf den aktuellen Stand gebracht und es gab für mich keine großen Überraschungen. Einige Geschwindigkeitstests mit Rechenintensiven Aufgaben haben ergeben, dass das neue Ubuntu um ca. 3-5 % schneller geworden ist. Dies dürfte an dem deutlich neueren GCC liegen. Insgesamt hat Canonical also ein etwas neueres, ein etwas umfangreicheres und ein etwas schnelleres LTS an den Start gebracht. Wenn sich das System in der Praxis jetzt noch als stabil erweist, hat Cononical einen guten Job gemacht.

Bei einem Linux unter VMware im laufenden Betrieb eine Festplatte einbinden

Oft ergibt sich die Notwendigkeit auf einem Server mit Linux im laufenden Betrieb eine neue Festplatte anzuschließen. Z.B. wenn der Server virtuell unter VMware läuft und man diesem eine neue Festplatte zuordnet hat und diese ohne Neustart des Servers einbinden möchte.

Um dies bei einem Server mit Linux zu machen benötigt man als erstes die Nummer des HBA (Host Bus Adapter). Diese findet man am besten über das sysfs raus.  Jeder HBA hat ein Verzeichnis unterhalb des Ordners /sys/class/scsi_host/.  Der HBA mit der Nummer 0 hat somit den Ordner /sys/class/scsi_host/host* usw.. In jedem dieser Ordner existiert eine Datei mit dem Namen proc_name. In dieser befindet sich der name des Treibers des jeweiligen HBA. Mit dem Wissen das der Treiber für den LSI Controller von VMware mptspi heißt, muss man jetzt nur noch den HBA, der einen Treiber mit diesem Namen hat. Um nicht in allen Dateien von Hand nachzusehen, kann man dies am besten den Befehl grep fürs ich erledigen lassen. Mit dem folgten Befehlt erhält man eine Ausgabe aller HBA, die die Buchstabenfolge mpt enthalten.

grep mpt /sys/class/scsi_host/host*/proc_name

Wenn die Ausgabe wie folgt aussieht, hat der HBA die Nummer 32.

/sys/class/scsi_host/host32/proc_name:mptspi

Nachdem man die Nummer des HBA rausgefunden hat, muss man den HBA seine Geräte neu scannen lassen. Mit dem folgenden Befehl bittet man den HBA mit der Nummer 32, seine Geräte im laufenden Betrieb neu zu scannen.

echo "- - -" > /sys/class/scsi_host/host32/scan

Danach sollte man mit dmesg sich die Kernelmeldungen ausgeben lassen. Ganz unten bei der Ausgabe sollte der Fund der neuen Festplatte gemeldet werden. Wenn die letzten Zeilen z.B. wie folgt aussehen, ist die Festplatte als Device /dev/sdb von Linux erkannt worden.

Mar  1 14:52:07 portal kernel: [ 1287.033631] scsi 32:0:1:0: Direct-Access     VMware   Virtual disk     2.0  PQ: 0 ANSI: 6
Mar  1 14:52:07 portal kernel: [ 1287.033641] scsi target32:0:1: Beginning Domain Validation
Mar  1 14:52:07 portal kernel: [ 1287.034017] scsi target32:0:1: Domain Validation skipping write tests
Mar  1 14:52:07 portal kernel: [ 1287.034020] scsi target32:0:1: Ending Domain Validation
Mar  1 14:52:07 portal kernel: [ 1287.034046] scsi target32:0:1: FAST-80 WIDE SCSI 160.0 MB/s DT (12.5 ns, offset 127)
Mar  1 14:52:07 portal kernel: [ 1287.034346] sd 32:0:1:0: [sdb] 104857600 512-byte logical blocks: (53.7 GB/50.0 GiB)
Mar  1 14:52:07 portal kernel: [ 1287.034422] sd 32:0:1:0: [sdb] Write Protect is off
Mar  1 14:52:07 portal kernel: [ 1287.034425] sd 32:0:1:0: [sdb] Mode Sense: 61 00 00 00
Mar  1 14:52:07 portal kernel: [ 1287.034444] sd 32:0:1:0: [sdb] Cache data unavailable
Mar  1 14:52:07 portal kernel: [ 1287.034447] sd 32:0:1:0: [sdb] Assuming drive cache: write through
Mar  1 14:52:07 portal kernel: [ 1287.034908] sd 32:0:1:0: Attached scsi generic sg2 type 0
Mar  1 14:52:07 portal systemd-udevd[1657]: Process '/bin/sh -c 'echo 180 >/sys$DEVPATH/device/timeout'' failed with exit code 2.
Mar  1 14:52:07 portal kernel: [ 1287.042034] sd 32:0:1:0: [sdb] Attached SCSI disk

Wenn die Festplatte als /dev/sdb erkannt wurde, können wir mit dem einrichten einer Partition weiter machen. Dazu muss zunächst eine Partitionstabelle auf der Festplatte angelegt und dann eine Partition erstellt werden. Dies kann man für die Festplatte /dev/sdb aus unserem Beispiel z.B. mit dem folgenden Befehlt erreichen.

cfdisk /dev/sdb

Nach eingäbe dieses Befehlt wird man zunächst gefragt welche Partitionstabelle man anlegen möchte. Ich empfehle die neuere und modere gpt anstelle der älteren dos zu wählen. Danach kann man in einem kleinen Menü eine neue Partition anlegen und speichern. Auf dieser Partition kann man dann mit mkfs ein Dateisystem anlegen und dieses kann man dann mit dem Befehlt mount in das laufende Linux einbinden. Und voilà, die neue Platte steht ohne Neustart zur verfügung.

VMware-Tools oder lieber open-vm-tools verwenden?

Die VMware-Tools sind Programme und Treiber, mit denen die Gastbetriebssysteme in einer virtuellen Maschine unter VMware zusätzliche Funktionalitäten erhalten. Durch diese wird die Arbeit erleichtert und die Leistung verbessert. Seit dem Jahr 2007 hat VMware weite Teile der VMware Tools als Open Source Software unter dem Namen open-vm-tools (Open Virtual Machine Tools) freigegeben.

Bei aktuellen Linux Distributionen sind die open-vm-tool in den Repositorys enthalten und können bequem über das Paket Management installiert werden.  Bei Ubuntu sind die open-vm-tools z.B. seit Version 14.04 mit dabei. Bei Debian ab der Version 7.

Bei der Installation eines Gastbetriebssystems stellt sich somit heute immer die Frage: Soll man die originalen VMware-Tools oder die open-vm-tools der jeweiligen Distribution installieren?

VMware empfiehlt in dem Knowledge Base Artikel 2073803 nach Möglichkeit die bei den Linux-Distributionen mitgelieferten open-vm-tools und nicht die VMware Tools von VMware zu verwenden. Hier heißt es dazu: „VMware recommends using OVT redistributed by operating system vendors.“

Fazit

Wenn man Linux als Betriebssystem bei einer virtuellen Maschine unter VMware verwendet, sollte man wenn möglich immer die open-vm-tools aus den Repositorys der verwendeten Distribution benutzen. Bei Windows und Linux-Distributionen die keine open-vm-tools in ihrem Repository bereitstellen, sollte man die WMware-Tools von VMware installieren.

Einzelnachweise

Installationsanleitungen

Vielen Dateien eine andere Dateiendung geben

Ab und zu hat man bei der Administration die Aufgabenstellung vielen Datei eine andere Dateiendung zu geben. Hier eine kleine Programmzeile, mit der man diese Aufgabe sehr erleichtern kann. Mit dieser kann man unter Linux oder MacOSX an alle Dateien in einem Verzeichnis die Dateiendung „.pdf“ anhängen.

ls * | cat | while read n; do mv "$n" "$n.pdf"; done