将安装脚本从Redhat更改为Ubuntu

时间:2013-02-24 21:15:56

标签: ubuntu redhat rpm dpkg

已为Redhat编写了一个安装脚本(用于Microsoft® SQL Server® ODBC Driver 1.0 for Linux),其中包含RPM

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

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是否正确?

1 个答案:

答案 0 :(得分:6)

1)找到合适的包

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

如果您不确定命名等效包的内容,可以随时执行此操作:

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

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

2)查找已安装的软件包

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

以下是脚本的等效部分(使用正确的包名称和单独行上的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