2021年9月

容器镜像包含一个打包的应用,以及它的依赖关系,还有它在启动时运行的进程信息。

 title=

容器是当今 IT 运维的一个关键部分。 容器镜像 container image 包含了一个打包的应用,以及它的依赖关系,还有它在启动时运行的进程信息。

你可以通过提供一组特殊格式的指令来创建容器镜像,可以是提交给 注册中心 Registry ,或者是作为 Dockerfile 保存。例如,这个 Dockerfile 为 PHP Web 应用创建了一个容器:

FROM registry.access.redhat.com/ubi8/ubi:8.1

RUN yum --disableplugin=subscription-manager -y module enable php:7.3 \
  && yum --disableplugin=subscription-manager -y install httpd php \
  && yum --disableplugin=subscription-manager clean all

ADD index.php /var/www/html

RUN sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf \
  && sed -i 's/listen.acl_users = apache,nginx/listen.acl_users =/' /etc/php-fpm.d/www.conf \
  && mkdir /run/php-fpm \
  && chgrp -R 0 /var/log/httpd /var/run/httpd /run/php-fpm \
  && chmod -R g=u /var/log/httpd /var/run/httpd /run/php-fpm

EXPOSE 8080
USER 1001
CMD php-fpm & httpd -D FOREGROUND

这个文件中的每条指令都会在容器镜像中增加一个 layer 。每一层只增加与下面一层的区别,然后,所有这些堆叠在一起,形成一个只读的容器镜像。

它是如何工作的?

你需要知道一些关于容器镜像的事情,按照这个顺序理解这些概念很重要:

  1. 联合文件系统
  2. 写入时复制(COW)
  3. 叠加文件系统
  4. 快照器

联合文件系统

联合文件系统 Union File System (UnionFS)内置于 Linux 内核中,它允许将一个文件系统的内容与另一个文件系统的内容合并,同时保持“物理”内容的分离。其结果是一个统一的文件系统,即使数据实际上是以分支形式组织。

这里的想法是,如果你有多个镜像有一些相同的数据,不是让这些数据再次复制过来,而是通过使用一个叫做 layer 的东西来共享。

 title=

每一层都是一个可以在多个容器中共享的文件系统,例如,httpd 基础层是 Apache 的官方镜像,可以在任何数量的容器中使用。想象一下,由于我们在所有的容器中使用相同的基础层,我们节省了多少磁盘空间。

这些镜像层总是只读的,但是当我们用这个镜像创建一个新的容器时,我们会在它上面添加一个薄的可写层。这个可写层是你创建、修改、删除或进行每个容器所需的其他修改的地方。

写时复制(COW)

当你启动一个容器时,看起来好像这个容器有自己的整个文件系统。这意味着你在系统中运行的每个容器都需要自己的文件系统副本。这岂不是要占用大量的磁盘空间,而且还要花费大量的时间让容器启动?不是的,因为每个容器都不需要它自己的文件系统副本!

容器和镜像使用 写时复制 copy-on-write (COW)机制来实现这一点。写时复制策略不是复制文件,而是将同一个数据实例分享给多个进程,并且只在一个进程需要修改或写入数据时进行复制。所有其他进程将继续使用原始数据。

Docker 对镜像和容器都使用了写时复制的机制。为了做到这一点,在旧版本中,镜像和运行中的容器之间的变化是通过 图驱动 graph driver 来跟踪的,现在则是通过 快照器 snapshotter 来跟踪。

在运行中的容器中执行任何写操作之前,要修改的文件的副本被放在容器的可写层上。这就是发生 的地方。现在你知道为什么它被称为“写时复制”了么。

这种策略既优化了镜像磁盘空间的使用,也优化了容器启动时间的性能,并与 UnionFS 一起工作。

叠加文件系统

叠加文件系统 Overlay File System 位于现有文件系统的顶部,结合了上层和下层的目录树,并将它们作为一个单一的目录来呈现。这些目录被称为 layer 。下层保持不被修改。每一层只增加与下一层的差异(计算机术语为 “diff”),这种统一的过程被称为 联合挂载 union mount

最低的目录或镜像层被称为 下层目录 lowerdir ,上面的目录被称为 上层目录 upperdir 。最后的覆盖层或统一层被称为 合并层 merged

 title=

常见的术语包括这些层的定义:

  • 基础层 Base layer :是你的文件系统的文件所在的地方。就容器镜像而言,这个层就是你的基础镜像。
  • 叠加层 Overlay layer :通常被称为 容器层 container layer ,因为对运行中的容器所做的所有改变,如添加、删除或修改文件,都会写到这个可写层。对这一层所做的所有修改都存储在下一层,是基础层和差异层的联合视图。
  • 差异层 Diff layer 包含了在叠加层所作的所有修改。如果你写的东西已经在基础层了,那么叠加文件系统就会把文件复制到差异层,并做出你想写的修改。这被称为写时复制。

快照器

通过使用层和图驱动,容器可以将其更改作为其容器文件系统的一部分来构建、管理和分发。但是使用 图驱动 graph driver 的工作真的很复杂,而且容易出错。 快照器 SnapShotter 与图驱动不同,因为它们不用了解镜像或容器。

快照器的工作方式与 Git 非常相似,比如有树的概念,并跟踪每次提交对树的改变。一个 快照 snapshot 代表一个文件系统状态。快照有父子关系,使用一组目录。可以在父级和其快照之间进行差异比较(diff),以创建一个层。

快照器提供了一个用于分配、快照和挂载抽象的分层文件系统的 API。

总结

你现在对什么是容器镜像以及它们的分层方法如何使容器可移植有了很好的认识。接下来,我将介绍容器的运行机制和内部结构。

本文基于 techbeatly 的文章,经许可后改编。


via: https://opensource.com/article/21/8/container-image

作者:Nived V 选题:lujun9972 译者:geekpi 校对:wxy

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

为了增强团队动力,开放式领导可以研究指导成员行为和决策的隐性社会规范。

 title=

文化在 开放式组织 很重要。但“文化”似乎是一个如此庞大而复杂的概念。我们该如何帮助开放式组织去理解它呢?

一个解决方案可能来自于《Rule Makers, Rule Breakers》的作者 Michele J. Gelfand:紧密和松散的文化以及指导我们生活的秘密信号。Gelfand 把所有的国家和文化分成简单的两类:一类是“紧密的”文化,另一类是“松散的”。然后,她解释了两者的特点和社会规范,提供了它们的相对优势和劣势。通过研究两者,我们可以克服团队、组织和国家之间的分歧和冲突。

在这个分为两篇的《Rule Makers, Rule Breakers》的点评中, 我将解释 Gelfand 的论点,并讨论它对在开放性组织中工作的人们有用的方式。

了解你的社会规范

Gelfand 认为,我们的行为很大程度上取决于我们是生活在“紧密的”还是“松散的”社区文化中,因为每一种文化都有不同于其他文化的社会规范。这些规范 ——— 以及强制执行的严格程度 ——— 将决定我们在社会中的行为。它们给了我们身份,它们帮助我们彼此协调。简而言之,这些价值使社区团结在一起。

它们也会影响我们的世界观,影响我们构造环境的方式,甚至影响我们大脑的处理过程。 Gelfand 写道:“无数研究表明,社会规范对于将社区团结成合作、协调良好的团体,从而实现伟大成就至关重要。” 纵观历史,社区让其公民参加看似最疯狂的仪式,除了维持群体凝聚力和合作外,别无其他原因。 这些仪式产生了更紧密的联系,使人们得以生存(特别是在狩猎、觅食和战争时期)。

社会规范包括我们所有人都会自动遵守的规则, Gelfand 称之为一种 “规范性自动驾驶仪”。 这些是我们不需要思考就能做的事情————例如,在图书馆、电影院、电梯或飞机上保持安静。 我们会自动的做这些事。 “从表面看,” Gelfand 说, “我们的社会规范通常看起来很奇怪。但在内心深处,我们认为这是理所当然的。” 她解释到,社会规范可以被编入法规和法律(“遵守停车标志”和“不要偷窃”)。还有一些基本上是不言而喻的(“不要盯着火车上的人看”或“打喷嚏时捂住嘴”)。当然,它们因环境而异。

挑战在于大多数社会规范都是无形的,我们不知道这些社会规范在多大程度上控制着我们。在不知不觉中,我们常常只是跟随周围的人群。这被称为“群体思维”,在这种思维中,人们会跟随他们认同的群体,即使这个群体是错误的。他们不想站出来。

组织,有松有紧

Gelfand 将社会规范组织成不同的组别。她认为,一些规范具有“紧密”文化的特征,而另一些规范则具有“松散”文化的特征。为此, Gelfand 对来自五大洲 30 多个国家的约 7000 人进行了研究和抽样,他们具有广泛的职业、性别、年龄、宗教、教派,以及社会阶层,以了解这些社区将自己定位在何处(以及他们的社会规范在官方和社区/社区总体上的执行力度)。 紧密和松散文化之间的差异在国家之间、国家内部(如美国及其各个地区)、组织内部、社会阶层内部甚至家庭内部都有所不同。

因为组织有文化,它们也有自己的社会规范(毕竟,如果一个组织无法协调其成员并影响其行为,它将无法存在)。 因此,组织也可以反映和灌输 Gelfand 所描述的“紧密”或“松散”的文化特征。 并且如果我们有很强的能力识别这些差异,我们就能更成功地预测和解决冲突。然后,在对这些社会规范有了更高认识的情况下,我们可以将开放式组织原则付诸实践。

Gelfand 这样描述紧密和松散文化的区别:

从广义上讲,松散的文化倾向于开放,但它们也更加无序。另一方面,紧密的文化有令人欣慰的秩序和可预测性,但它们的容忍度较低。这就是紧与松的权衡:一个领域的优势与另一个领域的劣势并存。

她总结说,紧密的社会保持着严格的社会秩序、同步性和自律性;宽松的社会以高度宽容、富有创造力和对变化持开放态度而自豪。

虽然并非所有情况都是如此,但紧密和松散的文化通常会表现出一些权衡;每个人都有自己的长处和短处。参见下面的图 1 。

在这两种环境中成功应用五项开放式组织原则的工作可能会有很大的不同。要取得成功,社区承诺至关重要,如果社会规范不同,承诺的理由也会不同。组织领导者必须知道社区的价值观是什么。只有这样,这个人才能充分激励他人。

在本点评的下一部分中,我将更彻底地解释紧密文化和松散文化的特征,以便领导者能够更好地了解如何将开放式组织原则运用到团队中。


via: https://opensource.com/open-organization/21/8/leadership-cultural-social-norms

作者:Ron McFarland 选题:lujun9972 译者:zz-air 校对:wxy

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

Firefox 92 发布

Mozilla 释出了 Firefox 92。主要新特性包括:使用 HTTPS DNS 记录自动升级到 HTTPS,如果一个域名支持 HTTPS 那么在浏览器上输入该域名的 HTTP 地址将会自动升级到 HTTPS;添加了对 AVIF 图像格式的默认支持;全域色彩级支持视频播放;此外还有 bug 和安全修正等等。

其实这些都不重要,重要的是,如何挽回老用户的心。

OpenSSL 3.0 正式发布

经过许多开发快照和三年的工作,OpenSSL 发布了 3.0。OpenSSL 3.0 从之前的 OpenSSL 和 SSLeay 双许可证转为在 Apache 2.0 许可证下发布。与之前的 OpenSSL 1.1 相比,OpenSSL 3.0 具有更大的可扩展性,对陈旧代码进行了清理和废弃以及架构上的改进。它迁移到一个基于提供者的架构,支持 Linux 内核的 TLS、完全“可插拔”的 TLSv1.3 组。

OpenSSL 的上古代码终于迎来了新的更新。

ATM 机加速退场,一年淘汰 6.54 万台

短短几年,ATM 机已经从“银行业最有用的发明”逐渐没落。根据央行数据显示,截至 2021 年二季度末,ATM 机具 98.67 万台,相较同期的 105.21 万台一年减少了 6.54 万台。全国 ATM 机数量高峰时期在 2018 年末达 111.08 万台。而从 2019 年开始,ATM 数量开始缩水。

信息化带来的影响,可能现在很多人都不带钱包、现金了吧。

OpenWrt 社区宣布了该发行版的最新稳定版本:OpenWrt 21.02。

补充一句,OpenWrt 是一个帮助你创建嵌入式设备定制操作系统的项目。

它使用户能够根据他们的网络需求公开定制他们的设备,这是市面上销售的路由器的固件所没有的功能。除了路由器之外,OpenWrt 还可以在各种设备上运行,如智能手机、住宅网关,甚至是 32 位的个人电脑。

自从旧的 OpenWrt 19.07 以来,这个版本的发布带来了超过 5800 个新提交。

让我们来看看 OpenWrt 21.02 有哪些新功能。

OpenWrt 21.02 有什么新内容?

虽然有一些技术上的变化和改进,但让我强调一下主要的新增内容。

WPA3 支持

虽然在 19.07 版本中就已经存在,但这个最新的 Wi-Fi 网络安全标准现在已默认包含在镜像中了。

WPA3 的意思是 Wi-Fi 受保护接入第三版 Wi-Fi Protected Access 3 ,与流行的 WPA2 相比,在安全方面有很大的改进,也向后兼容。

TLS 和 HTTPS 支持

就像 WPA3 一样,它也默认包括了 TLS 和 HTTPS 支持,并且带有来自 Mozilla 的可信 CA 证书。

有了这个支持,无需其它工作,wgetopkg 现在可以通过 HTTPS 获取资源了。此外,除了 HTTP 之外,LuCl 也可以通过 HTTPS 获得。

初步的 DSA 支持

正如其发布公告中所说:

“DSA( 分布式交换机架构 Distributed Switch Architecture )是关于可配置的以太网交换机的 Linux 标准。”

这取代了直到现在还在使用的 swconfig 系统,是对 VLAN 和交换机端口管理方式的一个明显变化。

新的最低硬件要求

随着 OpenWrt 的众多新功能和更新,以及 Linux 内核的大小的普遍增加,其最低硬件要求也被提高。

现在设备需要至少 8MB 的闪存和 64MB 的内存来运行默认的构建版本,以确保适当的稳定性。

软件包更新

该版本还包含了几个软件包的升级,其中一些是:

  • Linux 内核 5.4.143
  • gcc 8.4.0
  • glibc 2.33
  • binutils 2.34
  • busybox 1.33.1

除了上述列出的软件包,还有许多其他软件包也得到了升级。你可以在 官方发布公告 中了解完整的技术细节。

下载 OpenWrt 21.02

你可以前往其官方网站下载最新的稳定版,或者选择开发快照进行实验。

构建自己的软件包和固件的说明应该可以在其文档中找到。

可以使用 sysupgrade 命令将你的系统从 OpenWrt 19.07 升级到 OpenWrt 21.02。请注意,你无法从 18.06 升级。


via: https://news.itsfoss.com/openwrt-21-02-release/

作者:Rishabh Moharir 选题:lujun9972 译者:wxy 校对:wxy

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

使用 ncurses 的灵活性和强大功能在 Linux 上创建一个猜数字游戏。

 title=

在我的 上一篇文章,我简要介绍了使用 ncurses 库通过 C 语言编写文本模式交互式应用程序。使用 ncurses,我们可以控制文本在终端上的显示位置和方式。如果你通过阅读手册页探索 ncurses 库函数,你会发现显示文本有很多不同的方式,包括粗体文本、颜色、闪烁文本、窗口、边框、图形字符和其它功能,这些都可以使你的应用脱颖而出。

如果你想探索一个更高级的程序来演示其中一些有趣的功能,有一个简单的“猜数字”游戏,我已更新为使用 ncurses 编写的了。该程序在一个范围内选择一个随机数,然后要求用户进行重复猜测,直到他们猜到这个秘密数字。当用户进行猜测时,程序会告知他们猜测的数字是太低还是太高。

请注意,程序限定可能的数字范围是 0 到 7。将值保持在有限的个位数数字范围内,可以更轻松的使用 getch() 函数从用户读取单个数字。我还使用了 getrandom 内核系统调用来生成随机数,设定数字最大值为 7,以从 0 (二进制 0000)到 7 (二进制 0111)中选择一个随机数。

#include <curses.h>;
#include <string.h>;          /* for strlen */
#include <sys/random.h>;      /* for getrandom */

int
random0_7()
{
   int num;
   getrandom(&num, sizeof(int), GRND_NONBLOCK);
   return (num & 7); /* from 0000 to 0111 */
}

int
read_guess()
{
  int ch;

  do {
    ch = getch();
  } while ((ch < '0') || (ch > '7'));

  return (ch - '0'); /* turn into a number */
}

通过使用 ncurses,我们可以增加一些有趣的视觉体验。通过添加函数,我们可以在屏幕顶部显示重要的文本信息,在屏幕底部显示状态消息行:

void
print_header(const char *text)
{
  move(0, 0);
  clrtoeol();

  attron(A_BOLD);
  mvaddstr(0, (COLS / 2) - (strlen(text) / 2), text);
  attroff(A_BOLD);
  refresh();
}

void
print_status(const char *text)
{
  move(LINES - 1, 0);
  clrtoeol();
 
  attron(A_REVERSE);
  mvaddstr(LINES - 1, 0, text);
  attroff(A_REVERSE);
  refresh();
}

通过这些函数,我们就可以构建猜数字游戏的主要部分。首先,程序为 ncurses 设置终端,然后从 0 到 7 中选择一个随机数。显示数字刻度后,程序启动一个循环,询问用户的猜测。

当用户进行猜测时,程序会在屏幕上提供反馈。如果猜测太低,程序会在屏幕上的数字下方打印一个左方括号。如果猜测太高,程序会在屏幕上的数字下方打印一个右方括号。这有助于用户缩小他们的选择范围,直到他们猜出正确的数字。

int
main()
{
  int number, guess;

  initscr();
  cbreak();
  noecho();

  number = random0_7();
  mvprintw(1, COLS - 1, "%d", number); /* debugging */

  print_header("Guess the number 0-7");

  mvaddstr(9, (COLS / 2) - 7, "0 1 2 3 4 5 6 7");

  print_status("Make a guess...");

  do {
    guess = read_guess();

    move(10, (COLS / 2) - 7 + (guess * 2));

    if (guess < number) {
      addch('[');
      print_status("Too low");
    }

    else if (guess > number) {
      addch(']');
      print_status("Too high");
    }

    else {
      addch('^');
    }
  } while (guess != number);

  print_header("That's right!");
  print_status("Press any key to quit");
  getch();

  endwin();

  return 0;
}

复制这个程序,自己尝试编译它。不要忘记你需要告诉 GCC 编译器链接到 ncurses 库:

$ gcc -o guess guess.c -lncurses

我留下了一个调试行,所以你可以看到屏幕右上角附近的秘密数字:

guess number game interface

图1:猜数字游戏。注意右上角的秘密数字。

开始使用 ncurses

该程序使用了 ncurses 的许多其它函数,你可以从这些函数开始。例如,print_header 函数在屏幕顶部居中以粗体文本打印消息,print_status 函数在屏幕左下角以反向文本打印消息。使用它来帮助你开始使用 ncurses 编程。


via: https://opensource.com/article/21/8/guess-number-game-ncurses-linux

作者:Jim Hall 选题:lujun9972 译者:perfiffer 校对:wxy

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

图像编辑器是许多人喜欢和需要的应用程序,从专业的设计师、学生,或那些有某些爱好的人。特别是在这个数字时代,越来越多的人因为各种原因需要图像编辑器。本文将介绍一些你可以在 Fedora Linux 上使用的开源图像编辑器。你可能需要安装提到的软件。如果你不熟悉如何在 Fedora Linux 中添加软件包,请参阅我之前的文章 安装 Fedora 34 工作站后要做的事情。这里列出了图像编辑器类的一些日常需求的应用程序。

GIMP

GIMP( GNU 图像处理程序 GNU Image Manipulation Program )是一个光栅图像(位图)编辑器,用于照片修饰、图像合成和图像创作。它的功能几乎与 Adobe Photoshop 相同。你可以用 GIMP 做很多你可以用 Photoshop 做的事情。正因为如此,GIMP 作为 Adobe Photoshop 的开源替代品,已经成为最受欢迎的应用程序。

GIMP 有很多图像处理的功能,特别是针对光栅图像。你可以用 GIMP 修复或改变照片的颜色。你可以选择图像的一部分,裁剪它,然后与图像的其他部分合并。GIMP 还有许多你可以应用于你的图像的效果,包括模糊、阴影、噪音等等。许多人用 GIMP 来修复损坏的照片,提高图像质量,裁剪图像中不需要的部分,制作海报和各种图形设计作品,等等。此外,你还可以在 GIMP 中添加插件和脚本,使其功能更加全面。

更多信息请见此链接:: https://www.gimp.org/

Inkscape

Inkscape 是一个流行的开源应用程序,用于创建和编辑矢量图。它是一个功能丰富的矢量图形编辑器,这使它可以与其他类似的专有应用程序(如 Adobe Illustrator 和 Corel Draw)相竞争。正因为如此,许多专业插画师使用它来创建基于矢量的艺术作品。

你可以用 Inkscape 制作艺术和技术插图,如标志、图表、图标、桌面壁纸、流程图、漫画等等。此外,Inkscape 可以处理各种图形文件格式。此外,你还可以添加附加组件,使你的工作更容易。

更多信息请见此链接: https://inkscape.org/

Krita

Krita 乍一看像 GIMP 或 Inkscape。但实际上,它是一个完全不同的应用程序,尽管它有一些类似的功能。Krita 是一款用于创作像艺术家那样的数字绘画的应用程序。你可以用 Krita 来制作概念艺术、插图、漫画、纹理和哑光画。

Krita 有 100 多个预装的专业画笔。它还有一个画笔稳定器功能,有 3 种不同的方式来平滑和稳定你的画笔笔触。此外,你可以用 9 种以上的独特画笔引擎来定制你的画笔。Krita 是那些喜欢进行数字绘画的人的合适应用。

更多信息可在此链接获得:https://krita.org/en/

darktable

darktable 是摄影师或那些想提高照片质量的人的完美选择。darktable 更侧重于图像编辑,特别是对 RAW 图像的非破坏性后期制作。因此,它提供专业的色彩管理,支持自动检测显示配置文件。此外,你还可以用 darktable 过滤和排序多张图片。所以你可以通过标签、评级、颜色标签等来搜索你的收藏。它可以导入各种图像格式,如 JPEG、CR2、NEF、HDR、PFM、RAF 等。

更多信息可在此链接中获得:https://www.darktable.org/

总结

这篇文章介绍了四个图像编辑器,你可以在 Fedora Linux 上使用它们满足你日常需求。每个应用程序都代表了图像编辑器应用程序的一个子类别。实际上,还有许多其他的图像编辑器可以在 Fedora Linux 上使用。你也可以使用 RawTherapee 或 Photivo 作为 dartkable 替代品。此外,还有 Pinta 作为 GIMP 的替代品,以及 MyPaint 作为 Krita 的替代品。希望这篇文章能帮助你选择正确的图像编辑器。如果你有使用这些应用程序的经验,请在评论中分享你的经验。


via: https://fedoramagazine.org/apps-for-daily-needs-part-3-image-editors/

作者:Arman Arisman 选题:lujun9972 译者:wxy 校对:wxy

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