Linux 上源码安装,如何解决依赖? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
lovecy
V2EX    Linux

Linux 上源码安装,如何解决依赖?

  •  
  •   lovecy 2020-10-09 15:27:14 +08:00 4587 次点击
    这是一个创建于 1882 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如我要源码方式安装 php-5.6,如何才能获取依赖的库以及版本,有无类似 package.json 的文件?

    网上查到的大部分都只是给了一个库名列表,没有说明版本问题,难道说 gcc 、gcc-c++、libxml2,这类库都是完全向下兼容的么?

    求 C 大佬解答[希望]

    16 条回复    2020-10-31 14:10:31 +08:00
    ruanimal
        1
    ruanimal  
       2020-10-09 16:09:15 +08:00
    linuxbrew 看看?
    reus
        2
    reus  
       2020-10-09 16:09:29 +08:00
    一般兼容,不兼容你就换一个版本
    开源就是这样的了,没有统一的
    所以才需要发行版来打包
    源码安装只能用 gentoo 这类源码发行的
    试下 lfs 就知道多麻烦了 http://www.linuxfromscratch.org/lfs/
    lovecy
        3
    lovecy  
    OP
       2020-10-09 16:56:56 +08:00
    @ruanimal 这个有点看不懂,一个包管理软件?

    @reus 发布某个版本的时候,作者没法提供一个开发时用的库版本列表么?还是说就用最新的
    lfs 看起来挺好玩的,有空看看。。
    zunceng
        4
    zunceng  
       2020-10-09 17:48:36 +08:00
    @lovecy portage 可以控制是不是 stable

    gentoo 有维护一个软件列表 一般也就是各个软件的作者自己去提 pr 或者是第三方帮他们提 pr, 比较小众,到底是不是 stable 也不知道
    前几年也出过安装软件脚本里出现一个 rm -rf / 的命令 安装软件等于删库 被人狂吐槽
    ysc3839
        5
    ysc3839  
       2020-10-09 19:39:29 +08:00 via Android
    > 如何才能获取依赖的库以及版本

    一般会看 README 或者 INSTALL 吧,项目有网站的话也可以去网站上看看,都没有的话只能说项目本身做得不好了,可以发邮件问问开发者。
    WispZhan
        6
    WispZhan  
       2020-10-09 22:38:10 +08:00   1
    源码安装一时爽,运维操作火葬场。 远离服务器源码安装,从娃娃抓起。
    ShiHou
        7
    ShiHou  
       2020-10-10 02:21:31 +08:00
    试试这个 https://spack.io
    lovecy
        8
    lovecy  
    OP
       2020-10-12 11:05:38 +08:00
    @WispZhan 主要是我们运维都是用源码安装的。一堆安装配置,好多配置过期了或者无效了,我觉得他们也没维护过,所以才想研究一下,给他们整一份新的安装配置
    libook
        9
    libook  
       2020-10-12 12:09:19 +08:00   2
    个人使用的经验是,一般都看源码提供的编译文档,里面会说需要哪些依赖,有兼容性要求的会说明依赖的版本号。
    很多项目会使用 configure 脚本来检查依赖情况以及生成编译配置,只需要在编译目录下运行 ./configure 然后看输出即可,如果依赖基本没问题可以安装就会生成 makefile 。其他工具链可以具体参考手册。
    依赖在不同 Linux 发行版下可能叫做不同的软件包名,这个得自己一个个确认,发行版官方源没有或者版本不适用的依赖可能需要自己下载源码和编译。

    如果用 RedHat 系发行版可以找可靠的三方源预编译的 rpm 包; Debian 系可以找可靠的三方预编译的 deb 包,很多软件开发团队都有针对 Ubuntu 的 PPA,这个也比较可靠。
    libook
        10
    libook  
       2020-10-12 12:14:10 +08:00   1
    package.json 是 npm 的配置文件,npm 是一种包管理器,对应到 Linux 发行版上的管理器,如 apt 、yum 等,包管理器能帮你管理依赖,但你自己编译相当于是脱离了包管理器安装软件包,自然在依赖上面会麻烦一些。所以既然选择了手动编译,就也得手动解决依赖问题。

    特别有心的项目会写 Shell 脚本帮你判断系统发行版和自动执行依赖的安装和配置,但我没怎么见过做这么好的,不过我遇到的大多软件包,只要你系统上安装好了编译工具链以及常用库,基本三条命令就搞定:
    ./configure
    make
    sudo make install
    julyclyde
        11
    julyclyde  
       2020-10-12 14:28:28 +08:00   1
    @lovecy 你们这运维可以开掉了
    lovecy
        12
    lovecy  
    OP
       2020-10-13 14:14:36 +08:00
    @libook 嗯,最后我直接./configure make,他报缺啥我装啥。。
    @julyclyde 都是混口饭吃 - -,会跑脚本就行
    yanqiyu
        13
    yanqiyu  
       2020-10-13 18:21:41 +08:00   1
    一个软件包发布的时候,只能知道需求的下限(比如不低于 gcc 某个版本,以满足某个语言特性要求),但是不能给出上限(我咋知道之后发布的软件长啥样),再加上多数开源基础库多数情况能保证 API 层面向下兼容,于是在此数情况下使用高版本不是问题

    ...要是 API 不兼容了呢,那就降级呗,虽然罕见,但不是不可能,做发行版包维护偶尔就会撞上上游搞 API 修改,这种 breaking change 肯定会在 changelog 浓墨重彩的提一笔
    lucifer9
        14
    lucifer9  
       2020-10-15 09:30:15 +08:00
    生产环境,原先谁装的还找谁去
    测试环境,要求跟生产 1:1 还原的话,还是原先谁装的找谁
    不要求 1:1 还原的话,那干嘛折腾这个,想别人觉得你工作量不饱和?
    通常源码编译,都是使用环境会完全脱离外网,也懒得自己部署 repo,干脆就一把撸,顺便也就告别更新了,没 bug 就用到项目死掉的
    哦,对了,还有用 FreeBSD 的,不过人家有 ports 完全不用多操心依赖...
    Mac0ne
        15
    Mac0ne  
       2020-10-29 09:43:20 +08:00
    官方文档都写着呢~~~
    yklaxds
        16
    yklaxds  
       2020-10-31 14:10:31 +08:00 via Android
    考虑试试 FreeBSD
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1246 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 23:48 PVG 07:48 LAX 15:48 JFK 18:48
    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