Amazon Linux AMI : Fehler beim Versuch "yum update"

Problem : beim Versuch ein Amazon Linux AMI erscheint diese Meldung
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

   /usr/lib64/python2.7/dist-packages/pycurl.so: undefined symbol: CRYPTO_num_locks

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
2.7.12 (default, Nov  2 2017, 19:20:38) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]

If you cannot solve this problem yourself, please go to 
the yum faq at:
  http://yum.baseurl.org/wiki/Faq

Lösung : Überprüfen auf welche libs curl verweist
ldconfig -p -N -X | grep curl
Output :
	libcurl.so.4 (libc6,x86-64) => /usr/lib64/libcurl.so.4
dann prüfen wir das selbe beim python modul
ldd /usr/lib64/python2.7/dist-packages/pycurl.so
	linux-vdso.so.1 =>  (0x00007ffe65d10000)
	libcurl.so.4 => /libs/test/libcurl.so.4 (0x00007f5edd1e7000) <----- GRUND !!
	libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007f5edce0b000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5edcbef000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f5edc82b000)
	libssl.so.1.1 => /libs/test/libssl.so.1.1 (0x00007f5edc5bd000)
	libcrypto.so.1.1 => /libs/test/libcrypto.so.1.1 (0x00007f5edc153000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f5edbf4f000)
	libz.so.1 => /lib64/libz.so.1 (0x00007f5edbd39000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f5edbb31000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007f5edb92e000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f5edb62c000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f5edd65e000)
Die Pfade sind hier unterschiedlich, ich habe hier einfach die lib von dem Entwickler umbenannt und die andere rein gelinkt.
mv /libs/test/libcurl.so.4 /libs/test/libcurl.so.4.dev ; ln -s /usr/lib64/libcurl.so.4 /libs/test/libcurl.so.4
Dann ging YUM wieder durch.

Quelle : https://access.redhat.com/solutions/641093

RaspberryPI : DHT22 Sensor - Temperatur & Luftfeuchtigkeit monitoren

Wenn man zuhause Temperatur & Luftfeuchtigkeit monitoren will bietet sich der DHT22 an. Ich habe mich für diesen hier entschieden.
Um den Sensor in Betreib zu nehmen benötigen wir erst noch einiges an Software auf dem kleinen.
Dazu werden wir erstmal Admin auf dem Raspberry
sudo -s
dann installieren wir die benötigten Packete mit
apt install build-essential python-dev python-openssl git-core vim
wir benötigen jetzt noch die python module für den sensor das können wir mit dem folgenden Befehl erledigen.
cd ~ && git clone https://github.com/adafruit/Adafruit_Python_DHT.git && cd Adafruit_Python_DHT && python setup.py install
jetzt sollte alles installiert sein was wir benötigen.

Jetzt schließen wir noch den Sensor nach dem unten aufgeführten Schema an.

DHT22 an Raspberry PI 3
DHT22 an Raspberry PI 3

DHT22 an Raspberry PI 3 Schema
Adafruit liefert hier ein kleines example mit zum testen.
~/Adafruit_Python_DHT/example/Adafruit.py 22 4
Wenn alles richtig gemacht wurde erhällt man jetzt einen Output der so oder so ähnlich aussieht.
~/Adafruit_Python_DHT/examples/AdafruitDHT.py 22 4
Temp=22.7*  Humidity=44.5%
22 = der Sensor DHT22
4 = der gpio Pin an dem die Sensor Leitung hängt

Jetzt bekommen wir Werte vom Sensor um diese aber zu Monitoren brauchen wir noch eine Software die das erledigt. Da ich hier bereits eine fertige Grafana Installation habe verwende ich natürlich diese. Die Werte erhält Grafana bereits über den collectd Agent, deswegen habe ich mich dazu entschieden auch die Temperaturen über diesen Weg zu reporten.

Ich habe bei meinem Skript schon darauf geachtet das der Sensor justiert werden kann (ADJUST SETTINGS DHT22)

Hier mein Skript für collectd, das legt ihr unter dem Namen dht22.py im Pfad /usr/lib/collectd/python ab
import collectd
import Adafruit_DHT
from decimal import Decimal

SENSOR = Adafruit_DHT.DHT22
PIN = 4

# ADJUST SETTINGS DHT22

# mögliche werte + / - / NULL
ADJ_TEMP_DO = "-"
ADJ_TEMP_VAR = "1.2"

# mögliche werte + / - / NULL
ADJ_HUM_DO = ""
ADJ_HUM_VAR = "0"

def config_func(config):
    pin_set = False
    for node in config.children:
        key = node.key.lower()
        val = node.values[0]
        if key == 'gpio_pin':
            global PIN
            PIN = val
            pin_set = True
        else:
            collectd.info('DHT22 Plugin: Unknown config key "%s"' % key)
    if pin_set:
        collectd.info('DHT22 Plugin : Using override PIN %s' % PIN)
    else:
        collectd.info('DHT22 Plugin : Using default PIN  %s' % PIN)
def read_measurements():
    humidity, temperature = Adafruit_DHT.read_retry(SENSOR, PIN)
    if humidity is not None and temperature is not None:
        if ADJ_TEMP_DO == "-":
            _temp = round(Decimal(temperature),2) - round(Decimal(ADJ_TEMP_VAR),2)
        elif ADJ_TEMP_DO == "+":
            _temp = round(Decimal(temperature),2) + round(Decimal(ADJ_TEMP_VAR),2)
        else:
            _temp = round(Decimal(temperature),2)
        if ADJ_HUM_DO == "-":
            _hum =  round(Decimal(humidity),2) - round(Decimal(ADJ_HUM_VAR),2)
        elif ADJ_HUM_DO == "+":
            _hum =  round(Decimal(humidity),2) + round(Decimal(ADJ_HUM_VAR),2)
        else:
            _hum =  round(Decimal(humidity),2)
    val = collectd.Values(type='temperature')
    val.plugin = 'DHT22_SENSOR'
    val.dispatch(values=[_temp])
    val = collectd.Values(type='humidity')
    val.plugin = 'DHT22_SENSOR'
    val.dispatch(values=[_hum])
collectd.register_config(config_func)
collectd.register_read(read_measurements)

Damit collectd das Skript auch verwendet muss es natürlich erstmal konfiguriert sein.
Auszug aus collectd.conf
.....
.....
LoadPlugin python
.....
.....
<Plugin python>
    ModulePath "/usr/lib/collectd/python"
    Import dht22
    <Module dht22>
        gpio_pin "4"
    </Module>
</python>
dann noch einen Restart von collectd
systemctl restart collectd
wenn ihr alles richtig gemacht habt könnt ihr jetzt dieses Panel in Grafana anlegen.

DHT22 in Grafana
DHT22 in Grafana

UFW : Arbeiten mit der uncomplicated firewall

Erstmal hier ist schön erklärt was UFW ist
Anzeigen aller Regeln
ufw status
Beenden & Starten der Firewall
ufw disable
ufw enable
Eintragen neuer Regeln
ufw allow from 192.168.0.0/16 proto udp to any port 25251
ufw allow from 192.168.0.0/16 to any port 3000
IPs werden als CIDR angegeben ! Wikipedia - CIDR

Löschen von Regeln über id
anzeigen aller Regeln mit
ufw status numbered
löschen der Regel mit
ufw delete [REGEL-ID]

Debian 9 : JAVA Anwendung wirft Fehler "to much files open"

Problem : Eine Java Anwendung wirft nach einiger Zeit die Fehlermeldung "to much Files open". Grund hierfür ist das die Ulimits in Debian 9 nach unten korrigiert wurden.

Lösung : Vielleicht gibts einfachere Lösungen bei mir hat dieser Weg dazu geführt das die Anwendung stabil läuft.

In der Datei /etc/security/limits.conf habe ich die Limits auf die folgenden Werte gesetzt.

# nofile - max number of open files
*               hard    nofile          65536
*               soft    nofile          32768
root            soft    nofile          65536
 
# sigpending - max number of pending signals
*               hard    sigpending      516378
*               soft    sigpending      258189
root            soft    sigpending      516378
 
# nproc - max number of processes
*               hard    nproc           516378
*               soft    nproc           258189
root            soft    nproc           516378
Die Hardlimits sind die Default Werte aus Debian 8 , mit den Soft Limits muss man noch etwas "spielen".
Damit diese auch wirklich ausgewertet werden muss noch in der Datei /etc/pam.d/common-session & /etc/pam.d/common-session-noninteractive das pam_limit.so Modul includiert werden.
# include pam_limits.so
session required    pam_limits.so

Debian 9 : Grafana Dashboard bauen

Das erste Dashboard in Grafana ist schnell gebaut, ich zeig das hier mal exemplarisch für Load/Ram in einem Graph.

So soll unser Ziel dann aussehen
Grafana Dashboard load und ram

Dazu klicken wir erstmal auf "New Dashboard" um dann dem panel einen Graph hinzu zufügen.
Graph in Grafana

Unter Metrics stellt ihr folgende Konfiguration ein. Ich hab hier nur A und D expandiert die anderen Konfigurationen könnt ihr daraus entnehmen.
Metrics konfigurieren

Dann die Achsen konfigurieren
Grafana Graph - Axes


Jetzt die Darstellung unter Display konfigurieren
Grafana Display
Grafana Display 1

Jetzt schließen wir das mit dem kleinen x und der Graph sollte so wie unser Ziel aussehen.

Hier noch ein Beispiel für einen Netzwerkgraph.

Grafana Netwerk
Grafana Netwerk 1
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)