linux

Ubuntu 18.10 Cosmic Cuttlefish

Written by  on Oktober 23, 2018

Ubuntu 18.10 Cosmic Cuttlefish und die IP Adresse
Ubuntu merkt sich einen DHCP Lease. Auch wenn sich die MAC Adresse (nach dem Klonen einer VM) geändert hat, bestehen die Instanzen darauf die gleiche IP Adresse zu benutzen. Was soll das denn?
Versuch den Lease zu löschen mit “> /var/lib/dhcp/dhclient.leases”. File ist leer, auf beiden Instanzen. Reboot. Beide Instanzen mit anderer MAC Adresse… wieder die gleiche IP.
Alternativ auf fixe IP Adresse umstellen:
/etc/netplan/50-cloud-init.yaml

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp0s3:
            addresses: [10.0.0.151/24]
            gateway4: 10.0.0.138
            nameservers:
                    addresses: [10.0.0.110]
            dhcp4: true
    version: 2
netplan apply

Ubuntu 18.10 Cosmic Cuttlefish

Written by  on Oktober 22, 2018

Ubuntu 18.10 Cosmic Cuttlefish und die Hostname Umbenennung
Eben das neue Ubuntu aufgesetzt. In einer Virtual Box. Aber eigentlich brauch ich gleich zwei solche Maschinen. Also was liegt näher als die VM zu klonen. Geht ja einfach, sogar eine neue MAC Adresse wird generiert. Jetzt noch schnell den zweiten Server umbenannt in /etc/hostname -> reboot -> hostname ist wieder der von Maschine 1.
Suchen, googlen, setzen mit hostname command. Reboot. Und immer wieder zurück auf dem alten Hostname. Was ist da los Ubuntu?
Es finden sich erste Hinweise dass das an cloud-init liegt. Was macht das mit meinem hostname, bitteschön? Auch DHCP wird nicht frisch geholt, aber das ist eine andere Geschichte…
/var/lib/cloud/instances/3f1ebbef-73c0-49db-9207-fde1dce2b8f4/cloud-config.txt
Exakt hier kann man den hostnamen ändern. Reboot und es wurde übernommen!
Update: Einen Reboot später -> wieder der alte Hostname!
Update: Um Ubuntu zu klonen und umzubenennen muss man diesen cloud configuration service abändern:
/etc/cloud/cloud.cfg

# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: true

RHEL7 X11Forward

Written by  on April 5, 2017

Wenn auf einem frischen RHEL7 (oder CentOS) System kein X11 Forwarding funktioniert, dann checken ob das Paket xorg-x11-xauth installiert ist.

Quelle

Start a not running process via cron

Written by  on Februar 24, 2017

Beispielcode zum Starten eines Prozesses, wenn diese nicht mehr Läuft. Direkt zur Verwendung in Cron.

#!/bin/bash

PROG="apache"
ps -ww aux | grep -v grep | grep $PROG >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
  echo "$PROG found"
else
  echo "$PROG not found"
  # hier restart einfügen
fi

Achtung: Das Script einfach parametrisierbar zu machen via $1 statt $PROG funktioniert nicht, da $1 auch wieder von PS gefunden wird. Es wird daher immer der $PROG found Zweig durchlaufen!

Zitat des Tages

Written by  on Oktober 21, 2016

Trying to optimize a system that’s already working correctly is often a waste of time.

From String to Array of Strings in Bash

Written by  on Oktober 13, 2016

Definition eines String:

STRING="A"

Definition eines Array:

STRING[0]="A"
STRING[1]="B"

oder

STRING="A"
STRING[1]="B"

Das heißt, nur mit STRING=”A” kann noch nicht unterschieden werden, ob es nur ein String ist, oder ein Array. D.h. man kann eine bestehende Definition einfach weiterverwenden. Und auch, diese bei Bedarf einfach um ein zweites Feld erweitern.
Wie aber muss der Code aussehen, damit er von Haus aus mit der Erweiterung umgehen kann?

Feststellen der Anzahl der Elemente im Array

${#STRING[*]} 
COUNT=0
while [[ ${COUNT} -lt ${#STRING[*]} ]]; do 
  echo ${STRING[$COUNT]}; 
  COUNT=$((COUNT+1)); 
done

Output für

unset STRING

(kein Output)

Output für

STRING="a"
a

Output für

STRING="a"
STRING[1]="b"
a
b

Voraussetzungen: Elemente im Array von 0 weg zählend durchnummerieren. Das erleichtert das durchlaufen einer Zählschleife ungemein!

OpenSSL STR_COPY variable has no value

Written by  on September 23, 2016

Openssl kann Shellvariablen im der Konfigurationsdatei verarbeiten. Kommt dabei eine Fehlermeldung wie

openssl.exe version
6870300:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:618:line 19

liegt das daran, dass die Shellvariable nicht definiert ist.
Eine leere Variable dagegen ist aber OK.
Ich dachte schon einen Bug gefunden zu haben. Der Report dafür wurde aber nicht anerkannt, weil das Verhalten so gewünscht und dokumentiert ist.

Wie kommt man zum Fehler? Mit einer Config wie:

[req]
promt=no
distinguished_name=dn
default_md=sha256
default_bits=2048
req_extensions=alt_names

[dn]
C=AT
ST=NOe
L=xxx
O="org"
OU="ou"
E="test@example.com"

[alt_names]
subjectAltName=${ENV::SAN}

Wie repariert man es?
Indem man einen Default Wert in der Config setzt:

SAN=""
[req]
promt=no
distinguished_name=dn
default_md=sha256
default_bits=2048
req_extensions=alt_names

[dn]
C=AT
ST=NOe
L=xxx
O="org"
OU="ou"
E="test@example.com"

[alt_names]
subjectAltName=${ENV::SAN}

Dokumentation, wenn auch leicht verwirrend findet man unter https://www.openssl.org/docs/man1.0.2/apps/config.html bzw. https://www.openssl.org/docs/manmaster/apps/config.html für die letzte Version.
Suchen auf der Seite nach Begrif “ENV”.

Service Names in Windows

Written by  on Mai 21, 2016

Zwischen Linux und Windows ist ja vieles anders, oder auch einfach nur bewusst inkonsistent gehalten.

Beispiel: Samba unter Linux – heißt in Windows “Server”. Überraschenderweise sogar in der deutschen Version.

Aber schlimmer wirds beim Webserver. In Linux schon unter vielen Namen bekannt, je nach Distribution als: apache, apche2, httpd für den Apache2 Webserver oder eben lighttpd, nginx oder was da sonst noch so kreucht und fleucht. Als was würde man den Windows Internet Information Server Dienst suchen? Als Microsoft IIS, IIS, Internet Information Irgendwas, Windows Internet Information, Windows Web, Windows HTTP? Nein, alles Falsch. Der Dienst heißt World Wide Web Publishing Service.

OpenLDAP Dynamic Configuration

Written by  on Februar 28, 2016

Aktuelle LDAP Pakete z.B. für Ubuntu finden sich beim LDAP Tool Box project. Aber ein Problem gibt es mit den Paketen – per Default ist nur die statische Konfiguration über die slapd.conf unterstützt. Das lässt sich aber theoretisch ganz leicht ändern, man legt ein zusätzliches Verzeichnis an, wo die dynamische Konfiguration gespeichert werden kann, und trägt es in /etc/default/slapd in der Zeile “SLAPD_CONF_DIR” ein. Was passiert dann?

slapd: [ALERT] OpenLDAP configuration test failed

Wie kann das sein? Wieso kann die Konfiguration fehlerhaft sein, wenn es doch noch gar keine gibt? Und sollte die nicht per Default angelegt werden?
Dann teste ich eben, ob ich den Dienst händisch starten kann! Wie sieht die Befehlszeile aus den slapd zu starten?

ps aux | grep slap
ldap     32099  0.0  0.3 1085388 3480 ?        Ssl  18:31   0:00 /usr/local/openldap/libexec/slapd -h ldap://*:389 ldaps://*:636 -f /usr/local/openldap/etc/openldap/slapd.conf -u ldap -g ldap -l local4

Also muss ich den Dienst doch mit -F statt -f starten können?

# /usr/local/openldap/libexec/slapd -h ldap://*:389 ldaps://*:636 -F /usr/local/openldap/etc/openldap/slapd.d -u ldap -g ldap -l local4
usage: /usr/local/openldap/libexec/slapd options
        -4              IPv4 only
        -6              IPv6 only
        -T {acl|add|auth|cat|dn|index|passwd|test}
                        Run in Tool mode
        -c cookie       Sync cookie of consumer
        -d level        Debug level
        -f filename     Configuration file
        -F dir  Configuration directory
        -g group        Group (id or name) to run as
        -h URLs         List of URLs to serve
        -l facility     Syslog facility (default: LOCAL4)
        -n serverName   Service name
        -o <opt>[=val] generic means to specify options; supported options:
                slp[={on|off|(attrs)}] enable/disable SLP using (attrs)
        -r directory    Sandbox directory to chroot to
        -s level        Syslog level
        -u user         User (id or name) to run as
        -V              print version info (-VV exit afterwards, -VVV print
                        info about static overlays and backends)

Wie konnte das passieren?
Die Bash versucht den “*” bei der IP Konfiguration aufzulösen. Also schützen wir die Sterne vor der Shell:

# /usr/local/openldap/libexec/slapd -h "ldap://*:389 ldaps://*:636" -F /usr/local/openldap/etc/openldap/slapd.d -u ldap -g ldap -l local4
# ps aux | grep slap
ldap     32589  0.1  0.2 1068476 2700 ?        Ssl  18:49   0:00 /usr/local/openldap/libexec/slapd -h ldap://*:389 ldaps://*:636 -F /usr/local/openldap/etc/openldap/slapd.d -u ldap -g ldap -l local4

Und wir haben das Configverzeichnis mit einer ersten Konfiguration befüllt.
Ab jetzt klappt der Start des Dienstes auch mit dem Start/Stop Script bzw. mit dem service-Befehl.

Compile OpenSSL

Written by  on Dezember 20, 2015

Most distributions contain only an old version of openssl. If you need a newer version for your scripts, ther often is no other way than compiling it from source. Here I’ll show you, how to do it. And don’t be afraid, it’s super easy! The latest version is a 1.1 development version.
There are only a few prerequisits: You need the packets make and gcc. First you download the source from github and unpack it:

wget https://github.com/openssl/openssl/archive/master.zip
unzip master.zip
cd openssl-master

You simply do the steps for compiling software on unix/linux:

./config
make
make install

You need to do at least the 3rd step as root, so it can install the files for you. By default, everything gets installed into /usr/local/ssl – so it won’t destroy your system OpenSSL.

# /usr/local/ssl/bin/openssl version
OpenSSL 1.1.0-pre2-dev  xx XXX xxxx

Have a lot of fun!