2018年3月

痛恨上网时看到广告?学习这篇教程来设置 Pi-hole。

有一个闲置的树莓派?在浏览网页时讨厌广告?Pi-hole 是一个拦截广告的开源软件项目,它可以将你的家庭网络上的所有广告路由到一个不存在的地方,从而实现在你的设备上拦截广告的目的。这么好的方法只需要花几钟的时间来设置,你就可以使用它了。

Pi-hole 拦截了超过 100,000 个提供广告的域名,它可以拦截任何设备(包括移动设备、平板电脑、以及个人电脑)上的广告,并且它是完整的拦截了广告,而不是仅将它们隐藏起来,这样做可以提升总体的网络性能(因为广告不需要下载)。你可以在一个 web 界面上、或者也可以使用一个 API 来监视性能和统计数据。

你需要:

  • 树莓派 + SD 卡
  • USB 电源线
  • 以太网线

你不需要使用一个最新型号的树莓派 — 一个老款足够完成这项工作,只要它的内存不小于 512MB 就可以 — 因此一个一代树莓派 Model B(rev 2)就足够,一个 Model B+、或者二代的或者三代的树莓派都可以。你可以使用 Pi Zero,但需要一个 USB micro 以太网适配器。你可以使用一个带 WiFi 的 Pi Zero W 而不是以太网。但是,作为你的网络基础设施的一部分,我建议你使用一个性能良好、稳定的有线连接来代替 WiFi 连接。

准备 SD 卡

开始的第一步,你可能需要将 Raspbian Stretch Lite 安装到一个 SD 卡上。SD 卡至少需要 4GB 大小(完整的桌面版 Raspbian 镜像至少要 8GB,但是 Lite 版镜像更小更轻量化,足够完成这项工作)。如果你喜欢,也可以使用完整的 Raspbian 桌面版镜像,但是作为一个去运行简单应用程序的树莓派,你没必要做更多的事情。

使用你的个人电脑,从树莓派的网站上下载 Raspbian Stretch Lite 镜像。解压它并提取出里面的 .img 文件,然后将这个 .img 文件写入到你的 SD 卡。不论你的 SD 卡是否是空白的,这一步都不会有什么麻烦,因为在写入前它会清空上面的数据。

如果你使用的是 Linux,写入镜像文件更简单的办法是使用命令行工具 dd。或者,你也可以使用跨平台的软件 Etcher (可以去参考 Les Pounder 写的指南 “如何为树莓派准备 SD 卡“)。

SD 卡准备完成之后,你可以将它插入到你的树莓派,连接上键盘、显示器和以太网,然后为树莓派接上电源。在初始化设置之后,这个树莓派就不需要键盘或显示器了。如果你有使用“ 无末端 headless ”树莓派工作的经验,你可以 启用 SSH 然后去设置它 启用远程连接

安装 Pi-hole

在你的树莓派引导完成之后,用缺省用户名(pi)和密码(raspberry)登入。现在你就可以运行命令行了,可以去安装 Pi-hole 了。简单地输入下列命令并回车:

curl -sSL https://install.pi-hole.net | bash

这个命令下载了 Pi-hole 安装脚本然后去运行它。你可以在你的电脑浏览器中输入 https://install.pi-hole.net 来查看它的内容,你将会看到这个脚本做了些什么。它为你生成了一个管理员密码,并和其它安装信息一起显示在你的屏幕上。

就是这么简单,几分钟之后,你的树莓派将准备好为你拦截广告。

在你断开树莓派连接之前,你需要知道它的 IP 地址和你的路由器的 IP 地址。(如果你不知道),在你的终端中输入 hostname -I 来查看你的树莓派的 IP 地址,输入 ip route | grep default 来找到你的路由器的 IP 地址。你看到的将是像 192.168.1.1 这样的地址。

配置你的路由器

你的树莓派现在运行着一个 DNS 服务器,接下来你需要告诉你的路由器去使用 Pi-hole 作为它的 DNS 服务器而不是你的 ISP 提供给你的缺省 DNS。进入路由器的管理控制台 web 界面。这个界面一般是输入你的路由器的 IP 地址来进入的。

找到 LAN 设置下面的 DHCP/DNS 设置,然后将你的主 DNS 服务器的 IP 地址设置为你的 Pi-hole 的 IP 地址。设置完成之后,它应该你下图的样子:

关于这一步的更多信息,可以查看 Pi-hole discourse

你还需要确保你的 Pi-hole 始终保持相同的 IP 地址,因此,你需要去查看 DHCP 设置,将你的树莓派的 IP 地址条目添加到保留地址中。

外部测试

现在,在命令行下输入 sudo halt 关闭运行的树莓派,并断开它的电源。你可以拔掉显示器连接线和键盘,然后将你的树莓派放置到一个合适的固定的地方 — 或许应该将它放在你的路由器附近。确保连接着以太网线,然后重新连接电源以启动它。

在你的个人电脑上导航到一个网站(强烈建议访问 Opensource.com 网站),或者用你的 WiFi 中的一个设备去检查你的因特网访问是否正常(如果不能正常访问,可能是你的 DNS 配置错误)。如果在浏览器中看到了预期的结果,说明它的工作正常。现在,你浏览网站时,应该再也看不到广告了!甚至在你的 app 中提供的广告也无法出现在你的移动设备中!祝你“冲浪”愉快!

如果你想去测试一下你的广告拦截的新功能,你可以去这个 测试页面 尝试浏览一些内置广告的网站。

现在你可以在你的电脑浏览器上输入 Pi-hole 的 IP 地址来访问它的 web 界面(比如,http://192.168.1.4/admin 或者 http://pi.hole/admin 也可能会工作)。你将看到 Pi-hole 管理面板和一些统计数据(在这时可能数字比较小)。在你输入(在安装时显示在屏幕上的)密码后,你将看到更漂亮的图形界面:

你也可以微调你的 Pi-hole 的设置,像域名的白名单和黑名单、永久和临时禁止、访问拦截统计信息等等。

个别情况下,你可能需要去升级你的 Pi-hole 安装。当软件需要更新时,这个 web 界面会出现一个更新提示。如果你启用了 SSH,你可以远程登入,否则,那你只能再次连接键盘和显示器。远程登入之后,输入 pihole -up命令来更新它。

如果你使用过 Pi-hole 或者其它的开源广告拦截器,请在下面的评论区把你的经验共享出来。


via: https://opensource.com/article/18/2/block-ads-raspberry-pi

作者:Ben Nuttall 译者:qhwdw 校对:wxy

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

我们将通过一个一步步的、新手友好的教程来向你展示如何搭建一个“我的世界(Minecraft)”服务器。这将会是一个长期的多人游戏服务器,你可以与来自世界各地的朋友们一起玩,而不用在同一个局域网下。

如何搭建一个“我的世界”服务器 - 快速指南

在你开始行动之前,要先了解一些事情:

为什么你应该使用专门的“我的世界”服务器提供商

既然你正在阅读这篇文章,你肯定对搭建自己的“我的世界”服务器感兴趣。不应该使用专门的“我的世界”服务器提供商的原因有很多,以下是其中一些:

  • 它们通常很慢。这是因为你是在和很多用户一起共享资源。这有的时候会超负荷,他们中很多都会超售。
  • 你并不能完全控制“我的世界”服务端或真正的服务器。你没法按照你的意愿进行自定义。
  • 你是受限制的。这种主机套餐或多或少都会有限制。

当然,使用现成的提供商也是有优点的。最好的就是你不用做下面这些操作。但是那还有什么意思呢?!

为什么不应该用你的个人电脑作为“我的世界”服务器

我们注意到很多教程都展示的是如何在你自己的电脑上搭建服务器。这样做有一些弊端,比如:

  • 你的家庭网络不够安全,无法抵挡 DDoS 攻击。游戏服务器通常容易被 DDoS 攻击,而你的家庭网络设置通常不够安全,来抵挡它们。很可能连小型攻击都无法阻挡。
  • 你得处理端口转发。如果你试着在家庭网络中搭建“我的世界”服务器的话,你肯定会偶然发现端口转发的问题,并且处理时可能会有问题。
  • 你得保持你的电脑一直开着。你的电费将会突破天际,并且你会增加不必要的硬件负载。大部分服务器硬件都是企业级的,提升了稳定性和持久性,专门设计用来处理负载。
  • 你的家庭网络速度不够快。家庭网络并不是设计用来负载多人联机游戏的。即使你想搭建一个小型服务器,你也需要一个更好的网络套餐。幸运的是,数据中心有多个高速的、企业级的互联网连接,来保证他们达到(或尽量达到)100%在线。
  • 你的硬件很可能不够好。再说一次,服务器使用的都是企业级硬件,最新最快的处理器、固态硬盘,等等。你的个人电脑很可能不是的。
  • 你的个人电脑很可能是 Windows/MacOS。尽管这有所争议,但我们相信 Linux 更适合搭建游戏服务器。不用担心,搭建“我的世界”服务器不需要完全了解 Linux(尽管推荐这样)。我们会向你展示你需要了解的。

我们的建议是不要使用个人电脑,即使从技术角度来说你能做到。买一个云服务器并不是很贵。下面我们会向你展示如何在云服务器上搭建“我的世界”服务端。小心地遵守以下步骤,就很简单。

搭建一个“我的世界”服务器 - 需求

这是一些需求,你在教程开始之前需要拥有并了解它们:

  • 你需要一个 Linux 云服务器。我们推荐 Vultr。这家价格便宜,服务质量高,客户支持很好,并且所有的服务器硬件都很高端。检查“我的世界”服务器需求来选择你需要哪种类型的服务器(像内存和硬盘之类的资源)。我们推荐每月 20 美元的套餐。他们也支持按小时收费,所以如果你只是临时需要服务器和朋友们联机的话,你的花费会更少。注册时选择 Ubuntu 16.04 发行版。在注册时选择离你的朋友们最近的地域。这样的话你就需要保护并管理服务器。如果你不想这样的话,你可以选择托管的服务器,这样的话服务器提供商可能会给你搭建好一个“我的世界”服务器。
  • 你需要一个 SSH 客户端来连接到你的 Linux 云服务器。新手通常建议使用 PuTTy,但我们也推荐使用 MobaXTerm。也有很多 SSH 客户端,所以挑一个你喜欢的吧。
  • 你需要设置你的服务器(至少做好基本的安全设置)。谷歌一下你会发现很多教程。你也可以按照 Linode 的 安全指南,然后在你的 Vultr 服务器上一步步操作。
  • 下面我们将会处理软件依赖,比如 Java。

终于,到我们真正的教程了:

如何在 Ubuntu(Linux)上搭建一个“我的世界”服务器

这篇教程是为 Vultr 上的 Ubuntu 16.04 撰写并测试可行的。但是这对 Ubuntu 14.04, Ubuntu 18.04,以及其他基于 Ubuntu 的发行版、其他服务器提供商也是可行的。

我们使用默认的 Vanilla 服务端。你也可以使用像 CraftBukkit 或 Spigot 这样的服务端,来支持更多的自定义和插件。虽然如果你使用过多插件的话会影响服务端。这各有优缺点。不管怎么说,下面的教程使用默认的 Vanilla 服务端,来使事情变得简单和更新手友好。如果有兴趣的话我们可能会发表一篇 CraftBukkit 的教程。

1. 登录到你的服务器

我们将使用 root 账户。如果你使用受限的账户的话,大部分命令都需要 sudo。做你没有权限的事情时会出现警告。

你可以通过 SSH 客户端来登录你的服务器。使用你的 IP 和端口(大部分都是 22)。

在你登录之后,确保你的服务器安全

2. 更新 Ubuntu

在你做任何事之前都要先更新你的 Ubuntu。你可以通过以下命令更新:

apt-get update && apt-get upgrade

在提示时敲击“回车键” 和/或 y

3. 安装必要的工具

在这篇教程中你需要一些工具和软件来编辑文本、长久保持服务端运行等。使用下面的命令安装:

apt-get install nano wget screen bash default-jdk ufw

其中一些可能已经安装好了。

4. 下载“我的世界”服务端

首先,创建一个目录来保存你的“我的世界”服务端和其他文件:

mkdir /opt/minecraft

然后进入新目录:

cd /opt/minecraft

现在你可以下载“我的世界“服务端文件了。去往下载页面获取下载链接。使用 wget 下载文件:

wget https://s3.amazonaws.com/Minecraft.Download/versions/1.12.2/minecraft_server.1.12.2.jar

5. 安装“我的世界”服务端

下载好了服务端的 .jar 文件之后,你就需要先运行一下,它会生成一些文件,包括一个 eula.txt 许可文件。第一次运行的时候,它会返回一个错误并退出。这是正常的。使用下面的命令运行它:

java -Xms2048M -Xmx3472M -jar minecraft_server.1.12.2.jar nogui

-Xms2048M 是你的服务端能使用的最小的内存,-Xmx3472M 是最大的内存。调整基于你服务器的硬件资源。如果你在 Vultr 服务器上有 4GB 内存,并且不用服务器来干其他事情的话可以就这样留着不动。

在这条命令结束并返回一个错误之后,将会生成一个新的 eula.txt 文件。你需要同意那个文件里的协议。你可以通过下面这条命令将 eula=true 添加到文件中:

sed -i.orig 's/eula=false/eula=true/g' eula.txt

你现在可以通过和上面一样的命令来开启服务端并进入“我的世界”服务端控制台了:

java -Xms2048M -Xmx3472M -jar minecraft_server.1.12.2.jar nogui

确保你在 /opt/minecraft 目录,或者其他你安装你的 MC 服务端的目录下。

如果你只是测试或暂时需要的话,到这里就可以停了。如果你在登录服务器时有问题的话,你就需要配置你的防火墙

第一次成功启动服务端时会花费一点时间来生成。

我们将向你展示如何创建一个脚本来启动。

6. 使用脚本启动“我的世界”服务端,让服务端长期运行并在启动时开启

方便起见,我们将创建一个自动启动服务端的 bash 脚本。

首先,使用 nano 创建一个 bash 脚本:

nano /opt/minecraft/startminecraft.sh

这将会打开一个新的(空白)文件。粘贴以下内容:

#!/bin/bash
cd /opt/minecraft/ && java -Xms2048M -Xmx3472M -jar minecraft_server.1.12.2.jar nogui

如果你不熟悉 nano 的话 - 你可以使用 CTRL + X,再敲击 Y,然后回车。这个脚本将进入你先前创建的“我的世界”服务端并运行 Java 命令来开启服务端。你需要执行下面的命令来使脚本可执行:

chmod +x startminecraft.sh

然后,你就可以通过下面的命令随时运行服务端了:

/opt/minecraft/startminecraft.sh

但是,如果/当你登出 SSH 会话的话,服务端就会关闭。要想让服务端不登录也持续运行的话,你可以使用 screen 会话。screen 会话会一直运行,直到实际的服务器被关闭或重启。

使用下面的命令开启一个 screen 会话:

screen -S minecraft

一旦你进入了 screen 会话(看起来就像是你新建了一个 SSH 会话),你就可以使用先前创建的 bash 脚本来启动服务端:

/opt/minecraft/startminecraft.sh

要退出 screen 会话的话,你应该按 CTRL+A-D。即使你离开 screen 会话(断开的),服务端也会继续运行。你现在可以安全的登出 Ubuntu 服务器了,你创建的“我的世界”服务端将会继续运行。

但是,如果 Ubuntu 服务器重启或关闭了的话,screen 会话将不再起作用。所以为了让我们之前做的这些在启动时自动运行,做下面这些:

打开 /etc/rc.local 文件:

nano /etc/rc.local

exit 0 语句前添加如下内容:

screen -dm -S minecraft /opt/minecraft/startminecraft.sh
exit 0

保存并关闭文件。

要访问“我的世界”服务端控制台,只需运行下面的命令来重新连接 screen 会话:

screen -r minecraft

现在就是这样。祝贺你,玩的开心!你现在可以连接到你的“我的世界”服务端或配置/修改它了。

配置你的 Ubuntu 服务器

你首先肯定要设置并确保你的 Ubuntu 服务器安全,如果你还没有这么做的话。按照我们之前提及的指南并谷歌一下来获取更多信息。你需要在服务器上配置的有这些:

开启并配置防火墙

首先,如果防火墙还没有开启的话,你应该先开启先前安装的 UFW:

ufw enable

你应该开放默认的“我的世界”服务端端口:

ufw allow 25565/tcp

你应该根据你的使用情况开放或拒绝其他规则。如果你不用服务器负载网站的话,就应该拒绝 80 和 443 端口。谷歌一下 Ubuntu 的 UFW/防火墙指南,你会得到建议的。设置防火墙的时候小心一些,如果你屏蔽了 SSH 端口的话你会把自己锁在服务器外面。

由于这是默认端口,这个端口经常被扫描以及攻击。你可以通过屏蔽白名单之外的访问权限来阻挡攻击。

首先,你需要在你的 server.properties 文件中开启白名单模式。要开启的话,打开文件:

nano /opt/minecraft/server.properties

并将 white-list 行改为 true

white-list=true

保存并关闭文件。

然后重启你的服务器(重启你的服务器或重新运行启动脚本):

/opt/minecraft/startminecraft.sh

访问“我的世界”服务端控制台:

screen -r minecraft

如果你想要某人进入你的服务端,你需要通过以下命令把他们添加到白名单:

whitelist add PlayerUsername

运行以下命令来将他们移出白名单:

whitelist remove PlayerUsername

使用 CTRL+A-D 来退出 screen(服务器控制台)。值得注意的是,这会拒绝除白名单以外的所有人连接到服务端。

如何搭建“我的世界”服务器 - 常见问题

我们将解答一些有关“我的世界”服务器和我们的指南的常见问题。

我该如何重启“我的世界”服务器?

如果你按照我们的教程来的话,包括开启了服务端随系统启动,你可以直接重启你的 Ubuntu 服务器。如果没有设置岁系统启动的话,你可以通过重新运行启动脚本来重启“我的世界”服务端:

/opt/minecraft/startminecraft.sh

我该如何配置我的“我的世界”服务端?

你可以使用 server.properties 文件来配置你的服务端。查看“我的世界”维基来获取更多信息,你也可以什么都不动,它会工作的很好。

如果你想改变游戏模式、难度等诸如此类的东西,你可以使用服务端控制台。通过下面的命令访问服务端控制台:

screen -r minecraft

并执行命令。像下面这些命令:

difficulty hard
gamemode survival @a

你可能需要重新启动服务端,这取决于你使用了什么命令。你可以使用很多命令,查看维基来获取更多。

我该如何升级我的“我的世界”服务端?

如果有新版本发布的话,你需要这样做:

进入“我的世界”目录:

cd /opt/minecraft

下载最新的版本,比如使用 wget 下载 1.12.3 版本:

wget https://s3.amazonaws.com/Minecraft.Download/versions/1.12.3/minecraft_server.1.12.3.jar

接下来,运行并构建新服务端:

java -Xms2048M -Xmx3472M -jar minecraft_server.1.12.3.jar nogui

最后,更新你的启动脚本:

nano /opt/minecraft/startminecraft.sh

更新版本号数字:

#!/bin/bash
cd /opt/minecraft/ && java -Xms2048M -Xmx3472M -jar minecraft_server.1.12.3.jar nogui

现在你可以重启服务端了,一切都应该没有问题。

为什么你们的教程这么长,而其他的只有 2 行那么长?!

我们想让这个教程对新手来说更友好,并且尽可能详细。我们还向你展示了如何让服务端长期运行并跟随系统启动,我们向你展示了如何配置你的服务端以及所有的东西。我是说,你当然可以用几行来启动“我的世界”服务器,但那样的话绝对很烂,从不仅一方面说。

我不知道 Linux 或者这里说的什么东西,我该如何搭建一个“我的世界”服务器呢?

只要通篇阅读我们的文章,复制粘贴几个命令就行了。如果你真的不知道该如何做的话,我们可以帮你,或者直接找一个托管的服务器提供商,让他们帮你做这些。

我该如何在服务端上安装 mod 和插件?

我们的文章意图作一篇入门指南,你应该查看“我的世界维基”,或者谷歌一下来获取更多信息。网上有很多教程。


via: https://thishosting.rocks/how-to-make-a-minecraft-server/

作者:ThisHosting.Rocks 译者:heart4lor 校对:wxy

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

使用低成本的硬件和开源软件设计一个高性能计算集群。

在我的 之前发表在 Opensource.com 上的文章中,我介绍了 OpenHPC 项目,它的目标是致力于加速高性能计算(HPC)的创新。这篇文章将更深入来介绍使用 OpenHPC 的特性来构建一个小型的 HPC 系统。将它称为 HPC 系统 可能有点“扯虎皮拉大旗”的意思,因此,更确切的说法应该是,它是一个基于 OpenHPC 项目发布的 集群构建方法 的系统。

这个集群由两台树莓派 3 系统作为计算节点,以及一台虚拟机作为主节点,结构示意如下:

 title=

我的主节点运行的是 x86\_64 架构的 CentOS 操作系统,而计算节点运行了 aarch64 的轻度修改版的 CentOS 操作系统。

下图是真实的设备工作照:

 title=

要把我的系统配置成像上图这样的 HPC 系统,我是按照 OpenHPC 的集群构建方法的 CentOS 7.4/aarch64 + Warewulf + Slurm 安装指南 (PDF)的一些步骤来做的。这个方法包括了使用 Warewulf 的配置说明;因为我的那三个系统是手动安装的,我跳过了 Warewulf 部分以及创建 Ansible 剧本 的一些步骤。

Ansible 剧本中设置完成我的集群之后,我就可以向资源管理器提交作业了。在我的这个案例中, Slurm 充当了资源管理器,它是集群中的一个实例,由它来决定我的作业什么时候在哪里运行。在集群上启动一个简单的作业的方式之一:

[ohpc@centos01 ~]$ srun hostname
calvin

如果需要更多的资源,我可以去告诉 Slurm,我希望在 8 个 CPU 上去运行我的命令:

[ohpc@centos01 ~]$ srun -n 8 hostname
hobbes
hobbes
hobbes
hobbes
calvin
calvin
calvin
calvin

在第一个示例中,Slurm 在一个单个的 CPU 上运行了指定的命令(hostname),而在第二个示例中,Slurm 在 8 个 CPU 上运行了那个命令。我的计算节点一个命名为 calvin,而另一个命名为 hobbes;在上面的命令输出部分可以看到它们的名字。每个计算节点都是由 4 个 CPU 核心的树莓派 3 构成的。

在我的集群中提交作业的另一种方法是使用命令 sbatch,它可以用于运行脚本,将输出写入到一个文件,而不是我的终端上。

[ohpc@centos01 ~]$ cat script1.sh
#!/bin/sh
date
hostname
sleep 10
date
[ohpc@centos01 ~]$ sbatch script1.sh
Submitted batch job 101

它将创建一个名为 slurm-101.out 的输出文件,这个输出文件包含下列的内容:

Mon 11 Dec 16:42:31 UTC 2017
calvin
Mon 11 Dec 16:42:41 UTC 2017

为示范资源管理器的基本功能,简单的串行命令行工具就行,但是,做各种工作去配置一个类似 HPC 系统就有点无聊了。

一个更有趣的应用是在这个集群的所有可用 CPU 上运行一个 Open MPI 的并行作业。我使用了一个基于 康威生命游戏 的应用,它被用于一个名为“使用 Red Hat 企业版 Linux 跨多种架构运行康威生命游戏”的 视频。除了以前基于 MPI 的 Game of Life 版本之外,在我的集群中现在运行的这个版本对每个涉及的主机的单元格颜色都是不同的。下面的脚本以图形输出的方式来交互式启动应用:

$ cat life.mpi
#!/bin/bash

module load gnu6 openmpi3

if [[ "$SLURM_PROCID" != "0" ]]; then
    exit
fi

mpirun ./mpi_life -a -p -b

我使用下面的命令来启动作业,它告诉 Slurm,为这个作业分配 8 个 CPU:

$ srun -n 8 --x11 life.mpi

为了演示,这个作业有一个图形界面,它展示了当前计算的结果:

红色单元格是由其中一个计算节点来计算的,而绿色单元格是由另外一个计算节点来计算的。我也可以让康威生命游戏程序为使用的每个 CPU 核心(这里的每个计算节点有四个核心)去生成不同的颜色,这样它的输出如下:

感谢 OpenHPC 提供的软件包和安装方法,因为它们让我可以去配置一个由两个计算节点和一个主节点的 HPC 式的系统。我可以在资源管理器上提交作业,然后使用 OpenHPC 提供的软件在我的树莓派的 CPU 上去启动 MPI 应用程序。


想学习更多的关于使用 OpenHPC 去构建树莓派集群,请参与 Adrian Reber 在 DevConf.cz 2018 的讨论,它于 1月 26-28 日在 Brno,Czech Republic 举行,以及在 CentOS Dojo 2018 ,它于 2 月 2 日在 Brussels 举行。

关于作者

Adrian Reber —— Adrian 是 Red Hat 的高级软件工程师,他早在 2010 年就开始了迁移处理过程到高性能计算环境,从那个时候起迁移了许多的处理过程,并因此获得了博士学位,然后加入了 Red Hat 公司并开始去迁移到容器。偶尔他仍然去迁移单个处理过程,并且它至今仍然对高性能计算非常感兴趣。关于我的更多信息点这里


via: https://opensource.com/article/18/1/how-build-hpc-system-raspberry-pi-and-openhpc

作者:Adrian Reber 译者:qhwdw 校对:wxy

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

使用 urandom

使用 urandom!使用 urandom!使用 urandom

使用 urandom!使用 urandom!使用 urandom

但对于密码学密钥呢?

仍然使用 urandom

为什么不是 SecureRandom、OpenSSL、havaged 或者 c 语言实现呢?

这些是用户空间的 CSPRNG(伪随机数生成器)。你应该用内核的 CSPRNG,因为:

  • 内核可以访问原始设备熵。
  • 它可以确保不在应用程序之间共享相同的状态。
  • 一个好的内核 CSPRNG,像 FreeBSD 中的,也可以保证它播种之前不给你随机数据。

研究过去十年中的随机失败案例,你会看到一连串的用户空间的随机失败案例。Debian 的 OpenSSH 崩溃?用户空间随机!安卓的比特币钱包重复 ECDSA 随机 k 值?用户空间随机!可预测洗牌的赌博网站?用户空间随机!

用户空间的生成器几乎总是依赖于内核的生成器。即使它们不这样做,整个系统的安全性也会确保如此。但用户空间的 CSPRNG 不会增加防御深度;相反,它会产生两个单点故障。

手册页不是说使用 /dev/random 嘛?

这个稍后详述,保留你的意见。你应该忽略掉手册页。不要使用 /dev/random/dev/random/dev/urandom 之间的区别是 Unix 设计缺陷。手册页不想承认这一点,因此它产生了一个并不存在的安全顾虑。把 random(4) 中的密码学上的建议当作传说,继续你的生活吧。

但是如果我需要的是真随机值,而非伪随机值呢?

urandom 和 /dev/random 提供的是同一类型的随机。与流行的观念相反,/dev/random 不提供“真正的随机”。从密码学上来说,你通常不需要“真正的随机”。

urandom 和 /dev/random 都基于一个简单的想法。它们的设计与流密码的设计密切相关:一个小秘密被延伸到不可预测值的不确定流中。 这里的秘密是“熵”,而流是“输出”。

只在 Linux 上 /dev/random 和 urandom 仍然有意义上的不同。Linux 内核的 CSPRNG 定期进行密钥更新(通过收集更多的熵)。但是 /dev/random 也试图跟踪内核池中剩余的熵,并且如果它没有足够的剩余熵时,偶尔也会罢工。这种设计和我所说的一样蠢;这与基于“密钥流”中剩下多少“密钥”的 AES-CTR 设计类似。

如果你使用 /dev/random 而非 urandom,那么当 Linux 对自己的 RNG(随机数生成器)如何工作感到困惑时,你的程序将不可预测地(或者如果你是攻击者,非常可预测地)挂起。使用 /dev/random 会使你的程序不太稳定,但这不会让你在密码学上更安全。

这是个缺陷,对吗?

不是,但存在一个你可能想要了解的 Linux 内核 bug,即使这并不能改变你应该使用哪一个 RNG。

在 Linux 上,如果你的软件在引导时立即运行,或者这个操作系统你刚刚安装好,那么你的代码可能会与 RNG 发生竞争。这很糟糕,因为如果你赢了竞争,那么你可能会在一段时间内从 urandom 获得可预测的输出。这是 Linux 中的一个 bug,如果你正在为 Linux 嵌入式设备构建平台级代码,那你需要了解它。

在 Linux 上,这确实是 urandom(而不是 /dev/random)的问题。这也是 Linux 内核中的错误。 但它也容易在用户空间中修复:在引导时,明确地为 urandom 提供种子。长期以来,大多数 Linux 发行版都是这么做的。但不要切换到不同的 CSPRNG。

在其它操作系统上呢?

FreeBSD 和 OS X 消除了 urandom 和 /dev/random 之间的区别;这两个设备的行为是相同的。不幸的是,手册页在解释为什么这样做上干的很糟糕,并延续了 Linux 上 urandom 可怕的神话。

无论你使用 /dev/random 还是 urandom,FreeBSD 的内核加密 RNG 都不会停摆。 除非它没有被提供种子,在这种情况下,这两者都会停摆。与 Linux 不同,这种行为是有道理的。Linux 应该采用它。但是,如果你是一名应用程序开发人员,这对你几乎没有什么影响:Linux、FreeBSD、iOS,无论什么:使用 urandom 吧。

太长了,懒得看

直接使用 urandom 吧。

结语

ruby-trunk Feature #9569

现在,在尝试检测 /dev/urandom 之前,SecureRandom.random\_bytes 会尝试检测要使用的 OpenSSL。 我认为这应该反过来。在这两种情况下,你只需要将随机字节进行解压,所以 SecureRandom 可以跳过中间人(和第二个故障点),如果可用的话可以直接与 /dev/urandom 进行交互。

总结:

/dev/urandom 不适合用来直接生成会话密钥和频繁生成其他应用程序级随机数据。

GNU/Linux 上的 random(4) 手册所述......

感谢 Matthew Green、 Nate Lawson、 Sean Devlin、 Coda Hale 和 Alex Balducci 阅读了本文草稿。公正警告:Matthew 只是大多同意我的观点。


via: https://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/

作者:Thomas & Erin Ptacek 译者:kimii 校对:wxy

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

就算是网费每天变得越来越便宜,你也不应该重复下载相同的东西来浪费你的流量。一个很好的例子就是下载 Ubuntu 或任何 Linux 镜像的开发版本。如你所知,Ubuntu 开发人员每隔几个月就会发布一次日常构建、alpha、beta 版 ISO 镜像以供测试。在过去,一旦发布我就会下载这些镜像,并审查每个版本。现在不用了!感谢 Zsync 文件传输程序。现在可以仅下载 ISO 镜像新的部分。这将为你节省大量时间和 Internet 带宽。不仅时间和带宽,它将为你节省服务端和客户端的资源。

Zsync 使用与 Rsync 相同​​的算法,如果你会得到一份已有文件旧版本,它只下载该文件新的部分。 Rsync 主要用于在计算机之间同步数据,而 Zsync 则用于分发数据。简单地说,可以使用 Zsync 将中心的一个文件分发给数千个下载者。它在 Artistic License V2 许可证下发布,完全免费且开源。

安装 Zsync

Zsync 在大多数 Linux 发行版的默认仓库中有。

在 Arch Linux 及其衍生版上,使用命令安装它:

$ sudo pacman -S zsync

在 Fedora 上,启用 Zsync 仓库:

$ sudo dnf copr enable ngompa/zsync

并使用命令安装它:

$ sudo dnf install zsync

在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt-get install zsync

对于其他发行版,你可以从 Zsync 下载页面下载二进制打包文件,并手动编译安装它,如下所示。

$ wget http://zsync.moria.org.uk/download/zsync-0.6.2.tar.bz2
$ tar xjf zsync-0.6.2.tar.bz2
$ cd zsync-0.6.2/
$ configure
$ make
$ sudo make install

用法

请注意,只有当人们提供 zsync 下载方式时,zsync 才有用。目前,Debian、Ubuntu(所有版本)的 ISO 镜像都有 .zsync 下载链接。例如,请访问以下链接。

你可能注意到,Ubuntu 18.04 LTS 每日构建版有直接的 ISO 和 .zsync 文件。如果你下载 .ISO 文件,则必须在 ISO 更新时下载完整的 ISO 文件。但是,如果你下载的是 .zsync 文件,那么 Zsync 以后仅会下载新的更改。你不需要每次都下载整个 ISO 映像。

.zsync 文件包含 zsync 程序所需的元数据。该文件包含 rsync 算法的预先计算的校验和。它在服务器上生成一次,然后由任意数量的下载器使用。要使用 Zsync 客户端程序下载 .zsync 文件,你只需执行以下操作:

$ zsync <.zsync-file-URL>

例如:

$ zsync http://cdimage.ubuntu.com/ubuntu/daily-live/current/bionic-desktop-amd64.iso.zsync

如果你的系统中已有以前的镜像文件,那么 Zsync 将计算远程服务器中旧文件和新文件之间的差异,并仅下载新的部分。你将在终端看见计算过程一系列的点或星星。

如果你下载的文件的旧版本存在于当前工作目录,那么 Zsync 将只下载新的部分。下载完成后,你将看到两个镜像,一个你刚下载的镜像和以 .iso.zs-old 为扩展名的旧镜像。

如果没有找到相关的本地数据,Zsync 会下载整个文件。

你可以随时按 CTRL-C 取消下载过程。

试想一下,如果你直接下载 .ISO 文件或使用 torrent,每当你下载新镜像时,你将损失约 1.4GB 流量。因此,Zsync 不会下载整个 Alpha、beta 和日常构建映像,而只是在你的系统上下载了 ISO 文件的新部分,并在系统中有一个旧版本的拷贝。

今天就到这里。希望对你有帮助。我将很快另外写一篇有用的指南。在此之前,请保持关注!

干杯!


via: https://www.ostechnix.com/zsync-file-transfer-utility-download-new-parts-file/

作者:SK 译者:geekpi 校对:wxy

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

ip 命令可以告诉你很多网络连接配置和状态的信息,但是所有这些词和数字意味着什么? 让我们深入了解一下,看看所有显示的值都试图告诉你什么。

当您使用 ip a(或 ip addr)命令获取系统上所有网络接口的信息时,您将看到如下所示的内容:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host
 valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff
 inet 192.168.0.24/24 brd 192.168.0.255 scope global dynamic enp0s25
 valid_lft 57295sec preferred_lft 57295sec
 inet6 fe80::2c8e:1de0:a862:14fd/64 scope link
 valid_lft forever preferred_lft forever

这个系统上的两个接口 - 环回(lo)和网络(enp0s25)——显示了很多统计数据。 lo 接口显然是 环回地址 loolback 。 我们可以在列表中看到环回 IPv4 地址(127.0.0.1)和环回 IPv6(::1)。 而普通的网络接口更有趣。

为什么是 enp0s25 而不是 eth0

如果你想知道为什么它在这个系统上被称为 enp0s25,而不是可能更熟悉的 eth0,那我们可以稍微解释一下。

新的命名方案被称为“ 可预测的网络接口 Predictable Network Interface ”。 它已经在基于systemd 的 Linux 系统上使用了一段时间了。 接口名称取决于硬件的物理位置。 en 仅仅就是 “ethernet” 的意思,就像 “eth” 用于对应 eth0,一样。 p 是以太网卡的总线编号,s 是插槽编号。 所以 enp0s25 告诉我们很多我们正在使用的硬件的信息。

<BROADCAST,MULTICAST,UP,LOWER_UP> 这个配置串告诉我们:

BROADCAST   该接口支持广播
MULTICAST   该接口支持多播
UP          网络接口已启用
LOWER_UP    网络电缆已插入,设备已连接至网络

列出的其他值也告诉了我们很多关于接口的知识,但我们需要知道 brdqlen 这些词代表什么意思。 所以,这里显示的是上面展示的 ip 信息的其余部分的翻译。

mtu 1500                                    最大传输单位(数据包大小)为1,500字节
qdisc pfifo_fast                            用于数据包排队
state UP                                    网络接口已启用
group default                               接口组
qlen 1000                                   传输队列长度
link/ether 00:1e:4f:c8:43:fc                接口的 MAC(硬件)地址
brd ff:ff:ff:ff:ff:ff                       广播地址
inet 192.168.0.24/24                        IPv4 地址
brd 192.168.0.255                           广播地址
scope global                                全局有效
dynamic enp0s25                             地址是动态分配的
valid_lft 80866sec                          IPv4 地址的有效使用期限
preferred_lft 80866sec                      IPv4 地址的首选生存期
inet6 fe80::2c8e:1de0:a862:14fd/64          IPv6 地址
scope link                                  仅在此设备上有效
valid_lft forever                           IPv6 地址的有效使用期限
preferred_lft forever                       IPv6 地址的首选生存期

您可能已经注意到,ifconfig 命令提供的一些信息未包含在 ip a 命令的输出中 —— 例如传输数据包的统计信息。 如果您想查看发送和接收的数据包数量以及冲突数量的列表,可以使用以下 ip 命令:

$ ip -s link show enp0s25
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
 link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff
 RX: bytes packets errors dropped overrun mcast
 224258568 418718 0 0 0 84376
 TX: bytes packets errors dropped carrier collsns
 6131373 78152 0 0 0 0

另一个 ip 命令提供有关系统路由表的信息。

$ ip route show
default via 192.168.0.1 dev enp0s25 proto static metric 100
169.254.0.0/16 dev enp0s25 scope link metric 1000
192.168.0.0/24 dev enp0s25 proto kernel scope link src 192.168.0.24 metric 100

ip 命令是非常通用的。 您可以从 ip 命令及其来自Red Hat的选项获得有用的备忘单。


via: https://www.networkworld.com/article/3262045/linux/checking-your-network-connections-on-linux.html

作者:Sandra Henry-Stocker 译者:Flowsnow 校对:wxy

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