依赖比较多且不好安装的软件正确的安装方式是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
css3
V2EX    程序员

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

  •  
  •   css3 2021-12-03 09:47:29 +08:00 4792 次点击
    这是一个创建于 1499 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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  
    PRO
       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     Solana     2814 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 08:16 PVG 16:16 LAX 00:16 JFK 03:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86