MySQL selbst neu kompilieren / alte ./configure-parameter herausfinden
-
- Posts: 8
- Joined: 2008-04-30 16:57
MySQL selbst neu kompilieren / alte ./configure-parameter herausfinden
Hey Folks,
Ich hab nen 1&1 RootServer mit SuSe Linux und hab das übliche setup von 1&1 mit apache, mysql, php etc..
nun hat mein mysql-server aber kein SSL eingebaut, und über yast kann man auch keine version nachinstallieren/updaten die ssl unterstüzt
(ich hab zumindest nichts gefunden, wenn einer was weiß...).
und die developer-downloads auf dev.mysql.com sagen auch nichts zu ssl-support.. (wo gibt's ne feature list für die angebotenen RPM's?)
jedenfalls möchte ich natürlich in der umgebung die fertig eingerichtet & funktionsfähig ist möglichst wenig veränderungen vornehmen.
da 1&1 bzw. das serverteam die mysql-versionen aber installiert haben, weiß ich nichts über die benutzten ./configure - parameter
der aktuellen version.
gibt's irgend eine funktion die mit ähnlich wie PHP in phpinfo() die benutzten kommandos fürs configscript ausspuckt?
danke!
Ich hab nen 1&1 RootServer mit SuSe Linux und hab das übliche setup von 1&1 mit apache, mysql, php etc..
nun hat mein mysql-server aber kein SSL eingebaut, und über yast kann man auch keine version nachinstallieren/updaten die ssl unterstüzt
(ich hab zumindest nichts gefunden, wenn einer was weiß...).
und die developer-downloads auf dev.mysql.com sagen auch nichts zu ssl-support.. (wo gibt's ne feature list für die angebotenen RPM's?)
jedenfalls möchte ich natürlich in der umgebung die fertig eingerichtet & funktionsfähig ist möglichst wenig veränderungen vornehmen.
da 1&1 bzw. das serverteam die mysql-versionen aber installiert haben, weiß ich nichts über die benutzten ./configure - parameter
der aktuellen version.
gibt's irgend eine funktion die mit ähnlich wie PHP in phpinfo() die benutzten kommandos fürs configscript ausspuckt?
danke!
Re: MySQL selbst neu kompilieren / alte ./configure-parameter herausfinden
Mit dem Server kommt ein Shellscript 'mysqlbug', das im Scripttext oben die gesuchte Information enthält.lilalaunebaer wrote:da 1&1 bzw. das serverteam die mysql-versionen aber installiert haben, weiß ich nichts über die benutzten ./configure - parameter der aktuellen version.
Du willst jedoch mit einem MySQL-Server nicht mit SSL reden, insbesondere nicht, wenn Du PHP, Perl oder eine andere Umgebung verwendest, die vorrangig mit transienten Verbindungen arbeitet. Der Haupt-Aufwand bei SSL besteht in der Aushandlung von SSL-Parametern, dem Austausch von Zertifikaten und Key-Material, darunter auch der Session-Key. Bei Umgebungen mit transienten Verbindungen passiert das am Beginn jeder Seite neu, und ist extrem langsam. Auf talks.php.net findest Du einen Haufen Slides von Rasmus, die unter anderem dies verwenden um eine besonders eindrucksvolle Tuning-Session zu bauen.
Wenn Du eine Verbindung zu einem MySQL-Datenbankserver schützen mußt - und das mußt Du nie, wenn sie durch ein vertrauenswürdiges Netz läuft - dann bau Dir einen IPsec oder OpenVPN-Tunnel und leg eine unverschlüsselte Verbindung da durch. Das hat eine ganze Reihe von Vorteilen - zum Beispiel findet eine wesentlich seltenere Schlüsselaushandlung statt und es ist nicht nur Datenbank-Kommunikation gesichert, sondern grundsätzlich alle Kommunikation die durch Dein VPN geroutet wird.
-
- Posts: 5923
- Joined: 2004-05-23 12:53
Re: MySQL selbst neu kompilieren / alte ./configure-parameter herausfinden
Nein, aber im Source RPM (.srpm) gibt es ein Specfile, dass die gewünschten Informationen enthält.lilalaunebaer wrote:gibt's irgend eine funktion die mit ähnlich wie PHP in phpinfo() die benutzten kommandos fürs configscript ausspuckt?
Ich kann mir aber irgendwie nicht vorstellen, dass der mysqld von OpenSuSE ohne SSL-Unterstützung ausgeliefert wird. Was gibt denn `ldd /path/to/mysqld` aus?
Re: MySQL selbst neu kompilieren / alte ./configure-parameter herausfinden
Interessanter ist die folgende Ausgabe:Roger Wilco wrote:Ich kann mir aber irgendwie nicht vorstellen, dass der mysqld von OpenSuSE ohne SSL-Unterstützung ausgeliefert wird. Was gibt denn `ldd /path/to/mysqld` aus?
Code: Select all
root@localhost [(none)]> show variables like 'HAVE%';
+-----------------------+----------+
| Variable_name | Value |
+-----------------------+----------+
| have_archive | YES |
| have_bdb | NO |
| have_blackhole_engine | YES |
| have_compress | YES |
| have_crypt | YES |
| have_csv | YES |
| have_dynamic_loading | YES |
| have_example_engine | NO |
| have_federated_engine | YES |
| have_geometry | YES |
| have_innodb | YES |
| have_isam | NO |
| have_merge_engine | YES |
| have_ndbcluster | DISABLED |
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| have_query_cache | YES |
| have_raid | NO |
| have_rtree_keys | YES |
| have_symlink | YES |
+-----------------------+----------+
20 rows in set (0.02 sec)
-
- Posts: 5923
- Joined: 2004-05-23 12:53
Re: MySQL selbst neu kompilieren / alte ./configure-parameter herausfinden
Und wieder ein Stückchen schlauer. Danke für die Erklärung.
-
- Posts: 8
- Joined: 2008-04-30 16:57
Re: MySQL selbst neu kompilieren / alte ./configure-parameter herausfinden
Hallo!
Vielen Dank, die Info war genau was ich brauchte.
Also ich habe nicht vor von PHP aus per SSL mit MySQL zu kommunizieren; das läuft auf dem gleichen Server und ist auch nicht meine Sorge.
Ich habe aber ein C# .NET- Programm das den MySQL Connector/.NET benutzt um auf die Datenbank zuzugreifen (Webseite & Verwaltungsprogramm werden aus gleicher DB auf Server gespeist), und dafür möchte (muss) ich SSL verwenden.
und da das programm die in-memory architektur von .NET benutzt, brauche ich auch keine dauernde verbindung, ein IPsec-tunnel oder so wäre in diesem rahmen wohl der overkill.
(es sei denn jemand kann mir eine wirklich einfache lösung beschreiben wie ich das auf beiden seiten mit IPsec / VPN umsetze, besonders die windows-seite wäre dann wohl das wovon ich gar keine ahnung hab)
Und der bei meinem Rootserver gelieferte mysqld hat "has_ssl" bzw. "has_openssl" auf NO.. sonst wär ich wohl auch schon fertig :-)
danke!
Vielen Dank, die Info war genau was ich brauchte.
Also ich habe nicht vor von PHP aus per SSL mit MySQL zu kommunizieren; das läuft auf dem gleichen Server und ist auch nicht meine Sorge.
Ich habe aber ein C# .NET- Programm das den MySQL Connector/.NET benutzt um auf die Datenbank zuzugreifen (Webseite & Verwaltungsprogramm werden aus gleicher DB auf Server gespeist), und dafür möchte (muss) ich SSL verwenden.
und da das programm die in-memory architektur von .NET benutzt, brauche ich auch keine dauernde verbindung, ein IPsec-tunnel oder so wäre in diesem rahmen wohl der overkill.
(es sei denn jemand kann mir eine wirklich einfache lösung beschreiben wie ich das auf beiden seiten mit IPsec / VPN umsetze, besonders die windows-seite wäre dann wohl das wovon ich gar keine ahnung hab)
Und der bei meinem Rootserver gelieferte mysqld hat "has_ssl" bzw. "has_openssl" auf NO.. sonst wär ich wohl auch schon fertig :-)
danke!
Re: MySQL selbst neu kompilieren / alte ./configure-parameter herausfinden
Das klingt IMHO so als wollest Du Dir mal ein beliebiges openvpn Tutorial im Web greifen und auf Deinem Server einen openvpn Server auf einem Port Deiner Wahl installieren. Den Client gibt es auch für Windows und er ist reicht trivial zu installieren.lilalaunebaer wrote:(es sei denn jemand kann mir eine wirklich einfache lösung beschreiben wie ich das auf beiden seiten mit IPsec / VPN umsetze, besonders die windows-seite wäre dann wohl das wovon ich gar keine ahnung hab)
Ich habe das für meinen Dedi getan, und das hat mich etwa eine Stunde Arbeit gekostet ohne Vorwissen über openvpn zu haben. Ich verwende es unter anderem um mit meinem Macbook via openvpn durch den Firmen-Proxy ins Internet gehen zu können ohne der Firma alle meine URLs in deren Proxylog zu hinterlassen.
openvpn verwendet normales TCP oder UDP, auf Wunsch auch auf Port 443 und durch einen Webproxy, um IP zu tunneln. Es verschlüsselt mit SSL (openssl).
-
- Posts: 8
- Joined: 2008-04-30 16:57
MINI-HOWTO: MySQL selbst neu kompilieren / alte ./configure-parameter herausfinden
Hallo leute, mittlerweile habe ich alles fertig und dachte ich poste mal die schritte, die bei mir funktioniert haben.
Achtung: ich hab nen AMD64 DualCore Dedicated bei 1&1, openSUSE 11, Plesk 9.2.1. Ob alles bei anderen konfigurationen funktioniert, sei dahingestellt.
anwendung auf eigene gefahr, selbstverständlich.
1. macht euch unter root nen verzeichnis
2. holt euch die Mysql version die ihr benutzen wollt; bei mir wars 5.1.36. gibts unter dev.mysql.com.
3. per yast folgende pakete installieren, falls nicht schon vorhanden:
4. im verzeichnis das .configure-script ausführen:
WICHTIG: bei diesem script kommt es natürlich sehr auf euer konkretes system an. in meinem falle war ja schon mysql-5.0 installiert; da kann man mit dem mysqlbug-script
über
oder
infos bekommen wie die letzten build-parameter waren. ich musste jedoch etwas probieren bis alles funktionierte. vor allem um den InnoDB-Support zuzuschalten wars schwierig; den parameter
hab ich so nicht in den mysqldocs finden können.
5. kommen keine fehlermeldungen, das ganze per make erstellen:
dabei wird der output in make.log geschrieben, was viele viele bildschirmausgaben verhindert.
6. SICHERUNG:
ausführen. damit ist der server und der client auf dem rechner installiert.
8. SSL-einrichtung. wie oben festgelegt, haben wir MySQL mit yaSSL-support gebacken. nun brauchen wir noch zertifikate.
wer schon ein CA-zertifikat hat, braucht natürlich keins zu erstellen. sonst kann man dies z.B. über
erledigen. dabei muss man vorher ca_conf.txt mit angepasstem inhalt erstellen (geht auch ohne config-file, nur ists lästig bei erneuter ausführung wieder anzugeben)
nun erstellt man noch das mysql-certifikat:
wieder wird eine config-datei (mysql_conf.txt) benötigt.
hierbei: unter CN sollte die adresse stehen unter der später der server angesprochen wird, z.b. mysql.mydomain.de. dies kann lästige fehlermeldungen verhindern.
9. nun muss man die zertifikate noch an einen günstigen ort kopieren; ich habs alles in den Mysql-ordner verschoben:
10. eintragen in my.cnf. unter mysqld kommen folgende einträge
11. nun muss man noch den Mysql-daemon neu starten. normalerweise tuts ein
wie auch immer, bei mir fährt der mysqld dann nicht runter. also einfach mit der brechstange
eingeben und mit
wieder starten. ob der neue server geladen wurde sieht man z.b. mit
12. upgrade ausführen, falls man vorher mysql 5.0 hatte:
12. für plesk: man muss noch
ausführen, damit plesk wieder dort temporäre sql-caches einrichten kann; mein plesk hat sich da beim domaineinrichten beschwert.
13. prüfen ob alles klappt:
dann sollte da sowas stehen wie
herzlichen glückwunsch, mysql 5.1 mit SSL läuft!
ich hab lang genug gebraucht, ich hoffe ich kanns vielen einfacher machen!
grüße
lilalaunebaer
Achtung: ich hab nen AMD64 DualCore Dedicated bei 1&1, openSUSE 11, Plesk 9.2.1. Ob alles bei anderen konfigurationen funktioniert, sei dahingestellt.
anwendung auf eigene gefahr, selbstverständlich.
1. macht euch unter root nen verzeichnis
Code: Select all
cd ~
mkdir software
cd software
Code: Select all
wget <url-to-source-tarball>
tar -xzf mysql-<version>.tar.gz
cd mysql-<version>
- gcc
gcc-c++
make
ncurses-devel
readline-devel
libopenssl-devel
openssl
4. im verzeichnis das .configure-script ausführen:
Code: Select all
CC='gcc' ./configure '--with-ssl' '--with-plugins=innobase' '--with-charset=utf8' '--with-collation=utf8_unicode_ci' '--enable-assembler' '--without-readline' '--infodir=/usr/share/info' '--libdir=/usr/lib64' '--libexecdir=/usr/sbin' '--localstatedir=/var/lib/mysql' '--mandir=/usr/share/man' '--prefix=/usr' '--sysconfdir=/etc' '--with-mysqld-user=mysql' '--without-debug' '--datadir=/usr/share' '--includedir=/usr/include' '--with-extra-charsets=complex' '--with-unix-socket-path=/var/lib/mysql/mysql.sock' '--enable-thread-safe-client' '--with-comment=My own build' '--with-libwrap' '--with-server-suffix=-max' 'HOSTNAME=/bin/hostname -f' '--with-server-suffix=-Max' '--with-embedded-server' 'CFLAGS=-O2 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -g -DPIC -fPIC -DUNDEF_HAVE_INITGROUPS -DFORCE_INIT_OF_VARS -fno-strict-aliasing' 'CXXFLAGS=-O2 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -g -DPIC -fPIC -DUNDEF_HAVE_INITGROUPS -DFORCE_INIT_OF_VARS -fno-strict-aliasing -fno-exceptions -fno-rtti'
über
Code: Select all
mysqlbug --help
Code: Select all
VISUAL=vi; export VISUAL; mysqlbug
Code: Select all
'--with-plugins=innobase'
5. kommen keine fehlermeldungen, das ganze per make erstellen:
Code: Select all
make > make.log
6. SICHERUNG:
- /etc/my.cnf
/usr/bin/mysqld (falls gewünscht)
Code: Select all
make install
8. SSL-einrichtung. wie oben festgelegt, haben wir MySQL mit yaSSL-support gebacken. nun brauchen wir noch zertifikate.
wer schon ein CA-zertifikat hat, braucht natürlich keins zu erstellen. sonst kann man dies z.B. über
Code: Select all
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 10000 -config ca_conf.txt -key ca-key.pem > ca-cert.pem
Code: Select all
[ req ]
distinguished_name = req_distinguished_name
prompt = no
[ req_distinguished_name ]
C = DE
ST = NRW
L = <Ort>
O = <Organisation>
OU = <unternehmen>
CN = <authority_name>
emailAddress = pgp@danielwirtz.de
Code: Select all
openssl req -newkey rsa:2048 -days 10000 -config mysql_conf.txt -nodes -keyout mysql-key.pem > mysql-req.pem
openssl x509 -req -in mysql-req.pem -days 10000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > mysql-cert.pem
hierbei: unter CN sollte die adresse stehen unter der später der server angesprochen wird, z.b. mysql.mydomain.de. dies kann lästige fehlermeldungen verhindern.
9. nun muss man die zertifikate noch an einen günstigen ort kopieren; ich habs alles in den Mysql-ordner verschoben:
Code: Select all
cp *.pem /var/lib/mysql
Code: Select all
[mysqld]
[...]
ssl-ca = /var/lib/mysql/ca-cert.pem
ssl-cert = /var/lib/mysql/mysql-cert.pem
ssl-key = /var/lib/mysql/mysql-key.pem
Code: Select all
rcmysql restart
Code: Select all
kill <mysqld-process-id>
Code: Select all
rcmysql start
Code: Select all
mysqld -V
Code: Select all
mysql_upgrade -u <root-user> -p
Code: Select all
chown mysql:mysql /var/lib/mysql
13. prüfen ob alles klappt:
Code: Select all
mysql -u admin -p
mysql> show variables like '%ssl%';
Code: Select all
have_ssl yes
ssl-ca = /var/lib/mysql/ca-cert.pem
[...]
ich hab lang genug gebraucht, ich hoffe ich kanns vielen einfacher machen!
grüße
lilalaunebaer
-
- Posts: 8
- Joined: 2008-04-30 16:57
Re: MySQL selbst neu kompilieren / alte ./configure-parameter herausfinden
das geht natürlich auch :-)
wenn man doch nur die richtigen quellen kennen würde! wie bindet man die url denn in yast ein?
das erledigt zwar noch nicht das zertifikaterstellen, aber das ist ja klar.
ich wäre da aber vorsichtig was das rpm-upgrade angeht; woher weiß man welche features mit einkompiliert wurden?
und ob das dann mit plesk funktioniert? DAS würde ich eh mal gerne wissen, aber auf nem livesystem werd ich solche experimente tunlichst lassen.
wie kann man den sowas wieder deinstallieren falls man doch lieber das vorige mysql 5.0.xx benutzt hätte? da habe ich noch gar keine ahnung von..
das ist immer ein one-way trip bei mir ..
wenn man doch nur die richtigen quellen kennen würde! wie bindet man die url denn in yast ein?
das erledigt zwar noch nicht das zertifikaterstellen, aber das ist ja klar.
ich wäre da aber vorsichtig was das rpm-upgrade angeht; woher weiß man welche features mit einkompiliert wurden?
und ob das dann mit plesk funktioniert? DAS würde ich eh mal gerne wissen, aber auf nem livesystem werd ich solche experimente tunlichst lassen.
wie kann man den sowas wieder deinstallieren falls man doch lieber das vorige mysql 5.0.xx benutzt hätte? da habe ich noch gar keine ahnung von..
das ist immer ein one-way trip bei mir ..
Re: MySQL selbst neu kompilieren / alte ./configure-parameter herausfinden
Ich würde mir den SSL-Quatsch ja sparen und einfach den SQL-Port per SSH forwarden - dann braucht man den SQL-Server nicht öffentlich zugängig machen...