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

2020-10-09 15:27:14 +08:00
 lovecy

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

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

求 C 大佬解答[希望]

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

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

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

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

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

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

...要是 API 不兼容了呢,那就降级呗,虽然罕见,但不是不可能,做发行版包维护偶尔就会撞上上游搞 API 修改,这种 breaking change 肯定会在 changelog 浓墨重彩的提一笔
lucifer9
2020-10-15 09:30:15 +08:00
生产环境,原先谁装的还找谁去
测试环境,要求跟生产 1:1 还原的话,还是原先谁装的找谁
不要求 1:1 还原的话,那干嘛折腾这个,想别人觉得你工作量不饱和?
通常源码编译,都是使用环境会完全脱离外网,也懒得自己部署 repo,干脆就一把撸,顺便也就告别更新了,没 bug 就用到项目死掉的
哦,对了,还有用 FreeBSD 的,不过人家有 ports 完全不用多操心依赖...
Mac0ne
2020-10-29 09:43:20 +08:00
官方文档都写着呢~~~
yklaxds
2020-10-31 14:10:31 +08:00
考虑试试 FreeBSD

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/713349

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX