2019年6月

Testinfra 是一个功能强大的库,可用于编写测试来验证基础设施的状态。另外它与 Ansible 和 Nagios 相结合,提供了一个用于架构即代码 (IaC) 的简单解决方案。

 title=

根据设计,Ansible 传递机器的期望状态,以确保 Ansible 剧本或角色的内容部署到目标机器上。但是,如果你需要确保所有基础架构更改都在 Ansible 中,该怎么办?或者想随时验证服务器的状态?

Testinfra 是一个基础架构测试框架,它可以轻松编写单元测试来验证服务器的状态。它是一个 Python 库,使用强大的 pytest 测试引擎。

开始使用 Testinfra

可以使用 Python 包管理器(pip)和 Python 虚拟环境轻松安装 Testinfra。

$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install testinfra

Testinfra 也可以通过 Fedora 和 CentOS 的 EPEL 仓库中使用。例如,在 CentOS 7 上,你可以使用以下命令安装它:

$ yum install -y epel-release
$ yum install -y python-testinfra

一个简单的测试脚本

在 Testinfra 中编写测试很容易。使用你选择的代码编辑器,将以下内容添加到名为 test_simple.py 的文件中:

import testinfra

def test_os_release(host):
    assert host.file("/etc/os-release").contains("Fedora")

def test_sshd_inactive(host):
    assert host.service("sshd").is_running is False

默认情况下,Testinfra 为测试用例提供了一个 host 对象,该对象能访问不同的辅助模块。例如,第一个测试使用 file 模块来验证主机上文件的内容,第二个测试用例使用 service 模块来检查 systemd 服务的状态。

要在本机运行这些测试,请执行以下命令:

(venv)$ pytest test_simple.py
================================ test session starts ================================
platform linux -- Python 3.7.3, pytest-4.4.1, py-1.8.0, pluggy-0.9.0
rootdir: /home/cverna/Documents/Python/testinfra
plugins: testinfra-3.0.0
collected 2 items
test_simple.py ..

================================ 2 passed in 0.05 seconds ================================

有关 Testinfra API 的完整列表,你可以参考文档

Testinfra 和 Ansible

Testinfra 支持的后端之一是 Ansible,这意味着 Testinfra 可以直接使用 Ansible 的清单文件和清单中定义的一组机器来对它们进行测试。

我们使用以下清单文件作为示例:

[web]
app-frontend01
app-frontend02

[database]
db-backend01

我们希望确保我们的 Apache Web 服务器在 app-frontend01app-frontend02 上运行。让我们在名为 test_web.py 的文件中编写测试:

def check_httpd_service(host):
    """Check that the httpd service is running on the host"""
    assert host.service("httpd").is_running

要使用 Testinfra 和 Ansible 运行此测试,请使用以下命令:

(venv) $ pip install ansible
(venv) $ py.test --hosts=web --ansible-inventory=inventory --connection=ansible test_web.py

在调用测试时,我们使用 Ansible 清单文件的 [web] 组作为目标计算机,并指定我们要使用 Ansible 作为连接后端。

使用 Ansible 模块

Testinfra 还为 Ansible 提供了一个很好的可用于测试的 API。该 Ansible 模块能够在测试中运行 Ansible 动作,并且能够轻松检查动作的状态。

def check_ansible_play(host):
    """ 
    Verify that a package is installed using Ansible
    package module
    """
    assert not host.ansible("package", "name=httpd state=present")["changed"]

默认情况下,Ansible 的检查模式已启用,这意味着 Ansible 将报告在远程主机上执行动作时会发生的变化。

Testinfra 和 Nagios

现在我们可以轻松地运行测试来验证机器的状态,我们可以使用这些测试来触发监控系统上的警报。这是捕获意外的更改的好方法。

Testinfra 提供了与 Nagios 的集成,它是一种流行的监控解决方案。默认情况下,Nagios 使用 NRPE 插件对远程主机进行检查,但使用 Testinfra 可以直接从 Nagios 主控节点上运行测试。

要使 Testinfra 输出与 Nagios 兼容,我们必须在触发测试时使用 --nagios 标志。我们还使用 -qq 这个 pytest 标志来启用 pytest 的静默模式,这样就不会显示所有测试细节。

(venv) $ py.test --hosts=web --ansible-inventory=inventory --connection=ansible --nagios -qq line test.py
TESTINFRA OK - 1 passed, 0 failed, 0 skipped in 2.55 seconds

Testinfra 是一个功能强大的库,可用于编写测试以验证基础架构的状态。 另外与 Ansible 和 Nagios 相结合,提供了一个用于架构即代码 (IaC) 的简单解决方案。 它也是使用 Molecule 开发 Ansible 角色过程中添加测试的关键组件。


via: https://opensource.com/article/19/5/using-testinfra-ansible-verify-server-state

作者:Clement Verna 选题:lujun9972 译者:geekpi 校对:wxy

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

可能大家还记得,我们在一个多月前发布了一个小程序“Linux文章”,并用它来作为的我们的官方 APP。当时的实现的功能还是一个最简单的版本,基本上只是一个文章列表和文章查看。经过这段时间的不断打磨,我们终于在这个小程序的基础上,形成了比较完善的一个内容社区的官方应用。下面我给大家正式介绍一下这个小程序的功能。

首先,由于名字的原因,这个小程序没法叫做“Linux中国”,所以它的名称是叫做“Linux文章”,这有点尴尬,不过大家一般来说都可以通过扫描如下的小程序码来使用它。

扫码访问

首次访问这个小程序,会显示一个“操作指南”,从中我们可以看到,这个小程序没有采用惯常的“文章列表、点击查看”的模式,所以并不是将网站体验直接照搬到小程序当中。在这个小程序当中,充分利用了各种滑动操作,并且可以单手完成绝大部分操作。

给初次访问者的操作指南

按照指示,你可以在此屏幕上左滑或右滑看到首页的搜索框——可以搜索你想找的文章,也可以上滑看到默认文章列表或搜索结果。

首页的搜索框

而当将此页面上滑,或再次访问此小程序时,会直接显示文章列表(或搜索结果列表):

文章列表

如果进行了搜索,比如搜索“树莓派”,那么会在列表上指示搜索关键字,可以“关闭”这个关键字指示,返回默认文章列表:

搜索结果

在这个列表上,可以左右滑动,浏览更多的文章。此外,点击题图时,会切换该页面的显示模式,变成横屏模式,以题图为主要显示内容。而在横屏模式中,长按题图可以保存该题图到相册当中。

横屏模式

也可以再继续向上滑动,显示该文章内容。当然你也可以点击这个页面当中的标题访问文章内容。

文章内容

左右滑动文章页面可以看到文章内的素材信息,包括导航、链接、图片等,方便访问。

文章素材

在文章页面中,可以向下滑动回到列表,也可以继续向下滑动回到首页。

基本上,这个小程序实现了访问我们的内容的一个独立渠道,未来,我们还会增加一些方便而不会让小程序过于笨重的功能。希望大家喜欢。如果你有什么建议或 bug 反馈,请加入微信群:

Getting Started With Docker

在我们的上一个教程中,我们已经了解如何在 Ubuntu 上安装 Docker,和如何在 CentOS 上安装 Docker。今天,我们将会了解 Docker 的一些基础用法。该教程包含了如何创建一个新的 Docker 容器,如何运行该容器,如何从现有的 Docker 容器中创建自己的 Docker 镜像等 Docker 的一些基础知识、操作。所有步骤均在 Ubuntu 18.04 LTS server 版本下测试通过。

入门指南

在开始指南之前,不要混淆 Docker 镜像和 Docker 容器这两个概念。在之前的教程中,我就解释过,Docker 镜像是决定 Docker 容器行为的一个文件,Docker 容器则是 Docker 镜像的运行态或停止态。(LCTT 译注:在 macOS 下使用 Docker 终端时,不需要加 sudo

1、搜索 Docker 镜像

我们可以从 Docker 仓库中获取镜像,例如 Docker hub,或者自己创建镜像。这里解释一下,Docker hub 是一个云服务器,用来提供给 Docker 的用户们创建、测试,和保存他们的镜像。

Docker hub 拥有成千上万个 Docker 镜像文件。你可以通过 docker search命令在这里搜索任何你想要的镜像。

例如,搜索一个基于 Ubuntu 的镜像文件,只需要运行:

$ sudo docker search ubuntu

示例输出:

搜索基于 CentOS 的镜像,运行:

$ sudo docker search centos

搜索 AWS 的镜像,运行:

$ sudo docker search aws

搜索 WordPress 的镜像:

$ sudo docker search wordpress

Docker hub 拥有几乎所有种类的镜像,包含操作系统、程序和其他任意的类型,这些你都能在 Docker hub 上找到已经构建完的镜像。如果你在搜索时,无法找到你想要的镜像文件,你也可以自己构建一个,将其发布出去,或者仅供你自己使用。

2、下载 Docker 镜像

下载 Ubuntu 的镜像,你需要在终端运行以下命令:

$ sudo docker pull ubuntu

这条命令将会从 Docker hub 下载最近一个版本的 Ubuntu 镜像文件。

示例输出:

Using default tag: latest
latest: Pulling from library/ubuntu
6abc03819f3e: Pull complete 
05731e63f211: Pull complete 
0bd67c50d6be: Pull complete 
Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5
Status: Downloaded newer image for ubuntu:latest

下载 Docker 镜像

你也可以下载指定版本的 Ubuntu 镜像。运行以下命令:

$ docker pull ubuntu:18.04

Docker 允许在任意的宿主机操作系统下,下载任意的镜像文件,并运行。

例如,下载 CentOS 镜像:

$ sudo docker pull centos

所有下载的镜像文件,都被保存在 /var/lib/docker 文件夹下。(LCTT 译注:不同操作系统存放的文件夹并不是一致的,具体存放位置请在官方查询)

查看已经下载的镜像列表,可以使用以下命令:

$ sudo docker images

示例输出:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              7698f282e524        14 hours ago        69.9MB
centos              latest              9f38484d220f        2 months ago        202MB
hello-world         latest              fce289e99eb9        4 months ago        1.84kB

正如你看到的那样,我已经下载了三个镜像文件:ubuntucentoshello-world

现在,让我们继续,来看一下如何运行我们刚刚下载的镜像。

3、运行 Docker 镜像

运行一个容器有两种方法。我们可以使用标签或者是镜像 ID。标签指的是特定的镜像快照。镜像 ID 是指镜像的唯一标识。

正如上面结果中显示,latest 是所有镜像的一个标签。7698f282e524 是 Ubuntu Docker 镜像的镜像 ID,9f38484d220f是 CentOS 镜像的镜像 ID,fce289e99eb9 是 hello\_world 镜像的 镜像 ID。

下载完 Docker 镜像之后,你可以通过下面的命令来使用其标签来启动:

$ sudo docker run -t -i ubuntu:latest /bin/bash

在这条语句中:

  • -t:在该容器中启动一个新的终端
  • -i:通过容器中的标准输入流建立交互式连接
  • ubuntu:latest:带有标签 latest 的 Ubuntu 容器
  • /bin/bash:在新的容器中启动 BASH Shell

或者,你可以通过镜像 ID 来启动新的容器:

$ sudo docker run -t -i 7698f282e524 /bin/bash

在这条语句里:

  • 7698f282e524 — 镜像 ID

在启动容器之后,将会自动进入容器的 shell 中(注意看命令行的提示符)。

Docker 容器的 Shell

如果想要退回到宿主机的终端(在这个例子中,对我来说,就是退回到 18.04 LTS),并且不中断该容器的执行,你可以按下 CTRL+P,再按下 CTRL+Q。现在,你就安全的返回到了你的宿主机系统中。需要注意的是,Docker 容器仍然在后台运行,我们并没有中断它。

可以通过下面的命令来查看正在运行的容器:

$ sudo docker ps

示例输出:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
32fc32ad0d54        ubuntu:latest       "/bin/bash"         7 minutes ago       Up 7 minutes                            modest_jones

列出正在运行的容器

可以看到:

  • 32fc32ad0d54 – 容器 ID
  • ubuntu:latest – Docker 镜像

需要注意的是,容器 ID 和 Docker 的镜像 ID是不同的。

可以通过以下命令查看所有正在运行和停止运行的容器:

$ sudo docker ps -a

在宿主机中断容器的执行:

$ sudo docker stop <container-id>

例如:

$ sudo docker stop 32fc32ad0d54

如果想要进入正在运行的容器中,你只需要运行:

$ sudo docker attach 32fc32ad0d54

正如你看到的,32fc32ad0d54 是一个容器的 ID。当你在容器中想要退出时,只需要在容器内的终端中输入命令:

# exit

你可以使用这个命令查看后台正在运行的容器:

$ sudo docker ps

4、构建自己的 Docker 镜像

Docker 不仅仅可以下载运行在线的容器,你也可以创建你的自己的容器。

想要创建自己的 Docker 镜像,你需要先运行一个你已经下载完的容器:

$ sudo docker run -t -i ubuntu:latest /bin/bash

现在,你运行了一个容器,并且进入了该容器。然后,在该容器安装任意一个软件或做任何你想做的事情。

例如,我们在容器中安装一个 Apache web 服务器。

当你完成所有的操作,安装完所有的软件之后,你可以执行以下的命令来构建你自己的 Docker 镜像:

# apt update
# apt install apache2

同样的,在容器中安装和测试你想要安装的所有软件。

当你安装完毕之后,返回的宿主机的终端。记住,不要关闭容器。想要返回到宿主机而不中断容器。请按下CTRL+P,再按下 CTRL+Q

从你的宿主机的终端中,运行以下命令如寻找容器的 ID:

$ sudo docker ps

最后,从一个正在运行的容器中创建 Docker 镜像:

$ sudo docker commit 3d24b3de0bfc ostechnix/ubuntu_apache

示例输出:

sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962

在这里:

  • 3d24b3de0bfc — 指 Ubuntu 容器的 ID。
  • ostechnix — 我们创建的容器的用户名称
  • ubuntu_apache — 我们创建的镜像

让我们检查一下我们新创建的 Docker 镜像:

$ sudo docker images

示例输出:

REPOSITORY                TAG                 IMAGE ID            CREATED              SIZE
ostechnix/ubuntu_apache   latest              ce5aa74a48f1        About a minute ago   191MB
ubuntu                    latest              7698f282e524        15 hours ago         69.9MB
centos                    latest              9f38484d220f        2 months ago         202MB
hello-world               latest              fce289e99eb9        4 months ago         1.84kB

列出所有的 Docker 镜像

正如你看到的,这个新的镜像就是我们刚刚在本地系统上从运行的容器上创建的。

现在,你可以从这个镜像创建一个新的容器。

$ sudo docker run -t -i ostechnix/ubuntu_apache /bin/bash

5、删除容器

如果你在 Docker 上的工作已经全部完成,你就可以删除那些你不需要的容器。

想要删除一个容器,首先,你需要停止该容器。

我们先来看一下正在运行的容器有哪些

$ sudo docker ps

示例输出:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3d24b3de0bfc ubuntu:latest "/bin/bash" 28 minutes ago Up 28 minutes goofy_easley

使用容器 ID 来停止该容器:

$ sudo docker stop 3d24b3de0bfc

现在,就可以删除该容器了。

$ sudo docker rm 3d24b3de0bfc

你就可以按照这样的方法来删除那些你不需要的容器了。

当需要删除的容器数量很多时,一个一个删除也是很麻烦的,我们可以直接删除所有的已经停止的容器。只需要运行:

$ sudo docker container prune

按下 Y,来确认你的操作:

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
32fc32ad0d5445f2dfd0d46121251c7b5a2aea06bb22588fb2594ddbe46e6564
5ec614e0302061469ece212f0dba303c8fe99889389749e6220fe891997f38d0

Total reclaimed space: 5B

这个命令仅支持最新的 Docker。(LCTT 译注:仅支持 1.25 及以上版本的 Docker)

6、删除 Docker 镜像

当你删除了不要的 Docker 容器后,你也可以删除你不需要的 Docker 镜像。

列出已经下载的镜像:

$ sudo docker images

示例输出:

REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
ostechnix/ubuntu_apache   latest              ce5aa74a48f1        5 minutes ago       191MB
ubuntu                    latest              7698f282e524        15 hours ago        69.9MB
centos                    latest              9f38484d220f        2 months ago        202MB
hello-world               latest              fce289e99eb9        4 months ago        1.84kB

由上面的命令可以知道,在本地的系统中存在三个镜像。

使用镜像 ID 来删除镜像。

$ sudo docekr rmi ce5aa74a48f1

示例输出:

Untagged: ostechnix/ubuntu_apache:latest
Deleted: sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962
Deleted: sha256:d21c926f11a64b811dc75391bbe0191b50b8fe142419f7616b3cee70229f14cd

解决问题

Docker 禁止我们删除一个还在被容器使用的镜像。

例如,当我试图删除 Docker 镜像 b72889fa879c 时,我只能获得一个错误提示:

Error response from daemon: conflict: unable to delete b72889fa879c (must be forced) - image is being used by stopped container dde4dd285377

这是因为这个 Docker 镜像正在被一个容器使用。

所以,我们来检查一个正在运行的容器:

$ sudo docker ps

示例输出:

注意,现在并没有正在运行的容器!!!

查看一下所有的容器(包含所有的正在运行和已经停止的容器):

$ sudo docker pa -a

示例输出:

可以看到,仍然有一些已经停止的容器在使用这些镜像。

让我们把这些容器删除:

$ sudo docker rm 12e892156219

我们仍然使用容器 ID 来删除这些容器。

当我们删除了所有使用该镜像的容器之后,我们就可以删除 Docker 的镜像了。

例如:

$ sudo docekr rmi b72889fa879c

我们再来检查一下本机存在的镜像:

$ sudo docker images

想要知道更多的细节,请参阅本指南末尾给出的官方资源的链接或者在评论区进行留言。

这就是全部的教程了,希望你可以了解 Docker 的一些基础用法。

更多的教程马上就会到来,敬请关注。


via: https://www.ostechnix.com/getting-started-with-docker/

作者:sk 选题:lujun9972 译者:zhang5788 校对:wxy

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

用树莓派、一个廉价的传感器和一个便宜的屏幕监测空气质量。

大约一年前,我写了一篇关于如何使用树莓派和廉价传感器测量空气质量的文章。我们这几年已在学校里和私下使用了这个项目。然而它有一个缺点:由于它基于无线/有线网,因此它不是便携的。如果你的树莓派、你的智能手机和电脑不在同一个网络的话,你甚至都不能访问传感器测量的数据。

为了弥补这一缺陷,我们给树莓派添加了一块小屏幕,这样我们就可以直接从该设备上读取数据。以下是我们如何为我们的移动细颗粒物传感器搭建并配置好屏幕。

为树莓派搭建好屏幕

亚马逊、阿里巴巴以及其它来源有许多可以买到的树莓派屏幕,从 ePaper 屏幕到可触控 LCD。我们选择了一个便宜的带触控功能且分辨率为 320*480 像素的3.5英寸 LCD,可以直接插进树莓派的 GPIO 引脚。3.5 英寸屏幕和树莓派几乎一样大,这一点不错。

当你第一次启动屏幕打开树莓派的时候,会因为缺少驱动屏幕会保持白屏。你得首先为屏幕安装合适的驱动。通过 SSH 登入并执行以下命令:

$ rm -rf LCD-show
$ git clone <https://github.com/goodtft/LCD-show.git>
$ chmod -R 755 LCD-show
$ cd LCD-show/

为你的屏幕执行合适的命令以安装驱动。例如这是给我们 MPI3501 型屏幕的命令:

$ sudo ./LCD35-show

这行命令会安装合适的驱动并重启树莓派。

安装 PIXEL 桌面并设置自动启动

以下是我们想要我们项目能够做到的事情:如果树莓派启动,我们想要展现一个有我们空气质量测量数据的网站。

首先,安装树莓派的PIXEL 桌面环境

$ sudo apt install raspberrypi-ui-mods

然后安装 Chromium 浏览器以显示网站:

$ sudo apt install chromium-browser

需要自动登录以使测量数据在启动后直接显示;否则你将只会看到登录界面。然而树莓派用户并没有默认设置好自动登录。你可以用 raspi-config 工具设置自动登录:

$ sudo raspi-config

在菜单中,选择:“3 Boot Options → B1 Desktop / CLI → B4 Desktop Autologin”。

在启动后用 Chromium 打开我们的网站这块少了一步。创建文件夹 /home/pi/.config/lxsession/LXDE-pi/

$ mkdir -p /home/pi/config/lxsession/LXDE-pi/

然后在该文件夹里创建 autostart 文件:

$ nano /home/pi/.config/lxsession/LXDE-pi/autostart

并粘贴以下代码:

#@unclutter
@xset s off
@xset -dpms
@xset s noblank

# Open Chromium in Full Screen Mode
@chromium-browser --incognito --kiosk <http://localhost>

如果你想要隐藏鼠标指针,你得安装 unclutter 包并移除 autostart 文件开头的注释。

$ sudo apt install unclutter

 title=

我对去年的代码做了些小修改。因此如果你之前搭建过空气质量项目,确保用原文章中的指导为 AQI 网站重新下载脚本和文件。

通过添加触摸屏,你现在拥有了一个便携的颗粒物传感器!我们在学校用它来检查教室里的空气质量或者进行比较测量。使用这种配置,你无需再依赖网络连接或 WLAN。你可以在任何地方使用这个小型测量站——你甚至可以使用移动电源以摆脱电网。


这篇文章原来在 开源学校解决方案 Open Scool Solutions 上发表,获得许可重新发布。


via: https://opensource.com/article/19/3/mobile-particulate-matter-sensor

作者:Stephan Tetzel 选题:lujun9972 译者:tomjlw 校对:wxy

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

当你更新系统时,根据你所在公司的安全策略,有时候可能只需要打上与安全相关的补丁。大多数情况下,这应该是出于程序兼容性方面的考量。那该怎样实践呢?有没有办法让 yum 只安装安全补丁呢?

答案是肯定的,可以用 yum 包管理器轻松实现。

在这篇文章中,我们不但会提供所需的信息。而且,我们会介绍一些额外的命令,可以帮你获取指定安全更新的详实信息。

希望这样可以启发你去了解并修复你列表上的那些漏洞。一旦有安全漏洞被公布,就必须更新受影响的软件,这样可以降低系统中的安全风险。

对于 RHEL 或 CentOS 6 系统,运行下面的 Yum 命令 来安装 yum 安全插件。

# yum -y install yum-plugin-security

在 RHEL 7&8 或是 CentOS 7&8 上面,这个插件已经是 yum 的一部分了,不用单独安装。

要列出全部可用的补丁(包括安全、Bug 修复以及产品改进),但不安装它们:

# yum updateinfo list available
Loaded plugins: changelog, package_upload, product-id, search-disabled-repos,
              : subscription-manager, verify, versionlock
RHSA-2014:1031 Important/Sec. 389-ds-base-1.3.1.6-26.el7_0.x86_64
RHSA-2015:0416 Important/Sec. 389-ds-base-1.3.3.1-13.el7.x86_64
RHBA-2015:0626 bugfix         389-ds-base-1.3.3.1-15.el7_1.x86_64
RHSA-2015:0895 Important/Sec. 389-ds-base-1.3.3.1-16.el7_1.x86_64
RHBA-2015:1554 bugfix         389-ds-base-1.3.3.1-20.el7_1.x86_64
RHBA-2015:1960 bugfix         389-ds-base-1.3.3.1-23.el7_1.x86_64
RHBA-2015:2351 bugfix         389-ds-base-1.3.4.0-19.el7.x86_64
RHBA-2015:2572 bugfix         389-ds-base-1.3.4.0-21.el7_2.x86_64
RHSA-2016:0204 Important/Sec. 389-ds-base-1.3.4.0-26.el7_2.x86_64
RHBA-2016:0550 bugfix         389-ds-base-1.3.4.0-29.el7_2.x86_64
RHBA-2016:1048 bugfix         389-ds-base-1.3.4.0-30.el7_2.x86_64
RHBA-2016:1298 bugfix         389-ds-base-1.3.4.0-32.el7_2.x86_64

要统计补丁的大约数量,运行下面的命令:

# yum updateinfo list available | wc -l
11269

想列出全部可用的安全补丁但不安装,以下命令用来展示你系统里已安装和待安装的推荐补丁:

# yum updateinfo list security all
Loaded plugins: changelog, package_upload, product-id, search-disabled-repos,
              : subscription-manager, verify, versionlock
  RHSA-2014:1031 Important/Sec. 389-ds-base-1.3.1.6-26.el7_0.x86_64
  RHSA-2015:0416 Important/Sec. 389-ds-base-1.3.3.1-13.el7.x86_64
  RHSA-2015:0895 Important/Sec. 389-ds-base-1.3.3.1-16.el7_1.x86_64
  RHSA-2016:0204 Important/Sec. 389-ds-base-1.3.4.0-26.el7_2.x86_64
  RHSA-2016:2594 Moderate/Sec.  389-ds-base-1.3.5.10-11.el7.x86_64
  RHSA-2017:0920 Important/Sec. 389-ds-base-1.3.5.10-20.el7_3.x86_64
  RHSA-2017:2569 Moderate/Sec.  389-ds-base-1.3.6.1-19.el7_4.x86_64
  RHSA-2018:0163 Important/Sec. 389-ds-base-1.3.6.1-26.el7_4.x86_64
  RHSA-2018:0414 Important/Sec. 389-ds-base-1.3.6.1-28.el7_4.x86_64
  RHSA-2018:1380 Important/Sec. 389-ds-base-1.3.7.5-21.el7_5.x86_64
  RHSA-2018:2757 Moderate/Sec.  389-ds-base-1.3.7.5-28.el7_5.x86_64
  RHSA-2018:3127 Moderate/Sec.  389-ds-base-1.3.8.4-15.el7.x86_64
  RHSA-2014:1031 Important/Sec. 389-ds-base-libs-1.3.1.6-26.el7_0.x86_64

要显示所有待安装的安全补丁:

# yum updateinfo list security all | grep -v "i"

  RHSA-2014:1031 Important/Sec. 389-ds-base-1.3.1.6-26.el7_0.x86_64
  RHSA-2015:0416 Important/Sec. 389-ds-base-1.3.3.1-13.el7.x86_64
  RHSA-2015:0895 Important/Sec. 389-ds-base-1.3.3.1-16.el7_1.x86_64
  RHSA-2016:0204 Important/Sec. 389-ds-base-1.3.4.0-26.el7_2.x86_64
  RHSA-2016:2594 Moderate/Sec.  389-ds-base-1.3.5.10-11.el7.x86_64
  RHSA-2017:0920 Important/Sec. 389-ds-base-1.3.5.10-20.el7_3.x86_64
  RHSA-2017:2569 Moderate/Sec.  389-ds-base-1.3.6.1-19.el7_4.x86_64
  RHSA-2018:0163 Important/Sec. 389-ds-base-1.3.6.1-26.el7_4.x86_64
  RHSA-2018:0414 Important/Sec. 389-ds-base-1.3.6.1-28.el7_4.x86_64
  RHSA-2018:1380 Important/Sec. 389-ds-base-1.3.7.5-21.el7_5.x86_64
  RHSA-2018:2757 Moderate/Sec.  389-ds-base-1.3.7.5-28.el7_5.x86_64

要统计全部安全补丁的大致数量,运行下面的命令:

# yum updateinfo list security all | wc -l
3522

下面根据已装软件列出可更新的安全补丁。这包括 bugzilla(bug 修复)、CVE(知名漏洞数据库)、安全更新等:

# yum updateinfo list security

或者

# yum updateinfo list sec

Loaded plugins: changelog, package_upload, product-id, search-disabled-repos,
              : subscription-manager, verify, versionlock

RHSA-2018:3665 Important/Sec. NetworkManager-1:1.12.0-8.el7_6.x86_64
RHSA-2018:3665 Important/Sec. NetworkManager-adsl-1:1.12.0-8.el7_6.x86_64
RHSA-2018:3665 Important/Sec. NetworkManager-bluetooth-1:1.12.0-8.el7_6.x86_64
RHSA-2018:3665 Important/Sec. NetworkManager-config-server-1:1.12.0-8.el7_6.noarch
RHSA-2018:3665 Important/Sec. NetworkManager-glib-1:1.12.0-8.el7_6.x86_64
RHSA-2018:3665 Important/Sec. NetworkManager-libnm-1:1.12.0-8.el7_6.x86_64
RHSA-2018:3665 Important/Sec. NetworkManager-ppp-1:1.12.0-8.el7_6.x86_64
RHSA-2018:3665 Important/Sec. NetworkManager-team-1:1.12.0-8.el7_6.x86_64
RHSA-2018:3665 Important/Sec. NetworkManager-tui-1:1.12.0-8.el7_6.x86_64
RHSA-2018:3665 Important/Sec. NetworkManager-wifi-1:1.12.0-8.el7_6.x86_64
RHSA-2018:3665 Important/Sec. NetworkManager-wwan-1:1.12.0-8.el7_6.x86_64

显示所有与安全相关的更新,并且返回一个结果来告诉你是否有可用的补丁:

# yum --security check-update
Loaded plugins: changelog, package_upload, product-id, search-disabled-repos, subscription-manager, verify, versionlock
rhel-7-server-rpms                                                                                                                            | 2.0 kB  00:00:00
--> policycoreutils-devel-2.2.5-20.el7.x86_64 from rhel-7-server-rpms excluded (updateinfo)
--> smc-raghumalayalam-fonts-6.0-7.el7.noarch from rhel-7-server-rpms excluded (updateinfo)
--> amanda-server-3.3.3-17.el7.x86_64 from rhel-7-server-rpms excluded (updateinfo)
--> 389-ds-base-libs-1.3.4.0-26.el7_2.x86_64 from rhel-7-server-rpms excluded (updateinfo)
--> 1:cups-devel-1.6.3-26.el7.i686 from rhel-7-server-rpms excluded (updateinfo)
--> openwsman-client-2.6.3-3.git4391e5c.el7.i686 from rhel-7-server-rpms excluded (updateinfo)
--> 1:emacs-24.3-18.el7.x86_64 from rhel-7-server-rpms excluded (updateinfo)
--> augeas-libs-1.4.0-2.el7_4.2.i686 from rhel-7-server-rpms excluded (updateinfo)
--> samba-winbind-modules-4.2.3-10.el7.i686 from rhel-7-server-rpms excluded (updateinfo)
--> tftp-5.2-11.el7.x86_64 from rhel-7-server-rpms excluded (updateinfo)
.
.
35 package(s) needed for security, out of 115 available
NetworkManager.x86_64                        1:1.12.0-10.el7_6            rhel-7-server-rpms
NetworkManager-adsl.x86_64                   1:1.12.0-10.el7_6            rhel-7-server-rpms
NetworkManager-bluetooth.x86_64              1:1.12.0-10.el7_6            rhel-7-server-rpms
NetworkManager-config-server.noarch          1:1.12.0-10.el7_6            rhel-7-server-rpms
NetworkManager-glib.x86_64                   1:1.12.0-10.el7_6            rhel-7-server-rpms
NetworkManager-libnm.x86_64                  1:1.12.0-10.el7_6            rhel-7-server-rpms
NetworkManager-ppp.x86_64                    1:1.12.0-10.el7_6            rhel-7-server-rpms

列出所有可用的安全补丁,并且显示其详细信息:

# yum info-sec
.
.
===============================================================================
  tzdata bug fix and enhancement update
===============================================================================
  Update ID : RHBA-2019:0689
    Release : 0
       Type : bugfix
     Status : final
     Issued : 2019-03-28 19:27:44 UTC
Description : The tzdata packages contain data files with rules for various
            : time zones.
            :
            : The tzdata packages have been updated to version
            : 2019a, which addresses recent time zone changes.
            : Notably:
            :
            : * The Asia/Hebron and Asia/Gaza zones will start
            :   DST on 2019-03-30, rather than 2019-03-23 as
            :   previously predicted.
            : * Metlakatla rejoined Alaska time on 2019-01-20,
            :   ending its observances of Pacific standard time.
            :
            : (BZ#1692616, BZ#1692615, BZ#1692816)
            :
            : Users of tzdata are advised to upgrade to these
            : updated packages.
   Severity : None

如果你想要知道某个更新的具体内容,可以运行下面这个命令:

# yum updateinfo RHSA-2019:0163

Loaded plugins: changelog, package_upload, product-id, search-disabled-repos, subscription-manager, verify, versionlock
rhel-7-server-rpms                                                                                                                            | 2.0 kB  00:00:00
===============================================================================
  Important: kernel security, bug fix, and enhancement update
===============================================================================
  Update ID : RHSA-2019:0163
    Release : 0
       Type : security
     Status : final
     Issued : 2019-01-29 15:21:23 UTC
    Updated : 2019-01-29 15:23:47 UTC       Bugs : 1641548 - CVE-2018-18397 kernel: userfaultfd bypasses tmpfs file permissions
            : 1641878 - CVE-2018-18559 kernel: Use-after-free due to race condition in AF_PACKET implementation
       CVEs : CVE-2018-18397
            : CVE-2018-18559
Description : The kernel packages contain the Linux kernel, the core of any
            : Linux operating system.
            :
            : Security Fix(es):
            :
            : * kernel: Use-after-free due to race condition in
            :   AF_PACKET implementation (CVE-2018-18559)
            :
            : * kernel: userfaultfd bypasses tmpfs file
            :   permissions (CVE-2018-18397)
            :
            : For more details about the security issue(s),
            : including the impact, a CVSS score, and other
            : related information, refer to the CVE page(s)
            : listed in the References section.
            :
            : Bug Fix(es):
            :
            : These updated kernel packages include also
            : numerous bug fixes and enhancements. Space
            : precludes documenting all of the bug fixes in this
            : advisory. See the descriptions in the related
            : Knowledge Article:
            : https://access.redhat.com/articles/3827321
   Severity : Important
updateinfo info done

跟之前类似,你可以只查询那些通过 CVE 释出的系统漏洞:

# yum updateinfo list cves

Loaded plugins: changelog, package_upload, product-id, search-disabled-repos,
              : subscription-manager, verify, versionlock
CVE-2018-15688 Important/Sec. NetworkManager-1:1.12.0-8.el7_6.x86_64
CVE-2018-15688 Important/Sec. NetworkManager-adsl-1:1.12.0-8.el7_6.x86_64
CVE-2018-15688 Important/Sec. NetworkManager-bluetooth-1:1.12.0-8.el7_6.x86_64
CVE-2018-15688 Important/Sec. NetworkManager-config-server-1:1.12.0-8.el7_6.noarch
CVE-2018-15688 Important/Sec. NetworkManager-glib-1:1.12.0-8.el7_6.x86_64
CVE-2018-15688 Important/Sec. NetworkManager-libnm-1:1.12.0-8.el7_6.x86_64
CVE-2018-15688 Important/Sec. NetworkManager-ppp-1:1.12.0-8.el7_6.x86_64
CVE-2018-15688 Important/Sec. NetworkManager-team-1:1.12.0-8.el7_6.x86_64

你也可以查看那些跟 bug 修复相关的更新,运行下面的命令:

# yum updateinfo list bugfix | less

Loaded plugins: changelog, package_upload, product-id, search-disabled-repos,
              : subscription-manager, verify, versionlock
RHBA-2018:3349 bugfix NetworkManager-1:1.12.0-7.el7_6.x86_64
RHBA-2019:0519 bugfix NetworkManager-1:1.12.0-10.el7_6.x86_64
RHBA-2018:3349 bugfix NetworkManager-adsl-1:1.12.0-7.el7_6.x86_64
RHBA-2019:0519 bugfix NetworkManager-adsl-1:1.12.0-10.el7_6.x86_64
RHBA-2018:3349 bugfix NetworkManager-bluetooth-1:1.12.0-7.el7_6.x86_64
RHBA-2019:0519 bugfix NetworkManager-bluetooth-1:1.12.0-10.el7_6.x86_64
RHBA-2018:3349 bugfix NetworkManager-config-server-1:1.12.0-7.el7_6.noarch
RHBA-2019:0519 bugfix NetworkManager-config-server-1:1.12.0-10.el7_6.noarch

要想得到待安装更新的摘要信息,运行这个:

# yum updateinfo summary
Loaded plugins: changelog, package_upload, product-id, search-disabled-repos, subscription-manager, verify, versionlock
rhel-7-server-rpms                                                                                                                            | 2.0 kB  00:00:00
Updates Information Summary: updates
    13 Security notice(s)
         9 Important Security notice(s)
         3 Moderate Security notice(s)
         1 Low Security notice(s)
    35 Bugfix notice(s)
     1 Enhancement notice(s)
updateinfo summary done

如果只想打印出低级别的安全更新,运行下面这个命令。类似的,你也可以只查询重要级别和中等级别的安全更新。

# yum updateinfo list sec | grep -i "Low"

RHSA-2019:0201 Low/Sec.       libgudev1-219-62.el7_6.3.x86_64
RHSA-2019:0201 Low/Sec.       systemd-219-62.el7_6.3.x86_64
RHSA-2019:0201 Low/Sec.       systemd-libs-219-62.el7_6.3.x86_64
RHSA-2019:0201 Low/Sec.       systemd-sysv-219-62.el7_6.3.x86_64

via: https://www.2daygeek.com/check-list-view-find-available-security-updates-on-redhat-rhel-centos-system/

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

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

 title=

树莓派 电脑可被用来进行多种设置用于不同的目的。显然它在教育市场帮助学生在教室和创客空间中学习编程与创客技巧方面占有一席之地,它在工作场所和工厂中有大量行业应用。我打算介绍五个你可能想要在你的家中构建的项目。

媒体中心

在家中人们常用树莓派作为媒体中心来服务多媒体文件。它很容易搭建,树莓派提供了大量的 GPU(图形处理单元)运算能力来在大屏电视上渲染你的高清电视节目和电影。将 Kodi(从前的 XBMC)运行在树莓派上是一个很棒的方式,它可以播放你的硬盘或网络存储上的任何媒体。你同样可以安装一个插件来播放 YouTube 视频。

还有几个略微不同的选择,最常见的是 OSMC(开源媒体中心)和 LibreELEC,都是基于 Kodi 的。它们在放映媒体内容方面表现的都非常好,但是 OSMC 有一个更酷炫的用户界面,而 LibreElec 更轻量级。你要做的只是选择一个发行版,下载镜像并安装到一个 SD 卡中(或者仅仅使用 NOOBS),启动,然后就准备好了。

 title=

LibreElec;树莓派基金会, CC BY-SA

 title=

OSMC.tv, 版权所有, 授权使用

在往下走之前,你需要决定使用哪种树莓派。这些发行版在任何树莓派(1、2、3 或 Zero)上都能运行,视频播放在这些树莓派中的任何一个上都能胜任。除了 Pi 3(和 Zero W)有内置 Wi-Fi,唯一可察觉的不同是用户界面的反应速度,在 Pi 3 上更快。Pi 2 也不会慢太多,所以如果你不需要 Wi-Fi 它也是可以的,但是当切换菜单时,你会注意到 Pi 3 比 Pi 1 和 Zero 表现的更好。

SSH 网关

如果你想从外部网络访问你的家庭局域网的电脑和设备,你必须打开这些设备的端口来允许外部访问。在互联网中开放这些端口有安全风险,意味着你总是你总是处于被攻击、滥用或者其他各种未授权访问的风险中。然而,如果你在你的网络中安装一个树莓派,并且设置端口映射来仅允许通过 SSH 访问树莓派,你可以这么用来作为一个安全的网关来跳到网络中的其他树莓派和 PC。

大多数路由允许你配置端口映射规则。你需要给你的树莓派一个固定的内网 IP 地址来设置你的路由器端口 22 映射到你的树莓派端口 22。如果你的网络服务提供商给你提供了一个静态 IP 地址,你能够通过 SSH 和主机的 IP 地址访问(例如,ssh [email protected])。如果你有一个域名,你可以配置一个子域名指向这个 IP 地址,所以你没必要记住它(例如,ssh [email protected])。

然而,如果你不想将树莓派暴露在互联网上,你应该非常小心,不要让你的网络处于危险之中。如果你遵循一些简单的步骤来使它更安全:

  1. 大多数人建议你更换你的登录密码(有道理,默认密码 “raspberry” 是众所周知的),但是这不能阻挡暴力攻击。你可以改变你的密码并添加一个双重验证(所以你需要你的密码一个手机生成的与时间相关的密码),这么做更安全。但是,我相信最好的方法阻止入侵者访问你的树莓派是在你的 SSH 配置中禁止密码认证,这样只能通过 SSH 密匙进入。这意味着任何试图猜测你的密码尝试登录的人都不会成功。只有你的私有密匙可以访问。简单来说,很多人建议将 SSH 端口从默认的 22 换成其他的,但是通过简单的 Nmap 扫描你的 IP 地址,你信任的 SSH 端口就会暴露。
  2. 最好,不要在这个树莓派上运行其他的软件,这样你不会意外暴露其他东西。如果你想要运行其他软件,你最好在网络中的其他树莓派上运行,它们没有暴露在互联网上。确保你经常升级来保证你的包是最新的,尤其是 openssh-server 包,这样你的安全缺陷就被打补丁了。
  3. 安装 sshblackfail2ban 来将任何表露出恶意的用户加入黑名单,例如试图暴力破解你的 SSH 密码。

使树莓派安全后,让它在线,你将可以在世界的任何地方登录你的网络。一旦你登录到你的树莓派,你可以用 SSH 访问本地网络上的局域网地址(例如,192.168.1.31)访问其他设备。如果你在这些设备上有密码,用密码就好了。如果它们同样只允许 SSH 密匙,你需要确保你的密匙通过 SSH 转发,使用 -A 参数:ssh -A [email protected]

CCTV / 宠物相机

另一个很棒的家庭项目是安装一个相机模块来拍照和录视频,录制并保存文件,在内网或者外网中进行流式传输。你想这么做有很多原因,但两个常见的情况是一个家庭安防相机或监控你的宠物。

树莓派相机模块 是一个优秀的配件。它提供全高清的相片和视频,包括很多高级配置,很容易编程红外线相机用于这种目的是非常理想的,通过一个红外线 LED(树莓派可以控制的),你就能够在黑暗中看见东西。

如果你想通过一定频率拍摄静态图片来留意某件事,你可以仅仅写一个简短的 Python 脚本或者使用命令行工具 raspistill, 在 Cron 中规划它多次运行。你可能想将它们保存到 Dropbox 或另一个网络服务,上传到一个网络服务器,你甚至可以创建一个web 应用来显示他们。

如果你想要在内网或外网中流式传输视频,那也相当简单。在 picamera 文档中(在 “web streaming” 章节)有一个简单的 MJPEG(Motion JPEG)例子。简单下载或者拷贝代码到文件中,运行并访问树莓派的 IP 地址的 8000 端口,你会看见你的相机的直播输出。

有一个更高级的流式传输项目 pistreaming 也可以,它通过在网络服务器中用 JSMpeg (一个 JavaScript 视频播放器)和一个用于相机流的单独运行的 websocket。这种方法性能更好,并且和之前的例子一样简单,但是如果要在互联网中流式传输,则需要包含更多代码,并且需要你开放两个端口。

一旦你的网络流建立起来,你可以将你的相机放在你想要的地方。我用一个来观察我的宠物龟:

 title=

Ben Nuttall, CC BY-SA

如果你想控制相机位置,你可以用一个舵机。一个优雅的方案是用 Pimoroni 的 Pan-Tilt HAT,它可以让你简单的在二维方向上移动相机。为了与 pistreaming 集成,可以看看该项目的 pantilthat 分支.

 title=

Pimoroni.com, Copyright, 授权使用

如果你想将你的树莓派放到户外,你将需要一个防水的外围附件,并且需要一种给树莓派供电的方式。POE(通过以太网提供电力)电缆是一个不错的实现方式。

家庭自动化或物联网

现在是 2017 年(LCTT 译注:此文发表时间),到处都有很多物联网设备,尤其是家中。我们的电灯有 Wi-Fi,我们的面包烤箱比过去更智能,我们的茶壶处于俄国攻击的风险中,除非你确保你的设备安全,不然别将没有必要的设备连接到互联网,之后你可以在家中充分的利用物联网设备来完成自动化任务。

市场上有大量你可以购买或订阅的服务,像 Nest Thermostat 或 Philips Hue 电灯泡,允许你通过你的手机控制你的温度或者你的亮度,无论你是否在家。你可以用一个树莓派来催动这些设备的电源,通过一系列规则包括时间甚至是传感器来完成自动交互。用 Philips Hue,你做不到的当你进房间时打开灯光,但是有一个树莓派和一个运动传感器,你可以用 Python API 来打开灯光。类似地,当你在家的时候你可以通过配置你的 Nest 打开加热系统,但是如果你想在房间里至少有两个人时才打开呢?写一些 Python 代码来检查网络中有哪些手机,如果至少有两个,告诉 Nest 来打开加热器。

不用选择集成已存在的物联网设备,你可以用简单的组件来做的更多。一个自制的窃贼警报器,一个自动化的鸡笼门开关,一个夜灯,一个音乐盒,一个定时的加热灯,一个自动化的备份服务器,一个打印服务器,或者任何你能想到的。

Tor 协议和屏蔽广告

Adafruit 的 Onion Pi 是一个 Tor 协议来使你的网络通讯匿名,允许你使用互联网而不用担心窥探者和各种形式的监视。跟随 Adafruit 的指南来设置 Onion Pi,你会找到一个舒服的匿名的浏览体验。

 title=

Onion-pi from Adafruit, Copyright, 授权使用

 title=

可以在你的网络中安装一个树莓派来拦截所有的网络交通并过滤所有广告。简单下载 Pi-hole 软件到 Pi 中,你的网络中的所有设备都将没有广告(甚至屏蔽你的移动设备应用内的广告)。

树莓派在家中有很多用法。你在家里用树莓派来干什么?你想用它干什么?

在下方评论让我们知道。


via: https://opensource.com/article/17/4/5-projects-raspberry-pi-home

作者:Ben Nuttall 选题:lujun9972 译者:warmfrog 校对:wxy

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