Merge remote-tracking branch 'LCTT/master'

This commit is contained in:
Xingyu.Wang 2018-12-10 17:03:20 +08:00
commit e416b37217
11 changed files with 296 additions and 294 deletions

View File

@ -1,17 +1,19 @@
Udev 入门:管理设备事件的 Linux 子系统
udev 入门:管理设备事件的 Linux 子系统
======
创建这样一个脚本,当指定的设备插入时触发你的计算机去做一个指定动作。
> 创建这样一个脚本,当指定的设备插入时触发你的计算机去做一个指定动作。
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/osdc_520x292_opensourceprescription.png?itok=gFrc_GTH)
Udev 是一个让你的计算机使用设备事件的 Linux 子系统。通俗来讲就是,当你的计算机上插入了像网卡、外置硬盘(包括 U 盘、鼠标、键盘、游戏操纵杆和手柄、DVD-ROM 驱动器等等设备时,代码能够检测到它们。这样就能写出很多可能非常有用的实用程序,而它已经很好了,普通用户就可以写出脚本去做一些事情,比如当某个硬盘驱动器插入时,执行某个任务。
udev 是一个为你的计算机提供设备事件的 Linux 子系统。通俗来讲就是,当你的计算机上插入了像网卡、外置硬盘(包括 U 盘、鼠标、键盘、游戏操纵杆和手柄、DVD-ROM 驱动器等等设备时,代码能够检测到它们。这样就能写出很多可能非常有用的实用程序,而它已经很好了,普通用户就可以写出脚本去做一些事情,比如当某个硬盘驱动器插入时,执行某个任务。
这篇文章教你去如何写一个由一些 udev 事件触发的 [udev][1] 脚本,比如插入了一个 U 盘。当你理解了 udev 的工作原理,你就可以用它去做各种事情,比如当一个游戏手柄连接后加载一个指定的驱动程序,或者当你用于备份的驱动器连接后,自动执行备份工作。
### 一个初级的脚本
使用 udev 的最佳方式是让它工作在一个小的代码块中。不要指望从一开始就写出完整的脚本,而是从最简单的确认 udev 触发了某些指定的事件开始。
使用 udev 的最佳方式是从一个小的代码块开始。不要指望从一开始就写出完整的脚本,而是从最简单的确认 udev 触发了某些指定的事件开始。
对于你的脚本,依据你的目标,并不是在任何情况下都能保证你亲眼看到你的脚本运行结果的,因此需要在你的脚本日志中确认它成功触发了。而日志文件通常放在 **/var** 目录下,但那个目录通常是 root 用户的领地。对于测试目的,可以使用 **/tmp**,它可以被普通用户访问并且在重启动后就被清除了。
对于你的脚本,依据你的目标,并不是在任何情况下都能保证你亲眼看到你的脚本运行结果的,因此需要在你的脚本日志中确认它成功触发了。而日志文件通常放在 `/var` 目录下,但那个目录通常是 root 用户的领地。对于测试目的,可以使用 `/tmp`,它可以被普通用户访问并且在重启动后就被清除了。
打开你喜欢的文本编辑器,然后输入下面的简单脚本:
@ -21,14 +23,14 @@ Udev 是一个让你的计算机使用设备事件的 Linux 子系统。通俗
echo $date > /tmp/udev.log
```
把这个脚本放在 **/usr/local/bin** 或缺省可运行路径的位置中。将它命名为 **trigger.sh**,并运行 **chmod +x** 授予可运行权限:
把这个脚本放在 `/usr/local/bin` 或缺省可运行路径的位置中。将它命名为 `trigger.sh`,并运行 `chmod +x` 授予可运行权限:
```
$ sudo mv trigger.sh /usr/local/bin
$ sudo chmod +x /usr/local/bin/trigger.sh
```
udev 用这个脚本并不做任何事情。当它运行时,这个脚本将在文件 **/tmp/udev.log** 中放入当前的时间戳。你可以自己测试一下这个脚本:
这个脚本没有任何和 udev 有关的事情。当它运行时,这个脚本将在文件 `/tmp/udev.log` 中放入当前的时间戳。你可以自己测试一下这个脚本:
```
$ /usr/local/bin/trigger.sh
@ -42,33 +44,31 @@ Tue Oct 31 01:05:28 NZDT 2035
为了让你的脚本能够被一个设备事件触发udev 必须要知道在什么情况下调用该脚本。在现实中,你可以通过它的颜色、制造商、以及插入到你的计算机这一事实来识别一个 U 盘。而你的计算机,它需要一系列不同的标准。
Udev 通过序列号、制造商、以及提供商 ID 和产品 ID 号来识别设备。由于现在你的 udev 脚本还处于它的生命周期的早期阶段,因此要尽可能地宽泛、非特定和全包括。换句话说就是,你希望首先去捕获尽可能多的有效 udev 事件来触发你的脚本。
udev 通过序列号、制造商、以及提供商 ID 和产品 ID 号来识别设备。由于现在你的 udev 脚本还处于它的生命周期的早期阶段,因此要尽可能地宽泛、非特定和包容。换句话说就是,你希望首先去捕获尽可能多的有效 udev 事件来触发你的脚本。
使用 **udevadm monitor** 命令你可以实时利用 udev并且可以看到当你插入不同设备时发生了什么。用 root 权限试一试。
使用 `udevadm monitor` 命令你可以实时利用 udev并且可以看到当你插入不同设备时发生了什么。用 root 权限试一试。
```
$ su
# udevadm monitor
```
监视函数输出接收到的事件:
监视函数输出接收到的事件:
* UDEV在规则处理之后发出 udev 事件
* KERNEL内核发送 uevent 事件
`udevadm monitor` 命令运行时,插入一个 U 盘,你将看到各种信息在你的屏幕上滚动而出。注意那一个 `ADD` 事件的事件类型。这是你所需要的识别事件类型的一个好方法。
**udevadm monitor** 命令运行时,插入一个 U 盘,你将看到各种信息在你的屏幕上滚动而出。注意那一个 **ADD** 事件的事件类型。这是你所需要的识别事件类型的一个好方法。
**udevadm monitor** 命令提供了许多很好的信息,但是你可以使用 **udevadm info** 命令以更好看的格式来看到它,假如你知道你的 U 盘当前已经位于你的 **/dev** 树。如果不在这个树下,拔下它并重新插入,然后立即运行这个命令:
`udevadm monitor` 命令提供了许多很好的信息,但是你可以使用 `udevadm info` 命令以更好看的格式来看到它,假如你知道你的 U 盘当前已经位于你的 `/dev` 树。如果不在这个树下,拔下它并重新插入,然后立即运行这个命令:
```
$ su -c 'dmesg | tail | fgrep -i sd*'
```
举例来说,如果那个命令返回 **sdb: sdb1**,说明内核已经给你的 U 盘分配了 **sdb** 卷标。
举例来说,如果那个命令返回 `sdb: sdb1`,说明内核已经给你的 U 盘分配了 `sdb` 卷标。
或者,你可以使用 **lsblk** 命令去查看所有附加到你的系统上的驱动器,包括它的大小和分区。
或者,你可以使用 `lsblk` 命令去查看所有连接到你的系统上的驱动器,包括它的大小和分区。
现在,你的驱动器已经处于你的文件系统中了,你可以使用下面的命令去查看那个设备的相关 udev 信息:
@ -80,7 +80,7 @@ $ su -c 'dmesg | tail | fgrep -i sd*'
你的任务是从 udev 的报告中找出能唯一标识那个设备的部分,然后当计算机检测到这些唯一属性时,告诉 udev 去触发你的脚本。
**udevadm info** 命令处理一个(由设备路径指定的)设备上的报告,接着“遍历”父级设备链。对于找到的大多数设备,它以一个“键值对”格式输出所有可能的属性。你可以写一个规则,从一个单个的父级设备属性上去匹配插入设备的属性。
`udevadm info` 命令处理一个(由设备路径指定的)设备上的报告,接着“遍历”父级设备链。对于找到的大多数设备,它以一个“键值对”格式输出所有可能的属性。你可以写一个规则,从一个单个的父级设备属性上去匹配插入设备的属性。
```
looking at device '/devices/000:000/blah/blah//block/sdb':
@ -98,11 +98,11 @@ looking at device '/devices/000:000/blah/blah//block/sdb':
一个 udev 规则必须包含来自单个父级设备的一个属性。
父级属性是描述一个设备的最基本的东西,比如它是插入到一个物理端口的东西、或是一个多大的东西、或这是一个可移除的设备。
父级属性是描述一个设备的最基本的东西,比如它是插入到一个物理端口的东西、或是一个容量多大的东西、或这是一个可移除的设备。
由于内核卷标 **sdb** 可能会由于分配给在它之前插入的其它驱动器而发生变化,因此卷标并不是一个 udev 规则的父级属性的好选择。但是,在做概念论证时你可以使用它。一个事件的最佳候选者是 SUBSYSTEM 属性,它表示那个设备是一个 “block” 系统设备(也就是为什么我们要使用 **lsblk** 命令来列出设备的原因)。
由于 `KERNEL` 卷标 `sdb` 可能会由于分配给在它之前插入的其它驱动器而发生变化,因此卷标并不是一个 udev 规则的父级属性的好选择。但是,在做概念论证时你可以使用它。一个事件的最佳候选者是 `SUBSYSTEM` 属性,它表示那个设备是一个 “block” 系统设备(也就是为什么我们要使用 `lsblk` 命令来列出设备的原因)。
**/etc/udev/rules.d** 目录中打开一个名为 **80-local.rules** 的文件,然后输入如下代码:
`/etc/udev/rules.d` 目录中打开一个名为 `80-local.rules` 的文件,然后输入如下代码:
```
SUBSYSTEM=="block", ACTION=="add", RUN+="/usr/local/bin/trigger.sh"
@ -112,9 +112,9 @@ SUBSYSTEM=="block", ACTION=="add", RUN+="/usr/local/bin/trigger.sh"
等等,重启动 Linux 机器?
理论上说,你只需要运行 **udevadm control —reload** 即可,它将重新加载所有规则,但是在我们实验的现阶段,最好要排除可能影响实验结果的所有因素。Udev 是非常复杂的,为了不让你躺在床上整晚都在思考为什么这个规则不能正常工作,是因为语法错误吗?还是应该重启动一下。所以,不管 POSIX 自负地告诉你过什么,你都应该去重启动一下。
理论上说,你只需要运行 `udevadm control —reload` 即可,它将重新加载所有规则,但是在我们实验的现阶段,最好要排除可能影响实验结果的所有因素。udev 是非常复杂的,为了不让你躺在床上整晚都在思考为什么这个规则不能正常工作,是因为语法错误吗?还是应该重启动一下。所以,不管 POSIX 自负地告诉你过什么,你都应该去重启动一下。
当你的系统重启动完毕之后,(使用 Ctl+Alt+F3 或类似快捷键)切换到一个文本控制台,并插入你的 U 盘。如果你运行了一个最新的内核,当你插入 U 盘后你或许可以看到一大堆输出。如果看到一个错误信息,比如 “Could not execute /usr/local/bin/trigger.sh”或许是因为你忘了授予这个脚本可运行的权限。否则你将看到的是一个设备插入它得到内核设备分配的一些东西等等。
当你的系统重启动完毕之后,(使用 `Ctl+Alt+F3` 或类似快捷键)切换到一个文本控制台,并插入你的 U 盘。如果你运行了一个最新的内核,当你插入 U 盘后你或许可以看到一大堆输出。如果看到一个错误信息,比如 “Could not execute /usr/local/bin/trigger.sh”或许是因为你忘了授予这个脚本可运行的权限。否则你将看到的是一个设备插入它得到内核设备分配的一些东西等等。
现在,见证奇迹的时刻到了。
@ -123,13 +123,13 @@ $ cat /tmp/udev.log
Tue Oct 31 01:35:28 NZDT 2035
```
如果你在 **/tmp/udev.log** 中看到了最新的日期和时间,那么说明 udev 已经成功触发了你的脚本。
如果你在 `/tmp/udev.log` 中看到了最新的日期和时间,那么说明 udev 已经成功触发了你的脚本。
### 改进规则做一些有用的事情
现在的问题是使用的规则太通用了。插入一个鼠标、一个 U 盘、或某个人的 U 盘都将盲目地触发这个脚本。现在,我们开始专注于希望触发你的脚本的是确定的某个 U 盘。
实现上述目标的一种方式是使用提供商 ID 和产品 ID。你可以使用 **lsusb** 命令去得到这些数字。
实现上述目标的一种方式是使用提供商 ID 和产品 ID。你可以使用 `lsusb` 命令去得到这些数字。
```
$ lsusb
@ -140,7 +140,7 @@ Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 hub
Bus 001 Device 003: ID 13d3:5165 SBo Networks
```
在这个例子中,**TyCoon Corp** 前面的 **03f0:3307** 就表示了提供商 ID 和产品 ID 的属性。你也可以通过 **udevadm info -a -n /dev/sdb | grep vendor** 的输出来查看这些数字,但是从 **lsusb** 的输出中可以很容易地一眼找到这些数字。
在这个例子中,`TyCoon Corp` 前面的 `03f0:3307` 就表示了提供商 ID 和产品 ID 的属性。你也可以通过 `udevadm info -a -n /dev/sdb | grep vendor` 的输出来查看这些数字,但是从 `lsusb` 的输出中可以很容易地一眼找到这些数字。
现在,可以在你的脚本中包含这些属性了。
@ -150,7 +150,7 @@ SUBSYSTEM=="block", ATTRS{idVendor}=="03f0", ACTION=="add", RUN+="/usr/local/bin
测试它(是的,为了确保不会有来自 udev 的影响因素,我们仍然建议先重新启动一下),它应该会像前面一样工作,现在,如果你插入一个不同公司制造的 U 盘(因为它们的提供商 ID 不一样)、或插入一个鼠标、或插入一个打印机,这个脚本将不会被触发。
继续添加新属性来进一步专注于你希望去触发你的脚本的那个唯一的 U 盘。使用 **udevadm info -a -n /dev/sdb** 命令,你可以找出像提供商名字、序列号、或产品名这样的东西。
继续添加新属性来进一步专注于你希望去触发你的脚本的那个唯一的 U 盘。使用 `udevadm info -a -n /dev/sdb` 命令,你可以找出像提供商名字、序列号、或产品名这样的东西。
为了保证思路清晰,确保每次只添加一个新属性。我们(和在网上看到的其他人)在 udev 规则中所遇到的大多数错误都是因为一次添加了太多的属性,而奇怪为什么不能正常工作了。逐个测试属性是最安全的作法,这样可以确保 udev 能够成功识别到你的设备。
@ -160,18 +160,16 @@ SUBSYSTEM=="block", ATTRS{idVendor}=="03f0", ACTION=="add", RUN+="/usr/local/bin
在这里需要记住两个事情。
1. 聚焦于你的 udev 规则,当你真实地使用它们时,一旦让规则发挥作用将触发脚本。执行一个脚本去盲目地复制数据到你的计算上,或从你的计算机上复制出数据,是一个很糟糕的主意,因为有可能会遇到一个人拿着和你相同品牌的 U 盘插入到你的机器上的情况。
1. 聚焦于你的 udev 规则,当你真实地使用它们时,一旦让规则发挥作用将触发脚本。执行一个脚本去盲目地复制数据到你的计算上,或从你的计算机上复制出数据,是一个很糟糕的主意,因为有可能会遇到一个人拿着和你相同品牌的 U 盘插入到你的机器上的情况。
2. 不要在写了 udev 规则和脚本后忘记了它们的存在。我知道哪个计算上有我的 udev 规则,这些机器一般是我的个人计算机,而不是那些我带着去开会或办公室工作的计算机。一台计算机的 “社交” 程度越高,它就越不能有 udev 规则存在于它上面,因为它将潜在地导致我的数据最终可能会出现在某个人的设备、或某个人的数据中、或在我的设备上出现恶意程序。
换句话说就是,随着一个 GNU 系统提供了一个这么强大的功能,你的任务是小心地如何使用它们的强大功能。如果你滥用它或不小心谨慎地使用它,最终将让你出问题,它非常可能会导致可怕的问题。
### 现实中的 Udev
现在,你可以确认你的脚本是由 udev 触发的,那么,可以将你的关注点转到脚本功能上了。到目前为止,这个脚本是没有用的,它除了记录脚本已经运行过了这一事实外,再没有做更多的事情。
我使用 udev 去触发我的 U 盘的 [自动备份][2] 。这个创意是,将我正在处理的文档的主本保存在我的 U 盘上(因为我随身带着它,这样就可以随时处理它),并且在我每次将 U 盘插入到那台机器上时,这些主文档将备份回我的计算机上。换句话说就是,我的计算机是备份驱动器,而产生的数据是移动的。源代码是可用的,你可以随意查看 attachup 的代码,以进一步限制你的 udev 的测试示例。
我使用 udev 去触发我的 U 盘的 [自动备份][2] 。这个创意是,将我正在处理的文档的主本保存在我的 U 盘上(因为我随身带着它,这样就可以随时处理它),并且在我每次将 U 盘插入到那台机器上时,这些主文档将备份回我的计算机上。换句话说就是,我的计算机是备份驱动器,而产生的数据是移动的。源代码是可用的,你可以随意查看 `attachup` 的代码,以进一步限制你的 udev 的测试示例。
虽然我使用 udev 最多的情况就是这个例子,但是 udev 能抓取很多的事件,像游戏手柄(当连接游戏手柄时,让系统去加载 xboxdrv 模块)、摄像头、麦克风(当指定的麦克风连接时用于去设置输入),所以应该意识到,它能做的事情远比这个示例要多。
@ -182,7 +180,7 @@ SUBSYSTEM=="block", ATTRS{idVendor}=="03f0", ACTION=="add", SYMLINK+="safety%n"
SUBSYSTEM=="block", ATTRS{idVendor}=="03f0", ACTION=="add", RUN+="/usr/local/bin/trigger.sh"
```
第一行使用属性去检测我的 U 盘,这在前面已经讨论过了,接着在设备树中为我的 U 盘分配一个符号链接,给它分配的符号连接是 **safety%n**。这个 **%n** 是一个 udev 宏,它是内核分配给这个设备的任意数字,比如 sdb1、sdb2、sdb3、等等。因此 **%n** 应该是 1 或 2 或 3。
第一行使用属性去检测我的 U 盘,这在前面已经讨论过了,接着在设备树中为我的 U 盘分配一个符号链接,给它分配的符号连接是 `safety%n`。这个 `%n` 是一个 udev 宏,它是内核分配给这个设备的任意数字,比如 sdb1、sdb2、sdb3、等等。因此 `%n` 应该是 1 或 2 或 3。
这将在 dev 树中创建一个符号链接,因此它不会干涉插入一个设备的正常过程。这意味着,如果你在自动挂载设备的桌面环境中使用它,将不会出现问题。
@ -198,13 +196,13 @@ sleep 2
rsync -az /mnt/hd/ /home/seth/backups/ && umount /dev/safety1
```
这个脚本使用符号链接,这将避免出现 udev 命名导致的意外情况(例如,假设一个命名为 DISK 的 U 盘已经插入到我的计算机上,而我插入的其它 U 盘恰好名字也是 DISK那么第二个 U 盘的卷标将被命名为 `DISK_`,这将导致我的脚本不会正常运行),它在我喜欢的挂载点 **/mnt/hd** 上挂载了 **safety1**(驱动器的第一个分区)。
这个脚本使用符号链接,这将避免出现 udev 命名导致的意外情况(例如,假设一个命名为 DISK 的 U 盘已经插入到我的计算机上,而我插入的其它 U 盘恰好名字也是 DISK那么第二个 U 盘的卷标将被命名为 `DISK_`,这将导致我的脚本不会正常运行),它在我喜欢的挂载点 `/mnt/hd` 上挂载了 `safety1`(驱动器的第一个分区)。
一旦 safely 挂载之后,它将使用 [rsync][3] 将驱动器备份到我的备份文件夹(我真实使用的脚本用的是 rdiff-backup而你可以使用任何一个你喜欢的自动备份解决方案
一旦 `safely` 挂载之后,它将使用 [rsync][3] 将驱动器备份到我的备份文件夹(我真实使用的脚本用的是 `rdiff-backup`,而你可以使用任何一个你喜欢的自动备份解决方案)。
### Udev 让你的设备你做主
### udev 让你的设备你做主
Udev 是一个非常灵活的系统,它可以让你用其它系统很少敢提供给用户的方式去定义规则和功能。学习它,使用它,去享受 POSIX 的强大吧。
udev 是一个非常灵活的系统,它可以让你用其它系统很少敢提供给用户的方式去定义规则和功能。学习它,使用它,去享受 POSIX 的强大吧。
本文内容来自 [Slackermedia Handbook][4],它以 [GNU Free Documentation License 1.3][5] 许可证授权使用。
@ -215,7 +213,7 @@ via: https://opensource.com/article/18/11/udev
作者:[Seth Kenlon][a]
选题:[lujun9972][b]
译者:[qhwdw](https://github.com/qhwdw)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -1,3 +1,5 @@
translating by valoniakim
Person with diabetes finds open source and builds her own medical device
======
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/health_heartbeat.png?itok=P-GXea-p)

View File

@ -1,58 +0,0 @@
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: subject: (10 ways to give thanks to open source and free software maintainers)
[#]: via: (https://opensource.com/article/18/11/ways-give-thanks-open-source)
[#]: author: (Moshe Zadka https://opensource.com/users/moshez)
[#]: url: ( )
10 ways to give thanks to open source and free software maintainers
======
How to express your gratitude.
![](https://opensource.com/users/moshez)
Every day, I use high-quality software that is developed and maintained by people who do not ask for payment, who respect my freedoms, and who are generous with their time and energy.
In this season of giving thanks, I encourage those of you who also use and appreciate the work of open source and free software maintainers to express your gratitude. Here are ten ways to do that:
### Easy to do
1. Send an e-mail thanking the developers. Be specific—tell them what you are using their software for and how it has benefited you.
2. Use your favorite social media platform to spread the word.
3. Write a blog post about your favorite software.
### Give money
4. If your favorite open source projects accept donations, send money.
5. If you are employed by a company that uses open source software, see if you can convince management to sponsor some of the projects.
6. Offer to match donations up to a set amount. It is amazing what social motivation can do!
### Give time
7. Help review patches.
8. Help triage bugs.
9. Answer questions on IRC, mailing lists, or [Stack Overflow][1].
**10. Bonus:** If you are like me, you have at some point said harsh words to other people in the open source community. Commit to do better: Communicate with kindness and openness. The best way to give thanks is to make the open source community a place where people feel comfortable communicating.
--------------------------------------------------------------------------------
via: https://opensource.com/article/18/11/ways-give-thanks-open-source
作者:[Moshe Zadka][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/moshez
[b]: https://github.com/lujun9972
[1]: https://meta.stackoverflow.com/

View File

@ -1,60 +0,0 @@
[#]: collector: (lujun9972)
[#]: translator: (HankChow)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: subject: (3 implications of serverless)
[#]: via: (https://opensource.com/article/18/12/serverless-podcast-command-line-heros)
[#]: author: (Jen Wike Huger https://opensource.com/users/remyd)
[#]: url: ( )
3 implications of serverless
======
Plus, when to go serverless and when to not?
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003499_01_linux11x_cc.png?itok=XMDOouJR)
If you strip away all of the modern conveniences and features that make up your internet experience today, what you're left with is the client-server model. This distributed network was what the internet was built on in the beginning, and that part hasn't changed. You could say, it is still serving us well.
So, when people talk about serverless, what does it mean? Well, it doesn't mean servers are GONE. Of course not: That "client-server model" is still the backbone of how things are getting done.
Serverless refers to a developer's ability to code, deploy, and create applications without having to know how to do the rest of it, like rack the servers, patch the operating system, and create container images.
### Top 3 implications of serverless
1. People who might not have been before are becoming developers now. Why? They have to learn less of that kind of stuff and get to do more of the creative stuff.
2. Developers don't have the recreate the wheel. Why? They let serverless providers do what they do best: run and maintain the servers, patch the operating systems, and build containers.
3. Reality check: Someone on your team still has to think about the big picture, about operations. Why? Because when your server crashes or any decision at all needs to be made about the server-side of your project or product, your phone will ring and someone has to pick up. Preferably someone who knows the gameplan, your strategy for going serverless.
### When to serverless and when to not?
So, serverless is great, right? But, the truth is it isn't always the right call. What are the factors that should be considered?
1. Cost
2. Scale
3. Time
4. Control
The last one, control, is where things get interesting. Projects like [Apache OpenWhisk][1] have developed processes and tools to make it possible for you, as a developer, to operate and control your serverless computing environments.
### Why open source serverless?
For more on this, check out conversations with leading serverless thinkers and host Saron Yitbarek in [Episode 7 of Command Line Heroes podcast][2].
--------------------------------------------------------------------------------
via: https://opensource.com/article/18/12/serverless-podcast-command-line-heros
作者:[Jen Wike Huger][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/remyd
[b]: https://github.com/lujun9972
[1]: https://opensource.com/article/18/11/developing-functions-service-apache-openwhisk
[2]: https://www.redhat.com/en/command-line-heroes

View File

@ -1,3 +1,5 @@
ScarboroughCoral translating!
Migrating to Linux: Network and System Settings
======

View File

@ -1,3 +1,12 @@
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: subject: (Create a containerized machine learning model)
[#]: via: (https://fedoramagazine.org/create-containerized-machine-learning-model/)
[#]: author: (Sven Bösiger)
[#]: url: ( )
Create a containerized machine learning model
======

View File

@ -1,139 +0,0 @@
translating by seriouszyx
A Free, Secure And Cross-platform Password Manager
======
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-Password-Manager-720x340.png)
In this modern Internet era, you will surely have multiple accounts on lot of websites. It could be a personal or official mail account, social or professional network account, GitHub account, and ecommerce account etc. So you should have several different passwords for different accounts. I am sure that you are already aware that setting up same password to multiple accounts is crazy and dangerous practice. If an attacker managed to breach one of your accounts, its highly likely he/she will try to access other accounts you have with the same password. So, it is **highly recommended to set different passwords** to different accounts.
However, remembering several passwords might be difficult. You can write them in a paper. But it is not an efficient method either and you might lose them over a period of time. This is where the password managers comes in help. The password managers are like a repository where you can store all your passwords for different accounts and lock them down with a master password. By this way, all you need to remember is just the master password. We already have reviewed an open source password manager named [**KeeWeb**][1]. Today, we are going to see yet another password manager called **Buttercup**.
### About Buttercup
Buttercup is a free, open source, secure and cross-platform password manager written using **NodeJS**. It helps you to store all your login credentials of different accounts in an encrypted archive, which can be stored in your local system or any remote services like DropBox, ownCloud, NextCloud and WebDAV-based services. It uses strong **256bit AES encryption** method to save your sensitive data with a master password. So, no one can access your login details except those who have the master password. Buttercup currently supports Linux, Mac OS and Windows. It is also available a browser extension and mobile app. so, you can access the same archive you use on the desktop application and browser extension in your Android or iOS devices as well.
### Installing Buttercup Password Manager
Buttercup is currently available as **.deb** , **.rpm** packages, portable AppImage and tar archives for Linux platform. Head over to the [**releases pages**][2] and download and install the version you want to use.
Buttercup desktop application is also available in [**AUR**][3], so you can install on Arch-based systems using AUR helper programs, such as [**Yay**][4], as shown below:
```
$ yay -S buttercup-desktop
```
If you have downloaded the portable AppImage file, make it executable using command:
```
$ chmod +x buttercup-desktop-1.11.0-x86_64.AppImage
```
Then, launch it using command:
```
$ ./buttercup-desktop-1.11.0-x86_64.AppImage
```
Once you run this command, it will prompt whether you like to integrate Buttercup AppImage with your system. If you choose Yes, this will add it to your applications menu and install icons. If you dont do this, you can still launch the application by double-clicking on the AppImage or using the above command from the Terminal.
### Add archives
When you launch it for the first time, you will see the following welcome screen:
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-1.png)
We havent added any archives yet, so let us add one. To do so, click on the “New Archive File” button and type the name of the archive file and choose the location to save it.
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-2.png)
You can name it as you wish. I named it mine as “mypass”. The archives will have extension **.bcup** at the end and saved in the location of your choice.
If you already have created one, simply choose it by clicking on “Open Archive File”.
Next, buttercup will prompt you to enter a master password to the newly created archive. It is recommended to provide a strong password to protect the archives from the unauthorized access.
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-3.png)
We have now created an archive and secured it with a master password. Similarly, you can create any number of archives and protect them with a password.
Let us go ahead and add the account details in the archives.
### Adding entries (login credentials) in the archives
Once you created or opened the archive, you will see the following screen.
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-4.png)
It is like a vault where we are going to save our login credentials of different online accounts. As you can see, we havent added any entries yet. Let us add some.
To add a new entry, click “ADD ENTRY” button on the lower right corner and enter your account information you want to save.
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-5-1.png)
If you want to add any extra detail, there is an “ADD NEW FIELD” option right under the each entry. Just click on it and add as many as fields you want to include in the entries.
Once you added all entries, you will see them on the right pane of the Buttercup interface.
![][6]
### Creating new groups
You can also group login details under different name for easy recognition. Say for example, you can group all your mail accounts under a distinct name named “my_mails”. By default, your login details will be saved under “General” group. To create a new group, click “NEW GROUP” button and provide the name for the group. When creating new entries inside a new group, just click on the group name and start adding the entries as shown above.
### Manage and access login details
The data stored in the archives can be edited, moved to different groups, or entirely deleted at anytime. For instance, if you want to copy the username or password to clipboard, right click on the entry and choose “Copy to Clipboard” option.
![][7]
To edit/modify the data in the future, just click “Edit” button under the selected entry.
### Save archives on remote location
By default, Buttercup will save your data on the local system. However, you can save them on different remote services, such as Dropbox, ownCloud/NextCloud, WebDAV-based service.
To connect to these services, go to **File - > Connect Cloud Sources**.
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-8.png)
And, choose the service you want to connect and authorize it to save your data.
![][8]
You can also connect those services from the Buttercup welcome screen while adding the archives.
### Import/Export
Buttercup allows you to import or export data to or from other password managers, such as 1Password, Lastpass and KeePass. You can also export your data and access them from another system or device, for example on your Android phone. You can export Buttercup vaults to CSV format as well.
![][9]
Buttercup is a simple, yet mature and fully functional password manager. It is being actively developed for years. If you ever in need of a password manager, Buttercup might a good choice. For more details, refer the project website and github page.
And, thats all for now. Hope this was useful. More good stuffs to come. Stay tuned!
Cheers!
--------------------------------------------------------------------------------
via: https://www.ostechnix.com/buttercup-a-free-secure-and-cross-platform-password-manager/
作者:[SK][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.ostechnix.com/author/sk/
[b]: https://github.com/lujun9972
[1]: https://www.ostechnix.com/keeweb-an-open-source-cross-platform-password-manager/
[2]: https://github.com/buttercup/buttercup-desktop/releases/latest
[3]: https://aur.archlinux.org/packages/buttercup-desktop/
[4]: https://www.ostechnix.com/yay-found-yet-another-reliable-aur-helper/
[5]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
[6]: http://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-6.png
[7]: http://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-7.png
[8]: http://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-9.png
[9]: http://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-10.png

View File

@ -43,7 +43,7 @@
via: https://opensource.com/article/18/1/creative-commons-real-world
作者:[Seth Kenlon][a]
译者:[译者ID](https://github.com/译者ID)
译者:[Valoniakim](https://github.com/Valoniakim)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,58 @@
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: subject: (10 ways to give thanks to open source and free software maintainers)
[#]: via: (https://opensource.com/article/18/11/ways-give-thanks-open-source)
[#]: author: (Moshe Zadka https://opensource.com/users/moshez)
[#]: url: ( )
感谢开源和自由软件维护者的 10 种方法
======
如何表达你的感激之情。
![](https://opensource.com/users/moshez)
每天,我都使用高质量的软件,这些软件由没有要求付款的人开发和维护,他们尊重我的自由,并且慷慨地付出时间和精力。
在这个感恩的季节,我鼓励那些也使用和欣赏开源和自由软件维护者工作的人表达你的感激之情。以下是十种方法:
### 容易做到的
1. 发送电子邮件,感谢开发人员。具体点说,告诉他们你使用他们的什么软件以及你如何获益的。
2. 使用你最喜爱的社交媒体平台宣传它。
3. 写一篇关于你最喜欢的软件的博客文章。
### 捐款
4. 如果你最喜欢的开源项目接受捐款,请汇款。
5. 如果你受雇于使用开源软件的公司,看你是否可以说服管理层赞助某些项目。
6. 提供最高设置额度的捐款。社交动机能做的不可思议!
### 花费时间
7. 帮助查看补丁。
8. 帮助分类 bug。
9. 回答 IRC、邮件列表或 [Stack Overflow][1] 中的问题。
**10. 额外的:**如果你像我一样,你在某个时候对开源社区的其他人说了一些严厉的话。承诺做得更好:用善良和开放沟通。感谢的最好方式是让开源社区成为人们能舒适沟通的地方。
--------------------------------------------------------------------------------
via: https://opensource.com/article/18/11/ways-give-thanks-open-source
作者:[Moshe Zadka][a]
选题:[lujun9972][b]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/moshez
[b]: https://github.com/lujun9972
[1]: https://meta.stackoverflow.com/

View File

@ -0,0 +1,51 @@
无服务器架构的三个意义
======
对于<ruby>无服务器<rt>Serverless</rt></ruby>架构,什么时候该用,什么时候不该用呢?
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003499_01_linux11x_cc.png?itok=XMDOouJR)
如果将如今互联网体验中最方便实用的那一部分去掉,那么留下来的基本就是<ruby>客户端-服务端<rt>client-server</rt></ruby>模式了。这一个模式在互联网建立初期就已经在使用了,直到目前都没有太大的变化,也就是说,这个模式仍然在为我们服务。
那么,当人们谈论无服务器架构的时候,到底是指什么呢?其实,无服务器架构并不是说不使用服务器了。恰恰相反,客户端-服务端模式仍然在其中发挥着重要的作用。
无服务器架构实际上指的是能够让开发者在不需要关心服务器上架、为操作系统打补丁、创建容器镜像这些工作的情况下,就能够完成编码、部署和创建应用这一整套流程的架构。
### 无服务器架构的三个重要意义
1. 一些缺乏开发经验的人员现在要参与到开发工作中来了。无服务器架构能够让他们尽量只学习必要的工作内容,把更多的时间放在更具创造性的开发工作中。
2. 开发者不再需要重复造轮子。运行和维护服务器、为操作系统打补丁、创建容器等这一系列工作,都可以由更专业的无服务器架构提供商来完成。
3. 最现实的一点是,如果不使用无服务器架构,那么在服务器管理方面,总需要有一个作最终决策的人。当服务器发生崩溃时,或是需要在服务器上执行某些操作时,总是需要这样一个统领全局的人来作出决策。因此最佳的方案是使用无服务器架构。
### 什么时候该用或者不该用无服务器架构?
听起来无服务器架构是个好东西。但事实上,无服务器架构并不是万能的,在使用之前还需要考虑以下这些因素:
1. 成本
2. 使用范围
3. 时间
4. 控制方式
其中值得注意的是控制方式。现在已经有一些项目为开发者提供了操作和控制无服务器架构计算环境的工具了,[Apache OpenWhisk][1] 就是其中之一。
### 为什么要将无服务器架构开源?
关于这方面的更多内容,可以观看无服务器架构方面的专家 Saron Yitbarek 在 [Command Line Heroes][2] 节目中的访谈。
--------------------------------------------------------------------------------
via: https://opensource.com/article/18/12/serverless-podcast-command-line-heros
作者:[Jen Wike Huger][a]
选题:[lujun9972][b]
译者:[HankChow](https://github.com/HankChow)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/remyd
[b]: https://github.com/lujun9972
[1]: https://opensource.com/article/18/11/developing-functions-service-apache-openwhisk
[2]: https://www.redhat.com/en/command-line-heroes

View File

@ -0,0 +1,139 @@
(本文共两处译注)
一个免费、安全、跨平台的密码管理器
======
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-Password-Manager-720x340.png)
在这个现代化的互联网时代你一定在许多网站上有多个账户它可能是个人或官方邮箱账户、社交或专业网络账户、GitHub 账户和电子商务账户等。因此,对于不同的账户,你应该设置多个不同的密码。我相信你应该已经意识到为多个账户设置相同的密码是件疯狂又危险的事情。如果攻击者设法破解了你的一个账户,那么他/她很可能尝试使用相同的密码访问你的其他账户。所以,**强烈建议为不同的账户设置不同的密码**。
不过,记住好几个密码是很困难的。你可以把它们写在纸上,但那也不是一个有效的方法,你可能会在一段时间后失去它们。这时密码管理器就派上用场了。密码管理器就像一个存储库,你可以在其中存储不同账户的所有密码,并用一个主密码将其锁定。这样,你需要记住的就只剩下主密码了。之前我们介绍过一个叫 [**KeeWeb**][1] 的开源密码管理器,今天,我们将介绍另外一款密码管理器———**Buttercup**。
### 关于 Buttercup
Buttercup 是一个免费、开源、安全、跨平台的使用 **NodeJS** 编写的密码管理器。它可以帮助你将不同账户的所有登录凭证存储到加密存档中,该存档可以保存在本地系统或任何远程服务(如 DropBox、OwnCloud、NextCloud 和基于 WebDAV 的服务)中。它使用强大的 **256 位 AES 加密算法**用主密码保存你的敏感数据。所以除了拥有主密码的人以外没有人可以访问你的登录信息。Buttercup 目前支持 Linux、Mac OS 和 Windows还提供了一个浏览器扩展和移动应用程序。因此你也可以在 Android 和 iOS 设备中的桌面应用程序和浏览器扩展程序中使用相同的存档。
### 安装 Buttercup 密码管理器
译注此处没有找到合适的语言翻译Buttercup 目前可作为 .deb、.rpm 软件包、便携式 AppImage 和用于 Linux 平台的 tar 归档文件使用。转到 [**releases pages**][2] 下载安装你想要的版本。
Buttercup 桌面应用程序在 [**AUR**][3] 中也可用,你可以使用 AUR 帮助程序(如 [**Yay**][4])在基于 Arch 的系统上安装,如下所示:
```
$ yay -S buttercup-desktop
```
如果你已经下载了方便的 AppImage 文件,使用如下命令让它执行:
```
$ chmod +x buttercup-desktop-1.11.0-x86_64.AppImage
```
然后,使用命令启动它:
```
$ ./buttercup-desktop-1.11.0-x86_64.AppImage
```
运行此命令后,会提示是否要将 Buttercup AppImage 集成到你的系统中。如果选择“Yes”则会将其添加到应用程序菜单并安装图标。如果不这样做你仍然可以通过双击 AppImage 或在终端中使用上述命令启动应用程序。
### 添加存档
第一次启动时,会看到下面的欢迎界面:
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-1.png)
我们还没有添加任何存档所以让我们添加一个吧。单击“New Archive File”按钮输入存档文件的名称并选择它的保存位置。
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-2.png)
你可以随意命名。我把它命名为“mypass”存档将以 **.bcup** 为扩展名保存在你选择的位置。
如果你已经创建了一个只需单击“Open Archive File”来选择它。
接下来buttercup 将提示你为新创建的存档输入主密码,建议提供一个强级别的密码,以保护存档不受未经授权的访问。
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-3.png)
现在我们已经创建了一个存档并使用主密码对其进行了保护。类似地,你可以创建任意数量的存档,并使用密码保护它们。
让我们继续在存档中添加账户的详细信息。
### 在存档中添加条目(登陆凭证)
创建或打开存档后,你将看到下面的界面。
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-4.png)
它就像一个保险库,我们将保存不同账户的登录凭证。如你所见,我们并没有添加任何条目。让我们添加一些。
点击右下角的“ADD ENTRY”按钮来添加新的条目输入你想要保存的账户的信息。
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-5-1.png)
在每个条目下面都有一个“ADD NEW FIELD”选项可以用来添加其他的细节。只需点击它然后添加要包含在条目中的字段。
添加完所有条目后,你将在 Buttercup 界面的右侧窗格中看到它们。
![][6]
### 添加新的群组
你还可以将登陆的详细信息分组到不同的名称下以便于识别。例如你可以将所有邮箱账户分组到一个名为“my_mails”的名称下。默认情况下你的登录详细信息将保存在“General”群组下。要创建新的群组请点击“NEW GROUP”按钮并输入名称。在新的群组中创建新条目时与上述的步骤相同只需单击组名并开始添加条目。
### 管理和访问登陆的详细信息
存储在存档中的数据可以随时编辑、移动到其他组或彻底删除。例如如果要将用户名或密码复制到剪切板请右击该条目然后选择“Copy to Clipboard”。
![][7]
(译注:没理解这个 in the future 的意思)要在将来编辑/修改数据只需点击所选条目下的“Edit”按钮。
### 在远程保存存档
默认情况下Buttercup 会将数据保存在本地系统上。但是,你可以将它们保存在不同的远程服务(例如 Dropbox、OwnCloud、NextCloud 和基于 WebDAV 的服务)上。
要连接这些服务,请点击 **File - > Connect Cloud Sources**
![](https://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-8.png)
接下来,选择要连接的服务并对其授权以保存数据。
![][8]
你还可以在添加存档时在 Buttercup 的欢迎界面连接这些服务。
### 导入/导出
Buttercup 允许你向其他密码管理器(例如 1Password、Lastpass 和 KeePass导入导出数据。你也可以导出数据在另一个系统或设备例如 Android中访问它们。你还可以将 Buttercup 保险库导出为 CSV 格式文件。
![][9]
Buttercup 是一个简单但成熟、功能齐全的密码管理器。多年来它一直在积极发展。如果你需要密码管理器Buttercup 可能是个不错的选择。有关更多的详细信息,请参阅项目网站和 GitHub 页面。
那就介绍到这里,希望它对你有用。更多的精彩内容即将到来,敬请关注!
谢谢!
--------------------------------------------------------------------------------
via: https://www.ostechnix.com/buttercup-a-free-secure-and-cross-platform-password-manager/
作者:[SK][a]
选题:[lujun9972][b]
译者:[seriouszyx](https://github.com/seriouszyx)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.ostechnix.com/author/sk/
[b]: https://github.com/lujun9972
[1]: https://www.ostechnix.com/keeweb-an-open-source-cross-platform-password-manager/
[2]: https://github.com/buttercup/buttercup-desktop/releases/latest
[3]: https://aur.archlinux.org/packages/buttercup-desktop/
[4]: https://www.ostechnix.com/yay-found-yet-another-reliable-aur-helper/
[5]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
[6]: http://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-6.png
[7]: http://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-7.png
[8]: http://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-9.png
[9]: http://www.ostechnix.com/wp-content/uploads/2018/11/buttercup-10.png