Skip to content

PostgreSQL 9.4 Server auf Ubuntu installieren und mit der neuen SQL Funktion ALTER SYSTEM konfigurieren

Heute wird ein kleiner Ausflug in die Datenbank Welt gemacht.
Grund dafür ist die neue Version der Open Source Datenbank PostgreSQL Version 9.4., welche Ende 2014 veröffentlicht wurde.
Neben zahlreichen Verbesserungen bietet diese mit "ALTER SYSTEM" die Möglichkeit die Systemkonfiguration direkt aus der SQL Konsole vorzunehmen.
Mit dieser Neuerung lassen sich alle Systemeinstellungen der postgresql.conf mit Hilfe einer postgresql.conf.auto überschreiben.
Die postgresql.auto.conf wird beim Start als letztes geladen und enthält die mit "ALTER SYSTEM" gesetzten Werte.

Zunächst ist aber etwas Vorarbeit notwendig.
Referenzsystem ist wie immer Ubuntu Server 14.04

postgresql


Installieren des PostgreSQL Servers 9.4

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql

Einloggen in die PostgreSQL Konsole

Zunächst sollte das Passwort geändert werden

sudo -u postgres psql postgres
postgres=#
             \password
                        Enter new password:
                        Enter it again:

            \q

Erfolgt ein Login nicht direkt auf dem Localhost, sind weitere Konfiguration notwendig

Die Konfiguration der Zugriffsrechte erfolgen unter "/etc/postgresql/9.4/main/pg_hba.conf"

Verbindungsinformationen anzeigen

postgres=# \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".

Anlegen eines neuen Benutzers mit Superuser Rechten

Dieser Schritt dient der Übersicht, für die Verwendung des SYSTEM ALTER Befehls kann auch der Standardbenutzer "postgres" verwendet werden.
Superuser Rechte sind aber zwingend notwendig.

sudo -u postgres createuser -s -D -P yolo

Erklärung der Befehle

  • -D, --no-createdb         role cannot create databases (default)
  • -P, --pwprompt            assign a password to new role
  • -s, --superuser              role will be superuser

Alternativ kann ein Benutzer auch interaktiv angelegt werden

sudo -u postgres createuser --interactive yolo2

Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n

Datenbank in PostgreSQL anlegen

Auch dieser Schritt dient nur der Übersicht. Für die Systemkonfiguration muss dies vorgenommen werden.

sudo -u postgres createdb -O yolo datenbank

Erklärung des Befehls

  • -O, --owner=OWNER            database user to own the new database

Eingerichtete Benutzer und Rechte anzeigen

postgres=# \du

List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication | {}
 yolo      | Superuser                                      | {}
   


PostgreSQL mit ALTER SYSTEM konfigurieren

Nach ein paar Grundlagen nun der Schritt zur Konfiuration via ALTER SYSTEM
Im Folgenden möchte ich ein paar Werte setzen, die bei einer Grundinstallation gerne anfallen.
Als Grundlage habe ich pgTune genommen (siehe Artikel)

Folgende Werte sollen mit SQL Kommandos angepasst werden

max_connections = 200
shared_buffers = 512MB
effective_cache_size = 1536MB
work_mem = 2621kB
maintenance_work_mem = 128MB
checkpoint_segments = 64
checkpoint_completion_target = 0.9
wal_buffers = 16MB


Zunächst muss ein Login erfolgen, danach können Befehle mit der Kombination ALTER SYSTEM SET abgesetzt werden.

sudo -u postgres psql postgres

postgres=# ALTER SYSTEM SET max_connections TO 200;
postgres=# ALTER SYSTEM SET shared_buffers TO 512;
postgres=# ALTER SYSTEM SET effective_cache_size = '1536MB';
postgres=# ALTER SYSTEM SET work_mem = '2621kB';
postgres=# ALTER SYSTEM SET checkpoint_segments TO 64;
postgres=# ALTER SYSTEM SET wal_buffers ='16MB';
postgres=# ALTER SYSTEM SET checkpoint_completion_target TO 0.9;
postgres=# ALTER SYSTEM SET wal_buffers = '16MB';

Neuladen der Konfiguration

Wichtig: Die Änderungen werden erst wirksam, sobald die Konfiguration neu eingelesen wurde.

Die Konfiguration lässt sich mit dem folgenden Kommando neu einlesen, ohne das ein Datenbankverbindung verloren geht.

postgres=# SELECT pg_reload_conf();

Hier ist zu bedenken das manche Einstellungen, wie z.B. "max_connections" einen richtigen Server Neustart benötigen, bevor sie greifen

sudo service postgres restart

Kontrolle der vorhanden Werte

Gesetzte Konfigurationen lassen sich ebenfalls schnell und einfach per SQL Kommando auslesen. Der Aufruf vor und nach einer Änderung bietet sich an.

postgres=# SHOW shared_buffers;
 shared_buffers
----------------
 400MB
(1 row)

Einzelne Systemwerte auf Standard zurücksetzen

postgres=# SHOW checkpoint_completion_target;
 checkpoint_completion_target
------------------------------
 0.9
(1 row)

postgres=# ALTER SYSTEM SET checkpoint_completion_target TO DEFAULT;
ALTER SYSTEM

postgres=# SELECT pg_reload_conf();
 pg_reload_conf
----------------
 t
(1 row)

postgres=# SHOW checkpoint_completion_target;
 checkpoint_completion_target
------------------------------
 0.5
(1 row)

Alle Werte der postgresql.auto.conf zurücksetzen

postgres=# ALTER SYSTEM RESET ALL;

Wie bereits oben erwähnt, werden die gesetzten Konfigurationen in eine postgresql.auto.conf geschrieben.
Diese befindet sich nicht im Verzeichnis der postgresql.conf sondern unter

nano /var/lib/postgresql/9.4/main/postgresql.auto.conf

    # Do not edit this file manually!
    # It will be overwritten by ALTER SYSTEM command.
    wal_level = 'hot_standby'
    shared_buffers = '512'
    max_connections = '200'
    effective_cache_size = '1536MB'
    work_mem = '2621kB'
    checkpoint_segments = '64'
    wal_buffers = '16MB'


Troubleshooting

Im Log taucht folgende Meldung auf:

LOG:  parameter "wal_buffers" cannot be changed without restarting the server
LOG:  configuration file "/var/lib/postgresql/9.4/main/postgresql.auto.conf" contains errors; unaffected changes were applied

Wie die Fehlermeldung selbst erklärt, ist ein Neustart des Servers mit "sudo service postgresql restart" notwendig.

Fazit

Die neue Möglichkeit in 9.4 ein System im laufenden Betrieb zu konfigurieren, ist wirklich praktisch, besonders für diejenigen die eine SQL Konsole ihre Heimat nennen. Dennoch ist Vorsicht geboten, denn auf den ersten Blick ist nicht ersichtlich, ob eine postgresql.auto.conf geladen wird und Konfigurationen in der postgresql.conf nicht beachtet werden.

Kostenloser iOS7 Programmierkurs - Objective-C anhand von 14 Apps lernen

Apple hat angekündigt seine eigene Programmiersprache "Swift" zu pushen. Diese soll das bisher verwendete Objective-C nicht sofort ablösen, aber ergänzen.

Das könnte der Grund sein, warum der Anbieter für Onlinekurse bitfountain.io seinen iOS7 Programmierkurs momentan umsonst anbietet.

ios7-lernen

Angeblich soll dieser unter der Zeit 500€ kosten, ist mit Hilfe eine Gutscheincodes "phunt" jedoch momentan umsonst.

Auf immerhin 113 Kapitel kommt der Kurs und behandelt dabei jedes erdenkliche Thema rund um Objective-C, XCode, APIs oder Git.

Mich betrifft dieser Kurs nicht, für einige von euch ist er sicherlich interessant. Bedenkt aber, dass ihr einen Mac für die Entwicklung benötigt.

Solltet ihr gleich einen aktuellen iOS8 Kurs machen wollen, müsst ihr $79 hinblättern, dieser Deal gilt aber auch nur noch 10 Tage.

iOS7 unsonst online lernen

9 praktische Keytool Befehle - Zertifikatsmanagement unter Java

Das leidige Thema Zertifikate hatte ich auf dem Blog nun schon öfters, vielleicht erinnert ihr euch ja noch an das selbstsignierte Tomcat Zertifikat.

Damals wurde anders als bei der klassischen Variante mit Apache/OpenSSL auf Keytool zurückgegriffen. Sozusagen das Pendant unter Java.

Heut möchte ich euch ein paar weitere praktische Befehle dazu zeigen. Zunächst muss das Keytool aber gefunden werden.

Unter Windows befindet es sich meist im Bin-Ordner der Java Installation, beispielsweise "C:\Program Files\Java\jre7\bin"

Unter Linux genügt ein einfaches "whereis keytool", um den gewünschten Pfad, beispielsweise "/usr/bin/keytool" zu finden.

9 praktische Keytool Befehle

Einen Keystore und ein Schlüsselpaar erzeugen

keytool -genkey -alias domain -keyalg RSA -keystore keystore -keysize 2048

Eine Zertifikatsanfrage erstellen

keytool -certreq -alias domain -keystore keystore -file anfrage.csr

Ein signiertes Zertifikat in den Keystore importieren

keytool -import -trustcacerts -alias domain -file domain.crt -keystore keystore

Ein vorhandenes Zertifikat exportieren

keytool -export -alias meincert -file meinexportiertescert.crt -keystore keystore

Ein selbstsigniertes Zertifikat erstellen

keytool -genkey -keyalg RSA -alias selfsigned -validity 3600 -keysize 2048

Ein Vorhandenes Zertifikat auslesen 

keytool -printcert -v -file meincert.crt

Welche Zertifikate befinden sich im Keystore?

keytool -list -v -keystore keystore

Liste die vertraulichen CAs auf

keytool -list -keystore "C:\Program Files\...\...\lib\security\cacerts"

Lösche ein Zertifikat aus dem Keystore

keytool -delete -alias domain -keystore keystore

Better Crypto - Applied Crypto Hardening Handbuch - Codeschnipsel für sicheres Netzwerken

Auf dem 30. Chaos Communication Congress wurde dieses Jahr das Applied Crypto Hardening Handbuch vorgestellt. Zunächst noch als PDF zum Download, eine Online Version in HTML soll folgen. Die Macher (BetterCrypto) möchten damit eine Anleitung für Netzwerker und Systemadministratoren bereitstellen, welche die wichtigsten Crypto Einstellungen für bekannte Systeme behandelt.

BetterCrypto

Ziel ist es, Codeschnipsel bereitzustellen, welche der Anwender direkt per Copy und Paste in die jeweilige Konfiguration übernehmen kann. So muss nicht lange in den Einstellungen nach den richtigen Anweisung für eine sichere Verschlüsselung gesucht werden. Der Einsatz ist somit denkbar einfach, siehe folgende Codezeilen für einen Mailserver:

Crypto unter Postfix

smtpd_tls_cert_file = /etc/ postfix / server .pem

smtpd_tls_key_file = /etc/ postfix / server . key

# use 0 for Postfix >= 2.9 , and 1 for earlier versions

smtpd_tls_loglevel = 0

# enable opportunistic TLS support in the SMTP server and client

smtpd_tls_security_level = may

smtp_tls_security_level = may

# if you have authentication enabled , only offer it after STARTTLS

smtpd_tls_auth_only = yes

tls_ssl_options = NO_COMPRESSION

An diesem Beispiel ist gut zu erkennen, dass dieser Code zwar für Grundverschlüsselung sorgt, jedoch auf das eigene System durchaus noch angepasst werden kann. So kann bei vielen Mailservern die Verschlüsselung zwischen den jeweiligen Providern durchaus erzwungen werden, also "smtp_tls_security_level = encrypt". Der Code kann also ohne Hintergrundwissen übernommen werden, Lesen schadet aber bekanntlich ja auch nicht.

Crypto Codeschnipsel 

Neben Postfix stellt die Codesammlung Einstellungen für folgende Systeme bereit:

  • Webserver
    • Apache, lighttpd, nginx, ms iis
  • SSH
    • Open SSH, Cisco ASA, Cisco IOS
  • Mailserver
    • Postfix, Dovecot, Cyrus, SMTP, Exim
  • VPN
    • IPSec, OpenVPN, PPTP, Cisco ASA
  • PGP
  • Instant Messaging
    • XMPP, Jabber, IRC, SILC
  • Datenbanken
    • Oracle, MySQL, PostgreSQL, DB2
  • Proxylösungen

Code ist nicht alles, so werden auf den 80 Seiten durchaus auch Theorie und Praxis beschrieben. Für Anwender und Admins sicherlich eine Pflichtlektüre.

Download  Better Crypto - Applied Crypto Hardening Handbuch

Code Firefox - Einführung in die Firefox Programmierung mit Video Tutorials und Übungsaufgaben

Manche Leser haben eventuell schon einmal mit dem Gedanken gespielt sich an einem OpenSource Projekt zu beteiligen. Die meisten denken dabei wohl an bekannte Open Source Programme, wobei gesagt werden sollte, dass es sicherlich toll ist an bekannten Tools mitzuarbeiten, aber auch die kleinen benötigen Programmierer.

CodeFirefox

Für heute bleibe ich dennoch bei einem bekannten Programm namens Firefox, wer kennt es nicht ;)

Firefox programmieren 

Denn Mozilla bietet für alle Einsteiger und angehende Open Source Programmierer eine gute Einstiegsseite unter CodeFirefox an. Dort werden mit Hilfe von Videotutorials und JavaScript Übungsaufgaben, alle wichtigen Fragen zum Einstieg in die Firefox Programmierung erklärt. Derzeit sind bereits 42 Hilfestellungen online, 36 sind noch offen, es werden unter anderem folgende Fragen beantwortet:

  • Aufbau einer Programmierumgebung für Firefox in Windows, Linux und OS X
  • Der Unterschied zwischen Firefox Kanälen und Repositories
  • Den Firefox Quellcode herunterladen
  • Hilfestellung per IRC
  • Einen eigenen Firefox erstellen
  • Arbeiten mit Bugzilla
    • Account erstellen
    • Umgang mit Bugs
  • Der Firefox Source Tree erklärt
  • Einführung in Mercurial
  • Ein Patch File erstellen
  • Patch bereitstellen und Branchintegration
  • Einführung in Mercurial Patch Queues
  • Arbeiten mit Patches
  • Einführung in Online Tools zur Code Analyse
  • Firefox Scratchpad
  • Firefox DOM Inspector
  • Debugging
  • JavaScript Module
  • XPCOM
  • Automatisierte Tests
  • Debugging
  • Fehlersuche

Auch wenn die Anleitungen noch nicht vollständig sind, bieten sie schon jetzt einen umfangreichen Einblick in die Entwicklung rund um Firefox. 

Code Firefox Einführung in die Firefox Programmierung

Cheatsheet

Neben den Videoanleitungen gibt es ebenfalls einen Spickzettel, welcher die wichtigsten Locations auflistet. So findet ihr dort Links zu Repositories, Kommandozeilenbefehlen, Troubleshooting, Codeschnipseln für Testläufe, Patches, Logging oder mozconfig. Das Cheatsheet ist goldwert, um den Überblick zu behalten.

Code Firefox Cheatsheet

Cheatsheet_CodeFirefox