【问题标题】:Change install script from Redhat to Ubuntu将安装脚本从 Redhat 更改为 Ubuntu
【发布时间】:2013-02-09 23:51:34
【问题描述】:

已使用 RPM 为 Redhat 编写了一个安装脚本(用于 Microsoft® SQL Server® ODBC Driver 1.0 for Linux

它使用此代码检查是否安装了某些软件包

req_libs=( glibc e2fsprogs krb5-libs openssl )

for lib in ${req_libs[@]}
do
    local present=$(rpm -q -a $lib) >> $log_file 2>&1
    if [ "$present" == "" ]; then
        log "The $lib library was not found installed in the RPM database."
        log "See README for which libraries are required for the $driver_name."
        return 1;
    fi
done

我已经通过知道/相信库已安装并简单地删除测试来克服这个问题,但我现在想整理一下。

  1. 如何在 Ubuntu 上找到要查找的库。是否有 Redhat -> Ubuntu 的命令或翻译网页
  2. 用 dpkg -s 替换 rpm -q -a 是否正确?

【问题讨论】:

    标签: ubuntu redhat rpm dpkg


    【解决方案1】:

    1) 寻找合适的包

    在 Ubuntu/Debian 中,库包通常以“lib”开头而不是后缀。 开发包通常只是后缀“-dev”而不是“-devel”

    如果您不确定等效包的名称,您可以随时这样做:

    sudo apt-get update
    apt-cache search <packagename>
    

    ...并且不要在搜索中包含“lib”或“dev”部分,您将获得不错的结果。从那里您可以手动确定您正在寻找的正确包是什么。

    2) 查找已安装的软件包

    您可以使用“dpkg -s”,它会起作用,尽管根据我对“rpm -qa”输出的理解,您可能想要一些不那么冗长的东西。将“dpkg-query -l”通过管道连接到“grep”将在一行上输出包信息,并且应该更容易阅读。

    这是脚本的等效部分的样子(正确的包名称和 log_file 输出在单独的行上以正常工作):

    #!/bin/bash
    
    function stack_install()
    {
    
    log_file="$HOME/Desktop/stackoverflow/stack-log.txt"
    
    req_libs=( libc6 e2fsprogs libkrb5-3 openssl )
    
    for lib in ${req_libs[@]}
    do
        local present=$(dpkg-query -l "$lib" | grep "$lib" 2>/dev/null)
        echo "$present" >> "$log_file"
        if [ "$present" == "" ]; then
            echo "The $lib library was not found installed in the dpkg database."
            echo "See README for which libraries are required for the $driver_name."
            return 1;
        fi
    done 
    }
    
    stack_install
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 2023-03-18
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多