V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Feiox
V2EX  ›  Linux

如今,还需要自行编译安装生产环境的各个软件吗?

  •  
  •   Feiox ·
    feiox · 2014-09-07 20:12:04 +08:00 · 7304 次点击
    这是一个创建于 3765 天前的主题,其中的信息可能已经有所发展或是发生改变。
    相比于 yum apt-get 安装编译好的包,自行编译除了能够用上最新的稳定版(似乎生产环境不能这么玩),还有什么其他的好处?
    我看现在各种运行参数都可以通过配置文件进行随时按需修改,似乎,编译安装 ……
    另外,根据需要在编译期间拿掉用不到的组件,现在这样做还有意义么?不拿掉是否有益于性能和安全性?
    32 条回复    2014-09-09 17:06:43 +08:00
    em70
        1
    em70  
       2014-09-07 20:15:45 +08:00
    编译安装最大的好处是不需要外部环境依赖,安装好就能用. 但yum也很方便啊,我能yum的一般不自己编译安装了
    wdlth
        2
    wdlth  
       2014-09-07 20:23:13 +08:00
    有的软件要加入第三方模块,要自己重新编译。

    yum、apt那些只是用于安装大多数依赖的类库。
    gotounix
        3
    gotounix  
       2014-09-07 20:26:16 +08:00
    不编译安装了,不好跟踪软件漏洞,不能及时修复。
    jybox
        4
    jybox  
       2014-09-07 20:27:48 +08:00
    我所有的软件都是 apt 装的,感觉完全没有编译安装的必要
    9hills
        5
    9hills  
       2014-09-07 21:20:11 +08:00
    一般来说,直接APT/YUM 就好了,这些都是有官方质量控制的。软件版本不是越新越好的。。
    est
        6
    est  
       2014-09-07 21:22:31 +08:00 via Android
    除了configure才能打开的,一般不需要自己编译
    julyclyde
        7
    julyclyde  
       2014-09-07 22:39:42 +08:00 via iPad
    每次都编译的直接开除
    julyclyde
        8
    julyclyde  
       2014-09-07 22:41:14 +08:00 via iPad
    @em70 建议你学习一下唯物主义哲学
    zjgood
        9
    zjgood  
       2014-09-07 23:00:27 +08:00 via Android
    因为phpng没有deb包,所以只能自己编译,其余的都是直接apt-get
    semicircle21
        10
    semicircle21  
       2014-09-07 23:27:35 +08:00
    据我所知, redis 是有必要的, 可以编32bit 的版本, 省一点内存. 其他的就不清楚了/大概专业做运维的同学更有发言权吧.
    ironblood
        11
    ironblood  
       2014-09-07 23:32:49 +08:00
    有时候你回发现源里的库不够新,这个时候你就需要自行编译安装了。

    比如 Ubuntu 12.04 和 10.04 里的 libxml2 的版本就不相同。有些生产用的服务器还没有从 10.04 升级。相比较起来,编译安装个库的成本小于系统升级,对吧。
    kmcool
        12
    kmcool  
       2014-09-07 23:56:11 +08:00
    有些复杂软件有时候还是得自己编译才能用,比如前几天刚折腾了GNURadio
    lecher
        13
    lecher  
       2014-09-08 01:04:56 +08:00   ❤️ 2
    编译安装的目的是统一环境,版本、安装位置、运行参数、启动和关闭的脚本。
    一两台服务器的情况下随便怎么折腾都可以。
    但是假如有多台服务器,尤其涉及服务器安装配置的时间不一致的时候,编译安装的优势就体现出来了,你总不希望时隔一年,再安装一台新的服务器的时候,环境出现细微的差别吧?尤其还有一些应用你是打了第三方扩展库的,一个版本号的差异,可能就够折腾好久。
    编译安装便于统一环境的所有版本,同时也利于自动化部署。脚本写好,放着跑就行。假如操作系统环境一致,甚至不用编译安装,直接同步已经编译好的环境到新机器,一切配置都不用动,开机就可以直接用。
    等你yum 安装 再根据环境配置完,别人编译安装的已经跑完好几台的环境了。
    生产环境来说,编译安装这点非常重要,用linux不就是看重它便于自动化易于批量管理么。
    em70
        14
    em70  
       2014-09-08 01:19:37 +08:00
    @julyclyde 不明白,有问题你可以说你的观点,别拐弯抹角,没啥意思
    jyhmijack
        15
    jyhmijack  
       2014-09-08 09:48:52 +08:00 via iPhone
    自己打rpm包
    Feiox
        16
    Feiox  
    OP
       2014-09-08 11:07:50 +08:00
    @lecher 编译安装之后,是如何升级修复相关组件的呢?
    lecher
        17
    lecher  
       2014-09-08 11:19:03 +08:00
    @Feiox 编译安装之后,假如要升级,两种方式。
    1. 在其中一台写好升级修复的脚本,将需要升级或者修复的软件,重新编译安装一次,然后脚本同步到其它服务器执行。
    2. 系统环境全部一致的情况下,再其中一台升级好,然后整套环境分发到其它服务器。
    这样的可控性要比包管理的高一些,因为环境统一,所以需要安装哪些版本,修改哪些配置,都可以直接脚本处理。
    Feiox
        18
    Feiox  
    OP
       2014-09-08 11:35:37 +08:00
    @lecher 我不是专业搞运维的 ~ 轻拍 ~
    那个,有没有什么比较好的运维脚本供学习么?国人的 LNMP 一键安装脚本写的如何?运维集群的时候,脚本的写法与运维一两台服务器有什么区别呢 ~
    lecher
        19
    lecher  
       2014-09-08 12:43:39 +08:00
    @Feiox

    运维脚本这个东西因为不同公司的环境需求不一样,似乎没有流出来的。
    LNMP一键脚本有好几个不同的版本,算是帮助普通用户快速解决了基础环境的问题,就是版本太老。实际上生产环境还是自己去写安装脚本的居多,毕竟调参数是要根据需求来处理的。
    运维几台服务器的时候,可能不会特别关心软件挂了怎么处理,多台的时候,从硬件层面到应用层面各种情况都要考虑到,并且写好对应的运维脚本,尤其监控状态和异常处理,运维的脚本至少要能做到:监控到应用确实挂掉了,切换应用状态,重启应用,再不行,重启系统,还不行,这台服务器踢出来报给运维进行手工处理。
    做监控数据打日志和处理异常的活,写脚本的时候会特别注意异常状态处理的事情,多台会更注重自动化部署和数据监控方面的管理,所以多台的时候:文件分发、配置变更、性能参数、故障异常这些处理脚本会用一套运维系统管理,日志会定期处理存入数据库以便分析系统状态,所以多台服务器运维通常是自己写管理系统或者用开源的运维系统,这方面在社区有不少讨论的。
    julyclyde
        20
    julyclyde  
       2014-09-08 14:38:56 +08:00
    @em70 依赖关系是客观存在的,并不以你装包还是编译而改变。如果你以为把编译好的软件拷贝到别的缺依赖关系而你无视这个缺的机器去也能用,那你就等着软件crash吧
    julyclyde
        21
    julyclyde  
       2014-09-08 14:39:34 +08:00
    @lecher 你这完全是业余做法
    em70
        22
    em70  
       2014-09-08 15:36:22 +08:00
    @julyclyde 你误会了,我不是那个意思,我的意思是在一个机器上能编译通过的程序,那么在本机就一定能运行,如果是从其他机器拷贝一个程序过来则无法保证,所以需要编译安装.
    reverland
        23
    reverland  
       2014-09-08 18:40:22 +08:00
    当你看源码的某些部分不爽的时候
    wwek
        24
    wwek  
       2014-09-08 19:15:47 +08:00
    能够yum apt-get的 全 这样二进制。
    需要编译的情况。 需要改源码,无最新的二进制包。
    生产环境的 php nginx 都是自己打包 rpm的。
    msg7086
        25
    msg7086  
       2014-09-08 20:21:28 +08:00 via iPhone
    自己编译也可以用包管理。比如debian你下载git head和debian rules然后debuild就好了。编译出来的包也可以到处分发,也可以让包管理帮你装依赖。
    Feiox
        26
    Feiox  
    OP
       2014-09-08 22:20:53 +08:00
    @reverland 比如,觉得 Redis 性能不爽的时候 ~ :P
    Feiox
        27
    Feiox  
    OP
       2014-09-08 22:22:11 +08:00
    @lecher @julyclyde 编译安装一个软件,是否其依赖关系链上的所有软件都应该编译安装呢?
    julyclyde
        28
    julyclyde  
       2014-09-08 22:54:52 +08:00 via iPad
    @em70 用包管理系统(正常使用,别用--nodeps之类的参数)只要你能装上自然可以运行,依赖关系在包内有说明,由系统保证。如果你拷贝编译出来的文件,则客观存在的依赖关系缺乏显式说明,因而无法确保。自己编译解决了包管理世界不存在的社会问题。
    julyclyde
        29
    julyclyde  
       2014-09-08 22:56:12 +08:00 via iPad
    这种问题其实没啥好讨论的,就是水平的试金石。寨有寨路罢了
    em70
        30
    em70  
       2014-09-08 22:59:42 +08:00 via Android
    @julyclyde 你仔细看看我的第一条发言,我说的不就是这个意思吗
    lazyphp
        31
    lazyphp  
       2014-09-09 09:35:14 +08:00
    yum apt-get安装的软件有时候 会无法找到对应的按照目录,因为他们会把软件安装得细化。这时候,如果不熟悉的话,你会感觉非常烦恼。如,你要安装某个扩展,这时候因为你不清楚环境,就很难安装上了。
    编译安装的话,路径之类都是你设置的,随用随编。就是解决依赖,各种杂七杂八的问题搞死你。
    julyclyde
        32
    julyclyde  
       2014-09-09 17:06:43 +08:00
    @lazyphp 找不到那是你笨,真的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2586 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:27 · PVG 15:27 · LAX 23:27 · JFK 02:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.