AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 772768
Accepted
Itai Ganot
Itai Ganot
Asked: 2016-04-26 07:13:59 +0800 CST2016-04-26 07:13:59 +0800 CST 2016-04-26 07:13:59 +0800 CST

通过ansible playbook导出环境值的正确方法是什么?

  • 772

我写了一个 ansible playbook,它应该安装一个名为 kafkacat 的工具。

剧本中的大多数任务都有效,除了一项(最重要的一项)。

我正在从源代码编译该工具,并且我已经使用我在 ansible 中构建的步骤成功地手动安装了它。

剧本的相关部分是:

- name: Install kafkacat (configure)
    command: chdir={{ kafkacat_installdir }} {{ kafkacat_installdir }}/configure --enable-json --enable-static
    sudo: yes

  - name: Install kafkacat (make)
    command: chdir={{ kafkacat_installdir }} make
    environment:
      CPPFLAGS: ' -Itmp-bootstrap/usr/local/include'
      STATIC_LIB_yajl: ' tmp-bootstrap/usr/local/lib/libyajl_s.a'
      STATIC_LIB_rdkafka: ' tmp-bootstrap/usr/local/lib/librdkafka.a'
      LIBS: ' -lpthread -lrt '
    sudo: yes

  - name: Install kafkacat (make install)
    command: chdir={{ kafkacat_installdir }} make install
    sudo: yes

“制作”过程需要知道我在任务中指定的导出,但由于某种原因,这些值似乎没有正确导出并且导致剧本失败:

failed: [kafka-1] => {"changed": true, "cmd": ["make"], "delta": "0:00:00.422669", "end": "2016-04-25 15:10:16.085697", "rc": 2, "start": "2016-04-25 15:10:15.663028", "warnings": []}
stderr: /usr/bin/ld: cannot find -lyajl
/usr/bin/ld: cannot find -lyajl
collect2: error: ld returned 1 exit status
make: *** [kafkacat] Error 1
stdout: gcc -MD -MP  -Itmp-bootstrap/usr/local/include -g -O2 -Wall -Wfloat-equal -Wpointer-arith -g -O2 -Wall -Wfloat-equal -Wpointer-arith  -c kafkacat.c -o kafkacat.o
gcc -MD -MP  -Itmp-bootstrap/usr/local/include -g -O2 -Wall -Wfloat-equal -Wpointer-arith -g -O2 -Wall -Wfloat-equal -Wpointer-arith  -c format.c -o format.o
gcc -MD -MP  -Itmp-bootstrap/usr/local/include -g -O2 -Wall -Wfloat-equal -Wpointer-arith -g -O2 -Wall -Wfloat-equal -Wpointer-arith  -c json.c -o json.o

找不到 -lyajl 的原因是导出不起作用。

我也试过做这样的事情:

  - name: Install kafkacat (configure)
    command: chdir={{ kafkacat_installdir }} CPFLAGS='CPPFLAGS= -Itmp-bootstrap/usr/local/include' STATIC_LIB_yajl='tmp-bootstrap/usr/local/lib/libyajl_s.a' STATIC_LIB_rdkafka='tmp-bootstrap/usr/local/lib/librdkafka.a' LIBS=' -lpthread -lrt' {{ kafkacat_installdir }}/configure --enable-json --enable-static

非常感谢您的帮助,并在此先感谢您,

ansible kafka
  • 2 2 个回答
  • 219 Views

2 个回答

  • Voted
  1. Best Answer
    Edenhill
    2016-04-29T11:38:59+08:002016-04-29T11:38:59+08:00

    看起来您的 STATIC_LIB_... 值以空格为前缀,这将使静态库检查失败。

    • 1
  2. brent
    2016-04-26T07:23:08+08:002016-04-26T07:23:08+08:00

    您的环境变量在该configure阶段不可用,因此在make. 查看 kafkacat 的 configure.base 源代码。

    来自configure:

    # Load base module
    source mklove/modules/configure.base
    

    来自configure.base:

    # Tries to figure out if we can use a static library or not.
    # Arguments:
    #  library name   (e.g. -lrdkafka)
    #  compiler flags (optional "", e.g: "-lyajl")
    # Returns/outputs:
    #  New list of compiler flags
    function mkl_lib_check_static {
        local libname=$1
        local libs=$2
        local arfile_var=STATIC_LIB_${libname#-l}
    
        # If STATIC_LIB_<libname_without_-l> specifies an existing .a file we
        # use that instead.
        if [[ -f ${!arfile_var} ]]; then
        libs=$(echo $libs | sed -e "s|$libname|${!arfile_var}|g")
        else
            libs=$(echo $libs | sed -e "s|$libname|${LDFLAGS_STATIC} $libname ${LDFLAGS_DYNAMIC}|g")
        fi
    
        echo $libs
    }
    

    在另一种情况下,您可以通过快速调试来验证 ansible 是否正确设置了环境

      - name: Show environment
        shell: "env"
        environment:
          CPPFLAGS: ' -Itmp-bootstrap/usr/local/include'
          STATIC_LIB_yajl: ' tmp-bootstrap/usr/local/lib/libyajl_s.a'
          STATIC_LIB_rdkafka: ' tmp-bootstrap/usr/local/lib/librdkafka.a'
          LIBS: ' -lpthread -lrt '
        sudo: yes
    
    • 0

相关问题

  • 重复的 Ansible 任务

  • 无法形成站点中的文件的链接,该链接可用于使用 ansible 在远程服务器中启用的目录站点?

  • 如何执行 ansible 的特定角色?

  • Ansible 和 rbash

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve