将安装脚本从Redhat更改为Ubuntu

5

已经为Redhat和RPM编写了一个安装脚本(用于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是正确的吗?
1个回答

6

1) 寻找合适的软件包

在Ubuntu/Debian中,通常库文件都以"lib"作为前缀而不是后缀。开发包通常只是用"-dev"作为后缀而不是"-devel"。

如果您不确定等效的软件包名称是什么,您可以执行以下操作:

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

1) 寻找软件包

在寻找软件包时,不要搜索“lib”或者“dev”,这样您将得到合适的结果。然后,您可以手动确定您正在寻找的正确软件包。

2) 查找已安装的软件包

您可以使用“dpkg -s”,虽然从我理解的“rpm -qa”的输出来看,您可能想要更简洁的东西。“dpkg-query -l”管道传输至“grep”将在一行输出软件包信息,并且应该更容易阅读。

这里是脚本等效部分所示(带有正确的软件包名称和日志文件输出在单独的一行中以正常工作):

#!/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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接