SAP HANA meldet „Authentication Provider.cpp(00685) : Kerberos: Using empty Service Principal Name!“

Vor einigen Tagen habe ich mal wieder einen netten Fehler in einer SAP HANA DB bekommen:

Authentication   Provider.cpp(00685) : Kerberos: Using empty Service Principal Name!

Der erfahrene DB-Admin weiss dann schon, dass mal wieder irgendwas mit dem Single-Sign-On nicht klappt. Und genau so war es.
SAP HANA meldet „Authentication Provider.cpp(00685) : Kerberos: Using empty Service Principal Name!“ weiterlesen

Autostart von SAP HANA Datenbanken einschalten/ausschalten

Gerade eben hatte ich die Themenstellung den Autostart einer SAP HANA Datenbank einzuschalten, da die Datenbank nach einem Serverboot nicht automatisch hochgefahren ist. Eigentlich ist es einfach:

  1. Logon auf das Betriebssystem der SAP HANA Appliance mit adm oder wechsle auf adm.
  2. Editiere: /hana/shared/#SID#/profile/#SID#_HDB#INSTANCE_NUMBER#_#HOSTNAME#:
    vi /hana/shared/$SAPSYSTEMNAME/profile/$SAPSYSTEMNAME_HDB*
  3. Ändere „Autostart = 0“ auf „Autostart = 1
  4. Speichern

Beim nächsten Systemstart wird die Datenbank dann sofort mitstarten.

Konfiguration von MySQL und lighttpd mit PHP unter FFP 0.7

Dieses Tutorial funktioniert derzeit NUR auf Geräten mit „arm“-Paketen

Ich wurde nun mehrmals gebeten ein Tutorial zum Aufsetzen von MySQL und lighttpd mit PHP unter FFP 0.7 zu veröffentlichen. Und hier gehts los. Wenn ihr nicht wisst, was diese Software-Produkte sind, dann rate ich euch zum Besuch der Seiten von MySQL, Lighttpd und PHP.

Ein Wort der Warnung noch für alle Besitzer eines DNS-320/DNS-320L/DNS-325/DNS-345: Dieses Tutorial schaltet den internen MySQL-Server aus, sodass dieser nicht mehr aktiv ist. Das kann und wird zu Problemen bei den Zusatz-Applikationen wie Gallery, Blog und co führen. Wenn diese Applikationen nicht genutzt werden, kann das Tutorial gefahrlos verwendet werden.

Los gehts mit dem Einrichten von FFP 0.7, dem einbinden meines Repository „Uli“ und anschließend der Installation von meinen Paketen:

slacker -UaA uli:{libtool,php,mysql,lighttpd,curl,libxml2,libmcrypt,libpng,libjpeg-turbo,sqlite}

Möglicherweise werden jetzt neue Dateien im Verzeichnis /ffp/start angelegt. Das muss nun erstmal ausgebügelt werden:

[[ -f /ffp/start/kickangel.sh.new ]] && mv /ffp/start/kickangel.sh.new /ffp/start/kickangel.sh
[[ -f /ffp/start/kickwebs.sh.new ]] && mv /ffp/start/kickwebs.sh.new /ffp/start/kickwebs.sh
[[ -f /ffp/start/mysqld.sh.new ]] && mv /ffp/start/mysqld.sh.new /ffp/start/mysqld.sh
[[ -f /ffp/start/lighttpd.sh.new ]] && mv /ffp/start/lighttpd.sh.new /ffp/start/lighttpd.sh

Jetzt werden diese konfiguriert:
Los gehts mit lighttpd:

cp /ffp/etc/examples/lighttpd/lighttpd.conf /ffp/etc
rm /ffp/etc/examples/lighttpd.conf* /ffp/etc/examples/php.ini

Weiter gehts mit MySQL. Zunächst wird die Konfiguration kopiert, dann die Datenbanken installiert und zu guter letzt die Installation abgesichert:

sh /ffp/start/mysqld.sh stop
cp /ffp/etc/examples/mysql/my.cnf /ffp/etc/
ln -snf /ffp/opt/srv /srv
mkdir -p /srv/mysql/{innodblogdir,binlog,log,tmp,datadir}
mkdir -p /srv/tmp
/ffp/bin/mysql_install_db --basedir=/ffp
sh /ffp/start/mysqld.sh start
/ffp/bin/mysql_secure_installation

Das letzte Kommando wird folgendes ausgeben, ich habe meine Eingaben fett markiert. Das Passwort musst du dir merken!:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we’ll need the current
password for the root user. If you’ve just installed MySQL, and
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on…

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] Y
New password: MYVERYSECRETPASSWORD
Re-enter new password: MYVERYSECRETPASSWORD
Password updated successfully!
Reloading privilege tables..
… Success!

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
… Success!

Normally, root should only be allowed to connect from ‚localhost‘. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
… Success!

By default, MySQL comes with a database named ‚test‘ that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
– Dropping test database…
… Success!
– Removing privileges on test database…
… Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
… Success!

Cleaning up…

All done! If you’ve completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

Damit läuft nun MySQL einwandfrei und wir können den rest noch konfigurieren. Bitte merke dir das verwendete Passwort, du wirst es noch für weitere Tutorials brauchen.

Jetzt muss noch PHP konfiguriert werden:

cp /ffp/etc/examples/php/php.ini /ffp/etc/

Anschließend kann der Webserver gestartet werden.

mkdir -p /srv/www/{pages,logs,tmp}
sh /ffp/start/kickangel.sh start && sh /ffp/start/kickwebs.sh start && sh /ffp/start/lighttpd.sh start

Jetzt testen wir, ob es funktioniert:

echo '<?php echo "PHP works!"; ?>' > /srv/www/pages/index.php

PHP works! Gehe nun auf die Adresse deines NAS (z.B. http://nas/ oder die IP-Adresse, also z.b. http://192.168.133.7/). Dort sollte der Schriftzug „PHP works!“ wie im rechten Bild erscheinen.

Wenn du das Administrationsinterface deines NAS suchst, ist das nun auf Port 81 erreichbar, also z.B. http://nas:81/ oder http://192.168.133.7:81/.

Wenn das nun alles läuft, können die Dienste nun permanent aktiviert werden:

chmod a+x /ffp/start/{kickangel,kickwebs,lighttpd,mysqld}.sh
chmod a+x /ffp/start/kickwebs.sh
chmod a+x /ffp/start/lighttpd.sh
chmod a+x /ffp/start/mysqld.sh

MySQL: Spalte einer Tabelle in Kleinbuchstaben umändern

Soeben stand ich vor der Frage: Kann man eine Spalte einer MySQL-Tabelle in Kleinbuchstaben umändern? Hintergrund war das Problem, dass die Daten inhomogen eingegeben wurden, jedoch alle in kleinbuchstaben sein sollten. Das geht ganz schnell wenn man weiß wie:

UPDATE tabelle SET spalte=LOWER(spalte);

Und schon ist die Sache erledigt.

Plugin Mongoosastic für die Verbindung zwischen Mongoose ODM und Elasticsearch

Kurzhinweis: James Carr hat gestern ein Plugin namens Mongoosastic für Mongoose ODM veröffentlicht, welches eine Verbindung eines Mongoose Models zu Elasticsearch erlaubt. Es fügt eine neue Methode „search“ in ein Model ein, welche im Hintergrund auf Elasticsearch zugreift. Die Indexierung des Models erfolgt parallel im Hintergrund. Bei Bedarf kann man dann dann auch nur bestimmte Felder indexieren lassen und über ein Feature namens „Hydration“ die Daten mit Daten aus der MongoDB vervollständigen lassen. Einfach die Doku lesen für weitere Infos.

Mongoose ODM 2.7.0 ist erschienen

Vor ein paar Tagen wurde Mongoose 2.7.0 freigegeben. Es wird von den Machern als das letzte Release von 3.0 gesehen. In diesem Release soll ein Cleanup der API erfolgen, damit diese näher an der originalen MongoDB-API ist. Daher wird jetzt als Vorbereitung in 2.7.0 schon aufgeräumt. Hier die Übersicht der veralteten (Spalte „Deprecated“) Methoden und welche Alternativen es gibt (Spalte „Alternative“):

Deprecated                    Alternative
Query#$or                     Query#or
Query#$nor                    Query#nor
Query#$gt                     Query#gt
Query#$gte                    Query#gte
Query#$lt                     Query#lt
Query#$lte                    Query#lte
Query#$in                     Query#in
Query#$nin                    Query#nin
Query#$ne                     Query#ne
Query#$all                    Query#all
Query#$regex                  Query#regex
Query#$size                   Query#size
Query#$maxDistance            Query#maxDistance
Query#$within                 Query#within
Query#$box                    Query#box
Query#$center                 Query#center
Query#$centerSphere           Query#centerSphere
Query#$slice                  Query#slice 
Query#run                     Query#exec
Query#notEqualTo              Query#notEqualTo
Query#wherein                 Query#within
Query#fields                  Query#select
Query#asc                     Query#sort
Query#desc                    Query#sort
Query#only                    Query#select
Query#exclude                 Query#select
Query#each                    Query#stream
MongooseArray#$push           MongooseArray#push
MongooseArray#$pull           MongooseArray#pull
MongooseArray#$pushAll        MongooseArray#push
MongooseArray#pushAll         MongooseArray#push
MongooseArray#$pullAll        MongooseArray#pull
MongooseArray#pullAll         MongooseArray#pull
MongooseArray#$unshift        MongooseArray#unshift
MongooseArray#$addToSet       MongooseArray#addToSet
Document#commit               MongooseArray#markModified
Mongoose#connectSet           MongooseArray#connect
Mongoose#createSetConnection  MongooseArray#createConnection
MongooseNumber#$inc           removed
MongooseNumber#increment      removed
MongooseNumber#decrement      removed

Die gesamte Diskussion zum Release 2.7.0 findet sich hier.

Warum man nicht mit Events in Oracle Database herumspielt

Soeben habe ich hier gelesen, warum es ratsam ist, nicht mit dem Parameter „Event“ herumzuspielen.
Oracle Logo

So waren die folgenden beiden Beispiele angegeben, was passieren kann, wenn man mit den falschen Parametern spielt:

$ oerr ora 10665
10665, 00000, „Inject Evil Literals“
// *Cause: Event 10665 is set to some number > 0, causing 1/(value-1) of all
// literals to be replaced by 2000 letter ‚A’s. A value of 1 does
// not corrupt anything.
// *Action: never set this event

$ oerr ora 10668

10668, 00000, „Inject Evil Identifiers“
// *Cause: event 10668 is set to some number > 0, causing 1/(value-1) of all
// identifiers to be replaced by a maximum amount of x’s. It is
// common for an identifier to be parsed once with a max of 30 bytes,
// then reparsed later with a max of 4000, so it may not be possible
// to inject such an identifier without the aid of this event. A
// value of 1 causes no identifiers to be corrupted.
// *Action: never set this event

Sehen böse aus 😉 Bei Karl Arao kann man dann sehen, wie die Kreatur, die man dabei erzeugt, aussieht:
SQL Trick or Treat