再吐槽 linux 的版本依赖

2015-06-24 14:53:28 +08:00
 cxshun
今天早上,由于维护docker环境 ,要安装一个叫Image magick的图片处理工具,这家伙最新版本为6.9.1-6,在安装它之前需要先装delegates,即类似的第三方处理工具,由它去处理png,jpeg等等的啥东西。
就是这一堆东西: http://www.imagemagick.org/download/delegates/

在这个Image magick上花了接近大半天的时间,主要是configure时死活认不出libpng,但实际上已经装完了。
后来实在没办法,硬是换回了旧版本6.9.1-1完事。

有时候,我会想,这些源代码编译软件的存在,就是为了折磨我们吗?这版本依赖的存在,相比windows和mac的一个包搞定的,简直是坑爹得不行。

遇到这样一种源代码安装,并且版本依赖非常强的软件,你们的看法是怎样的?

PS:曾经遇到过一个需要源码编译的软件,它依赖的软件,相关0.0.1都编不过,从那个时候开始,遇到需要编译安装的软件,我就觉得好日子好像又到头了。
PS2:不要说apt-get和yum哈,那两个家伙确实不错,但问题是很多源代码安装的软件不在那里面啊。
13310 次点击
所在节点    程序员
104 条回复
giskard
2015-06-24 17:16:01 +08:00
@Septembers 谢谢,这种方法之前在搜索的时候见到过,但是还没尝试。请问一下您用什么工具来讲本地编译好的打包成rpm,还有一个问题,打包成rpm的话,去服务器上安装rpm包还是要root权限,是吗?那我没有root权限是不是没法安装rpm包啊?
neoblackcap
2015-06-24 17:16:09 +08:00
@cxshun 软件都有bug,你我都清楚,指导不友好在开源的项目中很普遍。

回到你的问题,你问面对版本依赖强的软件该怎么做,我告诉你的方法就是逃,你自己就是这样,或者这才是正确的解决方法,是你自己强迫自己而已。你换个版本就可以了,那就说明你其实不依赖特定的版本。你又不依赖特定的版本,那何苦辛苦自己去编译这个难啃的骨头?

你为何一定要编译?我的意思是二进制分发的软件这么多途径,你为何一定要依赖apt的官方源呢,apt没有你就要找源码编译?为何不试试找新的二进制源添加进apt呢?
holyzhou
2015-06-24 17:19:03 +08:00
@giskard 对的
holyzhou
2015-06-24 17:26:49 +08:00
@neoblackcap 哈哈 立马想到以前教linux老师问另一个大神老师 ,你干嘛自己编译kernel ,直接yum装装好嘞,他回答:"because i can."。 我觉得日常不是冲着研究去的,真的就是包管理装装好了,省心省事省力
FifiLyu
2015-06-24 17:30:38 +08:00
其实自己会写C,编译出现的各种奇葩问题都能解决。公司的CentOS5要用各种最新版本的包,找不到rpm,就自己搞。

虽然,我能编译。
但是,好累。
所以,我用Arch。

2333
lilydjwg
2015-06-24 17:38:52 +08:00
在 Linux 下你也可以一个命令搞定。ImageMagick 这么出名的软件大部分发行版都会有包的。

**请不要拿 Linux + 源码编译 和 Windows + 预编译包 对比!**不然你说世界举重冠军算什么,去蓝翔学学超重机就好了嘛。

你可以试试在 Windows 下源码编译 ImageMagick,看看到底谁更坑。

当然 Mac OS X 有 Homebrew 很强大,但 Gentoo 也有 emerge 呀。Arch 还有 abs 呢。Windows 呢?有什么?
josephok
2015-06-24 17:39:42 +08:00
尽量用包管理器吧
lilydjwg
2015-06-24 17:41:14 +08:00
@holyzhou 我也自己编译内核,因为我的内核可以在文本界面显示中文!可以合并相同内存页!有调试符号、支持 systemtap!支持 bfq I/O 调度器! :-)
cxshun
2015-06-24 17:47:47 +08:00
@szopen 这个还真没用过,我去瞧瞧。
@holyzhou 主要还是想省心,每个软件这样搞,真心太累了。
@neoblackcap 确实,但如果不试其他版本的话,我真不知道是版本的问题。
主要的问题就是在这里,怎么去确定是版本的问题,而不是自己安装的问题。因为它说找不到libpng,我还真怀疑自己安装有问题,找了好多个版本,但都不行,而网上没人遇到同样的问题。或者说,之前的版本都没问题,只是最近的才有。

其实很多时候,我们更倾向于怀疑自己做错了,而不是软件的问题,所以会花费很多时间。我吐槽也是想大家讨论下,有什么办法能够去减少花费在这些上面的时间,因为真的很费时,但又没啥用。
@lilydjwg windows包管理确实没linux和mac好,但windows的msi很强大,也很好。
@giskard 没网络用linux确实是很烦心的,因为很多依赖你需要从网上获取。
@icemanpro 太老的windows吧,现在的貌似没听说。
@choury 哦,原来这样啊,学习了。
lilydjwg
2015-06-24 17:57:19 +08:00
@cxshun 库依赖检测不到的话去看看 config.log?
zhengkai
2015-06-24 17:58:38 +08:00
我当年编一个 php 编了整整一天我会到处乱说?
从升级 gcc glibc 开始,所有依赖全部 wget configure make,用现在的话来说,那酸爽……

很久以后我才知道 centos 里对应 apt-get 的叫 yum
又过了很久我才知道依赖库大部分用 libxxx-dev 就可以了,不用自己编……
likuku
2015-06-24 18:07:48 +08:00
更欣赏 freebsd 的作法,基础系统的独立出来,现在有 freebsd-update 来自动安全搞定2进制更新基本系统和内核。第三方/非BSD授权/各种应用软件,就都交给 自动源码编译的 ports/pkg bin,etc,src包,统统放在 /usr/local 下,不会去染指 基本系统,所需的所有依赖/与基本系统不兼容的依赖,也都放在 /usr/local

最大程度地保证了基本系统的干净可用。
mathgl
2015-06-24 18:18:43 +08:00
@zhengkai 曾经花过好几天的时间 built qt from source...
proudzhu
2015-06-24 18:22:36 +08:00
@likuku 安装到 /usr/local 只要在 configure 的时候指定就行了,不过窃以为放到哪不重要,有包管理器管理就行
neoblackcap
2015-06-24 18:25:51 +08:00
@cxshun 为什么一定知道原因?你就是要一个能跑的就行了,反正你就换,选成本最低的来,比如有二进制下载,那赶紧去下载,不要管是不是你编译参数调对没调对,因为你下载速度肯定比你编译的速度快。
likuku
2015-06-24 18:26:30 +08:00
@proudzhu 安装到哪不重要,包管理器也不重要,只要能和基本系统隔离就行

ports 虽然是自动源码编译(gentoo 的 emerge 就源自 ports),安装后会在 pkg 的 包管理器里注册(含依赖关系),之后删除和查看信息也都可以直接用 pkg 这个2进制包管理器操作。
stevegy
2015-06-24 19:19:41 +08:00
看半天,你原来的错误消息到底是啥?报特定版本的libpng没找到?还是别的?
jarlyyn
2015-06-24 20:57:08 +08:00
debian用户路过。
Linusyeung
2015-06-24 21:10:56 +08:00
其实楼主提的是个好问题嘛!大家不要不耐烦。。。

好产品,终归要以用户体验和需求为本。

Linux 就是 Geeks 的玩具,别太较真。乐趣就是折腾。

用 arch 飘过。
cbsw
2015-06-24 23:08:36 +08:00
@cxshun 你以为软件作者想只依赖某个特定版本啊?使用别人的东西,别人升级后改动了 API,如果有精力可以天天跟在屁股后面升级兼容。作为一个开发人员,这点相信你是知道的,现在的开发必定是建立在很多已有库、软件基础之上的

自己编译只是用来满足特定的需求,没有特别的需求的直接用包管理器拖一个二进制回来,省心又省力。当年玩 Gentoo 每周升级一次,遇到 DE、LibreOffice、Chromium、Firefox、GHC、GCC 之类需要升级的笔记本会哭一整天、呼呼地报怨,而当时还傻傻地以为她是接到任务,满心欢喜地卖弄着给我干活呢。所以节约能源,请善待你的电脑,不要让她哭泣

现在软件开发趋势是开发时使用各种依赖,生成的最终软件将依赖一起打包,毕竟现在硬盘和带宽足以支持大文件传输与存储。
最近新出的语言(Go、Rust等)默认都是静态编译,所以依赖问题会大大减少;但是开发过程中仍然不可避免地要与各种依赖干架,这个是与平台无关的,而且相对来说 Linux 在这方面要比 Win/Mac 容易处理

@lilydjwg 小狐狸,我以前用过 Gentoo 一段时间,编译过好多次内核,尝试多次都没能在 console 界面显示中文,你编译几次成功的?

那些安利 debian 的,你们用的有几个软件是原作者最初的版本,deb 自行打各种 patch,随意篡改软件的结构,配置文件也是各种分割又篡改,出了问题可能软件原作者都不一定能帮你

centos/rhel 跑些比较老的应用还是不错的,但是源里面的东西少而且老,一旦需要 DIY 源里没有的东西就是噩梦的开始,真的是牵一发而动全身,因为你已经落后时代好久了,所以必需非常非常非常小心翼翼地,稍不注意可能就弄坏了系统的某个组件,而要修复那个组件很可能造成更大的破坏

没错,我是来安利 ArchLinux 的
Arch 作为一个为 686 优化的发行版,在现在绝大多数机器上跑得特别欢畅,pacman 是 C 写的,比 Gentoo 的 protage 快了n多倍,也比 apt/yum/zypper 之流快好多,Wiki 也是 Linux 界数一数二的,有时在 Fedora/Ubuntu/Debian 等发行版中遇到问题我也习惯先到 Arch Wiki 中查找,而且很多时候都可以找到好的解决方案,这个要比 Google 到 StackOverflow 众多答案中去试要高效得多。pacman 和 abs 两套系统让 Arch 支持二进制和源码两种方式,而且比较和谐,当然还有数量庞大的 aur,想到的没想到的在里面几乎都有,不过由于不是官方维护,质量也参差不齐,编译成功率比 Gentoo portage 低了一两个量级,所以如果真的要玩编译还是推荐 Gentoo。
另外使用 ArchLinux 可以第一时间尝到软件最新版本,当然这从某个方面来说这是很好的事情,但是好多时候新特性用上了,自己都会吓一跳,并不是说经常碰到bug,而是说对于新特性还没有作好心理准备就突然出现在你的系统里了,事实上用了这么多年 Linux,尝试过各种发行版,ArchLinux 中我遇到的 bug 最少,遇到问题也基本上是最快可以解决的


另外软件、库多版本共存并没有什么问题,现在已有成熟可用的 NixOS,同时 GNU 也正在构建一套这样的发行版 GuixSD,期待以后能用 Scheme 配置我的系统

NixOS: http://nixos.org
Guix: http://www.gnu.org/software/guix

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

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

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

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

© 2021 V2EX