如今,还需要自行编译安装生产环境的各个软件吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Feiox
V2EX    Linux

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

  •  
  •   Feiox
    feiox Sep 7, 2014 7814 views
    This topic created in 4251 days ago, the information mentioned may be changed or developed.
    相比于 yum apt-get 安装编译好的包,自行编译除了能够用上最新的稳定版(似乎生产环境不能这么玩),还有什么其他的好处?
    我看现在各种运行参数都可以通过配置文件进行随时按需修改,似乎,编译安装 ……
    另外,根据需要在编译期间拿掉用不到的组件,现在这样做还有意义么?不拿掉是否有益于性能和安全性?
    32 replies    2014-09-09 17:06:43 +08:00
    em70
        1
    em70  
       Sep 7, 2014
    编译安装最大的好处是不需要外部环境依赖,安装好就能用. 但yum也很方便啊,我能yum的一般不自己编译安装了
    wdlth
        2
    wdlth  
       Sep 7, 2014
    有的软件要加入第三方模块,要自己重新编译。

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

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

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