2020年7月

了解了云行业的标准,该向你的家庭实验室自动添加新设备和用户了。

Cloud-init(可以说)是一个标准,云提供商用它来为云实例提供初始化和配置数据。它最常用于新实例的首次启动,以自动完成网络设置、账户创建和 SSH 密钥安装等使新系统上线所需的任何事情,以便用户可以访问它。

在之前的一篇文章《修改磁盘镜像来创建基于树莓派的家庭实验室》中,我展示了如何为像树莓派这样的单板计算机定制操作系统镜像以实现类似的目标。有了 Cloud-init,就不需要向镜像中添加自定义数据。一旦在镜像中启用了它,你的虚拟机、物理服务器,甚至是小小的树莓派都可以表现得像你自己的 “家庭私有云” 中的云计算实例。新机器只需插入、打开,就可以自动成为你的家庭实验室的一部分。

说实话,Cloud-init 的设计并没有考虑到家庭实验室。正如我所提到的,你可以很容易地修改给定的一套系统磁盘镜像,以启用 SSH 访问并在第一次启动后对它们进行配置。Cloud-init 是为大规模的云提供商设计的,这些提供商需要容纳许多客户,维护一组小的镜像,并为这些客户提供访问实例的机制,而无需为每个客户定制一个镜像。拥有单个管理员的家庭实验室则不会面临同样的挑战。

不过,Cloud-init 在家庭实验室中也不是没有可取之处。教育是我的家庭私有云项目的目标之一,而为你的家庭实验室设置 Cloud-init 是一个很好的方式,可以获得大大小小的云提供商大量使用的技术的经验。Cloud-init 也是其他初始配置选项的替代方案之一。与其为家庭实验室中的每台设备定制每个镜像、ISO 等,并在你要进行更改时面临繁琐的更新,不如直接启用 Cloud-init。这减少了技术债务 —— 还有什么比个人技术债务更糟糕的吗?最后,在你的家庭实验室中使用 Cloud-init 可以让你的私有云实例与你拥有的或将来可能拥有的任何公有云实例表现相同 —— 这是真正的混合云

关于 Cloud-init

当为 Cloud-init 配置的实例启动并且服务开始运行时(实际上是 systemd 中的四个服务,以处理启动过程中的依赖关系),它会检查其配置中的数据源,以确定其运行在什么类型的云中。每个主要的云提供商都有一个数据源配置,告诉实例在哪里以及如何检索配置信息。然后,实例使用数据源信息检索云提供商提供的配置信息(如网络信息和实例识别信息)和客户提供的配置数据(如要复制的授权密钥、要创建的用户账户以及许多其他可能的任务)。

检索数据后,Cloud-init 再对实例进行配置:设置网络、复制授权密钥等,最后完成启动过程。然后,远程用户就可以访问它,准备好使用 AnsiblePuppet 等工具进行进一步的配置,或者准备好接收工作负载并开始分配任务。

配置数据

如上所述,Cloud-init 使用的配置数据来自两个潜在来源:云提供商和实例用户。在家庭实验室中,你扮演着这两种角色:作为云提供商提供网络和实例信息,作为用户提供配置信息。

云提供商元数据文件

在你的云提供商角色中,你的家庭实验室数据源将为你的私有云实例提供一个元数据文件。这个元数据文件包含实例 ID、云类型、Python 版本(Cloud-init 用 Python 编写并使用 Python)或要分配给主机的 SSH 公钥等信息。如果你不使用 DHCP(或 Cloud-init 支持的其他机制,如镜像中的配置文件或内核参数),元数据文件还可能包含网络信息。

用户提供的用户数据文件

Cloud-init 的真正价值在于用户数据文件。用户数据文件由用户提供给云提供商,并包含在数据源中,它将实例从一台普通的机器变成了用户舰队的一员。用户数据文件可以以可执行脚本的形式出现,与正常情况下脚本的工作方式相同;也可以以云服务配置 YAML 文件的形式出现,利用 Cloud-init 的模块 来执行配置任务。

数据源

数据源是由云提供商提供的服务,它为实例提供了元数据和用户数据文件。实例镜像或 ISO 被配置为告知实例正在使用什么数据源。

例如,亚马逊 AWS 提供了一个 link-local 文件,它将用实例的自定义数据来响应实例的 HTTP 请求。其他云提供商也有自己的机制。幸运的是,对于家庭私有云项目来说,也有 NoCloud 数据源。

NoCloud 数据源允许通过内核命令以键值对的形式提供配置信息,或通过挂载的 ISO 文件系统以用户数据和元数据文件的形式提供。这些对于虚拟机来说很有用,尤其是与自动化搭配来创建虚拟机。

还有一个 NoCloudNet 数据源,它的行为类似于 AWS EC2 数据源,提供一个 IP 地址或 DNS 名称,通过 HTTP 从这里检索用户数据和元数据。这对于你的家庭实验室中的物理机器来说是最有帮助的,比如树莓派、NUC 或多余的服务器设备。虽然 NoCloud 可以工作,但它需要更多的人工关注 —— 这是云实例的反模式。

家庭实验室的 Cloud-init

我希望这能让你了解到 Cloud-init 是什么,以及它对你的家庭实验室有何帮助。它是一个令人难以置信的工具,被主要的云提供商所接受,在家里使用它可以是为了教育和乐趣,并帮助你自动向实验室添加新的物理或虚拟服务器。之后的文章将详细介绍如何创建简单的静态和更复杂的动态 Cloud-init 服务,并指导你将它们纳入你的家庭私有云。


via: https://opensource.com/article/20/5/cloud-init-raspberry-pi-homelab

作者:Chris Collins 选题:lujun9972 译者:wxy 校对:wxy

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

Redis 作者辞去 Redis 项目的领导者和维护者职务

Redis 作者 antirez 选择将 Redis 交给 Redis 社区打理,并邀请到了两位同事 Yossi Gottlieb 和 Oran Agra 继续维护 Redis 项目。而他将成为 Redis Labs 顾问委员会的一员,会为 Redis 的更多发展可能性输出自己的想法。antirez 说到,从本质上来讲,他宁愿以一个糟糕的艺术家身份而不是一名好程序员而被人记住。

来源:开源中国

拍一拍:更早之前,Python 之父已经潇洒地放下了 Python “仁慈独裁者”的身份。开源软件领袖也会老去,也会厌倦将一生都投入到一件看起来要做一辈子的事情当中。前两天 Linus 也表达了内核维护工作让他感到“无聊”,感慨内核社区的核心成员五十岁以下的年轻人比较少,而“年轻”一些的人还不能接过整个社区的管理。

KDE 社区迁移至 Gitlab

2019 年 11 月,KDE 社区宣布计划迁移至 Gitlab。目前,它已正式完成迁移计划的第一阶段,并加入了 GitLab 的开源计划。KDE 社区共同创建和维护了 200 多个应用程序和不计其数的插件,还包括 1000 多个存储库、80 多个 Qt 框架,以及超过 2600 个项目。在迁移过程中,KDE 面临的最大挑战是要处理的巨大数据量,以及如何将其集成到众多工具中。

来源:开源中国

拍一拍:这是一个艰巨的任务,而且看起来 GitLab 似乎比 GitHub 更自由一些。

GnuCash 4.0 释出

GNU 财务软件项目 GnuCash 在邮件列表上宣布释出最新的 GnuCash 4.0。新版引入了一个独立的可执行文件 gnucash-cli,用于命令行操作如更新账簿中的价格。

来源:solidot

选择的这些工具将简化你的 Python 环境,以实现顺畅和一致的开发实践。

Python 是一门出色的通用编程语言,经常作为第一门编程语言来教授。二十年来,我为它撰写了很多本书,而它仍然是我的首选语言。虽然通常来说这门语言是简洁明了的,但是(正如 xkcd 讽刺的),从来没有人说过配置 Python 环境也是一样的简单。

 title=

一个复杂的Python环境。 xkcd

在日常生活中有很多使用 Python 的方法。我将解释我是如何使用这些 Python 生态系统工具的。但坦诚的说,我仍在寻找更好的替代品。

使用 pyenv 来管理 Python 版本

我发现在机器上运行一个特定版本的 Python 的最好方法是使用 pyenv。这个软件可以在 Linux、Mac OS X 和 WSL2 上工作:这是我通常关心的三个 “类 UNIX” 环境。

安装 pyenv 本身有时会有点棘手。一种方法是使用专用的 pyenv 安装程序,它使用 curl | bash 方法来进行(详见其说明)。

如果你是在 Mac 上(或者你运行 Homebrew 的其他系统),你可以按照这里的说明来安装和使用 pyenv

按照说明安装和设置了 pyenv 之后,你可以使用 pyenv global 来设置一个 “默认的” Python 版本。一般来说,你会选择你的 “首选” 版本。这通常是最新的稳定版本,但如果有其他考虑因素也可能做出不同的选择。

使用 virtualenvwrapper 让虚拟环境更简单

使用 pyenv 安装 Python 的一个好处是,你所有后继安装的 Python 解释器环境都是你自己的,而不是操作系统层面的。

虽然在 Python 本身内部安装东西通常不是最好的选择,但有一个例外:在上面选择的 “首选” Python 中,安装并配置 virtualenvwrapper。这样你就可以瞬间创建和切换到虚拟环境。

我在这篇文章中具体介绍了如何安装和使用 virtualenvwrapper

这里我推荐一个独特的工作流程:你可以制作一个可以大量重复运行的虚拟环境,用来做 运行器 runner 。在这个环境中,可以安装你最喜欢的运行器 —— 也就是你会经常用来运行其他软件的软件。就目前而言,我的首选是 tox

使用 tox 作为 Python 运行器

tox 是一个很好的工具,可以让你的 Python 测试自动化。在每个 Python 环境中,我都会创建一个 tox.ini 文件。无论我使用什么系统做持续集成,都可以运行它,我可以用上面文章中描述的 virtualenvwrapperworkon 语法在本地运行同样的东西:

$ workon runner
$ tox

这个工作流程之所以重要,是因为我要在多个版本的 Python 和多个版本的依赖库中测试我的代码。这意味着在 tox 运行器中会有多个环境。一些会尝试在最新的依赖关系中运行,一些会尝试在冻结的依赖关系中运行(接下来会有更多的介绍),我也可能会用 pip-compile 在本地生成这些环境。

附注:我目前正在研究使用 nox 作为 tox 的替代品。原因超出了本文的范畴,但值得一试。

使用 pip-compile 进行 Python 依赖性管理

Python 是一种动态编程语言,这意味着它在每次执行代码时都会加载其依赖关系。能否确切了解每个依赖项的具体运行版本可能意味着是平稳运行代码还是意外崩溃。这意味着我们必须考虑依赖管理工具。

对于每个新项目,我都会包含一个 requirements.in 文件,(通常)只有以下内容:

.

是的,没错。只有一个点的单行。我在 setup.py 文件中记录了 “宽松” 的依赖关系,比如 Twisted>=17.5。这与 Twisted==18.1 这样的确切依赖关系形成了鲜明对比,后者在需要一个特性或错误修复时,难以升级到新版本的库。

. 的意思是 “当前目录”,它使用当前目录下的 setup.py 作为依赖关系的来源。

这意味着使用 pip-compile requirements.in > requirements.txt 会创建一个冻结的依赖文件。你可以在 virtualenvwrapper 创建的虚拟环境中或者 tox.ini 中使用这个依赖文件。

有时,也可以从 requirements-dev.in(内容:.[dev])生成 requirements-dev.txt,或从 requirements-test.in(内容:.[test])生成 requirements-test.txt

我正在研究在这个流程中是否应该用 dephell 代替 pip-compiledephell 工具有许多有趣的功能,比如使用异步 HTTP 请求来下载依赖项。

结论

Python 的功能既强大又赏心悦目。为了编写这些代码,我依靠了一个对我来说很有效的特定工具链。工具 pyenvvirtualenvwrappertoxpip-compile 都是独立的。但是,它们各有各的作用,没有重叠,它们一起打造了一个强大的 Python 工作流。


via: https://opensource.com/article/20/6/python-tools

作者:Moshe Zadka 选题:lujun9972 译者:wxy 校对:wxy

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

在 Linux 中有很多永远循环(或直到你决定停止)的方法,你可以在命令行或脚本中执行此操作。

forwhile 命令使这件事非常容易。关于相应的语法和策略,只有几件事要牢记。

使用 while

最简单的永远循环之一是使用 while 命令,后面跟上条件 true。 你不必使用诸如 while [ 1 -eq 1 ] 之类的逻辑或类似的测试。 while true 测试表示循环将一直运行,直到你使用 CTRL-C 停止循环、关闭终端窗口或注销为止。这是一个例子:

$ while true
> do
>   echo Keep running
>   sleep 3
> done
Keep running
Keep running
Keep running
^C

你也可以使用 while : 做同样的事情。这里的关键是 : 总是返回成功,因此就像 while true 一样,此测试永远不会失败,并且循环会继续运行:

$ while :
> do
>   echo Keep running
>   sleep 3
> done
Keep running
Keep running
^C

如果你在脚本中插入了无限循环,并想提醒使用它的人如何退出脚本,那么可以使用 echo 命令添加提示:

while :
do
        echo Keep running
        echo "Press CTRL+C to exit"
        sleep 1
done

使用 for

for 命令还提供了一种永远循环的简便方法。虽然不如 while true 明显,但语法相当简单。你只需要在有界循环中替换参数即可,它通常类似于 “c 从等于 1 开始递增,直到 5”:

$ for (( c=1; c<=5; c++ ))

不指定任何参数的情况下:

$ for (( ; ; ))

没有起始值、增量或退出测试,此循环将永远运行或被强制停止:

$ for (( ; ; ))
> do
>    echo Keep running
>   echo “Press CTRL+C to exit”
>    sleep 2
> done
Keep your spirits up
Keep your spirits up
Keep your spirits up

为什么要永远循环?

在现实中,你不会想永远循环下去,但一直运行直到想要回家、工作完成或者遇到问题才退出并不罕见。任何构造为无限循环的循环都可以设置为根据各种情况退出。

该脚本将一直处理数据直到下午 5 点,或者说检查发现第一次超过 5 点的时间:

#!/bin/bash

while true
do
  if [ `date +%H` -ge 17 ]; then
    exit        # exit script
  fi
  echo keep running
  ~/bin/process_data     # do some work
done

如果要退出循环而不是退出脚本,请使用 break 命令而不是 exit

#!/bin/bash

while true
do
  if [ `date +%H` -ge 17 ]; then
    break       # exit loop
  fi
  echo keep running
  ~/bin/process_data
done
… run other commands here …

总结

永远循环很容易。指定要停止循环的条件却需要花费一些额外的精力。


via: https://www.networkworld.com/article/3562576/how-to-loop-forever-in-bash-on-linux.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:geekpi 校对:wxy

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

为防止感染新冠病毒的乘客登机,欧洲飞机制造商,空中客车公司正在研究能够识别病毒的物联网传感器。

一家开发传感器来探测飞机上和机场中的爆炸物和其他化学物品的生物技术公司正在和空中客车合作,一同开发一种可以检测已经感染新冠病毒乘客的传感器。

Koniku 的创始人兼首席执行管 Osh Agabi 在一篇博文中说,总部位于加州的 Konibu 公司和空中客车(Airbus)公司从 2017 年就开始合作共同开发能够探测出不同化学物质的非接触式设备。

他们希望通过识别从呼吸或者汗液中的气味来判断是否感染新冠病毒,因为这些气味可能是新冠病毒中化学物质的标记。“大多数感染和疾病都会或多或少的改变我们呼吸和汗液里的化学成分,也就会产生不同的气味,” Agabi 写道。“如果我们检测到这些气味,我们就可以检测是否存在感染。”

这两家公司希望能够识别这种新冠病毒的特异性标记,并且能找到一种可以检测这些标记的物联网(IoT)传感器,这些传感器配备有通过基因工程改造过的受体,从而对病毒进行探测。“那些受体会过滤空气中的分子,并且当它们接触到已经提前被编程检测的存在威胁或危险的分子化合物的时候,就会产生一个信号,”他写道。

他说,乘客将通过走过一个装有传感器的封闭通道来进行筛选。“通过对构成这些受体细胞中的 DNA 进行编程,使其对出现在感染者呼吸或者汗液中的化合物作出反应,我们相信,我们将能够迅速且可靠地筛查新冠病毒,并且确定一个人是否已经被感染,”他写道。

其他类型的非接触检测器已经在使用中了,包括 皮肤温度升高 elevated-skin-temperature (EST)摄像头。

意大利的最主要的机场 Leonardo da Vinci 购置了三个热成像头盔来发现发烧的人。机场已经配备了固定的热感应扫描仪,并且订购了更多的这种设备。根据当地媒体 Fiumicino Online 的报道,被发现潜在发烧的乘客被会要求做进一步的医学检查。

位于中国深圳制造这种头盔的 KC Wearable 公司表示,这种头盔可以由员工佩戴,并且可以与乘客保持一定的距离。

制造热感应摄像头的 FLIR Systems 公司在其本月的财报中表示,对 EST 系统的需求正在持续增加。

“尽管这些热感应摄像头不能检测或者诊断任何医疗状况,但这些摄像头可以作为识别皮肤温度升高的有效工具。”报告说。

FLIR 公司 CEO Jim Cannon 在本月的收入电话会议上表示,“许多公司都在寻求在他们的设施中安装这种技术,以便解除 就地避难 shelter-in-place 法令”。根据路透社报道,通用汽车就是其中之一。


via: https://www.networkworld.com/article/3543318/how-iot-will-rescue-aviation.html

作者:Patrick Nelson 选题:lujun9972 译者:Yufei-Yan 校对:wxy

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