Centos 7 VM/Guest Konfiguration

Aus Hyperweb & OpenSim
Wechseln zu: Suche

CentOS auf dem Guest konfigurieren

Wir beschränken uns hier auf das Allernötigste, denn auf dem Guest soll ja normalerweise nicht gearbeitet werden, sondern nur OpenSim laufen. Eine Firewall erübrigt sich auf dem Guest: Er ist aus dem Internet heraus sowieso nur über jene Ports erreichbar, die wir auf dem Host explizit umgeleitet haben. Auch den SSH Port können wir im Shellscript vom Host aus auf einen beliebigen Port mappen (in dieser Anleitung beispielsweise Port 2222), ohne auf dem Guest den Port verstellen zu müssen. NTP Zeitsynchronisation erübrigt sich auf Virtuellen Maschinen ebenso, sofern die Uhr auf dem Host richtig geht.

Zuerst installieren wir notwendige Pakete nach. Hier wird explizit Mono 4.0.5 ausgewählt, weil mit dieser Mono-Version auch das ältere OpenSim 0.8.2 noch lauffähig ist.

yum install mariadb-server
yum install tmux
yum install epel-release
yum install yum-utils
rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
yum-config-manager --add-repo http://download.mono-project.com/repo/centos/
yum install mono-complete-4.0.5.1-0.xamarin.1

Bisher haben wir nur den User root, den wir aus Sicherheitsgründen zukünftig nicht mehr direkt vom Internet aus verwenden wollen. Also legen wir einen neuen User "opensim" an:

useradd -d /home/opensim -s /bin/bash -c "OpenSim" opensim
passwd opensim

Den nichtssagenden Rechnernamen localhost ersetzen wir nun durch "centos". (Das wird in der Konsole erst nach einem Neustart des Guests angezeigt.)

hostnamectl set-hostname centos

Im Gegensatz zu Ubuntu hat Centos bereits in der Minimalinstallation eine Firewall mit ziemlich vielen Regelsätzen (Chains) aufgebaut. Da unser Guest eh nur von den Ports aus erreichbar ist, die wir explizit umgeleitet haben, deaktivieren wir die Firewall.

Damit ein rudimentärer Regelsatz existiert, installieren wir als Ersatz das bekannte "iptables" und aktivieren dieses statt "firewalld".

yum install iptables-services
systemctl disable firewalld
systemctl mask firewalld
systemctl enable iptables

Jetzt booten wir den Guest einmal durch (shutdown -r now), das ist wichtig!

Danach sehen wir mit dem Kommando "iptables -n -L -v", dass QEMU schon ein paar Regeln eingetragen hat, die für die Kommunikation zwischen Guest und Host notwendig sind. Leider betrifft dies auch wieder ein "REJECT all" in der INPUT Chain. Als Workaround erlauben wir vorher alles, dann ist egal was QEMU später verbieten will. Das zweite Kommando speichert die neuen Regeln, damit sie beim Booten automatisch gesetzt werden.

iptables -I INPUT -p all -j ACCEPT
iptables-save > /etc/sysconfig/iptables

SSH besser sichern

In "/etc/ssh/sshd_config" passen wir folgende 5 Parameter an (bzw. fügen "AllowUsers" noch hinzu):

# Authentication:

LoginGraceTime 2m
PermitRootLogin no
AllowUsers opensim
#StrictModes yes
MaxAuthTries 3
MaxSessions 1

=> Parameter "PermitRootLogin" auf "no" setzen
=> Parameter "AllowUsers" auf den speziell eingerichteten Benutzer "opensim "(ohne root Rechte) setzen
=> Parameter "LoginGraceTime" auf "2m" setzen, also 2 Minuten Zeit für Loginversuche
=> Parameter "MaxAuthTries" auf "3" Loginversuche setzen
=> Parameter "MaxSessions" auf maximal "1" gleichzeitig eingeloggten User setzen.

MariaDB

Den Service MariaDB zukünftig bei jedem Systemstart automatisch starten:

ln -s /usr/lib/systemd/system/mariadb.service /etc/systemd/system/multi-user.target.wants/mariadb.service
vi /etc/my.cnf

In den Sektionen [client], [mysql] und [mysqld] ergänzen wir die folgende Zeilen:

[client]
...
default-character-set=utf8
...
[mysql]
...
default-character-set=utf8
...
[mysqld]
...
collation-server=utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server=utf8
...

Vor der erstmaligen Benutzung müssen wir den Dienst aktivieren und starten.

systemctl enable mariadb
systemctl start mariadb

Zur Erstkonfiguration der Datenbank durchlaufen wir folgendes Installationsscript:

/usr/bin/mysql_secure_installation

Das Script stellt einige Fragen, die Benutzereingaben sind fett dargestellt:

1) (Enter) - Das aktuelle root-Passwort eingeben, bei einer erstmaligen Installation einfach leer lassen (Enter drücken).

2) Y - Ja, Du willst sicherlich ein root-Passwort setzen.

3) MyRootPassword - Zweimal das neue root-Passwort eingeben, dieses irgendwo aufschreiben und an sicherem Ort lagern.

4) Y - Den anonymen User löschen: Ja! Dieser wurde nur für Tests angelegt, und wird im Produktivbetrieb nicht gebraucht. Mit dem anonymen User hätte jeder ohne Login Zugang zum Datenbankserver.

5) Y - Remote root-Logins verbieten! Auf die Datenbank wird immer lokal zugegriffen. Die Verbindung ins Internet wird nicht über die Datenbank hergestellt, sondern über OpenSim oder SSH.

6) Y - Testdatenbank entfernen.

7) Y - Privilegientabellen neu laden, damit die Änderungen sofort wirksam werden.

Tipps: Der Sql-Server wird beim Hochlauf automatisch gestartet (s.o.). Den aktuellen Status abfragen, den Dienst stoppen oder wieder starten geht mit den folgenden Befehlen.
- Start des Dienstes: "service mysql start"
- Stopp des Dienstes: "service mysql stop"
- Statusabfrage: "service mysql status"

Nun wird eine neue Datenbank "opensim" und ein eingeschränkter Benutzer "opensim" angelegt. (Datenbank und Benutzer dürfen beliebig heißen, aber so werden sie später in der OpenSim-Anleitung genannt.) Die einzugebenden Kommandos sind im folgenden Screenshot fett dargestellt.

mysql -u root -p
Enter password: MyRootPassword
Welcome to the MySQL monitor, ...

mysql> create database opensim;
Query OK, 1 row affected (0.00 sec)

mysql> create user opensim identified by 'MyOpensimPassword';
Query OK, 0 row affected (0.00 sec)

mysql> grant all privileges on opensim.* to opensim;
Query OK, 0 row affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 row affected (0.00 sec)

mysql> quit;
Bye

Autostart

Wir kopieren das folgende Skript mit beispielsweise dem Dateinamen "opensim-autostart.sh" nach /etc/systemd/system . (Es kann ein beliebiges Verzeichnis gewählt werden, wir wählen hier der Übersichtlichkeit halber das Verzeichnis mit der Konfigurationsdatei.)

vi /etc/systemd/system/opensim-autostart.sh
#!/bin/sh
#
# /etc/systemd/system/opensim-autostart.sh

case $1 in
  start)
    su opensim -l -c 'bash autostart.sh' &
    ;;
  stop)
    ;;
  *)
    echo "Usage: $0 {start|stop}"
    exit 1
    ;;
esac

Danach setzen wir die Ausführungsrechte:

chmod u+x opensim-autostart.sh

Damit unser Script als Service gestartet werden kann, benötigt es noch eine Konfigurationsdatei. Hier ist das Verzeichnis /etc/systemd/system zwingend, die Dateiendung .service ebenso. Also nennen wir die Konfigurationsdatei sinnvoll "opensim-autostart.service":

vi /etc/systemd/system/opensim-autostart.service
[Unit]
Description=At system boot call autostart.sh in home of user opensim.

[Service]
Type=oneshot
ExecStart=/etc/systemd/system/opensim-autostart.sh start
ExecStop=/etc/systemd/system/opensim-autostart.sh stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Wenn beide Dateien erstellt sind, muss der neue Service noch aktiviert werden:

systemctl enable opensim-autostart.service

Nun sollte bei jedem Systemstart opensim-autostart.sh (und damit auch autostart.sh) automatisch aufgerufen werden.

Präparation des opensim Homeverzeichnisses

Wir richten die Verzeichnisse und das OpenSim Startscript ein, so dass später nur noch ein konfiguriertes OpenSim Binärpaket hinzu kopiert werden muss.

cd /home
chmod +rx opensim
cd opensim
mkdir regionserver

Das Startscript im Homeverzeichnis von opensim:

 vi /home/opensim/autostart.sh
#!/bin/sh
while :
do
# change to OpenSim bin directory if exist
cd /home/opensim/regionserver/bin 2> /dev/null
# first run: await completion of startup - later: avoid heavy triggering
sleep 120
# try and ignore error if already exists
running=`ps ax | grep OpenSim.exe | grep -v grep`
if [ -z "$running" ]
  then
    tmux new-session -d -s term -n OpenSim 'env LANG=C mono OpenSim.exe'
  else
    tmux new-window -n OpenSim -t term:0 'env LANG=C mono OpenSim.exe' 2> /dev/null
fi
done

Besitzer und Gruppe der neu angelegten Datei und des neu angelegten Verzeichnisses auf "opensim" ändern, damit später für die OpenSim Administration der root Account nicht mehr nötig ist:

chown opensim /home/opensim/*
chgrp opensim /home/opensim/*

Nun ist die Grundkonfiguration des Guests fertig!

Mit Filezilla oder einem anderen Lieblingstool zum Dateikopieren kann nun als Benutzer opensim das bin Verzeichnis einer OpenSim Distribution ins Verzeichnis /home/opensim/regionserver kopiert werden. Darin sollte nun alle zwei Minuten das Startscript versuchen, die OpenSim.exe zu starten.

Tipp: Benenne das bin Verzeichnis vor dem Kopieren um. Konfiguriere OpenSim in Ruhe fertig, zum Beispiel nach der Anleitung "OpenSim" auf Hyperweb.eu. Erst wenn alles fertig ist, benenne das Verzeichnis in "bin" zurück und warte, bis OpenSim automatisch gestartet wird.



Weiter: Gesammelte Tipps zur Fehlersuche