在 Debian 上安装软件包的脚本帮助(仅当未安装时)

在 Debian 上安装软件包的脚本帮助(仅当未安装时)

我正在编写一个脚本来构建 Debian 格式的 git 包 ( .deb)。该软件包需要以下 debian 软件包:

cmake、libturbojpeg0-dev、libjpeg62-turbo-dev、libglx-dev、opencl-headers、libgl-dev、libegl-dev、libx11-dev、libxtst-dev、libglu1-mesa-dev、libxcb-keysyms1-dev、libxcb- glx0-dev 和 libx11-xcb-dev

所以我正在使用这个:

for file in cmake libturbojpeg0-dev libjpeg62-turbo-dev libglx-dev opencl-headers libgl-dev libegl-dev libx11-dev libxtst-dev libglu1-mesa-dev libxcb-keysyms1-dev libxcb-glx0-dev libx11-xcb-dev; do apt -y install $file;done

我的问题是,如何检查软件包是否已安装,如果未安装则安装?像这样的东西

dpkg -l packagename

如果已安装,则转到下一步,如果未安装,则使用apt -y install。谢谢

答案1

mk-build-deps您应该在包的控制文件中列出构建依赖项并使用(或任何包解析构建工具),而不是编写自己的脚本来执行此操作例如 pbuildersbuildETC。)。看自动安装 dpkg-checkbuilddeps 检测到的未满足的构建依赖项了解详情。

如果您不想这样做,请描述所需的状态并让我们apt处理这些事情:

sudo apt-get install --no-install-recommends cmake libturbojpeg0-dev libjpeg62-turbo-dev libglx-dev opencl-headers libgl-dev libegl-dev libx11-dev libxtst-dev libglu1-mesa-dev libxcb-keysyms1-dev libxcb-glx0-dev libx11-xcb-dev

apt不会重新安装已安装的软件包,但它将升级系统上配置的存储库中具有较新候选版本的任何软件包(可以使用该选项禁用此--no-upgrade功能)。

如果你真的想要编写自己的脚本,您可以dpkg -l为每个包运行,并过滤^ii- 需要安装不匹配的包:

for package in …; do
    if ! dpkg -l "$package" | grep -q ^ii; then
        sudo apt-get install --no-install-recommends "$package"
    fi
done

--no-install-recommends跳过安装弱依赖项,这正是您想要的构建依赖项。)

相关内容