Deutsch| English

Zurück   Howtoforge Forum > ISPConfig > Tipps - Tricks - Mods

Like Tree1Likes
  • 1 Post By Rafael.K

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1  
Alt 17.08.2011, 02:03
Neuer Benutzer
 
Registriert seit: 11.08.2011
Beiträge: 13
Idee Jailkit und mysqld.sock FIX***

Hallo,

Ich wollte MySql + MySqlDump für Jailuser freigeben, dafür habe ich beide Anwendungen in "Jailkit chrooted Anwendungen" eingetragen und neue Jails erstellt.
Es hat alles einwandfrei funktioniert, allerdings nur bis zu ersten Neustart des Systems/MySql-Daemons. So habe ich mich auf die Suche nach Fehler im System begeben, konnte aber nichts feststellen. Nach einem Neustart kommt immer ein Fehler bei Jail-Benutzer etwa : "Kann nicht über Sockel mysqld.sock Verbindung herstellen…."

Das, was unten aufgeführt ist, ist zu Information, wie ich auf die Lösung gekommen bin. Und zweckt in erster Linie der Hilfe bei Fehlersuche in meinem Skript. Falls ich etwas FALSCHES wiedergegeben oder von sich geschrieben habe, dann liegt es an meine geringe Kenntnisse in Linux/Unix-Systemen oder Informationquellen, die ich genutzt habe. Berichtigt es bitte um Kettenreaktion der falschen Beiträge zu stoppen, denn die Suchmaschinen liefern auch Schrott, wobei dieses Thread beides sein kann.


Quellen: " Jailkit - chroot jail utilities " , " http://www.howtoforge.*/forum/ " , " gidf, wie immer nützliche in Lesezeichen nich angelegt !!!"

Jailkit-Doku --> jk_cp und jk_init tun fast das gleiche(s. Doku) "-k": "Try to create hardlinks instead of copying the files. If linking fails it falls back to copying.."
Ich habe also gedacht, dass jailkit selbst erkennt welche Sockel er für MySql mitkopiert(bzw. ein Link erstellt) und gegebenenfalls überwacht, weil im CHROOTs war diese immer zu finden. Dann habe ich in einem anderen englischen Forum gleiches Problem gefunden und festgestellt, dass es nicht der Fall ist und diese Problem noch nicht gelöst ist, und Jailkit kann nicht mit Unix-Sockets(Ausnahme: jk_socketd für LOG Socket) umgehen.
Eine weitere Suche hat ergeben, dass die Sockets keine gewöhnliche Dateien sind und werden erst erstellt, wenn daemon gestartet wird, und sollten nicht als Dateien, sondern als Geräte angesehen/behandelt werden.

Erste positive ergebniss der Suche in "ISPConfig 3 Source" war die Datei "/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh" :
Code:
####################################################################################
…
# mysql needs the socket in the chrooted environment
mkdir $CHROOT_HOMEDIR/var
mkdir $CHROOT_HOMEDIR/var/run
mkdir $CHROOT_HOMEDIR/var/run/mysqld

# ln /var/run/mysqld/mysqld.sock $CHROOT_HOMEDIR/var/run/mysqld/mysqld.sock
if [ -e "/var/run/mysqld/mysqld.sock" ]
then
  ln /var/run/mysqld/mysqld.sock $CHROOT_HOMEDIR/var/run/mysqld/mysqld.sock
fi
…
#################################################################################
zu beachten ist, dass hier ein Hardlink in CHROOT von echten MySQL-Socket erstellt wird, und wie oben beschrieben: "… Sockets … werden erst erstellt, wenn daemon gestartet wird … " . Und wenn die immerwieder neu erstellt werden, dann sind die immer unterschiedlich(also Infos und Adressen wo diese in liegen) und Hardlink zeigt irgendwo-hin nur nicht auf den neuen mysqld.sock.


Und so habe ich mich entschlossen etwas für Lösung dieses Problems zu unternehmen.

Folgendes war Ziel:
1. alle CHROOTs finden.(kein Problem mit MySQL-Abfrage)
2. Jedes neustart des MySql-Servers muss neue Socket bei CHROOTs bereitstellen.
3. Muss automatisch Funktionieren. Und nicht Lastig sein, möglichst ohne extra DAEMON dafür.

Und das ist dabei rausgekommen:
1. Geht auch ohne MySQL-Abfrage. Mit kleiner INJEKTION in /etc/init.d/mysql
2. OHNE Extra-DAEMON
3. fix-skript für bestehende CHROOTs
4. kleines Update-Skript für Zufügen neuen Anwendungen in "Jailkit chrooted Anwendungen" für alle CHROOTs. "Könnte in eine der neuen Versionen von ISPCONFIG3 fließen, weil minestens 2 Threads für diese Problem hier gesehen."

Weiter geht es mit HowTo: - fix-Jailkit-mysqld.sock.
Wie immer . . . alles ohne Gewähr, testet es auf eigene Gefahr.

als erstes ladet jk-mysql.sock-fix.zip Archiv [für Könner *.txt] aus Anhang herunter und schiebt enthaltene Dateien in Verzeichnis "/usr/local/ispconfig/server/scripts/"

dann benennt folgende Dateien um:
"create_jailkit_chroot.sh" => z.B "create_jailkit_chroot.sh.Original"

"create_jailkit_chroot.sh.fix" => "create_jailkit_chroot.sh"

und setzt Rechte der Dateien "create_jailkit_chroot.sh" und "jailkit_mysql_sock_fix.sh".
Code:
chown ispconfig:ispconfig create_jailkit_chroot.sh jailkit_mysql_sock_fix.sh
cmod 751  create_jailkit_chroot.sh jailkit_mysql_sock_fix.sh
jetzt wird die "/etc/init.d/mysql" angepasst.

ACHTUNG !!! Sehr aufmerksam!!! Die richtige Zeile finden!!! ACHTUNG


1. beim CASE-Verzweigung für 'start' bei ca Zeile 122
Code:
. . .
            # Now start mysqlcheck or whatever the admin wants.
            output=$(/etc/mysql/debian-start)
            [ -n "$output" ] && log_action_msg "$output" # <-- ca Zeile 121
#######################################################################################
# Jailkit-mysqld.sock Problem
        ./usr/local/ispconfig/server/scripts/jailkit_mysql_sock_fix.sh "mountAll"
#######################################################################################
        else
            log_end_msg 1
        log_failure_msg "Please take a look at the syslog"
        fi
    fi
. . .
2. beim CASE-Verzweigung für 'stop' gleich nach Kommentaren
Code:
. . .
    # * As a passwordless mysqladmin (e.g. via ~/.my.cnf) must be possible
    # at least for cron, we can rely on it here, too. (although we have 
    # to specify it explicit as e.g. sudo environments points to the normal
    # users home and not /root)
#######################################################################################
# Jailkit-mysqld.sock Problem
        ./usr/local/ispconfig/server/scripts/jailkit_mysql_sock_fix.sh "umountAll" 
#######################################################################################
    log_daemon_msg "Stopping MySQL database server" "mysqld"
    if ! mysqld_status check_dead nowarn; then
. . .
ACHTUNG !!! Sehr wichtig!!! ACHTUNG
Wenn web-Ordner von normalen Installation abweichen, dann in "jailkit_mysql_sock_fix.sh" reinschauen und jails="/var/www/clients/client*/web*/bin" anpassen.

jetzt werden Bestehende Jail-CHROOTs gefixt (alte Hardlinks löschen -> einfache "Datei/je CHROOT" mit touch erstellen -> mysqld.sock auf diese mounten)
Code:
/./usr/local/ispconfig/server/scripts/jailkit_mysql_sock_fix.sh -fixAll
und nun FFF. Ab jetz wird MySql auch für Jails für immer zugänglich sein.
Angehängte Dateien
Dateityp: zip jk-mysql.sock-fix.zip (3,1 KB, 10x aufgerufen)
Dateityp: txt create_jailkit_chroot.sh.fix.txt (796 Bytes, 6x aufgerufen)
Dateityp: txt jailkit_mysql_sock_fix.sh.txt (5,0 KB, 7x aufgerufen)
celocore likes this.
Mit Zitat antworten
  #2  
Alt 17.08.2011, 09:16
Administrator
 
Registriert seit: 08.08.2007
Beiträge: 8.825
Standard

Danke für den Fix!
Mit Zitat antworten
  #3  
Alt 19.08.2011, 12:08
Benutzer
 
Registriert seit: 13.01.2009
Beiträge: 74
Standard

Hi,

ich habe meine "Jailkit chrooted Anwendungen" um /usr/bin/mysql und /usr/bin/mysqldump erweitert. Es steht auch korrekt in der server-Tabelle der ispc-DB drin, aber irgendwie
werden die Binaries nicht mit kopiert beim Anlegen der chroot-Umgebung
Habt Ihr vielleicht eine Idee woran das liegen kann?
__________________
// Grüße Micha

11x Server mit ISPConfig 2.2.37 @ ubuntu 8.04 LTS (Apache, MySQL, Postfix, Courier, ClamAV, SpamAssassin)
_5x Server mit ISPConfig 3.0.33 @ ubuntu 8.04 LTS (Apache, MySQL, Postfix, Dovecot, ClamAV, SpamAssassin)
Mit Zitat antworten
  #4  
Alt 19.08.2011, 12:48
Neuer Benutzer
 
Registriert seit: 11.08.2011
Beiträge: 13
Standard

Wenn es um bestehende CHROOTs geht dann führe bitte mal folgendes aus:
Code:
./jailkit_mysql_sock_fix.sh -updateAll '/usr/bin/mysql /usr/bin/mysqldump'
./jailkit_mysql_sock_fix.sh -fixAll
beachte dabei, wenn die web-Ordner von Standartinstallation abweichen, die Zeilel in jailkit_mysql_sock_fix.sh :
Code:
...
# Costomize only if "System" -> "Server Config" -> "Web" -> "Website path" in ISPc-UI modified.
jails="/var/www/clients/client*/web*/bin" #finds all ISPCONFIGs CHROOTs !-> some Jailkits file schould be includet in String, for example "*/bin"!!! 
###
...
PS: Dieses Thread ist nur ein FIX für mysqld.sock und nicht für JAILKIT-Funktionen allgemein. jailkit_mysql_sock_fix.sh Skript ist noch nicht in PHP-Code integriert und somit nicht die Bestehende CHROOTs beim Einfügen in "Jailkit chrooted Anwendungen" updaten kann. Dafür muss du wie oben beschrieben optionen "-updateAll" und "-fixAll" selbst ausführen.

Geändert von Rafael.K (19.08.2011 um 19:09 Uhr).
Mit Zitat antworten
  #5  
Alt 19.08.2011, 12:51
Benutzer
 
Registriert seit: 13.01.2009
Beiträge: 74
Standard

Hallo Rafael,

soweit, so klar. Aber bei mir befinden bei neu angelegten chroots die MySQL-Binaries gar nicht erst in der chroot-Umgebung. Das ist das, was mich im Moment stutzen läßt.
__________________
// Grüße Micha

11x Server mit ISPConfig 2.2.37 @ ubuntu 8.04 LTS (Apache, MySQL, Postfix, Courier, ClamAV, SpamAssassin)
_5x Server mit ISPConfig 3.0.33 @ ubuntu 8.04 LTS (Apache, MySQL, Postfix, Dovecot, ClamAV, SpamAssassin)
Mit Zitat antworten
  #6  
Alt 19.08.2011, 13:13
Neuer Benutzer
 
Registriert seit: 11.08.2011
Beiträge: 13
Standard

Wenn Jailkit richtig installiert und konfiguriert ist sollte es keine Probleme geben. wenn nicht dann kannst du das hier versuchen.

bzw:
Debugging in der Datei "/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh" erstellen. Dazu muss man diese Datei
anpassen:
also Kommentar bei "jk_cp -k ........" setzen und "echo -e "` ...... " Zeile einfügen
etwa so :
Code:
...
#jk_cp -k $CHROOT_HOMEDIR $CHROOT_APP_PROGRAMS
fehler=`jk_cp 2>&1 -k $CHROOT_HOMEDIR $CHROOT_APP_PROGRAMS`

echo -e "`date +%d.%m.%y-%R:%S` : `basename $0`  -------------------------------------\n uebergeben : \t CHROOT_HOMEDIR =  $1 \n\t\t CHROOT_APP_SECTIONS = $2 \n\n Fehler: \t$fehler" >>  "/var/www/create_jailkit_programs.sh.log"
dann in Datei "/var/www/create_jailkit_programs.sh.log" nachschauen ob es wirklich an Skript übergegeben wird
und "Fehler: .... " beachten.

PS: "/var/www/create_jailkit_programs.sh.log" gegebenenfalls anpassen.

und poste bitte Inhalt der "/var/www/create_jailkit_programs.sh.log" Datei.

Geändert von Rafael.K (19.08.2011 um 18:54 Uhr).
Mit Zitat antworten
Antwort


Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an



Alle Zeitangaben in WEZ +2. Es ist jetzt 10:03 Uhr.


Powered by vBulletin® Version 3.8.1 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.6.0