给系统管理员的 15 条实用 Linux/Unix 磁带管理命令

来学习！

写的相对深入，个人感觉不错

磁带设备应只用于定期的文件归档或将数据从一台服务器传送至另一台。通常磁带设备与 Unix 机器连接，用 mt 或 mtx 控制。强烈建议您将所有的数据同时备份到磁盘（也许是云中）和磁带设备中。在本教程中你将会了解到：

* 磁带设备名
* 管理磁带驱动器的基本命令
* 基本的备份和恢复命令

![](/data/attachment/album/201605/11/082111wmjdbpeuq7sumsry.jpg)

### 为什么备份？

一个备份计划对定期备份文件来说很有必要，如果你宁愿选择不备份，那么丢失重要数据的风险会大大增加。有了备份，你就有了从磁盘故障中恢复的能力。备份还可以帮助你抵御：

* 意外的文件删除
* 文件或文件系统损坏
* 服务器完全毁坏，包括由于火灾或其他问题导致的同盘备份毁坏
* 硬盘或 SSD 崩溃
* 病毒或勒索软件破坏或删除文件

你可以使用磁带归档备份整个服务器并将其离线存储。

### 理解磁带文件标记和块大小

![Fig.01: Tape file marks](/data/attachment/album/201605/11/082146jvro6b7n885lc8z1.jpg)

*图01：磁带文件标记*

每个磁带设备能存储多个备份文件。磁带备份文件通过 cpio，tar，dd 等命令创建。同时，磁带设备可以由多种程序打开、写入数据、及关闭。你可以存储若干备份（磁带文件）到一个物理磁带上。在每个磁带文件之间有个“磁带文件标记”。这用来指示一个物理磁带上磁带文件的结尾以及另一个文件的开始。你需要使用 mt 命令来定位磁带（快进，倒带和标记）。

#### 磁带上的数据是如何存储的

![Fig.02: How data is stored on a tape](/data/attachment/album/201605/11/082146riwfqicz7cmuw3q1.jpg)

*图02：磁带上的数据是如何存储的*

所有的数据使用 tar 以连续磁带存储格式连续地存储。第一个磁带归档会从磁带的物理开始端开始存储（tar #0）。接下来的就是 tar #1，以此类推。

### Unix 上的磁带设备名

1. /dev/rmt/0 或 /dev/rmt/1 或 /dev/rmt/[0-127] ：Unix 上的常规磁带设备名。磁带自动倒回。
2. /dev/rmt/0n ：以无倒回为特征，换言之，磁带使用之后，停留在当前状态等待下个命令。
3. /dev/rmt/0b ：使用磁带接口，也就是 BSD 的行为。各种类型的操作系统比如 AIX，Windows，Linux，FreeBSD 等的行为更有可读性。
4. /dev/rmt/0l ：设置密度为低。
5. /dev/rmt/0m ：设置密度为中。
6. /dev/rmt/0u ：设置密度为高。
7. /dev/rmt/0c ：设置密度为压缩。
8. /dev/st[0-9] ：Linux 特定 SCSI 磁带设备名。
9. /dev/sa[0-9] ：FreeBSD 特定 SCSI 磁带设备名。
10. /dev/esa0 ：FreeBSD 特定 SCSI 磁带设备名，在关闭时弹出（如果可以的话）。

#### 磁带设备名示例

* /dev/rmt/1cn 指明正在使用 unity 1，压缩密度，无倒回。
* /dev/rmt/0hb 指明正在使用 unity 0，高密度，BSD 行为。
* Linux 上的自动倒回 SCSI 磁带设备名：/dev/st0
* Linux 上的无倒回 SCSI 磁带设备名：/dev/nst0
* FreeBSD 上的自动倒回 SCSI 磁带设备名：/dev/sa0
* FreeBSD 上的无倒回 SCSI 磁带设备名：/dev/nsa0

#### 如何列出已安装的 scsi 磁带设备？

输入下列命令：

```
### Linux（更多信息参阅 man） ###
lsscsi
lsscsi -g

### IBM AIX ###
lsdev -Cc tape
lsdev -Cc adsm
lscfg -vl rmt*

### Solaris Unix ###
cfgadm –a
cfgadm -al
luxadm probe
iostat -En

### HP-UX Unix ###
ioscan Cf
ioscan -funC tape
ioscan -fnC tape
ioscan -kfC tape

```

来自我的 Linux 服务器的输出示例：

![Fig.03: Installed tape devices on Linux server](/data/attachment/album/201605/11/082147e16pydcwwwcttnuk.jpg)

*图03：Linux 服务器上已安装的磁带设备*

### mt 命令示例

在 Linux 和类 Unix 系统上，mt 命令用来控制磁带驱动器的操作，比如查看状态或查找磁带上的文件或写入磁带控制标记。下列大多数命令需要作为 root 用户执行。语法如下：

```
mt -f /tape/device/name operation

```

#### 设置环境

你可以设置 TAPE shell 变量。这是磁带驱动器的路径名。在 FreeBSD 上默认的（如果变量没有设置，而不是 null）是 /dev/nsa0。可以通过 mt 命令的 -f 参数传递变量覆盖它，就像下面解释的那样。

```
 ### 添加到你的 shell 配置文件 ###
 TAPE=/dev/st1 #Linux
 TAPE=/dev/rmt/2 #Unix
 TAPE=/dev/nsa3 #FreeBSD
 export TAPE

```

### 1：显示磁带/驱动器状态

```
mt status  ### Use default
mt -f /dev/rmt/0  status ### Unix
mt -f /dev/st0 status ### Linux
mt -f /dev/nsa0 status ### FreeBSD
mt -f /dev/rmt/1 status ### Unix unity 1 也就是 tape device no. 1

```

你可以像下面一样使用 shell 循环语句遍历一个系统并定位其所有的磁带驱动器：

```
for d in 0 1 2 3 4 5
do
 mt -f "/dev/rmt/${d}" status
done

```

### 2：倒带

```
mt rew
mt rewind
mt -f /dev/mt/0 rewind
mt -f /dev/st0 rewind

```

### 3：弹出磁带

```
mt off
mt offline
mt eject
mt -f /dev/mt/0 off
mt -f /dev/st0 eject

```

### 4：擦除磁带（倒带，在支持的情况下卸载磁带）

```
mt erase
mt -f /dev/st0 erase  #Linux
mt -f /dev/rmt/0 erase #Unix

```

### 5：张紧磁带盒

如果磁带在读取时发生错误，你重新张紧磁带，清洁磁带驱动器，像下面这样再试一次：

```
mt retension
mt -f /dev/rmt/1 retension #Unix
mt -f /dev/st0 retension #Linux

```

### 6：在磁带当前位置写入 EOF 标记

```
mt eof
mt weof
mt -f /dev/st0 eof

```

### 7：将磁带前进指定的文件标记数目，即跳过指定个 EOF 标记

磁带定位在下一个文件的第一个块，即磁带会定位在下一区域的第一个块（见图01）：

```
mt fsf
mt -f /dev/rmt/0 fsf
mt -f /dev/rmt/1 fsf 1 #go 1 forward file/tape (see fig.01)

```

### 8：将磁带后退指定的文件标记数目，即倒带指定个 EOF 标记

磁带定位在下一个文件的第一个块，即磁带会定位在 EOF 标记之后（见图01）：

```
mt bsf
mt -f /dev/rmt/1 bsf
mt -f /dev/rmt/1 bsf 1 #go 1 backward file/tape (see fig.01)

```

这里是磁带定位命令列表：

```
   fsf    前进指定的文件标记数目。磁带定位在下一个文件的第一块。

   fsfm   前进指定的文件标记数目。磁带定位在前一文件的最后一块。

   bsf    后退指定的文件标记数目。磁带定位在前一文件的最后一块。

   bsfm   后退指定的文件标记数目。磁带定位在下一个文件的第一块。

   asf    磁带定位在指定文件标记数目的开始位置。定位通过先倒带，再前进指定的文件标记数目来实现。

   fsr    前进指定的记录数。

   bsr    后退指定的记录数。

   fss    （SCSI tapes）前进指定的 setmarks。

   bss    （SCSI tapes）后退指定的 setmarks。

```

### 基本备份命令

让我们来看看备份和恢复命令。

### 9：备份目录（tar 格式）

```
tar cvf /dev/rmt/0n /etc
tar cvf /dev/st0 /etc

```

### 10：恢复目录（tar 格式）

```
tar xvf /dev/rmt/0n -C /path/to/restore
tar xvf /dev/st0 -C /tmp

```

### 11：列出或检查磁带内容（tar 格式）

```
mt -f /dev/st0 rewind; dd if=/dev/st0 of=-

### tar 格式 ###
tar tvf {DEVICE} {Directory-FileName}
tar tvf /dev/st0
tar tvf /dev/st0 desktop
tar tvf /dev/rmt/0 foo > list.txt

```

### 12：使用 dump 或 ufsdump 备份分区

```
### Unix 备份 c0t0d0s2 分区 ###
ufsdump 0uf /dev/rmt/0  /dev/rdsk/c0t0d0s2

### Linux 备份 /home 分区 ###
dump 0uf /dev/nst0 /dev/sda5
dump 0uf /dev/nst0 /home

### FreeBSD 备份 /usr 分区 ###
dump -0aL -b64 -f /dev/nsa0 /usr

```

### 12：使用 ufsrestore 或 restore 恢复分区

```
### Unix ###
ufsrestore xf /dev/rmt/0
### Unix 交互式恢复 ###
ufsrestore if /dev/rmt/0

### Linux ###
restore rf /dev/nst0
### 从磁带媒介上的第6个备份交互式恢复 ###
restore isf 6 /dev/nst0

### FreeBSD 恢复 ufsdump 格式 ###
restore -i -f /dev/nsa0

```

### 13：从磁带开头开始写入（见图02）

```
### 这会覆盖磁带上的所有数据 ###
mt -f /dev/st1 rewind

### 备份 home ###
tar cvf /dev/st1 /home

### 离线并卸载磁带 ###
mt -f /dev/st0 offline

```

从磁带开头开始恢复：

```
mt -f /dev/st0 rewind
tar xvf /dev/st0
mt -f /dev/st0 offline

```

### 14：从最后一个 tar 后开始写入（见图02）

```
### 这会保留之前写入的数据 ###
mt -f /dev/st1 eom

### 备份 home ###
tar cvf /dev/st1 /home

### 卸载 ###
mt -f /dev/st0 offline

```

### 15：从 tar number 2 后开始写入（见图02）

```
### 在 tar number 2 之后写入（应该是 2+1）###
mt -f /dev/st0 asf 3
tar cvf /dev/st0 /usr

### asf 等效于 fsf ###
mt -f /dev/sf0 rewind
mt -f /dev/st0 fsf 2

```

从 tar number 2 恢复 tar：

```
mt -f /dev/st0 asf 3
tar xvf /dev/st0
mt -f /dev/st0 offline

```

### 如何验证使用 tar 创建的备份磁带？

定期做全系统修复和服务测试是很重要的，这是唯一确定整个系统正确工作的途径。参见我们的[验证 tar 命令磁带备份的教程](http://www.cyberciti.biz/faq/unix-verify-tape-backup/)以获取更多信息。

### 示例 shell 脚本

```
#!/bin/bash
# A UNIX / Linux shell script to backup dirs to tape device like /dev/st0 (linux)
# This script make both full and incremental backups.
# You need at two sets of five  tapes. Label each tape as Mon, Tue, Wed, Thu and Fri.
# You can run script at midnight or early morning each day using cronjons.
# The operator or sys admin can replace the tape every day after the script has done.
# Script must run as root or configure permission via sudo.
# -------------------------------------------------------------------------
# Copyright (c) 1999 Vivek Gite <vivek@nixcraft.com>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# -------------------------------------------------------------------------
# Last updated on : March-2003 - Added log file support.
# Last updated on : Feb-2007 - Added support for excluding files / dirs.
# -------------------------------------------------------------------------
LOGBASE=/root/backup/log

# Backup dirs; do not prefix /
BACKUP_ROOT_DIR="home sales"

# Get todays day like Mon, Tue and so on
NOW=$(date +"%a")

# Tape devie name
TAPE="/dev/st0"

# Exclude file
TAR_ARGS=""
EXCLUDE_CONF=/root/.backup.exclude.conf

# Backup Log file
LOGFIILE=$LOGBASE/$NOW.backup.log

# Path to binaries
TAR=/bin/tar
MT=/bin/mt
MKDIR=/bin/mkdir

# ------------------------------------------------------------------------
# Excluding files when using tar
# Create a file called $EXCLUDE_CONF using a text editor
# Add files matching patterns such as follows (regex allowed):
# home/vivek/iso
# home/vivek/*.cpp~
# ------------------------------------------------------------------------
[ -f $EXCLUDE_CONF ] && TAR_ARGS="-X $EXCLUDE_CONF"

#### Custom functions #####
# Make a full backup
full_backup(){
    local old=$(pwd)
    cd /
    $TAR $TAR_ARGS -cvpf $TAPE $BACKUP_ROOT_DIR
    $MT -f $TAPE rewind
    $MT -f $TAPE offline
    cd $old
}

# Make a  partial backup
partial_backup(){
    local old=$(pwd)
    cd /
    $TAR $TAR_ARGS -cvpf $TAPE -N "$(date -d '1 day ago')" $BACKUP_ROOT_DIR
    $MT -f $TAPE rewind
    $MT -f $TAPE offline
    cd $old
}

# Make sure all dirs exits
verify_backup_dirs(){
    local s=0
    for d in $BACKUP_ROOT_DIR
    do
        if [ ! -d /$d ];
        then
            echo "Error : /$d directory does not exits!"
            s=1
        fi
    done
    # if not; just die
    [ $s -eq 1 ] && exit 1
}

#### Main logic ####

# Make sure log dir exits
[ ! -d $LOGBASE ] && $MKDIR -p $LOGBASE

# Verify dirs
verify_backup_dirs

# Okay let us start backup procedure
# If it is Monday make a full backup;
# For Tue to Fri make a partial backup
# Weekend no backups
case $NOW in
    Mon)    full_backup;;
    Tue|Wed|Thu|Fri)    partial_backup;;
    *) ;;
esac > $LOGFIILE 2>&1

```

### 关于第三方备份工具

Linux 和类Unix系统都提供了许多第三方工具，可以用来安排备份，包括磁带备份在内，如：

* Amanda
* Bacula
* rsync
* duplicity
* rsnapshot

另行参阅

* Man pages - [mt(1)](http://www.manpager.com/linux/man1/mt.1.html), [mtx(1)](http://www.manpager.com/linux/man1/mtx.1.html), [tar(1)](http://www.manpager.com/linux/man1/tar.1.html), [dump(8)](http://www.manpager.com/linux/man8/dump.8.html), [restore(8)](http://www.manpager.com/linux/man8/restore.8.html)

---

via: <http://www.cyberciti.biz/hardware/unix-linux-basic-tape-management-commands/>

作者：Vivek Gite 译者：[alim0x](https://github.com/alim0x) 校对：[Mr小眼儿](https://github.com/tinyeyeser)

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


开源新闻速递：ImageTragick 攻击已经出现

Summary:
Flash Player 也发现了被利用的零日漏洞，而仅有 40% 的企业能保持他们员工的 Flash Player 是更新的；
RHEL 6.8 和 Fedora 24 Beta 发布。

debian有更新动作不！！应该有的！！

### 头条消息

今天看来是“安全日”，各种安全消息爆仓了。

前两天刚刚曝出的零日漏洞 ImageTragick 是对广泛使用的 ImageMagick 图片处理库中的一个严重攻击。而现在，[CloudFlare](https://blog.cloudflare.com/inside-imagetragick-the-real-payloads-being-used-to-hack-websites-2/) 和 [Sucuri](https://blog.sucuri.net/2016/05/analyzing-imagetragick-exploits-in-the-wild.html) 已经发现了利用该漏洞的真实攻击。 vBulletin 和 IP.Board 论坛是非常流行的论坛系统，很多网站都采用它们搭建在线论坛，而目前已经有针对这些程序发起的攻击了。相信在国内很快也会有针对 Discuz 论坛的攻击出现。

安全研究人员发现了一个名为 Enigma 的勒索软件，但是这个勒索软件是仅针对俄语用户的——所以非俄语用户可以偷着乐了：“[We're Currently Safe](http://news.softpedia.com/news/we-re-currently-safe-new-enigma-ransomware-targets-only-russian-users-503912.shtml)”。笑哭了……

看起来这个世界充满了恶意，Adobe 刚刚[宣布](https://helpx.adobe.com/security/products/flash-player/apsa16-02.html)在 Flash 中发现了一个零日漏洞 CVE-2016-4117，而且，该漏洞已经被实际利用了进行攻击！这个漏洞影响到了运行在所有平台上的低于 21.0.0.226 版本的 Adobe Flash Player。

而且，据[调查](https://duo.com/trusted-access-report-2016)，1/4 的企业使用的过期的 IE，而只有 40% 的企业保持了 Flash Player 的更新。

不过，我们也有专门用于白帽子的<ruby> 道德黑客工具 <rp>  （ </rp> <rt>  Ethical Hacking Tools </rt> <rp>  ） </rp></ruby>发行版：[BlackArch Linux](https://www.blackarch.org/)，在它刚刚发布的 BlackArch Linux 2016.04.28 版中，新增加了 80 个安全工具，已经有 1400 个之多的道德黑客工具！这里是[工具列表](https://www.blackarch.org/tools.html)，你可以看看！

![](/data/attachment/album/201605/11/193753xlokp1ws0hiolfff.jpg)

### 版本更迭

* Red Hat [发布](https://www.redhat.com/en/about/press-releases/latest-version-red-hat-enterprise-linux-6-brings-enhanced-security-management-and-monitoring-world%E2%80%99s-leading-enterprise-linux-platform)了其 RHEL 6 的第八个维护版本，支持多达 300TB 的 XFS 文件系统。
* 在经过三次延迟后，Fedora 24 终于[发布](https://fedoramagazine.org/fedora-24-beta-released/)了 Beta 版本。该版本带有 GNOME 3.20.1 桌面（默认只在工作站版本中）、最新的 GNU C 库 2.23 和 GCC 6，并使用了最新的 Linux 4.5.2 内核。当然，也解决了很多 Alpha 版本中的问题。正式版的 Fedora 预计在 6 月 14 日发布。
![](/data/attachment/album/201605/11/193753k4bai7eqi2m2zyu2.jpg)
* KDE Applications [16.04.1](https://www.kde.org/announcements/announce-applications-16.04.1.php) 和 KDE Plasma [5.6.4](https://www.kde.org/announcements/plasma-5.6.4.php) 发布，修复了若干问题。
* Univention Corporate Server （UCS）4.1-2 [发布](http://forum.univention.de/viewtopic.php?f=54&t=5748&sid=cce0fbc41d9e1b4844f7384b308e5302)，带来了几个重要的安全更新。
![](/data/attachment/album/201605/11/193753tstbs9pvrcjrums8.jpg)


开源新闻速递：意大利国防部使用开源的 LibreOffice 节约了近三千万欧元支出

Summary: 已经完成了 5000 台工作站的迁移工作

期待国内也开始！！

别开玩笑了，都免费了怎么拿经费啊

国内WPS就可以的

我感觉linux上的libreoffice比windows上要好用些

liboffice启动非常快，好用，虽然没有office漂亮

已经完成了 5000 台工作站的迁移工作

### 头条消息

意大利国防部估计使用开源的 LibreOffice 节约了近三千万欧元支出。去年我们就听说[意大利国防部将使用 LibreOffice 替代微软的 Office 软件](/article-6237-1.html)。而现在，他们宣布已经完成了 5000 台工作站的迁移工作，没有遇到什么大的问题。

在这个名为 [LibreDifesa](http://www.techeconomy.it/open4business/libredifesa/) 的项目中，估计能在接下来的几年内为他们节约两千六百万欧元到两千九百万欧元的预算。 总计有超过十万台的工作站需要迁移，预计到 2017 年会完成 70%，最终到 2020 年全部完成。[这可能将成为欧洲最大规模的 LibreOffice 部署](https://joinup.ec.europa.eu/community/osor/news/italian-military-save-26-29-million-euro-migrating-libreoffice)。

![](/data/attachment/album/201605/13/065434n713pi0wm1f7xhil.jpg)

### 版本更迭

* Canonical [更新](http://www.ubuntu.com/usn/usn-2966-1/)了多个版本的 Ubuntu 上的 OpenSSH 软件包，修复了几个严重的安全问题，建议马上升级。
* Linux 内核 4.5.4 、4.4.10、4.1.24、3.18.33 LTS 发布。
* Mozilla [发布](https://www.mozilla.org/en-US/thunderbird/45.1.0/releasenotes/)了 Thunderbird 45 的第一个维护版本：45.1.0，修复了一些问题。
* GNOME 上用于管理网络设备的软件 NetworkManager [发布](https://mail.gnome.org/archives/release-team/2016-May/msg00011.html) 1.2.2 版本，修复了一些问题。
* LibreOffice 发布 5.1.3 稳定版，主要是修复了一些问题。


珠海全志公司的 Linux 内核遗留了后门

不是很懂，就问一下：国产化linux是不是都要留个后门啊

应该是意外吧，不过我不太相信国内的企业，虽然我在用kylin不过也是随便用下

你以为微软 谷歌就没有了吗

貌似还是国外的系统比较安全，至少国外的后门你没有发现，可能人家的后门手法更高级 谁知道那

操作系统安全始终是个问题

这都能被找出来，厉害啊

这么别有用心的后门

![](/data/attachment/album/201605/13/154953vofr7oz7xrp8x007.jpg)

据外媒 arstechnica 报道，一家中国的芯片级系统厂商全志（allwinner） 在其开发的产品中携带的内核里[遗留了一个 root 后门](http://forum.armbian.com/index.php/topic/1108-security-alert-for-allwinner-sun8i-h3a83th8/http://forum.armbian.com/index.php/topic/1108-security-alert-for-allwinner-sun8i-h3a83th8/)。全志的处理器芯片用在很多低端的 Android 平板、机顶盒、基于 ARM 的 PC 等等之上。而这个后门非常容易获得，只需要给一个未见于文档的调试进程发送一个字符串“rootmydevice” 即可获取该设备的 root 权限。

该后门可能是开发人员调试后忘记移除的。全志公司在知道此消息后，已经从其公司的 Github 账户上[删除了相关文件](https://github.com/allwinner-zh/linux-3.4-sunxi/blob/master/arch/arm/mach-sunxi/sunxi-debug.c#L41)。

该公司使用的内核 linux-3.4-sunxi，原先用于支持全志的 ARM 芯片平板上的 Android，它也有一个[社区版本](https://linux-sunxi.org/Linux_Kernel)。该内核也用来移植到各种全志芯片的设备上，包括<ruby> 桔子派 <rp>  （ </rp> <rt>  Orange Pi </rt> <rp>  ） </rp></ruby>、<ruby> 香蕉派 <rp>  （ </rp> <rt>  Banana Pi </rt> <rp>  ） </rp></ruby>等与<ruby> 树莓派 <rp>  （ </rp> <rt>  Raspberry Pi </rt> <rp>  ） </rp></ruby>兼容的开发板。


Linux 是世界上最大的软件开发项目

Summary:
两个月前发布 4.5 版已经包含了 2100 万行代码！我的笔记本上运行的内核代码大概有 160 万行，而你的电话可能运行了 250 万行代码。
每天，平均有超过 10800 行的代码增加， 5300 行代码被删除，并且还有 1875 行代码被修改，也就是说每秒钟都有超过 8 行代码的变化！

人類的偉大工程之一！

更新速度太快了

比windows还大吗？<br />
我不同意

应该没但是微软不开源

当然比win大,这里指的是内核.<br />
不过发行版的话更比win大.毕竟有那么多发行版.

＂与时俱进＂，雖然我沒看原文，就不能換個詞嗎

原文是“So look at operating systems that don't change, nobody uses them anymore.”，用这个词有何不妥？

顶

Greg Kroah-Hartman 是 Linux 内核社区的二号人物（第一位显然是 Linus Torvalds），他在设备驱动方面做了许多工作，他也是当前 Linux 内核稳定分支的负责人。

在本周柏林举办的 CoreOS Fest 上，Kroah-Hartman 做了一场讲演介绍了 Linux 内核项目是如何的巨大。之后我找了个机会邀请他聊了聊内核和安全方面的话题。

我们的话题先从代码方面开始，Kroah-Hartman 说刚刚于两个月前发布 4.5 版已经包含了 2100 万行代码！

可能很多人觉得在那么小的设备上运行这么多的代码有点夸张，事实上，并不是所有的 2100 万行代码都运行在他们的设备上，只有需要的部分才会运行在里面。正如 Kroah-Hartman 说的，“你不会全部用到它们。在内核里面包含了各种硬件的驱动。我的笔记本上运行的内核代码大概有 160 万行，而你的电话可能运行了 250 万行代码。”

这里面，内核的核心部分是一定算在其中的，而它只占整个 Linux 内核代码的 5%，而剩下的还有 35% 是网络部分，40% 是设备驱动。

比代码规模更让人印象深刻的是它的参与人数规模，去年就有大约 4000 名开发人员参与了开发，至少 440 个公司向内核提交了贡献，这使得 Linux 成为了世界上最大的软件项目！Kroah-Hartman 说：“这是计算机有史以来最大的软件开发项目，无论是使用它的人数、开发它的人数，还是与之相关的公司数量，规模都很大。”

![greg kernel](/data/attachment/album/201605/14/113055m2hylyoixljvzsyu.jpg)

*Greg Kroah-Hartman 在 CoreOS Fest, Berlin 的讲演*

每天，平均有超过 10800 行的代码增加， 5300 行代码被删除，并且还有 1875 行代码被修改，也就是说每秒钟都有超过 8 行代码的变化！

这是非常大的数量，这意味着 Linux 内核不像其它的技术，它在不断的变化，变得越来越好。

Kroah-Hartman 说，“当我第一次参与这个项目时，我们每个小时可以完成 2.5 个变更。每个人都这么说，‘哦，天哪，我们不可能更快了，那不现实’。微软和苹果也说，‘你赢了’，他们一字一顿的说，‘我们比不上，你们干的比任何人都要快，我们是望尘莫及啊’。而我们的开发速度越来越快，我们每次都会更快一些。”

但是，如果你的公司的发展依靠着 Linux，那这个变化速度看起来就很可怕。Kroah-Hartman 解释了为什么会有这么多变更：“我们提交了很多变更，但是不是因为我们为变更而变更的，那可需要很多的工作。我们其实很懒，我们做这么多的变更的原因是因为我们必须做，是因为这个世界不断变化而需要我们做这么多的变更。那种‘你做了个东西，然后啥也不用管，将它丢在一边就好了’的模式已经不可行了，因为这个东西已经连通了世界，而世界每时每刻在变化。事物都在互相作用，所以你必须跟着进化。如果你的操作系统不能改变，那它就没用了，这毋庸置疑。如果你的设备不能跟着与之互动的世界变化，那它同样也没用，这也毋庸置疑。所以，你可以看看那些不能与时俱进的操作系统，根本没有人用它们。”

为了做到这些变更，Linux 内核社区需要做到两点。首先，我们要有个按时间进行的发布计划。其次，我们需要小步快跑。我们完成一个发布就要开始下一个发布的开发。下一个发布的第一个 RC 版本里面就要包含进去所有开发人员丢进去的各种东西，包括各种新的东西、新的功能，而且它们需要经过严格考验。当所有的东西都测试良好，我们才会放出第一个 RC 版本，之后的 RC 版本就是各种问题的修复。这样，我们就能在一个分支的 7-8 个 RC 版本之后赶走所有发现的问题。

当我们准备好发布一个新的内核发布版本时，它已经经过了详尽的测试。但是仍然有问题时，人们使用的稳定版怎么修复问题呢，他们可不想在产品环境中使用 RC 版本，那么他们怎么修复问题？在 15 年前，内核社区就找到了解决方案，而这就是 Kroah-Hartman 的任务，他会对稳定版本进行分支，比如说 4.2 版，它的问题修复版本会以 4.2.1 、4.2.2、4.2.3 等等发布。

“这个版本规则就是它必须是一个问题修复版，而且它必须是一个正确的版本号或者是新的设备 ID，它必须出现在 Linux 内核代码树上。在我将它放到稳定分支之前，它就必须出现在 Linux 内核代码树上。这可以确保人们运行我们的稳定内核时，如果跳到一个新的分支版本时，不会发生中断，没有什么不一样的变化。这就是规则，而且一直以来运作良好。”Kroah-Hartman 说。

而当下一个新的分支（4.3）出来时，Kroah-Hartman 就会从当前的分支（4.2）离开而去维护 4.3。这样内核社区就完美的保证了当新的版本发布时任何事情都很连贯。

“每个版本我每周都会做一次发布，每周会对稳定分支打 100 到 150 个补丁。这很多，许多东西都变化了，也修复了许多东西。而这就是我们做的——稳定的分支。当 4.3 发布时，最好的事情是我解脱了，我说，‘啊！4.2，我再也不要见到你了’，然后我就跑到新的分支了，因为我们的工作，这一切都可以继续发展下去，所有人都很满意。”


如果总统候选人们要使用 Linux 发行版，他们会选择哪个？

所以说一党还是两党根本上区别不大......

我認爲共和黨更像BSD～

![Republican presidential candidate Donald Trump
](/data/attachment/album/201605/14/181658cu28fb2zsg99j2sb.jpg)

*共和党总统候选人 Donald Trump【译者注：唐纳德·特朗普，美国地产大亨、作家、主持人】*

如果要竞选总统的人们使用 Linux 或其他的开源操作系统，那么会使用哪个发行版呢？问题的关键是存在许多其它的因素，比如，一些“政治立场”问题，或者是给一个发行版的名字添加上感叹号是否合适——而这问题一直被忽视。先不管这些忽视：接下来是时事新闻工作者关于总统大选和 Linux 发行版的报道。

对于那些已经看了很多年我的文字的人来说（除了我亲爱的的编辑之外，他们一直听我的瞎扯是不是倒霉到家了？），这篇文章听起来很熟悉，这是因为我在去年的总统选举期间写了一篇[类似的文章](http://thevarguy.com/open-source-application-software-companies/aligning-linux-distributions-presidential-hopefuls)。一些读者把这篇文章的内容看的比我想象的还要严肃，所以我会花点时间阐述我的观点：事实上，我不认为开源软件和政治运动彼此之间有多大的关系。我写那样的文章仅仅是新的一周的自我消遣罢了。

当然，你也可以认为它们彼此相关，毕竟你才是读者。

### Linux 发行版之选：共和党人们

今天，我只是谈及一些有关共和党人们的话题，我甚至只会谈论他们的其中一部分。因为共和党的提名人太多了，以至于我写满了整篇文章。由此开始：

如果 **Jeb (Jeb!?) Bush** 使用 Linux，它一定是 [Debian](http://debian.org/)。Debian 属于一个相当无趣的分支，它是为真正意义上的、成熟的黑客设计的，这些人将清理那些由经验不甚丰富的开源爱好者所造成的混乱视为一大使命。当然，这也使得 Debian 显得很枯燥，所以它已有的用户基数一直在缩减。

**Scott Walker** ，对于他来说，应该是一个 [Damn Small Linux](http://www.damnsmalllinux.org/) (DSL) 用户。这个系统仅仅需要 50MB 的硬盘空间和 16MB 的 RAM 便可运行。DSL 可以使一台 20 年前的 486 计算机焕发新春，而这恰好符合了 **Scott Walker** 所主张的消减成本计划。当然，你在 DSL 上的用户体验也十分原始，这个系统平台只能够运行一个浏览器。但是至少你不用浪费钱财购买新的电脑硬件，你那台 1993 年购买的机器仍然可以为你好好的工作。

**Chris Christie** 会使用哪种系统呢？他肯定会使用 [Relax-and-Recover Linux](http://relax-and-recover.org/)，它号称“一次搞定（Setup-and-forget）的裸机 Linux 灾难恢复方案” 。从那次不幸的华盛顿大桥事故后，“一次搞定（Setup-and-forget）”基本上便成了 Christie 的政治主张。不管灾难恢复是否能够让 Christie 最终挽回一切，但是当他的电脑死机的时候，至少可以找到一两封意外丢失的机密邮件。

至于 **Carly Fiorina**，她无疑将要使用 [惠普](http://hp.com/) (HPQ)为“[The Machine](http://thevarguy.com/open-source-application-software-companies/061614/hps-machine-open-source-os-truly-revolutionary)”开发的操作系统，她在 1999 年到 2005 年这 6 年期间管理着该公司。事实上，The Machine 可以运行几种不同的操作系统，也许是基于 Linux 的，也许不是，我们并不太清楚，它的开发始于 **Carly Fiorina** 在惠普公司的任期结束后。不管怎么说，作为 IT 圈里一个成功的管理者，这是她履历里面重要的组成部分，同时这也意味着她很难与惠普彻底断绝关系。

最后，但并不是不重要，你也猜到了——**Donald Trump**。他显然会动用数百万美元去雇佣一个精英黑客团队去定制属于自己的操作系统——尽管他原本是想要免费获得一个完美的、现成的操作系统——然后还能向别人炫耀自己的财力。他可能会吹嘘自己的操作系统是目前最好的系统，虽然它可能没有兼容 POSIX 或者一些其它的标准，因为那样的话就需要花掉更多的钱。同时这个系统也将根本不会提供任何文档，因为如果 **Donald Trump** 向人们解释他的系统的实际运行方式，他会冒着所有机密被泄露至伊斯兰国家的风险，绝对是这样的。

另外，如果 **Donald Trump** 非要选择一种已有的 Linux 平台的话， [Ubuntu](http://ubuntu.com/) 应该是明智的选择。就像 **Donald Trump** 一样， Ubuntu 的开发者秉承“我们做自己想要做的”原则，通过他们自己的实现来构建开源软件。自由软件纯化论者却很反感 Ubuntu 这一点，但是很多普通用户却更喜欢一些。当然，无论你是不是一个纯粹论者，无论是在软件领域还是政治领域，还需要时间才能知道分晓。

### 敬请期待

如果你想知道为什么我还没有提到民主党候选人，别想多了。我没有在这篇文章中提及他们，是因为我对民主党并不比共和党喜欢更多或更少一点（我个人认为，这种只有两个政党的美国特色是荒谬的，根本不能体现民主，我也不相信这些党派候选人）。

另一方面，也可能会有很多人关心民主党候选人使用的 Linux 发行版。后续的帖子中我会提及的，请拭目以待。

---

via: <http://thevarguy.com/open-source-application-software-companies/081715/which-open-source-linux-distributions-would-presidential->

作者：[Christopher Tozzi](http://thevarguy.com/author/christopher-tozzi) 译者：[vim-kakali](https://github.com/vim-kakali) 校对：[PurlingNayuki](https://github.com/PurlingNayuki), [wxy](https://github.com/wxy/)

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


开源新闻速递：美国防部的升级 Windows 10 计划由于老旧计算机而受阻

Summary:
Mozilla 要求 FBI 向其披露 Firefox 的零日漏洞；
OpenMandriva 称其是唯一一个使用 LLVM Clang 作为主编译器的发行版。

我很好奇当初微软是怎么同五角大楼谈的？现在这个情况明显是在给自己找事做。

### 头条消息

今年早些时候有消息称，[微软与美国国防部签署了合作协议](/article-7232-1.html)，将在2017年前为其安装升级至少 400 万台 Windows 10 的计算机。但是，目前看起来这一计划受挫，原因是，美国国防部的很多计算机都太老旧了，安装不了 Windows 10。比如其海军就只有 10% 的计算机可以远程升级， 剩下的都因为太旧了而无法升级——目前美国国防部还没有这么多的钱来升级硬件。

![](/data/attachment/album/201605/14/212401iymgb566c6ms5m3f.jpg)

之前有传闻说，美国 FBI 掌握了一些 Mozilla Firefox 和 Tor 浏览器的零日漏洞，并以此来用于他们的行动中。昨天，Mozilla 向华盛顿地区法庭申请，要求法庭判决 FBI 需向 Mozilla 披露他们发现的零日漏洞，以便 Mozilla 尽快修复。

当前各个 Linux 发行版都在逐渐切换到最新的 GCC 编译器上，而 OpenMandriva 则与众不同，[称](https://blog.openmandriva.org/2016/05/gcc-6-1-vs-llvm-clang-3-9-compiler-performance/)该发行版是唯一一个使用 LLVM Clang 作为主要编译器的发行版。

### 版本更迭

* [ZFS for Linux](http://zfsonlinux.org/) 项目[发布](https://github.com/zfsonlinux/zfs/releases/)了新的版本 0.6.5.7，支持了最新的 4.6 和 4.5 的 Linux 内核。现在这个 openZFS 移植版支持从 2.6.32 到 即将发布的 4.6 的 Linux 内核。
* Qt 公司[发布](http://blog.qt.io/blog/2016/05/11/qt-creator-4-0-0-released/)了 Qt Creator 4.0 ，这是一个给 Qt 开发者使用的跨平台的开源 IDE 。在这个新版本中，最重要的是它开源了其 Clang 静态分析器和自动测试功能。
* 最新的 Snappy Ubuntu Core [支持](https://community.arm.com/people/%E4%B9%90%E7%BE%8E%E5%AE%A2%E7%A7%91%E6%8A%80/blog/2016/05/13/hikey-96boards-powered-by-kirin620-soc-is-now-enabled-with-the-latest-ubuntu-core) LeMaker 的 HiKey 96Boards ，HiKey 应该是第一个支持最新的 Snappy Ubuntu Core 的单板计算机。
* GNOME 发布了 3.20.2 ，同时 3.22 也在继续开发中，预计今年的 9 月份会发布。
* Linux 内核发布 3.14 LTS 的第 69 个维护版本。
* 如之前承诺的，Adobe 发布了 Flash Player 21.0.0.242，修复了几个零日漏洞。
* [QEMU](http://www.qemu.org/) [发布](http://article.gmane.org/gmane.comp.emulators.qemu/410994)了 2.6，[QEMU](http://www.qemu.org/) 是一个 Linux 系统上广泛使用的、可高度定制的虚拟化软件。这个版本提供了树莓派 2 的模拟支持。


Debian 团队澄清其与 ZFS 的许可证冲突是如何绕开的

Summary: ZFS 放到了 /contrib/ 下，而没有放到 /main/ 下，原因是因为当前的 ZFS 许可证同 Debian 自由软件指南存在冲突。因此，用户可以从其中下载源代码编译而不是直接下载二进制。

HI, 我是Debian Developer，

在你的文章中，“看起来 Debian 的 ZFS 软件包包含了一些来自 Ubuntu 的补丁。” 似乎暗指Debian也违背 了GPL协议，我认为这种书法是不妥当的，Ubuntu违背GPL许可是因为Ubuntu包含了二进制的cddl模块和zgpl模块，并不是说Ubuntu的补丁也违反了GPL协议。

严格来说zfs只是进入了contrib，而contrib中的软件并不是Debian gnu/linux的一部分，Debian 只包括main中的内容。

Debian以其严格的自由软件审查而著称，并以此确保Debian系统对于用户是安全的，用户不会因为使用Debian而导致法律上的风险。

关于次问题

你说的有道理，看起来确实有一定隐喻，我修正一下~谢谢您~~

真是欲盖弥彰啊。contrib好端端也是在源里面的，怎么就不是debian的一部分了？就好像你家里藏了什么违法的东西，你一句这不是我家的东西就没关系了似的，你们debian可以的啊，自嗨得很快乐。我再举个例子，ffmpeg包含了非自由的插件，你们源里面有ffmpeg二进制文件，你们可以辩称非自由的插件没有编译进去，但是人家fedora就没让ffmpeg进源。要我看在所谓自由上你们debian就是自欺欺人得厉害。

之前，我们报道过 [Debian 中支持了 ZFS 文件系统](/article-7341-1.html)的新闻。Debian 社区对此表示了欢迎，但是也有人指出，ZFS 支持之所以迟迟不能加入到 Debian 中是由于 ZFS 许可证与 <ruby> Debian 自由软件指南 <rp>  （ </rp> <rt>  Debian Free Software Guidelines </rt> <rp>  ） </rp></ruby>之间的冲突。

今天早些时候，我们联系到了 Debian 公关团队的 Donald Norwood，他告诉我们， ZFS for Linux 没有放到 Debian GNU/Linux 的主软件仓库中，而是放到了另外一个名为 “contrib”的仓库中。

“ZFS 放到了 /contrib/ 下，而没有放到 /main/ 下，原因是因为当前的 ZFS 许可证同 <ruby> Debian 自由软件指南 <rp>  （ </rp> <rt>  Debian Free Software Guidelines </rt> <rp>  ） </rp></ruby>存在冲突。因此，用户可以从其中下载源代码编译而不是直接下载二进制。”，Donald Norwood 说。

![](/data/attachment/album/201605/16/154250zmxevc8mmgkk3i4g.jpg)

### Debian 中的 ZFS 实现与 Ubuntu 中的那个不同

似乎有些人误解 Debian GNU/Linux 中的 ZFS 实现是来自 Ubuntu 16.04 中的 ZFS 实现，而据 <ruby> Software Freedom Conservancy <rp>  （ </rp> <rt>  自由软件管理委员会 </rt> <rp>  ） </rp></ruby> 称，[Ubuntu 中的 ZFS 实现违反了 GPL 许可证](https://sfconservancy.org/blog/2016/feb/25/zfs-and-linux/)。Debian 的 ZFS 软件包虽然[包含了一些来自 Ubuntu 的补丁](https://tracker.debian.org/news/767790)，但是是以源代码的方式提供的，所以实质上绕开了 GPL 许可证的冲突。（注：据网友指正，此处语言有修饰。）

如果你想在你的 Debian GNU/Linux 中体验一下 ZFS，你可以从 contrib 仓库中下载最新的 zfs-linux 软件包。

更多关于 Debian 中的 ZFS 的细节，可以查看[此处](https://bits.debian.org/2016/05/what-does-it-mean-that-zfs-is-in-debian.html)。


Linux 4.6 内核发布，引入 OrangeFS 和 USB 3.1 SSP 支持

赞一个

赞一个

赞二个！你写的非常仔细！

今天，美国时间 5 月 15 日， Linus Torvalds [宣布了](http://lkml.iu.edu/hypermail/linux/kernel/1605.1/05030.html) Linux 4.6 内核的正式发布。

经过了两个月的开发，历经了 7 个 RC 版本，Linux 4.6 内核终于发布了最终产品版本，带来了一些引人关注的新功能、更新的驱动程序以及一些安全改进。

“好在我不用中断 RC 周期，上周我们如预期的收到了几个修复，但是没有什么出乎意料的事情。所以， 4.6 就按照正常的计划发布了，这也意味着我明天就可以启动 4.7 的合并窗口啦。” Linus Torvalds 说。

![](/data/attachment/album/201605/16/162041g0gnu00jbxvsfu5z.jpg)

### Linux 4.6 内核的新功能

Linux 4.6 内核的最引人注目的新功能是 OrangeFS 分布式文件系统、支持 USB 3.1 SuperSpeed Plus (SSP) 协议、提供了高达 10Gbps 的传输速度、改进了 <ruby> OOM 任务处理器 <rp>  （ </rp> <rt>  Out Of Memory task killer </rt> <rp>  ） </rp></ruby>的可靠性、并支持了 Intel 内存保护键。

此外，Linux 4.6 内核也带有<ruby> 内核连接多路转接器 <rp>  （ </rp> <rt>  Kernel Connection Multiplexor </rt> <rp>  ） </rp></ruby>、一个用于加速应用层协议的新部件、802.1AE MAC 级加密支持（MACsec）、OCFS2 文件系统的在线 inode 检查器、支持 BARMAN V 协议、支持 pNFS SCSI 布局。

最后，Linux 4.6 内核也包括了对 cgroup 名字空间和 dma-buf 的支持、一个新打造的 ioctl 专门用于管理 CPU 和 GPU 之间的缓存关联性。当然，也更新了不少驱动程序、修复了许多问题。


开源新闻速递：Linux 4.6 内核发布

Summary:
Debian 通过提供 ZFS 源代码来绕开许可证冲突；
GNOME 3 下极棒的邮件客户端 Geary 复活；

Geary倒是挺轻快的，但是我用的时候经常假死崩溃

### 头条消息

今天的头条消息显然是开发了两月的 [Linux 4.6 内核发布了正式的产品版](/article-7344-1.html)，这个版本的开发非常顺利，以至于 Linus 曾考虑提前结束 RC 周期。4.6 内核中引入了 OrangeFS 和 USB 3.1 SSP 支持，此外还有各种你或许搞不明白的改进和新特性。Linus 说，他明天就开始 4.7 的开发——我觉得每个里程碑版本完成后都不歇一歇么？感觉看着都很累。

另外一件事是，Debian 前一段时间支持了 ZFS 文件系统，这个开发已经持续了一年了，终于见了分晓。虽然社区表示欢迎，但是也有一些人表示，ZFS 的许可协议不是和 Debian 的原则（Debian 自由软件指南）冲突么？这是怎么搞的？Debian 的人表示，“我们[并没有将 ZFS 的二进制放到“main”仓库中，而是将源代码放到了“contrib”仓库](/article-7343-1.html)了，需要的话你自己编译好了”——我们并没有许可证的冲突，用户自己编译就没有关系了，所以我们并没有违例——感觉许多自由软件纯化论者往往有些自欺欺人的倾向。

[Geary](https://wiki.gnome.org/Apps/Geary) 是一个非常时尚和易于使用的 GNOME 3 下的邮件客户端，但是去年其开发组织 Yorba 发布了[退休公告](http://yorba.org/)后，该项目就没有动静了。不过，今天我们得到了一个令人振奋的好消息，Geary 复活归来。这次发布了新的 0.11.0 版本，修复了 0.10.0 的一些问题，也有一些新的特性改进，但是这一切都比不过 Geary 重生值得高兴。

![](/data/attachment/album/201605/16/165819r3yrm35jocc86u2j.png)

### 版本更迭

* KDE Frameworks 5.22.0 [发布](https://www.kde.org/announcements/kde-frameworks-5.22.0.php)，这个版本没有什么重要的变化，主要是一些[修复](https://www.kde.org/announcements/kde-frameworks-5.22.0.php)。
* 基于 Arch Linux 的发行版 LinHES R8.4 发布，这是一个类似 Mythbuntu 的发行版，主要用于多媒体体验，因此其中包含了 Kodi 16.1、MythTV 0.28 和 OpenPHT 等软件。
![](/data/attachment/album/201605/16/165744ib7e61lrr811eky8.jpg)


开源新闻速递：肖似 Window 10 的发行版 ChaletOS 16.04

Summary: Arch Linux 和 SparkyLinux 率先支持 Linux 4.6 内核。

比win10看着好看。也顺畅多了

可以，我去试试

Windows没这么丑吧！

要尝试看看了啊！！

看起来不错啊。

看看

为什么学APPLE？？？为什么学MS？？？

用或不用，就好了~

总是吃着碗里，看着锅里，还一边告诉别人，我是天然气工程师，厨房里的管道全是俺自己搞定滴~

一直用ubuntu或MS的默认主题样式！！！

地址呢

大家审美不同吧，表示我没有觉得比WIN10好看。

也就KDE能这么好用

### 头条消息

有一款名为 ChaletOS 的发行版今天刚刚[发布](https://sites.google.com/site/chaletoslinux/home)了 16.04 LTS ，它是一款基于 Ubuntu 16.04 LTS 的发行版。这个发行版的主要目标是为那些前 Windows 用户们提供一个进入开源世界的便捷之路。它提供了一个名为<ruby> 起点 <rp>  （ </rp> <rt>  Start Point </rt> <rp>  ） </rp></ruby>的应用，设计用来帮助那些 Windows 用户们快速熟悉该系统，这个应用里面包括视频指引、教程和推荐应用等。

不过，对于有些 Windows 用户，可能希望看到熟悉的 Windows 界面，因此，[ChaletOS](https://sites.google.com/site/chaletoslinux/home) 的开发者 Dejan Petrovic 还发布了一个[快速教程](https://plus.google.com/+DejanPetrovic/posts/fZtWsTQxRDT?iem=4&gpawv=1&hl=en-US)，教给用户如何将他们的 ChaletOS 16.04 桌面转换为 Windows 10 外观。你只需要下载这个 [Windows 10 图标包](https://github.com/Elbullazul/Windows-10/releases/download/v0.9.6/Windows.10.Icons.v0.4.1.zip)即可将它变得和 Windows 10 一样。

![](/data/attachment/album/201605/17/193552io3dyz4yy3do4yva.jpg)

当然，就笔者的角度来看，就是不转换成 Windows 10 外观，看起来也挺不错的。

![](/data/attachment/album/201605/17/193553bcxxr3qpxxd6qm6e.jpg)

![](/data/attachment/album/201605/17/193554rzt9smdo7a9otor1.jpg)

昨天 [Linux 4.6 内核刚刚发布](/article-7344-1.html)，不到一天，[Arch Linux](https://lists.archlinux.org/pipermail/arch-dev-public/2016-May/028005.html) 和基于 Debian GNU/Linux 的 [SparkyLinux](http://sparkylinux.org/linux-kernel-4-6-0/) 也分别宣布他们支持了 Linux 4.6 内核。这两个发行版应该是第一批支持 4.6 内核的发行版。当然，Gentoo 也可以，只是需要你自己去搞定。不过我们并不太建议马上就尝鲜 Linux 4.6 内核，应该等待它进入各个发行版的稳定仓库再更新。

### 版本更迭

* Wine 1.9.10 [发布](https://www.winehq.org/news/2016051701)，带来了 MAC OS 下的 Retina 高分辨率支持。


Linux 内核里的数据结构——基数树

Summary: 基数树是一种 压缩的字典树 （compressed trie） ，而字典树是实现了关联数组接口并允许以 键值对 方式存储值的一种数据结构。

很不错

赞！干货！

学习了!

来自北京的 Internet Explorer 11.0|Windows 8.1 用户

好好学习一下

### <ruby> 基数树 <rp>  （ </rp> <rt>  Radix tree </rt> <rp>  ） </rp></ruby>

![Trie](/data/attachment/album/201605/18/085613hqkbz7gkpv8lc1ck.jpg)

正如你所知道的，Linux内核提供了许多不同的库和函数，它们实现了不同的数据结构和算法。在这部分，我们将研究其中一种数据结构——<ruby> <a href="http://en.wikipedia.org/wiki/Radix_tree">  基数树 </a> <rp>  （ </rp> <rt>  Radix tree </rt> <rp>  ） </rp></ruby>。在 Linux 内核中，有两个文件与基数树的实现和API相关：

* [include/linux/radix-tree.h](https://github.com/torvalds/linux/blob/master/include/linux/radix-tree.h)
* [lib/radix-tree.c](https://github.com/torvalds/linux/blob/master/lib/radix-tree.c)

让我们先说说什么是 `基数树` 吧。基数树是一种 <ruby> 压缩的字典树 <rp>  （ </rp> <rt>  compressed trie </rt> <rp>  ） </rp></ruby> ，而[字典树](http://en.wikipedia.org/wiki/Trie)是实现了关联数组接口并允许以 `键值对` 方式存储值的一种数据结构。这里的键通常是字符串，但可以使用任意数据类型。字典树因为它的节点而与 `n叉树` 不同。字典树的节点不存储键，而是存储单个字符的标签。与一个给定节点关联的键可以通过从根遍历到该节点获得。举个例子：

```
               +-----------+
               |           |
               |    " "    |
               |           |
        +------+-----------+------+
        |                         |
        |                         |
   +----v------+            +-----v-----+
   |           |            |           |
   |    g      |            |     c     |
   |           |            |           |
   +-----------+            +-----------+
        |                         |
        |                         |
   +----v------+            +-----v-----+
   |           |            |           |
   |    o      |            |     a     |
   |           |            |           |
   +-----------+            +-----------+
                                  |
                                  |
                            +-----v-----+
                            |           |
                            |     t     |
                            |           |
                            +-----------+

```

因此在这个例子中，我们可以看到一个有着两个键 `go` 和 `cat` 的 `字典树` 。压缩的字典树也叫做 `基数树` ，它和 `字典树` 的不同之处在于，所有只有一个子节点的中间节点都被删除。

Linux 内核中的基数树是把值映射到整形键的一种数据结构。[include/linux/radix-tree.h](https://github.com/torvalds/linux/blob/master/include/linux/radix-tree.h)文件中的以下结构体描述了基数树：

```
struct radix_tree_root {
         unsigned int            height;
         gfp_t                   gfp_mask;
         struct radix_tree_node  __rcu *rnode;
};

```

这个结构体描述了一个基数树的根，它包含了3个域成员：

* `height` - 树的高度;
* `gfp_mask` - 告知如何执行动态内存分配;
* `rnode` - 孩子节点指针.

我们第一个要讨论的字段是 `gfp_mask` ：

底层内核的内存动态分配函数以一组标志作为 `gfp_mask` ，用于描述如何执行动态内存分配。这些控制分配进程的 `GFP_` 标志拥有以下值：( `GF_NOIO` 标志)意味着睡眠以及等待内存，( `__GFP_HIGHMEM` 标志)意味着高端内存能够被使用，( `GFP_ATOMIC` 标志)意味着分配进程拥有高优先级并不能睡眠等等。

* `GFP_NOIO` - 睡眠等待内存
* `__GFP_HIGHMEM` - 高端内存能够被使用;
* `GFP_ATOMIC` - 分配进程拥有高优先级并且不能睡眠;

等等。

下一个字段是`rnode`：

```
struct radix_tree_node {
        unsigned int    path;
        unsigned int    count;
        union {
                struct {
                        struct radix_tree_node *parent;
                        void *private_data;
                };
                struct rcu_head rcu_head;
        };
        /* For tree user */
        struct list_head private_list;
        void __rcu      *slots[RADIX_TREE_MAP_SIZE];
        unsigned long   tags[RADIX_TREE_MAX_TAGS][RADIX_TREE_TAG_LONGS];
};

```

这个结构体包含的信息有父节点中的偏移以及到底端(叶节点)的高度、子节点的个数以及用于访问和释放节点的字段成员。这些字段成员描述如下：

* `path` - 父节点中的偏移和到底端(叶节点)的高度
* `count` - 子节点的个数;
* `parent` - 父节点指针;
* `private_data` - 由树的用户使用;
* `rcu_head` - 用于释放节点;
* `private_list` - 由树的用户使用;

`radix_tree_node` 的最后两个成员—— `tags` 和 `slots` 非常重要且令人关注。Linux 内核基数树的每个节点都包含了一组<ruby> 指针槽 <rp>  （ </rp> <rt>  slots </rt> <rp>  ） </rp></ruby>，槽里存储着指向数据的指针。在Linux内核基数树的实现中，空槽存储的是 `NULL` 。Linux内核中的基数树也支持<ruby> 标签 <rp>  （ </rp> <rt>  tags </rt> <rp>  ） </rp></ruby>，它与 `radix_tree_node` 结构体的 `tags` 字段相关联。有了标签，我们就可以对基数树中存储的记录以单个<ruby> 比特位 <rp>  （ </rp> <rt>  bit </rt> <rp>  ） </rp></ruby>进行设置。

既然我们了解了基数树的结构，那么该是时候看一下它的API了。

### Linux内核基数树API

我们从结构体的初始化开始。有两种方法初始化一个新的基数树。第一种是使用 `RADIX_TREE` 宏：

```
RADIX_TREE(name, gfp_mask);

```

正如你所看到的，我们传递了 `name` 参数，所以通过 `RADIX_TREE` 宏，我们能够定义和初始化基数树为给定的名字。`RADIX_TREE` 的实现很简单：

```
#define RADIX_TREE(name, mask) \
         struct radix_tree_root name = RADIX_TREE_INIT(mask)

#define RADIX_TREE_INIT(mask)   { \
        .height = 0,              \
        .gfp_mask = (mask),       \
        .rnode = NULL,            \
}

```

在 `RADIX_TREE` 宏的开始，我们使用给定的名字定义 `radix_tree_root` 结构体实例，并使用给定的 mask 调用 `RADIX_TREE_INIT` 宏。 而 `RADIX_TREE_INIT` 宏则是使用默认值和给定的mask对 `radix_tree_root` 结构体进行了初始化。

第二种方法是手动定义`radix_tree_root`结构体，并且将它和mask传给 `INIT_RADIX_TREE` 宏：

```
struct radix_tree_root my_radix_tree;
INIT_RADIX_TREE(my_tree, gfp_mask_for_my_radix_tree);

```

`INIT_RADIX_TREE` 宏的定义如下:

```
#define INIT_RADIX_TREE(root, mask)  \
do {                                 \
        (root)->height = 0;          \
        (root)->gfp_mask = (mask);   \
        (root)->rnode = NULL;        \
} while (0)

```

和`RADIX_TREE_INIT`宏所做的初始化工作一样，`INIT_RADIX_TREE` 宏使用默认值和给定的 mask 完成初始化工作。

接下来是用于向基数树插入和删除数据的两个函数：

* `radix_tree_insert`;
* `radix_tree_delete`;

第一个函数 `radix_tree_insert` 需要3个参数：

* 基数树的根;
* 索引键;
* 插入的数据;

`radix_tree_delete` 函数需要和 `radix_tree_insert` 一样的一组参数，但是不需要传入要删除的数据。

基数树的搜索以两种方法实现：

* `radix_tree_lookup`;
* `radix_tree_gang_lookup`;
* `radix_tree_lookup_slot`.

第一个函数`radix_tree_lookup`需要两个参数：

* 基数树的根;
* 索引键;

这个函数尝试在树中查找给定的键，并返回和该键相关联的记录。第二个函数 `radix_tree_gang_lookup` 有以下的函数签名：

```
unsigned int radix_tree_gang_lookup(struct radix_tree_root *root,
                                    void **results,
                                    unsigned long first_index,
                                    unsigned int max_items);

```

它返回的是记录的个数。 `results` 中的结果，按键排序，并从第一个索引开始。返回的记录个数将不会超过 `max_items` 的值。

最后一个函数`radix_tree_lookup_slot`将会返回包含数据的指针槽。

### 链接

* [Radix tree](http://en.wikipedia.org/wiki/Radix_tree)
* [Trie](http://en.wikipedia.org/wiki/Trie)

---

via: <https://github.com/0xAX/linux-insides/blob/master/DataStructures/radix-tree.md>

作者：[0xAX] 译者：[cposture](https://github.com/cposture) 校对：[Mr小眼儿](https://github.com/tinyeyeser)

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


点评五款用于 Linux 编程的内存调试器

可以

![](/data/attachment/album/201605/18/094209j2djdcataqiri0cz.jpg)

>
> Credit: [Moini](https://openclipart.org/detail/132427/penguin-admin)
>
>
>

作为一个程序员，我知道我肯定会犯错误——怎么可能不犯错！程序员也是人啊。有的错误能在编码过程中及时发现，而有些却得等到软件测试了才能显露出来。然而，还有一类错误并不能在这两个阶段被解决，这就导致软件不能正常运行，甚至是提前终止。

如果你还没猜出是那种错误，我说的就是和内存相关的错误。手动调试这些错误不仅耗时，而且很难发现并纠正。值得一提的是，这种错误很常见，特别是在用 C/C++ 这类允许[手动管理内存](https://en.wikipedia.org/wiki/Manual_memory_management)的语言编写的软件里。

幸运的是，现在有一些编程工具能够帮你在软件程序中找到这些和内存相关的错误。在这些工具集中，我评估了五款支持 Linux 的、流行的、自由开源的内存调试器： Dmalloc 、 Electric Fence 、 Memcheck 、 Memwatch 以及 Mtrace 。在日常编码中，我已经用过这五个调试器了，所以这些评估是建立在我的实际体验之上的。

### [Dmalloc](http://dmalloc.com/)

**开发者**：Gray Watson

**评估版本**：5.5.2

**支持的 Linux 版本**：所有种类

**许可**： CC 3.0

Dmalloc 是 Gray Watson 开发的一款内存调试工具。它是作为库来实现的，封装了标准内存管理函数如`malloc()` , `calloc()` , `free()`等，使程序员得以检测出有问题的代码。

![cw dmalloc output](/data/attachment/album/201605/18/094214qz6e686z61u4689t.png)

*Dmalloc*

如同工具的网页所示，这个调试器提供的特性包括内存泄漏跟踪、<ruby>   重复释放内存  <rp>  （ </rp> <rt>  double free </rt> <rp>  ） </rp></ruby>错误跟踪、以及<ruby>   越界写入  <rp>  （ </rp> <rt>  fence-post write </rt> <rp>  ） </rp></ruby>检测。其它特性包括报告错误的文件/行号、通用的数据统计记录。

#### 更新内容

5.5.2 版本是一个 [bug 修正发行版](http://dmalloc.com/releases/notes/dmalloc-5.5.2.html)，修复了几个有关构建和安装的问题。

#### 有何优点

Dmalloc 最大的优点就是高度可配置性。比如说，你可以配置它以支持 C++ 程序和多线程应用。 Dmalloc 还提供一个有用的功能：运行时可配置，这表示在 Dmalloc 执行时，可以轻易地启用或者禁用它提供的一些特性。

你还可以配合 [GNU Project Debugger (GDB)](http://www.gnu.org/software/gdb/)来使用 Dmalloc ，只需要将`dmalloc.gdb`文件（位于 Dmalloc 源码包中的 contrib 子目录里）的内容添加到你的主目录中的`.gdbinit`文件里即可。

另外一个让我对 Dmalloc 爱不释手的优点是它有大量的资料文献。前往官网的 [Documentation 栏目](http://dmalloc.com/docs/)，可以获取所有关于如何下载、安装、运行、怎样使用库，和 Dmalloc 所提供特性的细节描述，及其生成的输出文件的解释。其中还有一个章节介绍了一般问题的解决方法。

#### 注意事项

跟 Mtrace 一样， Dmalloc 需要程序员改动他们的源代码。比如说你可以（也是必须的）添加头文件`dmalloc.h`，工具就能汇报产生问题的调用的文件或行号。这个功能非常有用，因为它节省了调试的时间。

除此之外，还需要在编译你的程序时，把 Dmalloc 库（编译 Dmalloc 源码包时产生的）链接进去。

然而，还有点更麻烦的事，需要设置一个环境变量，命名为`DMALLOC_OPTION`，以供工具在运行时配置内存调试特性，比如定义输出文件的路径。可以手动为该环境变量分配一个值，不过初学者可能会觉得这个过程有点困难，因为该值的一部分用来表示要启用的 Dmalloc 特性——以十六进制值的累加值表示。[这里](http://dmalloc.com/docs/latest/online/dmalloc_26.html#SEC32)有详细介绍。

一个比较简单方法设置这个环境变量是使用 [Dmalloc 实用指令](http://dmalloc.com/docs/latest/online/dmalloc_23.html#SEC29)，这是专为这个目的设计的方法。

#### 总结

Dmalloc 真正的优势在于它的可配置选项。而且高度可移植，曾经成功移植到多种操作系统如 AIX 、 BSD/OS 、 DG/UX 、 Free/Net/OpenBSD 、 GNU/Hurd 、 HPUX 、 Irix 、 Linux 、 MS-DOG 、 NeXT 、 OSF 、 SCO 、 Solaris 、 SunOS 、 Ultrix 、 Unixware 甚至 Unicos（运行在 Cray T3E 主机上）。虽然使用 Dmalloc 需要学习许多知识，但是它所提供的特性值得为之付出。

### [Electric Fence](https://launchpad.net/ubuntu/+source/electric-fence/2.2.3)

**开发者**：Bruce Perens

**评估版本**：2.2.3

**支持的 Linux 版本**：所有种类

**许可**：GPL v2

Electric Fence 是 Bruce Perens 开发的一款内存调试工具，它以库的形式实现，你的程序需要链接它。Electric Fence 能检测出[堆](https://en.wikipedia.org/wiki/Memory_management#Dynamic_memory_allocation)内存溢出和访问已经释放的内存。

![cw electric fence output](/data/attachment/album/201605/18/094218u1992euhe2wuwh8c.png)

*Electric Fence*

顾名思义， Electric Fence 在每个所申请的缓存边界建立了虚拟围栏，这样一来任何非法的内存访问都会导致[段错误](https://en.wikipedia.org/wiki/Segmentation_fault)。这个调试工具同时支持 C 和 C++ 程序。

#### 更新内容

2.2.3 版本修复了工具的构建系统，使得 `-fno-builtin-malloc` 选项能真正传给 [GNU Compiler Collection (GCC)](https://en.wikipedia.org/wiki/GNU_Compiler_Collection)。

#### 有何优点

我喜欢 Electric Fence 的首要一点是它不同于 Memwatch 、 Dmalloc 和 Mtrace ，不需要对你的源码做任何的改动，你只需要在编译的时候把它的库链接进你的程序即可。

其次， Electric Fence 的实现保证了产生越界访问的第一个指令就会引起段错误。这比在后面再发现问题要好多了。

不管是否有检测出错误， Electric Fence 都会在输出产生版权信息。这一点非常有用，由此可以确定你所运行的程序已经启用了 Electric Fence 。

#### 注意事项

另一方面，我对 Electric Fence 真正念念不忘的是它检测内存泄漏的能力。内存泄漏是 C/C++ 软件最常见也是最不容易发现的问题之一。不过， Electric Fence 不能检测出栈溢出，而且也不是线程安全的。

由于 Electric Fence 会在用户分配内存区的前后分配禁止访问的虚拟内存页，如果你过多的进行动态内存分配，将会导致你的程序消耗大量的额外内存。

Electric Fence 还有一个局限是不能明确指出错误代码所在的行号。它所能做只是在检测到内存相关错误时产生段错误。想要定位错误的行号，需要借助 [GDB](http://www.gnu.org/software/gdb/)这样的调试工具来调试启用了 Electric Fence 的程序。

最后一点，尽管 Electric Fence 能检测出大部分的缓冲区溢出，有一个例外是，如果所申请的缓冲区大小不是系统字长的倍数，这时候溢出（即使只有几个字节）就不能被检测出来。

#### 总结

尽管局限性较大， Electric Fence 的易用性仍然是加分项。只要链接一次程序， Electric Fence 就可以在监测出内存相关问题的时候报警。不过，如同前面所说， Electric Fence 需要配合像 GDB 这样的源码调试器使用。

### [Memcheck](http://valgrind.org/docs/manual/mc-manual.html)

**开发者**：[Valgrind 开发团队](http://valgrind.org/info/developers.html)

**评估版本**：3.10.1

**支持的 Linux 发行版**：所有种类

**许可**：GPL

[Valgrind](http://valgrind.org/) 是一个提供好几款调试和分析 Linux 程序性能的工具的套件。虽然 Valgrind 能和不同语言——Java 、 Perl 、 Python 、 Assembly code 、 ortran 、 Ada 等——编写的程序一起工作，但是它主要还是针对使用 C/C++ 所编写的程序。

Memcheck ，一款内存错误检测器，是其中最受欢迎的工具。它能够检测出如内存泄漏、无效的内存访问、未定义变量的使用以及堆内存分配和释放相关的问题等诸多问题。

#### 更新内容

[工具套件( 3.10.1 )](http://valgrind.org/docs/manual/dist.news.html)主要修复了 3.10.0 版本发现的 bug 。除此之外，“从主干开发版本向后移植的一些补丁，修复了缺失的 AArch64 ARMv8 指令和系统调用”。

#### 有何优点

同其它所有 Valgrind 工具一样， Memcheck 也是命令行程序。它的操作非常简单：通常我们会使用诸如 `prog arg1 arg2` 格式的命令来运行程序，而 Memcheck 只要求你多加几个值即可，如 `valgrind --leak-check=full prog arg1 arg2` 。

![cw memcheck output](/data/attachment/album/201605/18/094223vcxutc60jdzdcmkz.png)

*Memcheck*

（注意：因为 Memcheck 是 Valgrind 的默认工具，所以在命令行执行命令时无需提及 Memcheck。但是，需要在编译程序之初带上 `-g` 参数选项，这一步会添加调试信息，使得 Memcheck 的错误信息会包含正确的行号。）

我真正倾心于 Memcheck 的是它提供了很多命令行选项（如上所述的`--leak-check`选项），如此不仅能控制工具运转还可以控制它的输出。

举个例子，可以开启`--track-origins`选项，以查看程序源码中未初始化的数据；可以开启`--show-mismatched-frees`选项让 Memcheck 匹配内存的分配和释放技术。对于 C 语言所写的代码， Memcheck 会确保只能使用`free()`函数来释放内存，`malloc()`函数来申请内存。而对 C++ 所写的源码， Memcheck 会检查是否使用了`delete`或`delete[]`操作符来释放内存，以及`new`或者`new[]`来申请内存。

Memcheck 最好的特点，尤其是对于初学者来说，是它会给用户建议使用哪个命令行选项能让输出更加有意义。比如说，如果你不使用基本的`--leak-check`选项， Memcheck 会在输出时给出建议：“使用 --leak-check=full 重新运行以查看更多泄漏内存细节”。如果程序有未初始化的变量， Memcheck 会产生信息：“使用 --track-origins=yes 以查看未初始化变量的定位”。

Memcheck 另外一个有用的特性是它可以创建<ruby>   抑制文件  <rp>  （ </rp> <rt>  suppression files </rt> <rp>  ） </rp></ruby>，由此可以略过特定的不能修正的错误，这样 Memcheck 运行时就不会每次都报警了。值得一提的是， Memcheck 会去读取默认抑制文件来忽略系统库（比如 C 库）中的报错，这些错误在系统创建之前就已经存在了。可以选择创建一个新的抑制文件，或是编辑现有的文件(通常是`/usr/lib/valgrind/default.supp`)。

Memcheck 还有高级功能，比如可以使用[定制内存分配器](http://stackoverflow.com/questions/4642671/c-memory-allocators)来[检测内存错误](http://valgrind.org/docs/manual/mc-manual.html#mc-manual.mempools)。除此之外， Memcheck 提供[监控命令](http://valgrind.org/docs/manual/mc-manual.html#mc-manual.monitor-commands)，当用到 Valgrind 内置的 gdbserver ，以及[客户端请求](http://valgrind.org/docs/manual/mc-manual.html#mc-manual.clientreqs)机制（不仅能把程序的行为告知 Memcheck ，还可以进行查询）时可以使用。

#### 注意事项

毫无疑问， Memcheck 可以节省很多调试时间以及省去很多麻烦。但是它使用了很多内存，导致程序执行变慢（[由文档可知](http://valgrind.org/docs/manual/valgrind_manual.pdf)，大概会花费 20 至 30 倍时间）。

除此之外， Memcheck 还有其它局限。根据用户评论， Memcheck 很明显不是[线程安全](http://sourceforge.net/p/valgrind/mailman/message/30292453/)的；它不能检测出 [静态缓冲区溢出](https://msdn.microsoft.com/en-us/library/ee798431%28v=cs.20%29.aspx)；还有就是，一些 Linux 程序如 [GNU Emacs](http://www.computerworld.com/article/2484425/linux/5-free-linux-text-editors-for-programming-and-word-processing.html?nsdr=true&page=2) 目前还不能配合 Memcheck 工作。

如果有兴趣，可以在[这里](http://valgrind.org/docs/manual/manual-core.html#manual-core.limits)查看 Valgrind 局限性的详细说明。

#### 总结

无论是对于初学者还是那些需要高级特性的人来说， Memcheck 都是一款便捷的内存调试工具。如果你仅需要基本调试和错误检查， Memcheck 会非常容易上手。而当你想要使用像抑制文件或者监控指令这样的特性，就需要花一些功夫学习了。

虽然罗列了大量的局限性，但是 Valgrind（包括 Memcheck ）在它的网站上声称全球有[成千上万程序员](http://valgrind.org/info/)使用了此工具。开发团队称收到来自超过 30 个国家的用户反馈，而这些用户的工程代码有的高达两千五百万行。

### [Memwatch](http://www.linkdata.se/sourcecode/memwatch/)

**开发者**：Johan Lindh

**评估版本**：2.71

**支持的 Linux 发行版**：所有种类

**许可**：GNU GPL

Memwatch 是由 Johan Lindh 开发的内存调试工具，虽然它扮演的主要角色是内存泄漏检测器，但是（根据网页介绍）它也具有检测其它如[内存重复释放和错误释放](http://www.cecalc.ula.ve/documentacion/tutoriales/WorkshopDebugger/007-2579-007/sgi_html/ch09.html)、缓冲区溢出和下溢、[野指针](http://c2.com/cgi/wiki?WildPointer)写入等等内存相关问题的能力。

Memwatch 支持用 C 语言所编写的程序。也可以在 C++ 程序中使用它，但是这种做法并不提倡（由 Memwatch 源码包随附的 Q&A 文件中可知）。

#### 更新内容

这个版本添加了`ULONG_LONG_MAX`以区分 32 位和 64 位程序。

#### 有何优点

跟 Dmalloc 一样， Memwatch 也有优秀的文档资料。参考 USING 文件，可以学习如何使用 Memwatch ，可以了解 Memwatch 是如何初始化、如何清理以及如何进行 I/O 操作，等等。还有一个 FAQ 文件，旨在帮助用户解决使用过程遇到的一般问题。最后还有一个`test.c`文件提供工作案例参考。

![cw memwatch output](/data/attachment/album/201605/18/094228hlccfflwgc7nfcwj.png)

*Memwatch*

不同于 Mtrace ， Memwatch 产生的日志文件（通常是`memwatch.log`）是人类可阅读的格式。而且， Memwatch 每次运行时总会把内存调试结果拼接到输出该文件的末尾。如此便可在需要之时轻松查看之前的输出信息。

同样值得一提的是当你执行了启用 Memwatch 的程序， Memwatch 会在[标准输出](https://en.wikipedia.org/wiki/Standard_streams#Standard_output_.28stdout.29)中产生一个单行输出，告知发现了错误，然后你可以在日志文件中查看输出细节。如果没有产生错误信息，就可以确保日志文件不会写入任何错误，多次运行的话确实能节省时间。

另一个我喜欢的优点是 Memwatch 还提供了在源码中获取其输出信息的方式，你可以获取信息，然后任由你进行处理（参考 Memwatch 源码中的`mwSetOutFunc()`函数获取更多有关的信息）。

#### 注意事项

跟 Mtrace 和 Dmalloc 一样， Memwatch 也需要你往你的源文件里增加代码：你需要把`memwatch.h`这个头文件包含进你的代码。而且，编译程序的时候，你需要连同`memwatch.c`一块编译；或者你可以把已经编译好的目标模块包含起来，然后在命令行定义`MEMWATCH`和`MW_STDIO`变量。不用说，想要在输出中定位行号， -g 编译器选项也少不了。

此外， Memwatch 缺少一些特性。比如 Memwatch 不能检测出对一块已经被释放的内存进行写入操作，或是在分配的内存块之外的进行读取操作。而且， Memwatch 也不是线程安全的。还有一点，正如我在开始时指出，在 C++ 程序上运行 Memwatch 的结果是不能预料的。

#### 总结

Memcheck 可以检测很多内存相关的问题，在处理 C 程序时是非常便捷的调试工具。因为源码小巧，所以可以从中了解 Memcheck 如何运转，有需要的话可以调试它，甚至可以根据自身需求扩展升级它的功能。

### [Mtrace](http://www.gnu.org/software/libc/manual/html_node/Tracing-malloc.html)

**开发者**: Roland McGrath 和 Ulrich Drepper

**评估版本**: 2.21

**支持的 Linux 发行版**：所有种类

**许可**：GNU GPL

Mtrace 是 [GNU C 库](https://www.gnu.org/software/libc/)中的一款内存调试工具，同时支持 Linux 上的 C 和 C++ 程序，可以检测由函数`malloc()`和`free()`不匹配的调用所引起的内存泄漏问题。

![cw mtrace output](/data/attachment/album/201605/18/094232y5pee9zhyrx1jf99.png)

*Mtrace*

Mtrace 实际上是实现了一个名为`mtrace()`的函数，它可以跟踪程序中所有 malloc/free 调用，并在用户指定的文件中记录相关信息。文件以一种机器可读的格式记录数据，所以有一个 Perl 脚本——同样命名为 mtrace ——用来把文件转换并为人类可读格式。

#### 更新内容

[Mtrace 源码](https://sourceware.org/git/?p=glibc.git;a=history;f=malloc/mtrace.c;h=df10128b872b4adc4086cf74e5d965c1c11d35d2;hb=HEAD)和 [Perl 文件](https://sourceware.org/git/?p=glibc.git;a=history;f=malloc/mtrace.pl;h=0737890510e9837f26ebee2ba36c9058affb0bf1;hb=HEAD)同 GNU C 库( 2.21 版本)一起释出，除了更新版权日期，其它别无改动。

#### 有何优点

Mtrace 最好的地方是它非常简单易学。你只需要了解在你的源码中如何以及何处添加 `mtrace()` 及对应的 `muntrace()` 函数，还有如何使用 Mtrace 的 Perl 脚本。后者非常简单，只需要运行指令`mtrace <program-executable> <log-file-generated-upon-program-execution>`（例子见开头截图最后一条指令）。

Mtrace 另外一个优点是它的可伸缩性，这体现在不仅可以使用它来调试完整的程序，还可以使用它来检测程序中独立模块的内存泄漏。只需在每个模块里调用`mtrace()`和`muntrace()`即可。

最后一点，因为 Mtrace 会在`mtrace()`——在源码中添加的函数——执行时被触发，因此可以很灵活地[使用信号](http://webcache.googleusercontent.com/search?q=cache:s6ywlLtkSqQJ:www.gnu.org/s/libc/manual/html_node/Tips-for-the-Memory-Debugger.html+&cd=1&hl=en&ct=clnk&gl=in&client=Ubuntu)动态地（在程序执行时）使能 Mtrace 。

#### 注意事项

因为`mtrace()`和`mauntrace()`函数 —— 声明在`mcheck.h`文件中，所以必须在源码中包含此头文件 —— 的调用是 Mtrace 工作的基础（`mauntrace()`函数并非[总是必要](http://www.gnu.org/software/libc/manual/html_node/Using-the-Memory-Debugger.html#Using-the-Memory-Debugger)），因此 Mtrace 要求程序员至少改动源码一次。

需要注意的是，在编译程序的时候带上 -g 选项（ [GCC](http://linux.die.net/man/1/gcc) 和 [G++](http://linux.die.net/man/1/g++) 编译器均有提供），才能使调试工具在输出结果时展示正确的行号。除此之外，有些程序（取决于源码体积有多大）可能会花很长时间进行编译。最后，带 -g 选项编译会增加了可执行文件的大小（因为提供了额外的调试信息），因此记得程序需要在测试结束后，不带 -g 选项重新进行编译。

使用 Mtrace ，你需要掌握 Linux 环境变量的基本知识，因为在程序执行之前，需要把用户把环境变量`MALLOC_TRACE`的值设为指定的文件（`mtrace()`函数将会记录全部信息到其中）路径。

Mtrace 在检测内存泄漏和试图释放未经过分配的内存方面存在局限。它不能检测其它内存相关问题如非法内存访问、使用未初始化内存。而且，[有人抱怨](https://sourceware.org/ml/libc-help/2014-05/msg00008.html) Mtrace 不是[线程安全](https://en.wikipedia.org/wiki/Thread_safety)的。

### 总结

不言自明，我在此讨论的每款内存调试器都有其优点和局限。所以，哪一款适合你取决于你所需要的特性，虽然有时候容易安装和使用也是一个决定因素。

要想捕获软件程序中的内存泄漏， Mtrace 最适合不过了。它还可以节省时间。由于 Linux 系统已经预装了此工具，对于不能联网或者不可以下载第三方调试调试工具的情况， Mtrace 也是极有助益的。

另一方面，相比 Mtrace ， Dmalloc 不仅能检测更多错误类型，还提供更多特性，比如运行时可配置、 GDB 集成。而且， Dmalloc 不像这里所说的其它工具，它是线程安全的。更不用说它的详细资料了，这让 Dmalloc 成为初学者的理想选择。

虽然 Memwatch 的资料比 Dmalloc 的更加丰富，而且还能检测更多的错误种类，但是你只能在 C 语言写就的程序中使用它。一个让 Memwatch 脱颖而出的特性是它允许在你的程序源码中处理它的输出，这对于想要定制输出格式来说是非常有用的。

如果改动程序源码非你所愿，那么使用 Electric Fence 吧。不过，请记住， Electric Fence 只能检测两种错误类型，而此二者均非内存泄漏。还有就是，需要基本了解 GDB 以最大化发挥这款内存调试工具的作用。

Memcheck 可能是其中综合性最好的了。相比这里提及的其它工具，它能检测更多的错误类型，提供更多的特性，而且不需要你的源码做任何改动。但请注意，基本功能并不难上手，但是想要使用它的高级特性，就必须学习相关的专业知识了。

---

via: <http://www.computerworld.com/article/3003957/linux/review-5-memory-debuggers-for-linux-coding.html>

作者：[Himanshu Arora](http://www.computerworld.com/author/Himanshu-Arora/) 译者：[soooogreen](https://github.com/soooogreen) 校对：[PurlingNayuki](https://github.com/PurlingNayuki),[ezio](https://github.com/oska874)

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


5 个很适合在课堂上演示的树莓派项目

Summary: 我的世界: Pi、反应游戏和交通灯、Sense HAT 电子宠物、红外鸟笼、机器人

![](/data/attachment/album/201605/18/103457c7z4iq11izqa7i5z.png)

### 1. 我的世界: Pi

![](/data/attachment/album/201605/18/103459exktvufbfkeyxone.png)

*源于 Raspberry Pi 基金会. [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)*

“我的世界”是世界上几乎每一个青少年都特别喜欢的一款游戏，而且它成功抓住了年轻人眼球，成为目前最能激发年轻人创造力的游戏之一。这个树莓派版本自带的我的世界不仅仅是一个具有创造性的建筑游戏，还是一个具有编程接口，可以通过 Python 与之交互的版本。

我的世界：Pi 版对于老师来说是一个教授学生解决问题和编写代码完成任务的好方式。你可以使用 Python API 创建一个房子，并且一直跟随这你的脚步移动，在所到之处建造一座桥，让天空落下熔岩雨滴，在空中显示温度，以及其它你可以想象到的一切东西。

详情请见 "[我的世界: Pi 入门](https://opensource.com/life/15/5/getting-started-minecraft-pi)"

### 2. 反应游戏和交通灯

![](/data/attachment/album/201605/18/103500w3s1oy8gxo6y1m16.jpg)

*源于 [Low Voltage Labs](http://lowvoltagelabs.com/). [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)*

使用树莓派可以很轻松地进行物理计算，只需要连接几个 LED 和按钮到开发板上的 GPIO 接口，再用几行代码你就可以按下按钮来开灯。一旦你了解了如何使用代码来完成这些基本的操作，接下来就可以根据你的想象来做其它事情了。

如果你知道如何让一个灯闪烁，你就可以控制三个灯闪烁。挑选三个和交通灯一样颜色的 LED 灯，然后编写控制交通灯的代码。如果你知道如何使用按钮触发事件，那么你就可以模拟一个行人过马路。同时你可以参考其它已经完成的交通灯附件，比如[PI-TRAFFIC](http://lowvoltagelabs.com/products/pi-traffic/), [PI-STOP](http://4tronix.co.uk/store/index.php?rt=product/product&product_id=390), [Traffic HAT](https://ryanteck.uk/hats/1-traffichat-0635648607122.html)，等等。

代码并不是全部——这只是一个演练，让你理解现实世界里系统是如何完成设计的。计算思维是一个让你终身受用的技能。

![](/data/attachment/album/201605/18/103500a9xjmif0b4wvt0mw.png)

*源于 Raspberry Pi 基金会. [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)*

接下来试着接通两个按钮和 LED 灯的电源，实现一个双玩家的反应游戏 —— 让 LED 灯随机时间点亮，然后看是谁抢先按下按钮。

要想了解更多可以看看 [GPIO Zero recipes](http://pythonhosted.org/gpiozero/recipes/)。你所需要的资料都可以在 [CamJam EduKit 1](http://camjam.me/?page_id=236) 找到。

### 3. Sense HAT 电子宠物

Astro Pi —— 一个增强版的树莓派 —— 将在 12 月问世，但是你并没有错过亲手把玩这个硬件的机会。Sense HAT 是使用在 Astro Pi 的一个传感器扩展板，现在已经开放购买了。你可以使用它来进行数据搜集、科学实验，游戏等等。可以看看下面树莓派的 Carrie Anne 拍摄的 Gurl Geek Diaries 的视频，里面演示了一种很棒的入门途径——在 Sense HAT 屏幕上自己设计一个生动的像素宠物：[视频](https://youtu.be/gfRDFvEVz-w)（墙外）。

>
> 详见 "[探索 Sense HAT](https://opensource.com/life/15/10/exploring-raspberry-pi-sense-hat)."
>
>
>

### 4. 红外鸟笼

![](/data/attachment/album/201605/18/103500v66sy4f8cn5duycc.png)

*源于 Raspberry Pi 基金会. [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)*

让整个班级都可以参与进来的好主意是在鸟笼里放置一个树莓派和夜视镜头，以及一些红外线灯，这样子你就可以在黑暗中看见鸟笼里的情况了，然后使用树莓派通过网络串流视频。然后就可以等待小鸟归笼了，你可以在不打扰的情况下近距离观察小窝里的它们了。

要了解更多有关红外线和光谱的知识，以及如何校准摄像头焦点和使用软件控制摄像头，可以访问 [打造一个红外鸟笼](https://www.raspberrypi.org/learning/infrared-bird-box/)。

### 5. 机器人

![](/data/attachment/album/201605/18/103501n8r8qeqwtxszhh37.jpg)

*源于 Raspberry Pi 基金会. [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)*

只需要一个树莓派、很少的几个电机和电机控制器，你就可以自己动手制作一个机器人。可以制作的机器人有很多种，从简单的由几个轮子和自制底盘拼凑的简单小车，到由游戏控制器驱动、具有自我意识、配备了传感器，安装了摄像头的金属小马。

要学习如何控制不同的电机，可以使用 RTK 电机驱动开发板入门或者使用配置了电机、轮子和传感器的 CamJam 机器人开发套件——具有很大的价值和大量的学习潜力。

或者，如果你还想了解更多核心内容，可以试试 PiBorg 的 [4Borg](https://www.piborg.org/4borg)(£99/$150)和 [DiddyBorg](https://www.piborg.org/diddyborg)(£180/$273)，或者购买 Metal 版 DoodleBorg (£250/$380)，然后构建一个最小版本的 [DoodleBorg tank](https://www.piborg.org/doodleborg)（非卖品）。

详情可见 [机器人装备表](http://camjam.me/?page_id=1035#worksheets)。

---

via: <https://opensource.com/education/15/12/5-great-raspberry-pi-projects-classroom>

作者：[Ben Nuttall](https://opensource.com/users/bennuttall) 译者：[ezio](https://github.com/oska874) 校对：[Caroline](https://github.com/carolinewuyan)

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


Docker 1.11 采纳了开源容器项目（OCP）组件

Summary: Docker 在开放容器项目（Open Container Project，OCP）中的参与度达成圆满，最新构建的 Docker 采用了 Docker 贡献给 OCP 的组件。

内容倒是没怎么看懂，但是在贡献者名单里又看到华为了。这里要为华为赞一个。经常能在著名的开源项目里看到华为的身影～

GO语言出来后好像也就成就了这个工具的诞生

好像还真是

难道是 Google 本身想用在 Android 上，结果误中副车？

没有具体研究过这个工具，只是了解到用这个工具的方法打包后的工具类似镜像，如果用在linux上，让这个方法代替包管理，所有的软件打包成镜像自带所需要的依赖或者串联镜像形成一种大型执行体镜像组，哪么linux包管理就离统一标准不远了

如果图形化操作简单到，类似虚拟光驱加载iso一样简单，linux的发展就暴发了

![](/data/attachment/album/201605/18/105011sy3ro39oo97k3vn6.jpg)

>
> Docker 在<ruby> 开放容器项目 <rp>  （ </rp> <rt>  Open Container Project，OCP </rt> <rp>  ） </rp></ruby>中的参与度达成圆满，最新构建的 Docker 采用了 Docker 贡献给 OCP 的组件。
>
>
>

新发布的 [Docker 1.11](https://blog.docker.com/2016/04/docker-engine-1-11-runc/) 的最大新闻并不是它的功能，而是它使用了在 OCP 支持下的标准化的组件版本。

去年，Docker 贡献了它的 [runC](http://runc.io/) 核心给 OCP 作为构建构建容器工具的基础。同样还有 [containerd](https://containerd.tools/)，作为守护进程或者服务端用于控制 runC 的实例。Docker 1.11 现在使用的就是这个捐赠和公开的版本。

Docker 此举挑战了它的容器生态仍[主要由 Docker 自身决定](http://www.infoworld.com/article/2876801/application-virtualization/docker-reorganization-grows-up.html)这个说法。它并不是为了作秀才将容器规范和运行时细节贡献给 OCP。它希望项目将来的开发越开放和广泛越好。

![](/data/attachment/album/201605/18/105018gj53xjprlj8pko8w.png)

*Docker 1.11 已经用贡献给 OCP 的 runC 和 containerd 进行了重构。runC 如果需要的话可以换成另外一个。*

runC 的[两位主要提交者](https://github.com/opencontainers/runc/graphs/contributors)来自 Docker，但是来自 Virtuozzo(Parallels fame)、OpenShift、Project Atomic、华为、GE Healthcare、Suse Linux 也都是提交人员里面的常客。

Docker 1.11 中一个更明显的变化是先前 Docker runtime 在 Docker 中是唯一可用的，并且评论家认为这个会限制用户的选择。runC runtime 现在是可替换的；虽然 Docker 在发布时将 runC 作为默认引擎，但是任何兼容的引擎都可以用来替换它。（Docker 同样希望它可以不用杀死并重启现在运行的容器，但是这个作为今后的改进规划。）

Docker 正在将基于 OCP 的开发流程作为内部创建其产品的更好方式。在它发布 1.11 的[官方博客中称](https://blog.docker.com/2016/04/docker-engine-1-11-runc/)：“将 Docker 切分成独立的工具意味着更专注的维护者，最终会有更好的软件质量。”

除了修复长期以来存在的问题和确保 Docker 的 runC/containerd 跟上步伐，Docker 还在 Docker 1.11 中加入了一些改进。Docker Engine 现在支持 VLAN 和 IPv6 服务发现，并且会自动在多个相同别名容器间执行 DNS 轮询负载均衡。

---

via: <http://www.infoworld.com/article/3055966/open-source-tools/docker-111-adopts-open-container-project-components.html>

作者：[Serdar Yegulalp](http://www.infoworld.com/author/Serdar-Yegulalp/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


开源新闻速递：Fedora 24 在讨论是否换用  Linux 4.6 内核

Summary:
Insync 限免两天——到现在为止，还有28个小时；
Gmail 将停止支持 SSLv3 和 RC4

### 头条消息

![](/data/attachment/album/201605/18/172436vzn4ui38a8aqki2q.png)

昨天我们报道过，Linux 4.6 内核发布之后，已经有[一些发行版率先尝鲜](/article-7351-1.html)了。而准备于 6 月 14 日发布的 Fedora 24 眼见小朋友们都用上了新内核，也不禁有些眼热，所以，现在他们内部在[讨论](https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/AFMMGKJSRXRPJAEH2VNPJFJHA72I5T3R/)是不是也换到 4.6 上。Fedora 24 之前一直是基于 Linux 4.5 内核做的开发，但是由于 Fedora 24 已经延迟了三次，所以最终冻结期被延迟到了五月，因此就在最终冻结期前赶上了 Linux 4.6 的发布。离计划的发布日期只有不到一个月了，这个时候改换内核，以 Fedora 一向的“良好”传统，延期看来是不可避免的了，所以老王倒是觉得没必要换 4.6 ——虽然 4.6 也有一些新特性，但是值得么？不如等 Fedora 25 ，反正等不了多久。

Linux 下最棒的 Google Drive 原生客户端 [Insync](https://www.insynchq.com) 限免两天——[到现在为止，还有28个小时](https://www.insynchq.com/free)。 它支持 Arch Linux、CentOS、 Debian、 Fedora、 Ubuntu 和 Red Hat Enterprise Linux 等 Linux 发行版，并有 Linux 下的各种文件管理器的插件支持，如：Caja、Dolphin、Konqueror、Nautilus、Nemo 和 Thunar。此外，Insync 也支持 Mac OS 、Windows 等系统。对了，最最重要的是，你得自备梯子。笑哭~，老王默默的关上了浏览器。

Google [正式宣布](http://googleappsupdates.blogspot.com/2016/05/disabling-support-for-sslv3-and-rc4-for.html)在 6 月 16 日之后放弃对 SSLv3 和 RC4 加密套件的支持，这会影响到 Gmail 的 SMTPS 服务器及其 Gmail 的 Web 服务器。这是应有之义，而且这个消息其中之前都已经早早发布过了。不过，虽然 Gmail 还能和国内通讯，但是其实国内很多很多邮件服务器都不使用 SMTPS （SMTP over SSL），所以没有什么意义。

### 版本更迭

* [ReactOS](https://www.reactos.org/) 0.4 [发布](https://www.reactos.org/project-news/reactos-041-released)了第一个维护版本 0.4.1，初步支持了 Btrfs 文件系统的读写。ReactOS 在经过了十年的休眠后，终于苏醒了，今年发布了 0.4 版本（2006 年发布的 0.3），维护者 Ziliang Guo （老王：似乎是个中国人？）承诺，会在接下来的几周和几个月内继续发布更新版本。


SUSE Linux 企业版的实时补丁将带来无中断的服务

Summary: 开源先锋及 SUSE Linux 的创造者 SUSE 公司宣布推出 SUSE Linux 企业版的实时补丁（Live Patching）。

开源先锋及 SUSE Linux 的创造者 SUSE 公司宣布推出 SUSE Linux 企业版的<ruby> <a href="https://www.suse.com/products/live-patching/">  实时补丁 </a> <rp>  （ </rp> <rt>  Live Patching </rt> <rp>  ） </rp></ruby>。

![](/data/attachment/album/201605/19/074025me3zzpevrj1eppy3.jpg)

SUSE 是首批为基于 Linux 内核的操作系统提供实时补丁的开源公司之一。实时补丁技术是在 Linux 4.0 系列内核中实现的一种技术，发布于一年前。

但是，只有很少的 GNU/Linux 操作系统在其架构内支持了实时补丁功能，因为看起来该技术大多会用于企业用户，大型公司并不希望由于内核升级而导致业务中断。

从今天开始，所有运行 SAP NetWeaver 技术平台、SAP HANA 平台以及其它的 SAP（<ruby> 系统应用产品 <rp>  （ </rp> <rt>  Systems Applications Products </rt> <rp>  ） </rp></ruby>）应用的 SUSE 用户都可以使用 [SUSE Linux 企业版实时补丁](https://www.suse.com/products/live-patching/)了，这可以帮助他们节约开销，业务永不停顿。

“依赖于实时数据和分析的服务日益竞争激烈，而保持应用服务器可持续访问很关键”，SUSE 战略联盟与市场总裁 Michael Miller 说道，“我们认为业务将不应该由于服务器更新而停顿。”

### 实时内核补丁可以让业务免受停机困扰

在过去，在那些需要高度安全的 IT 环境中，许多业务由于例行的停机维护而造成了大量损失。但是现在这一切都将改变，因为 SUSE Linux 企业版实时补丁，可以让企业级 Linux 用户应用内核补丁而不需要重启服务器。

SUSE Linux 企业版实时补丁也对于重要的 SAP 商业应用非常关键，比如那些运行 SAP HANA 的企业。该技术内建于内核之中，可以让 SUSE Linux 用户更新其正在运行的 Linux 内核，而不需要中断服务或由于重启服务器导致 SAP HANA 平台关闭。


开源新闻速递：第一届 LAS  GNOME 大会即将召开

Summary: Enlightenment 发布了 0.20.8 版本

### 头条消息

GNOME 基金会[宣布](https://www.gnome.org/news/2016/05/las-gnome-2016/)即将召开第一届 LAS （Libre Application Summit） GNOME 大会，大会将在 9 月 19 日至 23 日于美国俄勒冈州波特兰市召开 。大会的主要目的是通过加强主要的 GNU/Linux 发行版和 Linux 内核之间的合作来推进 GNU/Linux 应用生态系统的发展。大会面向大小不等的开源应用开发者，包括参与开发各种 FOSS 的公司和个人，以便让他们可以分享他们知识，推进 GNU/Linux 软件项目的发展。

![](/data/attachment/album/201605/19/151505xl0phlj9uus9yu0r.jpg)

### 版本更迭

* Manjaro ARM 16.05 正式发布，完全支持树莓派 2，开发团队正在努力开发支持蓝牙和 WiFi 的树莓派 3 版本。它是基于非官方的 Arch Linux for ARM 的衍生版。这个该项目的第一个稳定版本。
* Linux 4.5.5 和 4.4.11 LTS 内核发布。
* Enlightenment 开发者日 2016 大会刚刚结束， Enlightenment 就[发布](https://www.enlightenment.org/news/e-0.20.8-release)了 0.20.8 版本。这是一个轻量级的漂亮的桌面环境。而备受期待的 0.21 还在努力开发中，当前还在 Beta 阶段。
![](/data/attachment/album/201605/19/151537hgrjngxu9ttnjt33.jpg)
* pfSense BSD 防火墙 2.3.1 [发布](https://blog.pfsense.org/?p=2050)，注意，这不是之前发布的 pfSense 2.3 Update 1（即 2.3-1），而是一个完整的维护版本，带来了超过100个更新。


LFCS 系列第七讲：通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

Summary: 在这篇文章中，我们会介绍如何管理 Linux 系统自启动进程和服务

Configuring a service to start automatically on a specific runlevel and prevent it from starting on all others

配置一个服务在一个指定运行等级下自动运行，同时阻止它在其他运行等级下启动

我觉得这样更容易明白

来自上海的 Internet Explorer 11.0|Windows 7 用户

在这篇文章中，我们会介绍如何管理 Linux 系统自启动进程和服务

几个月前， Linux 基金会宣布 LFCS (Linux 基金会认证系统管理员) 认证诞生了，这个令人兴奋的新计划定位于让来自全球各地的初级到中级的 Linux 系统管理员得到认证。这其中包括维护已经在运行的系统和服务的能力、第一手的问题查找和分析能力、以及决定何时向开发团队提交问题的能力。

![Linux Foundation Certified Sysadmin – Part 7](/data/attachment/album/201605/19/220703znvejpnejn93vp67.png)

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

下面的视频简要介绍了 Linux 基金会认证计划。

本讲是系列教程中的第七讲，在这篇文章中，我们会介绍如何管理 Linux 系统自启动进程和服务，这是 LFCS 认证考试要求的一部分。

### 管理 Linux 自启动进程

Linux 系统的启动程序包括多个阶段，每个阶段由一个不同的图示块表示。下面的图示简要总结了启动过程以及所有包括的主要组件。

![Linux Boot Process](/data/attachment/album/201605/19/220704vq89jz89hi79mqm1.png)

*Linux 启动过程*

当你按下你机器上的电源键时，存储在主板 EEPROM 芯片中的固件初始化 POST(通电自检) 检查系统硬件资源的状态。POST 结束后，固件会搜索并加载位于第一块可用磁盘上的 MBR 或 EFI 分区的第一阶段引导程序，并把控制权交给引导程序。

#### MBR 方式

MBR 是位于 BIOS 设置中标记为可启动磁盘上的第一个扇区，大小是 512 个字节。

* 前面 446 个字节：包括可执行代码和错误信息文本的引导程序
* 接下来的 64 个字节：四个分区（主分区或扩展分区）中每个分区一条记录的分区表。其中，每条记录标示了每个一个分区的状态（是否活跃）、大小以及开始和结束扇区。
* 最后 2 个字节： MBR 有效性检查的魔法数。

下面的命令对 MBR 进行备份（在本例中，/dev/sda 是第一块硬盘）。结果文件 mbr.bkp 在分区表被破坏、例如系统不可引导时能排上用场。

当然，为了后面需要的时候能使用它，我们需要把它保存到别的地方（例如一个 USB 设备）。该文件能帮助我们重新恢复 MBR，这只在我们操作过程中没有改变硬盘驱动布局时才有效。

**备份 MBR**

```
# dd if=/dev/sda of=mbr.bkp bs=512 count=1

```

![Backup MBR in Linux](/data/attachment/album/201605/19/220706dqzkk0hg99p90zhg.png)

*在 Linux 中备份 MBR*

**恢复 MBR**

```
# dd if=mbr.bkp of=/dev/sda bs=512 count=1

```

![Restore MBR in Linux](/data/attachment/album/201605/19/220708qh26the8c820e270.png)

*在 Linux 中恢复 MBR*

#### EFI/UEFI 方式

对于使用 EFI/UEFI 方式的系统， UEFI 固件读取它的设置来决定从哪里启动哪个 UEFI 应用。（例如， EFI 分区位于哪块磁盘或分区。

接下来，加载并运行第二阶段引导程序(又名引导管理器)。GRUB[GRand Unified Boot] 是 Linux 中最常使用的引导管理器。今天大部分使用的系统中都能找到它两个中的其中一个版本。

* GRUB 有效配置文件： /boot/grub/menu.lst（旧发行版， EFI/UEFI 固件不支持）。
* GRUB2 配置文件： 通常是 /etc/default/grub。

尽管 LFCS 考试目标没有明确要求了解 GRUB 内部知识，但如果你足够大胆并且不怕把你的系统搞乱（为了以防万一，你可以先在虚拟机上进行尝试）你可以运行：

```
# update-grub

```

为了使更改生效，你需要以 root 用户修改 GRUB 的配置。

首先， GRUB 加载默认的内核以及 initrd 或 initramfs 镜像。补充一句，initrd 或者 initramfs 帮助完成硬件检测、内核模块加载、以及发现挂载根目录文件系统需要的设备。

一旦真正的根目录文件系统启动，为了显示用户界面，内核就会执行系统和服务管理器（init 或 systemd，进程号 PID 一般为 1）开始普通用户态的引导程序。

init 和 systemd 都是管理其它守护进程的守护进程（后台进程），它们总是最先启动（系统引导时），最后结束（系统关闭时）。

![Systemd and Init](/data/attachment/album/201605/19/220710s7dekedg5y5odeys.png)

*Systemd 和 Init*

### 自启动服务(SysVinit)

Linux 中运行等级通过控制运行哪些服务来以不同方式使用系统。换句话说，运行等级控制着当前执行状态下可以完成什么任务（以及什么不能完成）。

传统上，这个启动过程是基于起源于 System V Unix 的形式，通过执行脚本启动或者停止服务从而使机器进入指定的运行等级(换句话说，是一个不同的系统运行模式)。

在每个运行等级中，独立服务可以设置为运行、或者在运行时关闭。一些主流发行版的最新版本中，已经移除了标准的 System V，而用一个称为 systemd（表示系统守护进程）的新服务和系统管理器代替，但为了兼容性，通常也支持 sysv 命令。这意味着你可以在基于 systemd 的发行版中运行大部分有名的 sysv 初始化工具。

* 推荐阅读： [Linux 为什么用 ‘systemd’ 代替 ‘init’](http://www.tecmint.com/systemd-replaces-init-in-linux/)

除了启动系统进程，init 还会查看 /etc/inittab 来决定进入哪个运行等级。

| Runlevel | Description |
| --- | --- |
| 0 | 停止系统。运行等级 0 是一个用于快速关闭系统的特殊过渡状态。 |
| 1 | 别名为 s 或 S，这个运行等级有时候也称为维护模式。在这个运行等级启动的服务由于发行版不同而不同。通常用于正常系统操作损坏时低级别的系统维护。 |
| 2 | 多用户。在 Debian 系统及其衍生版中，这是默认的运行等级，还包括了一个图形化登录（如果有的话）。在基于红帽的系统中，这是没有网络的多用户模式。 |
| 3 | 在基于红帽的系统中，这是默认的多用户模式，运行除了图形化环境以外的所有东西。基于 Debian 的系统中通常不会使用这个运行等级以及等级 4 和 5。 |
| 4 | 通常默认情况下不使用，可用于自定制。 |
| 5 | 基于红帽的系统中，支持 GUI 登录的完全多用户模式。这个运行等级和等级 3 类似，但是有可用的 GUI 登录。 |
| 6 | 重启系统。 |

要在运行等级之间切换，我们只需要使用 init 命令更改运行等级：init N（其中 N 是上面列出的一个运行等级）。 请注意这并不是运行中的系统切换运行等级的推荐方式，因为它不会给已经登录的用户发送警告（因而导致他们丢失工作以及进程异常终结）。

相反，应该用 shutdown 命令重启系统（它首先发送警告信息给所有已经登录的用户，并锁住任何新的登录；然后再给 init 发送信号切换运行等级）但是，首先要在 /etc/inittab 文件中设置好默认的运行等级（系统引导到的等级）。

因为这个原因，按照下面的步骤切当地切换运行等级。以 root 用户在 /etc/inittab 中查找下面的行。

```
id:2:initdefault:

```

并用你喜欢的文本编辑器，例如 vim（本系列的 [LFCS 系列第二讲：如何安装和使用纯文本编辑器 vi/vim](/article-7165-1.html)），更改数字 2 为想要的运行等级。

然后，以 root 用户执行

```
# shutdown -r now

```

最后一个命令会重启系统，并使它在下一次引导时进入指定的运行等级，并会执行保存在 /etc/rc[runlevel].d 目录中的脚本以决定应该启动什么服务、不应该启动什么服务。例如，在下面的系统中运行等级 2。

![Change Runlevels in Linux](/data/attachment/album/201605/19/220717k99keazaefmaa9sr.jpg)

*在 Linux 中更改运行等级*

#### 使用 chkconfig 管理服务

为了在启动时启动或者停用系统服务，我们可以在 CentOS / openSUSE 中使用 [chkconfig 命令](http://www.tecmint.com/chkconfig-command-examples/)，在 Debian 及其衍生版中使用 sysv-rc-conf 命令。这个工具还能告诉我们对于一个指定的运行等级预先配置的状态是什么。

* 推荐阅读： [如何在 Linux 中停止和停用不想要的服务](http://www.tecmint.com/remove-unwanted-services-from-linux/)

列出某个服务的运行等级配置。

```
# chkconfig --list [service name]
# chkconfig --list postfix
# chkconfig --list mysqld

```

![Listing Runlevel Configuration](/data/attachment/album/201605/19/220718e0ziipbi0p08vwoi.png)

*列出运行等级配置*

从上图中我们可以看出，当系统进入运行等级 2 到 5 的时候就会启动 postfix，而默认情况下运行等级 2 到 4 时会运行 mysqld。现在假设我们并不希望如此。

例如，我们希望运行等级为 5 时也启动 mysqld，运行等级为 4 或 5 时关闭 postfix。下面分别针对两种情况进行设置（以 root 用户执行以下命令）。

**为特定运行等级启用服务**

```
# chkconfig --level [level(s)] service on
# chkconfig --level 5 mysqld on

```

**为特定运行等级停用服务**

```
# chkconfig --level [level(s)] service off
# chkconfig --level 45 postfix off

```

![在 Linux 中启用/停用服务Enable Disable Services in Linux](/data/attachment/album/201605/19/220720yi9b3yfi8mkq8sy8.png)

*启用/停用服务*

我们在基于 Debian 的系统中使用 sysv-rc-conf 完成类似任务。

#### 使用 sysv-rc-conf 管理服务

配置服务自动启动时进入指定运行等级，同时禁止启动时进入其它运行等级。

1. 我们可以用下面的命令查看启动 mdadm 时的运行等级。

```
# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

```

![查看运行中服务的运行等级Check Runlevel of Service Running](/data/attachment/album/201605/19/220723kkwn3antwgwgihph.png)

*查看运行中服务的运行等级*
2. 我们使用 sysv-rc-conf 设置防止 mdadm 在运行等级2 之外的其它等级启动。只需根据需要（你可以使用上下左右按键）选中或取消选中（通过空格键）。

```
# sysv-rc-conf

```

![Sysv 运行等级配置SysV Runlevel Config](/data/attachment/album/201605/19/220727xenennd8x0nom838.png)

*Sysv 运行等级配置*

然后输入 q 退出。
3. 重启系统并从步骤 1 开始再操作一遍。

```
# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

```

![验证服务运行等级Verify Service Runlevel](/data/attachment/album/201605/19/220731voz9eughblhu3hhz.png)

*验证服务运行等级*

从上图中我们可以看出 mdadm 配置为只在运行等级 2 上启动。

### 那关于 systemd 呢？

systemd 是另外一个被多种主流 Linux 发行版采用的服务和系统管理器。它的目标是允许系统启动时多个任务尽可能并行（而 sysvinit 并非如此，sysvinit 一般比较慢，因为它每次只启动一个进程，而且会检查彼此之间是否有依赖，在启动其它服务之前还要等待守护进程启动），充当运行中系统动态资源管理的角色。

因此，服务只在需要的时候启动，而不是系统启动时毫无缘由地启动（为了防止消耗系统资源）。

要查看你系统中运行的原生 systemd 服务和 Sysv 服务，可以用以下的命令。

```
# systemctl

```

![在 Linux 中查看运行中的进程Check All Running Processes in Linux](/data/attachment/album/201605/19/220738ljodjop7t3d39924.png)

*查看运行中的进程*

LOAD 一列显示了单元（UNIT 列，显示服务或者由 systemd 维护的其它进程）是否正确加载，ACTIVE 和 SUB 列则显示了该单元当前的状态。

**显示服务当前状态的信息**

当 ACTIVE 列显示某个单元状态并非活跃时，我们可以使用以下命令查看具体原因。

```
# systemctl status [unit]

```

例如，上图中 media-samba.mount 处于失败状态。我们可以运行：

```
# systemctl status media-samba.mount

```

![查看 Linux 服务状态Check Linux Service Status](/data/attachment/album/201605/19/220741u2qzr2dgp1y012pp.png)

*查看服务状态*

我们可以看到 media-samba.mount 失败的原因是 host dev1 上的挂载进程无法找到 //192.168.0.10/gacanepa 上的共享网络。

### 启动或停止服务

一旦 //192.168.0.10/gacanepa 上的共享网络可用，我们可以再来尝试启动、停止以及重启 media-samba.mount 单元。执行每次操作之后，我们都执行 systemctl stats media-samba.mout 来查看它的状态。

```
# systemctl start media-samba.mount
# systemctl status media-samba.mount
# systemctl stop media-samba.mount
# systemctl restart media-samba.mount
# systemctl status media-samba.mount

```

![启动停止服务](/data/attachment/album/201605/19/220752nolmn6lblbz2l96o.jpg)

*启动停止服务*

**启用或停用某服务随系统启动**

使用 systemd 你可以在系统启动时启用或停用某服务

```
# systemctl enable [service]        # 启用服务
# systemctl disable [service]       # 阻止服务随系统启动

```

启用或停用某服务随系统启动包括在 /etc/systemd/system/multi-user.target.wants 目录添加或者删除符号链接。

![启用或停用服务](/data/attachment/album/201605/19/220803gv0y99jy0w8j05lw.jpg)

*启用或停用服务*

你也可以用下面的命令查看某个服务的当前状态（启用或者停用）。

```
# systemctl is-enabled [service]

```

例如，

```
# systemctl is-enabled postfix.service

```

另外，你可以用下面的命令重启或者关闭系统。

```
# systemctl reboot
# systemctl shutdown

```

### Upstart

基于事件的 Upstart 是 /sbin/init 守护进程的替代品，它仅为在需要那些服务的时候启动服务而生，（或者当它们在运行时管理它们），以及处理发生的实践，因此 Upstart 优于基于依赖的 sysvinit 系统。

一开始它是为 Ubuntu 发行版开发的，但在红帽企业版 Linux 6.0 中得到使用。尽管希望它能在所有 Linux 发行版中替代 sysvinit，但它已经被 systemd 超越。2014 年 2 月 14 日，Mark Shuttleworth（Canonical Ltd. 创建者）发布声明之后的 Ubuntu 发行版采用 systemd 作为默认初始化守护进程。

由于 Sysv 启动脚本已经流行很长时间了，很多软件包中都包括了 Sysv 启动脚本。为了兼容这些软件， Upstart 提供了兼容模式：它可以运行保存在常用位置（/etc/rc.d/rc?.d, /etc/init.d/rc?.d, /etc/rc?.d或其它类似的位置）的Sysv 启动脚本。因此，如果我们安装了一个还没有 Upstart 配置脚本的软件，仍然可以用原来的方式启动它。

另外，如果我们还安装了类似 [chkconfig](http://www.tecmint.com/chkconfig-command-examples/) 的工具，你还可以和在基于 sysvinit 的系统中一样用它们管理基于 Sysv 的服务。

Upstart 脚本除了支持 Sysv 启动脚本，还支持基于多种方式启动或者停用服务；例如， Upstart 可以在一个特定硬件设备连接上的时候启动一个服务。

使用 Upstart以及它原生脚本的系统替换了 /etc/inittab 文件和 /etc/init 目录下和运行等级相关的以 .conf 作为后缀的 Sysv 启动脚本目录。

这些 \*.conf 脚本（也称为任务定义）通常包括以下几部分：

* 进程描述
* 进程的运行等级或者应该触发它们的事件
* 应该停止进程的运行等级或者触发停止进程的事件
* 选项
* 启动进程的命令

例如，

```
# My test service - Upstart script demo description "Here goes the description of 'My test service'" author "Dave Null <dave.null@example.com>"
# Stanzas

#
# Stanzas define when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
# When to start the service
start on runlevel [2345]
# When to stop the service
stop on runlevel [016]
# Automatically restart process in case of crash
respawn
# Specify working directory
chdir /home/dave/myfiles
# Specify the process/command (add arguments if needed) to run
exec bash backup.sh arg1 arg2

```

要使更改生效，你要让 upstart 重新加载它的配置文件。

```
# initctl reload-configuration

```

然后用下面的命令启动你的任务。

```
$ sudo start yourjobname

```

其中 yourjobname 是之前 yourjobname.conf 脚本中添加的任务名称。

关于 Upstart 更完整和详细的介绍可以参考该项目网站的 “[Cookbook](http://upstart.ubuntu.com/cookbook/)” 栏目。

### 总结

了解 Linux 启动进程对于你进行错误处理、调整计算机系统以及根据需要运行服务非常有用。

在这篇文章中，我们分析了你按下电源键启动机器的一刻到你看到完整的可操作用户界面这段时间发生了什么。我希望你能像我一样把它们放在一起阅读。欢迎在下面留下你的评论或者疑问。我们总是期待听到读者的回复。

---

via: <http://www.tecmint.com/linux-boot-process-and-manage-services/>

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

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


震惊：2/3 被黑的网站隐藏着后门

Summary: 从他们发布的网站被黑报告 2016 Q1 版中可以看到，全部取样的 11485 个网站中，有 4900 个网站发现了后门。

有后门所以更容易被黑啊

网络安全公司 Sucuri 的安全专家说，他们在调查中发现有 68% 的被黑网站存在着隐藏的<ruby> 后门 <rp>  （ </rp> <rt>  backdoor </rt> <rp>  ） </rp></ruby>脚本。这些后门脚本会给入侵者提供再次进入秘密通道，即便系统管理员改变了口令或应用了安全补丁，只要没有完全的清理整个系统，后门就会依旧存在。

从他们发布的[网站被黑报告](https://sucuri.net/website-security/Reports/Sucuri-Website-Hacked-Report-2016Q1.pdf) 2016 Q1 版中可以看到，全部取样的 11485 个网站中，有 4900 个网站发现了后门。

在这些被入侵的网站中，后门是最严重的问题，其次是恶意软件（通过浏览器端的代码进行<ruby> 挂马攻击 <rp>  （ </rp> <rt>  drive-by download </rt> <rp>  ） </rp></ruby>），占比 60%。

第三名是 <ruby> SEO 垃圾 <rp>  （ </rp> <rt>  SEO spam </rt> <rp>  ） </rp></ruby>，大约 32% 的网站存在该问题。SEO 垃圾通常会秘密嵌入到页面中，浏览者看不见，而对于搜索引擎的爬虫可见。

![](/data/attachment/album/201605/21/070406kzoo99j43o0c773g.png)

### 挂马攻击和 SEO 垃圾也很流行

SEO 垃圾可以帮助恶意攻击者提升其网站的搜索引擎排名，而对被感染的网站来说，则会受到搜索引擎的惩罚和排名下降。

这些受益的恶意攻击者通常会将 SEO 垃圾放到感染网站的源代码中、数据库中，或者通过 .htaccess 重定向实现。多数情况下，SEO 垃圾被用在药品方面，也有给成人内容或在线游戏提供的。

与去年相比，后门脚本比例略有降低，SEO 垃圾有小幅提升，而恶意软件感染则相较前些年增幅最大，从 2014 年的 41% 增加到了 2016 年的 60%！作为对比，后门脚本则从2014年的 59% 到 2015 年的 73%，现在回落到 68%；SEO 垃圾从 20% 到 28%，到了2016 年就增加到了 28%。

![Website infection "popularity" for Q1 2016](/data/attachment/album/201605/21/070407vehpv661wbzmu1ey.jpg "Website infection \"popularity\" for Q1 2016")


开源新闻速递：Fedora 年度大会 Flock 2016 将于 8 月召开

Summary: Pinguy OS 即将关闭

### 头条消息

一年一度的 Fedora Linux 大会 Flock 2016 [即将](https://fedoramagazine.org/flock-2016-schedule-now/)在 8 月 2 日 - 5 日在波兰召开。本次大会主要是彼此分享和讨论 Fedora 25 的开发。如果你希望参加该会议，现在[预注册已经开放](http://flocktofedora.org/)了。

![](/data/attachment/album/201605/21/144802mi6x6i24nv47vzp4.jpg)

### 版本更迭

* Webconverger [发布](https://webconverger.org/blog/2016/Webconverger_35_release/)了 35.1，这次更新带有 Mozilla Firefox 46.0 和 Linux 4.5 内核。有很多基于 Linux 的发行版号称自己是最棒的 Web <ruby> 信息亭 <rp>  （ </rp> <rt>  kiosk </rt> <rp>  ） </rp></ruby>平台（常用于网吧），但是 Webconverger 是这些之中最流行的一个，它是基于 Debian 的一个发行版。
* Linux [3.14.70](http://lkml.iu.edu/hypermail/linux/kernel/1605.2/02167.html) 内核更新。
* 漂亮大方的 Linux 发行版 [Pinguy OS](http://pinguyos.com/) 即将关闭，其维护者 Antoni Norman 做了一个艰难的决定，大概是由于经济原因，他[说](http://pinguyos.com/2016/05/thinking-about-killing-off-pinguy-os/)，“相比我的收获，这个项目耗费了我太多，这是一个无底洞。”
![](/data/attachment/album/201605/21/144803huqxwwp1a2210u5y.jpg)
* Git 2.8.3 发布，带来了包括子模块并行获取等超过20处的改进和修复。
* Cinnamon 3.0.3 发布，它将是在即将发布的 Mint 18 "Sarah" 的默认桌面环境。


使用 arch-ppa 创建你自己的 Arch Linux 软件库

Summary: 我们在 Internet 上发现了一个叫做 arch-ppa 的工具，它刚刚发布到 GitHub 上才几周，它作者 Ryan McGuire 说它可以帮助你创建和维护一个安全可靠的个人 Arch Linux 软件仓库。

是不是觉得 AUR 软件库维护太复杂？那么我们来给你介绍一个新工具，可以让你很方便的维护一个你自己的 Arch Linux 软件仓库。

我们在互联网上发现了一个叫做 arch-ppa 的工具，它刚刚发布到 GitHub 上才几周，它作者 Ryan McGuire 说这个工具可以帮助你创建和维护一个安全可靠的个人 Arch Linux 软件仓库。

你可以把 arch-ppa 想象成一个 Arch Linux 下的 PPA（<ruby> 个人软件包存档 <rp>  （ </rp> <rt>  Personal Package Archive </rt> <rp>  ） </rp></ruby>），就像 Ubuntu Linux 中常用的各种 PPA 一样。它存放在你自己的本地设备上，也可以放到远程服务器上以便你可以把你的软件包分发给成千上万的 Arch Linux 用户们。

![](/data/attachment/album/201605/22/093813qd1gs14oad4dgz0g.jpg)

### 因为 AUR 不安全，才有了 arch-ppa

arch-ppa 的开发者 Ryan McGuire 说他创建这个工具可以让 Arch Linux 的个人软件包生态系统更加的安全可靠，现在官方支持的 AUR（<ruby> <a href="https://aur.archlinux.org/">  Arch 用户软件库 </a> <rp>  （ </rp> <rt>  Arch User Repository </rt></ruby>）可以让任何人懂得 AUR 的人都可以上载新软件和维护它。

现在的情况是，如果你从 AUR 安装一个由你我维护这样的用户所维护的软件包，会触发一个大大的警告，是否接受该警告并安装取决于你自己。幸运的是， AUR 是由一群负责任的 Arch Linux 用户所维护的，他们一旦发现了恶意软件就会马上删除。

“这就是我为什么不喜欢类似 yaourt 或 pacaur 这样的 AUR 辅助程序。用这些辅助程序来使用 AUR 需要你经常查看它下载的 PKGBUILD 文件，才能让你可以确保不会安装了类似病毒或木马这样的东西以及从某个不知道来源的 URL 下载东西。” Ryan McGuire 说。

而这就是 arch-ppa 可以发挥用途的地方，AUR 软件包维护者希望开发一个好用的工具来帮助人工创建软件仓库，以便他们可以在一个安全可靠的环境中分发 Arch Linux 软件包。但是，要求就是你需要有一台服务器。

AUR 在 Arch Linux 用户群体里已经使用了很久，如果你想建立一个你自己的 Arch Linux 软件包归档，那么你应该试试 arch-ppa。具体情况请进一步访问该项目的 [GitHub 主页](https://github.com/EnigmaCurry/arch-ppa)。


使用 SystemBack 备份/还原你的 Ubuntu/Linux Mint

Summary: 简单的系统备份还原工具 Systemback 可以让你很容易地创建系统备份以及用户配置文件。一旦遇到问题，你可以简单地恢复到系统先前的状态。它还有一些额外的特征包括系统复制，系统安装以及Live系统创建。

只支持  Ubuntu 系列嘛。。。。

对于任何一款允许用户还原电脑到之前状态（包括文件系统，安装的应用，以及系统设置）的操作系统来说，系统还原功能都是必备功能，它可以恢复系统故障以及其他的问题。

有的时候安装一个程序或者驱动可能让你的系统黑屏。系统还原则可以让你电脑里面的系统文件（LCTT 译注：是系统文件，并非普通文件，详情请看**注意**部分）和程序恢复到之前工作正常时候的状态，进而让你远离那让人头痛的排障过程了，而且它也不会影响你的文件，照片或者其他数据。

简单的系统备份还原工具 [Systemback](https://launchpad.net/systemback) 可以让你很容易地创建系统备份以及用户配置文件。一旦遇到问题，你可以简单地恢复到系统先前的状态。它还有一些额外的特征包括系统复制，系统安装以及Live系统创建。

**截图**

![](/data/attachment/album/201605/23/111533iedieeih18k6e62a.jpeg)

![](/data/attachment/album/201605/23/111546u9clqqn5103qe3q3.jpeg)

![](/data/attachment/album/201605/23/111600g9fne36knjh9aurc.jpeg)

![](/data/attachment/album/201605/23/111631b1p0fsk5ndsd1bks.jpeg)

**注意**:使用系统还原不会还原你自己的文件、音乐、电子邮件或者其他任何类型的私人文件。对不同用户来讲，这既是优点又是缺点。坏消息是它不会还原你意外删除的文件，不过你可以通过一个文件恢复程序来解决这个问题。如果你的计算机没有创建还原点，那么系统恢复就无法奏效，所以这个工具就无法帮助你（还原系统）。如果你尝试恢复这样的问题，你将需要移步到另外的步骤来进行故障排除。

>
> 适用于 Ubuntu 15.10 Wily/16.04/15.04 Vivid/14.04 Trusty/Linux Mint 14.x/其他Ubuntu衍生版，打开终端，将下面这些命令复制过去：
>
>
>

终端命令：

```
sudo add-apt-repository ppa:nemh/systemback
sudo apt-get update
sudo apt-get install systemback
```

大功告成。

---

via: <http://www.noobslab.com/2015/11/backup-system-restore-point-your.html>

译者：[DongShuaike](https://github.com/DongShuaike) 校对：[Caroline](https://github.com/carolinewuyan)

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


Ubuntu 的 Mir 显示服务器将支持 Vulkan

很多人可能已经知道，Canonical 正在积极开发它的 Unity 用户界面，并将其用在 Ubuntu 桌面上。

Unity 8 是流行的 GNU/Linux 操作系统 Ubuntu 的下一代 Unity 桌面环境，Canonical 创始人 Mark Shuttleworth 之前说它马上就可以用了，并在即将到来的 Ubuntu 16.10 中会默认安装。

默认安装并不代表着它是默认桌面，Unity 7 仍将是 Ubuntu 16.10 的主要桌面环境。Ubuntu 16.10 将在今年的 10 月 20 日揭晓。当然，新的 Unity 8 环境在该版本发布后就可以直接切换使用了，不需要用户自己额外安装软件。

Canonical 已经在它的 Ubuntu 智能手机和平板上使用 Unity 8 用户界面获得了巨大成功，Unity 8 是由 Canonical 开发的 Mir 显示服务器所支撑的。现在这些新技术正在移植到 Ubuntu 桌面上，新功能请求也提交到了 Launchpad 上了。

### Mir 0.24 中完全支撑 Vulkan

![](/data/attachment/album/201605/23/164241pzpa8xh4fpaxz393.jpg)

Mir 当前版本是 0.22.1，但是据 Emanuele Antonio Faraone 在 2016 年 1 月[提交的功能请求](https://bugs.launchpad.net/mir/+bug/1539896)，希望 Ubuntu 开发人员能够在 Mir 显示服务器和 Ubuntu 的系统镜像中完全支持 Vulkan 库的这一想法，已经得到了 Canonical 的首肯，看起来就快成为了现实。

>
> Vulkan 是一个跨平台的 2D 和 3D 绘图应用程序接口（API），最早由 Khronos Group 在2015年游戏开发者大会（GDC）上发表。就像 OpenGL，Vulkan 针对实时 3D 程序（如电子游戏）设计，Vulkan 并计划提供高性能和低 CPU 管理负担（overhead），这也是 Direct3D 12 和 AMD 的 Mantle 的目标。Vulkan 兼容 Mantle 的一个分支，并使用了 Mantle 的一些组件。
>
>
>

“过去几周已经初步集成了 Vulkan（Mesa），但是使用了一些私有头文件，” Mir 显示服务器项目负责人 Cemil Azizoglu 说，“还需要发布一些新的的 Mir 接口，当它们发布到开发主干上后，然后就可以准备放到正式版本了（0.24）。”

在写作此文时，Canonical 已经将完全支持 Vulkan API 作为当前正在开发的 [Mir 0.24](https://launchpad.net/mir/0.24) 的里程碑目标了。不过从上面的引述可以看到，Mir 中的 Vulkan 支持还需要不少开发工作。


开源新闻速递：即将发布的 GNOME 3.22 的各个应用逐步就绪

Summary:
Mir 0.24 中将完全支持 Vulkan API；
systemd-resolved 默认打开 DNSSEC

GNOME 3.20 才刚用上。

话说我怎么看到了欧卡2？

### 头条消息

即将到来的 GNOME 3.22 中，各个主要应用都逐步就绪：比如，“游戏”应用会支持 Atari 2600 和 Atari 7800 游戏；“日历”应用可以使用拖放来移动事件；“控制中心”应用也重新打造了等等。

![](/data/attachment/album/201605/23/172824e6j6p85bcca6cccc.jpg)

Ubuntu 的 Mir 显示服务器将在 0.24 版本中完全支持 Vulkan API，在当前发布的版本 0.22.1 中已经初步支持了。[更多详情](/article-7380-1.html)。

[SeeedStudio](http://www.seeedstudio.com/) 发布了一款树莓派 3 的替代品：<ruby> 狗骨头之绿色无线版 <rp>  （ </rp> <rt>  BeagleBone Green Wireless </rt> <rp>  ） </rp></ruby>，内置 Wi-Fi 和低功耗蓝牙。该产品已经可以预定，零售价 $44.9。

![](/data/attachment/album/201605/23/172824fkrwvrrv5rx5rx3b.jpg)

### 版本更迭

* systemd [发布](https://lists.freedesktop.org/archives/systemd-devel/2016-May/036583.html) 230 版本，这个版本中，systemd 所接管的解析器进程 systemd-resolved 将默认打开 DNSSEC。
* [Q4OS 1.4.10](http://q4os.org/blog.html#news160523) 发布。它是一款基于 Debian 的发行版，采用 Trinity 桌面环境（TDE），新版本引入了“Bourbon”开始菜单，这是一个双面板的、可高度定制的开始菜单系统。
![](/data/attachment/album/201605/23/172825jpem27zrr125b1il.jpg)
* [Mozilla Firefox 46.0.1](https://lists.ubuntu.com/archives/ubuntu-security-announce/2016-May/003437.html) 已经放到了 Ubuntu 的软件库中，然而 Mozilla Thunderbird 的最新稳定版 45 并没有一同出现，目前 Ubuntu 软件库中仍然是很老的 [Mozilla Thunderbird 38.8.0](https://lists.ubuntu.com/archives/ubuntu-security-announce/2016-May/003436.html)，至于原因则不得而知。当然，你可以自己手工升级使用最新版本：`sudo apt-add-repository ppa:mozillateam/thunderbird-next`，`sudo apt-get update && sudo apt-get dist-upgrade`。
* Ubuntu 16.04 LTS 中的 KDE 用的是 KDE Plasma 5.5 和 KDE Applications 15.12，然而最新的 KDE 版本已经是 5.6.4 了。不过， Kubuntu 和 KDE 开发者 Marcin Sągol [宣布](https://plus.google.com/110954078302330754910/posts/XyzeaMysWFB?iem=4&gpawv=1&hl=en-US) Kubuntu 用户可以不用等待了，可以使用如下命令来升级到最新的 KDE 5.6.4 ：`sudo apt-add-repository ppa:kubuntu-ppa/backports` ，
`sudo apt update && sudo apt -y full-upgrade` 。


systemd 230 发布，其 DNS 解析器默认支持 DNSSEC

好吧。DNS 解析器也被吃掉了。下一个是谁？

这是客户端集成这个选项了吧。不用再单独开 DNSSEC

Linux 由 kernel 和 systemd 组成

GNU/Linux 以后该叫 GNU/systemd/Linux 了

应该说以后的发行版就是有kernel和systemd组成。

可能是整个网络组件

不不，它总不能将 binutils 和上层的应用都取代了。。。

Zbigniew Jędrzejewski-Szmek [宣布](https://lists.freedesktop.org/archives/systemd-devel/2016-May/036583.html) systemd 发布了 230 版本，这是一个主要更新版本。上个版本 systemd 229 发布于大约三个月前。

![](/data/attachment/album/201605/24/082657frrmfhqtc9y0r2ua.jpg)

本次更新主要的关注点是其 DNS 解析服务 systemd-resolved，现在它可以使用 DNSSEC 来校验解析结果了。正如你所知道的，systemd 的“魔爪”已经伸向了 GNU/Linux 中除了内核以外的各个基础部分，比如 DNS 解析器就是一个例子，它用于为系统内的 DNS 解析请求提供服务。在本次更新中，当使用“allow-downgrade”模式时，它会默认打开 DNSSEC 扩展。DNSSEC 是一个用于校验 DNS 解析数据是否安全的扩展，对于防范 DNS 欺诈有重要作用，只是到目前为止还有不少 DNS 服务器尚未支持，所以，你也可以在编译时通过增加“--with-default-dnssec=no”编译参数来关闭它。

“我们建议下游维护人员在开发期间打开该功能，并将发现的问题报告给上游，”Zbigniew Jędrzejewski-Szmek 说，“我们非常希望得到 DNSSEC 校验器的反馈，不管是哪种反馈。不过要注意，DNSSEC 支持可能在下游发行版的稳定版本中关闭，因为它可能会导致和一些 DNS 服务器及网络的不兼容。”

当然，systemd-resolved 并不是 systemd 初始化系统中唯一得到改进的部件，其它的部件也有不少改变。

systemd 230 不久之后将会进入到各个以 systemd 作为默认的初始化系统的 Linux 发行版之中。


你所不知道的 EMC 开源的那些事

这不是跟Oracle一样属于邪恶轴心的一部分么。

很多人都知道 EMC 这个公司，知道它是一家全球顶尖的存储产品供应商，但是很多人却不知道 EMC 也是一位开源先锋。

前一段时间去参加 [EMC World 2016大会](http://www.emcworld.com/)，在大会上的见闻了种种新技术，也第一时间听到了不少最新披露的消息。这期间，令笔者非常吃惊的是，EMC 在开源方面的步伐之大，远在很多同侪之上。

![](/data/attachment/album/201605/24/092459dkc9dh8wcvn849fp.jpg)

*EMC {code} 在 EMC World 2016 上*

### 对 EMC 的印象

原本印象中，EMC 是一个以硬件和专有软件为主的厂商，在开源方面不会有太多的积极性，而且存储方面的专有软件也未必适合开源。

EMC 是一家已经成立了30多年的老牌 IT 公司，也是全球第六大的企业软件厂商。以过去的经验来看，这种类型的公司通常在采用新技术方面和公司战略方面会比较稳健，但是近些年随着 EMC 公司在开源战略方面的部署，其不仅仅在原本的存储市场、企业软件市场方面继续着保持领导地位，也逐渐将其影响力带到了开源领域。

在听了一场由 [EMC {code}](http://emccode.com/)的 Jonas rosland 和 Stephanie Carlson 做的演讲之后，笔者发现 EMC 已经紧密的融入了整个开源生态方面，不但与包括 Linux 基金会、OpenStack 基金会、GitHub 等在内的各个开源社区形成了紧密的合作，而且在组建自己的开源社区 EMC {code} 方面已经做出了长足的发展。

### EMC 在开源方面的工作

![](/data/attachment/album/201605/24/092543kypma8zyz7y69x8e.png)

*EMC {code} 开源社区*

EMC 的开源社区，与他们开源的各种项目奇奇怪怪的名字相比，起了一个不算出奇的名字 **{code}**。这个名字代表着一句他们的开源战略：**COMMUNITY ONRAMP for DEVELOPER ENABLEMENT**，这句愿景似的标语如果用中文来描述，可以解释为：“让开发者进入高速通道的社区之路”。

EMC {code} 建立两年来，目前已经发布了多达48 个开源项目——哦不， 49 个了，就在写作这篇随笔的时间里又增加了一个。仅在 2015年这一年，就向社区贡献了超过35万行的代码。其中一些开源项目原本能为 EMC 带来大量的商业营收，比如 CoprHD、RackHD 等，因此在开源后得到了社区的高度关注和积极参与。

![](/data/attachment/album/201605/24/092737zyljycdgddgyylxl.jpg)

*COMMUNITY ONRAMP for DEVELOPER ENABLEMENT*

让我们来看来 EMC 在开源方面都做了哪些举措：

#### RackHD

![](/data/attachment/album/201605/24/092827bgcxnw9bqzd4dqn8.png)

*RackHD*

去年底的时候，EMC 公司兑现了其为开源社区带来重要新贡献的承诺，以 Apache 开源协议发布了 RackHD™ (读作Rack ‘H’ ‘D’)项目。这是一个与平台无关的技术栈，旨在解决超大规模环境下管理和组织协调服务器与网络资源这一行业性挑战。

现代化的数据中心是一个多供应商的存储、网络和服务器的混合体，种类不断增加的商品化硬件被用到各种超大规模场景。对数据中心工程师来说，在大量设备上安装低层级的操作系统、更新固件和 BIOS，已经成为一项复杂低效的人工任务，在超大规模环境下，难度和成本以数量级增加。 **RackHD 的创建旨在囊括各种数据中心硬件的自动化，简化这些基础任务。**

开发人员可使用 RackHD API 作为更大的组织协调系统的一个组件，或者创建一个用户界面管理硬件服务，无需考虑底层硬件是否就绪。其目标是帮助各个组织机构加速现代化应用的部署。而这些应用依赖于大量的商品化服务器和异构基础设施。

目前，RackHD 支持各种基于 Intel® 处理器的数据中心服务器，以及交换机的发现和监控。

详细功能列表请访问 GitHub 上的 RackHD 项目地址： <https://github.com/RackHD> 。

#### REX-Ray

![](/data/attachment/album/201605/24/092957vag1voq14n6y1oqo.png)

*REX-Ray*

虽然 EMC 公司旗下已经有了虚拟化领域的领军的 VMWare 公司，但是在 Docker 兴起之后，EMC 还是积极地参与了容器领域的发展，并利用其在存储领域的强大的技术优势，将 Docker 技术融入到其 XtremIO 和 ScaleIO 产品中，利用简单的 Docker 存储容器实现了共享存储。

REX-Ray 是一个存储编排引擎，**它为Docker、Mesos及其他容器运行环境提供了持久化存储访问**。其设计旨在囊括通用存储、虚拟化和云平台，提供高级的存储功能。REX-Ray 为容器提供了与厂商无关的持久存储，为横跨公共存储、虚拟化和云平台实现先进的存储功能提供了一种简便的集中式架构。

REX-Ray率先提供卷挂载功能，允许主机从无响应的主机上重新分配挂载卷。这样可确保应用程序维持对永久存储的访问。

在 EMC World 2016 大会上，EMC 发布了 REX-Ray 的最新版本 0.4，新功能包括了一个可选的 C/S 模型架构，可用于中心化的控制，兼容 Docker 1.11 Volume API，并支持 EMC ScaleIO、XtremIO、Isilon和 Vmax 存储，以及支持 Amazon EC2、Google Compute Engine、OpenStack和Rackspace 等云存储服务。

EMC {code} 技术副总裁 Josh Bernstein 说，“**开源和基于软件的架构变为了我们的客户所急需的。**”

详细功能列表请访问 GitHub 上的 REX-Ray 的项目地址： <https://github.com/emccode/rexray> 。

#### Polly

![](/data/attachment/album/201605/24/093042h8tfp51j2untppff.png)

*Polly*

在本次大会上，EMC {code} 还新发布了 Polly，它提供了一个可以连接到容器调度器的中央存储调度服务。它可以与Cloud Foundry、Docker、Kubernetes,、Mesos 等容器调度服务协同工作，这样，**存储就可以像计算、内存和网络一样访问了**。能够与其他计算资源一起提供存储资源是一个革命性的飞跃，这超越了其他容器计划，而且提升了存储的地位，使其能够像其他资源一样使用。

Polly 顺应“**调度环境中将存储作为‘头等公民’**”这种需求而出现，其意即“<ruby> 多态存储卷调度 <rp>  （ </rp> <rt>  polymorphic volume scheduling </rt> <rp>  ） </rp></ruby>”，是一种面向 Cloud Foundry、Docker、Kubernetes、Mesos 以及其他调度环境的开源框架。

以前，就容器部署而言，容器调度器仅关注计算、内存和网络资源。随着容器内的应用开始需要持久的后端存储，将其作为可调度的资源使用的需求出现了。Polly 充当了这样的角色：**将存储作为一种开放框架集成到多种容器调度解决方案中。**

开源容器生态系统是多种多样的，部署方式也有所不同。**多态解决方案允许代码演变，同时保持原始算法完好无损，因此在将存储集成到支持性生态系统中时，多态解决方案对于实现公共功能和方法是至关重要的。**

详细功能列表请访问 GitHub 上的 Polly 的项目地址： <https://github.com/emccode/polly> 。

#### CoprHD

![](/data/attachment/album/201605/24/093125e1kmz7z40rjjk0h1.png)

*CoprHD*

CoprHD 是开源的存储自动化软件，将来自多个供应商的存储集中化，并转变成单一且可扩展的平台。现在以 Apache 2.0 许可协议开源。

为了帮助企业迎战各种变化，EMC 推出了核心产品 VIPR 控制器的开源版本：CoprHD，**向以社区为主导的开发群体开放 ViPR 控制器所有的存储自动化和控制功能代码，以方便社区开发软件定义的存储自动化系统**。CoprHD 提供与 ViPR 控制器同样的灵活性、多种选择、安全性和透明性，同时增强开发新服务和新应用的能力。

CoprHD 是 EMC 首个基于其商业软件产品的开源项目，它的源码具有与 EMC ViPR 控制器相同的核心属性和功能。需要指出的是，CoprHD 其对应的商业版本 EMC ViPR 控制器，EMC 也将继续提供和支持。

详细特性和支持平台的列表请访问 CoprHD 社区页面： <https://coprhd.github.io/> 。

### 对 EMC 开源战略的社区反响

EMC 在开源方面的举措坚定而持续。比如其去年开源的 ScaleIO 就分别来自其花费了3亿美金收购的公司的拳头产品，而 ScaleIO 这个软件在当初发布时，该公司甚至不愿提供试用版。至于 ViPR ，我们前面提到过，它的开源版本 CoprHD 和 ViPR 具有相同的代码基，而现在 CoprHD 已经形成了一个成熟的开源社区。

![](/data/attachment/album/201605/24/093222gp51r10mzpm1j1ik.jpg)

*EMC 2016 大会上，参会者济济一堂*

虽然对于 ScaleIO 是否算做是开源产品社区还有一些争论，但是无论如何在非产品环境中ScaleIO 是可以免费下载使用的。

当然，从另外一方面来说，除了部分产品，如 CoprHD 等少数核心产品外，社区也对 EMC 开源的部分外围产品关注不多，希望能见到更多靠近核心的产品能贴近开源战略。

从目前 EMC 开源的几十个软件项目中，我们可以看到，有些项目的参与者还较少。按照 EMC 的产品与市场总裁 Jeremy Burton 所说，“**如果一个开源项目没有人参与，那不是开源，而叫做干掉该项目**。”因此，如何将这些项目找到合适的贡献者，而不仅仅是“开放”源代码就万事大吉，还需要 EMC 做更多的工作。至少，社区方面应该有足够的渠道来听到 EMC 在开源方面的声音，并有合适的社区氛围参与进社区生态的建设，才有助于 EMC 开源战略的持续发展。

### 开源能给 EMC 带来什么？

![](/data/attachment/album/201605/24/093315z98ss1cwz2q2jvvq.jpg)

*开源是你的战略的一部分吗？*

那么为什么 EMC 热衷于开源？开源可以为 EMC 带来什么？

开源可以让 EMC 的软件支持更多的第三方硬件，从而扩展了其应用场景，为客户带来更多的价值。

开源也可以让他们的软件得到更多的发展，从开源生态中汲取更多的养分。CoprHD 和 ViPR 的关系就类似 Fedora 和 Red Hat 的 RHEL 一样，可以通过开源社区的贡献、体验，从而为企业级的产品软件提供更多的发展的可能。

虽然，EMC 还是其开源的软件产品的主要贡献者，但是其开源的产品也会吸引大如 Intel 公司、各个研究机构和大学，小到独立开发者这样的开发力量参与进来。

另外，开源也为其争夺市场份额和对业界标准的影响有不可忽视的作用。

### 结语

纵观 EMC 在开源方面这两年来的举措，我们可以看到，**部分传统的 IT 厂商已经坚定的转向开源战略**，将开源作为其产品和业务发展的一大重要方式。

而 EMC 和 DELL 合并之后，笔者在和 EMC 相关高层中的沟通了解到，**这种开源战略显然会进一步延续下去**，并进一步扩展到新成立的 DELL 科技公司，从而吸引更多的开源社区力量参与，相对地也会进一步促进开源生态的发展。

作为开源战略不可或缺的部分，如何在“开放”源代码之后，将其植入开源社区的土壤，从而真正得到发展，这应该是之后 DELL 科技公司和 DELL EMC 的一大考量的地方。


《道德经》之项目管理

Summary:
在开放性组织中的员工都是被激情、目标和参与感所激励，这个观点正是我认为项目管理者所应该关注的。
要解释这一切，我将从道德经上寻找依据。

看来国学终将被证实。

今天恰好看到一篇相似的。

https://tonghuix.io/2016/06/zhuangzi-philosophy-foss-community-governance/

原题是 《庄子哲学与开源社群治理》。

佟辉的~过两天转过来~

![](/data/attachment/album/201605/25/231744gm0c68f70m0y886e.jpg)

《[道德经](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html)》，[被认为](https://en.wikipedia.org/wiki/Tao_Te_Ching)是由圣人[老子](http://plato.stanford.edu/entries/laozi/)于公元前六世纪时所编写，是现存最为广泛翻译的经文之一。从[宗教](https://en.wikipedia.org/wiki/Taoism)到[关于约会的有趣电影](http://www.imdb.com/title/tt0234853/)等方方面面，它都深深地影响着它们，作者们借用它来做隐喻，以解释各种各样的事情（甚至是[编程](http://www.mit.edu/%7Exela/tao.html)）。

在思考有关开放性组织的项目管理时，我的脑海中便立马浮现出上面的这段文字。

这听起来可能会有点奇怪。若要理解我的这种想法从何而来，你应该读读 **《开放性组织：点燃激情提升执行力》** 这本书，它是红帽公司总裁、首席执行官 Jim Whitehurst 所写的一本有关企业文化和新领导力范式的宣言。在这本书中，Jim（还有来自其他红帽人的一点帮助）解释了传统组织机构（一种 “自上而下” 的方式，来自高层的决策被传达到员工，而员工通过晋升和薪酬来激励）和开放性组织机构（一种 自下而上 的方式，领导专注于激励和鼓励，员工被充分授权以各尽其能）之间的差异。

在开放性组织中的员工都是被激情、目标和参与感所激励，这个观点正是我认为项目管理者所应该关注的。

要解释这一切，我将从**道德经**上寻找依据。

### 不要让工作职衔框住自身

>
> <ruby> 道，可道也， <rp>  （ </rp> <rt>  The tao that can be told </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 非恒道也。 <rp>  （ </rp> <rt>  is not the eternal Tao </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 名，可名也， <rp>  （ </rp> <rt>  The name that can be named </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 非恒名也。 <rp>  （ </rp> <rt>  is not the eternal Name. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> “无”，名天地之始； <rp>  （ </rp> <rt>  The unnameable is the eternally real. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> “有”，名万物之母。 <rp>  （ </rp> <rt>  Naming is the origin of all particular things. </rt> <rp>  ） </rp></ruby>
>
>
> [第一章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html)
>
>
>

项目管理到底是什么？作为一个项目管理者应该做些什么呢？

如您所想，项目管理者的一部分工作就是管理项目：收集需求、与项目相关人员沟通、设置项目优先级、安排任务、帮助团队解决困扰。许多机构都可以教你如何做好项目管理，并且这些技能你值得拥有。

然而，在开放性组织中，字面上的项目管理技能仅仅只是项目管理者需要做到的一小部分，这些组织需要更多其他的东西：即勇气。如果你擅长于管理项目（或者是真的擅长于任何工作），那么你就进入了舒适区。这时候就是需要鼓起勇气开始尝试冒险之时。

您有勇气跨出舒适区吗？向权威人士提出挑战性的问题，可能会引发对方的不快，但也可能会开启一个更好的方法，您有勇气这样做吗？有确定需要做的下一件事，然后真正去完成它的勇气吗？有主动去解决因为交流的鸿沟而遗留下来的问题的勇气吗？有去尝试各种事情的勇气吗？有失败的勇气吗？

道德经的开篇（上面引用的）就表明<ruby> 词语 <rp>  （ </rp> <rt>  words </rt> <rp>  ） </rp></ruby>、<ruby> 标签 <rp>  （ </rp> <rt>  labels </rt> <rp>  ） </rp></ruby>、<ruby> 名字 <rp>  （ </rp> <rt>  names </rt> <rp>  ） </rp></ruby>这些是有限制的，当然也包括工作职衔。在开放性组织中，项目经理不仅仅是执行管理项目所需的机械任务，而且要帮助团队完成组织的使命，尽管这已经被限定了。

### 联系起合适的人

>
> <ruby> 三十辐共一轂， <rp>  （ </rp> <rt>  We join spokes together in a wheel, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 当其无， <rp>  （ </rp> <rt>  but it is the center hole </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 有车之用。 <rp>  （ </rp> <rt>  that makes the wagon move. </rt> <rp>  ） </rp></ruby>
>
>
> [第十一章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html#38)
>
>
>

当我过渡到项目管理的工作时，我必须学会的最为困难的一课是：并不是所有解决方案都是可完全地接受，甚至有的连预期都达不到。这对我来说是全新的一页。我**喜欢**全部都能解决。但作为项目管理者，我的角色更多的是与人沟通--使得那些确实有解决方案的人可以更高效地合作。

这并不是逃避责任或者不负责。这意味着可以很舒适的说，“我不知道，但我会给你找出答案”，然后就可迅速地结束这个循环。

想像一下马车的车轮，如果没有毂中的孔洞所提供的稳定性和方向，辐条便会失去支持，车轮也会散架。在一个开放性的组织中，项目管理者可以通过把合适的人凝聚在一起，培养正确的讨论话题来帮助团队保持持续向前的动力。

### 信任你的团队

>
> <ruby> 太上，不知有之； <rp>  （ </rp> <rt>  When the Master governs, the people are hardly aware that he exists. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 其次，亲而誉之； <rp>  （ </rp> <rt>  Next best is a leader who is loved. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 其次，畏之； <rp>  （ </rp> <rt>  Next, one who is feared. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 其次，侮之。 <rp>  （ </rp> <rt>  The worst is one who is despised. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 信不足焉， <rp>  （ </rp> <rt>  If you don't trust the people, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 有不信焉。 <rp>  （ </rp> <rt>  you make them untrustworthy. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 悠兮，其贵言。 <rp>  （ </rp> <rt>  The Master doesn't talk, he acts. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 功成事遂， <rp>  （ </rp> <rt>  When his work is done, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 百姓皆谓：“我自然”。 <rp>  （ </rp> <rt>  the people say, "Amazing: we did it, all by ourselves!" </rt> <rp>  ） </rp></ruby>
>
>
> [第十七章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html#17)
>
>
>

[Rebecca Fernandez](https://opensource.com/users/rebecca) 曾经告诉我开放性组织的领导与其它组织的领导者最大的不同点在于，我们不是去取得别人的信任，而是信任别人。

开放性组织会雇佣那些非常聪明的，且对公司正在做的事情充满激情的人来做工作。为了能使他们能更好的工作，我们会提供其所需，并尊重他们的工作方式。

至于原因，我认为从道德经中摘出的上面一段就说的很清楚。

### 顺其自然

>
> <ruby> 上德无为而无以为； <rp>  （ </rp> <rt>  The Master does nothing yet he leaves nothing undone. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 下德为之而有以为。 <rp>  （ </rp> <rt>  The ordinary man is always doing things, yet many more are left to be done. </rt> <rp>  ） </rp></ruby>
>
>
> [第三十八章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html#38)
>
>
>

你认识那类总是极其忙碌的人吗？认识那些因为有太多事情要做而看起来疲倦和压抑的人吗？

不要成为那样的人。

我知道说比做容易。帮助我没有成为那类人的最重要的东西是：我时刻记着*大家都很忙*这件事。我没有一个那样无聊的同事。

但总需要有人成为在狂风暴雨中仍保持镇定的人。总需要有人能够宽慰团队告诉他们一切都会好起来，我们将在现实和一天中工作时间有限的情况下，找到方法使得任务能够完成（因为事实就是这样的，而且我们必须这样）。

成为那样的人吧。

对于上面这段道德经所说的，我的理解是那些总是谈论他或她正在做什么的人实际上并**没有时间**去做他们谈论的事。如果相比于你周围的人，你能把你的工作做的毫不费劲，那就说明你的工作做对了。

### 做一名文化传教士

>
> <ruby> 上士闻道， <rp>  （ </rp> <rt>  When a superior man hears of the Tao, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 勤而行之； <rp>  （ </rp> <rt>  he immediately begins to embody it. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 中士闻道， <rp>  （ </rp> <rt>  When an average man hears of the Tao, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 若存若亡； <rp>  （ </rp> <rt>  he half believes it, half doubts it. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 下士闻道， <rp>  （ </rp> <rt>  When a foolish man hears of the Tao, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 大笑之。 <rp>  （ </rp> <rt>  he laughs out loud. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 不笑不足以為道。 <rp>  （ </rp> <rt>  If he didn't laugh,it wouldn't be the Tao. </rt> <rp>  ） </rp></ruby>
>
>
> [第四十一章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html#41)
>
>
>

去年秋天，我和一群联邦雇员参加了一堂 MBA 的商业准则课程。当我开始介绍我们公司的文化、价值和伦理框架时，我得到的直接印象是：我的同学和教授都认为我就像一个天真可爱的小姑娘，做着许多关于公司应该如何运作的[甜美白日梦](https://opensource.com/open-organization/15/9/reflections-open-organization-starry-eyed-dreamer)。他们告诉我事情不可能是他们看起来的那样，他们还告诉我应该进一步考察。

所以我照做了。

然而我发现的是：事情**恰好**是他们看起来的那样。

在开放性组织，关于企业文化，人们应该随着企业的成长而时时维护那些文化，以使它随时精神焕发，充满斗志。我（和其它开源组织的成员）并不想过着如我同学们所描述的那样，“为生活而工作”。我需要有激情、有目标，需要明白自己的日常工作是如何对那些我所坚信的东西做贡献的。

作为一个项目管理者，你可能会认为在你的团队中，你的工作对培养你们公司的企业文化没有多少帮助。然而你的工作正是孕育文化本身。

### <ruby> Kaizen <rp>  （ </rp> <rt>  持续改善 </rt> <rp>  ） </rp></ruby>

>
> <ruby> 为学日益， <rp>  （ </rp> <rt>  In pursuit of knowledge,every day something is added. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 为道日损。 <rp>  （ </rp> <rt>  In the practice of the Tao,every day something is dropped. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 损之又损， <rp>  （ </rp> <rt>  Less and less do you need to force things, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 以至于无为。 <rp>  （ </rp> <rt>  until finally you arrive at non-action. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 无为而无不为。 <rp>  （ </rp> <rt>  When nothing is done,nothing is left undone. </rt> <rp>  ） </rp></ruby>
>
>
> [第四十八章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html#48)
>
>
>

项目管理的常规领域都太过于专注最新、最强大的的工具，但对于应该使用哪种工具，这个问题的答案总是一致的：“最简单的”。

例如，我将任务列表放在桌面的一个文本文件中，因为它很单纯，不会受到不必要的干扰。您想介绍给团队的，无论是何种工具、流程和程序都应该是能提高效率，排除障碍的，而不是引入额外的复杂性。所以与其专注于工具，还不如专注于要使用这些工具来解决的**问题**。

作为一个项目经理，我最喜爱的部分是在敏捷世界中，我有自由抛弃那些没有成效的东西的权利。这与 [kaizen](https://www.kaizen.com/about-us/definition-of-kaizen.html) 的概念相关，或叫 “持续改进”。不要害怕尝试和失败。失败是我们在探索什么能够起作用，什么不能起作用的过程中所用的标签，这是提高的唯一方式。

最好的过程都不是一蹴而就的。作为项目管理者，你应该通过支持他们，而不是强迫他们去做某些事来帮助你的团队。

### 实践

>
> <ruby> 天下皆谓我“道”大， <rp>  （ </rp> <rt>  Some say that my teaching is nonsense. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 似不肖。 <rp>  （ </rp> <rt>  Others call it lofty but impractical. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 夫唯大， <rp>  （ </rp> <rt>  But to those who have looked inside themselves, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 故似不肖。 <rp>  （ </rp> <rt>  this nonsense makes perfect sense. </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 若肖， <rp>  （ </rp> <rt>  And to those who put it into practice, </rt> <rp>  ） </rp></ruby>
>
>
> <ruby> 久矣其细也夫！ <rp>  （ </rp> <rt>  this loftiness has roots that go deep. </rt> <rp>  ） </rp></ruby>
>
>
> [第六十七章](http://acc6.its.brooklyn.cuny.edu/%7Ephalsall/texts/taote-v3.html#67)
>
>
>

我相信开放性组织正在做的事。开放性组织在管理领域的工作几乎与他们提供的产品和服务一样重要。我们有机会以身作则，激发他人的激情和目的，创造激励和充分授权的工作环境。

我鼓励你们找到办法把这些想法融入到自己的项目和团队中，看看会发生什么。了解你们组织的使命，知晓你的项目是如何为这个使命做贡献的。鼓起勇气，尝试某些看起来没有多少成效的事，同时不要忘记和我们的社区分享你所学到的经验，这样我们就可以继续改进。

---

via: <https://opensource.com/open-organization/16/2/tao-project-management>

作者：[Allison Matlack](https://opensource.com/users/amatlack) 译者：[runningwater](https://github.com/runningwater) 校对：[FSSlc](https://github.com/FSSlc)

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


开源新闻速递：openSUSE Tumbleweed 迁移 GCC6 受阻，需要帮助

Summary:
Ubuntu 官方贴纸可以购买啦；
Tiny Core Linux 7.1 发布。

opensuse这回是官方滚挂了啊

哈哈哈，官方滚挂，这描述准确~

### 头条消息

openSUSE 的滚动发行版 Tumbleweed 正在将其默认编译器换成 GCC 6 ，但这需要海量的工作来重建所有的应用。而现在，Tumbleweed 的开发者遇到了困难，很多软件包都编译通不过，包括 Xen、GDB、Mozilla Firefox 浏览器和 Mozilla Thunderbird 邮件客户端等重要软件，开发者们[希望](https://lists.opensuse.org/opensuse-factory/2016-05/msg00356.html)社区可以帮助他们来解决编译问题。具体信息可以关注其[邮件列表](https://lists.opensuse.org/opensuse-factory/2016-05/date2.html)。

另外，大家还记得 openSUSE 上一个著名的版本号变化么，[从 13.2 一下跳到了 42.1](/article-4143-1.html) ，而其下一个版本，openSUSE Leap 42.2 [也进入了开发阶段](https://lists.opensuse.org/opensuse-factory/2016-05/msg00372.html)，准备公测了。预计 42.2 将在 11 月的第一个星期发布。

![](/data/attachment/album/201605/25/085157f2zcyltlm01oo2u1.jpg)

经过了漫长的等待，Ubuntu 的爱好者们终于可以为自己的笔记本或台式机购买 [Ubuntu 的官方贴纸](http://www.unixstickers.com/ubuntu)了。[Unixstickers.com](http://unixstickers.com/) 在 5 月 24 号宣布，在合作伙伴 Canonical 的赞助下，现在可以提供带有 Ubuntu LOGO 的贴纸了。当然现在只能提供贴纸，后续应该还会生产带有 Ubuntu 图标的 T 恤和杯子。

![](/data/attachment/album/201605/25/090104tyn6kw70q0jv7xbq.jpg)

### 版本更迭

* 经过近一个月的开发，发布了两个 RC 版本之后，[Tiny Core Linux](http://www.tinycorelinux.net/) 7.1 [正式发布](http://forum.tinycorelinux.net/index.php/topic,19982.0.html)了。Tiny Core Linux 是一个十分小的 Linux 发行版，它分为三个版本： 仅提供命令行的 [Core](http://www.tinycorelinux.net/7.x/x86/release/Core-current.iso)（11Mb）、带有图形界面的 [TinyCore](http://www.tinycorelinux.net/7.x/x86/release/TinyCore-current.iso)（16Mb）以及安装盘 [CorePlus](http://www.tinycorelinux.net/7.x/x86/release/CorePlus-current.iso)（106Mb）。
* Linux 内核 3.12.60 LTS 发布，修复了 ARM 和 PowerPC 架构上的一些问题，更新了驱动。紧随这个版本发布的当天，Linux 内核 4.1.25 LTS 也进行了发布，升级了 OCFS2（OCFS2 是下一代的 ORACLE 集群文件系统） <ruby> 通用共享磁盘集群文件系统 <rp>  （ </rp> <rt>  general-purpose shared-disk cluster file system </rt> <rp>  ） </rp></ruby>。The Linux 内核 3.12.60 LTS 和 4.1.25 LTS 的源码都可以从网站 kernel.org 进行下载。4.1 系列内核的用户和 3.12 系列内核的用户可以进行更新了。
* Nvidia 为 UNIX 用户发行了 [361.45.11](http://www.nvidia.com/Download/driverResults.aspx/103306/en-us) 版本的图形驱动，支持 GNU/Linux、FreeBSD 和 Solaris 操作系统。
* Ubuntu MATE 的开发负责人 Martin Wimpress [宣布](https://plus.google.com/+MartinWimpress/posts/GLZyHpV7SbP)，Ubuntu MATE 16.10 操作系统开始开发了。其内置的应用“<ruby> 软件橱窗 <rp>  （ </rp> <rt>  Software Boutique </rt> <rp>  ） </rp></ruby>”和“<ruby> 欢迎 <rp>  （ </rp> <rt>  Welcome </rt> <rp>  ） </rp></ruby>”已经更新了，带来了一些新的功能。
* 最新发布的 GNOME 3.21.2 中的“<ruby> 软件 <rp>  （ </rp> <rt>  Software </rt> <rp>  ） </rp></ruby>”应用支持了 [Flatpack 软件包](https://wiki.gnome.org/Projects/SandboxedApps/Packages) （以前称之为 XDG-App bundles），这种软件包提供了沙盒化应用。


开源新闻速递：并没有什么用的 Chromium OS

Summary:
CentOS Linux 6.8 正式发布；
Google Chrome 进入 51 版本（51.0.2704.63）

因为有墙

### 头条消息

我们都知道谷歌的 Chromebook 上运行的是 Chrome OS ，这是一个商业系统，不过它的源代码是公开的，所以，就像 Chromium 之于 Chrome 浏览器一样，Chrome OS 也有个名为 Chromium OS 的开源变体。Arne Exton 今天发布了他的定制版本 Chromium OS Exton Build 160525。除了 Exton 的这个定制版本之外，还有其它的 [ArnoldTheBats](http://chromium.arnoldthebat.co.uk/index.php?dir=special%2F) 变体，但是 Exton 说他的最快。

如果你觉得 Chromebook 比较贵的话（真的吗？），你可以下载 Chromium OS 来体验一下，[只需要写入一个 USB 棒跟着指导进行就可以了](http://www.exton.se/?p=818)。不过，最后，我觉得这些都没什么用，你懂的。

![](/data/attachment/album/201605/26/101629p827kd7yay37ss17.jpg)

### 版本更迭

* 基于Red Hat 企业版 Linux 6.8 的 CentOS Linux 6.8 正式发布（[详情](/article-7390-1.html)）。
* Google Chrome [进入](http://googlechromereleases.blogspot.ro/2016/05/stable-channel-update_25.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+GoogleChromeReleases+(Google+Chrome+Releases)) 51 版本（51.0.2704.63），支持 GNU/Linux, Mac OS X, Windows 操作系统，这个版本修复了42个安全漏洞，当然也增加了一些比较让人兴奋的新特性。第一个就是实现了一个新的名为[凭据管理](http://blog.chromium.org/2016/04/chrome-51-beta-credential-management.html)的 API，增强了内置的密码管理器，网站可以直接与这个管理器进行交互，大大提升了网站登录体验。
* GhostBSD 的维护者 Eric Turgeon [宣布](http://ghostbsd.org/10.3-ALPHA2)，即将发行的基于 FreeBSD 10.3 的 GhostBSD 10.3 包含了几个新特性，其中包括对 ZFS (Z File System) 和 UFS (Unix File System) 文件系统的支持，以及重新设计的对 ZFS 加密的支持。
* Ubuntu MATE 16.10 将默认切换到 GTK3，该桌面环境将采用 Snap 软件包的形式，但是不会废弃以前的 .deb 包的支持。
* 紧随 Linux kernel 4.1.25 LTS发布之后，Linux kernel 3.18.34 LTS 又进行了新的发布，更新了一些驱动程序，改善了 ACPI, ATA, EDAC, GPU (大多针对 Intel i915), HV, iiO, InfiniBand, MD, 和 USB 驱动，以及其他的修复。
* 面向学生的发行版 [Birds Linux 8.0](http://birdslinux.altervista.org/en/) 发布，其搭载了 Linux 4.5 内核，以及 LibreOffice 5.1.2 办公套件，浏览器使用 Chrome 50 和 Tor Browser 5.5.5，还包括 VLC Media Player 2.2.2, GIMP 2.8.14-r1, Empathy 3.12.11, QCAD 3.14.3, 以及 DrJava 20140826-r5761。不过，目前 Birds Linux 8.0 只支持64位机。
![](/data/attachment/album/201605/26/101630vc25gjpdpjmll3pg.jpg)


谷歌取得巨大胜利，美联邦法庭裁定 Android 对 Java API 属于“合理使用”

Summary: 美国旧金山联邦法庭陪审团昨日做出了裁决，认定谷歌的 Android 操作系统使用 Java 进行开发并未侵犯甲骨文版权，因此驳回甲骨文索赔 90 亿美元的诉讼请求。此项裁决结束了谷歌与甲骨文长达六年的版权诉讼大战，而甲骨文表示将会就此上诉。

哈哈

法律是公正的

我就想知道这个oracle还能上诉，那美国法律到底能上诉多少次啊？

好像已经来回拉锯好几次了。。。

oracle收购sun说不定就是为了java，想大赚一笔的，可是自己太贪心了，搬石头砸了自己的脚。

嗯，不错。

你的名字！

>
> 美国旧金山联邦法庭陪审团昨日做出了裁决，认定谷歌的 Android 操作系统使用 Java 进行开发并未侵犯甲骨文版权，因此驳回了甲骨文索赔 90 亿美元的诉讼请求。此项裁决结束了谷歌与甲骨文长达六年的版权诉讼大战，而甲骨文表示将会就此上诉。
>
>
>

甲骨文控诉谷歌偷窃了它的 Java 编程语言来创造了 Android ，因此向谷歌索赔 90 亿美元。而旧金山联邦法庭在经过将近三周的审理后，十人陪审团又用了三天商议，最终做出了上述裁定，即：谷歌使用甲骨文 Java 开发平台开发 Android 受到了版权法“<ruby> 合理使用 <rp>  （ </rp> <rt>  fair use </rt> <rp>  ） </rp></ruby>”条款的保护。该裁定宣告了案件审判的结束，甲骨文没有获得所寻求的 90 亿美元赔偿金。

![](/data/attachment/album/201605/27/094043oxqe67xe5emqzqeq.jpg)

谷歌在邮件申明中说：“今天的裁决表明 Android 对 Java API 属于<ruby> 合理使用 <rp>  （ </rp> <rt>  fair use </rt> <rp>  ） </rp></ruby>，这代表着 Android 生态系统的胜利，也是 Java 编程社区和使用开放自由编程语言开发创新消费产品的软件开发者们的胜利！”

该裁决终止了这个持续六年、索赔多达数十亿美元的软件版权诉讼，但是这并不代表着事情的平息，因为甲骨文表示它还将上诉。

甲骨文法律总顾问 Dorian Daley 在邮件申明中说：“我们强烈相信谷歌通过非法复制核心的 Java 技术来开发 Android，从而借此进入到移动设备市场。甲骨文发起这场诉讼就是为了阻止谷歌的这一非法行为。我们确信有许多理由可以提出上诉。”但有关法律专家认为，推翻这一裁决将会很难。

甲骨文在 2010 年诉讼谷歌没有许可就在它的 Android 软件中使用了 Java 的一部分，2014年美国联邦法庭裁决甲骨文对这部分的 Java 拥有版权。而在本月的法庭审理中，谷歌辩称它对 Java 的使用符合版权法的“<ruby> 合理使用 <rp>  （ </rp> <rt>  fair use </rt> <rp>  ） </rp></ruby>”条款。

谷歌的证人们包括谷歌前首席执行官、现任谷歌母公司 Alphabet 执行董事长 Eric Schmidt。他们说服陪审团相信，谷歌使用 Java 去创新，而非简单地抄袭其代码。在加入谷歌之前， Eric Schmidt 曾为发明了 Java 语言的 Sun Microsystems 公司工作，参与研发和推销 Java。

Sun Microsystems 于上世纪 90 年代开发了 Java 语言，而谷歌在开发 Android 时曾经与 Sun Microsystems 谈判过使用 Java 的授权，但是最终并没有谈下去而是自由使用了那些 Java API。甲骨文 2010 年收购 Sun Microsystems 时， Eric Schmidt 正参与谷歌授权谈判。他称，根据他多年研发 Java 的经验来看，他认为谷歌无需通过谈判就应该被允许使用 Java API，Sun Microsystems 以开源和自由的方式推广它们，而非通过授权或出售方式。

2010年，在甲骨文收购了 Sun Microsystems 几个月之后，甲骨文就将谷歌告上法庭，称谷歌 Android 操作系统中有37个 API 侵犯了其编程语言 Java 的版权。甲骨文认为，谷歌只有获得许可才能使用 Java API 研发 Android 操作系统。而谷歌认为，他们使用这些 API 不受版权法的约束，美国联邦上诉法庭在 2014 年的裁定也适用于 API，为此无需支付版权费。

业界密切关注该案的审理，因为它可能改变软件该如何构建，通过“开源”，代码可以自由获取，还是这些代码必须得到授权。那些站在谷歌一边的人可能担心由此而来的寒蝉效应，但是这次谷歌的“合理使用”的成功或能减轻这种担忧。

在裁定公布后，甲骨文和 Alphabet 股价在盘后交易中变化不大。

via：[zdnet](http://www.zdnet.com/article/google-prevails-over-oracle-in-copyright-infringement-case/)，[UsaToday](http://www.usatoday.com/story/tech/news/2016/05/26/google-defeats-oracle-jury-decides-android-fair-use/84991628/)


开源新闻速递：甲骨文败诉 93 亿美元索赔

Summary:
Linux 4.7 中将支持 IBM POWER8 的内核实时补丁功能；
赛车游戏《F1 2015》发布 Linux 版本

### 头条消息

首先一个大消息是，业界瞩目的谷歌和甲骨文的 Android 诉讼终于告一段落。就在昨天，旧金山联邦法庭陪审团裁定谷歌 Android 操作系统中对 Java API 的使用属于“<ruby> 公平使用 <rp>  （ </rp> <rt>  fair use </rt> <rp>  ） </rp></ruby>”，因此，无需赔偿甲骨文所主张的 90 亿美元赔偿——具体来说是 93 亿美金——这是有史以来最大的版权赔偿金额。对此裁定，虽然双方的股价都未有大的变化，但从网上的评论来看，都一边倒的站在谷歌这一边。

![](/data/attachment/album/201605/27/175430hicyzem6cic7t9f0.jpeg)

之前我们[报道](/article-7360-1.html)过，SUSE 已经在其企业版 Linux 中支持了内核实时补丁功能，而现在，一群 IBM 和 SUSE 的工程师们正在为 Linux 4.7 内核开发支持 POWER8 机器的内核实时补丁功能。POWER8 机器采用的是 64 位的小端 PPC64，在 Linux 4.6 内核，他们就已经为 PPC64le 开发了内核实时补丁的[部分实现](http://mpe.github.io/posts/2016/05/23/kernel-live-patching-for-ppc64le/)，不过完全的支持需要到 4.7 内核时才能完成。

Google 将会在安卓应用中加入生物识别、无密码校验技术。这将意味着，用户不在需要记忆密码了，手机的安全级别也将大大提高。届时，会根据用户的信用评分来解锁手机，信用评分会综合考虑各方面的因素，比如类型模式，位置，速度，声音模式，或者面部识别。

Canonical 的开发人员 Michael Hall 写了一篇[短文](https://plus.google.com/+MichaelHall119/posts/AmShAYoJYmN?iem=4&gpawv=1&hl=en-US)说将任何 Linux 应用打包成 snap 格式都很容易，建议社区将各种应用打包成这种开箱即用的 snap 格式。打包的方法可以参见[官方文档](https://developer.ubuntu.com/en/snappy/build-apps/)。

### 版本更迭

* 著名的 Linux 游戏发行版 SteamOS 发布了 2.80 测试版，在这个版本中最重要的更新是发布了 AMD GPU PRO 的驱动 16.30。由于 SteamOS 是基于 Debian 的，所以，使用 AMD GPU PRO 的Debian 用户也有福了。这个版本支持 Vulkan 和 VDPAU。当然，目前驱动还处于公测期间，有意尝鲜者可以[试试](http://repo.steampowered.com/steamos/pool/non-free/a/amdgpu-pro-installer/)，普通用户请等待正式版本出来，目前的正式版本是 16.20。
![](/data/attachment/album/201605/27/185231wgzge77em7xxmg0m.jpg)
* 正在迈向 3.22 版本的 GNOME 刚刚发布了 3.21 的第二个里程碑版本 3.21.2，对 Wayland 进行了多处修复。作为核心组件的 GTK+ 也升级了相同版本，此外，很多为 GNOME 3.22 准备就绪的应用也纷纷进行了更新，比如 Polari IRC（Internet 中继聊天）客户端就[增加](https://mail.gnome.org/archives/gnome-announce-list/2016-May/msg00014.html)了一些新特性。
* Linux 和 SteamOS 版本的《古墓丽影 2013 重启》发布了 [1.1.1 补丁](http://steamcommunity.com/app/203160/discussions/0/357287304420332226/)。修复了一些问题，包括在使用 VPN 时不会再闪退，以及许多声音问题。
* 紧随 Feral Interactive 发布了《古墓丽影》1.1.1补丁之后，另一个令人欣喜的消息是，该公司还发布了赛车类游戏《[F1 2015](http://store.steampowered.com/app/286570/)》。不过要运行《F1 2015》的话对系统版本和内存、显卡等配置要求比较高。要求 SteamOS 2.0 或者 Ubuntu 16.04 LTS 或者更高的版本。内核至少是 Intel i3 或者 AMD FX-6300 CPU，不过最好是 Intel i7 4770 或者更高配置的处理器。
![](/data/attachment/album/201605/27/185232g3jmsseztd99gjed.jpg)
* DisplayLink 更新了其 DisplayLink USB 3.0 的 Linux 驱动，支持最新的 [Ubuntu](http://www.displaylink.com/downloads/ubuntu) 及 [Fedora](http://www.hadess.net/2016/05/blog-backlog-post-3-displaylink-based.html) 发行版。使用 USB 或无线显示器等支持 DisplayLink 技术的 Linux 用户可以升级了。
* Sabayon ARM [发布](http://www.sabayon.org/article/arm-meet-sabayon-sabayon-meet-arm)了支持[树莓派2和3](http://ftp.nluug.nl/os/Linux/distr/sabayonlinux/iso/monthly/Sabayon_Linux_16_armv7l_RPi_Base_8GB.img.xz)的版本。
* Debian 的 LTS 小组[宣布](https://lists.debian.org/debian-lts/2016/05/threads.html)，他们不再在 Debian 7 的扩展生命周期中支持 VLC 2.0.3、SoGo 1.3.16 和 MediaWiki 1.19.20。