Я обновил 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
Введите "помощь"; или '\ h' для помощи. Введите '\ c', чтобы очистить текущий оператор ввода.
Это определенно известная ошибка в пакете Debian pureftpd. Вот полная история: в первые дни своего существования, скажем, около 20 лет назад, libmysqlclient не использовала символы версий и не ограничивала их видимость. Некоторые функции были задокументированы - это были клиентские API, и мы обещали, что они будут стабильными и будут работать годами. Остальные функции не были задокументированы, они были внутренними, никаких обещаний. Но они тоже были экспортированы и доступны. Позже, во времена MariaDB, RedHat управлял версиями символов libmysqlclient. Старые символы из libmysqlclient.so.16.0.0 имели версию libmysqlclient_16, более новые символы имели версию libmysqlclient_18. Внутренние символы были скрыты, за некоторыми исключениями. Одним из таких исключений был my_make_scrambled_password, потому что pureftpd начал использовать его с давних времен, когда все было вроде разрешено. В Debian был другой, более простой (и менее правильный) подход к управлению версиями, все символы имели версию libmysqlclient_18. В MariaDB нам удалось создать библиотеку, совместимую с обоими подходами. my_make_scrambled_password не был скрыт, с комментарием «для pureftpd». Использование my_make_scrambled_password было удалено из 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
После этого система заработала
Debian stretch с mariadb 10.2
должен скачать https://packages.debian.org/stretch/amd64/libmariadb-dev/download и apt-get install libmariadb2 после dpkg -i libmariadb-devxxxxx.deb ./configure --with-tls --with-virtualchroot --with-puredb --with-quotas --with-throttling --with-mysql make install -полоска
Для тех, кто использует Debian 9 (stretch) с pure-ftpd-mysql v1.0.43 и mariadb 10.3 (для меня в Ispconfig), вы можете установить два файла debfile из этот gitlab
Это та же версия с патчем для этой ошибки
Спасибо jisse44 за предоставление этой скомпилированной версии и luckyluk3 за ссылка предоставлена на howtoforge
Итак, я попробовал ответить @ spacebiker, и вместе с комментариями к ответу мне удалось запустить службу, однако по какой-то странной причине она все еще не работала. Итак, я все очистил. sudo apt purge pure-ftpd*
получить чистое состояние.
Затем я применил исправление из @psyray, предоставленной ссылкой на руководство пользователя gitlab jisse44
а затем перенастроил службу pure-ftpd-mysql из ISPConfig php скрипт обновления:
Для полноты и более надежного ответа я процитирую все здесь
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
pure-ftpd-common
и pure-ftpd-mysql
После этого я запустил службу pure-ftpd-mysql, но, очевидно, она не работала с базой данных ISPConfig.
Что вам нужно сделать, так это перенастроить службу в процессе обновления ISPConfig - проблема в том, что обновление ш скрипт не запустится, если вы уже обновили ISPConfig.
Итак, вам нужно получить текущую установку ispconfig и запустить php обновление от этого
cat /usr/local/ispconfig/interface/lib/config.inc.php | grep --context=5 "db_password"
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 /tmp/ispconfig3_install/install/update.php
reconfigure services
ответьте да!config.inc.php
ранееservice pure-ftpd-mysql restart
и у тебя должно быть все хорошоВ будущем может случиться так, что эти файлы патчей 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 сохранятся)
--- 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,
--- 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;
}