Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-4893

MariaDB10 "-DWITH-SSL=/path/to/external/install" not sufficient; fails to link against external libs

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Minor
    • Resolution: Won't Fix
    • 10.0.4
    • 10.0.5
    • None
    • None

    Description

      I'm building MariaDB 10, r3781, on

          uname -a
              Linux dev.loc 3.7.10-1.16-desktop #1 SMP PREEMPT Fri May 31 20:21:23 UTC 2013 (97c14ba) x86_64 x86_64 x86_64 GNU/Linux
          gcc -v
              gcc version 4.8.1 20130806 [gcc-4_8-branch revision 201525] (SUSE Linux) 

      I've built/installed OpenSSL into an external path

          pkg-config --modversion openssl
              1.0.1e
          pkg-config --libs openssl
              -L/usr/local/ssl/lib64 -lssl -lcrypto  
          pkg-config --cflags openssl
              -I/usr/local/ssl/include  

      Checking MariaDB/cmake ssl-related vars prior to build

          cd bld/
          cmake .. -LAH | egrep -i "crypto|ssl|rpath|suffix"
              -- suffixes <.so;.a>
              -- OPENSSL_INCLUDE_DIR = /usr/include
              -- OPENSSL_LIBRARIES = /usr/lib64/libssl.so
              -- CRYPTO_LIBRARY = /usr/lib64/libcrypto.so
              -- OPENSSL_MAJOR_VERSION = 1
              -- SSL_LIBRARIES = /usr/lib64/libssl.so;/usr/lib64/libcrypto.so;dl
              CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
              CMAKE_SKIP_RPATH:BOOL=NO
              CRYPTO_LIBRARY:FILEPATH=/usr/lib64/libcrypto.so
              OPENSSL_INCLUDE_DIR:PATH=/usr/include
              OPENSSL_LIBRARIES:FILEPATH=/usr/lib64/libssl.so
              OPENSSL_ROOT_DIR:PATH=/usr
       
          cat BUILD/SETUP.sh
              ...
              # SSL library to use.--with-ssl will select our bundled yaSSL
              # implementation of SSL. To use OpenSSL you will need to specify
              # the location of OpenSSL headers and libs on your system.
              # Ex --with-ssl=/usr
              SSL_LIBRARY=--with-ssl
              ...

      talking with serg @irc, spec'ing

          -DWITH_SSL=/usr/local/ssl

      should be sufficient for a link of external SSL libs.

      However, with just

          cmake .. \
            ...
           -DINSTALL_LAYOUT=STANDALONE \
           -DCMAKE_SKIP_BUILD_RPATH=0 \
           -DCMAKE_BUILD_WITH_INSTALL_RPATH=1 \
           -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=1 \
           -DWITH_SSL=/usr/local/ssl \
            ...
          make

      That's NOT the case – MariaDB bins are STILL un-linked against external SSL libx, using default system-installed SSL instead,

          sql/mysqld -V
              sql/mysqld  Ver 10.0.3-MariaDB-log for Linux on x86_64 (Source distribution)
          ldd sql/mysqld | egrep -i "ssl|crypto"
              (empty)
          cmake .. -LAH | egrep -i "crypto|ssl|rpath|suffix"
              -- suffixes <.a;.so>
              -- OPENSSL_INCLUDE_DIR = /usr/local/ssl/include
              -- OPENSSL_LIBRARIES = /usr/local/ssl/lib64/libssl.a
              -- CRYPTO_LIBRARY = /usr/local/ssl/lib64/libcrypto.a
              -- OPENSSL_MAJOR_VERSION = 1
              -- SSL_LIBRARIES = /usr/local/ssl/lib64/libssl.a;/usr/local/ssl/lib64/libcrypto.a;dl
              CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
              CMAKE_SKIP_RPATH:BOOL=NO
              CRYPTO_LIBRARY:FILEPATH=/usr/local/ssl/lib64/libcrypto.a
              OPENSSL_INCLUDE_DIR:PATH=/usr/local/ssl/include
              OPENSSL_LIBRARIES:FILEPATH=/usr/local/ssl/lib64/libssl.a
              OPENSSL_ROOT_DIR:PATH=/usr/local/ssl
              // path to custom SSL installation
              WITH_SSL_PATH:PATH=/usr/local/ssl

      OTOH, adding ADDITIONAL flags,

          cmake .. \
            ...
           -DINSTALL_LAYOUT=STANDALONE \
           -DCMAKE_SKIP_BUILD_RPATH=0 \
           -DCMAKE_BUILD_WITH_INSTALL_RPATH=1 \
           -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=1 \
           -DWITH_SSL=/usr/local/ssl \
            -DOPENSSL_LIBRARIES=/usr/local/ssl/lib64/libssl.so \
            -DOPENSSL_INCLUDE_DIR=/usr/local/ssl/include \
            -DOPENSSL_ROOT_DIR=/usr/local/ssl \
            -DCRYPTO_LIBRARY=/usr/local/ssl/lib64/libcrypto.so \
            ...
          make

      builds/links as intended against external SSL

          ldd sql/mysqld | egrep -i "ssl|crypto"
              libssl.so.1.0.0 => /usr/local/ssl/lib64/libssl.so.1.0.0 (0x00007f9e48dfb000)
              libcrypto.so.1.0.0 => /usr/local/ssl/lib64/libcrypto.so.1.0.0 (0x00007f9e48a0f000)
       
          cmake .. -LAH | egrep -i "crypto|ssl|rpath|suffix"
              -- suffixes <.a;.so>
              -- OPENSSL_INCLUDE_DIR = /usr/local/ssl/include
              -- OPENSSL_LIBRARIES = /usr/local/ssl/lib64/libssl.so
              -- CRYPTO_LIBRARY = /usr/local/ssl/lib64/libcrypto.so
              -- OPENSSL_MAJOR_VERSION = 1
              -- SSL_LIBRARIES = /usr/local/ssl/lib64/libssl.so;/usr/local/ssl/lib64/libcrypto.so;dl
              CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
              CMAKE_SKIP_RPATH:BOOL=NO
              CRYPTO_LIBRARY:FILEPATH=/usr/local/ssl/lib64/libcrypto.so
              OPENSSL_INCLUDE_DIR:PATH=/usr/local/ssl/include
              OPENSSL_LIBRARIES:FILEPATH=/usr/local/ssl/lib64/libssl.so
              OPENSSL_ROOT_DIR:PATH=/usr/local/ssl
              // path to custom SSL installation
              WITH_SSL_PATH:PATH=/usr/local/ssl

      For a 'simple' external SSL install, in a single DIR (e.g., /usr/local/ssl), a

           -DWITH_SSL=/usr/local/ssl

      config spec should be sufficient, with rpath'ing properly configured.

      For more complex installs, e.g., in /usr/local, the additional flags should be available, and consistently named.

      Attachments

        Activity

          People

            wlad Vladislav Vaintroub
            pgnd pgnd
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.