我将 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 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.
日志控制
-- 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 没有隐藏,注释为“for pureftpd”。已经从 pureftpd 中删除了 my_make_scrambled_password 的使用,但尚未更新 debian 版本,因此,目前唯一的选择是从源代码安装:
在此之后系统开始工作
对于那些使用 Debian 9 (stretch) 和 pure-ftpd-mysql v1.0.43 和 mariadb 10.3(对我来说是 Ispconfig)的人,你可以从这个 gitlab 安装两个 debfile
这是与此错误补丁相同的版本
感谢 jisse44 提供了这个编译版本,感谢 luckyluk3 提供了 howtoforge 上的链接
使用 mariadb 10.2 的 Debian 拉伸
必须下载https://packages.debian.org/stretch/amd64/libmariadb-dev/download 并在 dpkg -i libmariadb-devxxxxx.deb ./configure --with-tls 之后安装 libmariadb2 - -with-virtualchroot --with-puredb --with-quotas --with-throttling --with-mysql make install-strip
Debian 和 pure-ftpd-mysql (MariaDB) 上的 ISPConfig 3
所以我尝试了@spacebiker 的回答,连同回答评论,我设法让服务运行——但是,出于某种奇怪的原因——它仍然无法正常工作。所以我已经清除了一切。
sudo apt purge pure-ftpd*
获得干净的状态。然后我应用了来自@psyray 的修复,提供了 gitlab 用户提供的 howto 链接
jisse44
,然后从 ISPConfig php更新脚本重新配置了 pure-ftpd-mysql 服务:https://gitlab.com/jisse44/pure-ftpd/blob/master/HowTo.txt
支持并感谢 gitlab.com/jisse44
为了完整和更持久的答案,我将在这里引用所有内容
gitlab.com/jisse44/pure-ftpd
HowTo.txt
sudo apt install missingPackageMissing
pure-ftpd-common
和pure-ftpd-mysql
你不需要pure-ftpd(服务),你只需要pure-ftpd-mysql(服务)!
重新配置 ISPConfig 服务
在此之后,我最终运行了 pure-ftpd-mysql 服务,但很明显,它不能与 ISPConfig 的数据库一起使用。
您需要做的是在 ISPConfig 更新过程中重新配置服务 - 问题是,如果您已经更新了 ISPConfig,更新sh脚本将不会运行。
所以你需要获取当前的 ispconfig 安装并从中运行php update
=>您可以找到这样的
cat /usr/local/ispconfig/interface/lib/config.inc.php | grep --context=5 "db_password"
(显示文件并仅过滤掉带有“db_password”的行+前后5行的上下文)
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 上的文件不再可用?
将来,这个 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
gitlab.com/jisse44/pure-ftp log_mysql.c.diff