管理本地编译的软件

管理本地编译的软件

我必须在只有用户访问权限的计算机上运行 C++ 软件。在运行我感兴趣的程序之前,我必须先安装一堆依赖项:

在此输入图像描述

所有这些都使用 GNU Autotools,我必须将几个特定选项传递给./configure.该编译器也是非标准的(它针对 BlueGene/Q 进行交叉编译)。为了具有一定的可重复性,我编写了一个 Bash 脚本来获取源代码,对其进行编译并将其安装到$HOME/local

base_flags="-O2 -finline-limit=50000 -Wall -Wpedantic $color_flags"

if ! [[ -d gmp-6.1.1 ]]; then
    wget https://gmplib.org/download/gmp/gmp-6.1.1.tar.xz
    tar -xf gmp-6.1.1.tar.xz
fi

pushd gmp-6.1.1
cflags="$base_flags"
cxxflags="$base_flags"
if ! [[ -f Makefile ]]; then
    ./configure $base_configure CFLAGS="$cflags"
fi
if ! [[ -f build-succeeded ]]; then
    nice make $make_smp_flags
    make install
    touch build-succeeded
    pushd $prefix/lib
    rm -f *.so *.so.*  # Force static linkage.
    popd
fi

# Similar stanzas for the other projects.

在我拥有 root 访问权限的个人计算机上,我为我想要安装的所有软件构建 RPM 包,让 RPM 构建在 openSUSE 项目托管的开放构建服务上,并使用 Ansible 安装它们。在远程计算机上工作感觉就像从头开始的 Linux 左右,我无法升级或卸载某些东西,而且我必须记住所使用的版本和标志。

我能想到的就是尝试通过设置来模拟 RPM 包DESTDIR--prefix这样我就可以 TAR 构建产品,然后将其解压缩到$HOME/local.然后我会编写一些卸载程序/更新程序,列出存档内容并从$HOME/local.

有更好的方法来做到这一点吗?

相关内容