V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
css3
V2EX  ›  程序员

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

  •  
  •   css3 · 2021-12-03 09:47:29 +08:00 · 4239 次点击
    这是一个创建于 1115 天前的主题,其中的信息可能已经有所发展或是发生改变。
    linux 上,要安装一个软件,它依赖多,且所需依赖的软件可能和环境上版本存在冲突,而这种软件又是经常不同服务器上也要安装,这种软件的正确安装方式是什么?
    39 条回复    2021-12-07 13:26:30 +08:00
    lazydao
        1
    lazydao  
       2021-12-03 09:50:51 +08:00
    自己写安装脚本
    cstj0505
        2
    cstj0505  
       2021-12-03 09:52:30 +08:00
    docker 做隔离吧
    css3
        3
    css3  
    OP
       2021-12-03 09:54:38 +08:00
    @cstj0505 它就是在要服务器上用,用 docker 我好像想不出来怎么使用了?
    cabbage
        4
    cabbage  
       2021-12-03 10:02:03 +08:00 via Android
    依赖复杂,需要部署多个服务器,这场景用 docker 简直不要太合适了哇。自己 build 出来镜像写一份 compose ,分分钟部署运行到 N 个服务器上。
    css3
        5
    css3  
    OP
       2021-12-03 10:19:08 +08:00
    @cabbage 安装后是个可执行文件,类似 grep 命令,grep 装在 docker 内, 如何给主机用呢?
    haozheliu
        6
    haozheliu  
       2021-12-03 10:30:14 +08:00
    docker run 跑 cmd 吧,然后用 alias 把 docker run xxxx 等一长串的命令写一个命令。但是感觉 stdin out 不好搞
    2i2Re2PLMaDnghL
        7
    2i2Re2PLMaDnghL  
       2021-12-03 10:38:17 +08:00
    1. 静态链接
    2. ./configure --prefix
    3. Flatpak / AppImage
    4. docker run -it --volume
    masterclock
        8
    masterclock  
       2021-12-03 10:44:21 +08:00
    docker
    其他 flatpak ,AppImage 也行,但不分发,似乎不值得
    css3
        9
    css3  
    OP
       2021-12-03 11:22:53 +08:00
    @css3 @lazydao @cstj0505 @cabbage @haozheliu @2i2Re2PLMaDnghL @masterclock
    我第一时间也想的是 docker , 但这个场景,我感觉不太适用呢
    debuggerx
        10
    debuggerx  
       2021-12-03 11:31:34 +08:00
    可以描述得更清楚一些 什么类型的程序 用途 什么语言 依赖都是什么
    css3
        11
    css3  
    OP
       2021-12-03 12:35:33 +08:00
    @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  
       2021-12-03 12:53:40 +08:00
    @css3 额……这么常用的软件,直接用包管理安装就好了啊,为啥还要自己编译
    css3
        13
    css3  
    OP
       2021-12-03 13:04:23 +08:00
    @debuggerx 我 centos 上只有 0.7 版本,太旧了,要装最新的呢
    liuliancao
        14
    liuliancao  
       2021-12-03 13:07:08 +08:00
    最好说下啥软件
    Tink
        15
    Tink  
       2021-12-03 13:26:40 +08:00 via Android
    docker
    debuggerx
        16
    debuggerx  
       2021-12-03 13:30:55 +08:00
    @css3 能用就将就,不然升级系统,强行给老旧系统装不合适的新版软件对人和系统来说都是折磨。。
    css3
        17
    css3  
    OP
       2021-12-03 13:55:28 +08:00 via iPhone
    @debuggerx 主要是老版本有一部分功能没有,不然是真凑合了
    nmap
        18
    nmap  
       2021-12-03 15:35:51 +08:00
    golang
    gam2046
        19
    gam2046  
       2021-12-03 15:44:02 +08:00
    要不静态编译一份,要不自制 docker 镜像(设置 entry-point ),然后 docker run --rm <name> <args>就和本地几乎差不多,就是冷启动慢一点
    Kinnice
        20
    Kinnice  
       2021-12-03 17:45:22 +08:00
    静态编译
    neteroster
        21
    neteroster  
       2021-12-03 17:50:36 +08:00 via Android
    docker
    moliliang
        22
    moliliang  
       2021-12-03 18:13:33 +08:00
    打包( docker 、静态变异、打包工具等)
    GeruzoniAnsasu
        23
    GeruzoniAnsasu  
       2021-12-03 18:18:10 +08:00
    > The following software packages are required to build lnav:

    required to BUILD

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


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

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

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

    简单来说就是你这些依赖都按照到一个固定非系统目录,然后其它编译的时候指定依赖,LD_LIBRARY_PATH 啥的环境变量修改只是基本的,还可能需要改源码
    abc8678
        38
    abc8678  
       2021-12-05 01:10:46 +08:00 via Android
    apt 找不到软件包的时候无奈。tar 点 gz 的包不太懂装,而且装完了如果不想用也不知道如何卸载了
    julyclyde
        39
    julyclyde  
       2021-12-07 13:26:30 +08:00
    这种一般都是需求有问题,而不是方法有问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   862 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:53 · PVG 04:53 · LAX 12:53 · JFK 15:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.