2021年3月

容器现在是无所不在,它们已经快速的改变了 IT 格局。关于容器你需要知道一些什么呢?

 title=

因为容器给企业所带来的巨大的价值和大量的好处,它快速的改变了 IT 格局。几乎所有最新的业务创新,都有容器化贡献的一部分因素,甚至是主要因素。

在现代化应用架构中,能够快速的把变更交付到生产环境的能力,让你比你的竞争对手更胜一筹。容器通过使用微服务架构,帮助开发团队开发功能、更小的失败、更快的恢复,从而加快交付速度。容器化还让应用软件能够快速启动、按需自动扩展云资源。还有,DevOps 通过灵活性、移动性、和有效性让产品可以尽快进入市场,从而将容器化的所能带来的好处最大化。

在 DevOps 中,虽然速度、敏捷、灵活是容器化的主要保障,但安全则是一个重要的因素。这就导致了 DevSecOps 的出现。它从一开始,到贯穿容器化应用的整个生命周期,都始终将安全融合到应用的开发中。默认情况下,容器化大大地增强了安全性,因为它将应用和宿主机以及其他的容器化应用相互隔离开来。

什么是容器?

容器是单体式应用程序所遗留的问题的解决方案。虽然单体式有它的优点,但是它阻碍了组织以敏捷的方式快速前进。而容器则让你能够将单体式分解成 微服务

本质上来说,容器只是一些轻量化组件的应用集,比如软件依赖、库、配置文件等等,然后运行在一个隔离的环境之中,这个隔离的环境又是运行在传统操作系统之上的,或者为了可移植性和灵活性而运行在虚拟化环境之上。

 title=

总而言之,容器通过利用像 cgroup、 内核命名空间SELinux 这样的内核技术来实现隔离。容器跟宿主机共用一个内核,因此比虚拟机占用更少的资源。

容器的优势

这种架构所带来的敏捷性是虚拟机所不可能做到的。此外,在计算和内存资源方面,容器支持一种更灵活的模型,而且它支持突发资源模式,因此应用程序可以在需要的时候,在限定的范围内,使用更多的资源。用另一句话来说,容器提供的扩展性和灵活性,是你在虚拟机上运行的应用程序中所无法实现的。

容器让在公有云或者私有云上部署和分享应用变得非常容易。更重要的是,它所提供的连贯性,帮助运维和开发团队降低了在跨平台部署的过程中的复杂度。

容器还可以实现一套通用的构建组件,可以在开发的任何阶段拿来复用,从而可以重建出一样的环境供开发、测试、预备、生产使用,将“一次编写、到处执行”的概念加以扩展。

和虚拟化相比,容器使实现灵活性、连贯性和快速部署应用的能力变得更加简单 —— 这是 DevOps 的主要原则。

Docker 因素

Docker 已经变成了容器的代名词。Docker 让容器技术发生彻底变革并得以推广普及,虽然早在 Docker 之前容器技术就已经存在。这些容器技术包括 AIX 工作负载分区、 Solaris 容器、以及 Linux 容器(LXC),后者被用来 在一台 Linux 宿主机上运行多个 Linux 环境

Kubernetes 效应

Kubernetes 如今已被广泛认为是 编排引擎 中的领导者。在过去的几年里,Kubernetes 的普及 加上容器技术的应用日趋成熟,为运维、开发、以及安全团队可以拥抱日益变革的行业,创造了一个理想的环境。

Kubernetes 为容器的管理提供了完整全面的解决方案。它可以在一个集群中运行容器,从而实现类似自动扩展云资源这样的功能,这些云资源包括:自动的、分布式的事件驱动的应用需求。这就保证了“免费的”高可用性。(比如,开发和运维都不需要花太大的劲就可以实现)

此外,在 OpenShift 和 类似 Kubernetes 这样的企业的帮助下,容器的应用变得更加的容易。

 title=

容器会替代虚拟机吗?

KubeVirt 和类似的 开源 项目很大程度上表明,容器将会取代虚拟机。KubeVirt 通过将虚拟机转化成容器,把虚拟机带入到容器化的工作流中,因此它们就可以利用容器化应用的优势。

现在,容器和虚拟机更多的是互补的关系,而不是相互竞争的。容器在虚拟机上面运行,因此增加可用性,特别是对于那些要求有持久性的应用。同时容器可以利用虚拟化技术的优势,让硬件的基础设施(如:内存和网络)的管理更加便捷。

那么 Windows 容器呢?

微软和开源社区方面都对 Windows 容器的成功实现做了大量的推动。Kubernetes 操作器 Operator 加速了 Windows 容器的应用进程。还有像 OpenShift 这样的产品现在可以启用 Windows 工作节点 来运行 Windows 容器。

Windows 的容器化创造出巨大的诱人的可能性。特别是对于使用混合环境的企业。在 Kubernetes 集群上运行你最关键的应用程序,是你成功实现混合云/多种云环境的目标迈出的一大步。

容器的未来

容器在 IT 行业日新月异的变革中扮演着重要的角色,因为企业在向着快速、敏捷的交付软件及解决方案的方向前进,以此来 超越竞争对手

容器会继续存在下去。在不久的将来,其他的使用场景,比如边缘计算中的无服务器,将会浮现出来,并且更深地影响我们对从数字设备来回传输数据的速度的认知。唯一在这种变化中存活下来的方式,就是去应用它们。


via: https://opensource.com/article/20/12/containers-101

作者:Mike Calizo 选题:lujun9972 译者:AmorSu 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

用“技术”和“非技术”的标签对人们进行分类,会伤害个人和组织。本文作为本系列的第 1 篇,将阐述这个问题。

 title=

技术 technical ”一词描述了许多项目和学科:技术淘汰赛、技术性犯规、攀岩比赛的技术课程和花样滑冰运动的技术得分。广受欢迎的烹饪节目 “The Great British Bake-Off” 包括一个“烘焙技术挑战”。任何参加过剧院演出的人都可能熟悉技术周,即戏剧或音乐剧首演前的一周。

如你所见,技术一词并不严格适用于软件工程和软件操作,所以当我们称一个人或一个角色为“技术”时,我们的意思是什么,为什么使用这个术语?

在我 20 年的技术生涯中,这些问题引起了我的兴趣,所以我决定通过一系列的采访来探讨这个问题。我不是工程师,也不写代码,但这并不意味着我是非技术型的。但我经常被贴上这样的标签。我认为自己是技术型的,通过这个系列,我希望你会明白为什么。

我知道我不是孤独一个人。群众讨论是很重要的,因为如何定义和看待一个人或一个角色会影响他们做好工作的信心和能力。如果他们感到被压垮或不受尊重,就会降低他们的工作质量,挤压创新和新思想。你看,这一切都是循序渐进的,那么我们怎样才能改善这种状况呢?

我首先采访了 7 个不同角色的人。

在本系列中,我将探讨“技术”一词背后的含义、技术的连续性、将人分类为技术型或非技术型的意外副作用,以及通常被认为是非技术性的技术角色。

定义技术和非技术

首先,我们需要做个名词解释。根据字典网,“技术/技术性的”是一个具有多重含义的形容词,包括:

  • 属于或与艺术、科学等学科有关的
  • 精通或熟悉某一特定的艺术或行业的实际操作
  • 技术要求高或困难(通常用于体育或艺术)

而“非技术性”一词在科技公司中经常被用来描述非工程人员。但是“非技术性”的定义是“不涉及、不具有某个特定活动领域及其术语的特点,或不熟练”。

作为一个写作和谈论技术的人,我认为自己是技术型的。如果你不熟悉这个领域和术语,就不可能书写或谈论一个技术主题。有了这种理解,每个从事技术工作的人都是技术人员。

为什么要分配标签?

那么,为什么划分技术与非技术?这在技术领域有什么意义呢?我们试图通过分配这些标签来实现什么?有没有一个好的理由?而我们有没有重新评估这些理由?让我们讨论一下。

当我听到人们谈论技术人员和非技术人员时,我不禁想起 Seuss 教授写的童话故事 《The Sneetches》。Sneetches 有没有星星被演化为一种渴望。Sneetches 们进入了一个无限循环,试图达到正确的状态。

标签可以起到一定的作用,但当它们迫使一个群体的等级被视为比另一个更好时,它们就会变得危险。想想你的组织或部门:销售、资源、营销、质控、工程等,哪一组的在重要性上高于或低于另一组?

即使它不是直接说的或写在什么地方,也可能是被人们默认的。这些等级划分通常也存在于规章制度中。技术内容经理 Liz Harris 表示,“在技术写作界存在着一个技术含量的评级,你越是偏技术的文章,你得到的报酬就越高,而且往往在技术写作社区里你得到的关注就越多。”

术语“技术”通常用于指一个人在某一主题上的深度或专业知识水平。销售人员也有可能会要求需要懂技术以更好的帮助客户。从事技术工作的人,他们是技术型的,但是也许更专业的技术人员才能胜任这个项目。因此,请求技术支援可能是含糊不清的表述。你需要一个对产品有深入了解的人吗?你需要一位了解基础设施堆栈的人员吗?还是需要一个能写下如何配置 API 的步骤的人?

我们应该要把技术能力看作是一个连续体,而不是把人简单的看作技术型的或非技术型的。这是什么意思?开发人员关系主管 Mary thengwall 描述了她如何对特定角色所需的不同深度的技术知识进行分类。例如,项目可能需要一个开发人员、一个具有开发人员背景的人员,或一个精通技术的人员。就是那些被归类为精通技术的人也经常被贴上非技术的标签。

根据 Mary 的说法,如果“你能解释(一个技术性的)话题,你知道你的产品工作方式,你知道该说什么和不该说什么的基本知识,那么你就是技术高手。你不必有技术背景,但你需要知道高层次的技术信息,然后还要知道向谁提供更多信息。”

标签带来的问题

当我们使用标签来具体说明我们需要完成一项工作时,它们可能会很有帮助,比如“开发人员”、“有开发人员背景”和“技术达人”。但是当我们使用标签的范围太广时,将人们分为两组中的一组可能会产生“弱于”和“优于”的感觉

当一个标签成为现实时,无论是有意还是无意,我们都必须审视自己,重新评估自己的措辞、标签和意图。

高级产品经理 Leon Stigter 提出了他的观点:“作为一个集体行业,我们正在构建更多的技术,让每个人都更容易参与。如果我们对每个人说:‘你不是技术型的’,或者说:‘你是技术型的’,然后把他们分成几个小组,那些被贴上非技术型标签的人可能永远不会去想:‘其实我自己就能完成这个项目’,实际上,我们需要所有这些人真正思考我们行业和社区的发展方向,我认为每一个人都应该有这个主观能动性。”

身份

如果我们把我们的身份贴在一个标签上,当我们认为这个标签不再适用时会发生什么?当 Adam Gordon Bell 从一个开发人员转变为一个管理人员时,他很纠结,因为他总是认为自己是技术人员,而作为一个管理人员,这些技术技能没有被使用。他觉得自己不再有价值了。编写代码并不能提供比帮助团队成员发展事业或确保项目按时交付更大的价值。所有角色都有价值,因为它们都是确保商品和服务的创建、执行和交付所必需的。

“我想我成为一名经理的原因是,我们有一支非常聪明的团队和很多非常有技能的人,但是我们并不总是能完成最出色的工作。所以技术不是限制因素,对吧?”Adam 说:“我想通常不是技术限制了团队的发挥”。

Leon Stigter 说,让人们一起合作并完成令人惊叹的工作的能力是一项很有价值的技能,不应低于技术角色的价值。

自信

冒充者综合症 Impostor syndrome 是指无法认识到自己的能力和知识,从而导致信心下降,以及完成工作和做好工作的能力下降。当你申请在会议上发言,向科技刊物提交文章,或申请工作时,冒充者综合症就会发作。冒充者综合症是一种微小的声音,它说:

  • “我技术不够胜任这个角色。”
  • “我认识更多的技术人员,他们在演讲中会做得更好。”
  • “我在市场部工作,所以我无法为这样的技术网站写文章。”

当你把某人或你自己贴上非技术型标签的时候,这些声音就会变得更响亮。这很容易导致在会议上听不到新的声音或失去团队中的人才。

刻板印象

当你认为某人是技术人员时,你会看到什么样的印象?他们穿什么?他们还有什么特点?他们是外向健谈,还是害羞安静?

Shailvi Wakhlu 是一位高级数据总监,她的职业生涯始于软件工程师,并过渡到数据和分析领域。“当我是一名软件工程师的时候,很多人都认为我不太懂技术,因为我很健谈,很明显这就意味着你不懂技术。他们认为你不孤独的待在角落就是不懂技术。”她说。

我们对谁是技术型与非技术型的刻板印象会影响招聘决策或我们的社区是否具有包容性。你也可能冒犯别人,甚至是能够帮助你的人。几年前,我在某个展台工作,问别人我能不能帮他们。“我要找最专业的人帮忙”他回答说。然后他就出发去寻找他的问题的答案。几分钟后,摊位上的销售代表和那位先生走到我跟前说:“Dawn,你是回答这个人问题的最佳人选。”

污名化

随着时间的推移,我们夸大了“技术”技能的重要性,这导致了“非技术”的标签被贬义地使用。随着技术的蓬勃发展,编程人员的价值也随之增加,因为这种技能为市场带来了新产品和新的商业方式,并直接帮助了盈利。然而,现在我们看到人们故意将技术角色凌驾于非技术角色之上,阻碍了公司的发展和成功。

人际交往技能通常被称为非技术技能。然而,它们有着高度的技术性,比如提供如何完成一项任务的分步指导,或者确定最合适的词语来传达信息或观点。这些技能往往也是决定你能否在工作中取得成功的更重要因素。

通读“ 城市词典 Urban Dictionary ”上的文章和定义,难怪人们会觉得自己的标签有道理,而其他人会患上冒充者综合症,或者觉得自己失去了身份。在线搜索时,“城市词典”定义通常出现在搜索结果的顶部。这个网站大约 20 年前开始是一个定义俚语、文化表达和其他术语的众包词典,现在变成了一个充满敌意和负面定义的网站。

这里有几个例子:“城市词典”将非技术经理定义为“不知道他们管理的人应该做什么的人”

提供如何与“非技术”人员交谈技巧的文章包括以下短语:

  • “如果我抗争,非技术人员究竟是如何应对的?”
  • “在当今的职业专业人士中,开发人员和工程师拥有一些最令人印象深刻的技能,这些技能是由多年的技术培训和实际经验磨练而成的。”

这些句子意味着非工程师是低人一等的,他们多年的训练和现实世界的经验在某种程度上没有那么令人印象深刻。对于这样的说辞,我可以举一个反例:Therese Eberhard,她的工作被许多人认为是非技术性的。她是个风景画家。她为电影和戏剧画道具和风景。她的工作是确保像甘道夫的手杖这样的道具看起来栩栩如生,而不是像塑料玩具。要想在这个角色上取得成功,需要有很多解决问题和实验化学反应的方法。Therese 在多年的实战经验中磨练了这些技能,对我来说,这相当令人印象深刻。

守门人行为

使用标签会设置障碍,并导致守门人行为,这决定谁可以进入我们的组织,我们的团队,我们的社区。

据一位开源开发者 Eddie Jaoude 所说,“‘技术’、‘开发人员’或‘测试人员’的头衔在不应该出现的地方制造了障碍或权威。我们应该将重点放在谁能为团队或项目增加价值,而头衔是无关紧要的。”

如果我们把每个人看作一个团队成员,他们应该以这样或那样的方式贡献价值,而不是看他们是否编写文档、测试用例或代码,那么我们将根据真正重要的东西来重视他们,并创建一个能完成惊人工作的团队。如果测试工程师想学习编写代码,或者程序员想学习如何在活动中与人交谈,为什么要设置障碍来阻止这种成长呢?拥抱团队成员学习、改变和向任何方向发展的渴望,为团队和公司的使命服务。

如果有人在某个角色上失败了,与其把他们说成“技术不够”,不如去看看问题到底是什么。你是否需要一个精通 JavaScript 的人,而这个人又是另一种编程语言的专家?并不是说他们不专业,是技能和知识不匹配。你需要合适的人来扮演合适的角色。如果你强迫一个精通业务分析和编写验收标准的人去编写自动化测试用例,他们就会失败。

如何取消标签

如果你已经准备好改变你对技术性和非技术性标签的看法,这里有帮助你改变的提示。

寻找替代词

我问我采访过的每个人,我们可以用什么词来代替技术和非技术。没有人能回答!我认为这里的挑战是我们不能把它归结为一个词。要替换术语,你需要使用更多的词。正如我之前写的,我们需要做的是变得更加具体。

你说过或听到过多少次这样的话:

  • “我正在为这个项目寻找技术资源。”
  • “那个候选人技术不够。”
  • “我们的软件是为非技术用户设计的。”

技术和非技术词语的这些用法是模糊的,不能表达它们的全部含义。更真实、更详细地了解你的需求那么你应该说:

  • “我想找一个对如何配置 Kubernetes 有深入了解的人。”
  • “那个候选人对 Go 的了解不够深入。”
  • “我们的软件是为销售和营销团队设计的。”

拥抱成长心态

知识和技能不是天生的。它们是经过数小时或数年的实践和经验形成的。认为“我只是技术不够”或“我不能学习如何做营销”反映了一种固定的心态。你可以向任何你想发展的方向学习技能。列一张清单,列出你认为哪些是技术技能,或非技术技能,但要具体(如上面的清单)。

认可每个人的贡献

如果你在科技行业工作,你就是技术人员。在一个项目或公司的成功中,每个人都有自己的作用。与所有做出贡献的人分享荣誉,而不仅仅是少数人。认可提出新功能的产品经理,而不仅仅是开发新功能的工程师。认可一个作家,他的文章在你的公司迅速传播并产生了新的线索。认可在数据中发现新模式的数据分析师。

下一步

在本系列的下一篇文章中,我将探讨技术中经常被标记为“非技术”的非工程角色。


via: https://opensource.com/article/21/2/what-technical

作者:Dawn Parzych 选题:lujun9972 译者:Chao-zhi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

因北美暴风雪,Linus Torvalds 遭遇六天断电后发布了内核“冰封废土”

上个月中旬,因为罕见的严寒天气和暴风雪,美国得州和俄勒冈州波特兰遭遇了持续多天的停电。Linux 创始人 Linus Torvalds 就生活在波特兰,多年来他一直在家中远程工作,并负责新内核的最终发布。之前我们报道过,内核社区发现“内核合并窗口意外‘冻住’了”。最近,Linus 在邮件列表中承认是由于停电导致了新的 Linux 内核的发布延误,在 5.12 合并窗口开启两周之后才发布了 5.12-rc1。为了纪念这一事件,Linus 将 5.12 版本命名为:Frozen Wasteland(冰封废土)。

这个事情反映了两个问题:一个是 Linus Torvalds 的单点故障;另一个是网络和电力等基础设施对 Linux 出乎意料的影响。

Coinbase 称中本聪现身或出售其持有比特币会导致市场不稳定

数字货币交易平台 Coinbase 上周递交了 IPO 申请,准备以直接上市的方式在纳斯达克公开上市。在申请文件中,Coinbase 列出的风险因素包括了比特币的神秘创始人中本聪。

中本聪在 2008 年发表了比特币论文,2011 年之后就不再露面。他在此期间挖掘了大约 110 万枚比特币,总价值超 300 亿美元。Coinbase 称如果中本聪的身份曝光,或转移其持有的比特币,都可能导致数字货币市场的不稳定,从而影响到 Coinbase。

为了向这位比特币创造者致敬,Coinbase 将中本聪列为其公开文件的接收人之一。

有人评价说,教众对教主的拥护都是口头的,但实际上并不欢迎教主回来。:smile:

被劫持的 Perl.com 问题解决

1 月 27 日,Perl 语言的官网之一 Perl.com 域名遭到劫持;直到 2 月 5 日问题才完全解决。Perl.com 域名是在 1990 年代初注册的,Tom Christiansen 被列为注册人,但是没有启用近年来引入的域名安全功能,如双因子认证。攻击者可能是首先通过社会工程入侵了域名服务商 Network Solutions,然后更新了域名的信息,并通过几次转移域名注册商来逃避追回。在转移到 Key Systems 之后攻击者尝试以 19 万美元拍卖 Perl.com 域名,但在媒体报道之后很快被终止。现在,Perl.com 域名已经回到了 Tom Christiansen 手中,他们加入了安全功能防止同样的事再次发生。

还好解决了,但是之所以出现这样的问题,我觉得主要还是 Perl 社区“太旧”了。

我们已经写了两篇关于 Ansible 的文章,这是第三篇。

如果你是 Ansible 新手,我建议你阅读下面这两篇文章,它会教你一些 Ansible 的基础以及它是什么。

如果你已经阅读过了,那么在阅读本文时你才不会感到突兀。

什么是 Ansible 剧本?

剧本 playbook 比点对点命令模式更强大,而且完全不同。

它使用了 /usr/bin/ansible-playbook 二进制文件,并且提供丰富的特性使得复杂的任务变得更容易。

如果你想经常运行一个任务,剧本是非常有用的。此外,如果你想在服务器组上执行多个任务,它也是非常有用的。

剧本是由 YAML 语言编写。YAML 代表一种标记语言,它比其它常见的数据格式(如 XML 或 JSON)更容易读写。

下面这张 Ansible 剧本流程图将告诉你它的详细结构。

理解 Ansible 剧本的术语

  • 控制节点 Control node :Ansible 安装的机器,它负责管理客户端节点。
  • 受控节点 Managed node :控制节点管理的主机列表。
  • 剧本 playbook :一个剧本文件包含一组自动化任务。
  • 主机清单 Inventory :这个文件包含有关管理的服务器的信息。
  • 任务 Task :每个剧本都有大量的任务。任务在指定机器上依次执行(一个主机或多个主机)。
  • 模块 Module : 模块是一个代码单元,用于从客户端节点收集信息。
  • 角色 Role :角色是根据已知文件结构自动加载一些变量文件、任务和处理程序的方法。
  • 动作 Play :每个剧本含有大量的动作,一个动作从头到尾执行一个特定的自动化。
  • 处理程序 Handler : 它可以帮助你减少在剧本中的重启任务。处理程序任务列表实际上与常规任务没有什么不同,更改由通知程序通知。如果处理程序没有收到任何通知,它将不起作用。

基本的剧本是怎样的?

下面是一个剧本的模板:

---                                [YAML 文件应该以三个破折号开头]
- name:                            [脚本描述]
  hosts: group                     [添加主机或主机组]
  become: true                     [如果你想以 root 身份运行任务,则标记它]
  tasks:                           [你想在任务下执行什么动作]
    - name:                        [输入模块选项]
      module:                      [输入要执行的模块]
        module_options-1: value    [输入模块选项]
        module_options-2: value
        .
        module_options-N: value

如何理解 Ansible 的输出

Ansible 剧本的输出有四种颜色,下面是具体含义:

  • 绿色ok 代表成功,关联的任务数据已经存在,并且已经根据需要进行了配置。
  • 黄色changed 指定的数据已经根据任务的需要更新或修改。
  • 红色FAILED 如果在执行任务时出现任何问题,它将返回一个失败消息,它可能是任何东西,你需要相应地修复它。
  • 白色:表示有多个参数。

为此,创建一个剧本目录,将它们都放在同一个地方。

$ sudo mkdir /etc/ansible/playbooks

剧本-1:在 RHEL 系统上安装 Apache Web 服务器

这个示例剧本允许你在指定的目标机器上安装 Apache Web 服务器:

$ sudo nano /etc/ansible/playbooks/apache.yml

---
- hosts: web
  become: yes
  name: "Install and Configure Apache Web server"
  tasks:
    - name: "Install Apache Web Server"
      yum:
        name: httpd
        state: latest
    - name: "Ensure Apache Web Server is Running"
      service:
        name: httpd
        state: started
$ ansible-playbook apache1.yml

如何理解 Ansible 中剧本的执行

使用以下命令来查看语法错误。如果没有发现错误,它只显示剧本文件名。如果它检测到任何错误,你将得到一个如下所示的错误,但内容可能根据你的输入文件而有所不同。

$ ansible-playbook apache1.yml --syntax-check

ERROR! Syntax Error while loading YAML.
  found a tab character that violate indentation
The error appears to be in '/etc/ansible/playbooks/apache1.yml': line 10, column 1, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
        state: latest
^ here
There appears to be a tab character at the start of the line.

YAML does not use tabs for formatting. Tabs should be replaced with spaces.
For example:
    - name: update tooling
      vars:
        version: 1.2.3
# ^--- there is a tab there.
Should be written as:
    - name: update tooling
      vars:
        version: 1.2.3
# ^--- all spaces here.

或者,你可以使用这个 URL YAML Lint 在线检查 Ansible 剧本内容。

执行以下命令进行“演练”。当你运行带有 --check 选项的剧本时,它不会对远程机器进行任何修改。相反,它会告诉你它将要做什么改变但不是真的执行。

$ ansible-playbook apache.yml --check

PLAY [Install and Configure Apache Webserver] ********************************************************************

TASK [Gathering Facts] *******************************************************************************************
ok: [node2.2g.lab]
ok: [node1.2g.lab]

TASK [Install Apache Web Server] *********************************************************************************
changed: [node2.2g.lab]
changed: [node1.2g.lab]

TASK [Ensure Apache Web Server is Running] ***********************************************************************
changed: [node1.2g.lab]
changed: [node2.2g.lab]

PLAY RECAP *******************************************************************************************************
node1.2g.lab               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node2.2g.lab               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

如果你想要知道 ansible 剧本实现的详细信息,使用 -vv 选项,它会展示如何收集这些信息。

$ ansible-playbook apache.yml --check -vv

ansible-playbook 2.9.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/daygeek/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 3.8.1 (default, Jan  8 2020, 23:09:20) [GCC 9.2.0]
Using /etc/ansible/ansible.cfg as config file

PLAYBOOK: apache.yml *****************************************************************************************************
1 plays in apache.yml

PLAY [Install and Configure Apache Webserver] ****************************************************************************

TASK [Gathering Facts] ***************************************************************************************************
task path: /etc/ansible/playbooks/apache.yml:2
ok: [node2.2g.lab]
ok: [node1.2g.lab]
META: ran handlers

TASK [Install Apache Web Server] *****************************************************************************************
task path: /etc/ansible/playbooks/apache.yml:6
changed: [node2.2g.lab] => {"changed": true, "msg": "Check mode: No changes made, but would have if not in check mod
e", "rc": 0, "results": ["Installed: httpd"]}
changed: [node1.2g.lab] => {"changed": true, "changes": {"installed": ["httpd"], "updated": []}, "msg": "", "obsolet
es": {"urw-fonts": {"dist": "noarch", "repo": "@anaconda", "version": "2.4-16.el7"}}, "rc": 0, "results": []}

TASK [Ensure Apache Web Server is Running] *******************************************************************************
task path: /etc/ansible/playbooks/apache.yml:10
changed: [node1.2g.lab] => {"changed": true, "msg": "Service httpd not found on host, assuming it will exist on full run"}
changed: [node2.2g.lab] => {"changed": true, "msg": "Service httpd not found on host, assuming it will exist on full run"}
META: ran handlers
META: ran handlers

PLAY RECAP ***************************************************************************************************************
node1.2g.lab               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node2.2g.lab               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

剧本-2:在 Ubuntu 系统上安装 Apache Web 服务器

这个示例剧本允许你在指定的目标节点上安装 Apache Web 服务器。

$ sudo nano /etc/ansible/playbooks/apache-ubuntu.yml

---
- hosts: web
  become: yes
  name: "Install and Configure Apache Web Server"
  tasks:
    - name: "Install Apache Web Server"
      yum:
        name: apache2
        state: latest

    - name: "Start the Apache Web Server"
      service:
        name: apaceh2
        state: started

    - name: "Enable mod_rewrite module"
      apache2_module:
        name: rewrite
        state: present

      notify:
      - start apache

  handlers:
    - name: "Ensure Apache Web Server is Running"
      service:
        name: apache2
        state: restarted
        enabled: yes

剧本-3:在 Red Hat 系统上安装软件包列表

这个示例剧本允许你在指定的目标节点上安装软件包。

方法-1:

$ sudo nano /etc/ansible/playbooks/packages-redhat.yml

---
- hosts: web
  become: yes
  name: "Install a List of Packages on Red Hat Based System"
  tasks:
    - name: "Installing a list of packages"
      yum:
        name:
          - curl
          - httpd
          - nano
          - htop

方法-2:

$ sudo nano /etc/ansible/playbooks/packages-redhat-1.yml

---
- hosts: web
  become: yes
  name: "Install a List of Packages on Red Hat Based System"
  tasks:
    - name: "Installing a list of packages"
      yum: name={{ item }} state=latest
      with_items:
        - curl
        - httpd
        - nano
        - htop

方法-3:使用数组变量

$ sudo nano /etc/ansible/playbooks/packages-redhat-2.yml

---
- hosts: web
  become: yes
  name: "Install a List of Packages on Red Hat Based System"
  vars:
     packages: [ 'curl', 'git', 'htop' ]
  tasks:
     - name: Install a list of packages
       yum: name={{ item }} state=latest
       with_items: "{{ packages }}"

剧本-4:在 Linux 系统上安装更新

这个示例剧本允许你在基于 Red Hat 或 Debian 的 Linux 系统上安装更新。

$ sudo nano /etc/ansible/playbooks/security-update.yml

---
- hosts: web
  become: yes
  name: "Install Security Update"
  tasks:
    - name: "Installing Security Update on Red Hat Based System"
      yum: name=* update_cache=yes security=yes state=latest
      when: ansible_facts['distribution'] == "CentOS"

    - name: "Installing Security Update on Ubuntu Based System"
      apt: upgrade=dist update_cache=yes
      when: ansible_facts['distribution'] == "Ubuntu"

via: https://www.2daygeek.com/ansible-playbooks-quick-start-guide-with-examples/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

操作系统的安装看似神秘,但其实很简单。以下是成功安装 Linux 的步骤。

 title=

在 2021 年,有更多让人们喜欢 Linux 的理由。在这个系列中,我将分享 21 种使用 Linux 的不同理由。下面是如何安装 Linux。

安装一个操作系统(OS)总是令人生畏。对大多数人来说,这是一个难题。安装操作系统不能从操作系统内部进行,因为它要么没有被安装,要么即将被另一个操作系统取代,那么它是如何发生的呢?更糟糕的是,它通常会涉及到硬盘格式、安装位置、时区、用户名、密码等一系列你通常不会想到的混乱问题。Linux 发行版知道这一点,所以它们多年来一直在努力将你在操作系统安装程序中花费的时间减少到最低限度。

安装时发生了什么

无论你安装的是一个应用程序还是整个操作系统,安装的过程只是将文件从一种媒介复制到另一种媒介的一种花哨方式。不管是什么用户界面,还是用动画将安装过程伪装成多么高度专业化的东西,最终都是一回事:曾经存储在光盘或驱动器上的文件被复制到硬盘上的特定位置。

当安装的是一个应用程序时,放置这些文件的有效位置被高度限制在你的文件系统或你的操作系统知道它可以使用的硬盘驱动器的部分。这一点很重要,因为它可以将硬盘分割成不同的空间(苹果公司在本世纪初的 Bootcamp 中使用了这一技巧,允许用户将 macOS 和 Windows 安装到一个硬盘上,但作为单独的实体)。当你安装一个操作系统时,一些特殊的文件会被安装到硬盘上通常是禁区的地方。更重要的是,至少在默认情况下,你的硬盘上的所有现有数据都会被擦除,以便为新系统腾出空间,所以创建一个备份是必要的

安装程序

从技术上讲,你实际上不需要用安装程序来安装应用程序甚至操作系统。不管你信不信,有些人通过挂载一块空白硬盘、编译代码并复制文件来手动安装 Linux。这是在一个名为 Linux From Scratch(LFS) 的项目的帮助下完成的。这个项目旨在帮助爱好者、学生和未来的操作系统设计者更多地了解计算机的工作原理以及每个组件执行的功能。这并不是安装 Linux 的推荐方法,但你会发现,在开源中,通常是这样的:如果有些事情可以做,那么就有人在做。而这也是一件好事,因为这些小众的兴趣往往会带来令人惊讶的有用的创新。

假设你不是想对 Linux 进行逆向工程,那么正常的安装方式是使用安装光盘或镜像。

3 个简单的步骤来安装 Linux

当你从一个 Linux 安装 DVD 或 U 盘启动时,你会置身于一个最小化的操作环境中,这个环境是为了运行一个或多个有用的应用程序。安装程序是最主要的应用程序,但由于 Linux 是一个如此灵活的系统,你通常也可以运行标准的桌面应用程序,以在你决定安装它之前感受一下这个操作系统是什么样子的。

不同的 Linux 发行版有不同的安装程序界面。下面是两个例子。

Fedora Linux 有一个灵活的安装程序(称为 Anaconda),能够进行复杂的系统配置:

Fedora 上的 Anaconda 安装界面

Fedora 上的 Anaconda 安装程序

Elementary OS 有一个简单的安装程序,主要是为了在个人电脑上安装而设计的:

Elementary OS 安装程序

Elementary OS 安装程序

1、获取安装程序

安装 Linux 的第一步是下载一个安装程序。你可以从你选择尝试的发行版中获得一个 Linux 安装镜像。

  • Fedora 以率先更新软件而闻名。
  • Linux Mint 提供了安装缺失驱动程序的简易选项。
  • Elementary 提供了一个美丽的桌面体验和几个特殊的、定制的应用程序。

Linux 安装程序是 .iso 文件,是 DVD 介质的“蓝图”。如果你还在使用光学介质,你可以把 .iso 文件刻录到 DVD-R 上,或者你可以把它烧录到 U 盘上(确保它是一个空的 U 盘,因为当镜像被烧录到它上时,它的所有内容都会被删除)。要将镜像烧录到 U 盘上,你可以 使用开源的 Etcher 应用程序

Etcher 用于烧录 U 盘

Etcher 应用程序可以烧录 U 盘。

现在你可以安装 Linux 了。

2、引导顺序

要在电脑上安装操作系统,你必须引导到操作系统安装程序。这对于一台电脑来说并不是常见的行为,因为很少有人这样做。理论上,你只需要安装一次操作系统,然后你就会不断更新它。当你选择在电脑上安装不同的操作系统时,你就中断了这个正常的生命周期。这不是一件坏事。这是你的电脑,所以你有权力对它进行重新规划。然而,这与电脑的默认行为不同,它的默认行为是开机后立即启动到硬盘上找到的任何操作系统。

在安装 Linux 之前,你必须备份你在目标计算机上的任何数据,因为这些数据在安装时都会被清除。

假设你已经将数据保存到了一个外部硬盘上,然后你将它秘密地存放在安全的地方(而不是连接到你的电脑上),那么你就可以继续了。

首先,将装有 Linux 安装程序的 U 盘连接到电脑上。打开电脑电源,观察屏幕上是否有一些如何中断其默认启动序列的指示。这通常是像 F2F8Esc 甚至 Del 这样的键,但根据你的主板制造商不同而不同。如果你错过了这个时间窗口,只需等待默认操作系统加载,然后重新启动并再次尝试。

当你中断启动序列时,电脑会提示你引导指令。具体来说,嵌入主板的固件需要知道该到哪个驱动器寻找可以加载的操作系统。在这种情况下,你希望计算机从包含 Linux 镜像的 U 盘启动。如何提示你这些信息取决于主板制造商。有时,它会直接问你,并配有一个菜单:

引导设备菜单

启动设备选择菜单

其他时候,你会被带入一个简陋的界面,你可以用来设置启动顺序。计算机通常默认设置为先查看内部硬盘。如果引导失败,它就会移动到 U 盘、网络驱动器或光驱。你需要告诉你的计算机先寻找一个 U 盘,这样它就会绕过自己的内部硬盘驱动器,而引导 U 盘上的 Linux 镜像。

BIOS 选择屏幕

BIOS 选择屏幕

起初,这可能会让人望而生畏,但一旦你熟悉了界面,这就是一个快速而简单的任务。一旦安装了Linux,你就不必这样做了,因为,在这之后,你会希望你的电脑再次从内部硬盘启动。这是一个很好的技巧,因为在 U 盘上使用 Linux 的关键原因,是在安装前测试计算机的 Linux 兼容性,以及无论涉及什么操作系统的一般性故障排除。

一旦你选择了你的 U 盘作为引导设备,保存你的设置,让电脑复位,然后启动到 Linux 镜像。

3、安装 Linux

一旦你启动进入 Linux 安装程序,就只需通过提示进行操作。

Fedora 安装程序 Anaconda 为你提供了一个“菜单”,上面有你在安装前可以自定义的所有事项。大多数设置为合理的默认值,可能不需要你的互动,但有些则用警示符号标记,表示不能安全地猜测出你的配置,因此需要设置。这些配置包括你想安装操作系统的硬盘位置,以及你想为账户使用的用户名。在你解决这些问题之前,你不能继续进行安装。

对于硬盘的位置,你必须知道你要擦除哪个硬盘,然后用你选择的 Linux 发行版重新写入。对于只有一个硬盘的笔记本来说,这可能是一个显而易见的选择。

选择安装驱动器的屏幕

选择要安装操作系统的硬盘(本例中只有一个硬盘)。

如果你的电脑里有不止一个硬盘,而你只想在其中一个硬盘上安装 Linux,或者你想把两个硬盘当作一个硬盘,那么你必须帮助安装程序了解你的目标。最简单的方法是只给 Linux 分配一个硬盘,让安装程序执行自动分区和格式化,但对于高级用户来说,还有很多其他的选择。

你的电脑必须至少有一个用户,所以要为自己创建一个用户账户。完成后,你可以最后点击 Done 按钮,安装 Linux。

Anaconda 选项完成并准备安装

Anaconda 选项已经完成,可以安装了

其他的安装程序可能会更简单,所以你看到的可能与本文中的图片不同。无论怎样,除了预装的操作系统之外,这个安装过程都是最简单的操作系统安装过程之一,所以不要让安装操作系统的想法吓到你。这是你的电脑。你可以、也应该安装一个你拥有所有权的操作系统。

拥有你的电脑

最终,Linux 成为了你的操作系统。它是一个由来自世界各地的人们开发的操作系统,其核心是一个:创造一种参与、共同拥有、合作管理的计算文化。如果你有兴趣更好地了解开源,那么就请你迈出一步,了解它的一个光辉典范 Linux,并安装它。


via: https://opensource.com/article/21/2/linux-installation

作者:Seth Kenlon 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

谷歌利用 AI 优化 AI 芯片架构的设计

报道,本月谷歌发表的一篇论文披露了被称为“第一个可转移的架构探索基础设施” Apollo,这是第一个在不同芯片上工作得越多,就越能更好地探索可能的芯片架构的程序,从而将所学到的知识转移到每个新的任务中。

团队正在开发的芯片本身就是用于人工智能的芯片,因此,这是用 AI 来设计运行 AI 的芯片。在 Apollo 中,将为神经网络和生物合成设计的方法汇集在一起,设计出可能反过来用于神经网络和生物合成设计的电路。

我觉得这就非常神奇,但是我也觉得有点可怕了。

Linux Mint 开发者称可能像 Windows 一样对用户操作系统进行强制更新

之前我们报道过,大约只有 30% 的 Linux Mint 用户在一周内应用了更新。而现在,Linux Mint 开发者似乎正在借鉴微软的做法,计划强制用户进行一些更新。Linux Mint 称,“我们开始对更新管理器进行改进……在某些情况下,更新管理器将能够提醒用户应该进行应用更新。在少数情况下,它甚至可能会显得‘固执己见’”,当然,这种强制性是可配置的,毕竟这是用户的电脑。当然,如何执行还在讨论当中。

所以,微软强制更新 Windows 的策略是对的吗?

谷歌发布了一个 Windows 10 远程代码执行漏洞的概念证明代码

只要访问一个网页就可以利用这个漏洞。这个问题是 Windows 字体渲染器中的一个漏洞。该渲染器也是所有浏览器都会使用的,它容易被特制的 TrueType 字体破坏,从而导致其内存损坏和崩溃,然后可以用来运行内核权限的代码。不过该漏洞已经在 Windows 10 的 2 月累积更新中得到了修复。

远程漏洞是最严重的,尤其这还是一个基于网页就可以进行的攻击。结合上一条,有时候有些补丁真是得强制?