Contents

【坑】Amazon Linux 2 初探

Amazon Linux 2简介

来自AWS官网的介(chui)绍(niu): Amazon Linux 2 是来自 Amazon Web Services(AWS)的 Linux 操作系统。它提供了一个注重安全、稳定和高性能的执行环境来开发和运行云应用程序。Amazon Linux 2 免费提供。AWS 为 Amazon Linux 2 提供持续的安全和维护更新。

目前我们用下来已知的优势有:

  1. 在AWS平台免费
  2. 在AWS平台免费
  3. 在AWS平台免费
  4. 在AWS平台免费
  5. 在AWS平台免费
  6. 有安全补丁更新

坑点1 LTS周期

Amazon Linux 2的Launch Date是2018年9月支持周期截至日期EOL为2023年6月(Amazon Linux 2 offers long-term support until June 30, 2023.)],从支持周期看AWS认为的LTS周期为5年,和Ubuntu Server LTS的周期长度一致。而红帽family默认RHEL的支持周期为10年。

这变相对后上车用户进行无形剥削。

阴阳怪气:“都怪你没有早上车,用上伟大的Amazon Linux。” 像我们最近才听说了Amazon Linux,刚刚上车没多久,刚刚熟悉了这套系统,结果,诶,没错,他突然就要EOL了。和CentO S 8一样令人emo。

https://th.bing.com/th/id/R.4d03dd716d896911bf1c8b694535ceac?rik=wbnZwI%2fe2fxbfw&riu=http%3a%2f%2fwww.biaoqingb.com%2fuploads%2fimg1%2f20200804%2f212bfec80a67327b128c95fd643c6d81.jpg&ehk=I%2fAWcgBMKJNj62IbnKNj8ViKUZzr75IKO75FnJ0J5oQ%3d&risl=&pid=ImgRaw&r=0

作为红帽系的小新人,我有幸完整经历了(自封)从CentOS 6切换到CentOS 7的青葱岁月(偏科研领域),而这整个切换环境的过渡期和阵痛期,我们大概是有整整的2年,第3年才正式脱困。 这个时间周期看起来有点长是有两方面原因的:

  1. 配套的行业应用没有一致性跟上,科研、开发人员也需要熟悉新环境,因此他们的应用在CentOS 6末期,CentOS 7早期才逐渐成熟, 从CentOS 6末期,到CentOS 7初期,这个周期也差不多是总共小5年的熟悉、过渡过程。尽管红帽已经花了非常大的力气,保证ABI兼容性,即6的代码可以不修改,直接在7上直接跑,但是实际过程中总有这样、那样的问题,导致不兼容,然后调整、适配。
  1. CentOS 6到7的升级,从运维角度来看是有不少变化(如rc.local, chkconfig等基础服务性命令),过往许多根据CentOS 6环境编写的shell运维脚本,也有所变化,需要一点的时间去适配、测试和更新。
  1. 实际生产中,没有人想让自己成为小白鼠。吃亏都让别人去吃吧,我就要直接跨过别人淌过的坑,躺在别人的尸体上书写自己的功劳簿。于是,大家的观望气氛也很浓,谁也不想、也不敢成为第一个吃螃蟹的人。

坑点2 Glibc版本(ABI等兼容性)

让我们来看看Amazon Linux2的基础环境(ABI):

  • GCC 7.3, Glibc 2.26, Binutils 2.29.

再对比一下RHEL 8的兼容性环境

  • GCC 8.2 ,Glibc 2.28, Binutils 2.30

于是这就很尴尬了,Amazon Linux 2的名义上号称是兼容RHEL8,通过yum进行系统的包管理,且认为对红帽造成了威胁(自封),但是从ABI来看,完全不是那么一回事,整个就是高不成低不就。 可以无脑装7的版本,但似乎又不能装7的,外面下载EL7的rpm 需要这个依赖和那个依赖,然后你这个Amazon Linux里面并没有这个依赖和那个依赖。

我们目前遇到的一个问题

我们想装mysql-server-community,但是装不上。借用EL8的,glibc版本不够,借EL7的也是各种冲突。

肯定会有小可爱说:“SX,不会用mariadb-server”嘛,阿蠢?”

但切身的体会就是mysql dump出来的sql, import进mariadb就只有两点不兼容,这点不兼容和那点不兼容。

网上也一搜一大把mariadb和mysql名义兼容,实则各自不兼容。

有些东西看起来像鸭子,叫起来像鸭子,摸起来像鸭子,那么它就是鸭子。但是鸭子是也有不同品种的,家鸭和野鸭。

有的小可爱又会说:“AWS的RDS你们咋不用呢,后台也是有mysql的”

我能在本地直接快乐的部署一份mysql-server为啥还要调你的RDS?花双倍的米,得到一半的快乐?

坑点3 生态默认支持的软件包少

那么让我们继续看看伟大的Amazon Linux做的软件适配工作,amazon-linux-extras。

amazon-linux-extras list

  0  ansible2                 available     [ =2.4.2  =2.4.6  =2.8  =stable ]
  2  httpd_modules            available    [ =1.0  =stable ]
  3  memcached1.5             available    [ =1.5.1  =1.5.16  =1.5.17 ]
  5  postgresql9.6            available    [ =9.6.6  =9.6.8  =stable ]
  6  postgresql10             available    [ =10  =stable ]
  9  R3.4                     available    [ =3.4.3  =stable ]
 10  rust1                    available     [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0  =1.38.0 =stable ]
 11  vim                      available    [ =8.0  =stable ]
 18  libreoffice              available    [ =5.0.6.2_15  =5.3.6.1  =stable ]
 19  gimp                     available    [ =2.8.22 ]
 20  docker=latest            enabled      [ =17.12.1  =18.03.1  =18.06.1  =18.09.9  =stable ]
 21  mate-desktop1.x          available    [ =1.19.0  =1.20.0  =stable ]
 22  GraphicsMagick1.3        available    [ =1.3.29  =1.3.32  =1.3.34  =stable ]
 23  tomcat8.5                available    [ =8.5.31  =8.5.32  =8.5.38  =8.5.40  =8.5.42  =8.5.50 =stable ]
 24  epel=latest              enabled      [ =7.11  =stable ]
 25  testing                  available    [ =1.0  =stable ]
 26  ecs                      available    [ =stable ]
 27  corretto8                available    [ =1.8.0_192  =1.8.0_202  =1.8.0_212  =1.8.0_222  =1.8.0_232 =1.8.0_242  =stable ]
 28  firecracker              available    [ =0.11  =stable ]
 29  golang1.11               available    [ =1.11.3  =1.11.11  =1.11.13  =stable ]
 30  squid4                   available    [ =4  =stable ]
 32  lustre2.10               available    [ =2.10.5  =2.10.8  =stable ]
 33  java-openjdk11           available    [ =11  =stable ]
 34  lynis                    available    [ =stable ]
 35  kernel-ng                available    [ =stable ]
 36  BCC                      available    [ =0.x  =stable ]
 37  mono                     available    [ =5.x  =stable ]
 38  nginx1                   available    [ =stable ]
 39  ruby2.6                  available    [ =2.6  =stable ]
 40  mock                     available    [ =stable ]
 41  postgresql11             available    [ =11  =stable ]
 42  php7.4                   available    [ =stable ]
 43  livepatch                available    [ =stable ]
 44  python3.8                available    [ =stable ]
 45  haproxy2                 available    [ =stable ]
 46  collectd                 available    [ =stable ]
 47  aws-nitro-enclaves-cli   available    [ =stable ]
 48  R4                       available    [ =stable ]
  _  kernel-5.4               available    [ =stable ]
 50  selinux-ng               available    [ =stable ]
 51  php8.0                   available    [ =stable ]
 52  tomcat9                  available    [ =stable ]
 53  unbound1.13              available    [ =stable ]
 54  mariadb10.5              available    [ =stable ]
 55  kernel-5.10=latest       enabled      [ =stable ]
 56  redis6                   available    [ =stable ]
 57  ruby3.0                  available    [ =stable ]
 58  postgresql12             available    [ =stable ]
 59  postgresql13             available    [ =stable ]
 60  mock2                    available    [ =stable ]
 61  dnsmasq2.85              available    [ =stable ]

我用wc -l数了一下,丰富的amazon-linux-extras生态,竟然有足足51个默认可用的工具!

最有用的还是 24号选手epel,魔改版el7库。如果你不开启epel,那么不好意思,你nginx都没得用。

我的一点点体会

戾气重的zhihu不少人都在Diss我们国内的运维太乐色,只学CentOS,这个系统只有两方面垃圾,这方面垃圾和那方面垃圾。

搞个发行版出来,有手就行。

(P.S. 我也不知道他们有多少是正经的运维,阴阳怪气+1)

  • Ubuntu Server好,外国全在用, balabala
  • Gentoo 好,性能炸裂,balabala
  • xxxBSD好,稳定又安全

Python 2 到 3 不也是人类历史上不可磨灭的粑粑山之一嘛? 现在数数看即便现在2022年了,Python 2的代码真的不用了么? 不会存在一个角落依然安安静静地跑着么?

也就短短的几年,这个世界上似乎只剩下了k8s, golang,rust, js这几个当红炸子鸡了 => 世界上就不该有glibc 版本过低导致的不兼容问题。

似乎非常有道理,但是这个世界确实就是那么不讲道理。特别是科研领域,我就是遇到了这样子的屎坑,科研人员的代码本身就是随心所欲的(包括我自己),开发、编译的环境也是。

迈特·凯的父亲,迈特·戴曾经说过:

所谓自我约束是指在向某些困难发起挑战时,故意给自己戴上一个枷锁,把自己逼到穷途末路, 制定只属于自己的规矩,正因为有了那个枷锁,你才会认真面对挑战,而一旦失败,你就能通过实践那个规矩,让自己得到严格的锻炼,使得自己不断进步,这才叫自我约束。

http://n.sinaimg.cn/97973/crawl/20171102/LpiM-fynmzum9643437.jpg

我认为CentOS就是一个长期的枷锁,对开发人员进行自我约束和限制。我们有10年的时间可以"负重前行"。有一天,当你在自我约束下,习得绝世武功,成为武林盟主,一览众山小,那又是另外一回事了。

当然,还有另外一种可能。打破自我约束,可以一脚差点踢出火影大结局。但是,不知道你是不是能有凯那么好的运气,有个男主角鸣人给你点灯续命。

https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimage.uc.cn%2Fs%2Fwemedia%2Fs%2Fupload%2F2020%2F6a6cb2b2b6d0ec13d06f60ae8de45440.png&refer=http%3A%2F%2Fimage.uc.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1657304000&t=9113feae08917b242570cda96daf1096

但是emo了,8 EOL了。 我们从目前的时间点来看,暂时只能凭运气选战未来的Family。

C++的开发也一样,成熟的开发团队同样会在内部技术手册中限制团队要严格遵守怎样的范式,不要从这个角度和那个角度去做这个事情。不然又成粑粑山了。

当你看到了一个东西像粑粑山,摸了一下手感像粑粑山,甚至尝了一口味道也像粑粑山。那么你就是存在与粑粑山环境之中,只能接受这个现状。

只有一个长期、稳定的发行版,不会今天变这个,明天变那个,大家才能在这个稳定的框架下面一齐发光发热。不然,出现朝令夕改,绝对凉凉。

宋·范祖禹《唐鉴·卷一九·穆宗》:“凡用兵举动,皆自禁中授以方略,朝令夕改,不知所从。”

都说AI领域就得用Ubuntu,CentOS狗都不用,死活配不好环境,也没人管配机器学习的环境。

那么在实机部署、IDC领域,鬼知道这些机器有什么奇形怪状的硬件,需要怎样打驱动,这个还是CentOS稳。

只允许你Ubuntu开发环境好配,不允许我CentOS系统好装?

https://pic.qqtn.com/up/2017-12/15130613784365903.jpg

各个国家有各个国家的国歌

还有一种声音,10年的LTS周期太长了,贵司的技术不变就是不思进取! Ubuntu LTS才是yyds,5年就够了,君不见Ubuntu Server现在也出5+5的LTS了,而且后5年要加钱。

https://th.bing.com/th/id/OIP.KTJr8igXATm9dp1or7or0QHaJs?pid=ImgDet&rs=1

就拿我之前的经验来说,CentOS 6到7都搞得鸡飞狗跳, Ubuntu这边,实机相关的,大版本升级一轮,就挂一轮,公司必然生产环境搞得鸡飞狗跳+1。 还记得Ubuntu 14.04 LTS和 16.04 LTS么?即便你是人工智能、机器学习相关的领域,当年从14.04 升级 16.04就挂了一大轮,死活就是不能无缝切;然后16.04 到 18.04 还是挂了一大轮;18.04到 20.04继续挂;20.04到22.04仍然挂。

  • Ubuntu对于系统升级挂人的传统艺能,把大家整的都习惯了,似乎升级系统就得这样勤奋&挂。
  • CentOS 7常年gcc 4.8.5,完整的c++11的支持都不全。也是天天编译、失败、再编译、在失败的无尽循环中

我觉得这两种情况都是已经走上了邪路,注定是两个极点,针尖对麦芒。

那肯定有小可爱又要问了:“有没有什么中正平和的路线呢?”

我感觉是SUSE的SLES,但是奈何SUSE公司的市场、社区环境在中国都没有真正建立起来,市面上招个成熟的SLES运维也难,实在可惜。

Amazon Linux 2的评价

前面已经对目前针尖对麦芒的CentOS派和Ubuntu派互相diss了一波(拉偏架)。 那么我们回到本文的主旨,初步评价(Diss)一下Amazon Linux 2。

AL2 可以说是纯纯的空气党了,连被diss的资格都没有

  1. 生态环境没有
  2. 稳定LTS支持
  3. 市场不够大,也不属于开源的范畴
  4. 运维相关文档不丰富
  5. 魔法太多(令人害怕)

对RHEL产生了威胁(自封),我觉得Amazon还是需要找蜻蜓队长裁决裁决。

http://n.sinaimg.cn/sinacn15/284/w640h444/20180809/6d36-hhnunsq0381338.png

唯一的优势就是在AWS用免费,和AWS的各生态接口接的好。

AL2的商业实践告诉了我们

  1. 即便强如AWS,也搞不好一个Linux发行版的生态
  2. 即便强如AWS,搞出来的魔改版Linux发行版也是一个小垃圾
  3. 即便强如AWS,养的是一个战斗力绝伦的Linux发行版团队,也发现只能不断输血无法顺利回血
  4. 即便强如AWS,也是有粑粑山的
  5. 即便强如AWS,大家也不要相信他们永远牛皮,有些东西天生就是垃圾
  6. 即便强如AWS,大家也不要相信他们永远牛皮,有些东西天生就是垃圾
  7. 即便强如AWS,大家也不要相信他们永远牛皮,有些东西天生就是垃圾
  8. 即便强如AWS,大家也不要相信他们永远牛皮,有些东西天生就是垃圾
  9. 即便强如AWS,大家也不要相信他们永远牛皮,有些东西天生就是垃圾
  10. 即便强如AWS,大家也不要相信他们永远牛皮,有些东西天生就是垃圾

夸一夸Amazon Linux 2

Amazon Linux 2当然也有一些生态环境上的优势:

  1. 如果你是LAMP技术栈,AL2非常适合,一键无痛完成环境搭建
  2. 如果你是容器的技术栈,AL2非常适合,似乎kernel有一些魔改,反正底层系统对你不重要
  • 其他的技术栈,离AL2有多远跑多远!!!
  • 其他的技术栈,离AL2有多远跑多远!!!
  • 其他的技术栈,离AL2有多远跑多远!!!

*我连装个Nodejs,都是需要找到个外挂环境,才配好