在rakudo-star docker镜像上使用DBIish的mysql的安装要求

时间:2018-05-04 12:35:28

标签: mysql docker perl6

我正在根据最新的rakudo-star docker图像创建自己的泊坞窗图像。我想使用DBIish连接到mysql数据库。不幸的是我无法让DBDish :: mysql工作。

我已经安装了default-libmysqlclient-dev,你可以在

中看到
# find / -name 'libmysqlclient*.so'
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so

我面临的错误是:

# perl6 -Ilib -e 'use DBDish::mysql; DBDish::mysql.connect()'
Cannot locate native library 'mysqlclient': mysqlclient: cannot open shared object file: No such file or directory
  in method setup at /usr/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) line 289
  in method CALL-ME at /usr/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) line 539
  in method connect at /root/DBIish/lib/DBDish/mysql.pm6 (DBDish::mysql) line 12
  in block <unit> at -e line 1

1 个答案:

答案 0 :(得分:2)

简短回答:您需要包libmysqlclient20(我将文档请求添加到类似的DBIish问题中)。 Debian 9(目前稳定)使用的是比Ubuntu 18.04(目前稳定)和Debian Unstable更旧的版本。它也指mariadb而不是mysql。 在基于Debian Stable的图像上选择libmariadbclient18并创建一个包含mysql名称的链接(见下文)

关于Debian测试/不稳定和近期衍生品:

$ sudo apt-get install libmysqlclient20
$ dpkg -L libmysqlclient20
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.3.9
/usr/share
/usr/share/doc
/usr/share/doc/libmysqlclient20
/usr/share/doc/libmysqlclient20/NEWS.Debian.gz
/usr/share/doc/libmysqlclient20/changelog.Debian.gz
/usr/share/doc/libmysqlclient20/copyright
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20

关于Debian 9和衍生品:

$ dpkg -L libmariadbclient18
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libmariadbclient.so.18.0.0
/usr/lib/x86_64-linux-gnu/mariadb18
/usr/lib/x86_64-linux-gnu/mariadb18/plugin
/usr/lib/x86_64-linux-gnu/mariadb18/plugin/client_ed25519.so
/usr/lib/x86_64-linux-gnu/mariadb18/plugin/dialog.so
/usr/lib/x86_64-linux-gnu/mariadb18/plugin/mysql_clear_password.so
/usr/share
/usr/share/doc
/usr/share/doc/libmariadbclient18
/usr/share/doc/libmariadbclient18/changelog.Debian.gz
/usr/share/doc/libmariadbclient18/copyright
/usr/lib/x86_64-linux-gnu/libmariadbclient.so.18

创建链接

$ sudo ln -s /usr/lib/x86_64-linux-gnu/libmariadbclient.so.18 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18

为了说明这一点,我为场合*:

创建了一个Ubuntu 18.04容器

docker run -ti --rm --entrypoint=bash rakudo/ubuntu-amd64-18.04

缩写的命令和输出:

# apt-get install -y libmysqlclient20 build-essential
# zef install DBIish
# perl6 -e 'use DBDish::mysql; DBDish::mysql.connect()'
Cannot look up attributes in a DBDish::mysql type object
[...]

错误是因为我没有传递正确的连接参数,因为我没有运行db。重要的是没有.so文件丢失。

*:我将它上传到Docker Hub,正常运行会让你直接进入REPL:

$ docker run -ti --rm rakudo/ubuntu-amd64-18.04
To exit type 'exit' or '^D'
> 

(我在调试时没有使用Star图像,但这并不重要,因为这是一个更通用的问题。)