web-dev-qa-db-ja.com

MariaDbを10.2に更新した後、Pure-ftpd-mysqlが起動しません

Mariadbを10.0から10.2に更新しましたが、pure-ftpd-mysqlが再起動しません。

service pure-ftpd-mysql restart

出力:

Job for pure-ftpd-mysql.service failed. See 'systemctl status pure-ftpd-mysql.service' and 'journalctl -xn' for details.

systemctl

systemctl status pure-ftpd-mysql.service -l

出力

● pure-ftpd-mysql.service - (null)
 Loaded: loaded (/etc/init.d/pure-ftpd-mysql)
 Active: failed (Result: exit-code) since Sun 2017-07-09 23:12:23 CEST; 53s ago
Process: 3887 ExecStart=/etc/init.d/pure-ftpd-mysql start (code=exited, status=127)

  Jul 09 23:12:23 s***.h****.net pure-ftpd-mysql[3887]: Starting ftp server: Running: /usr/sbin/pure-ftpd-mysql-virtualchroot -l mysql:/etc/pure-ftpd/db/mysql.conf -l pam -E -j -D -A -H -J ALL:!aNULL:!SSLv3 -O clf:/var/log/pure-ftpd/transfer.log -b -8 UTF-8 -Y 1 -u 1000 -B
  Jul 09 23:12:23 s***.h****.net pure-ftpd-mysql[3887]: /usr/sbin/pure-ftpd-mysql-virtualchroot: /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18: no version information available (required by /usr/sbin/pure-ftpd-mysql-virtualchroot)
  Jul 09 23:12:23 s***.h****.net pure-ftpd-mysql[3887]: /usr/sbin/pure-ftpd-mysql-virtualchroot: relocation error: /usr/sbin/pure-ftpd-mysql-virtualchroot: symbol my_make_scrambled_password, version libmysqlclient_18 not defined in file libmysqlclient.so.18 with link time reference
  Jul 09 23:12:23 s***.h****.net systemd[1]: pure-ftpd-mysql.service: control process exited, code=exited status=127
  Jul 09 23:12:23 s***.h****.net systemd[1]: Failed to start (null).
  Jul 09 23:12:23 s***.h****.net systemd[1]: Unit pure-ftpd-mysql.service entered failed state.

journalctl

-- Unit pure-ftpd-mysql.service has begun starting up.
Jul 09 23:15:22 s***.h****.net pure-ftpd-mysql[4170]: Starting ftp server: Running: /usr/sbin/pure-ftpd-mysql-virtualchroot -l mysql:/etc/pure-ftpd/db/mysql.conf -l pam -
Jul 09 23:15:22 s***.h****.net pure-ftpd-mysql[4170]: /usr/sbin/pure-ftpd-mysql-virtualchroot: /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18: no version information avai
Jul 09 23:15:22 s***.h****.net pure-ftpd-mysql[4170]: /usr/sbin/pure-ftpd-mysql-virtualchroot: relocation error: /usr/sbin/pure-ftpd-mysql-virtualchroot: symbol my_make_s
Jul 09 23:15:22 s***.h****.net systemd[1]: pure-ftpd-mysql.service: control process exited, code=exited status=127
Jul 09 23:15:22 s***.h****.net systemd[1]: Failed to start (null).
-- Subject: Unit pure-ftpd-mysql.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit pure-ftpd-mysql.service has failed.
-- 
-- The result is failed.
Jul 09 23:15:22 s***.h****.net systemd[1]: Unit pure-ftpd-mysql.service entered failed state.

mariadb -v

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17831
Server version: 10.2.6-MariaDB-10.2.6+maria~jessie-log mariadb.org binary distribution

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Reading history-file /root/.mysql_history

「help;」と入力しますまたは「\ h」でヘルプを表示します。 '\ c'と入力して、現在の入力ステートメントをクリアします。

1
spacebiker

これは間違いなくDebianpureftpdパッケージの既知のバグです。完全なストーリーは次のとおりです。たとえば、約20年前の初期の頃、libmysqlclientはシンボルをバージョン管理せず、可視性を制限しませんでした。いくつかの関数が文書化されました—それらはクライアントAPIであり、私たちはそれらを安定させ、何年にもわたって機能させることを約束しました。他の機能は文書化されておらず、内部的なものであり、約束はありません。しかし、それらはエクスポートされ、利用可能でもありました。その後、MariaDBの時代に、RedHatはlibmysqlclientシンボルをバージョン管理していました。 libmysqlclient.so.16.0.0の古いシンボルのバージョンはlibmysqlclient_16で、新しいシンボルのバージョンはlibmysqlclient_18でした。いくつかの例外を除いて、内部のsymolは隠されていました。そのような例外の1つはmy_make_scrambled_pa​​sswordでした。これは、pureftpdが、すべてが許可されていた昔から使用を開始したためです。 Debianは、バージョン管理に対して異なる、より単純な(そしてより正確ではない)アプローチを持っていました。すべてのシンボルはlibmysqlclient_18バージョンを持っていました。 MariaDBでは、両方のアプローチと互換性のあるライブラリを作成することができました。 my_make_scrambled_pa​​sswordは非表示にならず、「pureftpdの場合」というコメントが付いています。 my_make_scrambled_pa​​sswordの使用はpureftpdから削除されましたが、Debianバージョンはまだ更新されていないため、現在のところ唯一のオプションはソースからインストールすることです。

apt-get remove pure-ftpd-mysql
cd /tmp
wget https://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.47.tar.gz
tar xzvf pure-ftpd-1.0.47.tar.gz
cd pure-ftpd-1.0.47
./configure --with-tls --with-virtualchroot --with-puredb --with-quotas --with-throttling --with-mysql
make install-strip

この後、システムは機能し始めました

2
spacebiker

Mariadb10.2を使用したDebianストレッチ
ダウンロードする必要があります https://packages.debian.org/stretch/AMD64/libmariadb-dev/download and apt-get install libmariadb2 after dpkg -i libmariadb-devxxxxx.deb ./ configure --with-tls --with-virtualchroot --with-puredb --with-quotas --with-throttling --with-mysql make install-strip

0
tbprogi

Debianおよびpure-ftpd-mysql(MariaDB)上のISPConfig 3

そこで、@ spacebikerの回答を試しましたが、回答のコメントとともに、サービスを実行することができましたが、奇妙な理由で、まだ機能していませんでした。だから私はすべてを一掃しました。
Sudo apt purge pure-ftpd*クリーンな状態になります。
次に、gitlabユーザーjisse44によるハウツーへの@psyray提供リンクからの修正を適用し、ISPConfigからpure-ftpd-mysqlサービスを再構成しましたphp更新スクリプト:

https://gitlab.com/jisse44/pure-ftpd/blob/master/HowTo.txt

Gitlab.com/jisse44への小道具と感謝

完全性とより将来性のある答えのために、ここですべてを引用します

Gitlab.com/jisse44/pure-ftpd HowTo.txt

We will rebuild the pure-ftp-1.0.43-3 package from official Debian sources, with patch applied:

You may need to install this packages before:
apt-get install build-essential fakeroot dpkg-dev autoconf-archive libcap2-dev default-libmysqlclient-dev po-debconf debhelper

cd /usr/local/src
mkdir pure-ftp-1.0.43-3
cd pure-ftp-1.0.43-3
wget http://deb.debian.org/debian/pool/main/p/pure-ftpd/pure-ftpd_1.0.43-3.dsc
wget http://deb.debian.org/debian/pool/main/p/pure-ftpd/pure-ftpd_1.0.43.orig.tar.gz
wget http://deb.debian.org/debian/pool/main/p/pure-ftpd/pure-ftpd_1.0.43-3.diff.gz
tar zxvf pure-ftpd_1.0.43.orig.tar.gz
mv pure-ftpd-1.0.43.orig/ pure-ftpd-1.0.43
mkdir pure-ftpd-1.0.43/debian
gunzip pure-ftpd_1.0.43-3.diff.gz
patch -p0 < pure-ftpd_1.0.43-3.diff
wget https://gitlab.com/jisse44/pure-ftpd/raw/master/configure.ac.diff
wget https://gitlab.com/jisse44/pure-ftpd/raw/master/log_mysql.c.diff
patch -p0 < configure.ac.diff
patch -p0 < log_mysql.c.diff
chmod +x pure-ftpd-1.0.43/debian/rules
cd pure-ftpd-1.0.43/
dpkg-buildpackage -uc -b
cd ..
dpkg -i pure-ftpd-mysql_1.0.43-3_AMD64.deb pure-ftpd-common_1.0.43-3_all.deb
  • それが失敗した場合/いくつかの不足しているパッケージのエラー=>それらをインストールするだけです
    Sudo apt install missingPackageMissing
  • いくつかの権限の問題で失敗した場合-suでtuSudoモードを切り替えるだけです
  • このプロセスには長い時間がかかります(数分、再構築とインストール全体です)が、その後、pure-ftpd-mysqlサービスを開始できます-そしてpure-ftpd-mysqlサービスが必要なすべてです-プログラム的には必要なだけです- pure-ftpd-commonおよびpure-ftpd-mysql

Pure-ftpd(サービス)は必要ありません。pure-ftpd-mysql(サービス)が必要です。

ISPConfigサービスの再構成

この後、pure-ftpd-mysqlサービスを実行することになりましたが、明らかに、ISPConfigのデータベースでは機能していませんでした。

ISPConfigの更新プロセス中にサービスを再構成する必要があります。問題は、ISPConfigを既に更新している場合、更新shスクリプトが実行されないことです。

したがって、現在のispconfigインストールを取得して、そこからphp updateを実行する必要があります。

  • まず、ispconfig-interfaceのconfig.inc.phpのデータベース接続情報を知る必要があります
    =>あなたはこのようにそれを見つけることができます
    cat /usr/local/ispconfig/interface/lib/config.inc.php | grep --context=5 "db_password"
    (ファイルを表示し、「db_password」+前後5行のコンテキストを持つ行のみを除外します)
  • tmp dir cd /tmpに移動します
  • 現在のインストールをダウンロードするwget https://ispconfig.org/downloads/ISPConfig-3.1.15p2.tar.gz
  • 開梱tar zxvf ISPConfig-3.1.15p2.tar.gz
  • インストールディレクトリに移動します(必須です)cd /tmp/ispconfig3_install/install/
  • [〜#〜] php [〜#〜](重要な)更新スクリプトを実行しますphp /tmp/ispconfig3_install/install/update.php
  • インストール中にreconfigure services回答はい!
  • dBパスワード(または他のDB接続情報)を求められたら、以前にconfig.inc.phpで見つけた情報を使用します

service pure-ftpd-mysql restartを実行すると、すべてがうまくいくはずです

Gitlabのファイルはもう利用できませんか?

将来的には、このgitlabパッチファイルが存在しなくなる可能性があります
https://gitlab.com/jisse44/pure-ftpd/raw/master/configure.ac.diffおよび
https://gitlab.com/jisse44/pure-ftpd/raw/master/log_mysql.c.diff
しかし、それらはプレーンテキストなので、ここにも配置します(debianリンクが存在することを願っています)

Gitlab.com/jisse44/pure-ftp configure.ac.diff

--- pure-ftpd-1.0.43/configure.ac   2018-11-30 15:12:17.024657198 +0100
+++ pure-ftpd-1.0.43/configure.ac   2018-11-30 14:32:32.046763067 +0100
@@ -1317,7 +1317,6 @@
         AC_MSG_ERROR(Your MySQL client libraries aren't properly installed)
     ],[])
     AC_MSG_RESULT(yes)
-    AC_CHECK_FUNCS(my_make_scrambled_password make_scrambled_password)
   fi ])

 AC_ARG_WITH(pgsql,

Gitlab.com/jisse44/pure-ftp log_mysql.c.diff

--- pure-ftpd-1.0.43/src/log_mysql.c    2018-11-30 15:07:55.673325041 +0100
+++ pure-ftpd-1.0.43/src/log_mysql.c    2018-11-30 14:34:45.002421780 +0100
@@ -470,33 +470,24 @@
     if (crypto_mysql != 0) {
         char scrambled_password[42]; /* 2 * 20 (sha1 hash size) + 2 */

-# ifdef HAVE_MY_MAKE_SCRAMBLED_PASSWORD
-        my_make_scrambled_password(scrambled_password, password,
-                                   strlen(password));
-# Elif defined(HAVE_MAKE_SCRAMBLED_PASSWORD)
-        make_scrambled_password(scrambled_password, password);
-# else
-        {
-            SHA1_CTX       ctx;
-            unsigned char  h0[20], h1[20];
-            char          *p;
-
-            SHA1Init(&ctx);
-            SHA1Update(&ctx, password, strlen(password));
-            SHA1Final(h0, &ctx);
-            SHA1Init(&ctx);
-            SHA1Update(&ctx, h0, sizeof h0);
-            pure_memzero(h0, sizeof h0);
-            SHA1Final(h1, &ctx);
+        SHA1_CTX        ctx;
+        unsigned char  h0[20], h1[20];
+        char          *p;
+        SHA1Init(&ctx);
+        SHA1Update(&ctx, password, strlen(password));
+        SHA1Final(h0, &ctx);
+        SHA1Init(&ctx);
+        SHA1Update(&ctx, h0, sizeof h0);
+        pure_memzero(h0, sizeof h0);
+        SHA1Final(h1, &ctx);
             *scrambled_password = '*';
-            hexify(scrambled_password + 1U, h1,
-                   (sizeof scrambled_password) - 1U, sizeof h1);
-            *(p = scrambled_password) = '*';
-            while (*p++ != 0) {
-                *p = (char) toupper((unsigned char) *p);
-            }
+        hexify(scrambled_password + 1U, h1,
+               (sizeof scrambled_password) - 1U, sizeof h1);
+        *(p = scrambled_password) = '*';
+        while (*p++ != 0) {
+            *p = (char) toupper((unsigned char) *p);
         }
-# endif
+
         if (pure_strcmp(scrambled_password, spwd) == 0) {
             goto auth_ok;
         }
0
jave.web

Pure-ftpd-mysqlv1.0.43でDebian9(stretch)を使用し、(私にとってはIspconfigで)mariadb 10.3を使用している場合は、 this gitlab から2つのdebfileをインストールできます。

これは、このバグのパッチが適用された同じバージョンです

このコンパイルされたバージョンを提供してくれたjisse44と howtoforgeで提供されているリンク のluckyluk3に感謝します

0
psyray