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

2021-12-03 09:47:29 +08:00
 css3
linux 上,要安装一个软件,它依赖多,且所需依赖的软件可能和环境上版本存在冲突,而这种软件又是经常不同服务器上也要安装,这种软件的正确安装方式是什么?
4017 次点击
所在节点    程序员
39 条回复
neteroster
2021-12-03 17:50:36 +08:00
docker
moliliang
2021-12-03 18:13:33 +08:00
打包( docker 、静态变异、打包工具等)
GeruzoniAnsasu
2021-12-03 18:18:10 +08:00
> The following software packages are required to build lnav:

required to BUILD

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


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

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

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

简单来说就是你这些依赖都按照到一个固定非系统目录,然后其它编译的时候指定依赖,LD_LIBRARY_PATH 啥的环境变量修改只是基本的,还可能需要改源码
abc8678
2021-12-05 01:10:46 +08:00
apt 找不到软件包的时候无奈。tar 点 gz 的包不太懂装,而且装完了如果不想用也不知道如何卸载了
julyclyde
2021-12-07 13:26:30 +08:00
这种一般都是需求有问题,而不是方法有问题

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

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

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

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

© 2021 V2EX