代码之家  ›  专栏  ›  技术社区  ›  Martin Barth

rakudo star docker映像上带DBIish的mysql安装要求

  •  6
  • Martin Barth  · 技术社区  · 6 年前

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

    我已经安装了默认的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 回复  |  直到 6 年前
        1
  •  3
  •   nxadm    6 年前

    简单回答:你需要这个包裹 libmysqlclient20 (我将文档请求添加到类似的DBIish问题中)。Debian 9(目前稳定)使用的是比Ubuntu 18.04(目前稳定)和Debian不稳定更旧的版本。它还引用了mariadb,而不是mysql。 选择 libmariadbclient18 在基于Debian Stable的图像上创建一个带有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
    [...]
    

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

    *:我将其上载到Docker Hub,正常运行将使您在REPL中恢复正常:

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

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