Ubuntu 的 snap 软件包封装真的安全吗？

Summary: 据 Garret 说, “仅需要克服一点点困难，安装的任何 Snap 格式的软件包就完全能够将你所有的私有数据复制到任何地方”。

最近发布的 [Ubuntu 16.04 LTS 版本带来了一些新功能](http://itsfoss.com/features-ubuntu-1604/)，其中之一就是对 [ZFS 格式文件系统的支持](http://itsfoss.com/oracle-canonical-lawsuit/)。另一个值得广为讨论的特性就是 Snap 软件包格式。不过，据 [CoreOS](https://en.wikipedia.org/wiki/CoreOS) 的开发者之一所述，Snap 软件包并不像声称的那样安全。

### 什么是 Snap 软件包？

![](/data/attachment/album/201605/27/224914wnuyjwu11urdnssy.jpg)

Snap 软件包的灵感来自容器。这种新的封装格式允许[开发人员为运行于 Ubuntu 长期支持版本 (LTS)之上的应用程序发布更新](https://insights.ubuntu.com/2016/04/13/snaps-for-classic-ubuntu/)。这就可以让用户虽然运行着稳定版本的操作系统，但却能够让应用程序保持最新的状态。之所以能够这样，是因为软件包本身就包含了程序运行的所有依赖。这可以防止依赖的软件更新后软件挂掉。

snap 软件包的另外一个优势是应用与系统的其它部分是隔离的。这意味着如果你改变了 snap 软件包的一些东西，它不会影响到系统的其它部分。这也可以防止其它的应用访问你的隐私信息，从而使骇客根据难以获取你的数据。

### 然而……

据 [Matthew Garrett](https://mjg59.dreamwidth.org/l) 的说法，Snap 软件包不能完全兑现上述承诺。Garret 作为 Linux 内核的开发人员和 CoreOS 的安全性方面的开发者，我想他一定知道自己在说些什么。

[据 Garret 说](https://mjg59.dreamwidth.org/42320.html), “仅需要克服一点点困难，安装的任何 Snap 格式的软件包就完全能够将你所有的私有数据复制到任何地方”。

[ZDnet](http://www.zdnet.com/article/linux-expert-matthew-garrett-ubuntu-16-04s-new-snap-format-is-a-security-risk/) 的报道：

>
> “为了证明自己的观点，他在 Snap 中构建了一个仅用于验证其原理的用于破坏的软件包，它首先会显示一个可爱的泰迪熊，然后将会记录 Firefox 的键盘按键事件，并且能够窃取 SSH 私钥。这个仅用于验证原理的软件包实际上注入的是一个无害的命令，但是却能够修改成一个窃取 SSH 密钥的 cURL 会话。”
>
>
>

### 但是稍等……

难道 Snap 真的有安全缺陷？事实上却不是！

Garret 自己也说，此问题仅出现在使用 X11 窗口系统上，而对于那些使用 Mir 的移动设备无效。所以这个缺陷是 X11 的而不是 Snap 的。

>
> X11 是如何信任应用程序的，这是一个众所周知的安全风险。Snap 并没有更改 X11 的信任模型。所以一个应用程序能够看到其它应用程序的行为并不是这种新的封装格式的缺点，而是 X11 的。
>
>
>

Garrett 实际上想表达的只是，当 Canonical 歌颂 Snap 和它的安全性时，Snap 应用程序并不是完全沙盒化的。和其他二进制文件一样，它们也存在风险。

请牢记 Ubuntu 16.04 当前还在使用 X11 而不是 Mir 的事实，从未知的源下载和安装 Snap 格式的软件包也许还是有风险的，然而其它不也是如此嘛？！

相关链接： [如何在 Ubuntu 16.04 中使用 Snap 软件包](http://itsfoss.com/use-snap-packages-ubuntu-16-04/)。期待您分享关于 Snap 格式及其安全性的观点。

---

via: <http://itsfoss.com/snap-package-securrity-issue/>

作者：[John Paul](http://itsfoss.com/author/john/) 译者：[dongfengweixiao](https://github.com/dongfengweixiao) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](https://linux.cn/) 荣誉推出


Intel 展示了可在大屏幕显示 Linux 系统的低端 Android 手机

Summary: 在世界移动大会 MWC16 上 Intel 展示了称之为“大屏体验”的一款的 Android 智能手机，它在插入一个外部显示后运行了一个完整的 Linux 桌面。

这个好，移动商务本，上班拿手机插个鼠标键盘和显示器就搞定

就看app的质量如何了

跑个eclipse-pydev估计会死掉

来自广西南宁的 Internet Explorer 11.0|Windows 7 用户

![](/data/attachment/album/201605/28/092547m7j3jappuxpexsex.jpg)

在世界移动大会 **MWC16** 上 Intel 展示了称之为“大屏体验”的一款的 Android 智能手机，它在插入一个外部显示后运行了一个完整的 Linux 桌面。

这个概念大体上与微软在 Windows 10 手机中的 Continuum 相似，但是 Continuum 面向的是高端设备，Intel 的项目面向的是低端智能机和新兴市场。

在巴塞罗那的这场大会上展示的是拥有 Atom x3、2GB RAM 和 16GB 存储以及支持外部显示的的 SoFIA（Intel 架构的智能或功能手机）智能机原型。插上键盘、鼠标和显示，它就变成了一台桌面 Linux，并可以选择在大屏幕的一个窗口中显示 Android 桌面。

Intel 的拓荒小组（Path Finding Group）经理 Nir Metzer 告诉我们：“Android 基于 Linux 内核，因此我们运行在一个内核上，我们有一个 Android 栈和一个 Linux 栈，并且我们共享同一个环境，因此文件系统是相同的。电话是全功能的。”

Metzer 说：“我有一个多窗口环境。只要我插入显示器后就可以使用电子表格，我可以进行拖放操作，播放音频。在一个低端平台实现这一切是一个挑战。”

现在当连上外部显示器时设备的屏幕显示是空白的，但是 Metzer 说下个版本的 Atom X3 会支持双显示。

其使用的 Linux 版本是由 Intel 维护的。Metzer 说：“我们需要将 Linux 和 Android 保持一致。框架是预安装的，不是一个可以下载的应用。”

英特尔在移动世界大会上向手机制造商们推销这一想法，但却没有实际说希望购买该设备的消费者。Metzer 说：“芯片已经准备好了，已经为量产准备好了。明天就可以进入生产。但是这要看商业需求。”

---

via: <http://www.theregister.co.uk/2016/02/23/move_over_continuum_intel_shows_android_smartphone_powering_bigscreen_linux/>

作者：[Tim Anderson](http://www.theregister.co.uk/Author/2878) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


推荐五篇 OpenStack 的新指南

Summary: 我们很幸运，因为有许多资源让我们跟随着项目的脚步。除了官方文档外，我们还有许多来自第三方提供的培训和认证、个人分享，以及许多社区贡献的学习资源。

![](/data/attachment/album/201605/28/094001ze8qrr29pejy8ap0.png)

回顾这周的 OpenStack 峰会，我仍然回味着开源云生态系统的浩瀚无垠，有那么多需要了解的项目及概念才能获得成功。不过我们很幸运，因为有许多资源让我们跟随着项目的脚步。除了[官方文档](http://docs.openstack.org/)外，我们还有许多来自第三方提供的培训和认证、个人分享，以及许多社区贡献的学习资源。

为了让我们保持获得最新消息，每个月我们将会整合发布 OpenStack 社区的最新教程、指导和小贴士等。下面是我们过去几个月最棒的发布分享。

* 首先，如果你正在寻找一个靠谱实惠的 OpenStack 测试实验室， Intel NUC 是最值得考虑的平台。麻雀虽小，五脏俱全，通过指导文章，可以很轻松的按照教程在 NUC 上使用 [TripleO 部署 OpenStack](http://acksyn.org/posts/2016/03/tripleo-on-nucs/) ，并且还可以轻松避开一些常见的古怪问题。
* 当你已经运行的一段时间 OpenStack 后，你会发现在你的云系统上许多组件生成了大量日志。其中一些是可以安全删除的，而你需要一个管理这些日志的方案。参考在部署生产 9 个月后使用 Celiometer 管理日志的[一些思考](http://silverskysoft.com/open-stack-xwrpr/2016/03/long-term-openstack-usage-summary/)。
* 对于 OpenStack 基础设施项目的新手，想要提交补丁到 OpenStack 是相当困难的。入口在哪里，测试怎么做，我的提交步骤是怎么样的？可以通过 Arie Bregman 的这篇[博客文章](http://abregman.com/2016/03/05/openstack-infra-jenkins-jobs/)快速了解整个提交过程。
* 突发计算节点失效，不知道是硬件还是软件问题。不过好消息是 OpenStack 提供了一套非常简单的迁移计划可以让你迁移当机节点到别的主机。然而，迁移过程中使用的命令令许多人感到困惑。可以通过[这篇文章](http://www.danplanet.com/blog/2016/03/03/evacuate-in-nova-one-command-to-confuse-us-all/)来理解 migrate 和 evacuate 命令的不同。
* 网络功能虚拟化技术需要 OpenStack 之外的一些功能，而用户可能不熟悉它们。例如， SR-IOV 和 PCI 直通是最大限度地提高物理硬件性能的方式。可以学习[部署步骤](https://trickycloud.wordpress.com/2016/03/28/openstack-for-nfv-applications-sr-iov-and-pci-passthrough/)以使 OpenStack 的性能最大化。

这些文章基本涵盖了本月（译者注： 4 月）推送，如果你还需要更多文章，可以检索过去推送的 [OpenStack 文献](https://opensource.com/resources/openstack-tutorials)来获取更多资源。如果有你认为我们应该推荐的新教程，请在评论中告诉我们，谢谢。

---

via: <https://opensource.com/business/16/4/master-openstack-new-tutorials>

作者：[Jason Baker](https://opensource.com/users/jason-baker) 译者：[VicYu/Vic020](http://vicyu.net) 校对：[PurlingNayuki](https://github.com/PurlingNayuki)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](https://linux.cn/) 荣誉推出


Linux/Unix 桌面趣事：文字模式下的 ASCII 艺术与注释绘画

谢谢分享！很好玩！

boxes 命令不仅是一个文本过滤器，同时是一个很少人知道的有趣工具，它可以在输入的文本或者代码周围框上各种ASCII 艺术画。你可以用它快速创建邮件签名，或者在各种编程语言中留下评论块。这个命令可以在 vim 文本编辑器中使用，但是也可以在各种支持过滤器的文本编辑器中使用，同时也可以在命令行中单独使用。

![](/data/attachment/album/201605/28/101741f6fgtktuftsh3htt.jpg)

### 任务: 安装 boxes

使用 [apt-get 命令](http://www.cyberciti.biz/tips/linux-debian-package-management-cheat-sheet.html) 在 Debian / Ubuntu Linux 中安装 boxes：

```
$ sudo apt-get install boxes

```

输出示例：

```
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  boxes
0 upgraded, 1 newly installed, 0 to remove and 6 not upgraded.
Need to get 0 B/59.8 kB of archives.
After this operation, 205 kB of additional disk space will be used.
Selecting previously deselected package boxes.
(Reading database ... 224284 files and directories currently installed.)
Unpacking boxes (from .../boxes_1.0.1a-2.3_amd64.deb) ...
Processing triggers for man-db ...
Setting up boxes (1.0.1a-2.3) ...

```

RHEL / CentOS / Fedora Linux 用户, 使用 [yum 命令来安装](http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-yum-command-howto/) boxes，(请先[启用 EPEL 软件仓库](http://www.cyberciti.biz/faq/fedora-sl-centos-redhat6-enable-epel-repo/))：

```
# yum install boxes

```

输出示例：

```
Loaded plugins: rhnplugin
Setting up Install Process
Resolving Dependencies
There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.
--> Running transaction check
---> Package boxes.x86_64 0:1.1-8.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==========================================================================
 Package        Arch            Version               Repository     Size
==========================================================================
Installing:
 boxes          x86_64          1.1-8.el6             epel           64 k
Transaction Summary
==========================================================================
Install       1 Package(s)
Total download size: 64 k
Installed size: 151 k
Is this ok [y/N]: y
Downloading Packages:
boxes-1.1-8.el6.x86_64.rpm                         |  64 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : boxes-1.1-8.el6.x86_64                                 1/1
Installed:
  boxes.x86_64 0:1.1-8.el6
Complete!

```

FreeBSD 用户可以按如下使用：

```
cd /usr/ports/misc/boxes/ && make install clean

```

或者，使用 pkg\_add 命令来增加包：

```
# pkg_add -r boxes

```

### 在一些给定文本周围画出任何种类的包围框

输入下列命令：

```
echo "This is a test" | boxes

```

或者，指定要使用的图案的名字：

```
echo -e "\n\tVivek Gite\n\tvivek@nixcraft.com\n\twww.cyberciti.biz" | boxes -d dog

```

输出示例 :

![Unix / Linux: Boxes Command To Draw Various Designs](/data/attachment/album/201605/28/101800bv3vvf31z1apf5q6.png)

\*图01: Unix / Linux: Boxes 命令来画出各式各样的图案 \*

#### 怎么样输出所有的图案

语法如下：

```
boxes option
pipe | boxes options
echo "text" | boxes -d foo
boxes -l

```

-d 选项用来设置要使用的图案的名字。语法如下：

```
echo "Text" | boxes -d design
pipe | boxes -d desig

```

-l 选项列出所有图案。它显示了在配置文件中的所有的框线设计图，同时也显示关于其创作者的信息。

```
boxes -l
boxes -l | more
boxes -l | less

```

输出示例：

```
43 Available Styles in "/etc/boxes/boxes-config":
-------------------------------------------------
ada-box (Neil Bird ):
    ---------------
    --           --
    --           --
    ---------------
ada-cmt (Neil Bird ):
    --
    -- regular Ada
    -- comments
    --
boy (Joan G. Stark ):
                    .-"""-.
                   / .===. \
                   \/ 6 6 \/
                   ( \___/ )
      _________ooo__\_____/______________
     /                                   \
    |   joan stark   spunk1111@juno.com   |
    |     VISIT MY ASCII ART GALLERY:     |
    | http://www.geocities.com/SoHo/7373/ |
     \_______________________ooo_________/  jgs
                    |  |  |
                    |_ | _|
                    |  |  |
                    |__|__|
                    /-'Y'-\
                   (__/ \__)
....
...
output truncated
..

```

### 在使用 vi/vim 文本编辑器时如何通过 boxes 过滤文本?

你可以在 vi 或 vim 中使用任何外部命令，比如在这个例子中，[插入当前日期和时间](http://www.cyberciti.biz/faq/vim-inserting-current-date-time-under-linux-unix-osx/)，输入：

```
!!date

```

或者

```
:r !date

```

你需要在 vim 中输入以上命令来读取 date 命令的输出，这将在当前行后面加入日期和时分秒：

```
Tue Jun 12 00:05:38 IST 2012

```

你可以用 boxes 命令做到同样的功能。如下创建一个作为示例的 shell 脚本或者c程序：

```
#!/bin/bash
Purpose: Backup mysql database to remote server.
Author: Vivek Gite
Last updated on: Tue Jun, 12 2012

```

现在输入如下（将光标移到第二行，也就是以“Purpose: ...”开头的行）

```
3!!boxes

```

瞧，你就会看到如下的输出 :

```
#!/bin/bash
/****************************************************/
/* Purpose: Backup mysql database to remote server. */
/* Author: Vivek Gite           */
/* Last updated on: Tue Jun, 12 2012                */
/****************************************************/

```

这个短片将会给你介绍boxes命令:

参见

* boxes 帮助手册

---

via: <http://www.cyberciti.biz/tips/unix-linux-draw-any-kind-of-boxes-around-text-editor.html>

作者：Vivek Gite 译者：[zky001](https://github.com/zky001) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


开源新闻速递：BackBox Linux 4.6 发布

### 头条消息

今天没有什么重要消息。

### 版本更迭

* 基于 Ubuntu Kernel 4.2 的 BackBox Linux 4.6 [发布](https://backbox.org/portal/blog/backbox-linux-46-released)，更新了一些黑客工具。比如 Metasploit，wxHexEditor，SE Toolkit，DirSearch Web 路径扫描工具等。另一个新特性是，将 Ruby 更新到了2.2，修复了一些小的问题。老用户可以使用下列命令进行更新：`sudo apt-get update && sudo apt-get dist-upgrade &&sudo apt-get install -f` 。新用户可以从此处进行[下载](http://linux.softpedia.com/get/System/Operating-Systems/Linux-Distributions/Backbox-Linux-64079.shtml#download)。
![](/data/attachment/album/201605/28/195241qc2qniqaq3nc3br3.jpg)
* 基于 FreeBSD，专为防火墙和路由器功能定制的开源版本 pfSense 一周前发布了稳定版本 2.3.1 之后进行了首次更新，更新到 [2.3.1\_1 版本](https://blog.pfsense.org/?p=2068)，主要修复了Web GUI的安全问题，修复了另外的7个问题。Patrick Ungeheuer 发现了pfSense 存在的 Web GUI （图形用户接口)的安全问题，即 diag\_smart.php 和 diag\_routes.php 文件的命令注入漏洞。这个安全漏洞可以让低权限用户以 root 身份执行命令。pfSense 2.3.1\_1 就解决了这个问题。
* Ubuntu 16.04 LTS 发布庆功会将于7月26号举行，地点选在日本东京。
* 可以让你“衣锦夜行”的匿名 Linux 发行版 Tails 2.4 的第一个发行候选版本已经进行公开的 [beta 测试](https://tails.boum.org/news/test_2.4-rc1/index.en.html)了，最新版本将 Tor Browser 更新到了6.0，改善了非自动配置向导，实现了对 IPv4 协议分层发现路径 MTU 的支持，强化了防火墙和内核。
* Wine 1.9.11 发布测试版，对于 Direct3D 11 进行了多项改进，支持 DirectSound 混频。感兴趣的用户可以下载 Wine 1.9.11 的[源码](http://linux.softpedia.com/get/System/Emulators/Wine-148.shtml#download)自己编译。


猎头们怎么看开源

Summary: 与其说开源和大数据是一个行业，不如说他们是一个社区（community）。这也是为什么我现在特别想把我从开源中学到的东西分享给大家，特别是给那些刚刚踏入工作的新人。

![](/data/attachment/album/201605/29/161424b52s66c5225j50c2.png)

2012 年时候，我出席了一个开源社区的聚会，打那之后我就喜欢上了这个行业。

我做猎头很多年，现在我在 [Greythorn](http://www.greythorn.com/) 公司专门从事大数据方向招聘。我自己之前学习了几个月大数据，可是当我参加了 [OSCON](http://conferences.oreilly.com/oscon) 开源大会，才发现之前的学习多么低效率。OSCON 里聚集了非常多聪明的人，他们每个人都很愿意分享他们的心得。分享的原因不是他们想推销产品，纯粹是因为喜欢。

我很快意识到，与其说开源和大数据是一个行业，不如说他们是一个<ruby> 社区 <rp>  （ </rp> <rt>  community </rt> <rp>  ） </rp></ruby>。这也是为什么我现在特别想把我从开源中学到的东西分享给大家，特别是给那些刚刚踏入工作的新人。

### 为什么雇主喜欢开源<ruby> 贡献者 <rp>  （ </rp> <rt>  contributor </rt> <rp>  ） </rp></ruby>

我的许多客户跟我说过：一个人的技术虽然重要，但真心**喜欢**自己从事的工作更重要。如果你热爱自己的工作，即便老板不给加班工资你都忍不住想加班。

我的客户也经常问，“这个人没事儿的时候写代码吗？”“我能在哪儿找到他们的作品呢？”“他们有什么爱好呀？”这时候开源社区贡献者的优势就出来了，因为上面的问题就是给他们量身定做的。他们做的项目开源，这就是他们编码能力的例证。

### 为什么猎头在寻找开源贡献者

硬派科技行业猎头了解技术，知道自己在找一个什么样的人，这样的猎头也能正确的了解对象的技能。我发现，猎头们找到的最优秀的人才很多时候也在做开源，所以我们经常直接去开源社区寻找我们的目标。猎头们会告诉雇主，“我们找到的那个人喜欢和团队一起创造了不起的产品”，而这基本上是优秀雇主共同的要求。

所以说：如果你的项目目标是改变人类的未来，那当这些聪明人来到你的团队之后，他们自己就会爱上自己的工作。

### 开源贡献者如何得到更好的职业生涯呢

怎么让你的贡献更广为人知呢：把代码放到 Github 上；做开源项目；参加会议和研讨等等。做这些事情你会有意想不到的收获的。

可以尝试问一下自己：

* **你觉得所在的公司是否回馈开源社区这件事重要吗？**很多优秀的人才都强调这一点，回馈社区也会极大的提升他们对工作本身的满意度。
* **你在做产品是否基于开源软件？**基于开源软件的公司的文化氛围会与其他公司与众不同，这也是你选择职位时候需要考虑的问题。
* **你有没有特别想与之工作的人？**虽然你可以随时换项目，但如果团队里有你崇拜或者欣赏的人，那工作就棒极了。

假如你了解自己的人生追求，那么过滤掉那些不适合你的职位就简单多了；假如你有一个相熟的猎头，那找到相合的雇主和团队的机会就大多了。

虽然我自己不写代码，但我会把我从开源社区中学到的东西分享给大家。开源社区是由一大群聪明又乐于分享的人组成，我很开心我也是其中小小的一份子。

---

via: <https://opensource.com/business/16/5/open-source-recruiters-perspective>

作者：[Lindsey Thorne](https://opensource.com/users/lindsey-thorne) 译者：[eriwoon](https://github.com/eriwoon) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](https://linux.cn/) 荣誉推出


又一次 Mindcraft 事件？关于 Linux 内核安全性的批评

Summary: Linux 内核开发很少吸引像华盛顿邮报这样主流媒体的关注，内核社区在安全方面进展的冗长功能列表就更少人看了。所以当这样一个专题发布到网上，就吸引了很多人的注意

有道理，自由軟件社區只要能夠共同意識到問題所在，就能夠做出驚人的成就

性能和安全真的不能兼得吗？

就像进地铁或车站，如果你不设安防检查工作员，人流进出就顺溜溜哒；<br />
如果每个入口都设置安防检查员，要检查每个旅客，你觉得还顺畅不？

主要还是钱的问题。

果然是 鱼和熊掌啊

Linux 内核开发很少吸引像华盛顿邮报这样主流媒体的关注，内核社区在安全方面进展的冗长功能列表就更少人看了。所以当[这样一个专题](https://lwn.net/Articles/663338/)发布到网上，就吸引了很多人的注意（LCTT 译注：华盛顿邮报发表了一篇很长的[专题文章](http://www.washingtonpost.com/sf/business/2015/11/05/net-of-insecurity-the-kernel-of-the-argument/)，批评 Linux “没有一个系统性的机制以在骇客之前发现和解决安全问题，或引入更新的防御技术”，“Linux 内核开发社区没有一个首席安全官”等等）。关于这篇文章有不同的反应，很多人认为这是对 Linux 直接的攻击。文章背后的动机很难知道，但是从历史经验来看，它也可以看作对我们早就该前进的方向的一次非常必要的推动。

![](/data/attachment/album/201605/29/171217ic2rjg6g5i5xqjjy.jpg)

回顾一件昏暗遥远过去的事件 - 确切地说是在 1999 年 4 月。一家叫 Mindcraft 的分析公司发布了一份[报告](http://www.mindcraft.com/whitepapers/nts4rhlinux.html)显示 Windows NT 在 Web 服务器开销方面完胜 Red Hat Linux 5.2 加 Apache。Linux 社区，包括当时还[很年轻的 LWN](https://static.lwn.net/1999/features/MindCraft1.0.php3)，对此反应很迅速而且强烈。这份报告是微软资助的 FUD 的一部分，用来消除那些全球垄断计划的新兴威胁。报告中所用的 Linux 系统有意配置成低性能，同时选择了当时 Linux 并不能很好支持的硬件，等等。

在大家稍微冷静一点后，尽管如此，事实很明显：Mindcraft 的人，不管什么动机，说的也有一定道理。当时 Linux 确实在性能方面存在一些已经被充分认识到的问题。然后社区做了最正确的事情：我们坐下来解决问题。比如，单独唤醒的调度器可以解决接受连接请求时的[惊群问题](https://en.wikipedia.org/wiki/Thundering_herd_problem)。其他很多小问题也都解决了。在差不多一年里，内核在这类开销方面的性能已经有了非常大的改善。

这份 Mindcraft 的报告，某种意义上来说，往 Linux 屁股上踢了很有必要的一脚，推动整个社区去处理一些当时被忽略的事情。

华盛顿邮报的文章明显以负面的看法看待 Linux 内核以及它的贡献者。它随意地混淆了内核问题和其他根本不是内核脆弱性引起的问题（比如，AshleyMadison.com 被黑）。不过供应商没什么兴趣为他们的客户提供安全补丁的事实，就像一头在房间里巨象一样明显。还有谣言说这篇文章后面的黑暗势力希望打击一下 Linux 的势头。这些也许都是真的，但是也不能掩盖一个简单的事实，就是文章说的确实是真的。

我们会合理地测试并解决问题。而这些问题，不管是不是安全相关，能很快得到修复，然后再通过稳定更新的机制将这些补丁发布给内核用户。比起外面很多应用程序（自由的和商业的），内核的支持工作做的非常好。但是指责我们解决问题的能力时却遗漏了关键的一点：解决安全问题终究来说是一个打鼹鼠游戏。总是会出来更多的鼹鼠，其中有一些在攻击者发现并利用后很长时间我们都还不知道（所以没法使劲打下去）。尽管 Linux 的商业支持已经非常努力地在将补丁传递给用户，这种问题还是会让我们的用户很受伤 - 只是这并不是故意的。

关键是只是解决问题并不够，一些关心安全性的开发者也已经开始尝试做些什么。我们必须认识到，缺陷永远都解决不完，所以要让缺陷更难被发现和利用。这意思就是限制访问内核信息，绝对不允许内核执行用户空间内存中的指令，让内核去侦测整形溢出，以及 [Kee Cook 在十月底内核峰会的讲话](https://lwn.net/Articles/662219/)中所提出的其他所有事情。其中许多技术被其他操作系统深刻理解并采用了；另外一些需要我们去创新。但是，如果我们想充分保护我们的用户免受攻击，这些改变是必须要做的。

为什么内核还没有引入这些技术？华盛顿邮报的文章坚定地指责开发社区，特别是 Linus Torvalds。内核社区的传统就是相对安全性更侧重于性能和功能，在需要牺牲性能来改善内核安全性时并不愿意折衷处理。这些指责一定程度上是对的；好的一面是，因为问题的范围变得清晰，态度看上去有所改善。Kee 的演讲都听进去了，而且很明显让开发者开始思考和讨论这些问题了。

而被忽略的一点是，并不仅仅是 Linus 在拒绝有用的安全补丁。而是就没有多少这种补丁在内核社区里流传。特别是，在这个领域工作的开发者就那么些人，而且从没有认真地尝试把自己的工作整合到上游。要合并任何大的侵入性补丁，需要和内核社区一起工作，为这些改动编写用例，将改动分割成方便审核的碎片，处理审核意见，等等。整个过程可能会有点无聊而且让人沮丧，但这却是内核维护的运作方式，而且很明显只有这样才能在长时间的开发中形成更有用更可维护的内核。

几乎没有人会走这个流程来将最新的安全技术引入内核。对于这类补丁可能收到的不利反应，有人觉得也许会导致“寒蝉效应”，但是这个说法并不充分：不管最初的反应有多麻烦，多年以来开发者已经合并了大量的改动。而少数安全开发者连试都没试过。

他们为什么不愿意尝试？一个比较明显的答案是，几乎没有人会因此拿到报酬。几乎所有引入内核的工作都由付费开发者完成，而且已经持续多年。公司能看到利润的领域在内核里都有大量的工作以及很好的进展。而公司觉得和它们没关系的领域就不会这样了。为实时 Linux 的开发找到赞助支持的困难就是很明显的例子。其他领域，比如文档，也在慢慢萧条。安全性很明显也属于这类领域。可能有很多原因导致 Linux 落后于防御式安全技术，但是其中最关键的一条是，靠 Linux 赚钱的公司没有重视这些技术的开发和应用。

有迹象显示局面已有所转变。越来越多的开发人员开始关注安全相关问题，尽管对他们工作的商业支持还仍然不够。对于安全相关的改变已经没有之前那样的下意识反应了。像[内核自我保护项目](https://lwn.net/Articles/663361/)这样，已经开始把现有的安全技术集成进入内核了。

我们还有很长的路要走，但是，如果能有一些支持以及正确的观念，短期内就能有很大的进展。内核社区在确定了自己的想法后可以做到很让人惊叹的事情。幸运的是，华盛顿邮报的文章将有助于提供形成这种想法的必要动力。以历史的角度看，我们很可能会把这次事件看作一个转折点，我们最终被倒逼着去完成之前很明确需要做的事情。Linux 不应该再继续讲述这个安全不合格的故事了。

---

via: <https://lwn.net/Articles/663474/>

作者：Jonathan Corbet 译者：[zpl1025](https://github.com/zpl1025) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


开源新闻速递：Chrome OS 的一个替代品 NetOS

Summary: Gentoo Linux “选择版” Live DVD 镜像发布

gentoo竟然默认是用KDE。

我觉得这个还是办不了的，但是在国内可以。<br />
毕竟墙高

只希望chromeos兼容安卓app

### 头条消息

作为基于 Linux 内核的 Chrome OS 或 Chromium OS 的一个可能的替代品，Black Lab Software 即将[发行](http://www.pc-opensystems.com/2016/05/netos-enterprise-developer-preview-8-is.html)的 NetOS，使用了 Black Lab Linux OS 企业版中相同的技术。其第一个版本正在开发中。NetOS 的 80% 基于 Web，只有 20% 在本地，这样它的内核会更小，对文件和库的维护更少，大量的工作都由开发者在服务器端解决了。NetOS Enterprise Linux 8 基于Linux 4.2 内核，以及 Google Chrome 50，并且涵盖了其他的一些软件，比如 GIMP, Dropbox, Scribus, 和 Parole 媒体播放器，此外还有一些其他很棒的新特性。可以从网站[下载](http://www.pc-opensystems.com/2016/05/netos-enterprise-developer-preview-8-is.html) ISO 镜像抢先体验。

![](/data/attachment/album/201605/29/203735yo4o4bk4sgk2ivp2.jpg)

### 版本更迭

* 代号为“<ruby> 选择版 <rt>  Choice Edition </rt></ruby>”的 Gentoo Linux Live DVD 镜像[发布](https://wiki.gentoo.org/wiki/Project:RelEng/LiveDVD/20160514)，该版本使用了 GNU/Linux 最新的技术，比如基于 Linux 内核 4.5 、KDE Plasma 5.6 桌面环境、LibreOffice 5.1.2 办公套件、Mozilla Firefox 45.0.1 等。特别是对UEFI 机器以及 ZFS 的支持，是之前的版本所没有支持过的。可以从此处下载32位或者64位的[镜像](http://linux.softpedia.com/get/System/Operating-Systems/Linux-Distributions/Gentoo-Linux-879.shtml#download)文件。
![](/data/attachment/album/201605/29/203736lwdckz9aca789iii.jpg)
* 迈向 GNOME 3.22 的第二个快照版本 3.21.2 [发布](http://permalink.gmane.org/gmane.comp.gnome.devel.announce/465)。该版本并没有更新很多的核心组件或者应用，可能比较重要的改变是[对 Flatpak 软件包的支持](http://news.softpedia.com/news/gnome-software-package-manager-has-just-received-support-for-flatpak-packages-504397.shtml)。这只是 GNOME 3.22 的一个预览版本，不建议用户正式使用。GNOME 3.22 的发行版预计9月21号发布，敬请期待！


ALM：TypeScript / JavaScript 的下一代 IDE

Summary: TypeScript 是一种由微软开发的自由开源的编程语言。它是 JavaScript 的一个超集，而且实质上向这个语言添加了可选的静态类型和基于类的面向对象编程。

然后微软发布了vscode……

TypeScript 是一种由微软开发的自由开源的编程语言。它是 JavaScript 的一个超集，而且实质上向这个语言添加了可选的静态类型和基于类的面向对象编程等等。

如果你使用 TypeScript 开发项目，那么现在有个新的软件可以帮助到你。

![](/data/attachment/album/201605/29/210354ahejoqrb17qgpqrq.jpg)

[ALM](http://alm.tools/) 宣称它是“TypeScript 的下一代 IDE”，这款专为 TypeScript 设计的编辑器将会使得编程更快捷，JavaScript 开发者可以首先使用类似的 TypeScript 进行开发，然后再编译成浏览器所支持的 JavaScript 语言。

### ALM 安装很简单

要运行 ALM 这个开发工具，开发者只需要做两件事：一个可以工作的 Node.js 5 及其以上版本，一个 Google Chrome 浏览器。不支持 Firefox、 Vivaldi 和 Edge 等等其它浏览器。

然后只需要如下命令即可：

```
npm install alm -g
```

然后在终端运行 `alm` 即可。

要在 ALM 中打开文件，只需要切换到你的项目文件夹，然后运行 `alm .` 或 `alm -o .` 即可。第一个命令会在浏览器中打开一个可以访问你的项目的索引文件的 URL，然后就可以编辑了。第二个命令会自动在你的默认浏览器（chrome）中打开该 URL。

### 有许多非常酷的功能

ALM 的开发者 Basarat Ali Syed 给这个 IDE 中打包了很多功能，包括为 TypeScript 定制的格式高亮方案，支持选项卡、多面板、go-to 跳转功能、查找替换功能、实时文件格式化和实时项目格式化。

将来， ALM IDE 也会与内建的 AST 查看器、依赖查看器、命令搜索功能、光标历史、多监视器支持、错误面板、支持<ruby> 错误提示 <rp>  （ </rp> <rt>  errors on hover </rt> <rp>  ） </rp></ruby>、集成 Git、自动 TypeScript 构建和编译、实时预览 TypeScript 所输出的 JavaScript 。

你可以看看 Syed 放到文档站的动画 Gif：

![ALM IDE's multi-panel feature](/data/attachment/album/201605/29/210508b84gf5z8gacftd8g.gif "ALM IDE's multi-panel feature")

你可以[在 GitHub 上找到该项目](https://github.com/alm-tools/alm)，别忘记了 star 它！


开源新闻速递：新版 KDE 分区管理器支持管理 LUKS 分区

Summary:
Parsix GNU/Linux 进行了安全更新；
Linux  4.7 内核发布了第一个 RC 版本

gparted被比下去了啊

### 头条消息

专门为 KDE Plasma 5桌面环境设计的分区管理软件 KDE 分区管理器 2.2.0 [发布](https://stikonas.eu/wordpress/2016/05/27/kde-partition-manager-2-2-0/)，在这个版本中提供了大量的 LUKS 加密文件系统支持。它允许用户关闭或打开使用 LUKS 加密的卷，也支持加密文件系统重新划分大小，还可以移动关闭的 LUKS 加密卷、移除打开的 LUKS 卷、检查内部文件系统的错误等等。这是目前为止唯一一个支持 LUKS 加密文件系统调整的开源软件。

![](/data/attachment/album/201605/30/221113whx44oo2pvz2vjr1.jpg)

### 版本更迭

* 代号为“Atticus”的 Parsix GNU/Linux 8.5 和即将发行的代号为“Erik”的 Parsix GNU/Linux 8.10 最近都对核心组件的[安全问题](http://www.parsix.org/wiki/Security)进行了修复。包括 expat, libgd2, libndp, ImageMagick, libidn, jansson, IceDove, libarchive, QEMU, Wireshark, librsvg, WebSVN, libxstream-java, xerces-c, swift-plugin-s3, and atheme-services。还没有进行更新的“Atticus”用户可以进行更新了。
* Parsix GNU/Linux 的开发者发布了官方的 USB 镜像，允许用户使用 USB 闪存棒快速在自己机器上部署最新的 Parsix GNU/Linux 发行版，并且他们承诺很快就会提供对64位机器上 UEFI 的支持。与此同时，“Erik”的开发正在进行中，最近的构建版本采用 GNOME 3.20.1 桌面环境，鉴于 GNOME 3.20.2 已经出来了，我们期待看到采用最新 GNOME 桌面环境的发行版。
![](/data/attachment/album/201605/30/221114kee2uvvys21uh4zh.jpg)
* 面向树莓派3和2的 Sabayon ARM 16.06 媒体中心版[发布](https://www.sabayon.org/article/special-release-sabayon-1606-arm)。与此同时，Sabayon ARM 16.06 的基础版镜像采用了最新的稳定版 Linux 4.4 内核。[点此下载](http://mirror.it.sabayon.org/iso/monthly/)媒体中心版和基础版镜像文件。
![](/data/attachment/album/201605/30/221115x27a386nw4mwtapo.jpg)
* Linux 4.6 内核已经发布两周了，Linus Torvalds 为我们[介绍](http://lkml.iu.edu/hypermail/linux/kernel/1605.3/02880.html)了下一个Linux内核分支 Linux 4.7 的开发周期。目前第一个发行候选版本已经可以从[官网](https://www.kernel.org/)进行下载了。这一版最显著的一个特性是对 VFS （<ruby> 虚拟文件系统 <rp>  （ </rp> <rt>  Virtual File System </rt> <rp>  ） </rp></ruby>）层的重大修改，它可能会影响所有 Linux 内核支持的文件系统。
* 在NetBSD 7.0发布7个月后，NetBSD 7.0.1 [发布](http://www.netbsd.org/releases/formal-7/NetBSD-7.0.1.html)，修复了核心组件的许多安全漏洞，改善了对 ODROID-C1 单板计算机的支持。
* MKVToolNix 9.2.0 [发布](https://www.bunkus.org/blog/2016/05/mkvtoolnix-v9-2-0-released/)，这一版没有重大特性的更改，尽管如此，还是建议用户进行更新。


Linux 给了我所有所需的工具

哈哈哈哈哈哈哈

腻害

支持！！支持！！支持！！

用于工作 用于成长

这是什么？散文？

看他网站，在菲律宾。这种质量的文章就不要发了吧？小编在干嘛？

小学生日记也发出来？

buy-telegram-members.com

What is the best shopping site for Telegram?

1 – A site that has online payment and a trust symbol

2 – A site that will immediately deliver your membership.

3 – A site that has strong support for solving your problems.

4 – A site with a positive poll is much more than a negative survey.

5 – Finally, compare prices to other sites to avoid additional costs.

![](/data/attachment/album/201605/31/081907p2q535d3swwgw5y6.png)

[Linux](https://opensource.com/resources/what-is-linux) 就在我们身边。它以 Android 的形式[存在我们的手机中](http://www.howtogeek.com/189036/android-is-based-on-linux-but-what-does-that-mean/)，它[用在国际空间站中](http://www.extremetech.com/extreme/155392-international-space-station-switches-from-windows-to-linux-for-improved-reliability)，它[还是互联网的主要支柱](https://www.youtube.com/watch?v=JzsLkbwi1LA)，可是迄今为止很多人从未留意过它。对 Linux 的探索是一种很有成就感的尝试。很多人都在 Opensource.com [分享过他们与 Linux 的故事](https://opensource.com/tags/my-linux-story)。现在，轮到我了。

我依然记得我在 2008 年第一次探索 Linux 的时刻。协助我探索 Linux 的人是我的父亲，Socrates Ballais。他是菲律宾塔克洛班的一名经济学专家，也是一个技术狂热者。他教会了我许多计算机技术方面的知识，但只提倡我将 Linux 作为 Windows 崩溃后的备用操作系统。

### 从前的日子

在我们在家中购置电脑之前，我曾是一个 Windows 用户。我使用电脑玩游戏，制作文档，做那些小孩子都会用电脑做的事。我不知道什么是 Linux，更不知道它的用处。在那个时候，电脑在我心中的象征就是一个 Windows 的商标。

当我们买到第一台电脑时，我爸爸在上面安装了 Linux ([Ubuntu](http://ubuntu.com/) 8.04)。充满了好奇心的我，第一次引导进入了那个操作系统。我被它的用户界面震惊了。它非常漂亮，而且我发现它对用户很友好。在那之后的一段时间，我只会使用 Linux 它内置的几款游戏。我还是会在 Windows 中做我的家庭作业。

### 第一次安装

4 年后，我决定为家里的电脑重新安装 Windows。我同时毫不犹豫地安装了 Ubuntu。从那次开始，我（再次）爱上了 Linux。随着时间推移，我慢慢适应了 Ubuntu，还会无意地将它推荐给我的朋友。当我拿到我的第一台笔记本电脑时，我立刻在上面安装了它。

### 现在

如今，Linux 是我的默认操作系统。当我需要使用电脑做一些工作时，我会在 Linux 中完成。至于文档和幻灯片，我会通过 [Wine](https://www.winehq.org/) 来使用微软的 Office 办公软件。我会用 [Chrome 和 Firefox](https://www.google.com/chrome/browser/desktop/index.html) 来满足我的上网需要，会用 [Geary](https://wiki.gnome.org/Apps/Geary) 来收发邮件。你可以使用 Linux 来做很多很多事情。

我的大多数——并不是全部——编程工作都会在 Linux 中完成。像 [Visual Studio](https://www.visualstudio.com/en-us/visual-studio-homepage-vs.aspx) 和 [XCode](https://developer.apple.com/xcode/) 这样的基本集成开发环境 (IDE) 的缺乏教会我这个程序员如何变得灵活、如何去学习更多知识。现在，我只需要一个文本编辑器和一个编译器/解释器就可以开始编程。只有当 IDE 是我完成手头上的任务的最佳最佳工具时，我才会使用它。总而言之，Linux 给了我开发软件所需要的一切工具。

现在，我是一个名叫 [Creatomiv Studios](https://www.facebook.com/CreatomivStudios/) 的初创公司的联合创始人和首席技术官。我使用 Linux 来编写我们的最新产品 Basyang 的后端服务器代码。我还是一个业余摄影家，使用 [GIMP](https://www.gimp.org/) 和 [Darktable](http://www.darktable.org/) 来编辑、管理照片。至于团队沟通，我会使用 [Telegram](https://telegram.org/)。

### Linux 之美

很多人认为 Linux 只是为那些喜欢解决复杂问题或者在命令行中工作的人而生的操作系统。还有些人会认为它就是一个缺乏公司支持维护的垃圾。不过，我认为 Linux 是一个完美的操作系统，也是一个为创造而生的绝佳工具。所以我热爱 Linux，同时希望看到它继续成长。

---

via: <https://opensource.com/life/16/3/my-linux-story-sean-ballais>

作者：[Sean Francis N. Ballais](https://opensource.com/users/seanballais) 译者：[StdioA](https://github.com/StdioA) 校对：[wxy](https://github.com/wxy)


如何用开源经历为你的简历增加光彩

热爱开源，热爱生活！

![](/data/attachment/album/201605/31/111946k7zjg0iekgz78bqi.jpg)

在这篇文章中，我将会分享我的方法，让大家利用开源贡献在技术领域的求职中脱颖而出，成为强有力的候选者。

凡事预则立，不预则废。在你即将进入一个新的领域或者正准备熬夜修订你的简历之前，清楚地定义你正在寻找的工作的特征是值得的。你的简历是一部有说服力的作品，因此你必须了解你的观众，从而让它发挥出所有的潜力。看你简历的可能是任何需要你的技能并且能在预算之内聘用你的人。当编辑简历的时候，读一读你的简历上的内容，同时想象一下，以他们的角度怎么看待这份简历。你看起来像是一个“你”将会聘用的候选人吗？

我个人认为，对于目标职位的理想候选人所表现出来的关键特征，列出一张清单是很有帮助的。我结合了个人经验、阅读工作招聘信息、询问相同角色的同事等方面来收集这个清单。LinkedIn 和各种会议是寻求一些乐意提供这种建议的人的很好的地方。一些人喜欢谈论他们自己，那么通过邀请他们讲述他们自己的一些故事可以帮助你来拓展你的知识面，这样大家都会感觉很好。当你和其他人谈论他们的职业路线时，你不仅将会明白怎样去得到你想要从事的工作，而且还能知道你应该避免那些容易让你失去工作机会的特征或行为。

例如，对于一个不太资深的工作位置来说，关键特征列表可能如下所示：

### 技术方面：

* 拥有 CI (持续集成) 方面的经验，特别是 Jenkins
* 深厚的脚本编写背景，如 Python 和 Ruby
* 精通 Eclipse IDE
* 基本的 Git 和 Bash 知识

### 个人而言：

* 自我驱动的学习者
* 良好的交流和文档技巧
* 在团队开发方面富有经验（团队成员）
* 精通事件跟踪的工作流

### 尽管去申请职位

记住，你没有必要为了得到一份工作而去满足上面的工作描述列表中列出的每个标准。

工作细节（JD）描述了这个角色，让你一开始就知道你即将签约并为之工作几年的公司的全部信息，并且这份工作并不会让你觉得有什么挑战性，或者要求你去拓展你的技能。如果你对你无法满足清单上的技能列表而感到紧张，那么检查一下自己是否有来自其他方面的经历并能与之媲美的技能。例如，即使有些人从来没有使用过 [Jenkins](https://jenkins-ci.org/)，那他也可能从之前使用过 [Buildbot](http://buildbot.net/) 或者 [travis CI](https://travis-ci.org/) 的项目经验中明白持续集成测试的原则。

如果你正在申请一家大型公司，他们可能拥有一个专门的部门和一套完整的筛选过程来确保他们不会聘用任何不能胜任职位的候选人。也就是说，在你求职的过程中，你所能做的只是提交申请，而决定是否拒绝你是公司管理层的工作。不要过早地将工作拒之门外。

现在你已经知道了你的任务是什么，并且还知道你将需要让面试官印象深刻的技巧。下一步要做的取决于你已有的经验。

### 制造已经存在的事物之间的关联

列出一张你过去几年曾经参与过的所有项目。下面是一条快速得到这张清单的方法，跳转到你的 Github profile 中的**Repositories**标签页，并且过滤掉 fork 过来的项目。除此之外，检查下你的清单上是否有曾经处于领导地位的[Organizations](https://github.com/settings/organizations)。如果你已经有了一份简历，那么请确保你已经将你所有的经历都列在了上面。

考虑下任何一个你曾经作为一个潜在的领导经历并拥有过特权的 IRC 频道。检查下你的 Meetup 和Eventbrite 账号，并将你曾经组织过或者作为志愿者参与过的活动添加到你的清单上。浏览你前几年的日程并且标注所有志愿服务，或者有作为导师的经历，又或者参与过的公共演讲。

现在进入了比较艰难的环节了，将清单上列出的必备技能与个人经历列表上的内容一一对照，我喜欢给该工作所需要的每个特征用一个字母或者数字作为标记，然后在每一段你经历或参与过并表现出了某一特征的地方标记相同的符号。当你不太确定的时候，那就毫不犹豫地标记上它，尽管这样做更像是在吹嘘，但也好过显示出你的无能。

在我们写简历的时候常常被这样的情况所困扰，就是我们不愿冒着过分吹嘘自己的技能的风险。通常应该这样去想，“那些组织了聚会的人会表现出了更好的领导才能和计划技巧吗？”，而不是“当我组织了这个聚会的时候我是否展示出了这些技巧？”。

如果你已经充分了解了你在过去的一两年里的业余时间都是怎么度过的，而且你写了很多代码，那么你可能现在正面临着一个令人奇怪的问题，你已经拥有了太多的经验以至于一张纸的简历已经无法容纳下这些经验了。那么，如果那些列在你的清单上的经验，但无法证明你尝试去表现的任何技能的话，那么请扔掉它们吧。如果这份已经被缩短的简历清单上的内容仍然超过一张单页纸的容量的话，那么将你的经验按照一定的优先级排序，例如根据与所需技术的相关经历或丰富经验。

在这一方面，显而易见，如果你想要磨练一个独特的技能，那么你就需要一个不错的经历。考虑使用一个类似 [OpenHatch](http://openhatch.org/) 的问题聚合器，并用它来寻找一个通过使用你从没使用过的工具和技术来锻炼你的技能的开源项目。

### 让你的简历更加漂亮

一份简历是否美观取决于它的简洁度、清晰度和布局。每一段经历都应该通过足够的信息来展示给读者，并让他们立刻明白为什么你要将它包含进去，而且恰到好处。每种类型的信息都应该使用一致的文档格式来表示，一份含有斜体格式的日期或者右对齐的或者与整体风格不协调的部分绝对会让人分心。

使用工具来给你的简历排版会使之前设定的目标更加容易实现。我喜欢使用 [LaTeX](https://www.latex-project.org/)，因为它的宏系统能够使可视化一致性变得更加容易，并且大量的面试官都能一眼就认出它。你的工具的选择可能是 [LibreOffice](https://www.libreoffice.org/download/libreoffice-fresh/) 或者 HTML，这取决于你的技能和你希望怎样去发布你的简历。

记住一点，一份以电子方式提交的简历可以通过关键字被浏览到。因此，当你需要描述你的工作经历的时候使用和工作招聘告示一样的英文缩写对你的求职会有很大的帮助。为了让你的简历更加容易被面试官看到，首先就要放上最重要的信息。

程序员通常难以在为文档排版时量化平衡和布局。我最喜欢的修改和评估我的文档中的空格是否处于正确位置的技术，就是全屏显示我的 PDF 或者打印出来，然后在镜子里面查看它。如果你正在使用 LibreOffice Writer，保存一份你的简历的副本，然后将你的简历中的字体换成一种你看不懂的语言。这两种技术都强制将你从阅读的内容中脱离出来，让你以一种新的方式查看文档的整体布局。他们把你从一个“那句话措辞不当！”这样的批评转到了注意如“在这行上只有一个字，看起来挺逗”之类的事情。

最后，再次检查你的简历是否在它将要的展示的多媒体上看起来完全正确。如果你以网页的形式发布它，那么在不同屏幕大小的浏览器中测试它的效果。如果它是一份 PDF 文档，那么在你的手机或者你的朋友的电脑上打开它，并确保它所需要的字体都是可用的。

### 接下来的步骤

最后，不要让你辛苦做出来的简历内容浪费了，将它完整的复制到你的 LinkedIn 帐号上（完全使用招聘公告中的流行词），然后毫无疑问招聘人员就会找到你了。尽管他们描述的工作内容并不是恰好适合你，但是你可以利用他们的时间和兴趣来得到关于你的简历中有哪些地方好与不好的反馈信息。

---

via: <https://opensource.com/business/16/2/add-open-source-to-your-resume>

作者：[edunham](https://opensource.com/users/edunham) 译者：[kylepeng93](https://github.com/kylepeng93) 校对：[mudongliang](https://github.com/mudongliang)，[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


开源新闻速递：LinuxCon Japan 2016 将在东京召开

Summary: Tor Browser 6.0 发布；

### 头条消息

![](/data/attachment/album/201605/31/150214kurjhehrujrnrnrr.jpg)

[LinuxCon Japan 2016](http://events.linuxfoundation.org/events/linuxcon-japan) 和 [ContainerCon Japan 2016](http://events.linuxfoundation.org/events/containercon-japan) 即将在 [7 月 13 日 - 15 日](http://events.linuxfoundation.org/events/linuxcon-japan/program/schedule)于日本东京召开。Linus Torvalds 会出席。

期待已久的 Ubuntu 手机和平板设备上的 OTA-11 更新指日可待。这个版本中最期待功能可能是支持 Aethercast 技术的无线显示技术，也就是说，Ubuntu 手机/平板可以不用线缆连接到显示器即可使用桌面显示器了（这个功能目前只有魅族 PRO 5 支持）。其次，这个更新中会使用网络管理器 1.2，其 MAC 地址随机技术可以避免手机在 Wi-Fi 环境中被跟踪。另外，它的Web 浏览器改善了各个厂商设备上的 Google Hangouts 用户体验，还会降低了后台运行的选项卡的内存占用。

![](/data/attachment/album/201605/31/150743ss14r0isggrxjgcr.jpg)

### 版本更迭

* 基于 [Firefox 45-ESR](https://www.mozilla.org/en-US/firefox/45.0/releasenotes/) 的 Tor Browser 6.0 发布，修复了一些安全问题，同时提供了对 HTML5 更好支持。值得一提的是，Tor Browser 6.0 告别了 SHA-1 证书，提供了更好的更新机制。现在可以下载使用咯。
![](/data/attachment/album/201605/31/150743jnaxcw3dv3uqdqrc.png)
* 基于 CentOS 7 Linux 的 Koozali SME Server 10 操作系统第一个 Alpha 版本[发布](https://lists.contribs.org/pipermail/updatesannounce/2016-May/000453.html)。SME Server 是为各种中小型企业设计的 GNU/Linux 发行版。
* Mesa 12.0.0 3D [宣布](https://lists.freedesktop.org/archives/mesa-announce/2016-May/000215.html)开始进行开发，第一个发行候选版本可以下载测试了。
* 基于 Ubuntu 16.04 LTS 的 ExTiX 16.3 LXQt [发布](http://www.extix.se/?p=161)，搭载了 Linux 4.6 内核，采用了轻量级的 LXQt 0.10.0 桌面环境，使用 Google Chrome 作为默认浏览器。


开源新闻速递：snap 软件包封装工具 Snapcraft 2.9 发布

Summary:
深度操作系统发布 15.2；
著名的开源、自由、跨平台的绘画软件 Krita 发布了 3.0

test

### 头条消息

Canonical 为了推动其 snap 软件包格式，不但将其用在 Ubuntu 16.04 LTS 中，还对创建 snap 软件包的工具进行了更新，以期让更多的开发者将他们维护的软件包打包成 snap 格式。今天，Snapcraft [发布](https://launchpad.net/snapcraft/+milestone/2.9)了 2.9。这一版本提供了实验性的 YAML 属性 “confinement” 和 “epoch” 的支持。

![](/data/attachment/album/201606/01/195916m855shzc8u5au3q7.jpg)

可以使用下面命令来安装Snapcraft 2.9：

```
sudo apt update
sudo apt install snapcraft
sudo apt install snapcraft-examples
```

深度操作系统发布了 15.2 版本，它采用了全新的启动器展示方式和直观的搜索，增加安全启动支持，首次采用由深度内核小组进行优化编译的4.4 LTS内核，系统性能和资源占用均得到了显著提升；同时，本次版本预装广受欢迎的网易云音乐和更稳定的新版CrossOver 15。[更多详情](/article-7414-1.html)。

### 版本更迭

* 下一代分布式独立图形安装框架 Calamares 2.2.3 [发布](https://calamares.io/calamares-2.2.3-is-out/)。这一版本修复了几个 bug，增加了对 Qt 5 GUI 工具套件的支持，解决了 KPMcore 构建过程中的问题，改善了 unpackfs 模块的错误报告体验。 增加了对 locale.gen 文件的配置支持以及对不同基于 Debian 的 GNU/Linux操作系统上位置选择的支持。可以从网上进行[下载](https://github.com/calamares/calamares/releases/download/v2.2.3/calamares-2.2.3.tar.gz)了。
![](/data/attachment/album/201606/01/195917hmuen2nzv66z2262.jpg)
* 基于 Linux 的信息亭操作系统 Porteus Kiosk 4.0.0 Web Kiosk [发布](http://porteus-kiosk.org/news.html#160530)。这一版本搭载了 Linux 内核 4.4.11 LTS，基于 Mozilla Firefox 45.1.1 ESR 和 Google Chrome 50.0.2661.102 浏览器。Porteus Kiosk 4.0.0 不再对32位的 Chrome 浏览器继续支持， Tomasz Jokiel 说，“我们从现在起不再提供对32位机器的支持了”。Porteus Kiosk 4.0.0 的配置面板中加入了一个新的选项，允许用户自己选择一个拾音装置作为默认的麦克风，还有一个很棒的功能就是可以定时从一个给定的路径下载屏保幻灯片。
![](/data/attachment/album/201606/01/195918rb0tma71gz6e0700.jpg)
* 经过6个月的开发，著名的开源、自由、跨平台的绘画软件 Krita [发布](https://krita.org/item/krita-3-0-released/)了 3.0。完全移植了下一代的 Qt 5 技术，这个版本最显著的特性是对内置动画的支持，以及对大型画布和画刷的支持。目前已经可以从网上进行[下载](http://files.kde.org/krita/3/windows/krita-3.0-x64.zip)了。
![](/data/attachment/album/201606/01/195919yfdpha01ja0j667d.jpg)


LFCS 系列第八讲：管理用户和用户组、文件权限和属性以及启用账户 sudo 访问权限

Summary: 对于系统管理员来说，高效能的用户和文件管理技能是非常必要的。

如何参加（LFCS）认证？

同问！

PAM (Pluggable Authentication Modules)这段翻译在哪里啊

这段想必是原文刚刚增加的。。我们翻译、发布时都没有。不过确实关于 PAM 的介绍很少，这段值得翻译过来。

对于系统管理员来说，高效能的用户和文件管理技能是非常必要的。

去年八月份，Linux 基金会发起了全新的 LFCS（<ruby> Linux 基金会认证系统管理员 <rp>  （ </rp> <rt>  Linux Foundation Certified Sysadmin </rt> <rp>  ） </rp></ruby>）认证，旨在让世界各地的人能够参与到中等水平的 Linux 系统的基本管理操作的认证考试中去，这项认证包括：维护正在运行的系统和服务的能力、全面监控和分析的能力以及何时向上游团队请求支持的决策能力。

![Linux Users and Groups Management](/data/attachment/album/201606/02/105758vipbifhdz3htvix3.png)

*第八讲： Linux 基金会认证系统管理员*

请看以下视频，里边将描述 LFCS 认证程序。

本讲是系列教程的第八讲，在这一讲中，我们将引导你学习如何在 Linux 管理用户和用户组权限的设置，这些内容是 LFCS 认证的必备知识。

由于 Linux 是一个多用户的操作系统（允许多个用户通过不同主机或者终端访问一个独立系统），因此你需要知道如何才能有效地管理用户：如何添加、编辑、禁用和删除用户账户，并赋予他们足以完成自身任务的必要权限。

（LCTT 译注：本篇原文章节顺序有误，根据理解做了调整。）

### 添加用户账户

添加新用户账户，你需要以 root 运行以下两条命令中的任意一条：

```
# adduser [new_account]
# useradd [new_account]

```

当新用户账户添加到系统时，会自动执行以下操作：

1. 自动创建用户家目录（默认是 /home/username）。
2. 自动拷贝下列隐藏文件到新建用户的家目录，用来设置新用户会话的环境变量。

```
.bash_logout
.bash_profile
.bashrc

```
3. 自动创建邮件缓存目录 /var/spool/mail/username。
4. 自动创建与用户名相同的用户组。

#### 理解 /etc/passwd 中的内容

/etc/passwd 文件中存储了所有用户账户的信息，每个用户在里边都有一条对应的记录，其格式（每个字段用冒号隔开）如下：

```
[username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell]

```

* 字段 [username] 和 [Comment] 是不言自明的。
* 第二个字段中 x 表明通过用户名 username 登录系统是有密码保护的， 密码保存在 /etc/shadow 文件中。
* [UID] 和 [GID] 字段用整数表示，代表该用户的用户标识符和对应所在组的组标志符。
* 字段 [Home directory] 为 username 用户家目录的绝对路径。
* 字段 [Default shell] 指定用户登录系统时默认使用的 shell。

#### 理解 /etc/group 中的内容

/etc/group 文件存储所有用户组的信息。每行记录的格式如下：

```
[Group name]:[Group password]:[GID]:[Group members]

```

* [Group name] 为用户组名称。
* 字段 [Group password] 为 x 的话，则说明不使用用户组密码。
* [GID] 与 /etc/passwd 中保存的 GID 相同。
* [Group members] 用户组中的用户使用逗号隔开。

![Add User Accounts in Linux](/data/attachment/album/201606/02/105800t2ooygdsttwnyk4w.png)

*添加用户账户*

#### 修改用户信息

添加用户账户之后，你可以使用 usermod 命令来修改用户信息中的部分字段，该命令基本语法如下：

```
# usermod [options] [username]

```

**设置账户的过期时间**

通过 –expiredate 标记后边接 年-月-日 格式的日期，如下：

```
# usermod --expiredate 2014-10-30 tecmint

```

**将用户添加到其他组**

使用 -aG 或者 –append –groups 选项，后边跟着用户组，如果有多个用户组，每个用户组之间使用逗号隔开。

```
# usermod --append --groups root,users tecmint

```

**改变用户家目录的默认位置**

使用 -d 或者 –home 选项，后边跟着新的家目录的绝对路径。

```
# usermod --home /tmp tecmint

```

**改变用户的默认 shell**

使用 –shell 选项，后边跟着新 shell 的路径。

```
# usermod --shell /bin/sh tecmint

```

下面，我们一次运行上述命令：

```
# usermod --expiredate 2014-10-30 --append --groups root,users --home /tmp --shell /bin/sh tecmint

```

![usermod Command Examples](/data/attachment/album/201606/02/105804k9wmu58zpxwbvsvb.png)

*usermod 命令例示*

扩展阅读

* [15 useradd Command Examples in Linux](http://www.tecmint.com/add-users-in-linux/)
* [15 usermod Command Examples in Linux](http://www.tecmint.com/usermod-command-examples/)

#### 锁定和解锁账户

对于已有用户账户，我们还可以：

**通过锁定密码来禁用账户**

使用 -L （大写 l）或者 –lock 选项来锁定用户密码。

```
# usermod --lock tecmint

```

**解锁用户密码**

使用 –u 或者 –unlock 选项来解锁我们之前锁定的账户。

```
# usermod --unlock tecmint

```

![Lock User in Linux](/data/attachment/album/201606/02/105808v110t32x0pg935xx.png)

*锁定用户账户*

#### 删除用户账户

你可以通过 userdel --remove 命令来删除用户账户。这样会删除用户拥有的家目录和家目录下的所有文件，以及邮件缓存目录。

```
# userdel --remove [username]

```

#### 用户组管理

每次添加新用户，系统会为该用户创建同名的用户组，此时用户组里边只有新建的用户，其他用户可以随后添加进去。建立用户组的目的之一，就是为了通过对指定资源设置权限来完成对这些资源和文件进行访问控制。

比如，你有下列用户：

* user1 (主组 user1)
* user2 (主组 user2)
* user3 (主组 user3)

他们都需要对你系统里边某个位置的 common.txt 文件，或者 user1 用户刚刚创建的共享进行读写。你可能会运行下列命令：

```
# chmod 660 common.txt
或
# chmod u=rw,g=rw,o= common.txt [注意最后那个 = 号和文件名之间的空格]

```

然而，这样仅仅给文件所属的用户和用户组（本例为 user1）成员的提供了读写权限。你还需要将 user2 和 user3 添加到 user1 组，打这样做也将 user1 用户和用户组的其他文件的权限开放给了 user2 和 user3。

这时候，用户组就派上用场了，下面将演示怎么做。

**显示用户所属的用户组**

```
# groups tecmint
# id tecmint

```

**为需要对指定文件进行读写的多个用户建立用户组**

运行下列几条命令来完成：

```
# groupadd common_group # 添加新用户组
# chown :common_group common.txt # 将 common.txt 的用户组修改为 common_group
# usermod -aG common_group user1 # 添加用户 user1 到 common_group 用户组
# usermod -aG common_group user2 # 添加用户 user2 到 common_group 用户组
# usermod -aG common_group user3 # 添加用户 user3 到 common_group 用户组

```

#### 删除用户组

通过以下命令删除用户组：

```
# groupdel [group_name]

```

属于这个 group\_name 用户组的文件是不会被删除的，而仅仅是删除了用户组。

### Linux 文件权限

除了我们在 [LFCS 系列第三讲：归档/压缩文件及目录、设置文件属性和搜索文件](/article-7171-1.html) 中说到的基本的读取、写入和执行权限外，文件还有一些不常用却很重要的的权限设置，有时候把它当做“特殊权限”。

就像之前我们讨论的基本权限，这里同样使用八进制数字或者一个字母（象征性符号）表示该权限类型。

**理解 Setuid 位**

当为可执行文件设置 setuid 位之后，用户运行程序时会继承该程序属主的有效特权。由于这样做会引起安全风险，因此设置 setuid 权限的文件及程序必须尽量少。你会发现，当系统中有用户需要访问属于 root 用户的文件是所运行的程序就带有了 setuid 权限。

也就是说，用户不仅仅可以运行这个可执行文件，而且能以 root 权限来运行。比如，让我们来看看 /bin/passwd 的权限，这个可执行文件用于改变账户的密码，修改 /etc/shadow 文件。超级用户可以改变任意账户的密码，但是其他用户只能改变自己账户的密码。

![passwd Command Examples](/data/attachment/album/201606/02/105809nvorvmbg6moohx9k.png)

*passwd 命令例示*

因此，所有用户都有权限运行 /bin/passwd，但只有 root 用户可以指定改变指定用户账户的密码。其他用户只能改变其自身的密码。

![Change User Password in Linux](/data/attachment/album/201606/02/105810xz7n0rzjpi0i397e.png)

*修改用户密码*

```
# chmod o+u [filename]

```

以八进制形式来设置 setuid 位，在当前基本权限（或者想要设置的权限）前加上数字 4 就行了。

```
# chmod 4755 [filename]

```

**理解 Setgid 位**

设置 setgid 位之后，真实用户的有效 GID 变为属组的 GID。因此，任何用户都能以属组用户的权限来访问文件。另外，当目录置了 setgid 位之后，新建的文件将继承其所属目录的 GID，并且新建的子目录会继承父目录的 setgid 位。通过这个方法，你能够以一个指定的用户组身份来访问该目录里边的文件，而不必管文件属主的主属组。

```
# chmod g+s [filename]

```

以八进制形式来设置 setgid 位，在当前基本权限（或者想要设置的权限）前加上数字 2 就行了。

```
# chmod 2755 [filename]

```

**给目录设置 Setgid 位**

![Add Setgid in Linux](/data/attachment/album/201606/02/105812pcxgamj3xmj9t4mv.png)

*给命令设置 setgid 位*

**理解<ruby> 黏连 <rp>  （ </rp> <rt>  Sticky </rt> <rp>  ） </rp></ruby>位**

文件设置了黏连位是没有意义，Linux 会忽略该位。如果设置到目录上，会防止其内的文件被删除或改名，除非你是该目录或文件的属主、或者是 root 用户。

```
# chmod o+t [directory]

```

以八进制形式来设置黏连位，在当前基本权限（或者想要设置的权限）前加上数字 1 就行了。

```
# chmod 1755 [directory]

```

若没有黏连位，任何有权限读写目录的用户都可删除和重命名其中的文件。因此，黏连位通常出现在像 /tmp 之类的目录，这些目录是所有人都具有写权限的。

![Add Stickybit in Linux](/data/attachment/album/201606/02/105816z5vxtxdkl5al5iix.png)

*给目录设置黏连位*

### Linux 特殊文件属性

文件还有其他一些属性，用来做进一步的操作限制。比如，阻止对文件的重命名、移动、删除甚至是修改。可以通过使用 [chattr 命令](http://www.tecmint.com/chattr-command-examples/) 来设置，并可以使用 lsattr 工具来查看这些属性。设置如下：

```
# chattr +i file1
# chattr +a file2

```

运行这些命令之后，file1 成为不可变状态（即不可移动、重命名、修改或删除），而 file2 进入“仅追加”模式（仅在追加内容模式中打开）。

![Protect File from Deletion](/data/attachment/album/201606/02/105819pgnnciuyn4knu0g4.png)

*通过 Chattr 命令来包含文件*

### 访问 root 账户并启用 sudo

访问 root 账户的方法之一，就是通过输入：

```
$ su

```

然后输入 root 账户密码。

倘若授权成功，你将以 root 身份登录，工作目录则是登录前所在的位置。如果是想要一登录就自动进入 root 用户的家目录，请运行：

```
$ su -

```

然后输入 root 账户密码。

![switch user by su ](/data/attachment/album/201606/02/105820xh7rhf72ar3z320e.png)

*用户通过 su 切换*

执行上个步骤需要普通用户知道 root 账户的密码，这样会引起非常严重的安全问题。于是，系统管理员通常会配置 sudo 命令来让普通用户在严格控制的环境中以其他用户身份（通常是 root）来执行命令。所以，可以在严格控制用户的情况下，又允许他运行一条或多条特权命令。

* 扩展阅读：[Difference Between su and sudo User](http://www.tecmint.com/su-vs-sudo-and-how-to-configure-sudo-in-linux/)

普通用户通过他自己的用户密码来完成 sudo 授权。输入命令之后会出现输入密码（并不是超级用户密码）的提示，授权成功（只要赋予了用户运行该命令的权限）的话，指定的命令就会运行。

系统管理员必须编辑 /etc/sudoers 文件，才能为 sudo 赋予相应权限。通常建议使用 visudo 命令来编辑这个文件，而不是使用文本编辑器来打开它。

```
# visudo

```

这样会使用 vim（你可以按照 [LFCS 系列第二讲：如何安装和使用纯文本编辑器 vi/vim](/article-7165-1.html) 里边说的来编辑文件）来打开 /etc/sudoers 文件。

以下是需要设置的相关的行：

```
Defaults    secure_path="/usr/sbin:/usr/bin:/sbin"
root        ALL=(ALL) ALL
tecmint     ALL=/bin/yum update
gacanepa    ALL=NOPASSWD:/bin/updatedb
%admin      ALL=(ALL) ALL

```

来更加深入了解这些项：

```
Defaults    secure_path="/usr/sbin:/usr/bin:/sbin:/usr/local/bin"

```

这一行指定 sudo 将要使用的目录，这样可以阻止使用某些用户指定的目录，那样的话可能会危及系统。

下一行是用来指定权限的：

```
root        ALL=(ALL) ALL

```

* 第一个 ALL 关键词表明这条规则适用于所有主机。
* 第二个 ALL 关键词表明第一个字段中所指定的用户能以任何用户身份的权限来运行相应命令。
* 第三个 ALL 关键词表明可以运行任何命令。

```
tecmint ALL=/bin/yum update
```

如果 = 号后边没有指定用户，sudo 则默认为 root 用户。本例中，tecmint 用户能以 root 身份运行 yum update 命令。

```
gacanepa    ALL=NOPASSWD:/bin/updatedb

```

NOPASSWD 关键词表明 gacanepa 用户不需要密码，可以直接运行 /bin/updatedb 命令。

```
%admin      ALL=(ALL) ALL

```

% 符号表示该行应用于 admin 用户组。其他部分的含义与对于用户的含义是一样的。本例表示 admin 用户组的成员可以通过任何主机连接来运行任何命令。

通过 sudo -l 命令可以查看，你的账户拥有什么样的权限。

![Sudo Access Rules](/data/attachment/album/201606/02/105825kbmytbiydibd74ze.png)

*Sudo 访问规则*

### 总结

对于系统管理员来说，高效能的用户和文件管理技能是非常必要的。本文已经涵盖了这些内容，我们希望你将这些作为一个开始，然后慢慢进步。随时在下边发表评论或提问，我们会尽快回应的。

---

via: <http://www.tecmint.com/manage-users-and-groups-in-linux/>

作者：[Gabriel Cánepa](http://www.tecmint.com/author/gacanepa/) 译者：[GHLandy](https://github.com/GHLandy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](https://linux.cn/) 荣誉推出


开源新闻速递：Linux Lite 3.0 发布

Summary: 虚幻游戏引擎 Unreal Engine 4.12 发布，这一版本改动比较大。

我arch就是用的一个arc修改的mac-like主题，不过shell主题不是很喜欢，用的其他的

虚幻游戏引擎 Unreal Engine 4.12 发布，这一版本改动比较大。

### 头条消息

基于 Ubuntu 16.04 LTS 的 Linux Lite 经过了几个月的开发，[发布](https://www.linuxliteos.com/forums/release-announcements/linux-lite-3-0-final-released/)了 3.0 版本。重新打造的外观使用了 Arc GTK 主题。其创建者说：“和 2 系列不同，我们现在有了新的登录管理器、新的引导主题、Lite Software 全面改进、新的系统主题（Arc），并增加了一个共享硬件配置工具（Lite Info）。此外，还修正了许多在 Beta 版本中发现的问题，谢谢大家的反馈。”

![](/data/attachment/album/201606/02/192844eb40z1bh3hw8h64x.jpg)

进入了六月，这又是一个值得期待的月份， 很多开源软件都要发布其新的版本。比如 [Arch Linux](https://www.archlinux.org/) 就发布了其月度镜像 2016.06.01 版本，搭载了Linux 内核 4.5.4。可以从官网进行[下载](https://www.archlinux.org/download/)了；而另外一个滚动发行版 OpenSUSE Tumbleweed 的 [GCC 6 的迁移过程还在进行中](/article-7386-1.html)，好消息是 Linux 内核 4.6 会在本周末进入主仓库。

### 版本更迭

* Linux Kernel 4.4.12 、4.5.6 和 4.6.1 发布。
* QNAP，一家致力于提供关于存储管理、文件共享、监控以及虚拟化应用的 NAS 解决方案的台企，最近[宣称](https://www.qnap.com/i/uk/news/con_show.php?op=showone&cid=518)，要转向提供IoT (物联网)应用了。QNAP NAS 将会采用 snap 软件包格式发布其 NAS 解决方案，这样的好处就是开发者可以用同一种形式构建应用，这将会大大降低跨平台管理、迁移、重新开发的成本。
* 备受称赞的跨平台虚幻游戏引擎 Unreal Engine 4.12 [发布](https://www.unrealengine.com/blog/unreal-engine-4-12-released)，这一版本改动比较大，进行了数百项更新，修复了许多跨平台的bug，加入了许多的新特性，以及对许多新技术比如 Vulkan Mobile Renderer 的实现。Unreal Engine 4.12 引入了 Sequencer，一款实时、非线性的动画和电影工具，这个工具的功能强大，可以直播游戏记录，进行电影摄影，自动存储关键帧。值得一提的是，该版本首次对开源的虚拟现实游戏（OSVR）平台进行了支持。同事也加入了对最新版SDK的支持。目前可以从官网进行[下载](https://www.unrealengine.com/zh-CN/what-is-unreal-engine-4)了。
![](/data/attachment/album/201606/02/192845pjvv5fdxrvsdjgxx.jpg)
* Canonical 为 Ubuntu 14.04 LTS 用户[发布](http://www.ubuntu.com/usn/usn-2989-1/)了一封新的安全公告，列出了 Ubuntu 14.04 LTS 存在的一些漏洞，Ubuntu 14.04 LTS 的用户应立即进行更新。Ubuntu 14.04 LTS 将会继续支持到 2019 年。
* 紧跟着 Wine 1.9.11 之后，Wine Staging 1.9.11 也[发布](http://www.wine-staging.com/news/2016-05-19-release-1.9.11.html)了，现在可以玩 DOOM 2016 了。


开源新闻速递：可以在浏览器中运行 Kali Linux 了

Summary:
Ubuntu 16.10 将使用新的本地 DNS 解析服务；
Enlightenment 0.21.0 桌面环境即将到来。

Canonical 最近的新闻不少啊

caonical 不但是一个动作频频的公司，而且也善于宣传。

收藏，对 kali 有兴趣。<br />
另：作者竟然是棣琦妹纸～～

厉害啊

没错，棣琦现在是我们的新闻主编~

### 头条消息

想尝试一下渗透测试和安全验证的Linux操作系统的用户，现在可以在你的浏览器中运行 Kali Linux 脆弱性测试系统了。Kali Linux 是 BackTrack 的继任者。网络安全专家创建了一个名为 [KaliBrowser](http://jerrygamblin.com/2016/05/31/kalibrowser/) 的项目，它可以让你在浏览器中运行 Kali Linux，使用了 Kali Linux Docker 镜像、Openbox 窗口管理器和 NoVNC HTML5-based VNC 客户端等等技术。

目前 Kali Linux 的最新版本是 2016.1，官方还没有发布 Kali Linux 最新的 Docker 镜像。由于这是基于 Docker 镜像实现的，所以你首先得有个就绪的 Docker 环境，然后，用户可以在终端中运行下面命令进行安装：`sudo docker run -d -t -i -p 6080:6080 jgamblin/kalibrowser`。命令执行完成之后，只需要访问链接 `http://localhost:6080` 即可。

![](/data/attachment/album/201606/03/171446cucamdzc2s25qdim.jpg)

Canonical 的 Martin Pitt [宣布](https://lists.ubuntu.com/archives/ubuntu-devel/2016-May/039350.html)了一个重大消息，正在紧锣密鼓进行开发的 Ubuntu 16.10 中将使用新的本地 DNS 解析服务。由于 Ubuntu 16.10 将使用最新发布的 systemd 230，因此将基于 systemd 提供本地解析服务的 systemd-resolved 提供新的本地解析服务。这不仅更轻巧，而且可以利用 systemd-resolved 提供的各种新的网络特性，比如 systemd 230 中新提供的默认的 DNSSEC 。之前旧的本地 DNS 解析服务存在一些缺陷，比如当第一个 DNS 服务器无响应时，会延迟应答 1-10秒钟，从而使网络操作变得极慢。

### 版本更迭

* Enlightenment 0.21.0 桌面环境即将到来，它刚刚发布了最后一个 RC 版本。这一版本将会提供对 Wayland 更好的支持。Enlightenment 是一款 GNU/Linux 操作系统下自由、开源、轻量而优雅的窗口管理器和桌面环境。感兴趣的可以从官网[下载](https://www.enlightenment.org/news/e21_rc_release)。
* 虽然 Debian GNU/Linux 7 操作系统已经于今年4月进入了 LTS 支持期了，但是最近还是[新增](https://bits.debian.org/2016/06/wheezy-now-supporting-armel-and-armhf.html)了两个 ARM 架构 Armel (ARM EABI) 和 ARMhf (ARM hard-float) 指令集体系结构的[支持](https://bits.debian.org/2016/06/wheezy-now-supporting-armel-and-armhf.html)。官方对该系统的 LTS 支持截止到2018年5月31号。
* 继 Linux kernel 4.6.1, Linux kernel 4.5.6, 和 Linux kernel 4.4.12 LTS 更新之后，Linux kernel 3.14.71 LTS也进行了更新。这一版本修复了通过 NTLMSSP 协议进行CIFS匿名验证的漏洞，提供了对 Cinterion PH8 和 AHxx 无线以太网适配器的支持。
* Canonical 发布了一篇安全[通告](http://www.ubuntu.com/usn/usn-2990-1/)，对所有支持 ImageMagick 的 Ubuntu 操作系统进行了一项重要的安全更新。对一个月前 Nikolay Ermishkin 和 Stewie 发现的非常有名的 ImageTragick 攻击进行了缺陷修复。受影响的操作系统有 Ubuntu 16.04 LTS (Xenial Xerus), Ubuntu 15.10 (Wily Werewolf), Ubuntu 14.04 LTS (Trusty Tahr), 和 Ubuntu 12.04 LTS (Precise Pangolin)，这些操作系统的用户应该立即进行更新。
* Canonical [发布](http://www.zygoon.pl/2016/05/snapd-205-released-new-release-cadence.html)了用于支持 Snap 软件包的守护进程 snapd 2.0.5。Canonical 在极力推进其 Snap 软件包技术的发展，对 OpenGL 、PulseAudio 等部分进行了多处改进，看起来会有更多的游戏打包成 Snap 格式了。


开源新闻速递：NFS 安全值得关注

### 今日关注

全世界有十分之一的 NFS（Network File System）服务配置有误，会暴露敏感文件。NFS 是一种描述程序怎么通过网络连接获取文件的计算机协议，主要是通过 111 和 2049 端口。该协议主要用于企业环境中，管理员可以允许本公司的员工通过 NFS 协议来获取数据中心的数据。对 NFS 服务的错误配置，比如使用 NFSv3 版本而不是最新的 NFSv4 版本，或者把服务公开到互联网上，都会带来灾难性的后果。通过一家美国安全公司的调查，有时候可以从安全防护很弱的服务器上获取到各种敏感数据，比如服务器的日志，服务器备份，各种网站的源码，还有服务镜像文件。这些易攻击的服务器主要分布在美国 (18,843 台服务器)、中国 (11,608)、法国 (10,744)、德国 (7,188) 和俄罗斯 (5,269)。要防止敏感数据泄露，最基本的需要先把版本更新到提供了基础验证的 NFSv4，或者如果技术上不允许进行一些更新的话，IT 管理员可以通过防火墙过滤访问。

![](/data/attachment/album/201606/04/182104d1wt6bl6mmlb1z66.png)

### 一句话新闻

* 24岁大的罗马尼亚黑客 GhostShell 从110台配置错误的 MongoDB 服务器上截获了约三千六百万条数据，其中有三百六十万带有密码，今天他将这些数据放到网上供人公开下载，链接发布到了 pastebin。
* PCLinuxOS 64 MATE 2016.06 版本可以[下载](http://www.pclinuxos.com/forum/index.php/topic,137708.0.html)了。这一更新版本搭载了 MATE 1.14 桌面环境，以及 LibreOffice 5.1 办公套件。
* 开源、跨平台的电子书管理工具 Calibre 2.58 发布，改善了对最新的 Qt 5.x 技术的支持，这一版本的一个新特性是实现了一个可以忽略 HTML 标签的文本搜索工具，使得搜索更加便捷。
* 代号为“Sarah” 的 Linux Mint 18 开发接近完成了，下周就会发布 Beta 版本，敬请期待。


儿童编程语言进化史

呃…… 我以为现在儿童学python了，我小学时候是QBasic……

随着奥巴马总统的全民学习计算机（#CSforall）的倡议以及人们对 STEM （<ruby> 科学 <rp>  （ </rp> <rt>  Science </rt> <rp>  ） </rp></ruby>、<ruby> 技术 <rp>  （ </rp> <rt>  Technology </rt> <rp>  ） </rp></ruby>、<ruby> 工程 <rp>  （ </rp> <rt>  Engineering </rt> <rp>  ） </rp></ruby>和<ruby> 数学 <rp>  （ </rp> <rt>  Mathematics </rt> <rp>  ） </rp></ruby>）的日益关注，表明我们到了需要建立儿童计算机教育的标准和最佳实践的时候了。业内一致认为，可视化编程是教授给孩子们计算机科学和计算思想的最好方式，这样可以摆脱艰涩的编程语法，让孩子们在很小的时候就可以灵活地掌握软件编程的精髓。

![](/data/attachment/album/201606/04/231646dvnj52wx84vo8omm.jpg)

### 改进中的 Logo 语言

在过去的五十年，设计师们不断改进 Seymour Papert 创造的 Logo 编程语言（LCTT 译注：应该有同学见过那个“小乌龟”），出现了一大批界面稍有不同而核心思想相同的编程语言。当前的教学标准是基于<ruby> 模块 <rp>  （ </rp> <rt>  blocks </rt> <rp>  ） </rp></ruby>的编程方式，这要归功于 MIT 的 Scratch 编程语言的流行。在 [CSTA 的 K-12 计算机科学教学标准](https://csta.acm.org/Curriculum/sub/K12Standards.html)中，对于 K-5 年级，要求达到“使用基于模块的可视编程语言来构建和测试解决方案”的编程能力。

![](/data/attachment/album/201606/04/231729trtcni2txr3lrnwl.png)

### 越来越年轻化

计算机科学教育的另外一个趋势是受众越来越年轻。研究表明，[才仅仅五岁的孩子](http://www.wired.com/2013/09/ap_code/)就能够掌握计算机编程的概念，所以这是必然的趋势。要教还不认识字的孩子们学习编程，就需要避免使用文字。最近像 Scratch Jr 和 Code.org 的第一阶段课程就在基于模块的编程语言中使用图标替代了文字。

![](/data/attachment/album/201606/04/231730ufotplutomrzmmom.png)

### 机器人编程

看见你的代码出现在生活中是一件神奇的事情。早在本世纪初，乐高和 MIT 就合作了一个项目，将基于模块的编程带到了现实世界。学生们可以在计算机上写程序，然后将其下载到他们搭建的机器人里。早期的 RIS（<ruby> 机器人创造系统 <rt>  robotics invention system </rt></ruby>）看起来十分像 Scratch。

![](/data/attachment/album/201606/04/231731duvzp6fp6ip6ngii.png)

在<ruby> 乐高机器人 <rp>  （ </rp> <rt>  Lego Mindstorms </rt> <rp>  ） </rp></ruby> 2013 版The 2013 中虽然变得更加复杂，但是其大部分所做的事情同之前的版本一样。现在可以给模块增加输入参数，以指定距离、时间、输出等等。

![](/data/attachment/album/201606/04/231732imbd9dgprt69t3rg.png)

Martin Exner 创建了一幅[简明的信息图](http://constructingkids.com/2013/05/15/vpl/)，概括了由 Logo 以及更近一些的 Scratch 衍生而来的这些编程语言。许多 Logo 语言的衍生语言都是围绕着特定场景的，比如创建游戏、制作 3D 故事情节环境、绘制图片、机器人编程，甚至可以控制虚拟鱼缸。这种方式吸引了许多不同的孩子们，但是许多孩子在学习编写一段程序仍然感觉有些困难。

### Logo 之上的编程思想

在现实生活中，计算机编程通常需要考虑各种类型的输入，并且同时还要动态处理各种逻辑判断。让我们举一个判断起床后要做什么的简单例子：如果是周六日，我们会去外面玩；如果是周一，我们需要穿上运动服；如果是周四，我们需要倒垃圾；而不是周末的日子，我们需要去上学。下面展示了用 Scratch 实现的逻辑。

![](/data/attachment/album/201606/04/231733g41znh8pf8iclk5q.png)

除了这些基于模块的编程语言，还有一种新的语言采用了不同的方式来教孩子们编程。2015年，[Wonder Workshop](http://makewonder.com/) 设计一个名为 Wonder 的新编程语言，采用的是[基于流的编程](http://www.jpaulmorrison.com/fbp/fbp2.htm)界面。Wonder 可以让学生们将注意力放在一些预先定义好的功能单元（或语句）的连接上，来构建一个<ruby> 状态机 <rp>  （ </rp> <rt>  state machine </rt> <rp>  ） </rp></ruby>。在任何时刻，机器人都是一个单一的给定状态；它会做一些操作，给一些输入就会让它改为做不同的操作。

下图展示了如何使用基于流的方式来判断起床后的任务。

![](/data/attachment/album/201606/04/231733a0czhojc62a35c2o.png)

除了摆脱了线性编程范式，这种编程语言还提供了一种不同的计算思想，可以让学生们以一种容易掌握的方式来模拟响应现实中的变化。学生们可以更容易的把问题分解成小的部分，然后用这些部分来解决复杂的问题。学生们在解决问题时只需要一次关注一个问题。这个过程称之为分解，则既是计算机领域的基础知识，也是 Wonder 的设计目的。

![](/data/attachment/album/201606/04/231735x80os59obfwmgn0f.png)

在我们的每天的生活中有很多机器人和状态机的例子，而且它们变得越来越常见了。当你投入了正确组合的钱币之后，自动售货机就给你对应的食物。自动驾驶汽车会根据它周围的障碍物来决定该怎么移动。状态机也可以进一步对大量问题进行建模，包括语言解析、人工智能、通讯协议、游戏中的角色变化，甚至神经网络。

随着机器人应用的越来越广泛，教师们正在接受[培训](http://www.fastcompany.com/3056644/most-creative-people/as-schools-emphasize-computer-science-how-do-we-teach-teachers-to-code)，把基于模块的编程作为教授孩子们计算机科学的标准。随着它进入到越来越多的课堂，我们应该思考这是否是一个正确的方向？还有没有其他更好教授孩子们计算机编程的方法。


开源新闻速递：Linux AIO Ubuntu 16.04 发布

Summary:
Debian GNU/Linux 7 系列的最后一个维护版本 7.11 发布；
VirtualBox 5.1 中将不再依赖内核 DKMS。

关于VirtualBox 5.1的改进，是一个不错的消息！

### 今日关注

Linux AIO Ubuntu 16.04 发布，这是一个单独的 ISO 文件，但是里面包含了所有的 Ubuntu 16.04 LTS DVD 镜像：Ubuntu 16.04 LTS、Ubuntu MATE 16.04 LTS、Kubuntu 16.04 LTS、Xubuntu 16.04 LTS、Lubuntu 16.04 LTS 和 Ubuntu GNOME 16.04 LTS。有了 Linux AIO Ubuntu 16.04，只用一个 USB 棒或者 DVD 光盘就可以帮朋友或者客户安装上面所有的系统了，而不用安装一个系统换一个 USB 棒。

现在已经可以从官网进行[下载](http://linuxaio.net/)了。有三种镜像可供选择，32位，64位的，以及混合版。值得注意的是，由于网站对文件大小的限制，Linux AIO Ubuntu 16.04 镜像文件分成了两个卷宗，采用 7z 的压缩算法进行压缩。因此，要得到完整的镜像文件，需要下载这两部分文件，并提取出第一份文件，然后将镜像文件写入到不小于8GB的USB棒或者DVD光盘上。更多详情参见[官网](http://linuxaio.net/)。

![](/data/attachment/album/201606/05/173022ydte24dngg8t8188.jpg)

### 新闻摘要

* 代号为 “Wheezy” 的 Debian GNU/Linux 7.11 [发布](https://www.debian.org/News/2016/2016060402)，作为第七系列的最后一次更新，目前已经可以进行下载了。同一天，代号为 "Jessie" 的 Debian 8.5 GNU/Linux 也[发布](https://www.debian.org/News/2016/20160604)了。
* Oracle [发布](https://blogs.oracle.com/virtualization/entry/oracle_vm_virtualbox_5_1)了 VirtualBox 5.1 的第一个 Beta 版本。在 VirtualBox 5.1 中安装的 Linux 系统将不再依赖 DKMS 进行Linux内核模块重建，因为这意味着在更新你的 Linux 的内核包时不需要重新编译 VirutualBox 模块。同时这个版本提供对 Python 3 提供了更好支持。
* 研究者在计算机芯片上开发出了硬件级别的后门，这样的后门就更不容易被发现了。这个后门是在芯片上千的组件中的一个类似的组件。正常的组件都是以0和1的状态进行工作，不过这个后门像晶体管，作为一个电容器工作，会存储接受到的每一条命令。该后门在运行恶意代码时会启动，随后就会关闭。


NodeOS：Node 爱好者的 Linux 发行版

Summary: 如果你之前不知道的话，NodeOS 是首个架构在 Linux 内核之上的由 Node.js 和 npm 驱动的操作系统。

我靠，.js 果然出系统了。

满是只有一行代码的包么？

哈哈哈哈~

![](/data/attachment/album/201606/06/091721jau2d9i1iajj22jh.jpg)

[NodeOS](http://node-os.com/) 是一款基于 [Node.js](https://nodejs.org/en/) 的操作系统，自去年其首个[发布候选版](https://github.com/NodeOS/NodeOS/releases/tag/v1.0-RC1)之后正朝着它的1.0版本进发。

如果你之前不知道的话，NodeOS 是首个架构在 [Linux](http://itsfoss.com/tag/linux/) 内核之上的由 Node.js 和 [npm](https://www.npmjs.com/) 驱动的操作系统。[Jacob Groundwater](https://github.com/groundwater) 在2013年中期介绍了这个项目。该操作系统中用到的主要技术是：

* **Linux 内核**: 这个系统建造在 Linux 内核上
* **Node.js 运行时**: Node 作为主要的运行时环境
* **npm 包管理**: npm 作为包管理

NodeOS 源码托管在 [Github](https://github.com/nodeos/nodeos) 上，因此，任何感兴趣的人都可以轻松贡献或者报告 bug。用户可以从源码构建或者使用[预编译镜像](https://github.com/NodeOS/NodeOS/releases)。构建过程及快速起步指南可以在项目仓库中找到。

NodeOS 背后的思想是提供足够 npm 运行的环境，剩余的功能就可以让 npm 包管理来完成。因此，用户可以使用多达大约 250,000 个软件包，并且这个数目每天都还在增长。所有的都是开源的，你可以根据你的需要很容易地打补丁或者增加更多的包。

NodeOS 核心开发被分离成了不同的层面，基本的结构包含：

* **barebones** – 带有可以启动到 Node.js REPL 的 initramfs 的自定义内核
* **initramfs** – 用于挂载用户分区以及启动系统的 initram 文件系统
* **rootfs** – 存放 linux 内核及 initramfs 文件的只读分区
* **usersfs** – 多用户文件系统(如传统系统一样)

NodeOS 的目标是可以在任何平台上运行，包括： **实际的硬件（用户计算机或者 SoC）**、**云平台、虚拟机、PaaS 提供商，容器**（Docker 和 Vagga）等等。如今看来，它做得似乎不错。在3.3号，NodeOS 的成员 [Jesús Leganés Combarro](https://github.com/piranna) 在 Github上[宣布](https://github.com/NodeOS/NodeOS/issues/216)：

>
> **NodeOS 不再是一个玩具系统了**，它现在开始可以用在有实际需求的生产环境中了。
>
>
>

因此，如果你是 Node.js 的死忠或者乐于尝试新鲜事物，这或许值得你一试。在相关的文章中，你应该了解这些[Linux 发行版的具体用法](http://itsfoss.com/weird-ubuntu-based-linux-distributions/)

---

via: <http://itsfoss.com/nodeos-operating-system/>

作者：[Munif Tanjim](http://itsfoss.com/author/munif/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


NXP 发布了一块世界上最小的64位物联网 ARM 处理器

第二段末句“该处理器在德国纽伦堡的Embedded World 2016 上揭开了什么的面纱。”应该为“神秘的面纱”吧。

汗。。

![](/data/attachment/album/201606/06/093206o2koojjvrcq5kjfs.jpg)

[NXP 半导体](http://www.nxp.com/)发布了一块声称世界上最小的用于物联网(IoT)的低功耗64位ARM处理器。

这片小型的QorIQ LS1012A为电池供电、大小受限的应用提供了网络级的安全和性能加速。这包括了运行物联网应用，或者任何智能及可连接的设备。如果物联网能在2020达到1.7万亿美金的潜力（由IDC研究员估算市场得出），那么它将需要像NXP这样的处理器，该处理器在德国纽伦堡的Embedded World 2016 上揭开了神秘的面纱。

该芯片带有64位ARMv8芯片，拥有网络包加速及内置的安全。它占用9.6平方毫米的空间，并且大约消耗1瓦特的电力。潜在的应用包括下一代的物联网网关、可携带娱乐平台、高性能可携带存储应用、移动硬盘、相机的移动存储、平板及其他可充电的设备。

除此之外，LS1012A是第一款为最新兴起的基于对象的存储方案设计的处理器，基于对象存储通过智能硬盘直接连接到以太网数据中心。处理器必须足够小才能直接集成在硬盘的集成电路上。

NXP的高级副总裁及数字网络部的经理Tareq Bustami说：“突破性组合了低功耗、占用空间小及网络级性能的NXP LS1012处理器是消费者、物联网相关应用的理想选择。独有地将这些能力结合到一起解放了物联网设计者及开发者，使得他们可以在这个高增长的市场中设计并创造更多创新产品。”

NXP说这是唯一一个1瓦特功耗、64位的、并将这些高速外设综合到一个芯片中的处理器，这意味着更低的系统级功耗。归功于创新性的封装，该处理器可以运用在低成本的电路板中。

NXP的LS1012A可以在2016年4月开始发货，并且现在可以订货。NXP在全球35个国家拥有超过4,5000名员工。

---

via: <http://venturebeat.com/2016/02/21/nxp-unveils-a-small-and-tiny-64-bit-arm-processor-for-the-internet-of-things/>

作者：[DEAN TAKAHASHI](http://venturebeat.com/author/dean-takahashi/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


七步开始你的 Linux 系统管理员生涯

Linux 现在是个大热门。每个人都在寻求 Linux 才能。招聘人员对有 Linux 经验的人求贤若渴，还有无数的职位虚位以待。但是如果你是 Linux 新手，又想要赶上这波热潮，该从何开始下手呢？

![](/data/attachment/album/201606/06/094849df0g1k1tk76ggp06.jpg)

### 1、安装 Linux

这应该是不言而喻的，但学习 Linux 的第一关键就是安装 Linux。LFS101x 和 LFS201 课程都包含第一次安装和配置 Linux 的详细内容。

### 2、 完成 LFS101x 课程

如果你是完完全全的 Linux 新手，最佳的起点是我们的免费 Linux 课程 [LFS101x Introduction to Linux](https://www.edx.org/course/introduction-linux-linuxfoundationx-lfs101x-2)。这个在线课程放在 edX.org，探索 Linux 系统管理员和终端用户常用的各种工具和技能以及日常的 Linux 工作环境。该课程是为有一定经验，但较少或没有接触过 Linux 的电脑用户设计的，不论他们是在个人还是企业环境中工作。这个课程会从图形界面和命令行两个方面教会你有用的 Linux 知识，让你能够了解主流的 Linux 发行版。

### 3、 看看 LFS201 课程

在你完成 LFS101x 之后，你就可以开始挑战 Linux 中更加复杂的任务了，这是成为一名专业的系统管理员所必须的。为了掌握这些技能，你应该看看 [LFS201 Essentials of Linux System Administration](http://training.linuxfoundation.org/linux-courses/system-administration-training/essentials-of-system-administration) 这个课程。该课程对每个话题进行了深度的解释和介绍，还有大量的练习和实验，帮助你获得相关主题实际的上手经验。

如果你更愿意有个教练，或者你的雇主想将你培养成 Linux 系统管理员的话，你可能会对 LFS220 Linux System Administration 感兴趣。这个课程有 LFS201 中所有的主题，但是它是由专家专人教授的，帮助你进行实验以及解答你在课程主题中的问题。

### 4、 练习！

熟能生巧，和对任何乐器或运动适用一样，这对 Linux 来说也一样适用。在你安装 Linux 之后，经常使用它。一遍遍地练习关键任务，直到你不需要参考材料也能轻而易举地完成。练习命令行的输入输出以及图形界面。这些练习能够保证你掌握成为成功的 Linux 系统管理员所必需的知识和技能。

### 5、 获得认证

在你完成 LFS201 或 LFS220 并且充分练习之后，你现在已经准备好获得系统管理员的认证了。你需要这个证书，因为你需要向雇主证明你拥有一名专业 Linux 系统管理员必需的技能。

现在有一些不同的 Linux 证书，它们每个都有其独到之处。但是，它们里大部分不是在特定发行版（如红帽）上认证，就是纯粹的知识测试，没有演示 Linux 的实际技能。<ruby> Linux 基金会认证系统管理员 <rp>  （ </rp> <rt>  Linux Foundation Certified System Administrator </rt> <rp>  ） </rp></ruby>证书对想要一个灵活的，有意义的初级证书的人来说是个不错的选择。

### 6、 参与进来

如果你所在的地方有本地 <ruby> Linux 用户组 <rp>  （ </rp> <rt>  Linux Users Group </rt> <rp>  ） </rp></ruby>（LUG）的话，这时候你可以考虑加入他们。这些组织通常由各种年龄和经验水平的人组成，所以不管你的 Linux 经验水平如何，你都能找到和你类似技能水平的人互助，或是更高水平的 Linux 用户来解答你的问题以及介绍有用的资源。要想知道你附近有没有 LUG，上 meet.com 看看，或是附近的大学，又或是上网搜索一下。

还有不少在线社区可以在你学习 Linux 的时候帮助你。这些站点和社区向 Linux 新手和有经验的管理员都能够提供帮助和支持：

* [Linux Admin subreddit](https://www.reddit.com/r/linuxadmin)
* [Linux.com](http://www.linux.com/)
* [training.linuxfoundation.org](http://training.linuxfoundation.org/)
* <http://community.ubuntu.com/help-information/>
* <https://forums.opensuse.org/forum.php>
* <http://wiki.centos.org/Documentation>

### 7、 学会热爱文档

最后但同样重要的是，如果你困在 Linux 的某些地方，别忘了 Linux 包含的文档。使用命令 man（manual，手册），info 和 help，你从系统内就可以找到 Linux 几乎所有方面的信息。这些内置资源的用处再夸大也不为过，你会发现你在生涯中始终会用到，所以你可能最好早点掌握使用它们。

想要了解更多开始你 Linux IT 生涯的信息？查看我们免费的电子书“[开始你 Linux IT 生涯的简短指南](http://training.linuxfoundation.org/sysadmin-it-career-guide)”。

---

via: <http://www.linux.com/news/featured-blogs/191-linux-training/834644-7-steps-to-start-your-linux-sysadmin-career>

作者：<linux.com> 译者：[alim0x](https://github.com/alim0x) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](https://linux.cn/) 荣誉推出


开源新闻速递：Linux 4.7 内核发布了第二个 RC 版本

Summary: 被很多 Linux 发行版都作为默认桌面主题的 Arc GTK 主题发布了相配合的图标主题  Arc Icon

### 今天关注

Linux 4.7 内核[发布](http://lkml.iu.edu/hypermail/linux/kernel/1606.0/03592.html)了第二个 RC 版本。

被很多 Linux 发行版都作为默认桌面主题的 [Arc GTK 主题](https://github.com/horst3180/arc-theme)发布了相配合的图标主题 [Arc Icon](https://github.com/horst3180/arc-icon-theme)，不过目前该图标主题还不够完整，缺少很多图标。不过该图标主题是依赖于非常流行 Moka 图标主题，所以如果你已经安装了 Moka 图标主题，那么缺失的图标会以 Moka 图标替代，否则就要默认的 GTK 图标替代。

![](/data/attachment/album/201606/06/202954c5ztbdydzctzbfd6.jpg)

### 新闻摘要

* [DebEX](http://debex.exton.net/) KDE Live DVD 160604 发布，它是基于 Debian GNU/Linux 8.4 开发的。
* 另外一个同样基于 Debian 的发行版 [Q4OS](http://q4os.org/) 发布了 [1.4.11](http://q4os.org/blog.html#news160606)。
* Qt 5.7.0 [发布](http://blog.qt.io/blog/2016/06/03/qt-5-7-0-release-candidate-available/)了 RC 版本，正式版本会在几周后发布。
* Docker [发布](https://github.com/docker/docker/releases/tag/v1.11.2)了 1.11 的第二个维护版本。
* Debian 发布了 Chromium 51 的多个[重要安全补丁](https://lists.debian.org/debian-security-announce/2016/msg00171.html)，请用户尽快升级。


混合云计算的 9 大关键趋势

Summary: 自从几年前云计算的概念受到IT界的关注以来，公有云、私有云和混合云这三种云计算方式都有了可观的演进。其中混合云计算方式是最热门的云计算方式，在接受调查的公司中，有88%的公司将混合云计算摆在至关重要的地位。

自从几年前云计算的概念受到IT界的关注以来，公有云、私有云和混合云这三种云计算方式都有了可观的演进。其中混合云计算方式是最热门的云计算方式，在接受调查的公司中，有[88%的公司](https://www.greenhousedata.com/blog/hybrid-continues-to-be-most-popular-cloud-option-adoption-accelerating)将混合云计算摆在至关重要的地位。

混合云计算的疾速演进意味着一两年前的传统观念已经过时了。为此，我们询问了几个行业分析师，混合云在2016年的走势将会如何，我们得到了几个比较有意思的答案。

![](/data/attachment/album/201606/07/074834ph3hqahhb0jbcbb2.jpg)

### **2016年可能是我们将混合云投入使用的一年**

混合云从本质上来说依赖于私有云，这对企业来说是比较难实现的。事实上，亚马逊，谷歌和微软的公有云已经进行了大量的投资，并且起步也比较早。私有云拖了混合云发展和使用的后腿。

私有云没有得到这么多的投资，这是有私有云的性质决定的。私有云意味着维护和投资你自己的数据中心。而许多公有云提供商正在推动企业减少或者消除他们的数据中心。

然而，得益于 OpenStack 的发展和微软的 Azure Stack ，这两者基本上就是封装在一个盒子里的私有云，我们将会看到私有云慢慢追上公有云的发展步伐。支持混合云的工具、基础设施和架构也变得更加健壮。

### **容器，微服务和 unikernels 将会促进混合云的发展**

分析师预言，到2016年底，这些原生云技术会或多或少成为主流的。这些云技术正在快速成熟，将会成为虚拟机的一个替代品，而虚拟机需要更多的资源。

更重要的是，他们既能工作在在线场景，也能工作在离线场景。容器化和编排允许快速的扩大规模，进行公有云和私有云之间的服务迁移，使你能够更容易移动你的服务。

### **数据和相关性占据核心舞台**

所有的云计算方式都处在发展模式。这使得云计算变成了一个技术类的故事。咨询公司 [Avoa](http://avoa.com/2016/01/01/2016-is-the-year-of-data-and-relevance/)称，随着云趋于成熟，数据和相关性变得越来越重要。起初，云计算和大数据都是关于怎么得到尽可能多的数据，然后他们担心如何处理这海量的数据。

2016年，相关组织将会继续锤炼如何进行数据收集和使用的相关技术。在必须处理的技术和文化方面仍然有待提高。但是2016年应该重新将关注点放在从各个方面考虑的数据重要性上，发现最相关的信息，而不只是数据的数量。

### **云服务将超越按需工作负载**

AWS(Amazon Web Services) 起初是提供给程序员或者是开发人员能够快速启动虚拟机、做一些工作然后离线的一个地方。本质上是按需使用，要花费更多的钱才能让这些服务持续运行、全天候工作。

然而，IT 公司正开始作为服务代理，为内部用户提供各种 IT 服务。可以是内部 IT 服务，公有云基础架构提供商，平台服务和软件服务。

他们将越来越多的认识到像云管理平台这样的工具的价值。云管理平台可以提供针对不同服务的基于策略的一致性管理。他们也将看到像提高可移植性的容器等技术的价值。然而，云服务代理，在不同云之间快速移动工作负载从而进行价格套利或者类似的原因，仍然是行不通的。

### **服务提供商转变成了云服务提供商**

到目前为止，购买云服务成了直销模式。AWS EC2 服务的使用者通常变成了购买者，要么通过官方认证渠道，要么通过影子 IT。但是随着云服务越来越全面，提供的服务菜单越来越复杂，越来越多的人转向了经销商，服务提供商转变成了他们 IT 服务的购买者。

2nd Watch (2nd Watch 是为企业提供云管理的 AWS 的首选合作伙伴)最近的一项调查发现，在美国将近85%的 IT 高管愿意支付一个小的溢价从渠道商那里购买公有云服务，如果购买过程变得不再那么复杂。根据调查，这85%的高管有五分之四的愿意支付额外的15%或者更多。三分之一的受访高管表示，这些有助于他们购买、使用和管理公有云服务。

### **物联网和云对于2016年的意义好比移动和云对2012年的意义**

物联网获得了广泛的关注，更重要的是，物联网已经从测试场景进行了实际应用。云的分布式特性使得云成为了物联网非常重要的一部分，对于工业物联网，与后端系统交互的机械和重型设备，混合云将会成为最自然的驱动者，连接，数据采集和处理将会发生在混合云环境中，这得益于私有云在安全和隐私方面的好处。

### **NIST 对云的定义开始瓦解**

2011年，美国国家标准与技术研究院发布了“ [NIST 对于云计算的定义](http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf)”（PDF），这个定义成为了私有云、公有云、混合云和 aaS 模板的标准定义。

然而随着时间的推移，定义开始改变。IaaS 变得更加复杂，开始支持 OpenStack，[Swift](https://wiki.openstack.org/wiki/Swift) 对象存储和神经网络这样的项目。PaaS 似乎正在消退，因为 PaaS 和传统的中间件开发几乎无异。SaaS，只是通过浏览器进行访问的应用，也正在失去发展动力，因为许多 app 和服务提供了许多云接口，你可以通过各种手段调用接口，不仅仅通过浏览器。

### **分析变得更加重要**

对于混合云计算来说，分析将会成为一个巨大的增长机遇，云计算具有规模大、灵活性高的优势，使得云计算非常适合需要海量数据的分析工作。对于某些分析方式，比如高度敏感的数据，私有云仍然是主导地位，但是私有云也是混合云的一部分。因此，无论如何，混合云计算胜出。

### **安全仍然是一个非常紧迫的问题**

随着混合云计算在2016年的发展，以及对物联网和容器等新技术的引进，这同时也增加了更多的脆弱可攻破的地方，从而导致数据泄露。先增加使用新技术的趋势，然后再去考虑安全性，这种问题经常发生，同时还有缺少经验的工程师不去考虑系统的安全问题，总有一天你会尝到灾难的后果的。

当一项新技术出来，管理规范总是落后于安全问题产生后，然后我们才考虑去保护技术。容器就是一个很鲜明的例子。你可以从 Docker 下载各种示例容器，但是你知道你下载的东西来自哪里么？在人们在对容器内容不知情的情况下下载并运行了容器之后，Docker 不得不重新加上安全验证。

像 Path 和 Snapchat 这样的移动技术在智能手机市场火起来之后也出现了重大的安全问题。一项新技术被恶意利用无可避免。所以安全研究人员需要通过各种手段来保证新技术的安全性，很有可能在部署之后才会发现安全问题。

---

via: <http://www.datamation.com/cloud-computing/9-key-trends-in-hybrid-cloud-computing.html>

作者：[Andy Patrizio](http://www.datamation.com/author/Andy-Patrizio-90720.html) 译者：[棣琦](https://github.com/sonofelice) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](https://linux.cn/) 荣誉推出


开源新闻速递：OpenSUSE 的 OBS 可用于构建大多数发行版的软件包

Summary:
Debian GNU/Linux 9 创意桌面征集启动；
Firefox 47 发布。

很久没用 OBS 了。

### 今日关注

OpenSUSE 的 Open Build Service （OBS）2.7 [发布](https://lists.opensuse.org/opensuse-announce/2016-06/msg00000.html)。它类似于 Canonical 的 Launchpad ，应用开发者可以创建软件库并自动推送更新给用户；也类似于 PPA ，但是它可以用于多个 Linux 发行版。

“最新的 OBS 已经部署到我们的<ruby> 引用服务器 <rp>  （ </rp> <rt>  reference server </rt> <rp>  ） </rp></ruby>上了。” OpenSUSE 的 Henne Vogelsang 说，“所有开源开发者都可以使用引用服务器 [http://build.opensuse.org](http://build.opensuse.org/) 来为各种流行的发行版构建软件包，包括 openSUSE、Debian、Fedora、Ubuntu、 Arch、Red Hat Enterprise Linux 和 SUSE Linux Enterprise。”

这个版本主要实现了三个新特性。

* 自动对软件仓库的移动和 GNU/Linux 操作系统发布更新进行跟踪；
* 对 Git 的集成，允许应用开发者进行持续构建；
* 实验性的 KIWI 导入功能，开发者可以从 SUSE Studio 服务导入 ISO 镜像。

![](/data/attachment/album/201606/07/210639b5kezn2hijpunjf5.jpg)

### 新闻摘要

* 代号为 “Stretch” 的 Debian GNU/Linux 9 创意桌面征集启动。截止日期为今年9月5号。详情见[官网](https://wiki.debian.org/DebianDesktop/Artwork/Stretch)。
* Firefox 47 发布，这一版本提供了对<ruby> 同步标签 <rp>  （ </rp> <rt>  Synced Tabs </rt> <rp>  ） </rp></ruby>的支持，对用户代理字符串的自定义支持，以及一个新的性能监控页面（about:performance）。用户可以进行下载体验了。
* 基于 Ubuntu 的 [ChaletOS](https://sourceforge.net/projects/chaletos/) 16.04.1 现在可以进行[下载](https://sourceforge.net/projects/chaletos/)了。ChaletOS 提供了一个类似 Windows 系统的桌面，风格类似 Windows 7 和 Vista 系统，当然可以添加一些图标让系统看上去更像 Windows 10 。
* 预计今年九月发布的 GNOME 3.22 桌面环境最新动态：GNOME 控制中心应用的图标由以前的标准图标替换成了现在具有象征意义的图标；并对控制面板进行了分组。


如何启用 Apache 的 PHP-FPM 多实例

Summary: 在本文中，我将要讨论的是，在 CentOS 7 服务器上，于 Nginx 和 Apache 之上安装 PHP-FPM，以及如何来通过 CPanel 管理这些安装好的多个 PHP-FPM 实例。

PHP-FPM 作为 FastCGI 进程管理器而广为熟知，它是 PHP FastCGI 实现的改进，带有更为有用的功能，用于处理高负载的服务器和网站。下面列出其中一些功能：

### 新功能

* 拥有具有优雅（graceful）启动/停止选项的高级进程管理能力。
* 可以通过不同的用户身份/组身份来以监听多个端口以及使用多个PHP配置。
* 错误日志记录。
* 支持上传加速。
* 特别用于在处理一些耗时任务时结束请求和清空所有数据的功能。
* 同时支持动态和静态的子进程重生。
* 支持IP地址限制。

在本文中，我将要讨论的是，在运行 CPanel 11.52 及 EA3 （EasyApache）的 CentOS 7 服务器上，于 Nginx 和 Apache 之上安装 PHP-FPM，以及如何来通过 CPanel 管理这些安装好的多个 PHP-FPM 实例。

![](/data/attachment/album/201606/08/085850qnxrxrxzrrxsn2gf.jpg)

在我们开始安装前， 先看看安装的先决条件。

### 先决条件

1. 启用 Mod*proxy*fcgi 模块
2. 启用 MPM\_Event

由于我们要将 PHP-FPM 安装到一台 EA3 服务器，我们需要运行 EasyApache 来编译 Apache 以启用这些模块。

你们可以参考我以前写的，关于如何在 Apache 服务器上安装 Nginx 作为反向代理的文档来了解 Nginx 的安装。

这里，我将再次简述那些安装步骤。具体细节，你可以参考我之前写的**（如何在 CentOS 7/CPanel 服务器上配置 Nginx 反向代理）**一文。

* 步骤 1：安装 Epel 仓库
* 步骤 2：安装 nDeploy RPM 仓库，这是此次安装中最为**重要**的步骤。
* 步骤 3：使用 yum 从 nDeploy 仓库安装 nDeploy 和 Nginx 插件。
* 步骤 4：启用/配置 Nginx 为反向代理。

完成这些步骤后，下面为服务器中所有可用 PHP 版本安装 PHP-FPM 包，EA3 使用 remi 仓库来安装这些包。你可以运行这个 nDeploy 脚本来下载所有的包。

```
root@server1 [~]# /opt/nDeploy/scripts/easy_php_setup.sh
Loaded plugins: fastestmirror, tsflags, universal-hooks
EA4 | 2.9 kB 00:00:00
base | 3.6 kB 00:00:00
epel/x86_64/metalink | 9.7 kB 00:00:00
epel | 4.3 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
(1/2): epel/x86_64/updateinfo | 460 kB 00:00:00
(2/2): epel/x86_64/primary_db

```

运行该脚本将为 PHP 54，PHP 55，PHP 56 和 PHP 70 安装所有这些 FPM 包。

```
Installed Packages
php54-php-fpm.x86_64 5.4.45-3.el7.remi @remi
php55-php-fpm.x86_64 5.5.31-1.el7.remi @remi
php56-php-fpm.x86_64 5.6.17-1.el7.remi @remi
php70-php-fpm.x86_64 7.0.2-1.el7.remi @remi

```

在以上安装完成后，你需要为 Apache 启用 PHP-FPM SAPI。你可以运行下面这个脚本来启用 PHP-FPM 实例。

```
root@server1 [~]# /opt/nDeploy/scripts/apache_php-fpm_setup.sh enable
mod_proxy_fcgi.c
Please choose one default PHP version from the list below
PHP70
PHP56
PHP54
PHP55
Provide the exact desired version string here and press ENTER: PHP54
ConfGen:: lxblogger
ConfGen:: blogr
ConfGen:: saheetha
ConfGen:: satest
which: no cagefsctl in (/usr/local/jdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin)
info [rebuildhttpdconf] Missing owner for domain server1.centos7-test.com, force lookup to root
Built /usr/local/apache/conf/httpd.conf OK
Waiting for “httpd” to restart gracefully …waiting for “httpd” to initialize ……
…finished.

```

它会问你需要运行哪个 PHP 版本作为服务器默认版本，你可以输入那些细节内容，然后继续配置并为现存的域名生成虚拟主机文件。

我选择了 PHP 54 作为我服务器上的默认 PHP-FPM 版本。

![confirm-php-fpm](/data/attachment/album/201606/08/085750z6brezhx2xd28p2b.png)

虽然服务器配置了 PHP-FPM 54，但是我们可以通过 CPanel 为各个独立的域名修改 PHP-FPM 实例。

下面我将通过一些截图来为你们说明一下，怎样通过 CPanel 为各个独立域修改 PHP-FPM 实例。

安装了 Nginx 插件后，你的域名的 CPanel 就会有一个 Nginx Webstack 图标，你可以点击该图标来配置你的 Web 服务器。我已经登录进了我其中的一个 CPanel 来配置相应的 Web 服务器。

请看这些截图。

![nginxicon1](/data/attachment/album/201606/08/085750yrdddzjc388u964p.png)

现在，你可以根据需要为选中的主域配置 web 服务器（这里，我已经选择了主域 saheetha.com）。我已经继续通过自动化配置选项来进行了，因为我不需要添加任何手动设置。

![nginx_auto_proxy](/data/attachment/album/201606/08/085751qggq2epeg5848pgh.png)

当 Nginx 配置完后，你可以在这里为你的域名选择 PHP-FPM 实例。

![php-fpm1](/data/attachment/album/201606/08/085752y1oh3ombwc9babdl.png)

![php54](/data/attachment/album/201606/08/085753vrrn9nnb92y8i6xx.png)

![php55](/data/attachment/album/201606/08/085753oe6l5fvfa6kqrf6m.png)

就像你在截图中所看到的，我服务器上的默认 PHP-FPM 是**PHP 54**，而我正要将我的域名的 PHP-FPM 实例单独修改成 **PHP 55**。当你为你的域修改 PHP-FPM 后，你可以通过访问 **phpinfo** 页面来确认。

谢谢你们参考本文，我相信这篇文章会给你提供不少信息和帮助。我会为你们推荐关于这个内容的有价值的评论 :)。

---

via: <http://linoxide.com/linux-how-to/enable-multiple-php-fpm-instances-nginx-apache/>

作者：[Saheetha Shameer](http://linoxide.com/author/saheethas/) 译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


通过 Docker 化一个博客网站来开启我们的 Docker 之旅

Summary: 这篇文章包含 Docker 的基本概念，以及如何通过创建一个定制的 Dockerfile 来 Docker 化（Dockerize）一个应用。

应该是翻译的吧，本地用的话，还缺少一步，时间问题<br />
ENV TZ "Asia/Shanghai"

这句有点问题："我们通过-p 8080:80语法将主机80端口映射到容器内部的80端口。"

谢谢！

![](/data/attachment/album/201606/08/101951fhgozt25myg5g5g9.jpg)

>
> 这篇文章包含 Docker 的基本概念，以及如何通过创建一个定制的 Dockerfile 来 <ruby> Docker 化 <rp>  （ </rp> <rt>  Dockerize </rt> <rp>  ） </rp></ruby>一个应用。
>
>
>

Docker 是一个过去两年来从某个 idea 中孕育而生的有趣技术，公司组织们用它在世界上每个角落来部署应用。在今天的文章中，我将讲述如何通过“<ruby> Docker 化 <rp>  （ </rp> <rt>  Dockerize </rt> <rp>  ） </rp></ruby>”一个现有的应用，来开始我们的 Docker 之旅。这里提到的应用指的就是这个博客！

### 什么是 Docker？

当我们开始学习 Docker 基本概念时，让我们先去搞清楚什么是 Docker 以及它为什么这么流行。Docker 是一个操作系统容器管理工具，它通过将应用打包在操作系统容器中，来方便我们管理和部署应用。

#### 容器 vs. 虚拟机

容器和虚拟机并不完全相似，它是另外一种提供**操作系统虚拟化**的方式。它和标准的虚拟机还是有所不同。

标准的虚拟机一般会包括一个完整的操作系统、操作系统软件包、最后还有一至两个应用。这都得益于为虚拟机提供硬件虚拟化的管理程序。这样一来，一个单一的服务器就可以将许多独立的操作系统作为虚拟客户机运行了。

容器和虚拟机很相似，它们都支持在单一的服务器上运行多个操作环境，只是，在容器中，这些环境并不是一个个完整的操作系统。容器一般只包含必要的操作系统软件包和一些应用。它们通常不会包含一个完整的操作系统或者硬件的虚拟化。这也意味着容器比传统的虚拟机开销更少。

容器和虚拟机常被误认为是两种对立的技术。虚拟机采用一个物理服务器来提供全功能的操作环境，该环境会和其余虚拟机一起共享这些物理资源。容器一般用来隔离一个单一主机上运行的应用进程，以保证隔离后的进程之间不能相互影响。事实上，容器和 **BSD Jails** 以及 `chroot` 进程的相似度，超过了和完整虚拟机的相似度。

#### Docker 在容器之上提供了什么

Docker 本身不是一个容器运行环境，事实上，只是一个与具体实现无关的容器技术，Docker 正在努力支持 [Solaris Zones](https://blog.docker.com/2015/08/docker-oracle-solaris-zones/) 和 [BSD Jails](https://wiki.freebsd.org/Docker)。Docker 提供了一种管理、打包和部署容器的方式。虽然一定程度上，虚拟机多多少少拥有这些类似的功能，但虚拟机并没有完整拥有绝大多数的容器功能，即使拥有，这些功能用起来都并没有 Docker 来的方便或那么完整。

现在，我们应该知道 Docker 是什么了，然后，我们将从安装 Docker，并部署一个公开的预构建好的容器开始，学习 Docker 是如何工作的。

### 从安装开始

默认情况下，Docker 并不会自动被安装在您的计算机中，所以，第一步就是安装 Docker 软件包；我们的教学机器系统是 Ubuntu 14.0.4，所以，我们将使用 Apt 软件包管理器，来执行安装操作。

```
# apt-get install docker.io
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  aufs-tools cgroup-lite git git-man liberror-perl
Suggested packages:
  btrfs-tools debootstrap lxc rinse git-daemon-run git-daemon-sysvinit git-doc
  git-el git-email git-gui gitk gitweb git-arch git-bzr git-cvs git-mediawiki
  git-svn
The following NEW packages will be installed:
  aufs-tools cgroup-lite docker.io git git-man liberror-perl
0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 7,553 kB of archives.
After this operation, 46.6 MB of additional disk space will be used.
Do you want to continue? [Y/n] y

```

为了检查当前是否有容器运行，我们可以执行`docker`命令，加上`ps`选项

```
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

```

`docker`命令中的`ps`功能类似于 Linux 的`ps`命令。它将显示可找到的 Docker 容器及其状态。由于我们并没有启动任何 Docker 容器，所以命令没有显示任何正在运行的容器。

### 部署一个预构建好的 nginx Docker 容器

我比较喜欢的 Docker 特性之一就是 Docker 部署预先构建好的容器的方式，就像`yum`和`apt-get`部署包一样。为了更好地解释，我们来部署一个运行着 nginx web 服务器的预构建容器。我们可以继续使用`docker`命令，这次选择`run`选项。

```
# docker run -d nginx
Unable to find image 'nginx' locally
Pulling repository nginx
5c82215b03d1: Download complete
e2a4fb18da48: Download complete
58016a5acc80: Download complete
657abfa43d82: Download complete
dcb2fe003d16: Download complete
c79a417d7c6f: Download complete
abb90243122c: Download complete
d6137c9e2964: Download complete
85e566ddc7ef: Download complete
69f100eb42b5: Download complete
cd720b803060: Download complete
7cc81e9a118a: Download complete

```

`docker`命令的`run`选项，用来通知 Docker 去寻找一个指定的 Docker 镜像，然后启动运行着该镜像的容器。默认情况下，Docker 容器运行在前台，这意味着当你运行`docker run`命令的时候，你的 shell 会被绑定到容器的控制台以及运行在容器中的进程。为了能在后台运行该 Docker 容器，我们使用了`-d` (**detach**)标志。

再次运行`docker ps`命令，可以看到 nginx 容器正在运行。

```
# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
f6d31ab01fc9        nginx:latest        nginx -g 'daemon off   4 seconds ago       Up 3 seconds        443/tcp, 80/tcp     desperate_lalande

```

从上面的输出信息中，我们可以看到正在运行的名为`desperate_lalande`的容器，它是由`nginx:latest image`（LCTT 译注： nginx 最新版本的镜像）构建而来得。

#### Docker 镜像

镜像是 Docker 的核心特征之一，类似于虚拟机镜像。和虚拟机镜像一样，Docker 镜像是一个被保存并打包的容器。当然，Docker 不只是创建镜像，它还可以通过 Docker 仓库发布这些镜像，Docker 仓库和软件包仓库的概念差不多，它让 Docker 能够模仿`yum`部署软件包的方式来部署镜像。为了更好地理解这是怎么工作的，我们来回顾`docker run`执行后的输出。

```
# docker run -d nginx
Unable to find image 'nginx' locally

```

我们可以看到第一条信息是，Docker 不能在本地找到名叫 nginx 的镜像。这是因为当我们执行`docker run`命令时，告诉 Docker 运行一个基于 nginx 镜像的容器。既然 Docker 要启动一个基于特定镜像的容器，那么 Docker 首先需要找到那个指定镜像。在检查远程仓库之前，Docker 首先检查本地是否存在指定名称的本地镜像。

因为系统是崭新的，不存在 nginx 镜像，Docker 将选择从 Docker 仓库下载之。

```
Pulling repository nginx
5c82215b03d1: Download complete
e2a4fb18da48: Download complete
58016a5acc80: Download complete
657abfa43d82: Download complete
dcb2fe003d16: Download complete
c79a417d7c6f: Download complete
abb90243122c: Download complete
d6137c9e2964: Download complete
85e566ddc7ef: Download complete
69f100eb42b5: Download complete
cd720b803060: Download complete
7cc81e9a118a: Download complete

```

这就是第二部分输出信息显示给我们的内容。默认情况下，Docker 会使用 [Docker Hub](https://hub.docker.com/) 仓库，该仓库由 Docker 公司维护。

和 Github 一样，在 Docker Hub 创建公共仓库是免费的，私人仓库就需要缴纳费用了。当然，部署你自己的 Docker 仓库也是可以的，事实上只需要简单地运行`docker run registry`命令就行了。但在这篇文章中，我们的重点将不是讲解如何部署一个定制的注册服务。

#### 关闭并移除容器

在我们继续构建定制容器之前，我们先清理一下 Docker 环境，我们将关闭先前的容器，并移除它。

我们利用`docker`命令和`run`选项运行一个容器，所以，为了停止同一个容器，我们简单地在执行`docker`命令时，使用`kill`选项，并指定容器名。

```
# docker kill desperate_lalande
desperate_lalande

```

当我们再次执行`docker ps`，就不再有容器运行了

```
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

```

但是，此时，我们这是停止了容器；虽然它不再运行，但仍然存在。默认情况下，`docker ps`只会显示正在运行的容器，如果我们附加`-a` (all) 标识，它会显示所有运行和未运行的容器。

```
# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                           PORTS               NAMES
f6d31ab01fc9        5c82215b03d1        nginx -g 'daemon off   4 weeks ago         Exited (-1) About a minute ago                       desperate_lalande

```

为了能完整地移除容器，我们在用`docker`命令时，附加`rm`选项。

```
# docker rm desperate_lalande
desperate_lalande

```

虽然容器被移除了；但是我们仍拥有可用的**nginx**镜像（LCTT 译注：镜像缓存）。如果我们重新运行`docker run -d nginx`，Docker 就无需再次拉取 nginx 镜像即可启动容器。这是因为我们本地系统中已经保存了一个副本。

为了列出系统中所有的本地镜像，我们运行`docker`命令，附加`images`选项。

```
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
nginx               latest              9fab4090484a        5 days ago          132.8 MB

```

### 构建我们自己的镜像

截至目前，我们已经使用了一些基础的 Docker 命令来启动、停止和移除一个预构建好的普通镜像。为了“Docker 化（Dockerize）”这篇博客，我们需要构建我们自己的镜像，也就是创建一个 **Dockerfile**。

在大多数虚拟机环境中，如果你想创建一个机器镜像，首先，你需要建立一个新的虚拟机、安装操作系统、安装应用，最后将其转换为一个模板或者镜像。但在 Docker 中，所有这些步骤都可以通过 Dockerfile 实现全自动。Dockerfile 是向 Docker 提供构建指令去构建定制镜像的方式。在这一章节，我们将编写能用来部署这个博客的定制 Dockerfile。

#### 理解应用

我们开始构建 Dockerfile 之前，第一步要搞明白，我们需要哪些东西来部署这个博客。

这个博客本质上是由一个静态站点生成器生成的静态 HTML 页面，这个生成器是我编写的，名为 **hamerkop**。这个生成器很简单，它所做的就是生成该博客站点。所有的代码和源文件都被我放在了一个公共的 [Github 仓库](https://github.com/madflojo/blog)。为了部署这篇博客，我们要先从 Github 仓库把这些内容拉取下来，然后安装 **Python** 和一些 **Python** 模块，最后执行`hamerkop`应用。我们还需要安装 **nginx**，来运行生成后的内容。

截止目前，这些还是一个简单的 Dockerfile，但它却给我们展示了相当多的 [Dockerfile 语法]((https://docs.docker.com/v1.8/reference/builder/))。我们需要克隆 Github 仓库，然后使用你最喜欢的编辑器编写 Dockerfile，我选择`vi`。

```
# git clone https://github.com/madflojo/blog.git
Cloning into 'blog'...
remote: Counting objects: 622, done.
remote: Total 622 (delta 0), reused 0 (delta 0), pack-reused 622
Receiving objects: 100% (622/622), 14.80 MiB | 1.06 MiB/s, done.
Resolving deltas: 100% (242/242), done.
Checking connectivity... done.
# cd blog/
# vi Dockerfile

```

#### FROM - 继承一个 Docker 镜像

第一条 Dockerfile 指令是`FROM`指令。这将指定一个现存的镜像作为我们的基础镜像。这也从根本上给我们提供了继承其他 Docker 镜像的途径。在本例中，我们还是从刚刚我们使用的 **nginx** 开始，如果我们想从头开始，我们可以通过指定`ubuntu:latest`来使用 **Ubuntu** Docker 镜像。

```
## Dockerfile that generates an instance of http://bencane.com

FROM nginx:latest
MAINTAINER Benjamin Cane <ben@bencane.com>

```

除了`FROM`指令，我还使用了`MAINTAINER`，它用来显示 Dockerfile 的作者。

Docker 支持使用`#`作为注释，我将经常使用该语法，来解释 Dockerfile 的部分内容。

#### 运行一次测试构建

因为我们继承了 **nginx** Docker镜像，我们现在的 Dockerfile 也就包括了用来构建 **nginx** 镜像的 [Dockerfile](https://github.com/nginxinc/docker-nginx/blob/08eeb0e3f0a5ee40cbc2bc01f0004c2aa5b78c15/Dockerfile) 中所有指令。这意味着，此时我们可以从该 Dockerfile 中构建出一个 Docker 镜像，然后以该镜像运行一个容器。虽然，最终的镜像和 **nginx** 镜像本质上是一样的，但是我们这次是通过构建 Dockerfile 的形式，然后我们将讲解 Docker 构建镜像的过程。

想要从 Dockerfile 构建镜像，我们只需要在运行 `docker` 命令的时候，加上 `build` 选项。

```
# docker build -t blog /root/blog
Sending build context to Docker daemon  23.6 MB
Sending build context to Docker daemon
Step 0 : FROM nginx:latest
 ---> 9fab4090484a
Step 1 : MAINTAINER Benjamin Cane <ben@bencane.com>
 ---> Running in c97f36450343
 ---> 60a44f78d194
Removing intermediate container c97f36450343
Successfully built 60a44f78d194

```

上面的例子，我们使用了`-t` (**tag**)标识给镜像添加“blog”的标签。实质上我们就是在给镜像命名，如果我们不指定标签，就只能通过 Docker 分配的 **Image ID** 来访问镜像了。本例中，从 Docker 构建成功的信息可以看出，**Image ID**值为 `60a44f78d194`。

除了`-t`标识外，我还指定了目录`/root/blog`。该目录被称作“构建目录”，它将包含 Dockerfile，以及其它需要构建该容器的文件。

现在我们构建成功了，下面我们开始定制该镜像。

#### 使用 RUN 来执行 apt-get

用来生成 HTML 页面的静态站点生成器是用 **Python** 语言编写的，所以，在 Dockerfile 中需要做的第一件定制任务是安装 Python。我们将使用 Apt 软件包管理器来安装 Python 软件包，这意味着在 Dockerfile 中我们要指定运行`apt-get update`和`apt-get install python-dev`；为了完成这一点，我们可以使用`RUN`指令。

```
## Dockerfile that generates an instance of http://bencane.com

FROM nginx:latest
MAINTAINER Benjamin Cane <ben@bencane.com>

## Install python and pip
RUN apt-get update
RUN apt-get install -y python-dev python-pip

```

如上所示，我们只是简单地告知 Docker 构建镜像的时候，要去执行指定的`apt-get`命令。比较有趣的是，这些命令只会在该容器的上下文中执行。这意味着，即使在容器中安装了`python-dev`和`python-pip`，但主机本身并没有安装这些。说的更简单点，`pip`命令将只在容器中执行，出了容器，`pip`命令不存在。

还有一点比较重要的是，Docker 构建过程中不接受用户输入。这说明任何被`RUN`指令执行的命令必须在没有用户输入的时候完成。由于很多应用在安装的过程中需要用户的输入信息，所以这增加了一点难度。不过我们例子中，`RUN`命令执行的命令都不需要用户输入。

#### 安装 Python 模块

**Python** 安装完毕后，我们现在需要安装 Python 模块。如果在 Docker 外做这些事，我们通常使用`pip`命令，然后参考我的博客 Git 仓库中名叫`requirements.txt`的文件。在之前的步骤中，我们已经使用`git`命令成功地将 Github 仓库“克隆”到了`/root/blog`目录；这个目录碰巧也是我们创建`Dockerfile`的目录。这很重要，因为这意味着 Docker 在构建过程中可以访问这个 Git 仓库中的内容。

当我们执行构建后，Docker 将构建的上下文环境设置为指定的“构建目录”。这意味着目录中的所有文件都可以在构建过程中被使用，目录之外的文件（构建环境之外）是不能访问的。

为了能安装所需的 Python 模块，我们需要将`requirements.txt`从构建目录拷贝到容器中。我们可以在`Dockerfile`中使用`COPY`指令完成这一需求。

```
## Dockerfile that generates an instance of http://bencane.com

FROM nginx:latest
MAINTAINER Benjamin Cane <ben@bencane.com>

## Install python and pip
RUN apt-get update
RUN apt-get install -y python-dev python-pip

## Create a directory for required files
RUN mkdir -p /build/

## Add requirements file and run pip
COPY requirements.txt /build/
RUN pip install -r /build/requirements.txt

```

在`Dockerfile`中，我们增加了3条指令。第一条指令使用`RUN`在容器中创建了`/build/`目录。该目录用来拷贝生成静态 HTML 页面所需的一切应用文件。第二条指令是`COPY`指令，它将`requirements.txt`从“构建目录”(`/root/blog`)拷贝到容器中的`/build/`目录。第三条使用`RUN`指令来执行`pip`命令；安装`requirements.txt`文件中指定的所有模块。

当构建定制镜像时，`COPY`是条重要的指令。如果在 Dockerfile 中不指定拷贝文件，Docker 镜像将不会包含requirements.txt 这个文件。在 Docker 容器中，所有东西都是隔离的，除非在 Dockerfile 中指定执行，否则容器中不会包括所需的依赖。

#### 重新运行构建

现在，我们让 Docker 执行了一些定制任务，现在我们尝试另一次 blog 镜像的构建。

```
# docker build -t blog /root/blog
Sending build context to Docker daemon 19.52 MB
Sending build context to Docker daemon
Step 0 : FROM nginx:latest
 ---> 9fab4090484a
Step 1 : MAINTAINER Benjamin Cane <ben@bencane.com>
 ---> Using cache
 ---> 8e0f1899d1eb
Step 2 : RUN apt-get update
 ---> Using cache
 ---> 78b36ef1a1a2
Step 3 : RUN apt-get install -y python-dev python-pip
 ---> Using cache
 ---> ef4f9382658a
Step 4 : RUN mkdir -p /build/
 ---> Running in bde05cf1e8fe
 ---> f4b66e09fa61
Removing intermediate container bde05cf1e8fe
Step 5 : COPY requirements.txt /build/
 ---> cef11c3fb97c
Removing intermediate container 9aa8ff43f4b0
Step 6 : RUN pip install -r /build/requirements.txt
 ---> Running in c50b15ddd8b1
Downloading/unpacking jinja2 (from -r /build/requirements.txt (line 1))
Downloading/unpacking PyYaml (from -r /build/requirements.txt (line 2))
<truncated to reduce noise>
Successfully installed jinja2 PyYaml mistune markdown MarkupSafe
Cleaning up...
 ---> abab55c20962
Removing intermediate container c50b15ddd8b1
Successfully built abab55c20962

```

上述输出所示，我们可以看到构建成功了，我们还可以看到另外一个有趣的信息`---> Using cache`。这条信息告诉我们，Docker 在构建该镜像时使用了它的构建缓存。

#### Docker 构建缓存

当 Docker 构建镜像时，它不仅仅构建一个单独的镜像；事实上，在构建过程中，它会构建许多镜像。从上面的输出信息可以看出，在每一“步”执行后，Docker 都在创建新的镜像。

```
 Step 5 : COPY requirements.txt /build/
  ---> cef11c3fb97c

```

上面片段的最后一行可以看出，Docker 在告诉我们它在创建一个新镜像，因为它打印了**Image ID** : `cef11c3fb97c`。这种方式有用之处在于，Docker能在随后构建这个 **blog** 镜像时将这些镜像作为缓存使用。这很有用处，因为这样， Docker 就能加速同一个容器中新构建任务的构建流程。从上面的例子中，我们可以看出，Docker 没有重新安装`python-dev`和`python-pip`包，Docker 则使用了缓存镜像。但是由于 Docker 并没有找到执行`mkdir`命令的构建缓存，随后的步骤就被一一执行了。

Docker 构建缓存一定程度上是福音，但有时也是噩梦。这是因为决定使用缓存或者重新运行指令的因素很少。比如，如果`requirements.txt`文件发生了修改，Docker 会在构建时检测到该变化，然后 Docker 会重新执行该执行那个点往后的所有指令。这得益于 Docker 能查看`requirements.txt`的文件内容。但是，`apt-get`命令的执行就是另一回事了。如果提供 Python 软件包的 **Apt** 仓库包含了一个更新的 python-pip 包；Docker 不会检测到这个变化，转而去使用构建缓存。这会导致之前旧版本的包将被安装。虽然对`python-pip`来说，这不是主要的问题，但对使用了存在某个致命攻击缺陷的软件包缓存来说，这是个大问题。

出于这个原因，抛弃 Docker 缓存，定期地重新构建镜像是有好处的。这时，当我们执行 Docker 构建时，我简单地指定`--no-cache=True`即可。

### 部署博客的剩余部分

Python 软件包和模块安装后，接下来我们将拷贝需要用到的应用文件，然后运行`hamerkop`应用。我们只需要使用更多的`COPY` 和 `RUN`指令就可完成。

```
## Dockerfile that generates an instance of http://bencane.com

FROM nginx:latest
MAINTAINER Benjamin Cane <ben@bencane.com>

## Install python and pip
RUN apt-get update
RUN apt-get install -y python-dev python-pip

## Create a directory for required files
RUN mkdir -p /build/

## Add requirements file and run pip
COPY requirements.txt /build/
RUN pip install -r /build/requirements.txt

## Add blog code nd required files
COPY static /build/static
COPY templates /build/templates
COPY hamerkop /build/
COPY config.yml /build/
COPY articles /build/articles

## Run Generator
RUN /build/hamerkop -c /build/config.yml

```

现在我们已经写出了剩余的构建指令，我们再次运行另一次构建，并确保镜像构建成功。

```
# docker build -t blog /root/blog/
Sending build context to Docker daemon 19.52 MB
Sending build context to Docker daemon
Step 0 : FROM nginx:latest
 ---> 9fab4090484a
Step 1 : MAINTAINER Benjamin Cane <ben@bencane.com>
 ---> Using cache
 ---> 8e0f1899d1eb
Step 2 : RUN apt-get update
 ---> Using cache
 ---> 78b36ef1a1a2
Step 3 : RUN apt-get install -y python-dev python-pip
 ---> Using cache
 ---> ef4f9382658a
Step 4 : RUN mkdir -p /build/
 ---> Using cache
 ---> f4b66e09fa61
Step 5 : COPY requirements.txt /build/
 ---> Using cache
 ---> cef11c3fb97c
Step 6 : RUN pip install -r /build/requirements.txt
 ---> Using cache
 ---> abab55c20962
Step 7 : COPY static /build/static
 ---> 15cb91531038
Removing intermediate container d478b42b7906
Step 8 : COPY templates /build/templates
 ---> ecded5d1a52e
Removing intermediate container ac2390607e9f
Step 9 : COPY hamerkop /build/
 ---> 59efd1ca1771
Removing intermediate container b5fbf7e817b7
Step 10 : COPY config.yml /build/
 ---> bfa3db6c05b7
Removing intermediate container 1aebef300933
Step 11 : COPY articles /build/articles
 ---> 6b61cc9dde27
Removing intermediate container be78d0eb1213
Step 12 : RUN /build/hamerkop -c /build/config.yml
 ---> Running in fbc0b5e574c5
Successfully created file /usr/share/nginx/html//2011/06/25/checking-the-number-of-lwp-threads-in-linux
Successfully created file /usr/share/nginx/html//2011/06/checking-the-number-of-lwp-threads-in-linux
<truncated to reduce noise>
Successfully created file /usr/share/nginx/html//archive.html
Successfully created file /usr/share/nginx/html//sitemap.xml
 ---> 3b25263113e1
Removing intermediate container fbc0b5e574c5
Successfully built 3b25263113e1

```

#### 运行定制的容器

成功的一次构建后，我们现在就可以通过运行`docker`命令和`run`选项来运行我们定制的容器，和之前我们启动 nginx 容器一样。

```
# docker run -d -p 80:80 --name=blog blog
5f6c7a2217dcdc0da8af05225c4d1294e3e6bb28a41ea898a1c63fb821989ba1

```

我们这次又使用了`-d` (**detach**)标识来让Docker在后台运行。但是，我们也可以看到两个新标识。第一个新标识是`--name`，这用来给容器指定一个用户名称。之前的例子，我们没有指定名称，因为 Docker 随机帮我们生成了一个。第二个新标识是`-p`，这个标识允许用户从主机映射一个端口到容器中的一个端口。

之前我们使用的基础 **nginx** 镜像分配了80端口给 HTTP 服务。默认情况下，容器内的端口通道并没有绑定到主机系统。为了让外部系统能访问容器内部端口，我们必须使用`-p`标识将主机端口映射到容器内部端口。上面的命令，我们通过`-p 80:80`语法将主机80端口映射到容器内部的80端口。

经过上面的命令，我们的容器看起来成功启动了，我们可以通过执行`docker ps`核实。

```
# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                         NAMES
d264c7ef92bd        blog:latest         nginx -g 'daemon off   3 seconds ago       Up 3 seconds        443/tcp, 0.0.0.0:80->80/tcp   blog

```

### 总结

截止目前，我们拥有了一个运行中的定制 Docker 容器。虽然在这篇文章中，我们只接触了一些 Dockerfile 指令用法，但是我们还是要学习所有的指令。我们可以检查 [Docker's reference page](https://docs.docker.com/v1.8/reference/builder/) 来获取所有的 Dockerfile 指令用法，那里对指令的用法说明得很详细。

另一个比较好的资源是 [Dockerfile Best Practices page](https://docs.docker.com/engine/articles/dockerfile_best-practices/)，它有许多构建定制 Dockerfile 的最佳练习。有些技巧非常有用，比如战略性地组织好 Dockerfile 中的命令。上面的例子中，我们将`articles`目录的`COPY`指令作为 Dockerfile 中最后的`COPY`指令。这是因为`articles`目录会经常变动。所以，将那些经常变化的指令尽可能地放在最后面的位置，来最优化那些可以被缓存的步骤。

通过这篇文章，我们涉及了如何运行一个预构建的容器，以及如何构建，然后部署定制容器。虽然关于 Docker 你还有许多需要继续学习的地方，但我想这篇文章给了你如何继续开始的好建议。当然，如果你认为还有一些需要继续补充的内容，在下面评论即可。

---

via: <http://bencane.com/2015/12/01/getting-started-with-docker-by-dockerizing-this-blog/>

作者：Benjamin Cane 译者：[su-kaiyao](https://github.com/su-kaiyao) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出


将 Linux 软件打包成 Snap 软件包

![](/data/attachment/album/201606/08/122353t8s8o9ibphdb8ods.png)

在 Linux 分发应用不总是那么容易。有各种不同的包格式、基础系统、可用库，随着发行版的一次次发布，所有的这些都让人头疼。然而，现在我们有了更简单的东西：Snap。

Snap 是开发者打包他们应用的新途径，它相对于传统包格式，如 .deb，.rpm 等带来了许多优点。Snap 安全，彼此隔离，宿主系统使用了类似 AppArmor 的技术，它们跨平台且自足的，让开发者可以准确地将应用所需要的依赖打包到一起。沙盒隔离也加强了安全，并允许应用和整个基于 snap 的系统，在出现问题的时候可以回滚。Snap 确实是 Linux 应用打包的未来。

创建一个 snap 包并不困难。首先，你需要一个 snap 基础运行环境，能够让你的桌面环境认识并运行 snap 软件包，这个工具叫做 snapd ，默认内置于所有 Ubuntu 16.04 系统中。接着你需要创建 snap 的工具 Snapcraft，它可以通过一个简单的命令安装：

```
$ sudo apt-get install snapcraft

```

这个环境安装好了之后就可以 snap 起来了。

Snap 使用一个特定的 YAML 格式的文件 snapcraft.yaml，它定义了应用是如何打包的以及它需要的依赖。用一个简单的应用来演示一下，下面的 YAML 文件是个如何 snap 一个 moon-buggy 游戏的实际例子，该游戏在 Ubuntu 源中提供。

```
name: moon-buggy
version: 1.0.51.11
summary: Drive a car across the moon
description: |
A simple command-line game where you drive a buggy on the moon
apps:
  play:
    command: usr/games/moon-buggy
parts:
  moon-buggy:
    plugin: nil
    stage-packages: [moon-buggy]
    snap:
      – usr/games/moon-buggy

```

上面的代码出现了几个新概念。第一部分是关于如何让你的应用可以在商店找到的信息，设置软件包的元数据名称、版本号、摘要、以及描述。apps 部分实现了 play 命令，指向了 moon-buggy 可执行文件位置。parts 部分告诉 snapcraft 用来构建应用所需要的插件以及依赖的包。在这个简单的例子中我们需要的所有东西就是来自 Ubuntu 源中的 moon-buggy 应用本身，snapcraft 负责剩下的工作。

在你的 snapcraft.yaml 所在目录下运行 snapcraft ，它会创建 moon-buggy*1.0.51.11*amd64.snap 包，可以通过以下命令来安装它：

```
$ snap install moon-buggy_1.0.51.11_amd64.snap

```

想了解更复杂一点的 snap 打包操作，比如基于 Electron 的 Simplenote 可以[看这里](http://www.simplenote.com/)，在线教程在[这里](http://www.linuxuk.org/post/20160518_snapping_electron_based_applications_simplenote/)，相应的代码在 [Github](https://github.com/jamiedbennett/snaps/tree/master/simplenote)。更多的例子可以在 Ubuntu 开发者[站点](https://developer.ubuntu.com/en/desktop/get-started/)找到。

---

via: <https://insights.ubuntu.com/2016/06/01/apps-to-snaps/>

作者：[Jamie](https://insights.ubuntu.com/author/jamiebennett/) 译者：[alim0x](https://github.com/alim0x) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


开源新闻速递：Linux Mint 18 发布 beta 版本

Summary: PCLinuxOS 64 2016.06 Xfce 社区版发布

### 今日关注

期待已久的代号为“Sarah”的 Linux Mint 18 发布 beta 版本。正式版本将于下个月发布。Linux Mint 18 有两个版本，Cinnamon 和 MATE 版本。

Cinnamon 版本采用 Cinnamon 3.0 桌面环境，基于流行的 Arc GTK 和 Moka 的 Mint-Y 主题定制。搭载 Linux 4.4 系列内核，基于 Ubuntu 16.04 LTS (Xenial Xerus) 操作系统，继承了其大部分的核心组件和软件应用。其中预安装的应用有 Mozilla Firefox 46.0, Mozilla Thunderbird 38.7.2 邮件和新闻客户端, LibreOffice 5.1.2 办公套件, Transmission 2.84 BitTorrent 客户端, Pidgin 2.10.12 IM 客户端, HexChat 2.10.2 IRC 客户端, 和 GIMP 2.8.16 图像编辑器。

MATE 版本采用最新的 MATE 1.14.1 桌面环境，跟 Cinnamon 版本一样，也是搭载了 Linux 4.4 内核，继承了 Ubuntu 16.04 LTS (Xenial Xerus) 的许多核心组件。不过这个版本有自己的一些软件应用集合，比如 Mozilla Firefox 46.0, Mozilla Thunderbird 38.7.2, Pidgin 2.10.12 IM 客户端, Banshee 2.6.2, LibreOffice 5.1.2, GIMP 2.8.16, Transmission 2.84, HexChat 2.10.2, 和 Synaptic Package Manger 0.83。

目前这两个类型的beta版本都可以从官网进行下载了。不过记得这只是预发行版本，还不是正式版本，不要急着用于生产环境。

![](/data/attachment/album/201606/08/212714r58so55c5z59c9pc.jpg)

### 新闻摘要

* 未来的一些 Ubuntu 智能手机的 OTA 升级可能会实现生物识别功能。上周 OTA-11 更新发布，那么接下来的 OTA-12 中，就有可能会实现生物识别功能。敬请期待。
* PCLinuxOS 64 2016.06 Xfce 社区版发布，采用轻量级的 Xfce 4.12 桌面环境，搭载 Linux 内核 4.4.11 LTS。这一新版本的系统支持新的操作快捷键，并且可以对重启、挂起、关机这样的系统操作进行快捷键绑定。目前已经可以从官网进行下载体验了。
* Wireshark 2.0.4 [发布](https://www.wireshark.org/docs/relnotes/wireshark-2.0.4.html)。这一版本修复了若干安全漏洞和 bug，比如闪退的问题。同时也更新了对内置的像 IPv4, IEEE 802.11, ICMPv6, Ethernet, NFS, AFS 等协议的支持。目前已经可以下载体验了。
* Mesa 12.0.0 3D 图像库第二个候选版本发布，开始进行公测。这一候选版本对60个问题进行了修复，值得一提的是对 Intel i965 video 驱动的改善。第三个候选版本预计下周发布。
* Samba 4.4.4 [发布](https://www.samba.org/samba/history/samba-4.4.4.html)，修复了共享模式锁定下的内存泄露问题，提供了对 systemd 230 的支持。


开源新闻速递：Linux 内核 4.5 结束支持，发布了该系列最后一个版本

Summary:
NetOS 8.0 发布；
Firefox 48 支持多进程模式

opera firefox chrome三大浏览器狂刷版本号

来自安徽合肥的 Internet Explorer 11.0|Windows 7 用户

也没有什么实质性的改进

我是火狐，chrome混着用

### 今日关注

Greg Kroah-Hartman [发布](http://article.gmane.org/gmane.linux.kernel.stable/181480)了 Linux 内核 4.5.7，这是 4.5 系列的最后一个维护版本，请使用该系列内核的用户尽快升级到 4.6！此外，还发布了 4.4.13 LTS 、Linux Kernel 4.6.2 、Linux Kernel 3.14.72 LTS。

![](/data/attachment/album/201606/09/201607dcxqyrshhrvghhuh.jpg)

### 新闻摘要

* NetOS 8.0 的三个版本同时发布，NetOS, NetOS 企业版, 和 NetOS 教育版。NetOS 8.0 使用了 Black Lab Linux 的大部分最新的技术。包含了许多基于web的app，当然还有一些传统的本地安装的应用程序。NetOS 基于 Ubuntu Linux, 因此用户也可以从从 Debian/Ubuntu 仓库下载软件。NetOS 8.0 目前可以免费[下载](http://distro.ibiblio.org/blacklab/enterprise/netos-8-x86_64.iso)。不过 NetOS 的企业版和教育版是收费的，需要的可以从官网进行购买。[更多详情](/article-7443-1.html)。
* Red Hat Software Collection 2.2 和 Red Hat Developer Toolset 4.1 正式[发布](https://www.redhat.com/en/about/press-releases/red-hat-software-collections-22-and-red-hat-developer-toolset-41-now-generally-available)。Red Hat Software Collections 2.2 提供了对一些开源数据库的支持，如 MariaDB 10.1, PostgreSQL 9.5, 还有 MongoDB 3.2，以及对开源的编程语言的支持，如 Python 3.5, Ruby 2.3, Rails 4.2, Maven 3.3, and Node.js v4.4，此外还有对一些核心组件的更新。Red Hat Developer Toolset 4.1 提供了对 GCC 5.3 和 GDB 7.11 的支持，还支持最新的 Eclipse IDE 4.5.2 。
* Firefox 48 Beta 版本发布，推出了对 e10s （Electrolysis）的支持，e10s 是多进程模式，即将不同的任务分给不同的进程处理，在目前刚刚推出的阶段，只是将浏览器的 GUI 和内容渲染分为两个进程，这样如果内容导致崩溃的话，不会导致整个浏览器崩溃。此外，前两天刚刚发布的 Firefox 47 修复了许多安全问题，其中包括三个致命的安全问题，请尽快进行更新。
* Opera 38 发布，这一版本增加了一个新的节电模块，可以增加 40% 的电池使用时间。此外，广告阻拦功能支持定制的广告阻拦列表，以及提供了自定义主题支持。


微软对 Ubuntu Bash on Windows 进行了“巨大改进”，支持 Tmux

Summary:
Bash on Windows 中的 DrvFs 支持大小写敏感；
以及许多改进和修复。

Ubuntu火起来就想做个bash忽悠我们回去Windows，没用的，我再也不会回去使用Windows了

不是特别期待，但是如果做出来了，用用也无妨，至少某些简单的操作可以在 windows 下进行了，不用去切换系统，或者特地装个虚拟机。

我要GNOME，我要kde，我要xfce，我要unity，我要dde

有这时间,把你那那恶心的内核和那恶心的win32 API换掉吧

居然有两个支持。难道都换成苹果？

WinRT API 表示不服

Mac 大法好！

good, 以后可以在windows下方便的用bash实在是太好了

你想用什么就用什么，微软有强制吗？

昨天，微软针对 Insiders 测试人群[发布](https://msdn.microsoft.com/en-us/commandline/wsl/release_notes)了 Windows 10 build 14361 更新版本，在这个版本中，微软带来了几个重要的改进，其中我们最关注的是对 Bash on Ubuntu on Windows 的“巨大改进”。

![](/data/attachment/album/201606/10/094311abhbbqhbyabbdaak.jpg)

在这个版本中，极大地增强了 TTY/PTY 支持，换言之，现在 Tmux 这样的需要<ruby> 伪终端 <rt>  Pseudo Terminals </rt></ruby> （PTY）支持的应用可以工作了！此外，可以对 TTY 设备进行 chmod 和 chown 操作了。

Bash on Windows 中的 DrvFs 支持大小写敏感。在 /mnt/c 中你可以存储仅是大小写不同的多个文件，比如说 case.txt 和 CASE.TXT 就是两个不同的文件。不过，离开 Bash on Windows 环境，这两个文件虽然依旧存在，但是对它们的操作“也许会发生不可预料的错误”。这是因为 NTFS 虽然可以存储大小写不同的同名文件，但是大部分 Windows 下的应用并不能正确识别，它们会从中选择一个进行处理，具体可以参阅这篇[文章](https://support.microsoft.com/en-us/kb/100625)。

此外，对于 DrvFs 还有一些改进，比如用户可以从 DrvFs 中删除和 chmod 只读文件，DrvFs 下会隐藏 %LOCALAPPDATA%\lxss 目录。

此外还有一些改变：

* 为了保持和 Linux 的习惯一致， 0.0.0.0 和 :: 可以用来指代 localhost 了。
* 修复了某些情况下断开终端连接时挂起的问题
* sendmsg/recvmsg 现在可以处理 IO 向量长度大于1的情况
* 关闭时 socket 会得到 epoll 可读的提示
* 用户可以脱离自动生成的 hosts 文件。
* 安装 Ubuntu on Windows 时，自动根据 NT locale 来设置 Linux 下的 locale 。
* lxrun /uninstall 在删除文件和文件夹时工作的更好
* 修复了当用户已经存在时的安装问题
* 为 df 命令实现了 /proc/mountinfo
* 增加了 /proc/sys/vm/swappiness
* 允许通过 /proc/self/fd 重新打开管道
* strace 可以正确工作了
* 更好的支持了“~”，比如现在支持 bash ~ -c ls
* 改进支持 X11 应用，比如 xEmacs
* 优化了命令参数结构，运行超长参数列表
* ps -f 工作正常
* 更新了初始线程堆栈大小以匹配 Ubuntu 的默认设置，并正确地报告该大小给 get\_rlimit 系统调用
* 改进了 pico 进程镜像名称的输出
* 修复了子目录名 . 和 .. 的符号链接错误代码
* 等等……

如果你还不知道如何使用 Bash on Ubuntu on Windows，可以[参阅我们之前的文章](/article-7209-1.html)。


开源新闻速递：Fedora 24 第四次延迟发布

Summary: jQuery 3.0 发布！

fedora 发布日程没有改，你们哪里得到的消息。

### 今日关注

![](/data/attachment/album/201606/10/222837hu1t4sksmrcnjtef.jpg)

这已经是传统了，Fedora 24 的发布再次延迟。嗯，让我们数数，这是[正式版本的第四次延迟发布了](https://fedoraproject.org/wiki/Releases/24/Schedule)。在这个版本的开发周期中其实已经延迟了不下二十次了，围观群众对此表示情绪稳定，我们能说计划就是用来改变的嘛？由于临时发现该版本在安装了 Windows 10 的 Dell Precision M6800 机器上因为 [GRUB2 的一个问题](https://qa.fedoraproject.org/blockerbugs/milestone/24/final/buglist)而无法启动，进而导致发布延期。这次预计要到 6.21 号进行发布。

![Fedora 24 发行计划，目前还没更新最新的延期信息](/data/attachment/album/201606/10/221159s88al0xujmhl6lh6.jpg)

jQuery 3.0 [发布](http://blog.jquery.com/2016/06/09/jquery-3-0-final-released/)，继承了 jQuery 一贯的传统，3.0 和 2.0 也不兼容，并且放弃了对 IE6、 IE7 和 IE8 的支持！

### 新闻摘要

* Enlightenment 0.20.9 桌面环境[发布](https://www.enlightenment.org/news/e-0.20.9-release)，带来了超过20个的问题修复和改进，而目前还在 RC 测试的 0.21 也即将推出。
* Linux 内核 3.18.35 LTS [发布](https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1162981.html)、Linux Kernel 4.1.26 LTS 也进行了发布。
* 致力于将最新的 KDE 软件带给用户的 KDE Neon [发布](https://dot.kde.org/2016/06/08/kde-neon-user-edition-56-available-now)了用户版 5.6。它基于最新的稳定版 KDE Plasma 5 桌面环境。该版本自带的应用比较少，这样有经验的 Linux 用户可以根据自己的情况安装自己所需要的软件。
* 最近新[发布](https://www.mozilla.org/en-US/firefox/47.0/releasenotes/)的 Mozilla Firefox 47.0 已经出现在了 Ubuntu 的软件库中，此外也支持 Arch Linux 和 Solus Linux 。
* 继 PCLinuxOS 64 2016.06 MATE 发布之后， PCLinuxOS 64 2016.06 的 Xfce 社区版和 LXDE 社区版也发布了。
* [Git](https://git-scm.com/) 2.8.4 发布。


jQuery 3.0 发布！根本不支持 IE6/7/8

Summary: 这是第一个根本不支持老版本 IE 的 jQuery 版本。

还在用1.x的比例较多吧~~ 2.x都没用过，3.x都正式发布了

用3.0吧 ，哈哈，都在浏览器提示一句，升级浏览器，哈哈

事业单位里还有很多xp的机器...

这是第一个根本不支持老版本 IE 的 jQuery 版本。

jQuery 基金会前天宣布 [jQuery 3.0](http://blog.jquery.com/2016/06/09/jquery-3-0-final-released/) 发布！这是第一个根本不支持老版本 IE 的 jQuery 版本。

![](/data/attachment/album/201606/10/231536mgers6eou9l5upzu.png)

jQuery 3.0 开发于2014年10月。为了从老的 1.0 代码分离，摒弃那些由于要兼容 IE 而增加的庞杂的代码，其最初创建了 2.0 系列版本。3.0 版本是从 2.0 版本分支出来的，但是同 2.0 不兼容，因此更换了新的主版本号。

jQuery 3.0 是 jQuery 的未来所在，以后除了重大安全问题，jQuery 1.0 （最新版本 1.12）和 jQuery 2.0（最新版本 2.2）都不会再进行更新。

你可以通过如下地址直接调用 CDN 上的 jQuery：

* <https://code.jquery.com/jquery-3.0.0.js>
* <https://code.jquery.com/jquery-3.0.0.min.js>

也可以将其下载到本地，比如通过 npm：

```
npm install jquery@3.0.0
```

jQuery 2.0 完全不兼容 1.0，而 3.0 则继承了这个传统，继续不兼容 2.0。jQuery 基金会说 3.0 中有一些中断性的改变，但是用户可以不用太多工作就能将代码迁移到 3.0。

如果你要升级到 3.0，可以参考 [3.0 升级指南](http://jquery.com/upgrade-guide/3.0/)，以及可以通过安装 jQuery Migrate 3.0 来找到你的代码中同 3.0 所不兼容的地方：

* <https://code.jquery.com/jquery-migrate-3.0.0.js>
* <https://code.jquery.com/jquery-migrate-3.0.0.min.js>

或者使用 npm 下载安装：

```
npm install jquery-migrate@3.0.0
```

jQuery 2.0 和 3.0 都不再支持老的 IE6、IE7 和 IE8 浏览器，如果用户必须支持这些旧式浏览器，那就只能使用 jQuery 1.12 了。

除了标准版本之外，如果你不使用 AJAX、效果等功能，你还可以使用一个<ruby> 廋版 <rp>  （ </rp> <rt>  Slim </rt> <rp>  ） </rp></ruby>的 jQuery，它的压缩大小是 23.6kb，而标准版本的大小是 30kb。

* <https://code.jquery.com/jquery-3.0.0.slim.js>
* <https://code.jquery.com/jquery-3.0.0.slim.min.js>


一个 Linux 驱动的微波炉

Summary: David Tulloh用他制作的Linux驱动的微波炉 来展示一个差劲的微波炉会多么难用，以及说明他的项目可以改造这些微波炉使得它们不那么讨人厌。

有趣`

haha

[linux.conf.au](http://linux.conf.au/)里的人们都有一种想到什么就动手去实现的想法。随着硬件开源运动不断地发展壮大，这种想法越来越多，也与现实世界联系的越来越紧密，而不仅仅存在于数字世界中。David Tulloh用他制作的[Linux驱动的微波炉 [WebM]](http://mirror.linux.org.au/linux.conf.au/2016/04_Thursday/D4.303_Costa_Theatre/Linux_driven_microwave.webm)来展示一个差劲的微波炉会多么难用，以及说明他的项目可以改造这些微波炉使得它们不那么讨人厌。

Tulloh的故事要从他买到了一个公认很便宜的微波炉开始说起，它的用户界面比其它微波炉默认的还要糟糕。设定时间时必须使劲按按钮以至于把微波炉都向后推了一段距离——而事实上必须要用力拉仓门把手才能把微波炉拖回原来的位置，这形成了一个“优雅”的平衡。当然这只是极端情况。Tulloh郁闷的是因为这个微波炉近十年来都没有一丁点明显的改善。他可能买到了一个又小又便宜的微波炉，而且特点是大部分人不研究使用手册就不会使用它——和智能手机的对比更加明显：智能手机只需知道一点点的操作指南并且被广泛使用。

改造这个微波炉不一定没有前途，“让微波炉重获新生”——这个想法成为了一个原型，如果Tulloh可以再平衡一下想做的功能和需求之间的关系的话他希望这变成一个众筹项目：一个Linux驱动的微波炉。

![](/data/attachment/album/201606/11/111327szwpbp94ez4xc4e2.jpg)

### 加一点新奇的小玩意

如果把“Linux”和“微波炉”联系在一起的话，你可能会想到给微波炉加上一个智能手机式的触摸屏和网络链接，然后再通过社区做一款微波炉的“革命性”的手机应用，想到这些就像做菜想到分享食谱一样显而易见。但Tulloh的目标和他的原型远远超过这些，他做了两个新奇的功能——热感相机和称量物体质量的称重装置。

这个热感相机提供一个可以精确到两度的八乘八像素的图像，这足够发现一杯牛奶是否加热到沸腾或者牛排是否解冻到快不能用来烹饪。不论发生哪种情况，都可以减小功率或者关掉它。而且在必要的时候会发出警报。这可能不是第一个可以检测温度的微波炉——GE在十年前就开始卖带温度探针的微波炉了——但是一个一直工作的内置传感器比一个手工探针有用多了，尤其是有一个可用的API支持的时候。

第二个新发明是一个嵌入的称重装置，它可以在加热之前称量食物(和容器)。很多食谱根据质量大小给出指导的烹饪时间，很多微波炉支持你手动输入质量以便它帮你计算。利用内置的称重装置，这一过程可以变成自动化的。在许多微波炉的转盘下面稳固地放置一个称重装置是一个机械方面的挑战，不过Tulloh觉得这个问题不难处理。相反，他对微波炉的设计是基于“平板”或者“平板挂车”的风格——在四角各放置一个传感器，这不仅在机械实现上很简单而且很好的达到了要求。

一旦你有了这些额外添加的并与逻辑引擎相连的质量温度传感器，你可以去尝试更多好玩的可能。一杯刚从冰箱里拿出来的冰牛奶的质量温度分布可能会有适度误差。Tulloh发现可以监检测到这种情况，而且提供一些有关的像“煮沸”或者“加热”的选项也是容易做到的（下面有一个模拟的界面，可点击操作的版本请点击右边链接 [here](http://mwgui.tulloh.id.au/)）

![](/data/attachment/album/201606/11/111329uabb3de3eawa1w3d.png)

### 改造陈旧的东西

除了才开发出来的新功能，Tulloh还想要提升那些原本就提供的功能。可能不是所有微波炉的门把手都像Tulloh那个廉价的一样僵硬，但是很少有微波炉将把手设计的让残疾人也能轻松使用。这些缺陷都是可调整的，尤其是在美国，微波炉应该在仓门关闭的时候给出一个确定关闭的提示。这种确认必须是可靠的以预防那些伪劣产品，所以在仓门闭合时固定的槽位里添加一个短杆以确认仓门开闭状态，不至于误使微波炉在仓门开着的时候工作。事实上，必须要有两个相互联系的机关，如果他们提供的结果不一致，保险丝必须断开以便启动一个呼叫服务。Tulloh认为提供一个磁力门闩有更大的灵活性（包含简单的软件控制）并且像磁控也同样用于[磁性钥匙锁](https://en.wikipedia.org/wiki/Magnetic_keyed_lock)，它可以让磁力门闩确认微波炉门是否关闭。

微波炉的另一个痛点是它会发出令人厌烦的声音。Tulloh去掉了蜂鸣器并且使用香蕉派（类似于树莓派的单片机开发板）控制他的微波炉。这可以通过一个把文本转换成语音的系统来用令人愉悦而且可配置的警报来提示和引导使用者。显然，下一步就是装上一个用来控制声音的扩音器。

许多微波炉除了定时和设置功率档位之外还可以做更多的事情——它们为烹饪，加热，化冻等提供一系列的功率档位。加上一个精确的温度测量装置感觉会为这个图表大大扩展这个列表。Andrew Tridgell对一个问题很好奇，加热巧克力——一个需要非常精确的温度控制的过程——是否是可能的。Tulloh没有过这方面的经验，他不敢保证这个一定可以，但是这个实验结果的确值得期待。即使没做成这件事，它也显出了潜在价值——社区接下来可以更进一步去做这件事。

### 实用性怎么样？

Tulloh十分乐意向全世界分享这个linux驱动的微波炉，他希望看到（因为这件事）形成一个社区并且想看到它接下来的走势。买一个现成的微波炉并且替换掉里面的电子元件看起来不是一个可行的点子。最后的结果可能会很糟，而买一个小巧智能的微波炉必然要花掉（比自己改造）更多的钱，但是潜在的顾客不想在他们的厨房里看到乱七八糟又不协调的东西。

许多零件都是现成的可以买到的（磁电管，处理器板，热传感器等等），像USB接口的热传感器，而且都很容易安装。软件原型当然也开源在[GitHub](https://github.com/lod?tab=repositories)。微波炉的舱室和门有不小的挑战性并且很可能要定制。Tulloh想要通过提供左侧开仓门的微波炉和颜色多样化的选项来转逆境为机遇。

一个对读者的快速调查：很少有人会贸然承诺他会为了一个全新的升级过的烤箱付出1000澳大利亚元。当然，很难知道是否会有充足的时间和足够多的读者来完成这个调查。这整个项目看起来很有趣。所以Tulloh的[博客](http://david.tulloh.id.au/category/microwave/) (点击这里)也很值得一看。

---

via: <https://lwn.net/Articles/674877/>

作者：Neil Brown 译者：[yuba0604](https://github.com/yuba0604)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](https://linux.cn/) 荣誉推出