V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
css3
V2EX  ›  程序员

依赖比较多且不好安装的软件正确的安装方式是什么?

  •  
  •   css3 · 47 天前 · 2853 次点击
    这是一个创建于 47 天前的主题,其中的信息可能已经有所发展或是发生改变。
    linux 上,要安装一个软件,它依赖多,且所需依赖的软件可能和环境上版本存在冲突,而这种软件又是经常不同服务器上也要安装,这种软件的正确安装方式是什么?
    39 条回复    2021-12-07 13:26:30 +08:00
    lazydao
        1
    lazydao  
       47 天前
    自己写安装脚本
    cstj0505
        2
    cstj0505  
       47 天前
    docker 做隔离吧
    css3
        3
    css3  
    OP
       47 天前
    @cstj0505 它就是在要服务器上用,用 docker 我好像想不出来怎么使用了?
    cabbage
        4
    cabbage  
       47 天前 via Android
    依赖复杂,需要部署多个服务器,这场景用 docker 简直不要太合适了哇。自己 build 出来镜像写一份 compose ,分分钟部署运行到 N 个服务器上。
    css3
        5
    css3  
    OP
       47 天前
    @cabbage 安装后是个可执行文件,类似 grep 命令,grep 装在 docker 内, 如何给主机用呢?
    haozheliu
        6
    haozheliu  
       47 天前
    docker run 跑 cmd 吧,然后用 alias 把 docker run xxxx 等一长串的命令写一个命令。但是感觉 stdin out 不好搞
    2i2Re2PLMaDnghL
        7
    2i2Re2PLMaDnghL  
       47 天前
    1. 静态链接
    2. ./configure --prefix
    3. Flatpak / AppImage
    4. docker run -it --volume
    masterclock
        8
    masterclock  
       47 天前
    docker
    其他 flatpak ,AppImage 也行,但不分发,似乎不值得
    css3
        9
    css3  
    OP
       47 天前
    @css3 @lazydao @cstj0505 @cabbage @haozheliu @2i2Re2PLMaDnghL @masterclock
    我第一时间也想的是 docker , 但这个场景,我感觉不太适用呢
    debuggerx
        10
    debuggerx  
       47 天前
    可以描述得更清楚一些 什么类型的程序 用途 什么语言 依赖都是什么
    css3
        11
    css3  
    OP
       46 天前
    @debuggerx https://github.com/tstack/lnav


    Prerequisites
    The following software packages are required to build lnav:

    gcc/clang - A C++14-compatible compiler.
    libpcre - The Perl Compatible Regular Expression (PCRE) library.
    sqlite - The SQLite database engine. Version 3.9.0 or higher is required.
    ncurses - The ncurses text UI library.
    readline - The readline line editing library.
    zlib - The zlib compression library.
    bz2 - The bzip2 compression library.
    libcurl - The cURL library for downloading files from URLs. Version 7.23.0 or higher is required.
    libarchive - The libarchive library for opening archive files, like zip/tgz.
    debuggerx
        12
    debuggerx  
       46 天前
    @css3 额……这么常用的软件,直接用包管理安装就好了啊,为啥还要自己编译
    css3
        13
    css3  
    OP
       46 天前
    @debuggerx 我 centos 上只有 0.7 版本,太旧了,要装最新的呢
    liuliancao
        14
    liuliancao  
       46 天前
    最好说下啥软件
    Tink
        15
    Tink  
       46 天前 via Android
    docker
    debuggerx
        16
    debuggerx  
       46 天前
    @css3 能用就将就,不然升级系统,强行给老旧系统装不合适的新版软件对人和系统来说都是折磨。。
    css3
        17
    css3  
    OP
       46 天前 via iPhone
    @debuggerx 主要是老版本有一部分功能没有,不然是真凑合了
    nmap
        18
    nmap  
       46 天前
    golang
    gam2046
        19
    gam2046  
       46 天前
    要不静态编译一份,要不自制 docker 镜像(设置 entry-point ),然后 docker run --rm <name> <args>就和本地几乎差不多,就是冷启动慢一点
    Kinnice
        20
    Kinnice  
       46 天前
    静态编译
    neteroster
        21
    neteroster  
       46 天前 via Android
    docker
    moliliang
        22
    moliliang  
       46 天前
    打包( docker 、静态变异、打包工具等)
    GeruzoniAnsasu
        23
    GeruzoniAnsasu  
       46 天前
    > The following software packages are required to build lnav:

    required to BUILD

    你运行环境又不用装这些
    而且编译用到的库全是非常常用的,有啥难装的


    如果需要的 runtime 版本在目标机器上不兼容,那就**不要尝试**在目标机器上跑这个版本
    首先升级系统
    jihadwk
        24
    jihadwk  
       46 天前
    再虚拟机安装一次,把这个虚拟机做成镜像,下次直接用镜像初始化虚拟机
    secondwtq
        25
    secondwtq  
       46 天前
    Windows 不也有这问题,也没折腾什么容器之类的,都有“绿色软件”之类的,搞一个猴版不就行了。我也用 RHEL ,不过没 root 不好折腾,解决方案:依赖一个一个下下来,一个一个编译,手动打一份“包”,哪台机器要用就解压到哪。
    无非就是 Windows 东西都给你编译好了,Linux 需要你自己去编译。

    大部分软件还好,依赖就这么多。个别巨型项目如浏览器内核和游戏引擎会涉及巨量依赖,不过还好我不搞这个(浏览器内核一般做得都很现代很炫酷很时髦,依赖需要你自己解决。游戏引擎大多不属于开源生态圈,比较实在,人家都直接把依赖的 binary 放 repo 里面的 ...)。
    zjsxwc
        26
    zjsxwc  
       46 天前 via Android
    >grep 装在 docker 内, 如何给主机用呢?
    直接把主机目录 volume 挂到 grep docker 里就能用了。
    css3
        27
    css3  
    OP
       46 天前 via iPhone
    @GeruzoniAnsasu 问题是用变编译好的二进制安装也提示缺上述依赖,rpm 包
    lizytalk
        28
    lizytalk  
       46 天前
    容器
    kidonng
        29
    kidonng  
       46 天前
    Nix 解君愁
    Juszoe
        30
    Juszoe  
       46 天前
    gcc 参数改成静态编译试试。
    不过说实话,你在一台机器把所有依赖都编译了,拿到老机器上也不一定能运行,我之前就被老机器的 glibc 整惨了,最后还是上 docker 解决
    kidonng
        31
    kidonng  
       46 天前
    刚搜了一下,Nixpkgs 里是有这个包的。用 Nix 的话整个依赖链都在 Nix Store 里,不会跟系统环境打架,特别适合拯救依赖旧的系统。
    当然用 Docker 也行,就是 overhead 相比 Nix 大多了。
    iceheart
        32
    iceheart  
       46 天前 via Android
    做个 ubuntu 镜像,几个依赖库的静态版本全拉下来。
    自己写 Makefile,链接选项加 -static.
    zhujinhe
        33
    zhujinhe  
       46 天前
    alias command="docker exec container_name command"
    anxn
        34
    anxn  
       46 天前 via Android
    静态编译成二进制
    2i2Re2PLMaDnghL
        35
    2i2Re2PLMaDnghL  
       46 天前
    所以 AppImage / nix 吧(
    msg7086
        36
    msg7086  
       46 天前 via Android
    你的问题在于要在 CentOS 上安装不兼容的软件包。
    RHEL 之类的商业发行版做出来就是为了让人去适配他的。你要用到软件都应该围绕着你的发行版去定制。如果你要用的功能太新,系统太老,那软件是很难跑起来的。这就像你要运行新软件,却硬开一个 Windows XP 一样。

    如果你一定要跑,试着全静态编译,把 C 运行库之类的全部打包到一起,然后看内核能不能撑下来。内核版本够用的话还是有希望跑起来的。
    iyaozhen
        37
    iyaozhen  
       46 天前
    我们公司之前搞过,centos 4 上装 jdk8 ,不要说什么解压就能用,很麻烦的
    也是各种魔改,glibc 都自己搞了一套

    简单来说就是你这些依赖都按照到一个固定非系统目录,然后其它编译的时候指定依赖,LD_LIBRARY_PATH 啥的环境变量修改只是基本的,还可能需要改源码
    abc8678
        38
    abc8678  
       45 天前 via Android
    apt 找不到软件包的时候无奈。tar 点 gz 的包不太懂装,而且装完了如果不想用也不知道如何卸载了
    julyclyde
        39
    julyclyde  
       42 天前
    这种一般都是需求有问题,而不是方法有问题
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4009 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:58 · PVG 11:58 · LAX 19:58 · JFK 22:58
    ♥ Do have faith in what you're doing.