mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-03-12 01:40:10 +08:00
commit
5aeb7828ec
1105
published/20160917 A Web Crawler With asyncio Coroutines.md
Normal file
1105
published/20160917 A Web Crawler With asyncio Coroutines.md
Normal file
File diff suppressed because it is too large
Load Diff
146
published/20161018 Suspend to Idle.md
Normal file
146
published/20161018 Suspend to Idle.md
Normal file
@ -0,0 +1,146 @@
|
||||
浅述内核中“挂起到空闲”的实现
|
||||
===============
|
||||
|
||||
### 简介
|
||||
|
||||
Linux 内核提供了多种睡眠状态,各个状态通过设置系统中的不同部件进入低耗电模式来节约能源。目前总共有四种睡眠状态,分别是:挂起到空闲(suspend to idle)、加电待机(power-on standby(standby))、挂起到内存(suspend to ram)和挂起到磁盘(suspend to disk)。这些状态分别对应 ACPI 的 4 种状态:S0,S1,S3 和 S4。挂起到空闲(suspend to idle)是纯软件实现的,用于将 CPU 维持在尽可能深的 idle 状态。加电待机(power-on standby(standby))则使设备处于低功耗状态,并且关闭所有非引导 CPU。挂起到内存(suspend to ram)就更进一步,关闭所有 CPU 并且设置 RAM 进入自刷新模式。挂起到磁盘(suspend to disk)则是最省功耗的模式,关闭尽可能多的系统,包括关闭内存。然后内存中的内容会被写到硬盘,待唤醒计算机的时候将硬盘中的内容重新恢复到内存中。
|
||||
|
||||
这篇博文主要介绍挂起到空闲(suspend to idle)的实现。如上所说,它主要通过软件实现。一般平台的挂起过程包括冻结用户空间并将外围设备调至低耗电模式。但是,系统并不是直接关闭和热插拔掉 CPU,而是静静地强制将 CPU 进入空闲(idle)状态。随着外围设备进入了低耗电模式,除了唤醒相关的中断外不应有其他中断产生。唤醒中断包括那些设置用于唤醒系统的计时器(比如 RTC,普通计时器等)、或者电源开关、USB 和其它外围设备等。
|
||||
|
||||
在冻结过程中,当系统进入空闲状态时会调用一个特殊的 cpu 空闲函数。这个 `enter_freeze()` 函数可以和调用使 cpu 空闲的 `enter()` 函数一样简单,也可以复杂得多。该函数复杂的程度由将 SoC 置为低耗电模式的条件和方法决定。
|
||||
|
||||
### 先决条件
|
||||
|
||||
#### `platform_suspend_ops`
|
||||
|
||||
一般情况,为了支持 S2I,系统必须实现 `platform_suspend_ops` 并提供最低限度的挂起支持。这意味着至少要完成 `platform_suspend_ops` 中的 `valid()` 函数。如果挂起到空闲(suspend to idle)和挂起到内存(suspend to ram)都要支持,valid 函数中应使用 `suspend_valid_only_mem`。
|
||||
|
||||
不过,最近内核增加了对 S2I 的自动支持。Sudeep Holla 提出了一个变更,可以让系统不需要满足 `platform_suspend_ops` 条件也能提供 S2I 支持。这个补丁已经被接收并将合并在 4.9 版本中,该补丁可从这里获取: [https://lkml.org/lkml/2016/8/19/474][1]。
|
||||
|
||||
如果定义了 `suspend_ops`,那么可以通过查看 `/sys/power/state` 文件得知系统具体支持哪些挂起状态。如下操作:
|
||||
|
||||
```
|
||||
# cat /sys/power/state
|
||||
freeze mem
|
||||
```
|
||||
|
||||
这个示例的结果显示该平台支持 S0(挂起到空闲(suspend to idle))和 S3(挂起到内存(suspend to ram))。按 Sudeep 的变更,那些没有实现 `platform_suspend_ops` 的平台将只显示 freeze 状态。
|
||||
|
||||
#### 唤醒中断
|
||||
|
||||
一旦系统处于某种睡眠状态,系统必须要接收某个唤醒事件才能恢复系统。这些唤醒事件一般由系统的设备产生。因此一定要确保这些设备驱动使用唤醒中断,并且将自身配置为接收唤醒中断后产生唤醒事件。如果没有正确识别唤醒设备,系统收到中断后会继续保持睡眠状态而不会恢复。
|
||||
|
||||
一旦设备正确实现了唤醒接口的调用,就可用来生成唤醒事件。请确保 DT 文件正确配置了唤醒源。下面是一个配置唤醒源示例,该文件来自(`arch/arm/boot/dst/am335x-evm.dts`):
|
||||
|
||||
```
|
||||
gpio_keys: volume_keys@0 {
|
||||
compatible = “gpio-keys”;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
autorepeat;
|
||||
|
||||
switch@9 {
|
||||
label = “volume-up”;
|
||||
linux,code = <115>;
|
||||
gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
|
||||
wakeup-source;
|
||||
};
|
||||
|
||||
switch@10 {
|
||||
label = “volume-down”;
|
||||
linux,code = <114>;
|
||||
gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
|
||||
wakeup-source;
|
||||
};
|
||||
};
|
||||
```
|
||||
如上所示,有两个 gpio 键被配置为唤醒源,在系统挂起期间,其中任何一个键被按下都会产生一个唤醒事件。
|
||||
|
||||
可替代 DT 文件配置的另一个唤醒源配置就是设备驱动,如果设备驱动自身在代码里面配置了唤醒支持,那么就会使用该默认唤醒配置。
|
||||
|
||||
### 实施
|
||||
|
||||
#### 冻结功能
|
||||
|
||||
如果系统希望能够充分使用挂起到空闲(suspend to idle),那么应该在 CPU 空闲驱动代码中定义 `enter_freeze()` 函数。`enter_freeze()` 与 `enter()` 的函数原型略有不同。因此,不能将 `enter()` 同时指定给 `enter` 和 `enter_freeze`。至少,系统会直接调用 `enter()`。如果没有定义 `enter_freeze()`,系统会挂起,但是不会触发那些只有当 `enter_freeze()` 定义了才会触发的函数,比如 `tick_freeze()` 和 `stop_critical_timing()` 都不会发生。这会导致计时器中断唤醒系统,但不会导致系统恢复,因为系统处理完中断后会继续挂起。
|
||||
|
||||
在挂起过程中,中断越少越好(最好一个也没有)。
|
||||
|
||||
下图显示了能耗和时间的对比。图中的两个尖刺分别是挂起和恢复。挂起前后的能耗尖刺是系统退出空闲态进行记录操作,进程调度,计时器处理等。因延迟的缘故,系统进入更深层次空闲状态需要花费一段时间。
|
||||
|
||||

|
||||
|
||||
*能耗使用时序图*
|
||||
|
||||
下图为 ftrace 抓取的 4 核 CPU 在系统挂起和恢复操作之前、之中和之后的活动。可以看到,在挂起期间,没有请求或者中断被处理。
|
||||
|
||||

|
||||
|
||||
*Ftrace 抓取的挂起/恢复活动图*
|
||||
|
||||
#### 空闲状态
|
||||
|
||||
你必须确定哪个空闲状态支持冻结。在冻结期间,电源相关代码会决定用哪个空闲状态来实现冻结。这个过程是通过在每个空闲状态中查找谁定义了 `enter_freeze()` 来决定的。CPU 空闲驱动代码或者 SoC 挂起相关代码必须确定哪种空闲状态实现冻结操作,并通过给每个 CPU 的可应用空闲状态指定冻结功能来进行配置。
|
||||
|
||||
例如, Qualcomm 会在平台挂起代码的挂起初始化函数处定义 `enter_freeze` 函数。这个工作是在 CPU 空闲驱动已经初始化后进行,以便所有结构已经定义就位。
|
||||
|
||||
#### 挂起/恢复相关驱动支持
|
||||
|
||||
你可能会在第一次成功挂起操作后碰到驱动相关的 bug。很多驱动开发者没有精力完全测试挂起和恢复相关的代码。你甚至可能会发现挂起操作并没有多少工作可做,因为 `pm_runtime` 已经做了你要做的挂起相关的一切工作。由于用户空间已经被冻结,设备此时已经处于休眠状态并且 `pm_runtime` 已经被禁止。
|
||||
|
||||
### 测试相关
|
||||
|
||||
测试挂起到空闲(suspend to idle)可以手动进行,也可以使用脚本/进程等实现自动挂起、自动睡眠,或者使用像 Android 中的 `wakelock` 来让系统挂起。如果手动测试,下面的操作会将系统冻结。
|
||||
|
||||
```
|
||||
/ # echo freeze > /sys/power/state
|
||||
[ 142.580832] PM: Syncing filesystems … done.
|
||||
[ 142.583977] Freezing user space processes … (elapsed 0.001 seconds) done.
|
||||
[ 142.591164] Double checking all user space processes after OOM killer disable… (elapsed 0.000 seconds)
|
||||
[ 142.600444] Freezing remaining freezable tasks … (elapsed 0.001 seconds) done.
|
||||
[ 142.608073] Suspending console(s) (use no_console_suspend to debug)
|
||||
[ 142.708787] mmc1: Reset 0x1 never completed.
|
||||
[ 142.710608] msm_otg 78d9000.phy: USB in low power mode
|
||||
[ 142.711379] PM: suspend of devices complete after 102.883 msecs
|
||||
[ 142.712162] PM: late suspend of devices complete after 0.773 msecs
|
||||
[ 142.712607] PM: noirq suspend of devices complete after 0.438 msecs
|
||||
< system suspended >
|
||||
….
|
||||
< wake irq triggered >
|
||||
[ 147.700522] PM: noirq resume of devices complete after 0.216 msecs
|
||||
[ 147.701004] PM: early resume of devices complete after 0.353 msecs
|
||||
[ 147.701636] msm_otg 78d9000.phy: USB exited from low power mode
|
||||
[ 147.704492] PM: resume of devices complete after 3.479 msecs
|
||||
[ 147.835599] Restarting tasks … done.
|
||||
/ #
|
||||
```
|
||||
|
||||
在上面的例子中,需要注意 MMC 驱动的操作占了 102.883ms 中的 100ms。有些设备驱动在挂起的时候有很多工作要做,比如将数据刷出到硬盘,或者其他耗时的操作等。
|
||||
|
||||
如果系统定义了冻结(freeze),那么系统将尝试挂起操作,如果没有冻结功能,那么你会看到下面的提示:
|
||||
|
||||
```
|
||||
/ # echo freeze > /sys/power/state
|
||||
sh: write error: Invalid argument
|
||||
/ #
|
||||
```
|
||||
|
||||
### 未来的发展
|
||||
|
||||
目前在 ARM 平台上的挂起到空闲(suspend to idle)有两方面的工作需要做。第一方面工作在前面 `platform_suspend_ops` 小节中提到过,是总允许接受冻结状态以及合并到 4.9 版本内核中的工作。另一方面工作是冻结功能的支持。
|
||||
|
||||
如果你希望设备有更好的响应及表现,那么应该继续完善冻结功能的实现。然而,由于很多 SoC 会使用 ARM 的 CPU 空闲驱动,这使得 ARM 的 CPU 空闲驱动完善它自己的通用冻结功能的工作更有意义了。而事实上,ARM 正在尝试添加此通用支持。如果 SoC 供应商希望实现他们自己的 CPU 空闲驱动或者需要在进入更深层次的冻结休眠状态时提供额外的支持,那么只有实现自己的冻结功能。
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.linaro.org/blog/suspend-to-idle/
|
||||
|
||||
作者:[Andy Gross][a]
|
||||
译者:[beyondworld](https://github.com/beyondworld)
|
||||
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.linaro.org/author/andygross/
|
||||
[1]:https://lkml.org/lkml/2016/8/19/474
|
@ -1,58 +1,59 @@
|
||||
Manage Samba4 AD Domain Controller DNS and Group Policy from Windows – Part 4
|
||||
Samba 系列(四):在 Windows 下管理 Samba4 AD 域管制器 DNS 和组策略
|
||||
============================================================
|
||||
在 Windows 系统下管理 Samba4 AD 域管制器 DNS 和组策略(四)
|
||||
|
||||
接着前一篇教程写的关于[使用 Windows 10 系统的 RSAT 工具来管理 Samba4 活动目录架构][4],在这篇文章中我们将学习如何使用微软 DNS 管理器远程管理我们的 Samba AD 域控制器的 DNS 服务器,如何创建 DNS 记录,如何创建反向查找区域以及如何通过组策略管理工具来创建域策略。
|
||||
接着前一篇教程写的关于[使用 Windows 10 的 RSAT 工具来管理 Samba4 活动目录架构][4],在这篇文章中我们将学习如何使用微软 DNS 管理器远程管理我们的 Samba AD 域控制器的 DNS 服务器,如何创建 DNS 记录,如何创建反向查找区域以及如何通过组策略管理工具来创建域策略。
|
||||
|
||||
#### 需求
|
||||
#### 要求
|
||||
|
||||
1、 [在 Ubuntu16.04 系统上使用 Samba4 软件来创建活动目录架构(一)][1]
|
||||
2、 [在 Linux 命令行下管理 Samba4 AD 架构(二)][2]
|
||||
3、 [使用 Windows 10 系统的 RSAT 工具来管理 Samba4 活动目录架构 (三)][3]
|
||||
1、 [在 Ubuntu 16.04 系统上使用 Samba4 软件来创建活动目录架构(一)][1]
|
||||
|
||||
2、 [在 Linux 命令行下管理 Samba4 AD 架构(二)][2]
|
||||
|
||||
3、 [使用 Windows 10 的 RSAT 工具来管理 Samba4 活动目录架构 (三)][3]
|
||||
|
||||
### 第 1 步:管理 Samba DNS 服务器
|
||||
|
||||
Samba4 AD DC 使用内部的 DNS 解析模块,该模块在初始化域提供的过程中被创建完成(如果 BIND9 DLZ 模块未特定使用的情况下)。
|
||||
Samba4 AD DC 使用内部的 DNS 解析器模块,该模块在初始化域提供的过程中创建(如果 BIND9 DLZ 模块未指定使用的情况下)。
|
||||
|
||||
Samba4 内部的 DNS 域模块支持 AD 域控制器所必须的基本功能。有两种方式来管理域 DNS 服务器,直接在命令行下通过 samba-tool 接口来管理,或者使用已加入域的微软工作站中的 RSAT DNS 管理器远程进行管理。
|
||||
Samba4 内部的 DNS 模块支持 AD 域控制器所必须的基本功能。有两种方式来管理域 DNS 服务器,直接在命令行下通过 samba-tool 接口来管理,或者使用已加入域的微软工作站中的 RSAT DNS 管理器远程进行管理。
|
||||
|
||||
在这篇文章中,我们使用第二种方式来进行管理,因为这种方式很直观,也不容易出错。
|
||||
|
||||
1、要使用 RSAT 工具来管理域控制器上的 DNS 服务器,在 Windows 机器上,打开控制面板 -> 系统和安全 -> 管理工具,然后运行 DNS 管理器工具。
|
||||
|
||||
当打开这个工具时,它会询问你将要连接到哪台正在运行的 DNS 服务器。选择使用下面的计算机,输入域名(IP 地址或 FQDN 地址都可以使用),勾选‘现在连接到指定计算机’,然后单击 OK 按钮以开启 Samba DNS 服务。
|
||||
当打开这个工具时,它会询问你将要连接到哪台正在运行的 DNS 服务器。选择“使用下面的计算机”,输入域名(IP 地址或 FQDN 地址都可以使用),勾选“现在连接到指定计算机”,然后单击 OK 按钮以开启 Samba DNS 服务。
|
||||
|
||||
[
|
||||

|
||||
][5]
|
||||
|
||||
在 Windows 系统上连接 Samba4 DNS 服务器
|
||||
*在 Windows 系统上连接 Samba4 DNS 服务器*
|
||||
|
||||
2、为了添加一条 DNS 记录(比如我们添加一条指向 LAN 网关的记录 ‘A'),打开 DNS 管理器,找到域正向查找区,在右侧单击右键选择新的主机(’A‘ 或 ’AAA‘)。
|
||||
2、为了添加一条 DNS 记录(比如我们添加一条指向 LAN 网关的 A 记录),打开 DNS 管理器,找到域正向查找区,在右侧单击右键选择新的主机(A 或 AAAA)。
|
||||
|
||||
[
|
||||

|
||||
][6]
|
||||
|
||||
在 Windows 下添加一条 DNS 记录
|
||||
*在 Windows 下添加一条 DNS 记录*
|
||||
|
||||
3、在打开的新主机窗口界面,输入 DNS 服务器的主机名和 IP 地址。 DNS 管理器工具会自动填写完成 FQDN 地址。填写完成后,点击添加主机按钮,之后会弹出一个新的窗口提示你 DNS A 记录已经创建完成。
|
||||
3、在打开的新主机窗口界面,输入 DNS 服务器的主机名和 IP 地址。 DNS 管理器工具会自动填写完成 FQDN 地址。填写完成后,点击“添加主机”按钮,之后会弹出一个新的窗口提示你 DNS A 记录已经创建完成。
|
||||
|
||||
确保你添加的 DNS A 记录是你们网络中的资源[已配置静态 IP][7]。不要为那些从 DHCP 服务器自动获取 IP 地址或者经常变换 IP 地址的主机添加 DNS A 记录。
|
||||
确保仅为你的网络中[已配置静态 IP][7]的资源(设备)添加 DNS A 记录。不要为那些从 DHCP 服务器自动获取 IP 地址或者经常变换 IP 地址的主机添加 DNS A 记录。
|
||||
|
||||
[
|
||||

|
||||
][8]
|
||||
|
||||
在 Windows 系统下配置 Samba 主机
|
||||
*在 Windows 系统下配置 Samba 主机*
|
||||
|
||||
要更新一条 DNS 记录只需要双击那条记录,然后输入更改原因即可。要删除一条记录时,只需要在这条记录上单击右键,选择从菜单删除即可。
|
||||
要更新一条 DNS 记录只需要双击那条记录,然后输入更改即可。要删除一条记录时,只需要在这条记录上单击右键,选择从菜单删除即可。
|
||||
|
||||
同样的方式,你也可以为你的域添加其它类型的 DNS 记录,比如说 CNAME 记录(也称为 DNS 别名记录),MX 记录(在邮件服务器上非常有用)或者其它类型的记录(SPE、TXT、SRVetc类型)。
|
||||
同样的方式,你也可以为你的域添加其它类型的 DNS 记录,比如说 CNAME 记录(也称为 DNS 别名记录),MX 记录(在邮件服务器上非常有用)或者其它类型的记录(SPE、TXT、SRV 等类型)。
|
||||
|
||||
### 第 2 步:创建反向查找区域
|
||||
|
||||
默认情况下, Samba4 AD DC 不会自动为你的域添加一个反向查找区域和 PTR 记录,因为这些类型的记录对于域控制器的正常工作来说是无关紧要的。
|
||||
默认情况下,Samba4 AD DC 不会自动为你的域添加一个反向查找区域和 PTR 记录,因为这些类型的记录对于域控制器的正常工作来说是无关紧要的。
|
||||
|
||||
相反,DNS 反向区和 PTR 记录在一些重要的网络服务中显得非常有用,比如邮件服务,因为这些类型的记录可以用于验证客户端请求服务的身份。
|
||||
|
||||
@ -64,56 +65,56 @@ Samba4 内部的 DNS 域模块支持 AD 域控制器所必须的基本功能。
|
||||

|
||||
][9]
|
||||
|
||||
创建 DNS 反向查找区域
|
||||
*创建 DNS 反向查找区域*
|
||||
|
||||
5、下一步,单击下一步按钮,然后从区域类型向导中选择主区域。
|
||||
5、下一步,单击下一步按钮,然后从区域类型向导中选择主区域(Primary)。
|
||||
[
|
||||

|
||||
][10]
|
||||
|
||||
选择 DNS 区域类型
|
||||
*选择 DNS 区域类型*
|
||||
|
||||
6、下一步,在 AD 区域复制范围中选择复制到该域里运行在域控制器上的所有的 DNS 服务器,选择 IPv4 反向查找区域然后单击下一步继续。
|
||||
6、下一步,在 “AD 区域复制范围”中选择复制到该域里运行在域控制器上的所有的 DNS 服务器,选择 “IPv4 反向查找区域”然后单击下一步继续。
|
||||
|
||||
[
|
||||

|
||||
][11]
|
||||
|
||||
为 Samba 域控制器选择 DNS 服务器
|
||||
*为 Samba 域控制器选择 DNS 服务器*
|
||||
|
||||
[
|
||||

|
||||
][12]
|
||||
|
||||
添加反向查找区域名
|
||||
*添加反向查找区域名*
|
||||
|
||||
7、下一步,在网络ID 框中输入你的 LAN IP 地址,然后单击下一步继续。
|
||||
|
||||
资源在这个区域内添加的所有 PTR 记录仅指向 192.168.1.0/24 网络段。如果你想要为一个不在该网段中的服务器创建一个 PTR 记录(比如邮件服务器位于 10.0.0.0/24 这个网段的时候),那么你还得为那个网段创建一个新的反向查找区域。
|
||||
在这个区域内添加的所有资源(设备)的 PTR 记录仅能指向 192.168.1.0/24 网络段。如果你想要为一个不在该网段中的服务器创建一个 PTR 记录(比如邮件服务器位于 10.0.0.0/24 这个网段的时候),那么你还得为那个网段创建一个新的反向查找区域。
|
||||
|
||||
[
|
||||

|
||||
][13]
|
||||
|
||||
添加 DNS 反向查找区域的 IP 地址
|
||||
*添加 DNS 反向查找区域的 IP 地址*
|
||||
|
||||
8、在下一个截图中选择仅允许安全的动态更新,单击下一步继续,最后单击完成按钮以完成反向查找区域的创建。
|
||||
8、在下一个截图中选择“仅允许安全的动态更新”,单击下一步继续,最后单击完成按钮以完成反向查找区域的创建。
|
||||
|
||||
[
|
||||

|
||||
][14]
|
||||
|
||||
启用安全动态更新
|
||||
*启用安全动态更新*
|
||||
|
||||
[
|
||||

|
||||
][15]
|
||||
|
||||
新 DNS 区域概述
|
||||
*新 DNS 区域概览*
|
||||
|
||||
9、此时,你已经为你的域环境创建完成了一个有效的 DNS 反向查找区域。为了在这个区域中添加一个 PTR 记录,在右侧右键单击,选择为网络资源创建一个 PTR 记录。
|
||||
|
||||
这个时候,我们已经为网关创建了一个指向。为了测试这条记录对于客户端是否添加正确和工作正常,打开命令行提示符执行 nslookup 查询资源名,再执行另外一条命令查询 IP 地址。
|
||||
这个时候,我们已经为网关创建了一个指向。为了测试这条记录对于客户端是否添加正确和工作正常,打开命令行提示符执行 `nslookup` 查询资源名,再执行另外一条命令查询 IP 地址。
|
||||
|
||||
两个查询都应该为你的 DNS 资源返回正确的结果。
|
||||
|
||||
@ -121,19 +122,21 @@ Samba4 内部的 DNS 域模块支持 AD 域控制器所必须的基本功能。
|
||||
nslookup gate.tecmint.lan
|
||||
nslookup 192.168.1.1
|
||||
ping gate
|
||||
```
|
||||
```
|
||||
|
||||
[
|
||||

|
||||
][16]
|
||||
|
||||
添加及查询 PTR 记录
|
||||
*添加及查询 PTR 记录*
|
||||
|
||||
### 第 3 步:管理域控制策略
|
||||
|
||||
10、域控制器最重要的作用就是集中控制系统资源及安全。使用域控制器的域组策略功能很容易实现这些类型的任务。
|
||||
|
||||
遗憾的是,在 Samba 域控制器上唯一用来编辑或管理组策略的方法是通过微软的 RSAT GPM 工具。
|
||||
|
||||
在下面的实例中,我们将看到通过组策略来实现在 Samba 域环境中为域用户创建一种交互式的登录方式是多么的简单。
|
||||
在下面的实例中,我们将看到通过组策略来实现在 Samba 域环境中为域用户创建一种交互式的登录提示是多么的简单。
|
||||
|
||||
要访问组策略控制台,打开控制面板 -> 系统和安全 -> 管理工具,然后打开组策略管理控制台。
|
||||
|
||||
@ -143,9 +146,9 @@ ping gate
|
||||

|
||||
][17]
|
||||
|
||||
管理 Samba 域组策略
|
||||
*管理 Samba 域组策略*
|
||||
|
||||
11、在组策略管理编辑器窗口中,进入到电脑配置 -> 组策略 -> Windows 设置 -> 安全设置 -> 本地策略 -> 安全选项,你将在右侧看到一个新的选项列表。
|
||||
11、在组策略管理编辑器窗口中,进入到计算机配置 -> 组策略 -> Windows 设置 -> 安全设置 -> 本地策略 -> 安全选项,你将在右侧看到一个新的选项列表。
|
||||
|
||||
在右侧查询并编辑你的定制化设置,参考下图中的两条设置内容。
|
||||
|
||||
@ -153,7 +156,7 @@ ping gate
|
||||

|
||||
][18]
|
||||
|
||||
配置 Samba 域组策略
|
||||
*配置 Samba 域组策略*
|
||||
|
||||
12、这两个条目编辑完成后,关闭所有窗口,打开 CMD 窗口,执行以下命令来强制应用组策略。
|
||||
|
||||
@ -164,14 +167,15 @@ gpupdate /force
|
||||

|
||||
][19]
|
||||
|
||||
更新 Samba 域组策略
|
||||
*更新 Samba 域组策略*
|
||||
|
||||
13、最后,重启你的电脑,当你准备登录进入系统的时候,你就会看到登录提示生效了。
|
||||
|
||||
13、最后,重启你的电脑,当你准备登录进入系统的时候,你就会看到登录提示生效了。
|
||||
[
|
||||

|
||||
][20]
|
||||
|
||||
Samba4 AD 域控制器登录提示
|
||||
*Samba4 AD 域控制器登录提示*
|
||||
|
||||
就写到这里吧!组策略是一个操作起来很繁琐和很谨慎的主题,在管理系统的过程中你得非常的小心。还有,注意你设置的组策略不会以任何方式应用到已加入域的 Linux 系统中。
|
||||
|
||||
@ -184,17 +188,17 @@ Samba4 AD 域控制器登录提示
|
||||
|
||||
via: http://www.tecmint.com/manage-samba4-dns-group-policy-from-windows/
|
||||
|
||||
作者:[Matei Cezar ][a]
|
||||
作者:[Matei Cezar][a]
|
||||
译者:[rusking](https://github.com/rusking)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.tecmint.com/author/cezarmatei/
|
||||
[1]:http://www.tecmint.com/install-samba4-active-directory-ubuntu/
|
||||
[2]:http://www.tecmint.com/manage-samba4-active-directory-linux-command-line/
|
||||
[3]:http://www.tecmint.com/manage-samba4-ad-from-windows-via-rsat/
|
||||
[4]:http://www.tecmint.com/manage-samba4-ad-from-windows-via-rsat/
|
||||
[1]:https://linux.cn/article-8065-1.html
|
||||
[2]:https://linux.cn/article-8070-1.html
|
||||
[3]:https://linux.cn/article-8097-1.html
|
||||
[4]:https://linux.cn/article-8097-1.html
|
||||
[5]:http://www.tecmint.com/wp-content/uploads/2016/12/Connect-Samba4-DNS-on-Windows.png
|
||||
[6]:http://www.tecmint.com/wp-content/uploads/2016/12/Add-DNS-A-Record.png
|
||||
[7]:http://www.tecmint.com/set-add-static-ip-address-in-linux/
|
36
published/20170116 Terrible Ideas in Git.md
Normal file
36
published/20170116 Terrible Ideas in Git.md
Normal file
@ -0,0 +1,36 @@
|
||||
Git 中的那些可怕的事
|
||||
============================================================
|
||||
|
||||
|
||||

|
||||
|
||||
在 LinuxCon 北美会议上 FutureAdvisor 的 Corey Quinn 说:“Git 的确让你可以做一些超级强大的事。‘强大’,在这次讲演中,这是一种说你愚蠢的委婉说法”。在使用 Git 时,谁没有经历让你感觉自己像个傻子的时刻?当然,Git 是很棒的,每个人都在使用它,你可以用几个基本命令完成你的大部分工作。但它也有一些强大的功能,让我们觉得我们不知道我们在做什么。
|
||||
|
||||
但这真的对我们来说不公平。没有人会知道一切,每个人知道的都不同。Quinn 提醒我们:“在我许多讲演的问答部分,人们有时举手说:“嗯,我有一个傻问题。” 你看到人们在那里说:“是啊!这是一个非常愚蠢的问题”。但是当他们得到答案时,那些这么说的人也正在低头记笔记。
|
||||
|
||||

|
||||
|
||||
Quinn 在演讲的开始做了一些有趣的演示,演示了一些你可以用 Git 做到的可怕的事情,例如变基主干然后进行强制推送来搞乱整个项目、胡乱输入一些命令让 git 吐槽、提交大型二进制文件等。然后他演示了如何使这些可怕的事情不怎么可怕,如更加明智地管理大型二进制文件。“你可以提交大型二进制文件,你可以在 Git 中暴力提交,如果你需要存储大的二进制文件,这里有两个工具会可以加速载入,一个是 git-annex,这是由 Debian 开发人员 Joey Hess 开发的,而 git-lfs 是由 GitHub 支持的。”
|
||||
|
||||
你经常同样地错误输入么?例如,当你想要 `git status` 时却输入 `git stitis`?Quinn 有一个方案:“Git 有内置的别名支持,所以你可以将相对较长、复杂的东西命名为一个短的 Git 命令。” 此外,你还可以使用 shell 别名。
|
||||
|
||||
Quinn 说:“我们都听说过变基主干然后强制推送这样的搞笑恶作剧,它会改变版本历史,突然发生的事情让所有人都措手不及,每个人都被卷入了这种混乱当中。一群鲸鱼被称为“pod”,一群乌鸦中被称为“谋杀”,一群开发者被称为“合并冲突”……更严重的是,如果有人干了这种事情,你有几个选择。包括从备份中恢复主干,还原提交;或者把责任人从屋顶上尖叫着扔下去。或者,采取一定的预防措施并使用一个并不知名的 Git 功能称为分支保护。启用分支保护后,无法删除或强制推送分支,并且在接受前,拉取请求(pull request)必须至少有一个审核。”
|
||||
|
||||
Quinn 演示了几个更奇妙的有用的工具,使 Git 更高效和万无一失,如 mr、vcsh 和定制的 shell 提示。你可以在下面看到完整的视频,了解更多有趣的事情。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.linux.com/news/event/LinuxCon-Europe/2016/terrible-ideas-git-0
|
||||
|
||||
作者:[CARLA SCHRODER][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[Bestony](https://github.com/Bestony)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.linux.com/users/cschroder
|
||||
[1]:https://www.linux.com/licenses/category/used-permission
|
||||
[2]:https://www.linux.com/licenses/category/linux-foundation
|
||||
[3]:https://www.linux.com/files/images/heffalump-git-corey-quinnpng-0
|
||||
[4]:https://www.linux.com/files/images/corey-quinn-lcnapng
|
||||
[5]:http://events.linuxfoundation.org/events/linuxcon-north-america
|
@ -1,21 +1,21 @@
|
||||
[远程在 Atomic 主机上使用 Docker][1]
|
||||
---------------------
|
||||
在 Atomic 主机上远程使用 Docker
|
||||
==========
|
||||
|
||||

|
||||

|
||||
|
||||
来自 [Atomic 项目][2] 的 Atomic 主机是一个基于轻量级容器的操作系统,它可以运行 Linux 容器。它已被优化为用作云环境的容器运行时系统。例如,它可以托管 Docker 守护进程和容器。有时,你可能需要在该主机上运行 docker 命令,并从其他地方管理服务器。本文介绍如何远程访问 Fedora Atomic 主机上的[Docker][3]守护进程,[你可以在这里下载到它][4]。整个过程由[Ansible][5]自动完成 - 在涉及到自动化的一切上,这是一个伟大的工具。
|
||||
来自 [Atomic 项目][2] 的 Atomic 主机是一个轻量级的容器基于的操作系统,它可以运行 Linux 容器。它已被优化为用作云环境的容器运行时系统。例如,它可以托管 Docker 守护进程和容器。有时,你可能需要在该主机上运行 docker 命令,并从其他地方管理服务器。本文介绍如何远程访问 Fedora Atomic 主机([你可以在这里下载到它][4])上的 [Docker][3] 守护进程。整个过程由 [Ansible][5] 自动完成 - 在涉及到自动化的一切上,这真是一个伟大的工具!
|
||||
|
||||
### 一份安全笔记
|
||||
### 安全备忘录
|
||||
|
||||
由于我们通过网络连接,所以我们使用[TLS][6]保护 Docker 守护进程。此过程需要客户端证书和服务器证书。OpenSSL 包用于创建用于建立 TLS 连接的证书密钥。这里,Atomic 主机运行守护程序,我们的本地的 [Fedora Workstation][7] 充当客户端。
|
||||
由于我们通过网络连接,所以我们使用 [TLS][6] 保护 Docker 守护进程。此过程需要客户端证书和服务器证书。OpenSSL 包用于创建用于建立 TLS 连接的证书密钥。这里,Atomic 主机运行守护程序,我们的本地的 [Fedora Workstation][7] 充当客户端。
|
||||
|
||||
在你按照这些步骤进行之前,请注意,_任何_在客户端上可以访问 TLS 证书的进程在服务器上具有**完全根访问权限。** 因此,客户端可以在服务器上做任何它想做的事情。因此,我们需要仅向可信任的特定客户端主机授予证书访问权限。你应该将客户端证书仅复制到完全由你控制的客户端主机。即使在这种情况下,客户端机器的安全也至关重要。
|
||||
在你按照这些步骤进行之前,请注意,_任何_在客户端上可以访问 TLS 证书的进程在服务器上具有**完全的 root 访问权限**。 因此,客户端可以在服务器上做任何它想做的事情。我们需要仅向可信任的特定客户端主机授予证书访问权限。你应该将客户端证书仅复制到完全由你控制的客户端主机。但即使在这种情况下,客户端机器的安全也至关重要。
|
||||
|
||||
但是,此方法只是远程访问守护程序的一种方法。编排工具通常提供更安全的控制。下面的简单方法适用于个人实验,但可能不适合开放式网络。
|
||||
不过,此方法只是远程访问守护程序的一种方法。编排工具通常提供更安全的控制。下面的简单方法适用于个人实验,可能不适合开放式网络。
|
||||
|
||||
### 获取 Ansible role
|
||||
|
||||
[Chris Houseknecht][8] 写了一个 Ansible role,它会创造所需的所有证书。这样,你不需要手动运行 _openssl_ 命令了。 这些在[ Ansible role 仓库][9]中提供。将它克隆到你当前的工作主机。
|
||||
[Chris Houseknecht][8] 写了一个 Ansible role,它会创造所需的所有证书。这样,你不需要手动运行 `openssl` 命令了。 这些在 [Ansible role 仓库][9]中提供。将它克隆到你当前的工作主机。
|
||||
|
||||
```
|
||||
$ mkdir docker-remote-access
|
||||
@ -25,7 +25,7 @@ $ git clone https://github.com/ansible/role-secure-docker-daemon.git
|
||||
|
||||
### 创建配置文件
|
||||
|
||||
接下来,你必须创建 Ansible 配置文件、inventory 和 playbook 文件以设置客户端和守护进程。以下说明在 Atomic 主机上创建客户端和服务器证书。然后,获取客户端证书到本地。最后,它们会配置守护进程以及客户端,使它们能彼此交互。
|
||||
接下来,你必须创建 Ansible 配置文件、清单(inventory)和剧本(playbook)文件以设置客户端和守护进程。以下说明在 Atomic 主机上创建客户端和服务器证书。然后,获取客户端证书到本地。最后,它们会配置守护进程以及客户端,使它们能彼此交互。
|
||||
|
||||
这里是你需要的目录结构。如下所示,创建下面的每个文件。
|
||||
|
||||
@ -38,29 +38,34 @@ docker-remote-access/
|
||||
└── role-secure-docker-daemon
|
||||
```
|
||||
|
||||
### _ansible.cfg_
|
||||
`ansible.cfg`:
|
||||
|
||||
```
|
||||
$ vim ansible.cfg
|
||||
$ vim ansible.cfg
|
||||
```
|
||||
```
|
||||
[defaults]
|
||||
inventory=inventory
|
||||
```
|
||||
|
||||
### _inventory_
|
||||
清单文件(`inventory`):
|
||||
|
||||
```
|
||||
$ vim inventory
|
||||
$ vim inventory
|
||||
```
|
||||
```
|
||||
[daemonhost]
|
||||
'IP_OF_ATOMIC_HOST' ansible_ssh_private_key_file='PRIVATE_KEY_FILE'
|
||||
```
|
||||
|
||||
将 inventory 中的 _IP_OF_ATOMIC_HOST_ 替换为 Atomic 主机的 IP。将 _PRIVATE_KEY_FILE_ 替换为本地系统上的 SSH 私钥文件的位置。
|
||||
将清单文件(`inventory`) 中的 `IP_OF_ATOMIC_HOST` 替换为 Atomic 主机的 IP。将 `PRIVATE_KEY_FILE` 替换为本地系统上的 SSH 私钥文件的位置。
|
||||
|
||||
### _remote-access.yml_
|
||||
剧本文件(`remote-access.yml`):
|
||||
|
||||
```
|
||||
$ vim remote-access.yml
|
||||
---
|
||||
```
|
||||
```
|
||||
- name: Docker Client Set up
|
||||
hosts: daemonhost
|
||||
gather_facts: no
|
||||
@ -130,7 +135,7 @@ $ vim remote-access.yml
|
||||
|
||||
### 访问 Atomic 主机
|
||||
|
||||
现在运行 Ansible playbook:
|
||||
现在运行 Ansible 剧本:
|
||||
|
||||
```
|
||||
$ ansible-playbook remote-access.yml
|
||||
@ -138,9 +143,9 @@ $ ansible-playbook remote-access.yml
|
||||
|
||||
确保 tcp 端口 2376 在你的 Atomic 主机上打开了。如果你在使用 Openstack,请在安全规则中添加 TCP 端口 2376。 如果你使用 AWS,请将其添加到你的安全组。
|
||||
|
||||
现在,在你的工作站上作为普通用户运行的 _docker_ 命令与 Atomic 主机的守护进程通信了,并在那里执行命令。你不需要手动 _ssh_ 或在 Atomic 主机上发出命令。这允许你远程、轻松、安全地启动容器化应用程序。
|
||||
现在,在你的工作站上作为普通用户运行的 `docker` 命令与 Atomic 主机的守护进程通信,并在那里执行命令。你不需要手动 `ssh` 或在 Atomic 主机上发出命令。这可以让你远程、轻松、安全地启动容器化应用程序。
|
||||
|
||||
如果你想克隆 playbook 和配置文件,这里有[一个可用的 git 仓库][10]。
|
||||
如果你想克隆 Ansible 剧本和配置文件,这里是 [git 仓库][10]。
|
||||
|
||||
[
|
||||

|
||||
@ -152,7 +157,7 @@ via: https://fedoramagazine.org/use-docker-remotely-atomic-host/
|
||||
|
||||
作者:[Trishna Guha][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,37 @@
|
||||
我需要在 AGPLv3 许可证下提供源码么?
|
||||
============================================================
|
||||
|
||||

|
||||
|
||||
图片提供:opensource.com
|
||||
|
||||
[GNU Affero 通用公共许可证版本 3][1](AGPLv3)是与 GPLv3 几乎相同的左版(copyleft)许可证。两个许可证具有相同的公共版权范围,但在一个重要方面有重大差异。 AGPLv3 的第 13 节规定了 GPLv2 或 GPLv3 中不存在的附加条件:
|
||||
|
||||
> 在本许可证的其它条款之外,如果你修改了程序,你必须把你修改的版本,给你的那些使用计算机网络远程(如果你的版本支持此类交互)与之交互的用户,明确提供一个通过一些标准或者常规的复制手段,从网络服务器上免费获得与你所修改的版本相匹配的源码的机会。
|
||||
|
||||
这个“通过计算机网络远程交互”的范围主要被认为是 SaaS 部署的情形,尽管其实际上读起来的意思超乎了惯例的 SaaS 部署情形。其目标是解决在用户在使用像 Web Services 这样的功能时,其代码没有公开的常规 GPL 协议所暴露出的漏洞。因此,该协议的第 13 节,在 GPLv2 第 3 节以及 GPLv3 和 AGPLv3 第 6 节中包含的目标代码分发的触发要求之外,提供了额外的源代码公开的要求。
|
||||
|
||||
常常被误解的是,AGPLv3 第 13 节中的源代码分发要求仅在 AGPLv3 软件已被“你”(例如,提供网络服务的实体)修改的地方才触发。我的理解是,只要“你”不修改 AGPLv3 的代码,许可证就不应该被理解为需要按照第 13 节规定的方式访问相应的源码。如我所见,尽管即使公开许可证中不要求公开的源代码也是一个好主意,但在 AGPL 下许多未修改以及标准部署的软件模块根本不会触发第 13 节。
|
||||
|
||||
如何解释 AGPL 的条款和条件,包括 AGPL 软件是否已被修改,可能需要根据具体情况的事实和细节进行法律层面的分析。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
作者简介:
|
||||
|
||||

|
||||
|
||||
Jeffrey R. Kaufman 是全球领先的开源软件解决方案提供商 Red Hat 公司的开源 IP 律师。Jeffrey 也是托马斯·杰斐逊法学院的兼职教授。在入职 Red Hat 之前,Jeffrey 曾经担任高通公司的专利顾问,向首席科学家办公室提供开源顾问。Jeffrey 在 RFID、条形码、图像处理和打印技术方面拥有多项专利。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/17/1/providing-corresponding-source-agplv3-license
|
||||
|
||||
作者:[Jeffrey Robert Kaufman][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[Bestony](https://github.com/Bestony)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://opensource.com/users/jkaufman
|
||||
[1]:https://www.gnu.org/licenses/agpl-3.0-standalone.html
|
@ -0,0 +1,71 @@
|
||||
为何 Linux 安装器需要添加安全功能
|
||||
============================================================
|
||||
|
||||
> 由于安全问题越来越严重,Linux 发行版需要在安装程序中突出显示基本安全选项,而不是让用户稍后手动添加这些选项。
|
||||
|
||||
十二年前,Linux 发行版努力使安装变得简单。在 Ubuntu 和 Fedora 的引领下,它们很早就实现了这一目标。现在,随着对安全性越来越关注,它们需要稍微转变下方向,并在安装程序中突出显示基本安全选项,而不是让用户稍后手动添加这些选项。
|
||||
|
||||
当然,即便是在最好的情况下,说服用户来设置安全功能都是困难的。太多用户甚至不愿意添加如非特权用户帐户或密码这样简单的功能,他们显然更喜欢用重装或者以每小时 80 美元的价格咨询专家来减少风险。
|
||||
|
||||
然而,即便一般用户不会专门注意安全,但他也可能会在安装过程中注意。他们可能永远不会再想到它,但也许在安装过程中,当他们的注意力集中时,特别是如果有可见的在线帮助来解释其好处时,他们可能被说服选择一个复选框。
|
||||
|
||||
这种转变也并不伟大。许多安装程序已经提供了自动登录的选择 - 这对于不包含个人数据的安装来说或许是可以接受的功能,但更可能会被那些觉得登录不方便的用户使用。同样感谢 Ubuntu,它选择加密文件系统 - 至少在主目录中是这样 - 它已经成为许多安装程序的标准。我真正建议的也是这样的。
|
||||
|
||||
此外,外部安装程序如 Firefox 已经无缝合并了隐私浏览,而 [Signal Private Messenger][8] 则是一个可替代标准 的 Android 手机和联系人的应用程序。
|
||||
|
||||
这些建议远不算激进。它只需要意志和想象力来实现它。
|
||||
|
||||
### Linux 安全第一步
|
||||
|
||||
应该将什么类型的安全功能添加到安装程序呢?
|
||||
|
||||
首先是防火墙。有许多图形界面程序可以设置防火墙。尽管十七年的经验,但是就像拜伦对柯尔律治的形而上的思想的讨论一样,我有时还是希望有人能来解释一下。
|
||||
|
||||
尽管出于好意,大多数防火墙工具对 iptables 的处理看起来都很直接。有一个现在已经停止维护的加固系统 [Bastille Linux][9] 可以用于安装一个基本的防火墙,我看不出为什么其他发行版做不到同样的事情。
|
||||
|
||||
一些工具可以用于安装后处理,并且对于安装器而言可以毫无困难地添加使用。例如,对于 [Grub 2][10],这个大多数发行版使用的引导管理器包含了基本密码保护。诚然,密码可以通过 Live CD 绕过,但它仍然在包括远程登录在内的日常情况下提供一定程度的保护。
|
||||
|
||||
类似地,一个类似于 [pwgen][11] 的密码生成器也可以添加到安装程序设置帐户的环节。这些工具强制可接受密码的长度、以及它们的大小写字母、数字和特殊字符的组合。它们许多都可以为你生成密码,有些甚至可以使生成的密码可拼读,以便你记住密码。
|
||||
|
||||
还有些工具也可以添加到安装过程的这个部分。例如,安装程序可以请求定期备份的计划,并添加一个计划任务和一个类似 [kbackup][12] 的简单的备份工具。
|
||||
|
||||
那么加密电子邮件怎么办?如今最流行的邮件阅读器包括了加密邮件的能力,但是设置和使用加密需要用户采取额外的设置,这使常见的任务复杂化,以至于用户会忽略它。然而,看看 Signal 在手机上的加密有多么简单,很显然,在笔记本电脑和工作站上加密会更容易。大多数发行版可能都喜欢对等加密,而不喜欢 Signal 那样的集中式服务器,但像 [Ring][13] 这样的程序可以提供这种功能。
|
||||
|
||||
无论在安装程序中添加了什么功能,也许这些预防措施也可以扩展到生产力软件,如 LibreOffice。大多数安全工作都集中在电子邮件、网络浏览和聊天中,但文字处理程序和电子表格及其宏语言,是一个明显的恶意软件感染的来源和隐私关注点。除了像 [Qubes OS][14] 或 [Subgraph][15] 这样的几个例外之外,很少有人努力将生产力软件纳入其安全预防措施 - 这可能会留下一个安全漏洞空缺。
|
||||
|
||||
### 适应现代
|
||||
|
||||
当然,在意安全的用户也许会采取一些安全的方法,这样的用户可以为自己负责。
|
||||
|
||||
我关心的是那些不太了解安全或不太愿意自己做修补的用户。我们越来越需要易于使用的安全性,并且亟待解决。
|
||||
|
||||
这些例子只是开始。所需要的工具大多数已经存在,只是需要以这样的方式来实现它们,使得用户不能忽略它们,并且能够不用懂什么就可以使用它们。可能实现所有这些只需要一个人月而已,包括原型、UI 设计和测试等等。
|
||||
|
||||
然而,在添加这些功能前,大多数主流的 Linux 发行版几乎不能说是关注到了安全性。毕竟,如果用户从不使用它们,那怎么会是好工具?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.datamation.com/security/why-linux-installers-need-to-add-security-features.html
|
||||
|
||||
作者:[Bruce Byfield][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[Bestony](https://github.com/Bestony), [wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.datamation.com/author/Bruce-Byfield-6030.html
|
||||
[1]:http://www.datamation.com/feedback/http://www.datamation.com/security/why-linux-installers-need-to-add-security-features.html
|
||||
[2]:http://www.datamation.com/author/Bruce-Byfield-6030.html
|
||||
[3]:http://www.datamation.com/e-mail/http://www.datamation.com/security/why-linux-installers-need-to-add-security-features.html
|
||||
[4]:http://www.datamation.com/print/http://www.datamation.com/security/why-linux-installers-need-to-add-security-features.html
|
||||
[5]:http://www.datamation.com/security/why-linux-installers-need-to-add-security-features.html#comment_form
|
||||
[6]:http://www.datamation.com/security/why-linux-installers-need-to-add-security-features.html#
|
||||
[7]:http://www.datamation.com/author/Bruce-Byfield-6030.html
|
||||
[8]:https://whispersystems.org/
|
||||
[9]:http://bastille-linux.sourceforge.net/
|
||||
[10]:https://help.ubuntu.com/community/Grub2/Passwords
|
||||
[11]:http://pwgen-win.sourceforge.net/downloads.html
|
||||
[12]:http://kbackup.sourceforge.net/
|
||||
[13]:https://savannah.gnu.org/projects/ring/
|
||||
[14]:https://www.qubes-os.org/
|
||||
[15]:https://subgraph.com/sgos/
|
@ -0,0 +1,77 @@
|
||||
将 Tuleap 用于软件项目管理
|
||||
============================================================
|
||||
|
||||
> Tuleap 正在被 Eclipse 基金会使用,用来取代 Bugzilla
|
||||
|
||||

|
||||
|
||||
图片提供:opensource.com
|
||||
|
||||
Tuleap 是一个独特的开源项目管理工具,目前发展势头很好,现在,每个月它会出一个大版本。它还被列在 [2015 年五大开源项目管理工具][1]和 [2016 年十一个名列前茅项目管理工具][2]中。
|
||||
|
||||
Manuel Vacelet 是开发 Tuleap 项目的 Enalean 公司的联合创始人和 CTO,他说:“Tuleap 是一个完整用于托管软件项目的 GPLv2 平台,它提供了一个集中化的平台,在这里,团队可以找到他们所需的所有工具,追踪他们软件项目的生命周期。他们可以找到项目管理(Scrum、看板、瀑布、混合等等)、源码控制(git 和 svn)和代码审查(pull 请求和 gerrit)、持续集成、问题跟踪、wiki 和文档等的支持。”
|
||||
|
||||
在这次采访中,我会和 Manuel 讨论如何开始使用它,以及如何以开源方式管理 Tuleap。
|
||||
|
||||
**Nitish Tiwari(以下简称 NT): 为什么 Tuleap 项目很重要? **
|
||||
|
||||
**Manuel Vacelet(以下简称 MV):** Tuleap 很重要是因为我们坚信一个成功的(软件)项目必须涉及所有利益相关者:开发人员、项目经理、QA、客户和用户。
|
||||
|
||||
很久以前,我还是一个 SourceForge 衍生项目的实习生(当时 SourceForge 还是一个自由开源项目),几年后它变成了 Tuleap。 我的第一个贡献是将 PhpWiki 集成到该工具中(不要告诉任何人,代码写的很糟)。
|
||||
|
||||
现在,我很高兴作为首席技术官和产品负责人在 Enalean 工作,该公司是 Tuleap 项目的主要贡献公司。
|
||||
|
||||
**NT:让我们聊聊技术方面。**
|
||||
|
||||
**MV:** Tuleap 核心系统是基于 LAMP 并且架构于 CentOS 之上。如今的开发栈是 AngularJS (v1)、REST 后端(PHP)、基于 NodeJS 的实时推送服务器。但如果你想成为一名 Tuleap 全栈开发人员,你还将需要接触 bash、Perl、Python、Docker、Make 等等。
|
||||
|
||||
说到技术方面,需要重点强调的 Tuleap 的一个显著特征是它的可扩展性。一个运行在单服务器上的 Tuleap 单一实例、并且没有复杂的 IT 架构,可以处理超过 10000 人的访问。
|
||||
|
||||
**NT:给我们说下该项目的用户和社区。有谁参与?他们如何使用这个工具?**
|
||||
|
||||
**MV:** 用户非常多样化。从使用 Tuleap 跟踪他们的项目进度并管理他们的源代码的小型初创公司,到非常大的公司,如法国电信运营商 Orange,它为超过 17000 用户部署了它,并托管了 5000 个项目。
|
||||
|
||||
许多用户依靠 Tuleap 来促进敏捷项目并跟踪其进度。开发人员和客户共享同一个工作区。客户不需要学习如何使用 GitHub,也不需要开发人员做额外的工作,就可以将其工作转换到“客户可访问”平台。
|
||||
|
||||
今年,Tuleap 被 [Eclipse 基金会][3]所使用,取代了 Bugzilla。
|
||||
|
||||
印度电子信息技术部使用 Tuleap 创建了印度政府开放电子政务的开放式协作开发平台。
|
||||
|
||||
Tuleap 有多种不同的使用方式和配置。有些人使用它作为 Drupal 客户门户网站的后端; 它们通过 REST API 插入到 Tuleap 中以管理 bug 和服务请求。
|
||||
|
||||
甚至一些建筑师也使用它来管理他们的工作进度和 AutoCAD 文件。
|
||||
|
||||
**NT:Tuleap 是否做了一些特别的事,使社区更安全,更多样化?**
|
||||
|
||||
**MV:** 我们还没有创建“行为准则”;本社区非常平和而欢迎新人,但我们有计划这样做。Tuleap 的开发人员和贡献者来自不同的国家(例如加拿大、突尼斯、法国)。而且 35% 的活跃开发者和贡献者是女性。
|
||||
|
||||
**NT:由社区提议的 Tuleap 功能的百分比是多少?**
|
||||
|
||||
**MV:** 几乎 100% 的功能是由社区驱动的。
|
||||
|
||||
这是 Enalean 的关键挑战之一:找到一种商业模式,使我们能以正确的方式做开源软件。对我们来说,“开放核心”模式(其中应用程序的核心是开放的,但有趣和有用的部分是封闭源的)不是正确的方法,因为你最终还是要依赖闭源。因此,我们发明了 [OpenRoadmap][4],这种方式是我们从社区和最终用户那里收集需求,并找公司来为此买单。
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
作者简介:
|
||||
|
||||

|
||||
|
||||
Nitish 是一名专业的软件开发人员并对开源有热情。作为一本基于 Linux 的杂志的技术作者,他会尝试新的开源工具。他喜欢阅读和探索任何开源相关的事情。在他的空闲时间,他喜欢读励志书。他目前正在构建 DevUp - 一个让开发人员以真正的方式连接所有工具和拥抱 DevOps 的平台。你可以在 Twitter 上关注他 @tiwari_nitish。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/17/1/interview-Tuleap-project
|
||||
|
||||
作者:[Nitish Tiwari][a]
|
||||
译者:[geekpi](https://github.com/geeki)
|
||||
校对:[jamsinepeng](https://github.com/jasminepeng)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://opensource.com/users/tiwarinitish86
|
||||
[1]:https://opensource.com/business/15/1/top-project-management-tools-2015
|
||||
[2]:https://opensource.com/business/16/3/top-project-management-tools-2016
|
||||
[3]:http://www.eclipse.org/
|
||||
[4]:https://blog.enalean.com/enalean-open-roadmap-how-it-works/
|
@ -0,0 +1,54 @@
|
||||
长期维护嵌入式 Linux 内核变得容易
|
||||
============================================================
|
||||
|
||||

|
||||
|
||||
*Pengutronix 内核黑客 Jan Lübbe 总结了嵌入式 Linux 中正在不断增长的安全威胁,并在这次欧洲嵌入式 Linux 会议上概述了一个计划,以保持长期设备的安全和功能完整。* [Linux 基金会][1]
|
||||
|
||||
安全漏洞只发生在 Windows 上的好日子正在快速过去。恶意软件黑客和拒绝服务老手们正在越来越多地瞄准过时的嵌入式 Linux 设备,因此在 10 月的[<ruby>欧洲嵌入式 Linux 会议<rt>Embedded Linux Conference Europe</rt></ruby>][3](ELCE)上的几个演讲的主题就与修复 Linux 安全漏洞相关。
|
||||
|
||||
最值得去听的讲演之一是 [Pengutronix][4] 内核黑客 Jan Lübbe 的《长期维护或管理(或免管理)嵌入式系统 10 年以上》。在总结嵌入式 Linux 中不断增长的安全威胁后,Lübbe 制定了一项计划,以确保长期设备的安全和功能完整。 Lübbe 说:“我们需要迁移到更新、更稳定的内核,并进行持续维护以修复关键漏洞。我们需要做上游更新和自动化流程,并建立一个可持续的工作流程。我们没有理由让系统中仍留有过时的软件。”
|
||||
|
||||
随着 Linux 设备变得越来越老,传统的生命周期过程已经不再适用。 Lübbe 说:“通常,你会从 SoC 供应商或主线上获取内核、构建系统,并添加到用户空间。你可以定制和添加程序,并做一些测试。但是,在此之后有 15 年的维护阶段,你最好期望平台不会发生变化、不会想要添加新的功能、不需要实施管理调整。”
|
||||
|
||||
所有这些变化,越来越多地导致你的系统暴露出新的错误,并需要大量更新以才能与上游软件保持同步。 Lübbe 说:“在内核中发生导致问题的错误并不总是无意的”。对于去年在 Allwinner 内核中发现的[后门][5],他又补充说:“这些供应商的内核从来不会执行主线内核社区的审查流程”。
|
||||
|
||||
Lübbe 继续说:“你不能认为你的供应商一直没问题。也许只有一两个工程师查看过后门代码这块。如果补丁发布在 Linux 内核邮件列表上,就不会有这种事,因为总会有人注意到。硬件供应商不关心安全或维护,也许你会在一两年后得到更新,但是即使这样,他们从一个固定版本开始开发,到他们发布稳定的版本通常需要几年的时间。如果你在这个基础上再开始开发,可能又过了半年,这就更过时了。”
|
||||
|
||||
越来越多的嵌入式开发人员在<ruby>长期稳定<rt>Long Term Stable</rt></ruby>(LTS)内核上构建长期产品。但这并不意味着没事了。Lübbe 说:“一个产品发布后,人们经常不再遵循稳定的发行链,也不再应用安全补丁。这样你会得到两个最糟糕的结果:过时的内核和没有安全性。你失去了多人测试的好处。”
|
||||
|
||||
Lübbe 指出,使用像 Red Hat 这样的面向服务器的发行版的 Pengutronix 客户经常由于快速的定制、需要系统管理员干预的部署和升级系统而遇到问题。
|
||||
|
||||
“更新对一些东西有用,特别是在 x86 上,但每个项目基本上是自己建立基础设施来更新到新版本。”
|
||||
|
||||
许多开发人员选择把向后移植作为更新长期产品的解决方案。Lübbe 说:“开始时很容易,但是一旦你不处于项目的维护范围,他们就不会告诉你所使用的版本是否受到一个 bug 的影响,因此很难判断一个修复是否相关。于是你不停打补丁和更新,而 bug 也在不断累积,而这些你必须自己维护,因为其他人不使用这些补丁。使用开源软件的好处就丢失了。”
|
||||
|
||||
### 跟随上游项目
|
||||
|
||||
Lübbe 认为,最好的解决方案是跟踪由上游项目维护的版本。“我们主要关注基于主线内核的开发,所以我们在产品和主流内核及其他上游项目之间尽可能没有差别。长期系统在主线内核上得到很好的支持。大多数不使用 3D 图形的系统只需要很少的补丁。较新的内核版本还有很多[新的强化功能][6],这些可以减少漏洞的影响。
|
||||
|
||||
跟随主线发展对许多开发人员来说似乎令人畏惧,但是如果从一开始就这样,然后坚持下去,就会相对容易一些,Lübbe 说:“你需要为系统上做的一切制定流程。你总需要知道什么软件正在运行,这在使用良好的构建系统时会更容易。每个软件版本应定义完整的系统,以便你可以更新相关的一切。如果你不知道那里有什么,你就不能解决它。你也需要一个自动测试和自动部署更新。”
|
||||
|
||||
为了“减少更新周期”,Lübbe 建议在开始开发时使用最新的 Linux 内核,并且在进入测试时才转到稳定的内核。之后,他建议每年将系统中的所有软件(包括内核、构建系统、用户空间、glibc 和组件(如 OpenSSL))更新为当年上游项目支持的版本。
|
||||
|
||||
Lübbe 说:“得到更新并不意味着你需要部署。如果没有看到安全漏洞,你可以把补丁放在一边,需要时它再用就行。”
|
||||
|
||||
最后,Lübbe 建议每个月查看发布公告,并且每周检查 CVE 和主线列表上的安全公告。你只需要问自己“该安全公告是否影响到了你”。他补充说:“如果你的内核足够新,就没有太多的工作。你不会希望通过在新闻中看到你的设备才获得有关你的产品的反馈。”
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.linux.com/news/event/ELCE/2017/long-term-embedded-linux-maintenance-made-easier
|
||||
|
||||
作者:[ERIC BROWN][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.linux.com/users/ericstephenbrown
|
||||
[1]:https://www.linux.com/licenses/category/linux-foundation
|
||||
[2]:https://www.linux.com/files/images/jan-lubbe-elcpng
|
||||
[3]:http://events.linuxfoundation.org/events/archive/2016/embedded-linux-conference-europe
|
||||
[4]:http://www.pengutronix.de/index_en.html
|
||||
[5]:http://arstechnica.com/security/2016/05/chinese-arm-vendor-left-developer-backdoor-in-kernel-for-android-pi-devices/
|
||||
[6]:https://www.linux.com/news/event/ELCE/2017hardening-kernel-protect-against-attackers
|
66
published/20170120 How to write web apps in R with Shiny.md
Normal file
66
published/20170120 How to write web apps in R with Shiny.md
Normal file
@ -0,0 +1,66 @@
|
||||
如何用 R 语言的 Shiny 库编写 web 程序
|
||||
============================================================
|
||||

|
||||
|
||||
图片提供: opensource.com
|
||||
|
||||
我这个月在写一些更加长的文章,所以你们可以在几周后再来看看。本月,我想简要地提下我自己一直在玩的一个很棒的 R 库。
|
||||
|
||||
我的一个亲密朋友最近在用 R 编写东西。我一直都对它很感兴趣,也一直在试图挤时间,学习更多关于 R 的知识以及可用它做的事情。探索 R 的超强数字处理能力对我而言有些困难,因为我并不如我朋友那样有一个数学头脑。我进展有点慢,但我一直试图将它与我在其他领域的经验联系起来,我甚至开始考虑非常简单的 web 程序。
|
||||
|
||||
[Shiny][1] 是一个来自 RStudio 的工具包,它让创建 web 程序变得更容易。它能从 R 控制台轻松安装,只需要一行,就可以加载好最新的稳定版本来使用。这里有一个很棒的[教程][2],它可以在前面课程基础上,带着你理解应用架设的概念。 Shiny 的授权是 GPLv3,源代码可以在 [GitHub][3] 上获得。
|
||||
|
||||
这是一个用 Shiny 写的简单的小 web 程序:
|
||||
|
||||
```
|
||||
library(shiny)
|
||||
|
||||
server <- function(input, output, session) {
|
||||
observe({
|
||||
myText <- paste("Value above is: ", input$textIn)
|
||||
updateTextInput(session, "textOut", value=myText)
|
||||
})
|
||||
}
|
||||
|
||||
ui <- basicPage(
|
||||
h3("My very own sample application!"),
|
||||
textInput("textIn", "Input goes here, please."),
|
||||
textInput("textOut", "Results will be printed in this box")
|
||||
)
|
||||
|
||||
shinyApp(ui = ui, server = server)
|
||||
```
|
||||
|
||||
当你在输入框中输入文字时,它会被复制到输出框中提示语后。这并没有什么奇特的,但它向你展示了一个 Shiny 程序的基本结构。“server”部分允许你处理所有后端工作,如计算、数据库检索或程序需要发生的任何其他操作。“ui”部分定义了接口,它可以根据需要变得简单或复杂。
|
||||
|
||||
包括在 Shiny 中的 [Bootstrap][4] 有了大量样式和主题,所以在学习了一点后,就能用 R 创建大量功能丰富的 web 程序。使用附加包可以将功能扩展到更高级的 JavaScript 程序、模板等。
|
||||
|
||||
有几种方式处理 Shiny 的后端工作。如果你只是在本地运行你的程序,加载库就能做到。对于想要发布到网络上的程序,你可以在 [RStudio 的 Shiny 网站][5]上共享它们,运行开源版本的 Shiny 服务器,或通过按年订阅服务从 RStudio 处购买 Shiny Server Pro。
|
||||
|
||||
经验丰富的 R 大牛可能已经知道 Shiny 了;它已经存在大约几年了。对于像我这样来自一个完全不同的编程语言,并且希望学习一点 R 的人来说,它是相当有帮助的。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
作者简介:
|
||||
|
||||

|
||||
|
||||
D Ruth Bavousett - D Ruth Bavousett 作为一名系统管理员和软件开发人员已经很长时间了,她的专业生涯开始于 VAX 11/780。在她的职业生涯(迄今为止)中,她花费了大量的时间在满足库的需求上,她自 2008 年以来一直是 Koha 开源库自动化套件的贡献者. Ruth 目前在休斯敦的 cPanel 任 Perl 开发人员,他也作为首席员工效力于双猫公司。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/17/1/writing-new-web-apps-shiny
|
||||
|
||||
作者:[D Ruth Bavousett][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://opensource.com/users/druthb
|
||||
[1]:http://shiny.rstudio.com/
|
||||
[2]:http://shiny.rstudio.com/tutorial
|
||||
[3]:https://github.com/studio/shiny
|
||||
[4]:http://getbootstrap.com/
|
||||
[5]:http://shinyapps.io/
|
@ -0,0 +1,106 @@
|
||||
2017 年 Go 语言编程的五大关注点
|
||||
============================================================
|
||||
|
||||
### 今年像动态插件,Serverless Go 以及 HTTP/2 这些创新对你的开发意味着什么?
|
||||
|
||||
Go 1.8 刚刚发布,它有几个新功能,包括:
|
||||
|
||||
* [HTTP/2 Push][1]
|
||||
* [HTTP 服务器平滑关闭][2]
|
||||
* [插件][3]
|
||||
* [缺省 GOPATH][4]
|
||||
|
||||
这些新功能的影响力取决于你和开发团队如何使用 Go。 自从 Go 1.0 于 2012 年发布以来,其简单性、并发性和内置支持使其保持[普及度][9]不断增长,所以对“Go 擅长什么”的答案一直在增长。
|
||||
|
||||
这里我会提供一些想法,包括新到来的版本及 Go 世界最近其它吸引我的地方。这不是一个详尽的列表,所以请[让我知道][10]你认为在 2017 年 Go 还会发生哪些重要的事。
|
||||
|
||||
### Go 的超级可部署性 + 插件 = 容器、任何东西?
|
||||
|
||||
[1.8 版本][11]已经发布,我已经与其中几个人交谈过添加动态插件会如何影响像容器之类的事物,动态插件是为了加载在编译时不是程序一部分的共享库的代码。 动态插件使容器中的高并发微服务变得更加简单。 你可以轻松地以外部进程的方式加载插件,同时具备在容器中微服务的所有好处:保护你的主进程不会崩溃,并且没有任何东西会搞乱你的内存空间。 对插件的动态支持应该是在 Go 中使用容器的福音。
|
||||
|
||||
*关于专家现场 Go 培训,请注册 [ Go Beyond the Basics][12]。*
|
||||
|
||||
### 跨平台支持仍在吸引开发人员
|
||||
|
||||
在 Go 开源之后的 7 年里,它已被全球采用。[Daniel Whitenack][13] 是一名数据科学家和工程师,他为 Jupyter 维护 Go 内核,告诉我最近他[在西伯利亚做数据科学和 Go 语言培训][14],(是的,在西伯利亚!数据科学和 Go - 之后再细讲一下...)并 “很惊讶地看到那里 Go 社区是如此活跃和积极。” 人们继续在项目中采取 Go 的另一个很大的原因是交叉编译,对此,几个 Go 专家解释说[这在 Go 1.5 版本中变得更容易了][15]。来自其他语言(如 Python)的开发人员应该发现,在没有 VM 的目标平台上,能够为多个操作系统构建捆绑的、可部署的应用程序是在 Go 中工作的关键。
|
||||
|
||||
在 1.8 版本中对跨平台的支持,再加上[提升了 15% 的编译速度][16],你就可以看到为什么 Go 是初创公司最喜欢的语言。
|
||||
|
||||
*有兴趣了解 Go 的基础知识吗?查看 [Go 基础学习路径][17] 让 O’Reilly 专家来带你开始。*
|
||||
|
||||
### Go 解释器在开发中;再见 Read-Eval-Print-Loop
|
||||
|
||||
有一些聪明的家伙正在做一个 [Go 解释器][18],我一定会持续关注它。如你所知的那样,有几个 Read-Eval-Print-Loop(REPL)的解决方案可以用来评估表达式,以确保代码如你预期的工作,但那些方法通常意味着容忍一些不便,或需要费力从几个方案中找到一个适合你的用例的。有一个健壮、一致的解释器就太好了,一旦我了解到更多消息,我会告诉你们。
|
||||
|
||||
*在开发中使用 Go 复杂特性?观看 O'Reilly 的视频训练 [中级 Go ][19]*。
|
||||
|
||||
### Go 的 serverless - 会是什么样子?
|
||||
|
||||
是的,现在围绕 serverless 架构(功能即服务(FaaS))有很多炒作。但有时候也有些捉摸不定的地方,那么关于 Go 的 serverless 发生了什么?我们能在今年看到一个 Go 语言原生支持的 serverless 服务么?
|
||||
|
||||
AWS Lambda 是最知名的 serverless 提供商,不过 Google 最近也推出了 [Google Cloud Functions][20]。这两个 FaaS 解决方案使你可以在无须管理服务器的情况下运行代码,你的代码存储在别人为你管理的服务器集群上,并且仅在触发事件调用它时运行。AWS Lambda 目前支持 JavaScript、Python 和 Java,还可以启动 Go、Ruby 和 bash 进程。 Google Cloud Functions 只支持 JavaScript,但很可能不久将支持 Java 和 Python。许多物联网设备已经使用 serverless 方案,随着 Go 越来越多地被创业公司采用,serverless 似乎是一个可能的增长点,所以我在关注这些 serverless 解决方案中 Go 的开发情况。
|
||||
|
||||
已经有[几个框架][25]可以支持 AWS Lambdas:
|
||||
|
||||
* [λ Gordon][5] - 使用 CloudFormation 创建、连接及部署 AWS Lambdas
|
||||
* [Apex][6] - 构建、部署及管理 AWS Lambda 函数
|
||||
* [Sparta][7] - AWS Lambda 微服务的 Go 框架
|
||||
|
||||
还有一个 AWS Lambda 替代品支持 Go:
|
||||
|
||||
* [Iron.io][8]:建立在 Docker 和 Go 之上;语言未知;支持 Golang、Python、Ruby、PHP 和 .NET
|
||||
|
||||
*有关 serverless 架构的更多信息,请观看 Mike Roberts 在旧金山 O'Reilly 软件架构会议上的演讲主题:[_serverless介绍_][22]。*
|
||||
|
||||
### 数据科学中的 Go
|
||||
|
||||
我在本文开头暗示了这一点:也许令人惊讶的是很多人都在使用 Go 进行数据科学和机器学习。关于它是否适合还有一些争论,但基于像 [Gopher 学院之 2016 年终][23]那样的年度文章中,你会注意到 30 篇文章中至少有 4 篇是关于机器学习或分布式数据处理,它们正在像我们走来。
|
||||
|
||||
我之前关于 Go 的易部署性的观点可能是数据科学家使用 Go 的一个关键原因:他们可以更轻松地在易读而可用于生产环境的应用程序中向他人展示数据模型。与此相结合的是 Go 的广泛使用(正如我前面提到的,它正变得越来越流行!),而且有数据专家创建“可用并且与其它程序配合”的程序。任何使用 Go 构建的应用数据科学家会在公司其他部分使用相同的语言,或者至少它非常适合现代架构。
|
||||
|
||||
*更多关于 Go 的数据科学,Daniel Whitenack 写了一个很好的概述,解释了如何使用它: [Data Science Gophers][24]。*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
作者简介:
|
||||
|
||||

|
||||
|
||||
O'Reilly Media 的监督编辑,与编辑团队合作,涵盖各种各样的编程主题。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://medium.com/@sconant/5-things-to-watch-in-go-programming-in-2017-39cd7a7e58e3#.8t4to5jr1
|
||||
|
||||
作者:[Susan Conant][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://medium.com/@sconant?source=footer_card
|
||||
[1]:https://golang.org/doc/go1.8#h2push
|
||||
[2]:https://golang.org/doc/go1.8#http_shutdown
|
||||
[3]:https://golang.org/doc/go1.8#plugin
|
||||
[4]:https://golang.org/doc/go1.8#gopath
|
||||
[5]:https://github.com/jorgebastida/gordon
|
||||
[6]:https://github.com/apex/apex
|
||||
[7]:http://gosparta.io/
|
||||
[8]:https://www.iron.io/
|
||||
[9]:https://github.com/golang/go/wiki/GoUsers
|
||||
[10]:https://twitter.com/SuConant
|
||||
[11]:https://golang.org/doc/go1.8
|
||||
[12]:https://www.safaribooksonline.com/live-training/courses/go-beyond-the-basics/0636920065357/
|
||||
[13]:https://www.oreilly.com/people/1ea0c-daniel-whitenack
|
||||
[14]:https://devfest.gdg.org.ru/en/
|
||||
[15]:https://medium.com/@rakyll/go-1-5-cross-compilation-488092ba44ec#.7s7sxmc4h
|
||||
[16]:https://golang.org/doc/go1.8#compiler
|
||||
[17]:http://shop.oreilly.com/category/learning-path/go-fundamentals.do
|
||||
[18]:https://github.com/go-interpreter
|
||||
[19]:http://shop.oreilly.com/product/0636920047513.do
|
||||
[20]:https://cloud.google.com/functions/docs/
|
||||
[21]:https://github.com/SerifAndSemaphore/go-serverless-list
|
||||
[22]:https://www.safaribooksonline.com/library/view/oreilly-software-architecture/9781491976142/video288473.html?utm_source=oreilly&utm_medium=newsite&utm_campaign=5-things-to-watch-in-go-programming-body-text-cta
|
||||
[23]:https://blog.gopheracademy.com/series/advent-2016/
|
||||
[24]:https://www.oreilly.com/ideas/data-science-gophers
|
||||
[25]:https://github.com/SerifAndSemaphore/go-serverless-list
|
@ -1,21 +1,9 @@
|
||||
如何在 CentOS 7 中使用 Nginx 和 PHP7-FPM 安装 Nextcloud
|
||||
==========================
|
||||
|
||||
### 导航
|
||||
Nextcloud 是一款自由 (开源) 的类 Dropbox 软件,由 ownCloud 分支演化形成。它使用 PHP 和 JavaScript 编写,支持多种数据库系统,比如 MySQL/MariaDB、PostgreSQL、Oracle 数据库和 SQLite。它可以使你的桌面系统和云服务器中的文件保持同步,Nextcloud 为 Windows、Linux、Mac、安卓以及苹果手机都提供了客户端支持。Nextcloud 并非只是 Dropbox 的克隆,它还提供了很多附加特性,如日历、联系人、计划任务以及流媒体 Ampache。
|
||||
|
||||
1. [步骤 1 - 在 CentOS 7 中安装 Nginx 和 PHP7-FPM][1]
|
||||
2. [步骤 2 - 配置 PHP7-FPM][2]
|
||||
3. [步骤 3 - 安装和配置 MariaDB][3]
|
||||
4. [步骤 4 - 为 Nextcloud 生成一个自签名 SSL 证书][4]
|
||||
5. [步骤 5 - 下载和安装 Nextcloud][5]
|
||||
6. [步骤 6 - 在 Nginx 中为 Nextcloud 配置虚拟主机][6]
|
||||
7. [步骤 7 - 为 Nextcloud 配置 SELinux 和 FirewallD 规则][7]
|
||||
8. [步骤 8 - Nextcloud 安装][8]
|
||||
9. [参考链接][9]
|
||||
|
||||
Nextcloud 是一款自由 (开源) 的类 Dropbox 软件,由 ownCloud 分支演化形成。它使用 PHP 和 JavaScript 编写,支持多种数据库系统,比如 MySQL/MariaDB、PostgreSQL、Oracle 数据库和 SQLite。为了让你的桌面系统和云服务器中的文件能够保持同步,Nextcloud 为 Windows、Linux、Mac、安卓以及苹果手机都提供了客户端支持。Nextcloud 并非只是 Dropbox 的克隆,他还提供了很多附加特性,如日历、联系人、计划任务以及流媒体 Ampache。
|
||||
|
||||
在这片文章中,我将向你展示如何在 CentOS 7 服务器中安装和配置最新版本的 Nextcloud 10。我会通过 Nginx 和 PHP7-FPM 来运行 Nextcloud,同时使用 MariaDB 做为数据库系统。
|
||||
在这篇文章中,我将向你展示如何在 CentOS 7 服务器中安装和配置最新版本的 Nextcloud 10。我会通过 Nginx 和 PHP7-FPM 来运行 Nextcloud,同时使用 MariaDB 做为数据库系统。
|
||||
|
||||
**先决条件**
|
||||
|
||||
@ -58,17 +46,17 @@ php -v
|
||||
|
||||
[][10]
|
||||
|
||||
### 步骤 2 - Configure PHP7-FPM
|
||||
### 步骤 2 - 配置 PHP7-FPM
|
||||
|
||||
在这一个步骤中,我们将配置 php-fpm 与 Nginx 协同运行。Php7-fpm 将使用 nginx 用户来运行,并监听 9000 端口。
|
||||
在这一个步骤中,我们将配置 php-fpm 与 Nginx 协同运行。Php7-fpm 将使用 `nginx` 用户来运行,并监听 `9000` 端口。
|
||||
|
||||
使用 vim 编辑 默认的 php7-fpm 配置文件。
|
||||
使用 vim 编辑默认的 php7-fpm 配置文件。
|
||||
|
||||
```
|
||||
vim /etc/php-fpm.d/www.conf
|
||||
```
|
||||
|
||||
在第 8 行和第 10行,user 和 group 赋值为 '**nginx**'.
|
||||
在第 8 行和第 10行,`user` 和 `group` 赋值为 `nginx`。
|
||||
|
||||
```
|
||||
user = nginx
|
||||
@ -81,7 +69,7 @@ group = nginx
|
||||
listen = 127.0.0.1:9000
|
||||
```
|
||||
|
||||
去注释第 366-370 行,启用 php-fpm 的系统环境变量。
|
||||
取消第 366-370 行的注释,启用 php-fpm 的系统环境变量。
|
||||
|
||||
```
|
||||
env[HOSTNAME] = $HOSTNAME
|
||||
@ -93,7 +81,7 @@ env[TEMP] = /tmp
|
||||
|
||||
保存文件并退出 vim 编辑器。
|
||||
|
||||
下一步,就是在 '/var/lib/' 目录下创建一个新的文件夹 session,并将其拥有者变更为 'nginx' 用户。
|
||||
下一步,就是在 `/var/lib/` 目录下创建一个新的文件夹 `session`,并将其拥有者变更为 `nginx` 用户。
|
||||
|
||||
```
|
||||
mkdir -p /var/lib/php/session
|
||||
@ -116,7 +104,7 @@ PHP7-FPM 配置完成
|
||||
|
||||
### 步骤 3 - 安装和配置 MariaDB
|
||||
|
||||
我这里使用 MariaDB 作为 Nextcloud 的数据库。可以直接使用 yum 命令从 CentOS 默认远程仓库中安装 mariadb-server 包。
|
||||
我这里使用 MariaDB 作为 Nextcloud 的数据库。可以直接使用 `yum` 命令从 CentOS 默认远程仓库中安装 `mariadb-server` 包。
|
||||
|
||||
```
|
||||
yum -y install mariadb mariadb-server
|
||||
@ -135,7 +123,7 @@ systemctl enable mariadb
|
||||
mysql_secure_installation
|
||||
```
|
||||
|
||||
键入 'Y' ,然后设置MariaDB 的 root 密码。
|
||||
键入 `Y` ,然后设置 MariaDB 的 root 密码。
|
||||
|
||||
```
|
||||
Set root password? [Y/n] Y
|
||||
@ -148,13 +136,13 @@ Remove test database and access to it? [Y/n] Y
|
||||
Reload privilege tables now? [Y/n] Y
|
||||
```
|
||||
|
||||
这样就设置好了密码,现在登录到 mysql shell 并为 Nextcloud 创建一个新的数据库和用户。这里我创建名为 '**nextcloud_db**' 的数据库以及名为 '**nextclouduser**' 的用户,用户密码为 '**nextclouduser@**'。当然了,在创建的时候你要需用一个更安全的密码。
|
||||
这样就设置好了密码,现在登录到 mysql shell 并为 Nextcloud 创建一个新的数据库和用户。这里我创建名为 `nextcloud_db` 的数据库以及名为 `nextclouduser` 的用户,用户密码为 `nextclouduser@`。当然了,要给你自己的系统选用一个更安全的密码。
|
||||
|
||||
```
|
||||
mysql -u root -p
|
||||
```
|
||||
|
||||
输入密码即可登录 mysql shell。
|
||||
输入 MariaDB 的 root 密码,即可登录 mysql shell。
|
||||
|
||||
输入以下 mysql 查询语句来创建新的数据库和用户。
|
||||
|
||||
@ -167,11 +155,11 @@ flush privileges;
|
||||
|
||||
[][12]
|
||||
|
||||
nextcloud_db 数据库和 'nextclouduser' 用户创建完成
|
||||
`nextcloud_db` 数据库和 `nextclouduser` 数据库用户创建完成
|
||||
|
||||
### 步骤 4 - 为 Nextcloud 生成一个自签名 SSL 证书
|
||||
|
||||
在教程中,我会让客户端以 https 连接来运行 Nextcloud。你可以使用诸如 let's encrypt 等免费 SSL 证书,或者是自己创建 <g class="gr_ gr_207 gr-alert gr_gramm gr_run_anim Grammar only-ins doubleReplace replaceWithoutSep" id="207" data-gr-id="207">自签名 (self signed)</g> SSL 证书。这里我使用 OpenSSL 来创建自己的自签名 SSL 证书。
|
||||
在教程中,我会让客户端以 https 连接来运行 Nextcloud。你可以使用诸如 let's encrypt 等免费 SSL 证书,或者是自己创建自签名 (self signed) SSL 证书。这里我使用 OpenSSL 来创建自己的自签名 SSL 证书。
|
||||
|
||||
为 SSL 文件创建新目录:
|
||||
|
||||
@ -179,13 +167,13 @@ nextcloud_db 数据库和 'nextclouduser' 用户创建完成
|
||||
mkdir -p /etc/nginx/cert/
|
||||
```
|
||||
|
||||
如下,使用 openssl 生成一个新的 SSL 证书。
|
||||
如下,使用 `openssl` 生成一个新的 SSL 证书。
|
||||
|
||||
```
|
||||
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/nextcloud.crt -keyout /etc/nginx/cert/nextcloud.key
|
||||
```
|
||||
|
||||
最后使用 'chmod' 命令将所有证书文件的权限设置为 '600'。
|
||||
最后使用 `chmod` 命令将所有证书文件的权限设置为 `600`。
|
||||
|
||||
```
|
||||
chmod 700 /etc/nginx/cert
|
||||
@ -196,34 +184,34 @@ chmod 600 /etc/nginx/cert/*
|
||||
|
||||
### 步骤 5 - 下载和安装 Nextcloud
|
||||
|
||||
我直接使用 wget 命令下载 Nextcloud 到服务器上,因此需要先行安装 wget。此外,还需要安装 unzip 来进行解压。使用 'yum' 命令来安装这两个程序。
|
||||
我直接使用 `wget` 命令下载 Nextcloud 到服务器上,因此需要先行安装 `wget`。此外,还需要安装 `unzip` 来进行解压。使用 `yum` 命令来安装这两个程序。
|
||||
|
||||
```
|
||||
yum -y install wget unzip
|
||||
```
|
||||
|
||||
先进入 /tmp 目录,然后使用 wget 从官网下载最新的 Nextcloud 10。
|
||||
先进入 `/tmp` 目录,然后使用 `wget` 从官网下载最新的 Nextcloud 10。
|
||||
|
||||
```
|
||||
cd /tmp
|
||||
wget https://download.nextcloud.com/server/releases/nextcloud-10.0.2.zip
|
||||
```
|
||||
|
||||
解压 Nextcloud,并将其移动到 '/usr/share/nginx/html/' 目录。
|
||||
解压 Nextcloud,并将其移动到 `/usr/share/nginx/html/` 目录。
|
||||
|
||||
```
|
||||
unzip nextcloud-10.0.2.zip
|
||||
mv nextcloud/ /usr/share/nginx/html/
|
||||
```
|
||||
|
||||
下一步,转到 Nginx web 根目录为 Nextcloud 创建一个 'data' 文件夹。
|
||||
下一步,转到 Nginx 的 web 根目录为 Nextcloud 创建一个 `data` 文件夹。
|
||||
|
||||
```
|
||||
cd /usr/share/nginx/html/
|
||||
mkdir -p nextcloud/data/
|
||||
```
|
||||
|
||||
变更 'nextcloud' 目录的拥有者为 'nginx' 用户和组。
|
||||
变更 `nextcloud` 目录的拥有者为 `nginx` 用户和组。
|
||||
|
||||
```
|
||||
chown nginx:nginx -R nextcloud/
|
||||
@ -231,7 +219,7 @@ chown nginx:nginx -R nextcloud/
|
||||
|
||||
### 步骤 6 - 在 Nginx 中为 Nextcloud 配置虚拟主机
|
||||
|
||||
在步骤 5 我们已经下载好了 Nextcloud 源码,并配置好了让它运行于 Nginx 服务器中,但我们还需要为它配置一个虚拟主机。在 Nginx 的 'conf.d' 目录下创建一个新的虚拟主机配置文件 'nextcloud.conf'。
|
||||
在步骤 5 我们已经下载好了 Nextcloud 源码,并配置好了让它运行于 Nginx 服务器中,但我们还需要为它配置一个虚拟主机。在 Nginx 的 `conf.d` 目录下创建一个新的虚拟主机配置文件 `nextcloud.conf`。
|
||||
|
||||
```
|
||||
cd /etc/nginx/conf.d/
|
||||
@ -388,7 +376,7 @@ systemctl restart nginx
|
||||
yum -y install policycoreutils-python
|
||||
```
|
||||
|
||||
然后以 root 用户来运行一下命令,以便让 Nextcloud 运行于 SELinux 环境之下。如果你是用的其他名称的目录,记得将 'nextcloud' 替换掉哦。
|
||||
然后以 root 用户来运行以下命令,以便让 Nextcloud 运行于 SELinux 环境之下。如果你是用的其他名称的目录,记得将 `nextcloud` 替换掉。
|
||||
|
||||
```
|
||||
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/data(/.*)?'
|
||||
@ -410,7 +398,7 @@ systemctl start firewalld
|
||||
systemctl enable firewalld
|
||||
```
|
||||
|
||||
现在使用 firewall-cmd 命令来开启command http 和 https 端口,然后重新加载 firewall。
|
||||
现在使用 `firewall-cmd` 命令来开启 http 和 https 端口,然后重新加载防火墙。
|
||||
|
||||
```
|
||||
firewall-cmd --permanent --add-service=http
|
||||
@ -420,17 +408,17 @@ firewall-cmd --reload
|
||||
|
||||
[][15]
|
||||
|
||||
至此,服务器配置完成
|
||||
至此,服务器配置完成。
|
||||
|
||||
### 步骤 8 - Nextcloud 安装
|
||||
|
||||
打开你的 Web 浏览器,输入你为 Nextcloud 设置的域名,我这里设置为 cloud.nextcloud.co,然后会重定向到安全性更好的 https 连接。
|
||||
打开你的 Web 浏览器,输入你为 Nextcloud 设置的域名,我这里设置为 `cloud.nextcloud.co`,然后会重定向到安全性更好的 https 连接。
|
||||
|
||||
设置你的管理员用户名和密码,然后输入数据验证信息,点击 '**完成安装 (Finish Setup)**'。
|
||||
|
||||
[][16]
|
||||
|
||||
Nextcloud 管理面板 (文件挂了) 大致如下:
|
||||
Nextcloud 管理面板大致如下:
|
||||
|
||||
[][17]
|
||||
|
||||
@ -438,7 +426,7 @@ Nextcloud 用户设置:
|
||||
|
||||
[][18]
|
||||
|
||||
管理设置
|
||||
管理设置:
|
||||
|
||||
[][19]
|
||||
|
||||
@ -460,7 +448,7 @@ via: https://www.howtoforge.com/tutorial/how-to-install-nextcloud-with-nginx-and
|
||||
|
||||
作者:[Muhammad Arul][a]
|
||||
译者:[GHLandy](https://github.com/GHLandy)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,125 @@
|
||||
Bitbucket 版本控制入门指南
|
||||
============================================================
|
||||
|
||||

|
||||
|
||||
在互联网成为一个巨大的、世界性的现象之前,开发团队常常被限制在一个小的物理空间内。如果公司没有资金支持的话,与世界另一方的人合作是一个非常昂贵或几乎不可能的梦想。
|
||||
|
||||
幸运的是,情况不再是这样了。互联网诞生了基于网络的解决方案,允许公司组成合作团体,包括彼此相距数千英里的人。
|
||||
|
||||
自从 2008 年首次推出以来,[Bitbucket][1] 已成为使用 **Mercurial** 或 **Git** 版本控制系统(**VCS**)的开发人员团队中越来越受欢迎的选择。
|
||||
|
||||
它既提供免费帐户,带有不限数量的私人存储库(每个账户最多 5 个用户),也提供多种付费计划,允许每个帐户有更多用户。此外,标记为“公开”的仓库对可以编辑或读取其内容的人数没有限制。
|
||||
|
||||
### 注册 Bitbucket
|
||||
|
||||
要使用 **Bitbucket**,你需要建立一个免费帐户。要这样做,请进入 [https://bitbucket.org/][2], 然后单击<ruby>免费开始<rt>Get started for free</rt></ruby>按钮。
|
||||
|
||||
首先,你需要输入有效的电子邮件地址,然后点击**继续**。 你的电子邮件帐户将被验证,如果一切正常,你将被提示输入所需的密码。完成后,再次点击 **继续**,然后检查你的电子邮件**收件箱**,以确认你的帐户是否已创建:
|
||||
|
||||
[
|
||||

|
||||
][3]
|
||||
|
||||
*Bitbucket 注册*
|
||||
|
||||
验证电子邮件地址后,系统会要求你确定**用户名**。 然后将创建你的帐户,你将会进入 **Bitbucket** 面板,在那里开始创建团队、项目和仓库:
|
||||
|
||||
[
|
||||

|
||||
][4]
|
||||
|
||||
*Bitbucket 面板*
|
||||
|
||||
如你所见,你可以在几分钟内注册 **Bitbucket**。**Atlassian** 的人简化了这个过程,以便你可以把你的时间真正用在 **Bitbucket** 上 - 我们下面会进一步讲。
|
||||
|
||||
### 使用 Bitbucket
|
||||
|
||||
让我们浏览下注册 **Bitbucket** 之后必须要做的事情。它们都在顶部菜单中:
|
||||
|
||||
[
|
||||

|
||||
][5]
|
||||
|
||||
*探索 Bitbucket 功能*
|
||||
|
||||
#### 1). 创建一个团队,通过允许多个 Bitbucket 用户共享一个账号计划的方式鼓励协作。
|
||||
|
||||
这将允许他们轻松管理团队拥有的仓库。要创建团队,请输入**团队名称**,并确保团队标识不存在。接下来,输入你要添加到群组的人员的电子邮件地址,并指明是否要将其设为**管理员**。最后,单击**创建**:
|
||||
|
||||
[
|
||||

|
||||
][6]
|
||||
|
||||
*Bitbucket – 创建一个团队*
|
||||
|
||||
#### 2) 创建或导入一个仓库
|
||||
|
||||
如果你已经使用基于 Git 的解决方案,你可以轻松地将你的仓库导入 **Bitbucket**。否则,你可以从头创建一个。让我们看看在每种情况下你需要做什么。
|
||||
|
||||
要创建新的仓库,请单击<ruby>仓库<rt>Repositories</rt></ruby>菜单中的<ruby>创建仓库<rt>Create repository</rt></ruby>选项。为新仓库和要分组到的项目选择一个名称。接下来,指明是否要将其设置为 private 并指定类型(Git 或 Mercurial)。最后,单击**创建仓库**:
|
||||
|
||||
[
|
||||

|
||||
][7]
|
||||
|
||||
*Bitbucket – 创建一个新仓库*
|
||||
|
||||
要导入已有仓库,请从**仓库**下拉菜单中选择**<ruby>导入<rt>Import</rt></ruby>**仓库。要开始导入,请指定源,输入 URL 和所需的登录凭据(如果需要)。
|
||||
|
||||
最后,选择新的仓库设置,然后单击**导入**仓库。忽略有关在指定 **URL** 处找不到仓库的警告,因为它是虚拟的,仅用于演示目的:
|
||||
|
||||
[
|
||||

|
||||
][8]
|
||||
|
||||
*Bitbucket – 导入已有代码*
|
||||
|
||||
就是这样,很简单吧。
|
||||
|
||||
### 在 Bitbucket 中使用仓库
|
||||
|
||||
创建一个新仓库或者导入一个仓库后,它会在面板上展示出来。这时就能执行一些常规操作,如克隆、创建分支、pull request、提交修改、添加 **README** 文件等等:
|
||||
|
||||
[
|
||||

|
||||
][9]
|
||||
|
||||
*Bitbucket – 仓库概览*
|
||||
|
||||
如果想了解如何用仓库工作,或者想要提升你的 git 技能,可以参考 [Bitbucket 官方文档][10]。
|
||||
|
||||
##### 总结
|
||||
|
||||
如你所见,不管你是版本管理的新手还是老手,**Bitbucket** 都能使管理变得更简单。如果你对本文有任何疑问或评论,请不要犹豫让我们知道。我们期待听到你的声音!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
作者简介:
|
||||
|
||||

|
||||
|
||||
我是 Ravi Saive,TecMint 的原创作者。一个喜爱在互联网上分享技巧和提示的计算机 geek 和 Linux 老手。我的大多数服务运行在 Linux 开源平台上。请在 Twitter、Facebook、Google+ 上关注我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
via: http://www.tecmint.com/bitbucket-for-version-control/
|
||||
|
||||
作者:[Ravi Saive][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.tecmint.com/author/admin/
|
||||
[1]:http://bit.ly/2ieExnS
|
||||
[2]:http://bit.ly/2ioJISt
|
||||
[3]:http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Singup.png
|
||||
[4]:http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Dashboard.png
|
||||
[5]:http://www.tecmint.com/wp-content/uploads/2017/01/Explore-Bitbucket-Features.png
|
||||
[6]:http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Create-a-Team.png
|
||||
[7]:http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Create-a-New-Repository.png
|
||||
[8]:http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Import-Existing-Code.png
|
||||
[9]:http://www.tecmint.com/wp-content/uploads/2017/01/Bitbucket-Repository-Overview.png
|
||||
[10]:https://confluence.atlassian.com/bitbucket/bitbucket-cloud-documentation-home-221448814.html
|
@ -0,0 +1,126 @@
|
||||
使用 rsync 来备份 Linux 系统
|
||||
============================================================
|
||||
|
||||
> 探索 rsync 在备份方案中的作用。
|
||||
|
||||

|
||||
|
||||
Image credits : [WIlliam][2][ Warby][3]. Modified by [Jason Baker][4]. Creative Commons [BY-SA 2.0][5].
|
||||
|
||||
在系统管理员的工作中备份无疑是一个重要的部分。当没有完整备份或者良好规划的备份和实施时,就可能或早或晚不可挽回地丢失重要的数据。
|
||||
|
||||
所有公司,无论大小,都运营在数据之上。考虑到丢失业务数据造成的经济和业务损失,从最小的个人公司到最大的跨国企业,没有一个公司能在丢失大部分数据以后得以幸存。你的办公室可以通过保险赔偿重建,但是你的数据就不可能再恢复了。
|
||||
|
||||
这里提到的丢失是指数据的完全损坏。而不是指数据被偷走,那是另一种灾难。我这里说的是数据被完全摧毁。
|
||||
|
||||
即使你只是个人用户而不是一个企业,备份你自己的数据也是非常重要的,我有二十年来的个人财务数据和我现在已经关闭的企业的数据,以及大量的电子发票。也包括近年来我创作的大量不同类型的文档、报告和数据报表。我不想失去任何这些数据。
|
||||
|
||||
所以备份是我数据长期安全的必要保障。
|
||||
|
||||
### 备份软件选择
|
||||
|
||||
有许多软件可以执行备份。大多数 Linux 发行版提供至少一种开源的备份软件。同时也有许多商业备份软件,但是这些都不符合我的需求,所以我决定使用基础的 Linux 工具来进行备份。
|
||||
|
||||
在我为 Open Source Yearbook 写的文章, [最佳搭档之 2015:tar 和 ssh][6] 中,我说明了昂贵的商业备份软件在设计实施可行的备份计划中并不是必要的。
|
||||
|
||||
从去年开始我尝试了另一种选择, [rsync][7] 命令,它有许多我已经从中受益的有趣特性。我的主要需求是所创建的备份,用户不需要解压备份压缩包就能定位和恢复文件,以便节约创建备份的时间。
|
||||
|
||||
这篇文章的目的只是为了说明 rsync 在我的备份方案中的作用。并不是 rsync 的全部能力或者它的各种适用场景的概览。
|
||||
|
||||
### rsync 命令
|
||||
|
||||
Andrew Tridgell 和 Paul Mackerras 编写了 rsync ,首次发布于 1996 年。它的目标是向另一台电脑同步文件。你注意到了他们为什么取这个名字了吗(remotely synchronize)?它是大多数发行版都提供的开源软件。
|
||||
|
||||
rsync 能够用于同步两个目录或目录树,无论它们是在同一个计算机上还是不同的计算机上,而且不仅如此,它还能做到更多。它创建或者更新的目录与源目录完全一样。新的目录不是以 tar 或 zip 等打包存储,而是普通的目录和文件,常见的 Linux 工具都能轻松访问,而这正是我所需要的。
|
||||
|
||||
rsync 的最重要的特性之一是它处理源目录被修改的已有文件的方式。它使用分块校验来比较源文件和目标文件,而不是从源把整个文件复制过去。如果两个文件所有块的校验和都相同,那么就不用传输数据。否则只有被改变的块被传输。这样节约了远程同步消耗的大量时间和带宽。比如,我第一次使用 rsync 脚本来把我所有的主机备份到一个外接的大型 usb 硬盘上需要三个小时,因为所有的数据都需要传输过去。而接下来的备份需要的时间就只是 3 到 8 分钟,这取决于上次备份以来创建和改变了多少文件。我使用 `time` 命令来记录实际花费的时间。昨天晚上,我只花了三分钟来从六个远程系统和本地工作站备份大概 750 Gb 数据。实际上只有在白天改变的几百 Mb 数据需要备份。
|
||||
|
||||
下面的命令可以用来同步两个目录及其任意子目录的内容。也就是说,在新目录的内容和源目录同步完之后,它们的内容完全一样。
|
||||
|
||||
```
|
||||
rsync -aH sourcedir targetdir
|
||||
```
|
||||
|
||||
`-a` 选项表示归档模式,它会保持权限、所有关系和符号(软)链接。`-H` 选项用来保持硬链接。注意源目录和目标目录都可以在远程主机上。
|
||||
|
||||
假设昨天我们使用 rsync 同步了两个目录。今天我们想再同步一次,但是我们从源目录删除了一些文件。rsync 默认只复制新的和改变过的文件到新目录里,而不去改变新目录里被我们删除的文件,但是如果你想让那些在源目录里被删除的文件在新目录里也被删除,那么你可以加上 `--delete` 选项来删除。
|
||||
|
||||
另一个有趣的选项,也是我个人最喜欢的选项是 `--link-dest`,因为它极大地增加了 rsync 的能力和灵活性。`--link-dest` 使每日备份只花费很少的额外空间和很短的时间。
|
||||
|
||||
用这个选项指定前一天的备份目录,以及今天的备份目录,然后 rsync 会创建今天的新备份目录,并将昨天备份目录里的每一个文件在今天的备份目录中创建硬链接。现在我们在今天的备份目录中有一大堆指向昨天备份的硬链接。文件没有被重复创建,而是创建了一些硬链接。对于[硬链接][8],在 Wikipedia 中有非常详细的描述。而在用昨天的备份目录文件的硬链接创建了今天的备份之后,rsync 和平常一样进行备份,如果在文件中检测到了变化,就不会做硬链接,而是从昨天的备份目录里做一个文件的副本,再把源文件中变化的部分复制过去。(LCTT 译注:此处疑似原文表述不清,参见 `generator.c` 的 `try_dests_reg` 函数先根据 `match_level` 选择复制或者硬链接,而不是创建硬链接后再判断 `match_level`)
|
||||
|
||||
现在我们的命令类似于下面这样。
|
||||
|
||||
```
|
||||
rsync -aH --delete --link-dest=yesterdaystargetdir sourcedir todaystargetdir
|
||||
```
|
||||
|
||||
你也可能想要排除一些不想要备份的目录或者文件。那么就可以使用 `--exclude` 选项。用这个选项加上你想排除文件或目录的模式。你可以用下面的新命令来排除浏览器的缓存。
|
||||
|
||||
```
|
||||
rsync -aH --delete --exclude Cache --link-dest=yesterdaystargetdir sourcedir todaystargetdir
|
||||
```
|
||||
|
||||
注意:你想排除的每一个文件的模式前面都分别需要加上 `--exclude` 选项。
|
||||
|
||||
rsync 可以同步远程主机,无论是作为同步源头还是目标。再举一个例子,我们假设想要把名为 remote1 的远程主机的目录同步到本地。因为 ssh 作为与远程主机交换数据的默认协议,我一直使用 ssh 选项。现在命令类似于下面这样。
|
||||
|
||||
```
|
||||
rsync -aH -e ssh --delete --exclude Cache --link-dest=yesterdaystargetdir remote1:sourcedir todaystargetdir
|
||||
```
|
||||
|
||||
这就是我的 rsync 备份命令的最终版本。
|
||||
|
||||
你可以依靠 rsync 的大量选项来定制你的同步过程。大多数情况而言,我刚刚描述的简单命令就足以胜任我的个人需要。你可以阅读 rsync 丰富的文档来了解它的其他能力。
|
||||
|
||||
### 部署备份
|
||||
|
||||
我的备份自动运行因为—“万物皆可自动化”。我写了一个 BASH 脚本使用 rsync 创建每天的备份。包括确保备份介质被挂载,生成每天的备份目录的名字,以及在备份介质中创建合适的目录结构,最后执行真正的备份再卸载备份介质。
|
||||
|
||||
我用 cron 每天早晨执行脚本确保我永远不会忘记备份。
|
||||
|
||||
我的脚本 rsbu 和配置文件 rsbu.conf 可以在 https://github.com/opensourceway/rsync-backup-script 上获取。
|
||||
|
||||
### 恢复测试
|
||||
|
||||
所有没有经过测试的备份计划都不完整的。你可以通过测试恢复某个文件或者整个目录,以确保备份在照常工作并且可以通过它来在数据全部丢失后恢复。我见过太多备份由于种种理由失败,以及由于缺乏测试忽略的问题导致宝贵的数据被丢失。
|
||||
|
||||
选择一个文件恢复到比如 `/tmp` 的测试目录,这样你就不会覆盖任何备份后被更新的文件。验证文件的内容是否是你预期的。恢复用 rsync 备份的文件仅仅只是找到你的备份文件然后把它复制到你想恢复的地方去那样简单。
|
||||
|
||||
我有几次不得不恢复我的个人文件,偶尔是整个目录。大多数是自己意外删除了文件或者目录。有几次是因为硬盘崩溃。这些备份迟早会派上用场。
|
||||
|
||||
### 最后一步
|
||||
|
||||
但仅仅创建备份并不能拯救你的业务,你需要定期的地创建备份,使最近的一次备份储存在另一台远程机器上,如果有可能,放在另外一个建筑物中或几英里之外。这样可以确保大规模的灾难不会摧毁你的所有备份。
|
||||
|
||||
对于小型企业的一个合理选择是在可移动介质上做每日备份,晚上把最新的备份带回家里,第二天早上把更早的备份带到办公室。你就会有几个轮流的拷贝。甚至可以把最新的备份带到银行并放到你的保管箱里,然后带回之前的备份。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
作者简介:
|
||||
|
||||
David Both - 他居住在北卡罗来纳州的罗列,是 Linux 和开源提倡者。他已经从事 IT 行业 40 多年。在 IBM 教授了二十多年 OS/2。在 IBM 的时候,他在 1981 年为最初的 IBM 个人电脑编写了第一门培训课程。他为红帽教授 RHCE 课程,并曾在世通公司、思科、北卡罗来纳州政府工作。他使用 Linux 和开源软件已经有二十年左右了。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/17/1/rsync-backup-linux
|
||||
|
||||
作者:[David Both][a]
|
||||
译者:[trnhoe](https://github.com/trnhoe)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://opensource.com/users/dboth
|
||||
[1]:https://opensource.com/article/17/1/rsync-backup-linux?rate=xmBjzZgqTu6p-Dw2gXy5cq43KHcSNs4-nisv_jnUgbw
|
||||
[2]:https://www.flickr.com/photos/wwarby/11644168395
|
||||
[3]:https://www.flickr.com/photos/wwarby/11644168395
|
||||
[4]:https://opensource.com/users/jason-baker
|
||||
[5]:https://creativecommons.org/licenses/by/2.0/
|
||||
[6]:https://opensource.com/business/15/12/best-couple-2015-tar-and-ssh
|
||||
[7]:https://en.wikipedia.org/wiki/Rsync
|
||||
[8]:https://en.wikipedia.org/wiki/Hard_link
|
||||
[9]:https://github.com/opensourceway/rsync-backup-script
|
||||
[10]:https://opensource.com/user/14106/feed
|
||||
[11]:https://opensource.com/article/17/1/rsync-backup-linux#comments
|
||||
[12]:https://opensource.com/users/dboth
|
@ -1,35 +1,35 @@
|
||||
CoreFreq - 一款强大的 Linux 下监控 CPU 的工具
|
||||
CoreFreq:一款强大的监控 CPU 的专业工具
|
||||
============================================================
|
||||
|
||||
CoreFreq 是一个用于英特尔64位处理器的[ CPU 监控程序][1],并且支持Atom、Core2、Nehalem、SandyBridge 及以上、还有 AMD 0F 家族。
|
||||
CoreFreq 是一个用于英特尔 64 位处理器的 [CPU 监控程序][1],并且支持 Atom、Core2、Nehalem、SandyBridge 及以上、还有 AMD 0F 家族。
|
||||
|
||||
它的核心建立在内核模块上,帮助从每个 CPU 核心检索内部性能计数器,并且与收集数据的守护进程一起工作,并用一个小型控制台客户端链接到守护程序并显示收集的数据。
|
||||
它的核心建立在内核模块上,用于从每个 CPU 核心检索内部性能计数器,并且与收集数据的守护进程一起工作,一个小型控制台客户端连接到该守护程序并显示收集的数据。
|
||||
|
||||
[
|
||||

|
||||
][2]
|
||||
|
||||
它提供了以高精度重新捕获 CPU 数据的基础工作:
|
||||
它提供了高精度的重新捕获 CPU 数据的基础工作:
|
||||
|
||||
1. 核心频率和比率; SpeedStep(EIST)、Turbo Boost、超线程(HTT)以及基本时钟。
|
||||
2. 性能计数器结合时间戳计数器(TSC)、未分配的核心循环(UCC)、未赋值的引用循环(URC)。
|
||||
3. 每周期或每秒的指令数、IPS、IPC 或 CPI。
|
||||
4. CPU C 的状态 C0 C1 C3 C6 C7 - C1E - C1、C3 的自动/降级。
|
||||
5. 带有 Tjunction Max 的 DTS 温度、热监测 TM1、TM2 的状态。
|
||||
6. 包括用于自举的高速缓存和应用程序 CPU 拓扑图。
|
||||
7. 处理器特性、品牌、架构字符串。
|
||||
1. 核心频率和比率;SpeedStep(EIST)、Turbo Boost、超线程(HTT)以及基本时钟(Base Clock)。
|
||||
2. 性能计数器结合时间戳计数器(Time Stamp Counter)(TSC)、非停机核心周期(Unhalted Core Cycles)(UCC)、非停机引用周期(Unhalted Reference Cycles)(URC)。
|
||||
3. 每周期或每秒的指令数:IPS、IPC 或 CPI。
|
||||
4. CPU C 状态: C0 C1 C3 C6 C7 - C1E - C1、C3 的自动/非降级(UnDemotion)。
|
||||
5. 带有 Tjunction Max 的 DTS 温度、热监测(Thermal Monitoring) TM1、TM2 状态。
|
||||
6. 包括用于自举的高速缓存和应用程序 CPU 拓扑图。
|
||||
7. 处理器特性、品牌、架构字符串。
|
||||
|
||||
注意:此工具更适用于专家 Linux 用户和经验丰富的系统管理员,但新手用户可以逐步学习如何使用它。
|
||||
注意:此工具更适用于 Linux 专家用户和经验丰富的系统管理员,但新手用户可以逐步学习如何使用它。
|
||||
|
||||
#### CoreFreq 如何工作
|
||||
|
||||
它通过调用一个 Linux 内核模块,然后使用:
|
||||
它通过调用一个 Linux 内核模块实现,它使用了:
|
||||
|
||||
1. 汇编代码保持性能计数器的读数尽可能接近。
|
||||
2. 每个 CPU 影响 slab 数据内存加上高分辨率定时器。
|
||||
3. 可以暂停/恢复和 CPU 热插拔。
|
||||
4. 使用共享内存来保护内核免受来自用户空间程序的损害。
|
||||
5. 使用原子同步的线程来消除互斥和死锁。
|
||||
1. 汇编代码保持尽可能接近性能计数器读数。
|
||||
2. 按每个 CPU 影响的 slab 数据内存加上高分辨率定时器。
|
||||
3. 支持 CPU 暂停/恢复和 CPU 热插拔。
|
||||
4. 使用共享内存来保护内核免受来自用户空间程序的损害。
|
||||
5. 使用原子级同步的线程来消除互斥和死锁。
|
||||
|
||||
### 如何在 Linux 中安装 CoreFreq
|
||||
|
||||
@ -48,11 +48,12 @@ $ git clone https://github.com/cyring/CoreFreq.git
|
||||
$ cd CoreFreq
|
||||
$ make
|
||||
```
|
||||
|
||||
[
|
||||

|
||||
][3]
|
||||
|
||||
构建 CoreFreq 程序
|
||||
*构建 CoreFreq 程序*
|
||||
|
||||
注意:Arch Linux 用户可以从 AUR 中安装 [corefreq-git][4]。
|
||||
|
||||
@ -68,19 +69,20 @@ $ sudo ./corefreqd
|
||||
```
|
||||
$ ./corefreq-cli
|
||||
```
|
||||
|
||||
[
|
||||

|
||||
][5]
|
||||
|
||||
CoreFreq Linux CPU 监控
|
||||
*CoreFreq Linux CPU 监控*
|
||||
|
||||
在上面的界面中,你可以使用这些快捷键:
|
||||
|
||||
1. 使用 `F2` 显示屏幕顶部显示的使用菜单。
|
||||
2. 使用 `右` 和 `左` 箭头移动菜单选项卡。
|
||||
3. 使用 `上`和 `下` 箭头选择菜单项,然后单击[Enter]。
|
||||
4. 使用 `F4` 关闭程序。
|
||||
5. 使用 `h` 打开快速参考。
|
||||
1. 使用 `F2` 显示屏幕顶部显示的使用菜单。
|
||||
2. 使用 `右` 和 `左` 箭头移动菜单选项卡。
|
||||
3. 使用 `上`和 `下` 箭头选择菜单项,然后单击回车。
|
||||
4. 使用 `F4` 关闭程序。
|
||||
5. 使用 `h` 打开快速参考。
|
||||
|
||||
要查看所有的使用选项,请输入以下命令:
|
||||
|
||||
@ -88,7 +90,7 @@ CoreFreq Linux CPU 监控
|
||||
$ ./corefreq-cli -h
|
||||
```
|
||||
|
||||
CoreFreq 选项
|
||||
CoreFreq 选项:
|
||||
|
||||
```
|
||||
CoreFreq. Copyright (C) 2015-2017 CYRIL INGENIERIE
|
||||
@ -135,9 +137,9 @@ $ ./corefreq-cli -i
|
||||
$ ./corefreq-cli -c
|
||||
```
|
||||
|
||||
有关更多信息和用法,请访问 CoreFreq Github 仓库:[https://github.com/cyring/CoreFreq][6]
|
||||
有关更多信息和用法,请访问 CoreFreq 的 Github 仓库:[https://github.com/cyring/CoreFreq][6] 。
|
||||
|
||||
在本文中,我们回顾了一个强大的 CPU 监控工具,这对于 Linux 专家或经验丰富的系统管理员来说可能比新手用户更有用。
|
||||
在本文中,我们评估了一个强大的 CPU 监控工具,这对于 Linux 专家或经验丰富的系统管理员来说可能比新手用户更有用。
|
||||
|
||||
通过下面的评论栏与我们分享你对这个工具或任何相关的想法。
|
||||
|
||||
@ -153,7 +155,7 @@ via: http://www.tecmint.com/corefreq-linux-cpu-monitoring-tool/
|
||||
|
||||
作者:[Aaron Kili][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,56 @@
|
||||
对西部数据 My Passport Wireless 移动存储进行 Linux 魔改
|
||||
============================================================
|
||||
|
||||
虽然 WD My Passport Wireless 本身就是一个相当有用的设备,但它有一个轻量级但完整的 Linux 发行版提供支持的事实意味着其功能可以进一步扩展。例如,在设备上部署 [rclone][3],这样你可以将存储在磁盘上的照片和 RAW 文件备份到任何支持的云存储服务中。
|
||||
|
||||
在开始之前,你需要将设备连接到 Wi-Fi 网络并启用 SSH(以便你可以通过 SSH 访问底层 Linux 系统)。要将 WD My Passport Wireless 连接到当前的 Wi-Fi 网络中,请为设备供电并连接到从常规 Linux 计算机创建的无线热点。打开浏览器,进入 [http://mypassport.local][1],然后登录到设备的 web 界面。切换到 Wi-Fi 一栏,并连接到现有的本地 Wi-Fi 网络。然后切换到管理员部分并启用 SSH 访问。
|
||||
|
||||

|
||||
|
||||
在你的 Linux 机器上,打开终端并使用 `ssh root@mypassport.local` 连接到设备。
|
||||
|
||||
使用下面的命令部署 rclone:
|
||||
|
||||
```
|
||||
curl -O http://downloads.rclone.org/rclone-current-linux-arm.zip
|
||||
unzip rclone-current-linux-arm.zip
|
||||
cd rclone-*-linux-arm
|
||||
cp rclone /usr/sbin/
|
||||
chown root:root /usr/sbin/rclone
|
||||
chmod 755 /usr/sbin/rclone
|
||||
mkdir -p /usr/local/share/man/man1
|
||||
sudo cp rclone.1 /usr/local/share/man/man1/
|
||||
sudo mandb
|
||||
```
|
||||
|
||||
完成后运行 `rclone config` 命令。由于在无外接显示器的机器上配置 rclone,请按照[远程设置][4]页面上的说明进行操作。你可以在 [Linux Photography][5] 这本书中找到有关配置和使用 rclone 的详细信息。
|
||||
|
||||
你也可以将 WD My Passport Wireless 用到其他实际用途。由于设备附带了 Python,因此你可以在设备上运行脚本和基于 Python 的 web 应用程序。例如,你可以部署简单的 [What’s in My Bag][6] 程序来跟踪你的照相设备。
|
||||
|
||||
```
|
||||
curl -LOk https://github.com/dmpop/wimb/archive/master.zip
|
||||
unzip master.zip
|
||||
mv wimb-master/ wimb
|
||||
cd wimb
|
||||
curl -LOk https://github.com/bottlepy/bottle/raw/master/bottle.py
|
||||
```
|
||||
|
||||
运行 `./wimb.py` 启动应用,并在浏览器中打开 [http://mypassport:8080/wimb][2] 访问并使用程序。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://scribblesandsnaps.com/2017/02/10/wd-my-passport-wireless-linux-hacks/
|
||||
|
||||
作者:[Dmitri Popov][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://scribblesandsnaps.com/author/dmpop/
|
||||
[1]:http://mypassport.local/
|
||||
[2]:http://mypassport:8080/wimb
|
||||
[3]:http://rclone.org/
|
||||
[4]:http://rclone.org/remote_setup/
|
||||
[5]:https://gumroad.com/l/linux-photography
|
||||
[6]:https://github.com/dmpop/wimb
|
@ -1,22 +1,17 @@
|
||||
如何在 Ubuntu 上使用 ADB 备份你的 Android 数据
|
||||
如何在 Ubuntu 上使用 ADB 备份 Android 数据
|
||||
============================================================
|
||||
|
||||
|
||||

|
||||
|
||||
备份 Android 系统上的应用数据、文本信息等等是非常乏味的,有时还很昂贵。电子市场的许多应用都承诺可以备份数据,但效果不佳或者需要付昂贵费用。你是否知道有一种更好的方法可以来做这件事,并且在你的电脑上就可以完成?
|
||||
|
||||
Android 自带一套开发工具。有许多种开发工具,但人们最为感兴趣的项目是 ADB(或者叫做 <ruby>Android 调试桥<rt> Android Debug Bridge</rt></ruby>)。它允许用户通过命令行直接访问任何 Android 设备。有了这个工具,一切皆有可能 - 包括备份整个 Android 设备。在这篇文章中,将讨论如何在 Ubuntu 系统上完成这件事。
|
||||
|
||||
备份 Android 系统上的应用数据、文本信息和收藏是非常乏味的,有时还要花费很大的代价。电子市场的许多应用都承诺可以备份数据但却效果不佳或者需要付大量费用。你是否知道有一种更好的方法可以来做这件事,并且在你的电脑上就可以完成?
|
||||
|
||||
<small style="box-sizing: inherit; font-size: 16px;">[广告来自谷歌][9]</small>
|
||||
|
||||
Android 自带一套开发工具。有许多种开发工具,但人们最为感兴趣、最有名的项目是 ADB(或者叫做 Android 调试桥)。它允许用户直接通过命令行访问任何 Android 设备。有了这个工具,一切皆有可能 - 包括备份整个 Android 设备。在这篇文章中,将讨论如何在 Ubuntu 系统上完成这件事。
|
||||
|
||||
**注**:这篇教程是针对 Ubuntu Linux 系统的。但是, ADB 在 Windows 系统和 Mac 上也是可用的,也可以在这些平台上对 Android 数据进行备份。[下载针对 Windows 和 Mac 的 ADB 版本][10]
|
||||
**注**:这篇教程是针对 Ubuntu Linux 系统的。不过, ADB 在 Windows 系统和 Mac 上也是可用的,也可以在这些平台上对 Android 数据进行备份。[下载针对 Windows 和 Mac 的 ADB 版本。][10]
|
||||
|
||||
### 安装 ADB 并启用 USB 调试
|
||||
|
||||
打开一个终端窗口然后输入下面的命令来安装 ADB,它将与 Android 进行会话。
|
||||
打开一个终端窗口,然后输入下面的命令来安装 ADB,它将与 Android 进行会话。
|
||||
|
||||
```
|
||||
sudo apt install adb
|
||||
@ -24,11 +19,11 @@ sudo apt install adb
|
||||
|
||||

|
||||
|
||||
在系统上安装好 ADB 工具以后,调试需要在 Android 内部启动。首先打开 Android 的设置区域。然后一直滚动到底部找到“关于手机”并点击。这将打开“电话状态页”。在这一页面上再次滚动到底部,找到“版本号”并点击七次。从而启动“开发者模式”。
|
||||
在系统上安装好 ADB 工具以后,需要在 Android 内部启动调试。首先打开 Android 的<ruby>设置<rt>Settings</rt></ruby>区域。然后一直滚动到底部找到“<ruby>关于手机<rt>About Phone</rt></ruby>”并点击。这将打开“<ruby>电话状态<rt>Phone status</rt></ruby>”页。在这一页面上再次滚动到底部,找到“<ruby>版本号<rt>Build number</rt></ruby>”并点击七次,从而启动开发者模式。
|
||||
|
||||

|
||||
|
||||
为了进入开发者设置,按设备上的返回键返回上一页面。在“设置”中将会出现一个新的选项:“开发者选项”。点击“开发者选项”进入开发者设置区域。滚动页面直到看到 “Android 调试”(或它的一些其他名称),点击它,从而启用设置。
|
||||
为了进入<ruby>开发者设置<rt>Developer Settings</rt></ruby>,按设备上的返回键返回上一页面。在“设置”中将会出现一个新的选项:“<ruby>开发者选项<rt>Developer options</rt></ruby>”。点击它进入开发者设置区域。滚动页面直到看到 “<ruby>Android 调试<rt>Android debugging</rt></ruby>”(或它的一些其他名称),点击它启用设置。
|
||||
|
||||
### 备份
|
||||
|
||||
@ -38,11 +33,11 @@ sudo apt install adb
|
||||
adb start-server
|
||||
```
|
||||
|
||||
这将启动 ADB 服务器。通过运行这个命令,会很快解锁 Android 设备,因为 ADB 将强制出现一个确认窗口,必须选择继续。
|
||||
这将启动 ADB 服务器。运行这个命令时,要快速解锁 Android 设备,因为 ADB 将强制出现一个确认窗口,必须选择接受后才可继续。
|
||||
|
||||

|
||||
|
||||
要启动备份进程,打开终端然后执行下面的备份命令。该命令将读取 Android 上的文本信息以及其他应用数据,然后存入加密文件中。
|
||||
要启动备份进程,打开终端,然后执行下面的备份命令。该命令将读取 Android 上的文本信息以及其他应用数据,然后存入加密文件中。
|
||||
|
||||
```
|
||||
adb backup -apk -shared -all -f backup-file.adb
|
||||
@ -50,7 +45,7 @@ adb backup -apk -shared -all -f backup-file.adb
|
||||
|
||||

|
||||
|
||||
当运行备份命令时,会在 Android 启动备份进程前提示用户查看 Android 并设置加密文件的密码。请输入一个强大、容易记住的密码。然后,点击“备份我的数据”按钮。备份过程将会花费一定时间。备份完成以后,在目录 “/home/username/” 中会出现一个叫做 “backup-file.adb” 的文件。
|
||||
当运行备份命令时,Android 会在启动备份进程前提示用户查看 Android 并设置加密文件的密码。请输入一个强壮而容易记住的密码。然后,点击“备份我的数据”按钮。备份过程将会花费一定时间。备份完成以后,在目录 `/home/username/` 中会出现一个叫做 `backup-file.adb` 的文件。
|
||||
|
||||
### 恢复备份
|
||||
|
||||
@ -63,11 +58,11 @@ adb restore backup-file.adb
|
||||
|
||||

|
||||
|
||||
再次转到 Android, 因为 ADB 将提示用户输入密码。这次,不是创建一个密码,而是需要输入之前创建的那个密码。在点击 “恢复我的数据” 以后,恢复进程就开始了。耐心点,因为这可能需要一定时间。
|
||||
再次转到 Android, 因为 ADB 将提示用户输入密码。这次,不是创建一个密码,而是需要输入之前创建的那个密码。在点击 “<ruby>恢复我的数据<rt>restore my data</rt></ruby>” 以后,恢复进程就开始了。耐心点,因为这可能需要一定时间。
|
||||
|
||||
### 结论
|
||||
|
||||
没有多少 Android 用户知道这样备份数据,但是 ADB 的确很强大。利用它甚至可以获得对一个设备的 root 访问。事实上,利用这个工具还可以做很多的事情,因此需要更多的文章来讨论它。
|
||||
没有多少 Android 用户知道这样备份数据,但是 ADB 的确很强大。利用它甚至可以获得对设备的 root 访问。事实上,利用这个工具还可以做很多的事情,需要更多的文章来讨论它。
|
||||
|
||||
你还知道 ADB 可以用来干什么吗?请在下面的评论区告知我们!
|
||||
|
94
published/201702/20170216 Tips To Improve Ubuntu Speed.md
Normal file
94
published/201702/20170216 Tips To Improve Ubuntu Speed.md
Normal file
@ -0,0 +1,94 @@
|
||||
加速老旧 Ubuntu 系统的技巧
|
||||
============
|
||||
|
||||
[
|
||||

|
||||
][2]
|
||||
|
||||
你的 Ubuntu 系统可以运行得如此顺畅,以至于你会奇怪为什么没有早一些从那些桌面加载很慢的操作系统(比如 Windows)转过来。Ubuntu 在大多数现代化的机器上都能够很顺畅的运行,一些更老的机器使用 Ubuntu 系统的一些变种版本,比如 Lubuntu、Xubuntu 和 [Ubuntu MATE][6],同样给人留下了深刻印象。极少的情况下,你对 Ubuntu 桌面的使用体验会越来越糟。如果非常不走运,你的 Ubuntu 系统并没有像你所希望的那样运行顺畅,那么你可以做一些事情来提高系统性能和响应速度。
|
||||
|
||||
不过首先我们来看一看为什么电脑会运行得很慢?下面是我列举的一些原因:
|
||||
|
||||
1. 电脑陈旧
|
||||
2. 安装了太多的应用
|
||||
3. 系统里的一些东西坏了
|
||||
4. 还有更多的原因...
|
||||
|
||||
现在让我们来看一些改善这个问题的技巧。
|
||||
|
||||
### 1、 <ruby>交换值<rt>Swappiness</rt></ruby>
|
||||
|
||||
如果你的系统有一个交换分区,那么这个技巧对你是最适合的(注:交换分区不建议为固态驱动器,因为这样会缩短驱动器的使用寿命)。交换分区可以帮助系统,特别是内存容量较低的系统,来管理系统内存。将数据写入交换分区(硬盘)比写入内存要慢一些,所以你可以通过减少 `swappiness` 值来限制数据写入交换分区的频率。默认情况下, Ubuntu 的 `swappiness` 值是 60%, 所以你可以通过下面的命令将它减至 10%:
|
||||
```
|
||||
sudo bash -c "echo 'vm.swappiness = 10' >> /etc/sysctl.conf"
|
||||
```
|
||||
### 2、 停止索引
|
||||
|
||||
索引的目的是加快搜索结果,但另一方面,索引会导致较老配置的系统出现一些问题。为了停止索引,输入下面的命令来移除索引工具:
|
||||
|
||||
```
|
||||
sudo apt-get purge apt-xapian-index
|
||||
```
|
||||
|
||||
### 3、 管理<ruby>启动应用<rt>startup applications</rt></ruby>
|
||||
|
||||
启动应用会对系统性能造成很大的影响。当你安装一些应用以后,这些应用会添加启动项,从而当你启动系统的时候它们也跟着启动,但你可以移除这些应用以提高系统性能。通过在 Unity 窗口搜索打开 “启动应用”。绝大多数自启动选项都会被隐藏,所以在终端输入下面的命令使它们可见然后你就可以停止某些 “启动应用”了:
|
||||
|
||||
```
|
||||
sudo sed -i "s/NoDisplay=true/NoDisplay=false/g" /etc/xdg/autostart/\*.desktop
|
||||
```
|
||||
[
|
||||

|
||||
][3]
|
||||
|
||||
### 4、 尝试预载入
|
||||
|
||||
预载入(`preload`) 是一个守护进程/后台服务,它可以监控系统上使用的应用程序,它会将所需要的二进制库在其需要加载到内存前就预先载入,以便应用程序启动得更快。在终端输入下面的命令安装预载入:
|
||||
|
||||
```
|
||||
sudo apt-get install preload
|
||||
```
|
||||
|
||||
### 5、 选择更加轻量型的应用
|
||||
|
||||
你在 Ubuntu 桌面上使用什么应用程序呢?有更轻量的替代品吗?如果有,就替换成它们——如果它们也能满足你的需求的话。 LibreOffice 能够给你最好的办公体验,但是它的替代品,比如 Abiword 能够很大程度的改善系统性能。
|
||||
|
||||
### 6、 切换到一个更加轻量型的桌面环境
|
||||
|
||||
你在 Ubuntu 系统上使用的桌面环境是 Unity 或 KDE 吗?这些桌面环境对系统的要求很高。相反,你可以在当前桌面环境之外同时安装一个 LxQt 或者 XFCE 环境,然后切换到它们。或者,你也可以换到 Ubuntu 的不同变种版本,比如 Lubuntu 或 Xubuntu ,从而享受更快的体验。
|
||||
|
||||
### 7、 清理系统垃圾
|
||||
|
||||
尽管 Ubuntu 系统不会变得像 Windows 系统那么慢,但它还是会变慢。清除系统里不需要的文件可以改善系统性能。尝试使用 Ubuntu Tweak 工具中的 Janitor 工具来清理系统。还有一个 Bleachbit 工具也可用来清理系统。
|
||||
|
||||
同时请阅读 - [Bleachbit - CCleaner 的一个替代品][1]
|
||||
|
||||
### 8、 尝试重新安装
|
||||
|
||||
有时,一些东西可能坏了,清理垃圾或者使用上面提到的大多数技巧都没用。这时,你唯一的选择就是备份文件,然后尝试重新安装。
|
||||
|
||||
### 9、 升级硬件
|
||||
|
||||
我列表上的最后一个技巧是升级硬件。在绝大多数情况下,这是可以的。如果可以这样做,那将极大的提高系统性能。你可以增加已安装的内存, 从传统磁盘切换到固态驱动器或者升级你的处理器,特别是如果你在台式电脑上运行 Ubuntu 系统,这将极大提高系统性能。
|
||||
|
||||
### 结论
|
||||
|
||||
我希望这些技巧能够陪伴你走很长的一段路,让你的 Ubuntu 桌面以一个**令人印象深刻的速度**运行。注意,你不需要尝试所有的技巧,只需要找到一个适合你的情况的技巧,然后观察系统响应如何变化。你还知道其他提高 Ubuntu 系统性能的技巧吗?请在评论里分享给我们。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.linuxandubuntu.com/home/tips-to-improve-ubuntu-speed
|
||||
|
||||
作者:[linuxandubuntu.com][a]
|
||||
译者:[ucasFL](https://github.com/ucasFL)
|
||||
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.linuxandubuntu.com/home/tips-to-improve-ubuntu-speed
|
||||
[1]:http://www.linuxandubuntu.com/home/bleachbit-an-alternative-to-ccleaner-on-linux
|
||||
[2]:http://www.linuxandubuntu.com/home/tips-to-improve-ubuntu-speed
|
||||
[3]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/ubuntu-startup-application_orig.jpg
|
||||
[4]:http://www.linuxandubuntu.com/home/tips-to-improve-ubuntu-speed
|
||||
[5]:http://www.linuxandubuntu.com/home/tips-to-improve-ubuntu-speed#comments
|
||||
[6]:http://www.linuxandubuntu.com/home/linuxandubuntu-distro-review-of-the-week-ubuntu-mate-1610
|
@ -1,29 +1,29 @@
|
||||
如何在Ubuntu和CentOS上启用Nginx的HTTP/2协议
|
||||
如何在 Ubuntu 和 CentOS 上启用 Nginx 的 HTTP/2 协议支持
|
||||
===
|
||||
|
||||

|
||||

|
||||
|
||||
HTTP/2是HTTP网络协议的主要修订版本,它专注于HTTP协议的性能改进。HTTP/2协议的目标是减少延迟,并且允许在Web浏览器和服务器之间发起多个并发请求,因此Web应用程序会更快。在本篇教程中,我们将像你展示如何在安装有Ubuntu或CentOS作为操作系统的Linux VPS上使用开启Nginx的HTTP/2协议。如果你使用Apache,你可以查看我们的另一篇教程:[如何在Ubuntu上开启Apache的HTTP/2协议][6]。
|
||||
HTTP/2 是 HTTP 网络协议的主要修订版本,其专注于 HTTP 协议的性能改进。HTTP/2 协议的目标是减少延迟,并且允许在 Web 浏览器和服务器之间的一个连接上并行发起多个请求,因此 Web 应用程序会更快。在本篇教程中,我们将像你展示如何在安装有 Ubuntu 或 CentOS 作为操作系统的 Linux VPS 上使用开启 Nginx 的 HTTP/2 协议。如果你使用 Apache,你可以查看我们的另一篇教程:[如何在 Ubuntu 上开启 Apache 的 HTTP/2 协议][6]。
|
||||
|
||||
### 必备条件
|
||||
|
||||
为了能够按照本篇教程最终在服务器上启用HTTP/2协议,你需要先安装好 [Nginx][7] 。并且确保功能正常而且配置没有错误。你可以使用下面的命令来检查一下:
|
||||
为了能够按照本篇教程最终在服务器上启用 HTTP/2 协议,你需要先安装好 [Nginx][7] 。并且确保功能正常而且配置没有错误。你可以使用下面的命令来检查一下:
|
||||
|
||||
```
|
||||
sudo nginx -t
|
||||
```
|
||||
|
||||
此外,你需要有服务器的root访问权限,或者至少有一个具有sudo权限的非root系统用户,以便你在修改Nginx配置文件的时候不会出现权限问题。最后你需要有一个[域名][8]和一个颁发给这个域名的有效的[SSL证书][9]。
|
||||
此外,你需要有服务器的 root 访问权限,或者至少有一个具有 sudo 权限的非 root 系统用户,以便你在修改 Nginx 配置文件的时候不会出现权限问题。最后你需要有一个[域名][8]和一个颁发给这个域名的有效的 [SSL 证书][9]。
|
||||
|
||||
### 在Ubuntu上开启Nginx的HTTP/2协议
|
||||
### 在 Ubuntu 上开启 Nginx 的 HTTP/2 协议
|
||||
|
||||
为了在[Ubuntu VPS][10]上开启Nginx的HTTP/2协议,你需要编辑默认的Nginx的服务块,我们使用的是 `nano`,你可以使用你自己的文本编辑器。
|
||||
为了在 [Ubuntu VPS][10] 上开启 Nginx 的 HTTP/2 协议,你需要编辑默认的 Nginx 的服务(`server`)块,我们使用的是 `nano`,你可以使用你自己的文本编辑器。
|
||||
|
||||
```
|
||||
sudo nano /etc/nginx/sites-available/default
|
||||
```
|
||||
|
||||
增加下面的服务块:
|
||||
增加下面的服务块:
|
||||
|
||||
```
|
||||
server {
|
||||
@ -47,39 +47,39 @@ server {
|
||||
}
|
||||
```
|
||||
|
||||
确保 `domain.com` 被你真正的域名替换掉了。 此外,应正确设置文档根目录,还有SSL证书和密钥的路径。
|
||||
确保 `domain.com` 替换成你真正的域名。 此外,应正确设置文档根(`root`)目录,还有 SSL 证书和密钥的路径。
|
||||
|
||||
当你编辑完成这个服务块之后,需要保存并关闭文件。使用以下命令检查Nginx配置是否有错误:
|
||||
当你编辑完成这个服务块之后,需要保存并关闭文件。使用以下命令检查 Nginx 配置是否有错误:
|
||||
|
||||
```
|
||||
sudo nginx -t
|
||||
```
|
||||
|
||||
为了刚刚的改变生效,需要重启Nginx:
|
||||
为了刚刚的改变生效,需要重启 Nginx:
|
||||
|
||||
```
|
||||
sudo systemctl restart nginx.service
|
||||
```
|
||||
|
||||
如果你想为另一个域名开启HTTP/2协议,你可以查看我们的博客[如何在Ubuntu和CentOS上设置Nginx服务块][11]。
|
||||
如果你想为另一个域名开启 HTTP/2 协议,你可以查看我们的博客[如何在 Ubuntu 和 CentOS 上设置 Nginx 服务块][11]。
|
||||
|
||||
### 在CentOS上开启Nginx的HTTP/2协议
|
||||
### 在 CentOS 上开启 Nginx 的 HTTP/2 协议
|
||||
|
||||
为了在[CentOS VPS][12] 开启Nginx的HTTP/2协议,你需要按照Ubuntu上完全相同的步骤做。唯一的不同点是Nginx块文件的位置。为了在CentOS上编辑默认的Nginx服务块,你需要进入`/etc/nginx/conf.d` 这个文件夹。
|
||||
为了在 [CentOS VPS][12] 开启 Nginx 的 HTTP/2 协议,你需要按照 Ubuntu 上完全相同的步骤做。唯一的不同点是 Nginx 块文件的位置。为了在 CentOS 上编辑默认的 Nginx 服务块,你需要进入 `/etc/nginx/conf.d` 这个文件夹。
|
||||
|
||||
```
|
||||
# nano /etc/nginx/conf.d/default.conf
|
||||
```
|
||||
|
||||
再次检查配置是否有错误,保存并关闭文件,然后使用以下命令重新启动Nginx服务:
|
||||
再次检查配置是否有错误,保存并关闭文件,然后使用以下命令重新启动 Nginx 服务:
|
||||
|
||||
```
|
||||
# systemctl restart nginx.service
|
||||
```
|
||||
|
||||
为了检测Nginx的HTTP/2协议是否开启成功,你可以使用一些[在线HTTP/2检测工具][13]。
|
||||
为了检测 Nginx 的 HTTP/2 协议是否开启成功,你可以使用一些[在线 HTTP/2 检测工具][13]。
|
||||
|
||||
当然如果你使用我们的[Linux VPS主机][14]服务,在这种情况下你可以简易地要求我们的专家级的Linux管理员帮助你在你的服务器上启用Nginx的HTTP/2协议。他们提供7×24小时的服务,并且会很快关注的你要求。
|
||||
当然如果你使用我们的 [Linux VPS 主机][14]服务,在这种情况下你可以简易地要求我们的专家级的 Linux 管理员帮助你在你的服务器上启用 Nginx 的 HTTP/2 协议。他们提供 7×24 小时的服务,并且会很快关注的你要求。
|
||||
|
||||
PS:如果你喜欢这篇文章,请使用下面的按钮分享给你社交网络上的朋友们,或者发表一下评论。谢谢。
|
||||
|
||||
@ -89,7 +89,7 @@ via: https://www.rosehosting.com/blog/how-to-enable-http2-in-nginx-on-ubuntu-and
|
||||
|
||||
作者:[rosehosting.com][a]
|
||||
译者:[Flowsnow](https://github.com/Flowsnow)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,191 @@
|
||||
使用 Yum 历史查找已安装或已删除的软件包信息
|
||||
============================================================
|
||||
|
||||
[Yum][1] 是 RHEL/CentOS 的一个基于 rpm 的交互式高级包管理器,用户可以用它来安装新的软件包、卸载或清除旧的/不需要的软件包。它可以[自动运行系统更新][2],并执行依赖分析,对已安装的或可用的软件包进行查询等等。
|
||||
|
||||
在本文中,我们将解释如何查看 Yum 事务的历史记录,以便于了解有关安装的软件包以及从系统中所卸载/清除软件包的信息。
|
||||
|
||||
**推荐阅读:** [20 条关于 Linux 软件包管理的 Yum 命令][3]
|
||||
|
||||
以下是一些如何使用 Yum 历史命令的示例。
|
||||
|
||||
### 查看完整的 Yum 历史
|
||||
|
||||
要查看 Yum 事务完整的历史记录,我们可以运行以下命令,然后将显示:事务 ID、执行特定操作的用户、操作发生的日期和时间、实际操作以及任何错误的附加信息与操作:
|
||||
|
||||
```
|
||||
# yum history
|
||||
```
|
||||
|
||||
[][4]
|
||||
|
||||
### 使用 Yum 查找软件包信息
|
||||
|
||||
`history` 的子命令:`info`/`list`/`summary` 可以将事务 ID 或包名作为参数。此外,`list` 子命令可以加上特殊的参数,`all` 表示所有的事务。
|
||||
|
||||
运行以下命令查看先前的历史:
|
||||
|
||||
```
|
||||
# yum history list all
|
||||
```
|
||||
|
||||
并且,你可以使用下面的 `info` 命令查看涉及指定软件包的事务详情,例如 `httpd`:
|
||||
|
||||
```
|
||||
# yum history info httpd
|
||||
```
|
||||
|
||||
[][5]
|
||||
|
||||
发出以下命令可以获得包含 `httpd` 软件包的事务的摘要:
|
||||
|
||||
```
|
||||
# yum history summary httpd
|
||||
```
|
||||
|
||||
[][6]
|
||||
|
||||
还可以使用事务的 ID 来查找,以下命令会显示 ID 为 `15` 的事务的详情。
|
||||
|
||||
```
|
||||
# yum history info 15
|
||||
```
|
||||
|
||||
[][7]
|
||||
|
||||
### 使用 yum history 查找软件包事务信息
|
||||
|
||||
有一些用于打印某个或多个软件包事务详情的子命令。我们可以使用 `package-list` 或 `package_info` 查看关于 `httpd` 的更多信息,例如:
|
||||
|
||||
```
|
||||
# yum history package-list httpd
|
||||
或
|
||||
# yum history package-info httpd
|
||||
```
|
||||
|
||||
[][8]
|
||||
|
||||
要得到多个软件包的记录,我们可以运行:
|
||||
|
||||
```
|
||||
# yum history package-list httpd epel-release
|
||||
或
|
||||
# yum history packages-list httpd epel-release
|
||||
```
|
||||
|
||||
[][9]
|
||||
|
||||
### 使用 Yum 回滚软件包
|
||||
|
||||
此外,还有一些 `history` 的子命令可以让我们撤销/重做/回滚事务。
|
||||
|
||||
1. `undo` - 会撤销一个指定的事务。
|
||||
2. `redo` - 重复一次指定的事务。
|
||||
3. `rollback` - 撤销指定事务之后的所有事务。
|
||||
|
||||
它们采用单个事务 id 或关键字 `last` 和从最后一个事务开始的偏移量。
|
||||
|
||||
例如,假设我们已经做了 60 个事务,`last` 是指事务 60,`last-4` 指向事务 56。
|
||||
|
||||
**推荐阅读:** [怎样使用 `yum-utils` 来维护以及加速 Yum][10]
|
||||
|
||||
以上子命令是如下工作的:如果我们有 5 个事务——V,W,X,Y 和 Z,其中分别是安装各个软件包的。
|
||||
|
||||
```
|
||||
# yum history undo 2 #将删除软件包 W
|
||||
# yum history redo 2 #将重新安装软件包 W
|
||||
# yum history rollback 2 #将删除软件包 X、 Y 和 Z
|
||||
```
|
||||
|
||||
在下面的示例中,事务 2 是一个更新操作,如下所示,以下 `redo` 命令将重复事务 2 直到所有软件包到更新到当前时间的最新版本:
|
||||
|
||||
```
|
||||
# yum history | grep -w "2"
|
||||
```
|
||||
|
||||
[][11]
|
||||
|
||||
```
|
||||
# yum history redo 2
|
||||
```
|
||||
|
||||
[][12]
|
||||
|
||||
`redo` 子命令同样可以在我们指定事务之前加上一些可选的参数:
|
||||
|
||||
1. `force-reinstall` - 重新安装所有在此事务中安装的软件包(通过 `yum install`、`upgrade` 或 `downgrade`)。
|
||||
2. `force-remove` - 移除所有已经更新或回滚的软件包。
|
||||
|
||||
```
|
||||
# yum history redo force-reinstall 16
|
||||
```
|
||||
|
||||
[][13]
|
||||
|
||||
### 查找 Yum 历史数据库和来源信息
|
||||
|
||||
这些子命令为我们提供有关历史记录数据库和其它信息来源的信息:
|
||||
|
||||
1. `addon-info` - 提供更多的信息来源。
|
||||
2. `stats` - 显示当前历史数据库的统计信息。
|
||||
3. `sync` - 使我们能够更改为所有已安装软件包存储的 `rpmdb`/`yumdb` 数据。
|
||||
|
||||
看一下以下的命令的子命令实际上是怎样工作的:
|
||||
|
||||
```
|
||||
# yum history addon-info
|
||||
# yum history stats
|
||||
# yum history sync
|
||||
```
|
||||
|
||||
使用 `new` 子命令设置新的历史文件:
|
||||
|
||||
```
|
||||
# yum history new
|
||||
```
|
||||
|
||||
我们可以在 yum 手册页找到关于 Yum `history` 命令和其它几个命令的完整信息:
|
||||
|
||||
```
|
||||
# man yum
|
||||
```
|
||||
|
||||
**推荐阅读:** [4 个使用 Yum 禁用/锁定某些软件包更新的方法][14]
|
||||
|
||||
就是这么多了。在本篇指南中,我们介绍了各种 Yum `history` 命令,以查看 Yum 事务的详细信息。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
作者简介:
|
||||
|
||||
Aaron Kili 是 Linux 和 F.O.S.S 的爱好者,目前任 TecMint 的作者,志向是一名 Linux 系统管理员、web 开发者。他喜欢用电脑工作,并热衷于分享知识。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.tecmint.com/view-yum-history-to-find-packages-info/
|
||||
|
||||
作者:[Aaron Kili][a]
|
||||
译者:[OneNewLife](https://github.com/OneNewLife)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.tecmint.com/author/aaronkili/
|
||||
|
||||
[1]:http://www.tecmint.com/20-linux-yum-yellowdog-updater-modified-commands-for-package-mangement/
|
||||
[2]:http://www.tecmint.com/auto-install-security-patches-updates-on-centos-rhel/
|
||||
[3]:http://www.tecmint.com/20-linux-yum-yellowdog-updater-modified-commands-for-package-mangement/
|
||||
[4]:http://www.tecmint.com/wp-content/uploads/2017/02/View-Yum-History.png
|
||||
[5]:http://www.tecmint.com/wp-content/uploads/2017/02/Yum-Find-Package-Info.png
|
||||
[6]:http://www.tecmint.com/wp-content/uploads/2017/02/Yum-Find-Summary-of-Package.png
|
||||
[7]:http://www.tecmint.com/wp-content/uploads/2017/02/Find-Package-Info-Using-ID.png
|
||||
[8]:http://www.tecmint.com/wp-content/uploads/2017/02/Find-Package-Transaction-Info.png
|
||||
[9]:http://www.tecmint.com/wp-content/uploads/2017/02/Find-Multiple-Package-Info.png
|
||||
[10]:http://www.tecmint.com/linux-yum-package-management-with-yum-utils/
|
||||
[11]:http://www.tecmint.com/wp-content/uploads/2017/02/Find-Yum-Package-Transaction-ID.png
|
||||
[12]:http://www.tecmint.com/wp-content/uploads/2017/02/Yum-Redo-Package-Update.png
|
||||
[13]:http://www.tecmint.com/wp-content/uploads/2017/02/Yum-Force-Install-Package.png
|
||||
[14]:http://www.tecmint.com/yum-lock-disable-blacklist-certain-package-update-version/
|
||||
[15]:http://www.tecmint.com/author/aaronkili/
|
||||
[16]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
|
||||
[17]:http://www.tecmint.com/free-linux-shell-scripting-books/
|
@ -0,0 +1,76 @@
|
||||
在 CentOS 7 中使用 Sendmail 通过 PHP 发送邮件
|
||||
============================================================
|
||||
|
||||

|
||||
|
||||
如果你运行了一个 web 服务器或者一台 VPS ,你可能需要在你的 PHP 程序中发送邮件。
|
||||
|
||||
同样,如果你正在运行一个 WordPress 博客,或者你正在使用任何类型的 CMS ,你允许你的访问者通过联系表单向你发送电子邮件(例如使用 WordPress 的*[Contact Form 7][3] 插件),你可能需要安装一个名为 [sendmail][4] 的简单的程序到你的 web 服务器上。
|
||||
|
||||
> Sendmail 是一个通用的互联网电子邮件投递工具,支持多种邮件传输和传递方法,包括用于通过 Internet 进行电子邮件传输的简单邮件传输协议(SMTP)。[来自 Wikipedia][5]。
|
||||
|
||||
Sendmail 可以通过你的发行版的软件包管理器安装。
|
||||
|
||||
以下是在 CentOS 7 上安装 Sendmail 的说明。
|
||||
|
||||
### 安装
|
||||
|
||||
要在 CentOS 7 中安装 CentOS 7 ,运行下面的命令:
|
||||
|
||||
```
|
||||
# yum install sendmail
|
||||
```
|
||||
|
||||
### 允许服务器可以发送邮件
|
||||
|
||||
如果在 CentOS 7 中使用了 SELinux, 你需要使用下面的命令允许 sendmail 发送邮件:
|
||||
|
||||
```
|
||||
# setsebool -P httpd_can_sendmail=on
|
||||
```
|
||||
|
||||
### 使用 PHP 发送一封测试邮件
|
||||
|
||||
使用这个命令进入 php 交互 shell 中:
|
||||
|
||||
```
|
||||
php -a
|
||||
```
|
||||
|
||||
|
||||
在交互 shell 中,粘贴下面的代码:
|
||||
|
||||
```
|
||||
mail ('user@receiver.com', "Test email", "Test email from the Internet", null, "-f user@sender.com");
|
||||
```
|
||||
|
||||
不要忘记将 `user@receiver.com` 和 `user@sender.com` 分别替换为你的收件地址和发件地址。
|
||||
|
||||
### 浏览 sendmail 日志
|
||||
|
||||
要监控邮件日志,你可以使用这个命令:
|
||||
|
||||
```
|
||||
tail /var/log/maillog
|
||||
```
|
||||
|
||||
|
||||
在服务器上安装 sendmail 完成后,你可以允许你的用户通过联系栏通过邮件联系你了。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://fasterland.net/sending-email-via-php-centos-7-using-sendmail.html
|
||||
|
||||
作者:[Francesco Mondello][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://fasterland.net/
|
||||
[1]:http://fasterland.net/author/faster3ck
|
||||
[2]:http://fasterland.net/
|
||||
[3]:https://wordpress.org/plugins/contact-form-7/
|
||||
[4]:http://www.sendmail.com/sm/open_source/
|
||||
[5]:https://en.wikipedia.org/wiki/Sendmail
|
||||
[6]:http://fasterland.net/category/server-admin
|
@ -0,0 +1,245 @@
|
||||
如何配置 VirtualBox 中的客户机与宿主机之间的网络连接
|
||||
============================================================
|
||||
|
||||
当你在 [VirtualBox 虚拟机软件][2] 中安装了各种操作系统时,你可能需要实现宿主机与虚拟机之间的相互访问。
|
||||
|
||||
在这篇文章中,我们将会以最简单明了的方式来说明如何配置客户机与 Linux 宿主机的网络,以实现两者相互访问或者让客户机连接到外网。(LCTT 译注:客户机指 Oracle VirtualBox 虚拟机软件中安装的操作系统,如本文中用到的 CentOS 7 和 Ubuntu 16.10 。宿主机就是你自己的笔记本电脑或台式机,注意这篇文章中作者的宿主机上安装的操作系统是 Linux Mint 18 ,而不是我们平时使用的 Windows 系统。)
|
||||
|
||||
本文测试环境:
|
||||
1、宿主机操作系统—— Linux Mint 18
|
||||
2、客户机操作系统—— CentOS 7 和 Ubuntu 16.10
|
||||
|
||||
#### 要求
|
||||
|
||||
1、宿主机上安装的 [Oracle VirtualBox 虚拟机][1] 能正常使用。
|
||||
2、你得事先在 Oracle virtualBox 虚拟机软件中安装好客户机操作系统,比如 Ubuntu、Fedora、CentOS、 Linux Mint 或者其它的 Linux 系统也行。
|
||||
3、在你配置网络前,请先关闭客户机。
|
||||
|
||||
为了让宿主机和客户机能够互相联通,这两个机器的默认网卡 IP 必须设置在同一网段,你可以为客户机添加多达 4 块网卡。
|
||||
|
||||
默认网卡(网卡 1)通常用于使用 NAT 连接方式连接到宿主机进行上网。
|
||||
|
||||
重要提示:通常总是设置第一块网卡与宿主机通信,第二块网卡连接到外网。
|
||||
|
||||
### 为客户机和宿主机创建网卡
|
||||
|
||||
在下面的 VirtualBox 管理器界面,创建客户机和宿主机之间的通信网卡。
|
||||
|
||||
打开文件->首选项配置,或者使用组合键 `Ctrl + G` :
|
||||
|
||||
[
|
||||

|
||||
][3]
|
||||
|
||||
*Virtualbox 首选项界面*
|
||||
|
||||
在下图中有两个选项,单击并选择仅主机( Host-only )网络。然后使用右侧的 `+` 按钮来添加一个新的仅主机网络。
|
||||
|
||||
[
|
||||

|
||||
][4]
|
||||
|
||||
*设置客户机网络*
|
||||
|
||||
这样就创建好了一个名为 vboxnet0 的新的仅主机模式网卡。
|
||||
|
||||
如果你愿意,你可以使用中间的 `-` 按钮来删除这个网卡,你可以单击编辑按钮来查看这个网卡的详细配置信息。
|
||||
|
||||
你也可以根据自己的实际环境修改配置信息,比如网络地址,子网掩码等等。
|
||||
|
||||
注意:下图中的 IPv4 地址就是你的宿主机的 IP 地址。
|
||||
|
||||
[
|
||||

|
||||
][6]
|
||||
|
||||
*宿主机网络信息*
|
||||
|
||||
下图中,如果你想让客户机使用动态 IP 地址,你可以通过配置 DHCP 服务来完成(在使用前请确保启用 DHCP )。但是我建议你为客户机配置一个静态 IP 地址。
|
||||
|
||||
在下面的设置所有网络界面单击 OK 按钮来保存修改的配置。
|
||||
|
||||
[
|
||||

|
||||
][7]
|
||||
|
||||
*为客户机设置静态 IP 地址*
|
||||
|
||||
#### 配置客户机网络设置
|
||||
|
||||
注意:你可以根据下面的步骤来为任何需要与宿主机通信的客户机添加网卡。
|
||||
|
||||
回到 VirtualBox 管理器界面,选择客户机,比如 Ubuntu 16.10 Server 或者 CentOS 7 ,然后单击设置菜单。
|
||||
|
||||
[
|
||||

|
||||
][8]
|
||||
|
||||
*配置客户机网络设置*
|
||||
|
||||
#### 配置客户机网卡以连接到宿主机
|
||||
|
||||
从下图的界面中选择网络选项。然后配置第一块网卡( 网卡 1 )的信息如下:
|
||||
|
||||
1、勾选选项:“启用网卡”来开启该网卡。
|
||||
2、在连接方式选项:选择仅主机( Host-only )网络。
|
||||
3、然后选择网卡名称:vboxnet0
|
||||
|
||||
如下图所示,单击 OK 来保存设置:
|
||||
|
||||
[
|
||||

|
||||
][9]
|
||||
|
||||
*启用客户机网络*
|
||||
|
||||
#### 配置客户机网卡连接外网
|
||||
|
||||
之后添加第二块网卡(网卡 2 )来让客户机连接到宿主机进行上网。使用下面的设置:
|
||||
|
||||
1、勾选选项:“启用网络连接”来激活这块网卡。
|
||||
2、在连接方式选项:选择 NAT 方式。
|
||||
|
||||
[
|
||||

|
||||
][10]
|
||||
|
||||
为客户机启用网络连接
|
||||
|
||||
#### 为客户机设置静态 IP 地址
|
||||
|
||||
启动客户机,登录系统并[配置静态 IP 地址][11]。在客户机上执行下面的命令来查看所有网卡配置信息,然后分配一个 IP 地址:
|
||||
|
||||
```
|
||||
$ ip add
|
||||
```
|
||||
[
|
||||

|
||||
][12]
|
||||
|
||||
*为客户机配置静态 IP 地址*
|
||||
|
||||
从上面的截图中可以看出客户机已启用了三块网卡:
|
||||
|
||||
1、`lo` ——回环网络接口
|
||||
2、`enp0s3` (网卡 1)—— 前一步我们配置的连接方式为仅主机( Host-Only)模式并且已启用 DHCP 的网卡,之后我们又配置成了静态 IP 地址。
|
||||
3、`enp0s8` (网卡 2)—— 用于连接到外网。该网卡默认情况下使用 DHCP 来动态获取 IP 地址。
|
||||
|
||||
##### 在 Debian/Ubuntu/Linux Mint 系统下的配置
|
||||
|
||||
重要提示: 这里我使用的是 Ubuntu 16.10 Server , IP 地址为 192.168.56.5 。
|
||||
|
||||
使用你喜欢的编辑器及管理员账号打开 `/etc/network/interfaces` 配置文件:
|
||||
|
||||
```
|
||||
$ sudo vi /etc/network/interfaces
|
||||
```
|
||||
|
||||
修改网卡 enp0s3 的配置信息如下(根据你的实际环境进行修改):
|
||||
|
||||
```
|
||||
auto enp0s3
|
||||
iface enp0s3 inet static
|
||||
address 192.168.56.5
|
||||
network 192.168.56.0
|
||||
netmask 255.255.255.0
|
||||
gateway 192.168.56.1
|
||||
dns-nameservers 8.8.8.8 192.168.56.1
|
||||
```
|
||||
|
||||
保存并退出。
|
||||
|
||||
然后使用下面的命令来重启网络服务:
|
||||
|
||||
```
|
||||
$ sudo systemctl restart networking
|
||||
```
|
||||
|
||||
或者,正常重启系统,然后检查网络配置是否为新的 IP 地址:
|
||||
|
||||
```
|
||||
$ ip add
|
||||
```
|
||||
|
||||
#####在 RHEL/CentOS/Fedora 系统下的配置
|
||||
|
||||
重要提示: 这里我使用的是 CentOS 7 系统, IP 地址为: 192.168.56.10 。
|
||||
|
||||
使用管理员帐号及你喜欢的编辑器打开 enp0s3 (仅主机网络)的网卡配置文件 `/etc/sysconfig/network-scripts/ifcfg-enp0s3` :
|
||||
|
||||
```
|
||||
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
|
||||
```
|
||||
|
||||
创建或修改配置文件信息如下(根据你实际的环境进行修改):
|
||||
|
||||
```
|
||||
BOOTPROTO=static
|
||||
ONBOOT=yes
|
||||
IPADDR=192.168.56.10
|
||||
NETWORK=192.168.56.0
|
||||
NETMASK=255.255.255.0
|
||||
GATEWAY=192.168.56.1
|
||||
DNS=8.8.8.8 192.168.56.1
|
||||
NM_CONTROLLED=no #use this file not network manager to manage interface
|
||||
```
|
||||
|
||||
保存并退出。然后使用下面的命令重启网络服务(也可以重启系统):
|
||||
|
||||
```
|
||||
$ sudo systemctl restart network.service
|
||||
```
|
||||
|
||||
检查修改的配置地信息是否生效:
|
||||
|
||||
```
|
||||
$ ip add
|
||||
```
|
||||
|
||||
#### 在宿主机上使用 SSH 工具来管理客户机
|
||||
|
||||
在宿主机上使用 SSH 工具来管理你的客户机。在下面的实例中,我将使用 SSH 工具连接到 CentOS 7 服务器(192.168.56.10):
|
||||
|
||||
```
|
||||
$ ssh tecmint@192.168.56.10
|
||||
$ who
|
||||
```
|
||||
[
|
||||

|
||||
][13]
|
||||
|
||||
*使用 SSH 工具连接客户机*
|
||||
|
||||
就写到这里吧!在这篇文章中,我们用简单易懂的方法讲述了如何在宿主机与客户机之间设置网络连接方式。请在下面的评论区跟大家分享下你的想法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
作者简介:
|
||||
|
||||
Aaron Kili 是一名 Linux 和 F.O.S.S 爱好者,即将从事 Linux 系统管理员和网页开发工作,他日前是 TecMint 技术网站的原创作者,非常喜欢使用电脑工作,坚信分享知识是一种美德。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.tecmint.com/network-between-guest-vm-and-host-virtualbox/
|
||||
|
||||
作者:[Aaron Kili][a]
|
||||
译者:[rusking](https://github.com/rusking)
|
||||
校对:[Bestony](https://github.com/Bestony)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.tecmint.com/author/aaronkili/
|
||||
|
||||
[1]:http://www.tecmint.com/install-virtualbox-on-redhat-centos-fedora/
|
||||
[2]:http://www.tecmint.com/install-virtualbox-on-redhat-centos-fedora/
|
||||
[3]:http://www.tecmint.com/wp-content/uploads/2017/02/Virtualbox-Preferences-Window.png
|
||||
[4]:http://www.tecmint.com/wp-content/uploads/2017/02/Set-Guest-Network.png
|
||||
[5]:http://www.tecmint.com/wp-content/uploads/2017/02/Virtualbox-Preferences-Window-1.png
|
||||
[6]:http://www.tecmint.com/wp-content/uploads/2017/02/Host-Network-Details.png
|
||||
[7]:http://www.tecmint.com/wp-content/uploads/2017/02/Set-Guest-Static-IP-Address.png
|
||||
[8]:http://www.tecmint.com/wp-content/uploads/2017/02/Configure-VM-Settings.png
|
||||
[9]:http://www.tecmint.com/wp-content/uploads/2017/02/Enable-Network-Adapter-for-Guest-VM.png
|
||||
[10]:http://www.tecmint.com/wp-content/uploads/2017/02/Enable-Network-Adapter-for-VM.png
|
||||
[11]:http://www.tecmint.com/set-add-static-ip-address-in-linux/
|
||||
[12]:http://www.tecmint.com/wp-content/uploads/2017/02/Configure-Static-IP-Address-for-VM.png
|
||||
[13]:http://www.tecmint.com/wp-content/uploads/2017/02/Connect-Guest-VM-using-SSH.png
|
@ -0,0 +1,215 @@
|
||||
sudo 入门指南
|
||||
============================================================
|
||||
|
||||
你在使用 Linux 命令行时曾经得到过“拒绝访问(Permission denied)”的错误提示吗?这可能是因为你正在尝试执行一个需要 root 权限的操作。例如,下面的截图展示了当我尝试复制一个二进制文件到一个系统目录时产生的错误。
|
||||
|
||||
[
|
||||

|
||||
][11]
|
||||
|
||||
那么该怎么解决这个错误?很简单,使用 `sudo` 命令。
|
||||
|
||||
[
|
||||

|
||||
][12]
|
||||
|
||||
用户运行此命令后会被提示输入他们(**自己**)的登录密码。一旦输入了正确的密码,操作将会成功执行。
|
||||
|
||||
毫无疑问,`sudo` 是任何在 Linux 上使用命令行的人都必须知道的命令。但是,为了更负责、更有效地使用该命令,你还是要知道一些相关(及深入)的细节。这正是我们将会在这篇文章中讨论的。
|
||||
|
||||
*在我们继续之前,值得提一下的是,这篇文章所提到的所有命令指示都已经在 Ubuntu 14.04 LTS 下的 4.3.11 版 Bash 下通过测试。*
|
||||
|
||||
### 什么是 sudo
|
||||
|
||||
正如你们大部分人所知道的,`sudo` 用来执行需要提升权限(通常是作为 root 用户)的命令。在这篇文章之前的简介部分已经讨论过这样的一个例子。然而,如果你想的话,你能用 `sudo` 以其它(非 root )用户运行命令。
|
||||
|
||||
这是由工具提供的 `-u` 命令行选项所实现的。举个例子,如下例所展示的那样,我(`himanshu`)尝试将一个在其他用户(`howtoforge`)的 Home 目录中的文件重命名,但是得到一个“访问拒绝”的错误。然后我加上 `sudo -u howtoforge` 后用同样的“mv”命令,命令成功执行了:
|
||||
|
||||
[
|
||||

|
||||
][13]
|
||||
|
||||
### 任何人都能用 sudo 吗?
|
||||
|
||||
不是。一个用户要能使用 `sudo` ,应该在 `/etc/sudoers` 文件里有一条跟该用户相关的信息。下述摘自 Ubuntu 网站的一段能讲得更清楚:
|
||||
|
||||
> `/etc/sudoers` 文件控制了谁能以哪个用户的身份在哪个机器上运行什么命令,还可以控制特别的情况,例如对于特定的命令是否需要输入密码。这个文件由<ruby>别名<rt>aliases</rt></ruby>(基本变量)和<ruby>用户标识<rt>user specifications</rt></ruby>(控制谁能运行什么命令)组成。
|
||||
|
||||
如果你正在使用 Ubuntu,让一个用户能运行 `sudo` 命令很容易:你所需要做的就是把账户类型改成<ruby>管理员<rt>administrator</rt></ruby>。这可直接在 <ruby>系统设置<rt>System Settings</rt></ruby> -> <ruby>用户账户<rt> User Accounts</rt></ruby>里完成。
|
||||
|
||||
|
||||
[
|
||||

|
||||
][14]
|
||||
|
||||
首先解锁该窗口:
|
||||
|
||||
[
|
||||

|
||||
][15]
|
||||
|
||||
然后选择你想改变用户类型的用户,然后将类型改成<ruby>管理员<rt>administrator</rt></ruby>。
|
||||
|
||||
[
|
||||

|
||||
][16]
|
||||
|
||||
然而,如果你不使用 Ubuntu,或者你的发行版没有提供这个特性,你可以手动编辑 `/etc/sudoers` 文件来实现此改变。要在文件中添加这样的一行:
|
||||
|
||||
|
||||
```
|
||||
[user] ALL=(ALL:ALL) ALL
|
||||
```
|
||||
|
||||
无需赘言,`[user]` 应该用你想提升 sudo 权限的用户的用户名所代替。在这里值得提到的一件重要的事情是,官方建议通过 `visudo` 命令编辑该文件 —— 你需要做的就是运行下述命令:
|
||||
|
||||
```
|
||||
sudo visudo
|
||||
```
|
||||
|
||||
为了说清究竟是怎么一回事,这里有段从 `visudo` 手册里的摘要:
|
||||
|
||||
> `visudo` 以安全的模式编辑 `sudoers` 文件。`visudo` 锁定 `sudoers` 文件以防多个编辑同时进行,提供基本的检查(sanity checks)和语法错误检查。如果 `sudoers` 文件现在正在被编辑,你将会收到一个信息提示稍后再试。
|
||||
|
||||
关于 visudo 的更多信息,前往[这里][17]。
|
||||
|
||||
### 什么是 sudo 会话
|
||||
|
||||
如果你经常使用 `sudo` 命令,你肯定注意到过当你成功输入一次密码后,可以不用输入密码再运行几次 `sudo` 命令。但是一段时间后,`sudo` 命令会再次要求你的密码。
|
||||
|
||||
这种现象跟运行 `sudo` 命令数目无关,跟时间有关。是的,`sudo` 默认在输入一次密码后 15 分钟内不会再次要求密码。15 分钟后,你会再次被要求输入密码。
|
||||
|
||||
然而,如果你想的话,你能改变这种现象。用以下命令打开 `/etc/sudoers` 文件:
|
||||
|
||||
```
|
||||
sudo visudo
|
||||
```
|
||||
|
||||
找到这一行:
|
||||
|
||||
```
|
||||
Defaults env_reset
|
||||
```
|
||||
|
||||
[
|
||||

|
||||
][18]
|
||||
|
||||
然后在这行最后添加以下变量:
|
||||
|
||||
```
|
||||
Defaults env_reset,timestamp_timeout=[new-value]
|
||||
```
|
||||
|
||||
`[new-value]` 为想要 `sudo` 会话持续的时间数。例如,设数值为 40。
|
||||
|
||||
[
|
||||

|
||||
][19]
|
||||
|
||||
如果你希望每次使用 `sudo` 命令时都要求输入密码,你可以把这个变量赋值为 0 。想要 `sudo` 会话永远不过时,应赋值为 -1。
|
||||
|
||||
注意将 `timestamp_timeout` 的值赋为 “-1” 是强烈不推荐的。
|
||||
|
||||
### sudo 密码
|
||||
|
||||
你可能注意过,当 `sudo` 要求输入密码然后你开始输入时,不会显示任何东西 —— 甚至连常规的星号都没有。虽然这不是什么大问题,不过一些用户就是希望显示星号。
|
||||
|
||||
好消息是那有可能也很容易做到。所有你需要做的就是在 `/etc/sudoers` 文件里将下述的行:
|
||||
|
||||
```
|
||||
Defaults env_reset
|
||||
```
|
||||
|
||||
改成
|
||||
|
||||
```
|
||||
Defaults env_reset,pwfeedback
|
||||
```
|
||||
|
||||
然后保存文件。
|
||||
|
||||
现在,无论什么时候输入 `sudo` 密码,星号都会显示。
|
||||
|
||||
[
|
||||

|
||||
][20]
|
||||
|
||||
### 一些重要的 sudo 命令行参数
|
||||
|
||||
除了 `-u` 命令行参数(我们已经在这篇教程的开始部分讨论过了),还有其他重要的 `sudo` 命令行参数值得注意。在这部分,我们将会讨论其中一些。
|
||||
|
||||
#### -k 参数
|
||||
|
||||
考虑下这种情况:输入密码后你刚刚运行了几个 `sudo` 驱动的命令。现在,如你所知,sudo 会话默认保持 15 分钟。假设在这会话期间,你需要让某些人访问你的终端,但你不想让他们可以使用 `sudo` ,你将会怎么做?
|
||||
|
||||
还好,有 `-k` 命令行参数允许用户取消 `sudo` 权限。这是 `sudo` 帮助页面(man page)对此的解释:
|
||||
|
||||
> `-k`, `--reset-timestamp`
|
||||
|
||||
> 不带任何命令使用时,撤销用户缓存的凭据。换句话讲,下一次使用 `sudo` 将会要求输入密码。使用这个参数不需要密码,也可以放到一个 `.logout` 文件中来撤销 sudo 权限。
|
||||
|
||||
> 当与一个命令,或者一个可能需要密码的操作一起用时,这个参数将会导致 `sudo` 忽略用户缓存的凭据。结果是 `sudo` 要求输入密码(如果这是被安全策略所要求的),而且不会更新用户缓存的凭据。
|
||||
|
||||
|
||||
#### -s 参数
|
||||
|
||||
有时你的工作要求你运行一堆需要 root 权限的命令,你不想每次都输入密码。你也不想通过改变 `/etc/sudoers` 文件调整 `sudo` 会话的过期时限。
|
||||
|
||||
这种情况下,你可以用 `sudo` 的 `-s` 参数。这是 `sudo` 帮助页面(man page)对此的解释:
|
||||
|
||||
> `-s`, `--shell`
|
||||
|
||||
> 如果设置了 SHELL 环境变量或者调用用户的密码数据库指定了 shell,就运行该 shell 。如果指定了命令,命令将会通过 shell 的 `-c` 参数将命令传递给该 shell 执行。如果没有指定命令,会执行一个交互式 shell。
|
||||
|
||||
所以,基本上这命令参数做的是:
|
||||
|
||||
* 启动一个新的 shell - 至于是哪一个 shell,参照 SHELL 环境变量赋值。如果 `$SHELL` 是空的,将会用 `/etc/passwd` 中定义的 shell。
|
||||
|
||||
* 如果你用 `-s` 参数传递了一个命令名(例如 `sudo -s whoami`),实际执行的是 `sudo /bin/bash -c whoami`。
|
||||
|
||||
* 如果你没有尝试执行其他命令(也就是说,你只是要运行 `sudo -s`),你将会得到一个有 root 权限的交互式的 shell。
|
||||
|
||||
请记住,`-s` 命令行参数给你一个有 root 权限的 shell,但那不是 root 环境 —— 还是执行的你自己的 `.bashrc` 。例如,在 `sudo -s` 运行的新 shell 里,执行 `whoami` 命令仍会返回你的用户名,而非 root 。
|
||||
|
||||
#### -i 参数
|
||||
|
||||
`-i` 参数跟我们讨论过的 `-s` 参数相像。然而,还是有点区别。一个重要的区别是 `-i` 给你的是 root 环境,意味着你的(用户的)`.bashrc` 被忽略。这就像没有显式地用 root 登录也能成为 root 。此外,你也不用输入 root 用户密码。
|
||||
|
||||
**重要**:请注意 `su` 命令也能让你切换用户(默认切换到 root )。这个命令需要你输入 root 密码。为了避免这一点,你可以使用 `sudo` 执行它(`sudo su`),这样你只需要输入你的登录密码。然而,`su` 和 `sudo su` 有隐含的区别 —— 要了解它们,以及它们和 `sudo -i` 的区别,请看[这里][10] 。
|
||||
|
||||
### 总结
|
||||
|
||||
我希望现在你至少知道了 `sudo` 的基本知识,以及如何调整 `sudo` 的默认行为。请按我们解释过的那样去尝试调整 `/etc/sudoers` 。同时也浏览一下论坛讨论来更深入了解 `sudo` 命令。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.howtoforge.com/tutorial/sudo-beginners-guide/
|
||||
|
||||
作者:[Himanshu Arora][a]
|
||||
译者:[ypingcn](https://ypingcn.github.io/wiki/lctt)
|
||||
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/
|
||||
[1]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#the-k-option
|
||||
[2]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#the-s-option
|
||||
[3]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#the-i-option
|
||||
[4]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#what-is-sudo
|
||||
[5]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#can-any-user-use-sudo
|
||||
[6]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#what-is-a-sudo-session
|
||||
[7]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#the-sudo-password
|
||||
[8]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#some-important-sudo-command-line-options
|
||||
[9]: https://www.howtoforge.com/tutorial/sudo-beginners-guide/#conclusion
|
||||
[10]: http://unix.stackexchange.com/questions/98531/difference-between-sudo-i-and-sudo-su
|
||||
[11]: https://www.howtoforge.com/images/sudo-beginners-guide/big/perm-denied-error.png
|
||||
[12]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-example.png
|
||||
[13]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-switch-user.png
|
||||
[14]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-user-accounts.png
|
||||
[15]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-user-unlock.png
|
||||
[16]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-admin-account.png
|
||||
[17]: https://www.sudo.ws/man/1.8.17/visudo.man.html
|
||||
[18]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-session-time-default.png
|
||||
[19]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-session-timeout.png
|
||||
[20]: https://www.howtoforge.com/images/sudo-beginners-guide/big/sudo-password.png
|
@ -0,0 +1,46 @@
|
||||
哪个 Linux 系统最适合玩游戏?
|
||||
============================================================
|
||||
|
||||
> 告诉我们哪个 Linux 发型版对游戏支持的最好
|
||||
|
||||
在过去几个月中,出于游戏目的,我们尝试了多种 GNU/Linux 发行版,我们得出的结论是没有专为 Linux 游戏设计的完美的操作系统。
|
||||
|
||||
我们都知道,游戏世界分成 Nvidia 和 AMD 两个阵营。现在,如果你使用的是 Nvidia 显卡,即使是五年前的一块显卡,也可以在大多数基于 Linux 的操作系统上使用,因为 Nvidia 差不多为其所有的 GPU 都提供了最新的视频驱动程序。
|
||||
|
||||
当然,这意味着如果你有一块 Nvidia GPU,在大多数 GNU/Linux 发行版上你不会有什么大问题。至少与游戏中的图形或其他性能问题无关,这种问题将严重影响你的游戏体验。
|
||||
|
||||
### AMD Radeon 用户最好的游戏发行版
|
||||
|
||||
如果你使用 AMD Radeon GPU,事情会是完全不同的。我们都知道,AMD 的专有显卡驱动程序仍然需要大量的工作来兼容最新的 GNU/Linux 发行版本。所有的 AMD GPU ,即便是在最新的 X.Org 服务端和 Linux 内核版本上都是这样。
|
||||
|
||||
目前,AMDGPU-PRO 视频驱动程序只能在 Ubuntu 16.04 LTS、CentOS 6.8/7.3、Red Hat Enterprise Linux 6.8/7.3、SUSE Linux Enterprise Desktop 和 Server 12 SP2 上运行。除了 Ubuntu 16.04 LTS 之外,我们不知道为什么 AMD 为所有这些面向服务器和企业级的操作系统提供支持。
|
||||
|
||||
我们不相信有 Linux 玩家会在这些系统上面玩游戏。[最新的 AMDGPU-PRO 更新][1]终于支持了 HD 7xxx 和 8xxx 系列的 AMD Radeon GPU,但是如果我们不想使用 Ubuntu 16.04 LTS 呢?
|
||||
|
||||
另外,我们有 Mesa 3D 图形库,这在大多数发行版上都有。Mesa 图形栈为我们的 AMD GPU 提供了功能强大的开源 Radeon 和 AMDGPU 驱动程序,但是为了享受最好的游戏体验,你还需要拥有最新的 X.Org 服务端和 Linux 内核。
|
||||
|
||||
并不是所有的 Linux 操作系统都附带最新的 Mesa(13.0)、X.Org 服务端(1.19)和 Linux 内核(4.9)版本,它们支持较旧的 AMD GPU。有些系统只有其中一两种技术,但我们这些都需要,而且内核需要编译进 AMD Radeon Southern Islands 和 Sea Island 驱动来支持 AMDGPU。
|
||||
|
||||
我们发现整个情况相当令人沮丧,至少对于一些使用 AMD Radeon 老式显卡的玩家来说是这样的。现在,我们发现,使用 AMD Radeon HD 8xxx GPU 的最佳游戏体验只能通过使用 Git 获取到的 Mesa 17 以及 Linux 内核 4.10 RC 来实现。
|
||||
|
||||
所以我们现在请求你 - 如果你找到了玩游戏的完美的 GNU/Linux 发行版,无论你使用的是 AMD Radeon 还是 Nvidia GPU,但我们最感兴趣的是那些使用 AMD GPU 的玩家,请告知我们你使用的是什么发行版,设置是什么,能不能玩最新的游戏,或者有无体验问题。谢谢!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://news.softpedia.com/news/the-best-operating-system-for-linux-gaming-which-one-do-you-use-and-why-512861.shtml
|
||||
|
||||
作者:[Marius Nestor][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://news.softpedia.com/editors/browse/marius-nestor
|
||||
[1]:http://news.softpedia.com/news/amdgpu-pro-16-60-linux-driver-finally-adds-amd-radeon-hd-7xxx-8xxx-support-512280.shtml
|
||||
[2]:http://news.softpedia.com/editors/browse/marius-nestor
|
||||
[3]:http://news.softpedia.com/news/the-best-operating-system-for-linux-gaming-which-one-do-you-use-and-why-512861.shtml#
|
||||
[4]:https://share.flipboard.com/bookmarklet/popout?v=2&title=The+Best+Operating+System+for+Linux+Gaming%3A+Which+One+Do+You+Use+and+Why%3F&url=http%3A%2F%2Fnews.softpedia.com%2Fnews%2Fthe-best-operating-system-for-linux-gaming-which-one-do-you-use-and-why-512861.shtml&t=1487038258&utm_campaign=widgets&utm_medium=web&utm_source=flipit&utm_content=news.softpedia.com
|
||||
[5]:http://news.softpedia.com/news/the-best-operating-system-for-linux-gaming-which-one-do-you-use-and-why-512861.shtml#
|
||||
[6]:http://twitter.com/intent/tweet?related=softpedia&via=mariusnestor&text=The+Best+Operating+System+for+Linux+Gaming%3A+Which+One+Do+You+Use+and+Why%3F&url=http%3A%2F%2Fnews.softpedia.com%2Fnews%2Fthe-best-operating-system-for-linux-gaming-which-one-do-you-use-and-why-512861.shtml
|
||||
[7]:https://plus.google.com/share?url=http://news.softpedia.com/news/the-best-operating-system-for-linux-gaming-which-one-do-you-use-and-why-512861.shtml
|
||||
[8]:https://twitter.com/intent/follow?screen_name=mariusnestor
|
@ -0,0 +1,94 @@
|
||||
使用 Elizabeth 为应用生成随机样本数据
|
||||
============================================================
|
||||
|
||||

|
||||
|
||||
图片提供 : Opensource.com
|
||||
|
||||
> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.
|
||||
|
||||
不,我的文章没有被 [Lorem ipsum][2] 生成器劫持(LCTT 译注:Lorem ipsum,中文又称“乱数假文”,只是一段用来测试排版效果的占位文字,没有实际的含义)。作为本月的 Nooks&Crannies 专栏文章,我发现了一个有趣的小 Python 库,以帮助开发人员为其应用程序生成随机数据。它被称为 [Elizabeth][3]。
|
||||
|
||||
它由 Líkið Geimfari 编写,并在 MIT 许可证下发行,Elizabeth 以 21 个不同本地化信息提供了 18 种数据提供器,可用于生成随机信息(LCTT 译注:不仅是随机数),包括姓名和个人特征、地址、文本数据、交通信息、网络和 Internet 社交媒体数据、数字等等。安装它需要 [Python 3.2][4] 或更高版本,您可以使用 `pip` 或从 `git` 仓库安装它。
|
||||
|
||||
在我的测试机上,我在一个全新安装的 [Debian][5] Jessie 上使用 pip 来安装它,要做的就是 `apt-get install python3-pip`,它将安装 Python 和所需的依赖项。然后 `pip install elizabeth`,之后就安装好了。
|
||||
|
||||
只是为好玩,让我们在 Python 的交互式解释器中为一个人生成一些随机数据:
|
||||
|
||||
```
|
||||
>>> from elizabeth import Personal
|
||||
>>> p=Personal('en')
|
||||
>>> p.full_name(gender="male")
|
||||
'Elvis Herring'
|
||||
>>> p.blood_type()
|
||||
'B+'
|
||||
>>> p.credit_card_expiration_date()
|
||||
'09/17'
|
||||
>>> p.email(gender='male')
|
||||
'jessie7517@gmail.com'
|
||||
>>> p.favorite_music_genre()
|
||||
'Ambient'
|
||||
>>> p.identifier(mask='13064########')
|
||||
'1306420450944'
|
||||
>>> p.sexual_orientation()
|
||||
'Heterosexual'
|
||||
>>> p.work_experience()
|
||||
39
|
||||
>>> p.occupation()
|
||||
'Senior System Designer'
|
||||
>>>
|
||||
```
|
||||
|
||||
在代码中使用它就像创建一个对象那样,然后调用要你需要填充数据的对应方法。
|
||||
|
||||
Elizabeth 内置了 18 种不同的生成工具,添加新的生成器并不困难;你只需要定义从 JSON 值集合中获取数据的例程。以下是一些随机文本字符串生成,再次打开解释器:
|
||||
|
||||
```
|
||||
>>> from elizabeth import Text
|
||||
>>> t=Text('en')
|
||||
>>> t.swear_word()
|
||||
'Rat-fink'
|
||||
>>> t.quote()
|
||||
'Let them eat cake.'
|
||||
>>> t.words(quantity=20)
|
||||
['securities', 'keeps', 'accessibility', 'barbara', 'represent', 'hentai', 'flower', 'keys', 'rpm', 'queen', 'kingdom', 'posted', 'wearing', 'attend', 'stack', 'interface', 'quite', 'elementary', 'broadcast', 'holland']
|
||||
>>> t.sentence()
|
||||
'She spent her earliest years reading classic literature, and writing poetry.'
|
||||
```
|
||||
|
||||
使用 Elizabeth 填充 [SQLite][6] 或其它你可能需要用于开发或测试的数据库并不困难。其介绍文档给出了使用 [Flask][7] 这个轻量级 web 框架的一个医疗应用程序示例。
|
||||
|
||||
我对 Elizabeth 印象很深刻 - 它超快、轻量级、易于扩展,它的社区虽然小,但是很活跃。截至本文写作时,项目已有 25 名贡献者,并且提交的问题处理迅速。Elizabeth 的[完整文档][8]至少对于美国英语而言易于阅读和遵循,并提供了广泛的 API 参考。
|
||||
|
||||
我曾尝试通过修改链接来查找该文档是否有其他语言,但没有成功。因为其 API 在非英语区域中是不同的,所以记录这些变化将对用户非常有帮助。公平地说,通过阅读其代码并找出可用的方法并不难,即使你的 Python 功力并不深厚。对我来说,另一个明显的缺陷是缺乏阿拉伯语或希伯来语区域测试数据。这些是著名的从右到左的语言,对于试图使其应用程序国际化的开发者来说,适当地处理这些语言是一个主要的障碍。像 Elizabeth 这种在此方面可以协助的工具是值得拥有的。
|
||||
|
||||
对于那些在应用中需要随机样本数据的开发员而言,Elizabeth 是一个有价值的工具,而对于那些试图创建真正多语言、本地化应用程序的开发者来说,它可能是一个宝藏。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
作者简介:
|
||||
|
||||
D Ruth Bavousett - D Ruth Bavousett 作为一名系统管理员和软件开发人员已经很长时间了,她的专业生涯开始于 VAX 11/780。在她的职业生涯(迄今为止)中,她在解决图书馆需求上有大量的经验,她自 2008 年以来一直是 Koha 开源图书馆自动化套件的贡献者。Ruth 目前在休斯敦的 cPanel 任 Perl 开发人员,她也作为首席员工效力于双猫公司。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/17/2/elizabeth-python-library
|
||||
|
||||
作者:[D Ruth Bavousett][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://opensource.com/users/druthb
|
||||
[1]:https://opensource.com/article/17/2/elizabeth-python-library?rate=kuXZVuHCdEv_hrxRnK1YQctlsTJeFJLcVx3Nf2VIW38
|
||||
[2]:https://en.wikipedia.org/wiki/Lorem_ipsum
|
||||
[3]:https://github.com/lk-geimfari/elizabeth
|
||||
[4]:https://www.python.org/
|
||||
[5]:https://www.debian.org/
|
||||
[6]:https://sqlite.org/
|
||||
[7]:https://flask.pocoo.org/
|
||||
[8]:http://elizabeth.readthedocs.io/en/latest/index.html
|
||||
[9]:https://opensource.com/user/36051/feed
|
||||
[10]:https://opensource.com/article/17/2/elizabeth-python-library#comments
|
||||
[11]:https://opensource.com/users/druthb
|
87
published/20170215 openSUSE on Raspberry Pi 3.md
Normal file
87
published/20170215 openSUSE on Raspberry Pi 3.md
Normal file
@ -0,0 +1,87 @@
|
||||
在树莓派 3 上运行 openSUSE:简单几步搭建一个实用系统
|
||||
=================
|
||||
|
||||
本文由 SUSE 文档团队的技术作者 Dmitri Popov 撰写。
|
||||
|
||||
在[树莓派 3][3]上部署 [openSUSE][2] 系统不是很复杂,不过这儿有一些小技巧教你更好地完成这个过程。
|
||||
|
||||
首先,你将会有一些版本可供选择。如果你打算使用树莓派 3 作为一个普通主机,那么带有图形界面的 openSUSE 将是你最好的选择。有几种不同的图形环境可供选择:[X11][4]、[Enlightenment][5]、[Xfce][6] 或是 [LXQT][7]。openSUSE 还有一个 JeOS 版本能够提供最基础的系统,可以把树莓派 3 作为一个无显示器的服务器使用。更好的选择还有 openSUSE 的 [Leap][8] 或 [Tumbleweed][9] 版本。
|
||||
|
||||

|
||||
|
||||
首先你需要从 [https://en.opensuse.org/HCL:Raspberry_Pi3][10] 下载所需的 openSUSE 镜像,然后制作一张可启动的 microSD 卡。虽然可以使用命令行工具将下载好的镜像写入 microSD 卡,但 [Etcher][11] 可以使这个过程更轻松安全。从该项目网站上获取该程序,解压下载的 .zip 文件,并使用以下命令把得到的 .AppImage 文件设置为可执行:
|
||||
|
||||
```
|
||||
chmod +x Etcher-x.x.x-linux-x64.AppImage
|
||||
```
|
||||
|
||||
将 microSD 卡插入电脑,双击运行 Etcher 软件,选择下载好的 .raw.xz 镜像文件,点击 **Flash!** 按钮。然后将显示器和键盘连接到树莓派 3,插入 microSD 卡,启动树莓派。第一次启动时,openSUSE 会自动扩展文件系统以充分利用 microSD 卡上的剩余空间。这时你将看到以下信息:
|
||||
|
||||
```
|
||||
GPT data structures destroyed! You may now partition the disk using fdisk or other utilities
|
||||
GPT 数据结构被破坏!您需要使用 fdisk 或其它工具对磁盘分区。
|
||||
```
|
||||
|
||||
不用担心,稍等两分钟,openSUSE 将继续正常启动。当看到提示时,输入默认用户名 `root` 和默认密码 `linux` 登录系统。
|
||||
|
||||
如果你选择在树莓派 3 上部署 JeOS 版本,第一次启动时你不会看到屏幕上有任何输出。也就是说,屏幕会一直保持空白,直到系统完成对文件系统的扩展。你可以通过配置内核参数来显示输出,不过没有必要做这麻烦事。只需稍等片刻,你就能看到命令行提示。
|
||||
|
||||
由于 openSUSE 已经启用并且配置了 SSH 服务,所以启动树莓派时你可以不用显示器。这样的话,你就需要使用网卡接口将树莓派连接到网络中。给树莓派足够的时间来启动和扩展系统后,你就能够从同一网络中的其他主机,使用 `ssh root@linux.local` 命令,通过 SSH 服务连接树莓派。
|
||||
|
||||
默认情况下你将以 `root` 用户登录系统,所以创建一个普通用户是个不错的主意。你可以使用 YaST 配置工具轻松完成这件事。运行 `yast2` 命令,选择 <ruby>**安全与用户**<rt>Security and Users</rt></ruby> -> **<ruby>用户与用户组管理<rt>User and Group Management</rt></ruby>** 选项,就可以创建新用户了。你还可以选择 **<ruby>系统<rt>System</rt></ruby>** -> **<ruby>在线升级<rt>Online Update</rt></ruby>**选项来更新系统。完成之后,退出 YaST ,重启树莓派,然后使用新创建的用户登录系统。
|
||||
|
||||
一切搞定,不过还有一个重要的系统组件不能正常工作,那就是无线接口。当然,这个问题也可以轻松解决。首先使用以下命令安装 nano 文本编辑器:
|
||||
|
||||
```
|
||||
sudo zypper in nano
|
||||
```
|
||||
|
||||
然后运行以下命令修改 `raspberrypi_modules.conf` 文件:
|
||||
|
||||
```
|
||||
sudo nano/etc/dracut.conf.d/raspberrypi_modules.conf
|
||||
```
|
||||
|
||||
删除文件第一行的 `sdhci_iproc` ,再取消最后一行的注释。运行以下命令保存修改:
|
||||
|
||||
```
|
||||
mkinitrd -f
|
||||
```
|
||||
|
||||
最后,重启树莓派。
|
||||
|
||||

|
||||
|
||||
再次运行 YaST ,在**<ruby>系统<rt>System</rt></ruby>** -> **<ruby>网络设置<rt>Network Settings</rt></ruby>**区域,你应该能在网络接口列表中看到 `BCM43430 WLAN Card` 项。选择这一项,点击 **<ruby>编辑<rt>Edit</rt></ruby>** 按钮。开启**<ruby>动态地址分配<rt>Dynamic Address DHCP</rt></ruby>**选项,点击**下一步**,选择你想要连接的无线网络,配置所需的连接设置。点击**下一步**和**确定**保存设置。重启树莓派,它应该就能连接上特定的 Wi-Fi 网络了。
|
||||
|
||||
至此,你就完成了树莓派上的系统部署。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.suse.com/communities/blog/opensuse-raspberry-pi-3-zero-functional-system-easy-steps/
|
||||
|
||||
作者:[chabowski][a]
|
||||
译者:[Cathon](https://github.com/Cathon)
|
||||
校对:[jasminepeng](https://github.com/jasminepeng)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.suse.com/communities/blog/author/chabowski/
|
||||
[1]:https://www.suse.com/communities/blog/author/chabowski/
|
||||
[2]:https://www.opensuse.org/
|
||||
[3]:https://www.raspberrypi.org/
|
||||
[4]:https://www.x.org/wiki/
|
||||
[5]:https://www.enlightenment.org/
|
||||
[6]:https://www.xfce.org/
|
||||
[7]:http://lxqt.org/
|
||||
[8]:https://www.opensuse.org/#Leap
|
||||
[9]:https://www.opensuse.org/#Tumbleweed
|
||||
[10]:https://en.opensuse.org/HCL:Raspberry_Pi3
|
||||
[11]:https://etcher.io/
|
||||
[12]:https://www.suse.com/communities/blog/opensuse-raspberry-pi-3-zero-functional-system-easy-steps/#
|
||||
[13]:https://www.suse.com/communities/blog/opensuse-raspberry-pi-3-zero-functional-system-easy-steps/#
|
||||
[14]:https://www.suse.com/communities/blog/opensuse-raspberry-pi-3-zero-functional-system-easy-steps/#
|
||||
[15]:https://www.suse.com/communities/blog/opensuse-raspberry-pi-3-zero-functional-system-easy-steps/#
|
||||
[16]:https://www.suse.com/communities/blog/opensuse-raspberry-pi-3-zero-functional-system-easy-steps/#
|
||||
[17]:http://www.printfriendly.com/print?url=https%3A%2F%2Fwww.suse.com%2Fcommunities%2Fblog%2Fopensuse-raspberry-pi-3-zero-functional-system-easy-steps%2F
|
||||
[18]:http://www.printfriendly.com/print?url=https%3A%2F%2Fwww.suse.com%2Fcommunities%2Fblog%2Fopensuse-raspberry-pi-3-zero-functional-system-easy-steps%2F
|
@ -0,0 +1,231 @@
|
||||
借助开源书籍掌握 C++ 编程
|
||||
==============
|
||||
|
||||
书籍是非常主观和私人的财产,编程书籍也不例外。但是不管 C++ 编程书籍的风格、关注点或者节奏如何,好书总可以带领读者走过一段引人入胜的旅程,揭示编程语言的能力,还能向读者描绘如何使用编程语言来实现各种事物。
|
||||
|
||||
分享是一种美德,我精心挑选了九本值得一读的优质 C++ 书籍,这些书籍均基于开源协议发布。在这之前,我会给出一份 C++ 的简短介绍。
|
||||
|
||||
C++ 是由 Bjarne Stroustrup 设计,初次发布于 1983 年。它是一种静态类型、格式自由、多重范式、可移植、编译式的通用编程语言。它被认为是中级语言,同时包含有高级与初级编程语言的特性。C++ 设计用于实现系统级与应用的编程,它拓展了 C 编程语言,因此其名字中的使用了自增运算符 ++。
|
||||
|
||||
C++ 仍是一种流行的编程语言。例如,它被广泛应用于嵌入式系统、银行以及通讯业。它作为 C 的超集保留了 C 标志性的简洁与高效,同时提供强类型检查、多重继承、数据抽象、异常处理操作符重载、泛型编程,以及面向对象编程等功能。C++ 不仅影响了 C 语言的发展,同时也影响到了包括 C#、Java 在内的许多其他编程语言。
|
||||
|
||||
### 《Boost C++ 类库(The Boost C++ Libraries)》
|
||||
|
||||

|
||||
|
||||
作者 Boris Schäling (570页)
|
||||
|
||||
《[Boost C++ 类库(The Boost C++ Libraries)][3]》被认为在 C++ 世界中极其重要并有深远影响。书中这些可移植的库提供对多种任务和结构体的支持,包括多线程、容器、字符串和文本处理、迭代器、线性代数、伪随机数产生、元程序设计模板、并发程序设计、数据结构、图像处理、正则表达式和单元测试。Boost 可以在几乎所有现代操作系统上工作,包括 Linux 和 Windows 及其衍生,并且支持绝大多数现代编译器。
|
||||
|
||||
这本书介绍了 72 个 Boost 库,提供了广泛并且实用的功能。它们能够帮助程序员更轻松的管理内存和处理字符串。这些库提供多种容器以及其它数据结构来拓展标准库。使用这些库可以轻松实现平台无关的网络应用程序。
|
||||
|
||||
本书是一颗值得添加到各类收藏中的明珠。430 份源代码例子生动形象地阐释了这些库的功能。
|
||||
|
||||
本书前面的章节审视了内存管理、字符串处理、容器、数据结构、算法、通信、文件与流以及时间。后续章节进一步探索了函数式编程、并行编程和泛型编程。以对语言拓展、错误与数字处理、应用程序库、设计模式以及其他库的大部分内容。
|
||||
|
||||
本书采用[知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议](http://creativecommons.org/licenses/by-nc-nd/4.0/)进行许可。如果你喜欢实体书,可以在亚马逊上购买纸质书,也可选择如 kindle、E-book 和 PD F格式的电子书。
|
||||
|
||||
### 《C++ 注释(C++ Annotations)》
|
||||
|
||||

|
||||
|
||||
作者 Frank B. Brokken (1029页)
|
||||
|
||||
《[C++ 注释(C++ Annotations)][4]》提供了关于 C++ 编程语言的一份全面的教程。它可以被当做一门 C++ 课程的教材。本书面向已掌握 C 语言或其他类 C 语法知识的使用者。
|
||||
|
||||
本书主要章节有:
|
||||
|
||||
* 命名空间
|
||||
* 字符串——C 提供的是最基础的字符串支持
|
||||
* I/O 流库——提供了一个基于类概念的输入/输出库
|
||||
* 类——C 提供了两种结构化不同类型数据的方法。C 语言的结构体包含多种类型的数据成员,而 C 语言的共用体(union)同样可以定义不同类型的数据成员。本章介绍的类,也是一种结构体但是它的内容对外部世界来说是默认不可访问的。
|
||||
* 静态数据和函数
|
||||
* 内存管理——审视 C++ 中能够操作内存分配的操作符
|
||||
* 异常——允许 C++ 程序执行受控的非本地返回命令,避免了使用 longjmp(非局部跳转)和 setjmp(激活非局部跳转)函数的缺陷。
|
||||
* 操作符重载——介绍通用的操作符重载
|
||||
* 抽象容器
|
||||
* 继承——派生的另外一个特性。 本章演示基类指针可能被用来指向派生类的对象。
|
||||
* 多态——继承的一种特殊形态
|
||||
* 友元机制——介绍 friend 关键词以及它的使用原则
|
||||
* 成员指针——定义成员指针及其用法,静态成员指针,指针长度
|
||||
* 嵌套类——当嵌套类与其外围类有概念上的紧密联系时会被使用
|
||||
* 标准模板库(STL)——包含容器、通用算法、迭代器、函数对象、分配器、适配器和数据结构的通用库。这些算法使用的数据结构都是抽象意义的,因此算法实际上可以使用任何数据类型。
|
||||
* 泛型算法——涵盖标准模板库中的泛型算法
|
||||
* 函数模板——探索模板独特的句法。介绍模板类型参数与模板非类型参数和函数模板等概念并且提供模板的多个案例。
|
||||
* 类模板——讨论构建与使用类模板
|
||||
* 进阶模板用法——一份简短的模板元编程主要特性与模板的微妙关系的介绍
|
||||
|
||||
本书有HTML、PDF、PostScript 和 txt 版本。它可以自由分发,基于 GNU GPL 协议发布。
|
||||
|
||||
|
||||
### 《通过 C++ 和 Qt4 了解设计模式(An Introduction to Design Patterns in C++ with Qt 4)》
|
||||
|
||||

|
||||
|
||||
作者 Alan Ezust, Paul Ezust (656页)
|
||||
|
||||
《[通过 C++ 和 Qt4 了解设计模式(An Introduction to Design Patterns in C++ with Qt 4)][5]》从介绍 C++ 基础知识、面向对象概念、UML(统一建模语言)和核心 Qt 类开始。进而转向更高级的编程概念如 Qt modules 和设计模式。最后严密地印证了重要的 C++ 特性。其中涵盖了非常优秀的对函数、继承和多态的讲解。
|
||||
|
||||
本书不需要具备任何 C 或者 C++ 编程经验前提,并且被设计为普适用途。它也为教学工作者准备了 Qt 案例、练习、答案以及课程 PPT。
|
||||
|
||||
本书是 Bruce Perens 开源系列中的一部分。所有在此系列中的书籍都是基于 Open Publication License V1.0 及其后版本发布的。
|
||||
|
||||
### 《像计算机科学家一样思考:C++(How to Think Like a Computer Scientist: C++)》
|
||||
|
||||

|
||||
|
||||
作者 Allen B. Downey (191页)
|
||||
|
||||
《[像计算机科学家一样思考:C++(How to Think Like a Computer Scientist: C++)][6]》是使用 C++ 编程语言进行软件设计的一本简洁友好的介绍性书籍。本书的目的是通过讲解最基础的概念并且以读者容易接受的节奏逐步增加新内容来把没有编程经验的读者培养成为未来的开发者。
|
||||
|
||||
本书提供的有价值的内容包括:
|
||||
|
||||
* 变量、表达式和语句
|
||||
* 函数
|
||||
* 条件语句与递归
|
||||
* 丰富的函数
|
||||
* 迭代
|
||||
* 字符串
|
||||
* 向量
|
||||
* 成员函数
|
||||
* 对象的向量
|
||||
* 向量的对象
|
||||
* 类与不变量
|
||||
* 文件输入输出和 apmatrixes
|
||||
|
||||
本书是一本在[知识共享署名-非商业性使用-3.0 未本地化版本](https://creativecommons.org/licenses/by-nc/3.0/)协议下发布的免费书籍。
|
||||
|
||||
### 《C++ Qt3 图形界面编程(C++ GUI Programming with Qt 3)》
|
||||
|
||||

|
||||
|
||||
作者 Jasmin Blanchette, Mark Summerfield (464 页)
|
||||
|
||||
最新发布的 Qt 稳定版本是 5.8,而《[C++ Qt3 图形界面编程(C++ GUI Programming with Qt 3)][7]》指导读者如何使用 Qt3 编写 GUI 程序,Qt3 最近一次更新是 2004 年,但是本书仍然有大部分内容对 Qt4 和 Qt5 有效。
|
||||
|
||||
本书不是一本面向初学者的书,需要读者对 C++ 有基本的理解。
|
||||
|
||||
本书向读者介绍了使用 Qt 进行 GUI 应用编程所有的概念和需要的练习。本书不仅详尽的讲述了核心内容,而且也提供了一些特别的和高阶的学习材料。
|
||||
|
||||
本书是 Bruce Perens 开源系列中的一部分。所有在此系列中的书籍都是基于 Open Publication License V1.0及之后版本发布的。
|
||||
|
||||
|
||||
### 《开放数据结构(C++ 版)(Open Data Structures (in C++))》
|
||||
|
||||

|
||||
|
||||
作者 Pat Morin (336页)
|
||||
|
||||
《[开放数据结构(C++ 版)(Open Data Structures (in C++))][1]》教导读者设计和分析基础数据结构以及如何使用 C++ 实现。 它涵盖了对如下数据结构的分析和实现:序列(列表)、队列、优先队列、无序字典、有序字典以及图。作者的意图在于向大学计算机科学的学生提供一条学习数据结构的免费的途径,但是并不打算成为介绍 C++ 编程语言或者 C++ 标准模板库的一本书。不过它可以帮助程序员理解标准模板库的数据结构是如何实现的以及这种实现为何如此高效。
|
||||
|
||||
章节内容覆盖了基于数组的列表、链表、分级链表、哈希表、二叉树(又包含了随机二叉搜索树、替罪羊树、红黑树)。之后的章节还包括堆、排序算法(比较、计数和基数排序)、图、整数的数据结构和外部存储器搜索。
|
||||
|
||||
本书基于[知识共享署名](http://creativecommons.org/licenses/by/4.0/) 协议发布。免费的 HTML、PDF 均已发布,本书的 LaTeX 版本,Java/C++/Python 源代码都可以从 GitHub 下载。也有纸质书版本可供购买。本书已被翻译为斯罗维尼亚语和土耳其语。
|
||||
|
||||
|
||||
### 《使用 wxWidgets 进行跨平台 GUI 编程(Cross-Platform GUI Programming with wxWidgets)》
|
||||
|
||||

|
||||
|
||||
作者 Julian Smart,Kevin Hock和Stefan CsomorBrifll (744 页)
|
||||
|
||||
wxWidgets 是一个流行的 C++ 库,可供开发者使用单一的代码基础为 Windosw、Mac OS、Linux 和其他平台创建应用。它支持非常广泛的图形处理库。
|
||||
|
||||
这本书《[使用 wxWidgets 进行跨平台 GUI 编程(Cross-Platform GUI Programming with wxWidgets)][8]》从简单的介绍和起步章节开始,主要内容包括:
|
||||
|
||||
* 事件处理
|
||||
* 窗口基础
|
||||
* 画图
|
||||
* 输入事件处理
|
||||
* 使用 sizers 进行窗口布局
|
||||
* 使用标准对话框
|
||||
* 创建自定义对话框
|
||||
* 图像编程
|
||||
* 剪贴板与拖放动作
|
||||
* 高阶窗口类
|
||||
* 文件和数据流
|
||||
* 内存管理,调试和错误检查
|
||||
* 编写国际化应用
|
||||
* 编写多线程应用
|
||||
* wxSocket 编程
|
||||
* 处理文档和视图
|
||||
* 日臻完美你的应用
|
||||
|
||||
本书是 Bruce Perens 开源系列中的一部分。所有在此系列中的书籍都是基于 Open Publication License V1.0及其后版本发布的。
|
||||
|
||||
|
||||
### 《Rook 的 C++ 指南(The Rook’s Guide to C++)》
|
||||
|
||||

|
||||
|
||||
作者 Jeremy Hansen (160页)
|
||||
|
||||
《[Rook 的 C++ 指南(The Rook’s Guide to C++)][2]》的章节中包含变量、常量、输入输出、数据类型和转换、条件判断语句(if、else 和 else if、switch 语句)、字符串、循环、数组、块、函数和作用域。之后的章节主要集中解决问题和定位问题,包括预处理器、高等代数、文件输入输出、指针、动态数据、类和抽象、分离编译和标准模板库。
|
||||
|
||||
本书大部分都是由 25 位 Norwich 大学的学生于一个黑客马拉松周末写成。当然不敢说毫无缺点,但还是一本相当不错的书。它被基于[知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本](https://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh)协议发布。同时在亚马逊也有本书的纸质版可供购买。
|
||||
|
||||
|
||||
### 《GCC 简介(An Introduction to GCC)》
|
||||
|
||||

|
||||
|
||||
作者 Brian Gough (144页)
|
||||
|
||||
《[GCC 简介(An Introduction to GCC)][9]》介绍了 GCC,同时介绍了 GNU C 和 C++ 编译器:gcc 和 g++,均属于 GNU 编译器集合(GCC)。
|
||||
|
||||
本书解释了如何单独使用编译器。作者通过数年对邮件列表中发表的问题的观察,撰写本书带领读者直接接触 GCC 最重要的部分。
|
||||
|
||||
章节简介:
|
||||
|
||||
* 介绍
|
||||
* 编译一个 C 程序——描述了如何使用 gcc 编译 C 程序。程序可能是由单独文件或者多个文件编译而成,也可能使用系统库和头文件。
|
||||
* 编译选项——描述gcc中可以使用的编译器中常用的选项。这些选项可以修改本地库和包含文件的搜索路径,配置额外的 warning 和调试信息,预处理器宏指令和 C 方言。
|
||||
* 使用预处理——描述了属于 GCC 包内的 GNU C 预处理 cpp 程序的用途。预处理将宏定义在源代码被编译前展开。预处理会在 GCC 编译 C 或者 C++ 程序时自动被调用。
|
||||
* 以调试为目的编译——提供 -g 选项使目标文件和可执行文件中存储额外的调试信息。当出现错误时,这些调试信息允许从特定的机器指令回溯到源代码中相应的行。
|
||||
* 优化编译——GCC 是一个优化编译器。它提供了大量的选项来使其生成的可执行文件的速度得到提升,并尽量减小可执行文件的大小。
|
||||
* 编译一个 C++ 程序——描述了如何使用 GCC 来编译以 C++ 编写的程序,以及针对这门语言特定的命令行选项。
|
||||
* 平台相关的选项——描述了一些通用平台上可用的选项,如 Intel 和 AMD x86 选项、x86 拓展选项、x86 64 位处理器选项、DEC Alpha 选项、SPARC 选项、POWER/powerPC 选项、复合架构支持以及浮点相关问题。
|
||||
* 问题定位——GCC 提供了几项帮助和诊断选项来帮助用户在编译过程中定位问题。
|
||||
* 编译器相关工具——介绍了大量能够用于和 GCC 组合使用的工具。包括:用来创建库的 GNU 压缩器 ar,以及 GNU 性能和覆盖测试工具:gprof 和 gcov。
|
||||
* 编译器如何工作——描述了关于 GCC 如何将源代码转换为可执行程序的更多细节。编译是一个涉及到多种工具的多级过程,包括 GNU 编译器自身(通过 gcc 或者 g++ 前端)、GNU 汇编器 as 以及 GNU 链接器 ld。编译过程中一个完整的工具集合被称之为工具链。
|
||||
* 检查编译后的文件——描述了多种有用的工具来检查可执行文件和目标文件的内容。
|
||||
* 常见错误消息——描述了 gcc 和 g++ 产生的最常见的错误和警告信息。每一个案例都伴随着错误和警告产生的原因,相应的例子和可能解决问题的建议。
|
||||
* 获得帮助——如果读者碰到了本书中未能涵盖的问题,还有多种参考手册更详细的描述了 GCC 和编程语言相关的主题。
|
||||
|
||||
本书是基于 GNU Free Documentation 协议出版的。
|
||||
|
||||
此外还有一些 C++ 书籍可以免费下载,但是那些并不是基于开源协议发布的,或者作者没有指定一个协议。这类书籍包括:
|
||||
|
||||
- [Thinking in C++,第二版,卷一、卷二][14] – 作者 Bruce Eckel (卷二作者增加了 Chuck Allison)
|
||||
- [C++ In Action:Industrial Strength Programming][15]– 作者 Bartosz Milewski
|
||||
|
||||
最后,我对刚入门的 C++ 新手的建议一定是 [编程原理与体验(C++ 版)(Programming — Principles and Practice Using C++) (第二版)][16]。普遍认为这是最合适的入门书籍,由 C++ 的创始人书写,物超所值。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.ossblog.org/master-c-programming-with-open-source-books/
|
||||
|
||||
作者:[Steve Emms][a]
|
||||
译者:[xiaow6](https://github.com/xiaow6)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.ossblog.org/author/steve/
|
||||
[1]:http://opendatastructures.org/ods-cpp/
|
||||
[2]:https://rooksguide.org/
|
||||
[3]:https://theboostcpplibraries.com/
|
||||
[4]:http://www.icce.rug.nl/documents/cplusplus/
|
||||
[5]:http://www.informit.com/store/introduction-to-design-patterns-in-c-plus-plus-with-9780131879058
|
||||
[6]:http://greenteapress.com/thinkcpp/index.html
|
||||
[7]:http://www.informit.com/store/c-plus-plus-gui-programming-with-qt-3-9780131240728
|
||||
[8]:http://www.informit.com/store/cross-platform-gui-programming-with-wxwidgets-9780131473812
|
||||
[9]:http://www.network-theory.co.uk/docs/gccintro/
|
||||
[10]:https://www.ossblog.org/author/steve/
|
||||
[11]:https://www.ossblog.org/master-c-programming-with-open-source-books/#comments
|
||||
[12]:https://www.ossblog.org/category/books/
|
||||
[13]:https://www.ossblog.org/category/programming/
|
||||
[14]:http://mindview.net/Books/TICPP/ThinkingInCPP2e.html
|
||||
[15]:http://www.relisoft.com/book/
|
||||
[16]:http://stroustrup.com/Programming/
|
@ -0,0 +1,185 @@
|
||||
如何在 Ubuntu 上用 Yocto 创建你自己的 Linux 发行版
|
||||
========================================
|
||||
|
||||
### 本文内容
|
||||
|
||||
本文主要聚焦在如何使用 Yocto 在 Ubuntu 上创建一个最小化的 Linux 发行版。Yocto 项目在嵌入式 Linux 的世界非常著名,这是因为它用起来非常灵活、方便。Yocto 的目标是为嵌入式软硬件开发商创建自己的 Linux 发行版。本文我们将会创建一个可以运行在 QEMU 上的最小化的 Linux,并且在 QEMU 上实际运行。
|
||||
|
||||
### 开发机的基本条件
|
||||
|
||||
* 最少 4-6 GB 内存
|
||||
* 最新版的 Ubuntu 系统(本文使用了 16.04 LTS)
|
||||
* 磁盘剩余空间至少 60-80 GB
|
||||
* 在创建 Linux 发行版之前先安装下面的软件包
|
||||
* 下载最新的 Yocto(Poky 是其最小开发环境)稳定分支
|
||||
|
||||
```
|
||||
apt-get update
|
||||
```
|
||||
```
|
||||
apt-get install wget git-core unzip make gcc g++ build-essential subversion sed autoconf automake texi2html texinfo coreutils diffstat python-pysqlite2 docbook-utils libsdl1.2-dev libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev xsltproc desktop-file-utils chrpath groff libtool xterm gawk fop
|
||||
```
|
||||
|
||||

|
||||
|
||||
如下所示,开发环境要安装的软件包将近 1GB 大小。
|
||||
|
||||

|
||||
|
||||
在这个教程中,系统上克隆的是 poky 的 `morty` 稳定分支。
|
||||
|
||||
```
|
||||
git clone -b morty git://git.yoctoproject.org/poky.git
|
||||
```
|
||||
|
||||

|
||||
|
||||
进入 `poky` 目录,然后运行下面的命令为 Yocto 开发环境设置(设置/导出)一些环境变量。
|
||||
|
||||
```
|
||||
source oe-init-build-env
|
||||
```
|
||||
|
||||
如下所示,在运行了 open embedded (oe) 的构建环境脚本之后,终端里的路径会自动切换到 `build` 目录,以便进行之后行发行版的的配置和构建。
|
||||
|
||||

|
||||
|
||||
上面的截屏展示了在 `conf` 目录下创建的文件 `local.conf`。这是 Yocto 用来设置目标机器细节和 SDK 的目标架构的配置文件。
|
||||
|
||||
如下所示,这里设置的目标机器是 `qemux86-64`。
|
||||
|
||||

|
||||
|
||||
如下面截图所示,在 `local.conf` 中取消下面参数的注释符号。
|
||||
|
||||
```
|
||||
DL_DIR ?= "${TOPDIR}/downloads"
|
||||
```
|
||||
|
||||

|
||||
|
||||
```
|
||||
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
|
||||
```
|
||||
|
||||

|
||||
|
||||
```
|
||||
TMPDIR ?= "${TOPDIR}/tmp"
|
||||
```
|
||||
|
||||

|
||||
|
||||
```
|
||||
PACKAGE_CLASSES ?= "package_rpm"
|
||||
SDKMACHINE ?= "i686"
|
||||
```
|
||||
|
||||

|
||||
|
||||
如下所示,在 `local.conf` 中为基于 Yocto 的 Linux 设置空密码和后续的一些参数。否则的话用户就不能登录进新的发行版。
|
||||
|
||||
```
|
||||
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
|
||||
```
|
||||
|
||||

|
||||
|
||||
我们并不准备使用任何图形化工具来创建 Linux OS,比如 `toaster` (`hob` 已经不再支持了)。
|
||||
|
||||
### Yocto 编译构建过程
|
||||
|
||||
现在运行下面的 `bitbake` 工具命令开始为选定的目标机器下载和编译软件包。
|
||||
|
||||
```
|
||||
bitbake core-image-minimal
|
||||
```
|
||||
|
||||

|
||||
|
||||
**非常重要的是要在普通 Linux 用户下运行上面的命令,而不是使用 root 用户**。如下面截图所示,当你在 root 用户下运行 bitbake 命令会产生下面所示的错误。
|
||||
|
||||

|
||||
|
||||
再一次运行导出环境变量的脚本(`oe-init-build-env`),重新执行相同的命令来启动下载和编译过程。
|
||||
|
||||

|
||||
|
||||
如下所示,构建脚本组件的第一步工作是解析配置(`recipe`)。
|
||||
|
||||

|
||||
|
||||
下面的截图展示了构建脚本的解析过程。同时也显示了用来构建你的新的基于 yocto 的发行版的构建系统的细节。
|
||||
|
||||

|
||||
|
||||
在下载了 SDK 和必要的库之后,下一步工作是下载并编译软件包。如下截图展示了为构建新发行版而执行的任务。这一步将会执行 2-3 小时,因为首先要下载需要的软件包,然后还要为新的 Linux 发行版编译这些软件包。
|
||||
|
||||

|
||||
|
||||
下面的截图表明了任务列表执行完毕。
|
||||
|
||||

|
||||
|
||||
为目标机器类型 `qemux86-64` 编译好的新镜像位于 `build/tmp/deploy/images/qemux86-64`:
|
||||
|
||||

|
||||
|
||||
如下所示,上面的命令如果运行在 `Putty` 上会产生一个错误。
|
||||
|
||||

|
||||
|
||||
通过 `rdp` 在 Ubuntu 平台上再次运行上面的命令。
|
||||
|
||||

|
||||
|
||||
为运行新的基于 Yocto 的 Linux 发行版的 qemu 打开一个新屏幕。
|
||||
|
||||

|
||||
|
||||
下面展示了新发行版的登录界面,同时也显示了使用的 yocto 项目的版本号。默认的用户名是 `root` ,密码为空。
|
||||
|
||||

|
||||
|
||||
最后使用 `root` 用户名和空密码登录新发行版。如下截图所示,在这个最小版本的 Linux 上运行了基本的命令(`data` 、 `ifconfig` 和 `uname`)。
|
||||
|
||||

|
||||
|
||||
本文的目标是理解使用 Yocto 创建新的 Linux 发行版的过程。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.howtoforge.com/tutorial/how-to-create-your-own-linux-distribution-with-yocto-on-ubuntu/
|
||||
|
||||
作者:[Ahmad][a]
|
||||
译者:[Ezio](https://github.com/oska874)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.howtoforge.com/tutorial/how-to-create-your-own-linux-distribution-with-yocto-on-ubuntu/
|
||||
[1]:https://www.howtoforge.com/tutorial/how-to-create-your-own-linux-distribution-with-yocto-on-ubuntu/#prerequisites-for-the-development-machinenbsp
|
||||
[2]:https://www.howtoforge.com/tutorial/how-to-create-your-own-linux-distribution-with-yocto-on-ubuntu/#yocto-compilation-and-building-process
|
||||
[3]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/1-pre_requisite_packages-1.png
|
||||
[4]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/2-pre_requisite_packages-2.png
|
||||
[5]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/download_morty_of_yocto.png
|
||||
[6]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/source_environment_script.png
|
||||
[7]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/selected_target.png
|
||||
[8]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/uncheck_Download_parameters.png
|
||||
[9]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/uncheck_sstate_parametes.png
|
||||
[10]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/tempdir_uncheck_paramerter.png
|
||||
[11]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/sdk_and_package_selection.png
|
||||
[12]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/extra-features_for_blank_password.png
|
||||
[13]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/bitbake_coreimageminimal.png
|
||||
[14]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/dont_user_as_a_root.png
|
||||
[15]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/runniing_bitbake_again-normal_user.png
|
||||
[16]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/parsing-receipe.png
|
||||
[17]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/output_of_parsing.png
|
||||
[18]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/task_list.png
|
||||
[19]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/downloaded-all_packages_and_compiled.png
|
||||
[20]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/new_linux_compiled_under_qemux86_64.png
|
||||
[21]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/error_on_putty.png
|
||||
[22]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/runqemu_command.png
|
||||
[23]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/new_linux_inside_the_qemu_.png
|
||||
[24]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/reference_distro.png
|
||||
[25]:https://www.howtoforge.com/images/how-to-create-your-own-linux-distribution-with-yocto/big/inside_new_linux_distro_running_on_qemu_3.png
|
@ -0,0 +1,116 @@
|
||||
如何在 Linux 中使用 sFTP 上传或下载文件/文件夹
|
||||
============================================================
|
||||
|
||||
[sFTP(安全文件传输程序)][1]是一种安全的交互式文件传输程序,其工作方式与 FTP(文件传输协议)类似。 然而,sFTP 比 FTP 更安全;它通过加密 SSH 传输处理所有操作。
|
||||
|
||||
它可以配置使用几个有用的 SSH 功能,如[公钥认证][2]和压缩。 它连接并登录到指定的远程机器,然后切换到交互式命令模式,在该模式下用户可以执行各种命令。
|
||||
|
||||
在本文中,我们将向你展示如何使用 sFTP 上传/下载整个目录(包括其子目录和子文件)。
|
||||
|
||||
### 如何在 Linux 中使用 sFTP 传输文件/文件夹
|
||||
|
||||
默认情况下,SFTP 协议采用和 SSH 传输协议一样的方式建立到远程服务器的安全连接。虽然,用户验证使用类似于 SSH 默认设置的密码方式,但是,建议[创建和使用 SSH 无密码登录][3],以简化和更安全地连接到远程主机。
|
||||
|
||||
要连接到远程 sftp 服务器,如下建立一个安全 SSH 连接并创建 SFTP 会话:
|
||||
|
||||
```
|
||||
$ sftp tecmint@192.168.56.10
|
||||
```
|
||||
|
||||
登录到远程主机后,你可以如下运行交互式的 sFTP 命令:
|
||||
|
||||
```
|
||||
sftp> ls #list directory
|
||||
sftp> pwd #print working directory on remote host
|
||||
sftp> lpwd #print working directory on local host
|
||||
sftp> mkdir uploads #create a new directory
|
||||
```
|
||||
[
|
||||

|
||||
][4]
|
||||
|
||||
* Linux 主机上运行 sFTP 命令*
|
||||
|
||||
#### 如何使用 sFTP 上传文件夹
|
||||
|
||||
要将整个目录上传到远程 Linux 主机中,请使用 `put` 命令。但是,如果目录名称不存在于远程主机上的工作目录中,你将收到错误,如下面的屏幕截图所示。
|
||||
|
||||
因此,首先在远程主机上创建一个具有相同名称的目录,然后从本地主机上传它,`-r` 参数允许拷贝子目录和子文件:
|
||||
|
||||
```
|
||||
sftp> put -r Tecmint.com-articles
|
||||
sftp> mkdir Tecmint.com-articles
|
||||
sftp> put -r Tecmint.com-articles
|
||||
```
|
||||
|
||||
[
|
||||

|
||||
][5]
|
||||
|
||||
*使用 sFTP 上传文件夹*
|
||||
|
||||
要保留修改时间、访问时间以及被传输的文件的模式,请使用 `-p` 标志。
|
||||
|
||||
```
|
||||
sftp> put -pr Tecmint.com-articles
|
||||
```
|
||||
|
||||
#### 如何使用 sFTP 下载文件夹
|
||||
|
||||
要从远程 Linux 主机下载整个 fstools-0.0 文件夹到本机中,如下所示使用 get 命令带上 `-r` 标志:
|
||||
|
||||
```
|
||||
sftp> get -r fstools-0.0
|
||||
```
|
||||
[
|
||||

|
||||
][6]
|
||||
|
||||
*使用 sFTP 下载目录*
|
||||
|
||||
如果文件夹已经下载完成了,接着查看本机的工作目录。
|
||||
|
||||
要退出 sFTP shell,输入:
|
||||
|
||||
```
|
||||
sftp> bye
|
||||
或者
|
||||
sftp> exit
|
||||
```
|
||||
|
||||
此外,阅读这篇 [sFTP 命令和使用技巧][7]。
|
||||
|
||||
请注意,为了防止用户访问远程主机上的整个文件系统,出于安全原因,你可以使用 chroot Jail [将 sFTP 用户限制到其主目录][8]中。
|
||||
|
||||
就是这样了!在本文中,我们向你展示了如何使用 sFTP 上传/下载整个目录。使用下面的评论栏向我们提供你对本文/主题的看法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
作者简介:
|
||||
|
||||
Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux 系统管理员和网络开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.tecmint.com/sftp-upload-download-directory-in-linux/
|
||||
|
||||
作者:[Aaron Kili][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://www.tecmint.com/author/aaronkili/
|
||||
|
||||
[1]:http://www.tecmint.com/sftp-command-examples/
|
||||
[2]:https://linux.cn/article-6901-1.html
|
||||
[3]:https://linux.cn/article-6901-1.html
|
||||
[4]:http://www.tecmint.com/wp-content/uploads/2017/02/Run-sFTP-Commands-on-Remote-Linux.png
|
||||
[5]:http://www.tecmint.com/wp-content/uploads/2017/02/Upload-Directory-using-SFTP.png
|
||||
[6]:http://www.tecmint.com/wp-content/uploads/2017/02/Download-Directory-using-sFTP.png
|
||||
[7]:http://www.tecmint.com/sftp-command-examples/
|
||||
[8]:http://www.tecmint.com/restrict-sftp-user-home-directories-using-chroot/
|
||||
[9]:http://www.tecmint.com/author/aaronkili/
|
||||
[10]:http://www.tecmint.com/10-useful-free-linux-ebooks-for-newbies-and-administrators/
|
||||
[11]:http://www.tecmint.com/free-linux-shell-scripting-books/
|
@ -1,26 +1,25 @@
|
||||
LXD 2.0 系列(十):LXD和Juju
|
||||
LXD 2.0 系列(十):LXD 和 Juju
|
||||
======================================
|
||||
|
||||
这是 [LXD 2.0 系列介绍文章][1]的第十篇。
|
||||
|
||||

|
||||

|
||||
|
||||
介绍
|
||||
============================================================
|
||||
### 介绍
|
||||
|
||||
Juju是Canonical的服务建模和部署工具。 它支持非常广泛的云提供商,使您能够轻松地在任何云上部署任何您想要的服务。
|
||||
Juju 是 Canonical 的服务建模和部署工具。 它支持非常广泛的云服务提供商,使您能够轻松地在任何云上部署任何您想要的服务。
|
||||
|
||||
此外,Juju 2.0还支持LXD,既适用于本地部署,也适合开发,并且可以在云实例或物理机上共同协作。
|
||||
此外,Juju 2.0 还支持 LXD,既适用于本地部署,也适合开发,并且可以在云实例或物理机上共同协作。
|
||||
|
||||
本篇文章将关注本地使用,通过一个没有任何Juju经验的LXD用户来体验。
|
||||
|
||||
# 要求
|
||||
### 要求
|
||||
|
||||
本篇文章假设你已经安装了LXD 2.0并且配置完毕(看前面的文章),并且是在Ubuntu 16.04 LTS上运行的。
|
||||
本篇文章假设你已经安装了 LXD 2.0 并且配置完毕(看前面的文章),并且是在 Ubuntu 16.04 LTS 上运行的。
|
||||
|
||||
# 设置 Juju
|
||||
### 设置 Juju
|
||||
|
||||
第一件事是在Ubuntu 16.04上安装Juju 2.0。这个很简单:
|
||||
第一件事是在 Ubuntu 16.04 上安装 Juju 2.0。这个很简单:
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ sudo apt install juju
|
||||
@ -52,7 +51,7 @@ Setting up juju-2.0 (2.0~beta7-0ubuntu1.16.04.1) ...
|
||||
Setting up juju (2.0~beta7-0ubuntu1.16.04.1) ...
|
||||
```
|
||||
|
||||
安装完成后,我们可以使用LXD启动一个新的“控制器”。这意味着Juju不会修改你主机上的任何东西,它会在LXD容器中安装它的管理服务。
|
||||
安装完成后,我们可以使用 LXD 启动一个新的“控制器”。这意味着 Juju 不会修改你主机上的任何东西,它会在 LXD 容器中安装它的管理服务。
|
||||
|
||||
现在我们创建一个“test”控制器:
|
||||
|
||||
@ -86,7 +85,7 @@ Waiting for API to become available: upgrade in progress (upgrade in progress)
|
||||
Bootstrap complete, local.test now available.
|
||||
```
|
||||
|
||||
这会花费一点时间,这时你可以看到一个正在运行的一个新的LXD容器:
|
||||
这会花费一点时间,这时你可以看到一个正在运行的一个新的 LXD 容器:
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ lxc list juju-
|
||||
@ -97,7 +96,7 @@ stgraber@dakara:~$ lxc list juju-
|
||||
+-----------------------------------------------------+---------+----------------------+------+------------+-----------+
|
||||
```
|
||||
|
||||
在Juju这边,你可以确认它有响应,并且还没有服务运行:
|
||||
在 Juju 这边,你可以确认它是有响应的,并且还没有服务运行:
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ juju status
|
||||
@ -111,7 +110,7 @@ ID WORKLOAD-STATUS JUJU-STATUS VERSION MACHINE PORTS PUBLIC-ADDRESS MESSAGE
|
||||
ID STATE DNS INS-ID SERIES AZ
|
||||
```
|
||||
|
||||
你也可以在浏览器中访问Juju的GUI界面:
|
||||
你也可以在浏览器中访问 Juju 的 GUI 界面:
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ juju gui
|
||||
@ -120,13 +119,13 @@ If it does not open, open this URL:
|
||||
https://10.178.150.72:17070/gui/97fa390d-96ad-44df-8b59-e15fdcfc636b/
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
尽管我更倾向使用命令行,因此我会在接下来使用。
|
||||
不过我更倾向使用命令行,因此我会在接下来使用。
|
||||
|
||||
# 部署一个minecraft服务
|
||||
### 部署一个 minecraft 服务
|
||||
|
||||
让我们先来一个简单的,部署在一个容器中使用一个Juju单元的服务。
|
||||
让我们先来一个简单的,部署在一个容器中使用一个 Juju 单元的服务。
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ juju deploy cs:trusty/minecraft
|
||||
@ -134,7 +133,7 @@ Added charm "cs:trusty/minecraft-3" to the model.
|
||||
Deploying charm "cs:trusty/minecraft-3" with the charm series "trusty".
|
||||
```
|
||||
|
||||
返回会很快,然而这不意味着服务已经启动并运行了。你应该使用“juju status”来查看:
|
||||
命令返回会很快,然而这不意味着服务已经启动并运行了。你应该使用 `juju status` 来查看:
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ juju status
|
||||
@ -152,7 +151,7 @@ ID STATE DNS INS-ID SERIES AZ
|
||||
|
||||
```
|
||||
|
||||
我们可以看到它正在忙于在刚刚创建的LXD容器中安装java。
|
||||
我们可以看到它正在忙于在刚刚创建的 LXD 容器中安装 java。
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ lxc list juju-
|
||||
@ -182,7 +181,7 @@ ID STATE DNS INS-ID SERIES AZ
|
||||
1 started 10.178.150.74 juju-97fa390d-96ad-44df-8b59-e15fdcfc636b-machine-1 trusty
|
||||
```
|
||||
|
||||
这时你就可以启动你的Minecraft客户端了,它指向10.178.150.74,端口是25565。现在可以在新的minecraft服务器上玩了!
|
||||
这时你就可以启动你的 Minecraft 客户端了,将其指向 10.178.150.74,端口是 25565。现在可以在新的 minecraft 服务器上玩了!
|
||||
|
||||
当你不再需要它,只需运行:
|
||||
|
||||
@ -192,13 +191,13 @@ stgraber@dakara:~$ juju destroy-service minecraft
|
||||
|
||||
只要等待几秒就好了。
|
||||
|
||||
# 部署一个更复杂的web应用
|
||||
### 部署一个更复杂的 web 应用
|
||||
|
||||
Juju的主要工作是建模复杂的服务,并以可扩展的方式部署它们。
|
||||
Juju 的主要工作是建模复杂的服务,并以可扩展的方式部署它们。
|
||||
|
||||
为了更好地展示,让我们部署一个Juju “组合”。 这个组合是由网站,API,数据库,静态Web服务器和反向代理组成的基本Web服务。
|
||||
为了更好地展示,让我们部署一个 Juju “组合”。 这个组合是由网站,API,数据库,静态 Web 服务器和反向代理组成的基本 Web 服务。
|
||||
|
||||
所以这将扩展到4个互联的LXD容器。
|
||||
所以这将扩展到 4 个互联的 LXD 容器。
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ juju deploy cs:~charmers/bundle/web-infrastructure-in-a-box
|
||||
@ -228,7 +227,7 @@ added nginx-proxy/0 unit to new machine
|
||||
deployment of bundle "cs:~charmers/bundle/web-infrastructure-in-a-box-10" completed
|
||||
```
|
||||
|
||||
几秒后,你会看到LXD容器在运行了:
|
||||
几秒后,你会看到 LXD 容器在运行了:
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ lxc list juju-
|
||||
@ -283,15 +282,15 @@ ID STATE DNS INS-ID SERIES AZ
|
||||
5 started 10.178.150.214 juju-97fa390d-96ad-44df-8b59-e15fdcfc636b-machine-5 trusty
|
||||
```
|
||||
|
||||
这时你就可以在80端口访问http://10.178.150.214,并且会看到一个Juju学院页面。
|
||||
这时你就可以在 80 端口访问 http://10.178.150.214,并且会看到一个 Juju 学院页面。
|
||||
|
||||
[
|
||||

|
||||
][2]
|
||||
|
||||
# 清理所有东西
|
||||
### 清理所有东西
|
||||
|
||||
如果你不需要Juju创建的容器并且不在乎下次需要再次启动,最简单的方法是:
|
||||
如果你不需要 Juju 创建的容器并且不在乎下次需要再次启动,最简单的方法是:
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ juju destroy-controller test --destroy-all-models
|
||||
@ -328,24 +327,36 @@ stgraber@dakara:~$ lxc list juju-
|
||||
+------+-------+------+------+------+-----------+
|
||||
```
|
||||
|
||||
# 总结
|
||||
### 总结
|
||||
|
||||
Juju 2.0内置的LXD支持使得可以用一种非常干净的方式来测试各种服务。
|
||||
Juju 2.0 内置的 LXD 支持使得可以用一种非常干净的方式来测试各种服务。
|
||||
|
||||
在Juju charm store中有很多预制的“组合”可以用来部署,甚至可以用多个“charm”来组合你想要的架构。
|
||||
在 Juju charm store 中有很多预制的“组合”可以用来部署,甚至可以用多个“charm”来组合你想要的架构。
|
||||
|
||||
Juju与LXD是一个完美的解决方案,从一个小的Web服务到大规模的基础设施都可以简单开发,这些都在你自己的机器上,并且不会在你的系统上造成混乱!
|
||||
Juju 与 LXD 是一个完美的解决方案,从一个小的 Web 服务到大规模的基础设施都可以简单开发,这些都在你自己的机器上,并且不会在你的系统上造成混乱!
|
||||
|
||||
### 额外信息
|
||||
|
||||
Juju 网站: http://www.ubuntu.com/cloud/juju
|
||||
Juju charm store : https://jujucharms.com
|
||||
|
||||
LXD 的主站在: https://linuxcontainers.org/lxd
|
||||
LXD 的 GitHub 仓库: https://github.com/lxc/lxd
|
||||
LXD 的邮件列表: https://lists.linuxcontainers.org
|
||||
LXD 的 IRC 频道: #lxcontainers on irc.freenode.net
|
||||
如果你不想或者不能在你的机器上安装 LXD ,你可以在 web 上试试[在线版的 LXD](https://linuxcontainers.org/lxd/try-it)。
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
作者简介:我是Stéphane Graber。我是LXC和LXD项目的领导者,目前在加拿大魁北克蒙特利尔的家所在的Canonical有限公司担任LXD的技术主管。
|
||||
|
||||
作者简介:我是 Stéphane Graber。我是 LXC 和 LXD 项目的领导者,目前在加拿大魁北克蒙特利尔的家所在的Canonical 有限公司担任 LXD 的技术主管。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.stgraber.org/2016/06/06/lxd-2-0-lxd-and-juju-1012/
|
||||
|
||||
作者:[ Stéphane Graber][a]
|
||||
作者:[Stéphane Graber][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
147
published/LXD/Part 11 - LXD 2.0--LXD and OpenStack.md
Normal file
147
published/LXD/Part 11 - LXD 2.0--LXD and OpenStack.md
Normal file
@ -0,0 +1,147 @@
|
||||
LXD 2.0 系列(十一):LXD 和 OpenStack
|
||||
======================================
|
||||
|
||||
这是 [LXD 2.0 系列介绍文章][1]的第十一篇。
|
||||
|
||||

|
||||
|
||||
### 介绍
|
||||
|
||||
首先对这次的延期抱歉。为了让一切正常我花了很长时间。我第一次尝试是使用 devstack 时遇到了一些必须解决问题。 然而即使这样,我还是不能够使网络正常。
|
||||
|
||||
我终于放弃了 devstack,并使用用户友好的 Juju 尝试使用 “conjure-up” 部署完整的 Ubuntu OpenStack。它终于工作了!
|
||||
|
||||
下面是如何运行一个完整的 OpenStack,使用 LXD 容器而不是 VM,并在 LXD 容器中运行所有这些(嵌套的!)。
|
||||
|
||||
### 要求
|
||||
|
||||
这篇文章假设你有一个可以工作的 LXD 设置,提供容器网络访问,并且你有一个非常强大的 CPU,大约 50GB 给容器空间和至少 16G B的内存。
|
||||
|
||||
记住,我们在这里运行一个完整的 OpenStack,这东西不是很轻量!
|
||||
|
||||
### 设置容器
|
||||
|
||||
OpenStack 由大量不同做不同事情的组件组成。 一些需要一些额外的特权,为了可以使设置更简单,我们将使用特权容器。
|
||||
|
||||
我们将配置支持嵌套的容器,预加载所有需要的内核模块,并允许它访问 `/dev/mem`(显然是需要的)。
|
||||
|
||||
请注意,这意味着 LXD 容器的大部分安全特性对该容器被禁用。 然而由 OpenStack 自身产生的容器将是无特权的,并且可以正常使用 LXD 的安全特性。
|
||||
|
||||
```
|
||||
lxc launch ubuntu:16.04 openstack -c security.privileged=true -c security.nesting=true -c "linux.kernel_modules=iptable_nat, ip6table_nat, ebtables, openvswitch"
|
||||
lxc config device add openstack mem unix-char path=/dev/mem
|
||||
```
|
||||
|
||||
LXD 中有一个小 bug,它会尝试加载已经加载到主机上的内核模块。这已在LXD 2.5中得到修复,并将在LXD 2.0.6 中修复,但在此之前,可以使用以下方法:
|
||||
|
||||
```
|
||||
lxc exec openstack -- ln -s /bin/true /usr/local/bin/modprobe
|
||||
```
|
||||
|
||||
我们需要加几条 PPA 并安装 conjure-up,它是我们用来安装 OpenStack 的部署工具。
|
||||
|
||||
```
|
||||
lxc exec openstack -- apt-add-repository ppa:conjure-up/next -y
|
||||
lxc exec openstack -- apt-add-repository ppa:juju/stable -y
|
||||
lxc exec openstack -- apt update
|
||||
lxc exec openstack -- apt dist-upgrade -y
|
||||
lxc exec openstack -- apt install conjure-up -y
|
||||
```
|
||||
|
||||
最后一步是在容器内部配置 LXD 网络。
|
||||
|
||||
所有问题都选择默认,除了:
|
||||
|
||||
* 使用 `dir` 存储后端( `zfs` 不在嵌套容器中用)
|
||||
* 不要配置 IPv6 网络(conjure-up/juju 不太兼容它)
|
||||
|
||||
```
|
||||
lxc exec openstack -- lxd init
|
||||
```
|
||||
|
||||
现在配置完容器了,现在我们部署 OpenStack!
|
||||
|
||||
### 用 conjure-up 部署 OpenStack
|
||||
|
||||
如先前提到的,我们用 conjure-up 部署 OpenStack。
|
||||
|
||||
这是一个很棒的用户友好的可以与 Juju 交互来部署复杂服务的工具。
|
||||
|
||||
首先:
|
||||
|
||||
```
|
||||
lxc exec openstack -- sudo -u ubuntu -i conjure-up
|
||||
```
|
||||
|
||||
* 选择 “OpenStack with NovaLXD”
|
||||
* 选择 “localhost” 作为部署目标(使用 LXD)
|
||||
* 点击 “Deploy all remaining applications”
|
||||
|
||||
接下来会部署 OpenStack。整个过程会花费一个多小时,这取决于你运行的机器。你将看到所有服务会被分配一个容器,然后部署并最终互连。
|
||||
|
||||

|
||||
|
||||
部署完成后会显示一个安装完成的界面。它会导入一些初始镜像、设置 SSH 权限、配置网络最后会显示面板的 IP 地址。
|
||||
|
||||
### 访问面板并生成一个容器
|
||||
|
||||
面板运行在一个容器中,因此你不能直接从浏览器中访问。
|
||||
|
||||
最简单的方法是设置一条 NAT 规则:
|
||||
|
||||
```
|
||||
lxc exec openstack -- iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to <IP>
|
||||
```
|
||||
|
||||
其中 `<ip>` 是 conjure-up 在安装结束时给你的面板 IP 地址。
|
||||
|
||||
你现在可以获取 “openstack” 容器的 IP 地址(来自 `lxc info openstack`),并将浏览器指向:http://\<container ip>/horizon 。
|
||||
|
||||
第一次加载可能需要几分钟。 一旦显示了登录界面,输入默认登录名和密码(admin/openstack),你就会看到OpenStack的欢迎面板!
|
||||
|
||||

|
||||
|
||||
现在可以选择左边的 “Project” 选项卡,进入 “Instances” 页面。 要启动一个使用 nova-lxd 的新实例,点击 “Launch instance”,选择你想要的镜像,网络等,接着你的实例就产生了。
|
||||
|
||||
一旦它运行后,你可以为它分配一个浮动 IP,它将允许你从你的 “openstack” 容器中访问你的实例。
|
||||
|
||||
### 总结
|
||||
|
||||
OpenStack 是一个非常复杂的软件,你也不会想在家里或在单个服务器上运行它。 但是,不管怎样在你的机器上包含这些服务在一个容器中都是非常有趣的。
|
||||
|
||||
conjure-up 是部署这种复杂软件的一个很好的工具,背后使用 Juju 驱动部署,为每个单独的服务使用 LXD 容器,最后是实例本身。
|
||||
|
||||
它也是少数几个容器嵌套多层并实际上有意义的情况之一!
|
||||
|
||||
### 额外信息
|
||||
|
||||
conjure-up 网站: http://conjure-up.io
|
||||
|
||||
Juju 网站: http://www.ubuntu.com/cloud/juju
|
||||
|
||||
LXD 的主站在: https://linuxcontainers.org/lxd
|
||||
|
||||
LXD 的 GitHub 仓库: https://github.com/lxc/lxd
|
||||
|
||||
LXD 的邮件列表: https://lists.linuxcontainers.org
|
||||
|
||||
LXD 的 IRC 频道: #lxcontainers on irc.freenode.net
|
||||
|
||||
如果你不想或者不能在你的机器上安装 LXD ,你可以在 web 上试试在线版的 LXD。
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
作者简介:我是Stéphane Graber。我是LXC和LXD项目的领导者,目前在加拿大魁北克蒙特利尔的家所在的Canonical有限公司担任LXD的技术主管。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.stgraber.org/2016/10/26/lxd-2-0-lxd-and-openstack-1112/
|
||||
|
||||
作者:[Stéphane Graber][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.stgraber.org/author/stgraber/
|
||||
[1]:https://www.stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/
|
@ -1,42 +1,42 @@
|
||||
LXD 2.0 系列(七):LXD中的Docker
|
||||
LXD 2.0 系列(七):LXD 中的 Docker
|
||||
======================================
|
||||
|
||||
这是 [LXD 2.0 系列介绍文章][0]的第七篇。
|
||||
|
||||

|
||||
|
||||
### 为什么在LXD中运行Docker
|
||||
### 为什么在 LXD 中运行 Docker
|
||||
|
||||
正如我在[系列的第一篇][1]中简要介绍的,LXD的重点是系统容器。也就是我们在容器中运行一个完全未经修改的Linux发行版。LXD的所有意图和目的不在乎容器中的负载。它只是设置容器命名空间和安全策略,然后生成/sbin/init,接着等待容器停止。
|
||||
正如我在[系列的第一篇][1]中简要介绍的,LXD 的重点是系统容器,也就是我们在容器中运行一个完全未经修改的 Linux 发行版。LXD 的所有意图和目的并不在乎容器中的负载是什么。它只是设置容器命名空间和安全策略,然后运行 `/sbin/init` 来生成容器,接着等待容器停止。
|
||||
|
||||
应用程序容器,例如由Docker或Rkt实现的应用程序容器是非常不同的,因为它们用于分发应用程序,通常在它们内部运行单个主进程,并且比LXD容器生命期更短暂。
|
||||
应用程序容器,例如由 Docker 或 Rkt 所实现的应用程序容器是非常不同的,因为它们用于分发应用程序,通常在它们内部运行单个主进程,并且比 LXD 容器生命期更短暂。
|
||||
|
||||
这两种容器类型不是相互排斥的,我们的确看到使用Docker容器来分发应用程序的价值。这就是为什么我们在过去一年努力工作以便让LXD中运行Docker成为可能。
|
||||
这两种容器类型不是相互排斥的,我们的确看到使用 Docker 容器来分发应用程序的价值。这就是为什么我们在过去一年中努力工作以便让 LXD 中运行 Docker 成为可能。
|
||||
|
||||
这意味着,使用Ubuntu 16.04和LXD 2.0,您可以为用户创建容器,然后可以像正常的Ubuntu系统一样连接到这些容器,然后运行Docker来安装他们想要的服务和应用程序。
|
||||
这意味着,使用 Ubuntu 16.04 和 LXD 2.0,您可以为用户创建容器,然后可以像正常的 Ubuntu 系统一样连接到这些容器,然后运行 Docker 来安装他们想要的服务和应用程序。
|
||||
|
||||
### 要求
|
||||
|
||||
要让它正常工作要做很多事情,Ubuntu 16.04上已经包含了这些:
|
||||
要让它正常工作要做很多事情,Ubuntu 16.04 上已经包含了这些:
|
||||
|
||||
- 支持CGroup命名空间的内核(4.4 Ubuntu或4.6 mainline)
|
||||
- 使用LXC 2.0和LXCFS 2.0的LXD 2.0
|
||||
- 一个自定义版本的Docker(或一个用我们提交的所有补丁构建的)
|
||||
- Docker镜像,当用户命名空间限制时,或者使父LXD容器成为特权容器(security.privileged = true)
|
||||
- 支持 CGroup 命名空间的内核(4.4 Ubuntu 或 4.6 主线内核)
|
||||
- 使用 LXC 2.0 和 LXCFS 2.0 的 LXD 2.0
|
||||
- 一个自定义版本的 Docker(或一个用我们提交的所有补丁构建的)
|
||||
- Docker 镜像,其受限于用户命名空间限制,或者使父 LXD 容器成为特权容器(`security.privileged = true`)
|
||||
|
||||
### 运行一个基础的Docker负载
|
||||
### 运行一个基础的 Docker 载荷
|
||||
|
||||
说完这些,让我们开始运行Docker容器!
|
||||
说完这些,让我们开始运行 Docker 容器!
|
||||
|
||||
首先你可以用下面的命令得到一个Ubuntu 16.04的容器:
|
||||
首先你可以用下面的命令得到一个 Ubuntu 16.04 的容器:
|
||||
|
||||
```
|
||||
lxc launch ubuntu-daily:16.04 docker -p default -p docker
|
||||
```
|
||||
|
||||
“-p default -p docker”表示LXD将“default”和“docker”配置文件应用于容器。默认配置文件包含基本网络配置,而docker配置文件告诉LXD加载几个必需的内核模块并为容器设置一些挂载。 docker配置文件还允许容器嵌套。
|
||||
`-p default -p docker` 表示 LXD 将 `default` 和 `docker` 配置文件应用于容器。`default` 配置文件包含基本网络配置,而 `docker` 配置文件告诉 LXD 加载几个必需的内核模块并为容器设置一些挂载。 `docker` 配置文件还支持容器嵌套。
|
||||
|
||||
现在让我们确保容器是最新的并安装docker:
|
||||
现在让我们确保容器是最新的并安装 docker:
|
||||
|
||||
```
|
||||
lxc exec docker -- apt update
|
||||
@ -44,8 +44,9 @@ lxc exec docker -- apt dist-upgrade -y
|
||||
lxc exec docker -- apt install docker.io -y
|
||||
```
|
||||
|
||||
就是这样!你已经安装并运行了一个Docker容器。
|
||||
现在让我们用两个Docker容器开启一个基础的web服务:
|
||||
就是这样!你已经安装并运行了一个 Docker 容器。
|
||||
|
||||
现在让我们用两个 Docker 容器开启一个基础的 web 服务:
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ lxc exec docker -- docker run --detach --name app carinamarina/hello-world-app
|
||||
@ -87,7 +88,7 @@ Status: Downloaded newer image for carinamarina/hello-world-web:latest
|
||||
d7b8963401482337329faf487d5274465536eebe76f5b33c89622b92477a670f
|
||||
```
|
||||
|
||||
现在这两个Docker容器已经运行了,我们可以得到LXD容器的IP地址,并且访问它的服务了!
|
||||
现在这两个 Docker 容器已经运行了,我们可以得到 LXD 容器的 IP 地址,并且访问它的服务了!
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ lxc list
|
||||
@ -104,13 +105,13 @@ The linked container said... "Hello World!"
|
||||
|
||||
### 总结
|
||||
|
||||
就是这样了!在LXD容器中运行Docker容器真的很简单。
|
||||
就是这样了!在 LXD 容器中运行 Docker 容器真的很简单。
|
||||
|
||||
现在正如我前面提到的,并不是所有的Docker镜像都会像我的示例一样,这通常是因为LXD提供了额外的限制,特别是用户命名空间。
|
||||
现在正如我前面提到的,并不是所有的 Docker 镜像都会像我的示例一样,这通常是因为 LXD 带来了额外的限制,特别是用户命名空间。
|
||||
|
||||
只有Docker的overlayfs存储驱动在这种模式下工作。该存储驱动有一组自己的限制,这可以进一步限制在该环境中可以有多少镜像工作。
|
||||
在这种模式下只有 Docker 的 overlayfs 存储驱动可以工作。该存储驱动有一组自己的限制,这进一步限制了在该环境中可以有多少镜像工作。
|
||||
|
||||
如果您的负载无法正常工作,并且您信任LXD容器中的用户,你可以试下:
|
||||
如果您的负载无法正常工作,并且您信任该 LXD 容器中的用户,你可以试下:
|
||||
|
||||
```
|
||||
lxc config set docker security.privileged true
|
||||
@ -119,7 +120,7 @@ lxc restart docker
|
||||
|
||||
这将取消激活用户命名空间,并以特权模式运行容器。
|
||||
|
||||
但是请注意,在这种模式下,容器内的root与主机上的root是相同的uid。现在有许多已知的方法让用户脱离容器,并获得主机上的root权限,所以你应该只有在信任你的LXD容器中的用户可以具有主机上的root权限才这样做。
|
||||
但是请注意,在这种模式下,容器内的 root 与主机上的 root 是相同的 uid。现在有许多已知的方法让用户脱离容器,并获得主机上的 root 权限,所以你应该只有在信任你的 LXD 容器中的用户可以具有主机上的 root 权限才这样做。
|
||||
|
||||
### 额外信息
|
||||
|
||||
@ -138,11 +139,11 @@ via: https://www.stgraber.org/2016/04/13/lxd-2-0-docker-in-lxd-712/
|
||||
|
||||
作者:[Stéphane Graber][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 组织翻译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.stgraber.org/author/stgraber/
|
||||
[0]: https://www.stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/
|
||||
[1]: https://www.stgraber.org/2016/03/11/lxd-2-0-introduction-to-lxd-112/
|
||||
[1]: https://linux.cn/article-7618-1.html
|
||||
[2]: https://linuxcontainers.org/lxd/try-it/
|
@ -1,4 +1,4 @@
|
||||
LXD 2.0 系列(八):LXD中的LXD
|
||||
LXD 2.0 系列(八):LXD 中的 LXD
|
||||
======================================
|
||||
|
||||
这是 [LXD 2.0 系列介绍文章][0]的第八篇。
|
||||
@ -7,35 +7,35 @@ LXD 2.0 系列(八):LXD中的LXD
|
||||
|
||||
### 介绍
|
||||
|
||||
在上一篇文章中,我介绍了如何运行[LXD中的Docker][1],这是一个很好的方式来访问由Docker提供的应用程序组合,同时Docker还运行在LXD提供的安全环境中。
|
||||
在上一篇文章中,我介绍了如何[在 LXD 中运行 Docker][1],这是一个访问由 Docker 提供的应用程序组合的很好方式,同时 Docker 还运行在 LXD 提供的安全环境中。
|
||||
|
||||
我提到的一个情况是为你的用户提供一个LXD容器,然后让他们使用他们的容器来运行Docker。那么,如果他们自己想使用LXD在其容器中运行其他Linux发行版,或者甚至运行容器允许另一组人来访问Linux系统?
|
||||
我提到的一个情况是为你的用户提供一个 LXD 容器,然后让他们使用他们的容器来运行 Docker。那么,如果他们自己想要在其容器中使用 LXD 运行其他 Linux 发行版,或者甚至允许另一组人来访问运行在他们的容器中的 Linux 系统呢?
|
||||
|
||||
原来LXD使得用户运行嵌套容器变得非常简单。
|
||||
原来 LXD 使得用户运行嵌套容器变得非常简单。
|
||||
|
||||
### 嵌套LXD
|
||||
### 嵌套 LXD
|
||||
|
||||
最简单的情况可以使用Ubuntu 16.04镜像来展示。 Ubuntu 16.04云镜像预装了LXD。守护进程本身没有运行,因为它是套接字激活的,所以它不使用任何资源,直到你真正使用它。
|
||||
最简单的情况可以使用 Ubuntu 16.04 镜像来展示。 Ubuntu 16.04 云镜像预装了 LXD。守护进程本身没有运行,因为它是由套接字激活的,所以它不使用任何资源,直到你真正使用它。
|
||||
|
||||
让我们启动一个启用了嵌套的Ubuntu 16.04容器:
|
||||
让我们启动一个启用了嵌套的 Ubuntu 16.04 容器:
|
||||
|
||||
```
|
||||
lxc launch ubuntu-daily:16.04 c1 -c security.nesting=true
|
||||
```
|
||||
|
||||
你也可以在一个存在的容器上设置security.nesting:
|
||||
你也可以在一个已有的容器上设置 `security.nesting`:
|
||||
|
||||
```
|
||||
lxc config set <container name> security.nesting true
|
||||
```
|
||||
|
||||
或者对所有的容器使用一个配置文件:
|
||||
或者对所有的容器使用一个指定的配置文件:
|
||||
|
||||
```
|
||||
lxc profile set <profile name> security.nesting true
|
||||
```
|
||||
|
||||
容器启动后,你可以从容器内部得到一个shell,配置LXD并生成一个容器:
|
||||
容器启动后,你可以从容器内部得到一个 shell,配置 LXD 并生成一个容器:
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ lxc launch ubuntu-daily:16.04 c1 -c security.nesting=true
|
||||
@ -79,20 +79,19 @@ root@c1:~# lxc list
|
||||
root@c1:~#
|
||||
```
|
||||
|
||||
就是这样简单
|
||||
就是这样简单。
|
||||
|
||||
### 在线演示服务器
|
||||
|
||||
因为这篇文章很短,我想我会花一点时间谈论我们运行中的[演示服务器][2]。我们今天早些时候刚刚达到了10000个会话!
|
||||
因为这篇文章很短,我想我会花一点时间谈论我们运行中的[演示服务器][2]。我们今天早些时候刚刚达到了 10000 个会话!
|
||||
|
||||
这个服务器基本上只是一个运行在一个相当强大的虚拟机上的正常的LXD,一个小型的守护进程实现我们的网站使用的REST API。
|
||||
这个服务器基本上只是一个运行在一个相当强大的虚拟机上的正常的 LXD,一个小型的守护进程实现了我们的网站所使用的 REST API。
|
||||
|
||||
当你接受服务条款时,将为你创建一个新的LXD容器,并启用security.nesting,如上所述,接着你就像使用“lxc exec”时一样连接到了那个容器,除了我们使用websockets和javascript来做这些。
|
||||
当你接受服务条款时,将为你创建一个新的 LXD 容器,并启用 `security.nesting`,如上所述。接着你就像使用 `lxc exec` 时一样连接到了那个容器,除了我们使用 websockets 和 javascript 来做这些。
|
||||
|
||||
你在此环境中创建的容器都是嵌套的LXD容器。
|
||||
如果你想,你可以进一步地嵌套。
|
||||
你在此环境中创建的容器都是嵌套的 LXD 容器。如果你想,你可以进一步地嵌套。
|
||||
|
||||
我们全范围地使用了[LXD资源限制][3],以防止一个用户的行为影响其他用户,并仔细监控服务器的任何滥用迹象。
|
||||
我们全范围地使用了 [LXD 资源限制][3],以防止一个用户的行为影响其他用户,并仔细监控服务器的任何滥用迹象。
|
||||
|
||||
如果你想运行自己的类似的服务器,你可以获取我们的网站和守护进程的代码:
|
||||
|
||||
@ -118,12 +117,12 @@ via: https://www.stgraber.org/2016/04/14/lxd-2-0-lxd-in-lxd-812/
|
||||
|
||||
作者:[Stéphane Graber][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 组织翻译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.stgraber.org/author/stgraber/
|
||||
[0]: https://www.stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/
|
||||
[1]: https://www.stgraber.org/2016/04/13/lxd-2-0-docker-in-lxd-712/
|
||||
[1]: https://linux.cn/article-8235-1.html
|
||||
[2]: https://linuxcontainers.org/lxd/try-it/
|
||||
[3]: https://www.stgraber.org/2016/03/26/lxd-2-0-resource-control-412/
|
@ -7,26 +7,26 @@ LXD 2.0 系列(九):实时迁移
|
||||
|
||||
### 介绍
|
||||
|
||||
LXD 2.0中的有一个尽管是实验性质的但非常令人兴奋的功能,那就是支持容器检查点和恢复。
|
||||
LXD 2.0 中的有一个尽管是实验性质的但非常令人兴奋的功能,那就是支持容器检查点和恢复。
|
||||
|
||||
简单地说,检查点/恢复意味着正在运行的容器状态可以被序列化到磁盘,然后在与容器状态快照相同的主机上或者在等同于实时迁移的另一主机上恢复。
|
||||
简单地说,检查点/恢复意味着正在运行的容器状态可以被序列化到磁盘,要么可以作为同一主机上的有状态快照,要么放到另一主机上相当于实时迁移。
|
||||
|
||||
### 要求
|
||||
|
||||
要访问容器实时迁移和有状态快照,你需要以下条件:
|
||||
要使用容器实时迁移和有状态快照,你需要以下条件:
|
||||
|
||||
- 一个最近的Linux内核,4.4或更高版本。
|
||||
- CRIU 2.0,可能有一些cherry-pick的提交,具体取决于你确切的内核配置。
|
||||
- 直接在主机上运行LXD。 不能在容器嵌套下使用这些功能。
|
||||
- 对于迁移,目标机器必须至少实现源的指令集,目标内核必须至少提供与源相同的系统调用,并且在源上挂载的任何内核文件系统也必须可挂载到目标主机上。
|
||||
- 一个非常新的 Linux 内核,4.4 或更高版本。
|
||||
- CRIU 2.0,可能需要一些 cherry-pick 的提交,具体取决于你确切的内核配置。
|
||||
- 直接在主机上运行 LXD。 不能在容器嵌套下使用这些功能。
|
||||
- 对于迁移,目标主机必须至少实现源主机的指令集,目标主机内核必须至少提供与源主机相同的系统调用,并且在源主机上挂载的任何内核文件系统也必须可挂载到目标主机上。
|
||||
|
||||
Ubuntu 16.04 LTS已经提供了所有需要的依赖,在这种情况下,您只需要安装CRIU本身:
|
||||
Ubuntu 16.04 LTS 已经提供了所有需要的依赖,在这种情况下,您只需要安装 CRIU 本身:
|
||||
|
||||
```
|
||||
apt install criu
|
||||
```
|
||||
|
||||
### 使用CRIU
|
||||
### 使用 CRIU
|
||||
|
||||
#### 有状态快照
|
||||
|
||||
@ -46,7 +46,7 @@ stgraber@dakara:~$ lxc info c1 | grep second
|
||||
second (taken at 2016/04/25 19:36 UTC) (stateful)
|
||||
```
|
||||
|
||||
这意味着所有容器运行时状态都被序列化到磁盘并且作为了快照的一部分。就像你还原无状态快照那样还原一个有状态快照:
|
||||
这意味着所有容器运行时状态都被序列化到磁盘并且作为了快照的一部分。可以像你还原无状态快照那样还原一个有状态快照:
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ lxc restore c1 second
|
||||
@ -55,7 +55,7 @@ stgraber@dakara:~$
|
||||
|
||||
#### 有状态快照的停止/启动
|
||||
|
||||
比方说你想要升级内核或者其他类似的维护。与其等待所有的容器启动,你可以:
|
||||
比方说你由于升级内核或者其他类似的维护而需要重启机器。与其等待重启后启动所有的容器,你可以:
|
||||
|
||||
```
|
||||
stgraber@dakara:~$ lxc stop c1 --stateful
|
||||
@ -266,38 +266,37 @@ stgraber@dakara:~$ lxc list s-tollana:
|
||||
|
||||
### 限制
|
||||
|
||||
正如我之前说的,容器的检查点/恢复还是非常新的功能,我们还在努力地开发这个功能、修复问题已知问题。我们确实需要更多的人来尝试这个功能,并给我们反馈,但我不建议在生产中使用这个功能。
|
||||
正如我之前说的,容器的检查点/恢复还是非常新的功能,我们还在努力地开发这个功能、修复已知的问题。我们确实需要更多的人来尝试这个功能,并给我们反馈,但我不建议在生产中使用这个功能。
|
||||
|
||||
我们跟踪的问题列表在[Launchpad上][1]。
|
||||
我们跟踪的问题列表在 [Launchpad上][1]。
|
||||
|
||||
我们期望在Ubuntu 16.04上有一个基本的带有几个服务的Ubuntu容器能够与CRIU一起工作。然而在更复杂的容器、使用设备传递、复杂的网络服务或特殊的存储配置可能会失败。
|
||||
我们估计在带有 CRIU 的 Ubuntu 16.04 上带有几个服务的基本的 Ubuntu 容器能够正常工作。然而在更复杂的容器、使用了设备直通、复杂的网络服务或特殊的存储配置下可能会失败。
|
||||
|
||||
只要有可能,CRIU会在转储时失败,而不是在恢复时。在这种情况下,源容器将继续运行,快照或迁移将会失败,并生成一个日志文件用于调试。
|
||||
要是有问题,CRIU 会尽可能地在转储时失败,而不是在恢复时。在这种情况下,源容器将继续运行,快照或迁移将会失败,并生成一个日志文件用于调试。
|
||||
|
||||
在极少数情况下,CRIU无法恢复容器,在这种情况下,源容器仍然存在但将被停止,并且必须手动重新启动。
|
||||
在极少数情况下,CRIU 无法恢复容器,在这种情况下,源容器仍然存在但将被停止,并且必须手动重新启动。
|
||||
|
||||
### 发送bug报告
|
||||
### 发送 bug 报告
|
||||
|
||||
我们正在跟踪Launchpad上关于CRIU Ubuntu软件包的检查点/恢复相关的错误。大多数修复bug工作是在上游的CRIU或Linux内核上,但是这种方式我们更容易跟踪。
|
||||
我们正在跟踪 Launchpad 上关于 CRIU Ubuntu 软件包的检查点/恢复相关的错误。大多数修复 bug 工作是在上游的 CRIU 或 Linux 内核上进行,但是这种方式我们更容易跟踪。
|
||||
|
||||
要提交新的bug报告,请看这里。
|
||||
要提交新的 bug 报告,请看这里。
|
||||
|
||||
请务必包括:
|
||||
|
||||
你运行的命令和显示给你的错误消息
|
||||
- 你运行的命令和显示给你的错误消息
|
||||
- `lxc info` 的输出(*)
|
||||
- `lxc info <container name> `的输出
|
||||
- `lxc config show -expanded <container name>` 的输出
|
||||
- `dmesg`(*)的输出
|
||||
- `/proc/self/mountinfo` 的输出(*)
|
||||
- `lxc exec <container name> - cat /proc/self/mountinfo` 的输出
|
||||
- `uname -a`(*)的输出
|
||||
- `/var/log/lxd.log`(*)的内容
|
||||
- `/etc/default/lxd-bridge`(*)的内容
|
||||
- `/var/log/lxd/<container name>/` 的 tarball(*)
|
||||
|
||||
- “lxc info”的输出(*)
|
||||
- “lxc info <container name>”的输出
|
||||
- “lxc config show -expanded <container name>”的输出
|
||||
- “dmesg”(*)的输出
|
||||
- “/proc/self/mountinfo”的输出(*)
|
||||
- “lxc exec <container name> - cat /proc/self/mountinfo”的输出
|
||||
- “uname -a”(*)的输出
|
||||
- /var/log/lxd.log(*)的内容
|
||||
- /etc/default/lxd-bridge(*)的内容
|
||||
- /var/log/lxd/<container name>/ 的tarball(*)
|
||||
|
||||
如果报告迁移错误,而不是状态快照或有状态停止错误,请将上面所有含有(*)标记的源与目标主机的信息发来。
|
||||
如果报告迁移错误,而不是状态快照或有状态停止的错误,请将上面所有含有(*)标记的源与目标主机的信息发来。
|
||||
|
||||
### 额外信息
|
||||
|
||||
@ -314,11 +313,11 @@ LXD 的 IRC 频道: #lxcontainers on irc.freenode.net
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.stgraber.org/2016/03/19/lxd-2-0-your-first-lxd-container-312/
|
||||
via: https://stgraber.org/2016/04/25/lxd-2-0-live-migration-912/
|
||||
|
||||
作者:[Stéphane Graber][a]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 组织翻译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,69 @@
|
||||
安卓编年史
|
||||
================================================================================
|
||||
### 安卓 3.0 蜂巢—平板和设计复兴 ###
|
||||
|
||||
尽管姜饼中做了许多改变,安卓仍然是移动世界里的丑小鸭。相比于 iPhone,它的优雅程度和设计完全抬不起头。另一方面来说,为数不多的能与 iOS 的美学智慧相当的操作系统之一是 Palm 的 WebOS。WebOS 有着优秀的整体设计,创新的功能,而且被寄予期望能够从和 iPhone 的长期竞争中拯救公司。
|
||||
|
||||
尽管如此,一年之后,Palm 资金链断裂。Palm 公司未曾看到 iPhone 的到来,到 WebOS 就绪的时候已经太晚了。2010 年 4 月,惠普花费 10 亿美元收购了 Palm。尽管惠普收购了一个拥有优秀用户界面的产品,但界面的首席设计师,Matias Duarte,并没有加入惠普公司。2010 年 5 月,就在惠普接手 Palm 之前,Duarte 加入了谷歌。惠普买下了面包,但谷歌雇佣了它的烘培师。
|
||||
|
||||

|
||||
|
||||
*第一部蜂巢设备,摩托罗拉 Xoom 10英寸平板。*
|
||||
|
||||
在谷歌,Duarte 被任命为安卓用户体验主管。这是第一次有人公开掌管安卓的外观。尽管 Matias 在安卓 2.2 发布时就来到了谷歌,第一个真正受他影响的安卓版本是 3.0 蜂巢(Honeycomb),它在 2011 年 2 月发布。
|
||||
|
||||
按谷歌自己的说法,蜂巢是匆忙问世的。10 个月前,苹果发布了 iPad,让平板变得更加现代,谷歌希望能够尽快做出回应。蜂巢就是那个回应,一个运行在 10 英寸触摸屏上的安卓版本。悲伤的是,将这个系统推向市场是如此优先的事项,以至于边边角角都被砍去了以节省时间。
|
||||
|
||||
新系统只用于平板——手机不能升级到蜂巢,这加大了谷歌让系统运行在差异巨大的不同尺寸屏幕上的难度。但是,仅支持平板而不支持手机也使得蜂巢源码没有泄露。之前的安卓版本是开源的,这使得黑客社区能够将其最新版本移植到所有的不同设备之上。谷歌不希望应用开发者在支持不完美的蜂巢手机移植版本时感到压力,所以谷歌将源码留在自己手中,并且严格控制能够拥有蜂巢的设备。匆忙的开发还导致了软件问题。在发布时,蜂巢不是特别稳定,SD 卡不能工作,Adobe Flash——安卓最大的特色之一——还不被支持。
|
||||
|
||||
[摩托罗拉 Xoom][1] 是为数不多的拥有蜂巢的设备之一,它是这个新系统的旗舰产品。Xoom 是一个 10 英寸,16:9 的平板,拥有 1GB 内存和 1GHz Tegra 2 双核处理器。尽管是由谷歌直接控制更新的新版安卓发布设备,它并没有被叫做“Nexus”。对此最可能的原因是谷歌对它没有足够的信心称其为旗舰。
|
||||
|
||||
尽管如此,蜂巢是安卓的一个里程碑。在一个体验设计师的主管之下,整个安卓用户界面被重构,绝大多数奇怪的应用设计都得到改进。安卓的默认应用终于看起来像整体的一部分,不同的界面有着相似的布局和主题。然而重新设计安卓会是一个跨越了多个版本的项目——蜂巢只是将安卓塑造成型的开始。这第一稿为未来版本的安卓将如何运作奠定了基础,但它也用了过多的科幻主题,谷歌将花费接下来的数个版本来淡化它。
|
||||
|
||||

|
||||
|
||||
*蜂巢和姜饼的主屏幕。
|
||||
[Ron Amadeo供图]*
|
||||
|
||||
姜饼只是在它的光子壁纸上试验了科幻外观,蜂巢整个系统的以电子为灵感的主题让它充满科幻意味。所有东西都是黑色的,如果你需要对比色,你可以从一些不同色调的蓝色中挑选。所有蓝色的东西还有“光晕”效果,让整个系统看起来像是外星科技创造的。默认背景是个六边形的全息方阵(一个蜂巢!明白了吗?),看起来像是一艘飞船上的传送阵的地板。
|
||||
|
||||
蜂巢最重要的变化是增加了系统栏。摩托罗拉 Xoom 除了电源和音量键之外没有配备实体按键,所以蜂巢添加了一个大黑色底栏到屏幕底部,用于放置导航按键。这意味着默认安卓界面不再需要特别的实体按键。在这之前,安卓没有实体的返回、菜单和 Home 键就不能正常工作。现在,软件提供了所有必需的按钮,任何带有触摸屏的设备都能够运行安卓。
|
||||
|
||||
新软件按键带来的最大的好处是灵活性。新的应用指南表明应用不再必需实体菜单按键,需要用到的时候,蜂巢会自动检测并添加四个按钮到系统栏让应用正常工作。另一个软件按键的灵活属性是它们可以改变设备的屏幕方向。除了电源和音量键之外,Xoom 的方向实际上不是那么重要。从用户的角度来看,系统栏始终处于设备的“底部”。代价是系统栏明显占据了一些屏幕空间。为了在10英寸平板上节省空间,状态栏被合并到了系统栏中。所有的常用状态指示放在了右侧——有电源、连接状态、时间还有通知图标。
|
||||
|
||||
主屏幕的整个布局都改变了,用户界面部件放在了设备的四个角落。屏幕底部左侧放置着之前讨论过的导航按键,右侧用于状态指示和通知,顶部左侧显示的是文本搜索和语音搜索,右侧有应用抽屉和添加小部件的按钮。
|
||||
|
||||

|
||||
|
||||
*新锁屏界面和最近应用界面。
|
||||
[Ron Amadeo供图]*
|
||||
|
||||
(因为 Xoom 是一部 [较重] 的 10 英寸,16:9 平板设备,这意味着它主要是横屏使用。虽然大部分应用还支持竖屏模式,但是到目前为止,由于我们的版式限制,我们大部分使用的是竖屏模式的截图。请记住蜂巢的截图来自于 10 英寸的平板,而姜饼的截图来自 3.7 英寸的手机。二者所展现的信息密度是不能直接比较的。)
|
||||
|
||||
解锁界面——从菜单按钮到旋转式拨号盘再到滑动解锁——移除了解锁步骤的任何精度要求,它采用了一个环状解锁盘。从中间向任意方向向外滑动就能解锁设备。就像旋转式解锁,这种解锁方式更加符合人体工程学,而不用强迫你的手指完美地遵循一条笔直的解锁路径。
|
||||
|
||||
第二张图中略缩图条带是由新增的“最近应用”按钮打开的界面,现在处在返回键和 Home 键旁边。不像姜饼中长按 Home 键显示一组最近应用的图标,蜂巢在屏幕上显示应用图标和略缩图,使得在任务间切换变得更加方便。“最近应用”的灵感明显来自于 Duarte 在 WebOS 中的“卡片式”多任务管理,其使用全屏略缩图来切换任务。这个设计提供和 WebOS 的任务切换一样的易识别体验,但更小的略缩图允许更多的应用一次性显示在屏幕上。
|
||||
|
||||
尽管最近应用的实现看起来和你现在的设备很像,这个版本实际上是非常早期的。这个列表不能滚动,这意味着竖屏下只能显示七个应用,横屏下只能显示五个。任何超出范围的应用会从列表中去除。而且你也不能通过滑动略缩图来关闭应用——这只是个静态的列表。
|
||||
|
||||
从这里我们可以看到电子灵感影响的完整主题效果:略缩图的周围有蓝色的轮廓以及神秘的光晕。这张截图还展示软件按键的好处——上下文。返回按钮可以关闭略缩图列表,所以这里的箭头指向下方,而不是通常的样子。
|
||||
|
||||
----------
|
||||
|
||||

|
||||
|
||||
[Ron Amadeo][a] / Ron是Ars Technica的评论编缉,专注于安卓系统和谷歌产品。他总是在追寻新鲜事物,还喜欢拆解事物看看它们到底是怎么运作的。
|
||||
|
||||
[@RonAmadeo][t]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://arstechnica.com/gadgets/2016/10/building-android-a-40000-word-history-of-googles-mobile-os/16/
|
||||
|
||||
译者:[alim0x](https://github.com/alim0x) 校对:[Bestony](https://github.com/Bestony)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
|
||||
|
||||
[1]:http://arstechnica.com/gadgets/2011/03/ars-reviews-the-motorola-xoom/
|
||||
[a]:http://arstechnica.com/author/ronamadeo
|
||||
[t]:https://twitter.com/RonAmadeo
|
@ -1,3 +1,5 @@
|
||||
translating by XLCYun
|
||||
|
||||
Reactive programming vs. Reactive systems
|
||||
============================================================
|
||||
|
||||
|
@ -1,311 +0,0 @@
|
||||
#rusking translating
|
||||
# Arch Linux on a Lenovo Yoga 900
|
||||
|
||||
_Warning: this is about 5,500 words with plenty of interesting links, so wait till you’ve got something to drink and some time._
|
||||
|
||||
After 3 years running Arch Linux on a [Lenovo Yoga 2][2], I decided to upgrade to a Yoga 900:
|
||||

|
||||
|
||||
_Lenovo Yoga 900 [Amazon special][1] for $925 – 8GB RAM, 256GB SSD, 3200×1800, Intel Skylake 3.2GHz + Iris Graphics_
|
||||
|
||||
Dell charges $1650 for a [similar XPS 13][3] albeit with the next generation of Intel chip. The current model of Yoga is the 910, and that laptop costs $1300\. However, I didn’t even consider it because they screwed the pooch on the keyboard. Lots of reviews start with the color and feel of the materials on the outside, but I’m going to start on the keyboard layout.
|
||||
|
||||
### Keyboard
|
||||
|
||||
|
||||
The Yoga 2 Pro and the Yoga 900 have the same design. It is inferior in several ways compared to the traditional and well-regarded IBM Thinkpad keyboards, but not the worst keyboard out there and I got used to it over the 3 years. Unfortunately, Lenovo made things worse in the 910.
|
||||
|
||||

|
||||
_Yoga 2 and Yoga 900 keyboard layout _
|
||||
|
||||

|
||||
_Yoga 910 keyboard_
|
||||
|
||||
The problem with the 910 keyboard is that the right-shift key is in the wrong place, and impossible to reach without moving your hand. It is in a different position than every keyboard I’ve ever used going back to 9<sup>th</sup> grade typing class on the IBM Selectric. I’d expect such a mistake from a company like Asus or Dell, not a company with the legacy of building typewriters that generations of Americans learned and worked on.
|
||||
|
||||
Every year the Yoga team has made changes to the layout. Imagine if every year in the 20<sup>th</sup> century, IBM had changed the layout of their typewriters, and then bragged about the “[efficiency][4]” gains. The company wouldn’t even be around today!
|
||||
|
||||
I probably could get used to the Yoga 910 page up / page down overloaded with arrow keys, and some of the other changes, but the shift-key is a deal breaker and I’d rather not bother with the others.
|
||||
|
||||
There are many ways for Lenovo to truly improve their keyboard, such as making the volume-up key not so close to application-close. And re-thinking whether they really need an easy way to (accidentally) turn off the screen given there is already a way to dim it. And figuring out how to put in an overloaded number pad. Does Lenovo think only businesses deal with numbers?
|
||||
|
||||
The 910 keyboard has so many changes, they might not ever go back to their old layouts again. I’m hoping this hardware will last me years. I’d rather have a great keyboard than a computer 10 times faster.
|
||||
|
||||
I see in the Yoga 910 reviews on the Lenovo website that some people are returning the computer because of the keyboard. Lenovo should have a policy: if an employee wanted to make an alteration to the keyboard, they should have to write down a **very ****good** reason, and then sacrifice one of their fingers in solidarity with the pain it will cause customers. A rule like that would decrease this needless churn. Lenovo went through a lot of work make the Yoga 910, but f*cked it up with the input mechanism.
|
||||
|
||||
### Overall
|
||||
|
||||
The Yoga 2 was generally fast enough for everything I needed to do. An SSD is nice for various reasons, but it is almost overkill on Arch. People who only use Windows might not realize how bloated it is:
|
||||
|
||||

|
||||
|
||||
In the late 90’s, you’d get a new computer every few years because the processors were doubling in speed every 18 months, and the software was doubling in size frequently as well. Things are very different now. The new Yoga is 30% faster than my Yoga 2 running integer benchmarks. This is a 3.2 GHz machine whereas the old one maxed out at 2.6 GHz so most of the difference is the faster frequency.
|
||||
|
||||
Haswell was introduced in 2013, and Skylake was introduced in 2015 so two years of advancement is the other part of the improvements. The big benefit of the new processor is that it is built in 14nm instead of 22nm which means less heat and longer battery life. My old Yoga 2 battery was still giving me about 3.5 hours of battery life with moderate brightness, but this should give me 7.
|
||||
|
||||
The Yoga 2 hinge is starting to weaken and fall apart, and there is no way to tighten it, only to try to find one on the Internet or mail it to Lenovo:
|
||||
|
||||

|
||||
|
||||
The hinge on Yogas is designed to let you lay the device flat, and even fold it back as a tablet, but I found it a heavy and awkward and so never bothered. I’m just happy if I’ll be able to open and close it daily for years.
|
||||
|
||||
The Yoga 900 hinge is a more solid watchband design and should last longer:
|
||||
|
||||

|
||||
|
||||
The only very minor downside is that if you shake it, it sounds like you’ve got broken parts rattling around inside, which usually is something to be worried about for electronics! However, it’s just a false alarm of the 800 pieces sliding.
|
||||
|
||||
The Yoga 2 Pro was overall a quite well-built device, but if I hold it in one hand with the screen open, it sags a bit, and sometimes the keyboard backlight goes out. Both Yogas are thin and light, but the 900 feels more solid.
|
||||
|
||||
### Clickpad
|
||||
|
||||
The biggest problem with the Yoga 2 was the Synaptics Clickpad it used. It actually wasn’t the hardware, it was the driver, which is basically unmaintained, and of course had some bugs. It’s a shame because Synaptics could easily afford one engineer to help maintain a few thousand lines of code. They actually wrote another driver, they just never released it freely so it could be included with the kernel.
|
||||
|
||||
However, a new library called [Libinput][5] was created, and they support Clickpads and things work well out of the box now. The best thing about Libinput is that they fixed the bug where if you have your left finger touching in the mouse-click area, it will now register pointer movements by your right finger. It’s hard to believe, but that basic functionality was broken for many years with Synaptics hardware on Linux.
|
||||
|
||||
The Clickpad hardware was still working fine, but it didn’t give any audible click sound anymore. That actually isn’t a problem, but it did make me wonder if it was going to wear out at some point. The old Thinkpads had multiple left and right mouse buttons, so if one broke, you could use the other while you ordered a new part, but since there’s only one button here, there is no backup except to plug a mouse in. (Lenovo expects you to mail in the computer to get a new mouse.)
|
||||
|
||||
### Kernel Support
|
||||
|
||||
When I bought the Haswell laptop, the hardware design was brand new, so I ran into a lot of Linux driver problems initially that took months to resolve. In this generation, Skylake crashing bugs were still being fixed [8 months after the architecture was introduced,][6] but now it appears they’ve all been resolved. And even when those were fixed, there were still problems with [power management support,][7] but today these also appear to be improved. The laptop will settle into the lower power C6-C10 states if nothing is going on. (This is verifiable with **powertop**.)
|
||||
|
||||
The power management features are important not only for battery life, but because these very small circuits eventually wear out because of something known as [electromigration][8]. Intel even warns that: “Long term reliability cannot be assured unless all the Low-Power Idle States are enabled.” By running in lower power mode, and therefore using the circuits less, they will last longer.
|
||||
|
||||
Linux’s Haswell support is very reliable now, but it was definitely flakey for a long time. I wrote about some of the issues at the beginning and after the first year, but I can say finally that things are great for Haswell and Skylake.
|
||||
|
||||
### Lenovo BIOS Linux Incompatibility
|
||||
|
||||
Before I could install Linux on the Yoga 900, I had to flash a new BIOS in Windows. In fact, I had to install 2 BIOSes. The latest Yoga 900 BIOS didn’t [include][9] the necessary fix I needed, so after scratching my head for a while I eventually discovered and [installed][10] a separate “Linux-only” BIOS update, which also says that Windows is no longer supported by Lenovo: “Are we not [merciful][11]?”
|
||||
|
||||
As people who followed the Linux news are aware, the Yoga 900 and certain other recent models of Lenovo laptops were impossible to install Linux on, because it couldn’t even [detect the hard drive][12]. Lenovo’s first reply was that the laptops didn’t work on Linux because it uses a [new RAID controller mode][13]. However, RAID is meant for multiple disks, and this laptop only has one hard drive, and there isn’t even room to install another.
|
||||
|
||||
Here’s some more of Lenovo’s [official explanation][14]:
|
||||
|
||||
> “To support our Yoga products and our industry-leading 360-hinge design in the best way possible we have used a storage controller mode that is unfortunately not supported by Linux and as a result, does not allow Linux to be installed.”
|
||||
|
||||
I found it funny that the reason for their different storage controller is because of their hinge! It would be like a car company saying they had to change their rims because of their new radio.
|
||||
|
||||
This turned into a controversy thanks to the efforts of [Baron][15][H][16][K][17] on Reddit who wrote about it, provided information to the media, and contacted his local Attorney General in Illinois. Searching for “[Lenovo Yoga ][18][L][19][inux compatibility][20]” turns up 300,000 results. Lenovo could be criminally liable for selling a “general purpose” PC that didn’t let you install your own operating system. The default OS is meaningless on a machine that is truly mine.
|
||||
|
||||
Hackers got involved, and they eventually discovered via playing with the UEFI settings, that the machine still supported the AHCI controller mode, it was just disabled. In short, Lenovo took away Linux compatibility for no good purpose. Because of all the information people learned, if this case had ever gone to court, Lenovo would have gotten their ass handed to them.
|
||||
|
||||
Fortunately, all the news got their attention, and they eventually updated the BIOS. I type this on a Yoga 900 running Linux, so we should celebrate this victory. Let’s hope they learn a lesson, but I’m not optimistic. They ought to offer you an option to choose the operating system for your machine. They would have found this bug long before any customers did. I’d wait an extra week to get a custom computer. They could also do a better job setting up the partitions and letting people customize lots of things, and grabbing all the latest software, rather than using a generic old image which needs lots of updates.
|
||||
|
||||
Some people like Lenovo said it was Linux’s fault for not supporting this new RAID driver mode. However, AHCI is a very popular standard, and the Linux kernel team rejected Intel’s code for this hardware as “[too ugly to live][21]”! The team also asked Intel for a specification describing the device’s behavior, but wasn’t given this information.
|
||||
|
||||
### Heat Dissipation
|
||||
|
||||
The Yoga 2 could get hot when pushing the CPUs hard. I charred the bottom of the plastic case while compiling LibreOffice on a blanket, which was an eyesore and made me look like a homeless programmer. I tried a metal brush and some turpentine to get the worst of it off, but it didn’t really improve the situation:
|
||||
|
||||

|
||||
|
||||
This new computer has a metal case which shouldn’t get discolored, and Skylake definitely runs cooler than Haswell. It also seems to do better job of pushing heat out sideways through the hinge, instead of down which could easily be obstructed.
|
||||
|
||||
One of the annoying things about the Yoga 2 over time is that the fan blades had collected dust over the years, but it sounded like sand! It was uneven and distracting and made it much louder. I did take the laptop apart and vacuum everything, but the blades are hidden. I’d have to replace the fans. They don’t run on the Yoga 2 for typical tasks of word processing and web browsing, but when they do spin up it’s annoying if I’m not wearing headphones.
|
||||
|
||||
The Yoga 900 fans are higher pitch, but it is just a smooth whir and not distracting. The Yoga 900 fans seem to run all the time, but at a low speed that is quiet. The sound of my refrigerator and air filter are louder unless the fans crank up under load, and even then it is not a big deal.
|
||||
|
||||
### Graphics
|
||||
|
||||
The Yoga 2 had a great screen, but it also had widely reported issues because the yellow looked like orange. However, everything looked so crisp and all the other colors looked fine. The Yoga 900 screen has fixed the yellow issue. It’s not true 4K, being only 3200×1800, but the pixels are smaller than 4K on a 15.6” monitor, so that it looks very sharp.
|
||||
|
||||
When I first got the Yoga 2, Haswell was still a new chipset, so I saw various Intel graphics display glitches which went away within a couple of months. However, I eventually discovered a memory leak that could crash Linux, and this bug was in there for years.
|
||||
|
||||
My computer ran out of RAM a number of times skipping through video in VLC (shift + arrow). The memory didn’t show up as in use by VLC, but my computer ran out of RAM, so clearly it was kernel memory. Eventually I setup a swap file which gave more time, but even then a couple of times it filled up when I wasn’t keeping track. Eventually the bug disappeared, and Linux is very stable right now, but it was there for years.
|
||||
|
||||
Everyone says Intel has the best Linux drivers, but they seem like a skunkworks project inside Microsoft. The driver developers working on Linux at Intel are good, there just aren’t enough of them. They should be perfecting the drivers before they release the hardware! Intel produced [1][22][13][23] [processors][24] as part of Skylake, with subtle feature differences. That sounds like a lot, but they released 256 chips during the [Haswell generation][25], so maybe things are getting more focused. I was told 10 years ago by an Intel employee that they invested 1% into Linux compared to Windows, and today that still seems to be true.
|
||||
|
||||
The only performance issue I ran into with the Yoga 2 was that it couldn’t play 4K video reliably. It would often show screen glitches, or just do around 5 frames per second:
|
||||
|
||||

|
||||
|
||||
The Yoga 2 would even sometimes struggle playing 1920×1080 video, which it was supposed to be able to handle at 60fps. Part of this is probably because I always have other applications like Firefox and LibreOffice running.
|
||||
|
||||
The Skylake processor is spec’ed to do 4K video at 60 fps for H.264, VP9, and other codecs. In fact, the processor has a lot of hardware accelerated [multimedia][26][capabilities][27]. I tried out hardware encoding of H264 with **ffmpeg** and found it was 4 times faster while using just 1 CPU. It’s cool to see this feature. Unfortunately, it is a little annoying to setup because you have to use a number of additional command line parameters:
|
||||
|
||||
“**-threads 1 -vaapi_device /dev/dri/renderD128 -vcodec h264_vaapi -vf format=’nv12|vaapi,hwupload’**”
|
||||
|
||||
I tried to find a way to have **ffmpeg** remember these for me so I wouldn’t have to type it in every time, but couldn’t. I can’t just pass those in automatically either, as other things need to go before and after. I also discovered that it won’t resize video while using the hardware, and will just ignore the request, so only sometimes can it be used. It would be really great if **ffmpeg** could figure this out automatically. There is a lot of unused hardware because users don’t know or can’t be bothered. Unfortunately [it’s kind of a mess][28] for video encoding and decoding as there are multiple APIs for Linux and Windows.
|
||||
|
||||
Skylake does a much better job playing 4K video, but it will still glitch sometimes and briefly drop down to 10 fps. I think part of it is X. I tried playing 4K videos in Wayland, and it was smoother, so I’m hopeful. It is great to see that the OpenGL support has improved. On this hardware, Intel supports version 4.5 which is the latest version from 2014.
|
||||
|
||||
My Yoga 900 (-13ISK2) is actually a revised version of the original offering with an Iris 540 graphics co-processor which is supposed to be [faster][29] than the stock 520 because of 24 more shader units. However, it can only play SuperTuxKart with moderate settings running 1600×900 at 20 fps, so I wouldn’t say it’s anything to brag about yet. Speaking of which, the game has improved tremendously over the years and is beautiful now:
|
||||
|
||||

|
||||
|
||||
There is an Intel team in China working on [enabling][30] support OpenCL using the graphics card. However, I don’t see any mention of people using it in Blender yet, so I wonder the status and whether it is just demoware. Intel’s OpenCL support has been missing for so long, people doing serious work with Blender already use NVidia or AMD cards, and even when Intel finally writes the code, there’s not much testing or interest.
|
||||
|
||||
One thing that was surprising to me is that I did some experiments on another machine, and found that a quad-core processor is faster than the NVidia 960M for ray-tracing with the Cycles engine. Apparently the 640 CUDA cores aren’t enough to beat 4 Intel CPUs on that task. Newer processors have 2000+ cores and those provide faster performance.
|
||||
|
||||
### HiDPI
|
||||
|
||||
The situation has gotten better for Linux on these high-res screens over the last 3 years, but it still has a ways to go. The good news is that Gnome is almost perfect with HiDPI in current versions. Firefox generally looks great if you set the **layout.css.devPixelsPerPx** to 2\. However because this 13.3” screen’s pixels are so small, I also install a No-Squint Plus plugin and have it render everything at 120% to make it a bit easier to read.
|
||||
|
||||
I was happy to help LibreOffice look better on these screens with [some patches][31] that were shipped in April, 2014, and the work has continued since. The biggest issue remaining is that LibreOffice is still doubling toolbar icons. A number of themes have SVG icons, but they aren’t packaged and shipped with the product. SVGs are much slower to load compared to PNGs and need to be cached. [Tomaž Vajngerl has done some more work][32] in this area, but it hasn’t released yet. Even so, LibreOffice looks better than many other Linux apps which don’t have recognizable icons.
|
||||
|
||||
Applications are generally improving with regards to detecting and being usable on high-res screens, but even some of the most popular such as Gimp and Audacity and Inkscape are still hard to use. I installed a large custom theme for Gimp, but all the icons are different so even though they are bigger, it takes time to recognize them.
|
||||
|
||||
The unfortunate thing about Linux’s 1.5% marketshare is that these sorts of issues don’t get much priority. Many codebases are moving to GTK 3, but in Audacity’s case, it seems to be [stalled][33]. I talked in my first review about a long tail of applications that will need improvements but 3 years later, even some of the most popular apps still need work.
|
||||
|
||||
### SSD
|
||||
|
||||
The old hard drive was doing fine because of the various optimizations I did, especially to Firefox. I also kept in mind that the **/tmp** directory had automatically been setup as a RAM drive, and so I would usually save downloads there first. Sometimes I’d find a 500 MB video I want to grab a short 20 MB clip from, or convert to another format, so by doing it in /tmp I saved a lot of writes. It is more work, and possibly unnecessary, but it’s faster to work in RAM.
|
||||
|
||||
I had written to each cell 25 times over the 3 years, which meant the drive could last for 350 years. The vast majority of the writes were for Arch updates. It gets new LibreOffice builds every month, and a new “stable” kernel release every week. It was great to be up to date all the time, but it did cost 100 times more writes compared to running Debian stable. However, given that each component has their own release cycle, it was necessary.
|
||||
|
||||
The new Samsung drive diagnostics don’t tell the number of times it has written to each cell. In fact, I can’t even find out what cell type it is and how many writes it is specified to handle. I believe the “Percentage Used” value will me the age of the drive, but perhaps it relates only to the number of spare cells. I haven’t found any documentation so I can only guess:
|
||||
|
||||
|||
|
||||
|--|--|
|
||||
| **Model Number:** | **SAMSUNG MZVLV256HCHP-000L2** |
|
||||
| **Firmware Updates (0x06):** | **3 Slots** |
|
||||
| **Available Spare:** | **100%** |
|
||||
| **Available Spare Threshold:** | **10%** |
|
||||
| **Percentage Used:** | **0%** |
|
||||
| ****Data Units Written:**** | **198,997 [101 GB]** |
|
||||
| **Data Units Written:** | **305,302 [156 GB]** |
|
||||
| **Host Read Commands:** | **3,480,816** |
|
||||
| **Host Write Commands:** | **10,176,457** |
|
||||
| **Error Information Log Entries:** | **5** |
|
||||
|
||||
### Broken Left-Ctrl Key
|
||||
|
||||
One thing I noticed after just a few hours of use is that the left-control key pops off if pressed in the upper-left corner:
|
||||
|
||||

|
||||
|
||||
_Broken Yoga 900 key: Note the tiny cylinder missing in the left box vs the right
|
||||
_
|
||||
|
||||
The layout of the Yoga 900 keyboard is the same as the Yoga 2 Pro, but the internals are different. The keys of the Yoga 2 Pro cannot be removed and replaced individually, and there is no way to pop off any of the keys without doing permanent damage. The Yoga 900 has the old style Thinkpad keys: which can be detached, and replaced individually.
|
||||
|
||||
However, there is a defect and one of the 4 tiny cylinder notches in the hinge was missing so that it only connects to the key top at 3 points, and if you don’t press the key in the middle, it will slip off.
|
||||
|
||||
I contacted Lenovo about this. Even though the keys are replaceable and serviceable, they will only replace the entire keyboard, and refuse to mail out any parts. They recommend I mail the computer in, or take it to the Geek Squad service center. I knew that mailing it in would take 2 weeks, so I called my local store to ask if they had Yoga keyboard parts in stock. They told me they don’t take the computers apart, they just mail them to Atlanta. There used to be places that could make many repairs to IBM laptops, and stocked the common parts, but that industry is apparently gone.
|
||||
|
||||
I noticed this mistake within a couple of hours of using the computer, so I’m pretty sure it was a manufacturing defect. It is such a tiny piece of plastic that was deformed or broke off during assembly.
|
||||
|
||||
Even though the computer is under warranty and could be fixed for free, I didn’t want to wait for something so minor, so I just went on the Internet and found a website called laptopkey.com and ordered a replacement key and hinge. It was actually tricky because there are 3 types of hinges! It took me several minutes to figure out which one my computer has because y’all look the same to me:
|
||||
|
||||

|
||||
|
||||
So I ordered the part, but I read it would arrive in about a week. It was very frustrating because I use left-Ctrl all the time when doing copy/paste, skipping through video or by word in text editors, etc. so I thought maybe I could swap the hinge from the right-ctrl, which I never use.
|
||||
|
||||
So I tried to remove this key following instructions I found on the Internet: I got my fingernail under the upper left corner, and lifted till it clicked. And then I put my nail under the upper right corner, and did the same thing. But another one of those tiny pieces of plastic broke off, so now I have two broken hinges. It might not be possible to remove the keys without breaking these very tiny clips. These keyboards are serviceable perhaps only in theory.
|
||||
|
||||
So I decided to go old-school and use superglue. I’d rather have the damn key stay on and have no urgent plans to replace them. It was tricky because I needed a small dab of glue about 1mm in diameter: too much in there it could gum up the works.
|
||||
|
||||
My experience building R/C airplanes came in handy and I fixed it and now the left-Ctrl key is holding on. The right one still slips off but I hardly use it. I was happy again! This is a long sidetrack, but it is important to keep in mind maintenance of a machine.
|
||||
|
||||
### Antergos vs. Arch
|
||||
|
||||
After 3 years with Arch Linux, I had no interest in trying anything else. The Intel drivers had regressions, but otherwise Arch has been painless to run on a daily basis, and it got a little better every week. It’s exciting to be up to date with everything. I often had packages newer than what was in Ubuntu on their release date. Ubuntu users can find newer software in custom PPAs, but there isn’t any testing or coordination across them, so that people who use multiple run into problems.
|
||||
|
||||
People also complain about Ubuntu upgrades hosing the machine and forcing a re-install, so even though their installation process is quicker, the ongoing maintenance isn’t. Every time I’ve read about someone borking an Arch installation, they would always admit it was a user error or something like btrfs corruption.
|
||||
|
||||
I wanted to install [Antergos][34], which provides a GUI installer for Arch. However, the setup looked unreadable on my screen, and it didn’t recognize the Clickpad in their minimal install, which is the only one I had space for on my old 1GB USB key. So I decided to just install Arch old-school again. Thankfully, the Yoga still supports legacy BIOS, so I didn’t have to mess with [UEFI][35].
|
||||
|
||||
I was sorry I didn’t try out Antergos, because I think it could be a great distro for less technical people or those who want to quickly get into Arch Linux. The Arch wiki is filled with tips for best running Linux. I’d love to have something which setup weekly TRIM for my SSD, [Profile-Sync-Daemon][36], Android support, hardware-accelerated video playback, etc. There are quite a few things that nearly all users would want, and are just a few lines to detect and enable.
|
||||
|
||||
Manjaro is a very popular Arch-based distribution with a GUI installer, but having run Arch for 3 years, I trust their packagers to work out issues between components. I’ve read a number of comments on Reddit from people who found their Manjaro installation broken after an update.
|
||||
|
||||
My only complaint about my Arch installation now is the ugly unreadable bootloader screen. I just need to copy over the **grub.cfg** from my old machine.
|
||||
|
||||
### Arch Install
|
||||
|
||||
At first I just wanted to just move the hard drive from one laptop to the next so that I wouldn’t even have to install anything, but after taking the computers apart, I noticed the M.2 SSDs are a different shape. I could have done a low-level block copy, but just decided to start from scratch because it would be a good refresher. It had been 3 years. I had installed a lot of random crap over the years, and even when I remembered to un-install it there were all kinds of digital remnants.
|
||||
|
||||
The Arch install went quite smoothly this time because the hardware had been around for so long. I still needed to do **rfkill unblock wifi**, but other than that everything else just worked. Apparently Linux still doesn’t know how to properly read the rfkill information from this model. Fortunately **systemd** has the ability to restore rfkill values on startup.
|
||||
|
||||
### Kernel Buglist
|
||||
|
||||
One of the things that continues to surprise me is that the Linux buglist is a mess. I know there are all of these people and this great rate of change, but what isn’t changing is the worst case scenario for a bug report. I don’t know why bugs sit around for years, but there clearly is no escalation process.
|
||||
|
||||
I wrote an analogy in my last review I think is useful. Imagine if it took an airline 1-2 years to return your lost luggage. Would you use trust that company? In fact, what’s the point of making a new release if you’ve still got thousands of known bugs and hundreds of regressions? If 1% of every Boeing airplane crashed, would they just keep continuing like that for years?
|
||||
|
||||
Maybe the Linux Foundation should hire some engineers to work on all the bugs that everyone else seems to be ignoring. There are a lot of people paid to work on Linux, and there are a lot of old bugs – which is usually what amateurs do. In my opinion the kernel would be better off not releasing anything for months until the bug count was under 50\. Right now it is 4672\. That would be a good reason to increment the major release number.
|
||||
|
||||
There is something contradictory about making a new stable release every week, but they’ve been doing it that way for years, and they have critical fixes every time, so they are clearly doing something valuable. The kernel gets better at a great rate, so far be it for me to criticize, but I do think they should try something different.
|
||||
|
||||
At least, bugs should get resolved within a specific timeframe. If that is exceeded, than it should escalate up to the maintainer and eventually to Linus. If there is a problem area with a lot of old bugs in a place that no one is working on, then Linus can point this out and crack the whip on the relevant parties. They need to think more like Boeing.
|
||||
|
||||
### Lenovo
|
||||
|
||||
Many Linux users hammer Lenovo for their lack of support on their consumer laptops, but they build quality hardware at a good price. As I wrote years ago, it was obvious not one person at Lenovo had bothered to install Linux on the Yoga 2 before they released it, and it is true for the Yoga 900 because it was impossible.
|
||||
|
||||
I think everyone in their company should be dual-booting. It isn’t that hard to setup, and their customers might want that. Lenovo has 60,000 employees. At least, they need to hire a few people on their Yoga team willing to try out this thing called **Linux**. Windows is painful to use compared to Linux in various ways. Windows runs more applications, but I think perhaps half of their users would be happier with a properly configured Linux installation.
|
||||
|
||||
While it is bad how Lenovo is still ignoring Linux, their problems apply to more than the software. On many models, the RAM chips are soldered on. In some devices, there are whitelists and only pre-approved cards can be installed. The Yogas don’t have a discrete graphics card, but even Lenovos that do provide no mechanism to upgrade the card, like you can with a desktop. I think someone needs to put a horse head in the bed of the Lenovo CEO.
|
||||
|
||||
### Conclusion
|
||||
|
||||
This Yoga 900 is an amazing laptop for the price, and it’s a definite step up from the Yoga 2 with the improvements. A similar Apple Macbook Pro is $1500, but it has 40% less pixels.
|
||||
|
||||
Windows is adopting some of the best features of Linux, but they still don’t have native support for a package manager with all of the interesting free software components pre-compiled. Installing **ffmpeg** on Windows is a huge pain because of all the [dependent libraries][37] it uses.
|
||||
|
||||
Microsoft built a Windows store, which is sort of like a repository, but it doesn’t handle inter-package dependencies, and isn’t setup to manage individual libraries. Microsoft also has a new package manager called [NuGet][38], but it seems to be used mostly for .Net software. It did have a package for ffmpeg, but it didn’t have any dependencies for the codecs so even after installing it, it won’t do anything useful yet.
|
||||
|
||||
Last March, [Microsoft demonstrated][39] the ability to run Ubuntu command-line applications, which is quite a revolution. (They should have [started with Debian][40].) There’s even [a discussion][41] in their buglist to add support for more distros which could be quite tempting.
|
||||
|
||||
For me at least, I have no need for Windows apps, and the extra maintenance time. Fixing issues in Windows involves hunting down things in lots of different places. Linux still has a fair number of places to configure a system, but overall it’s much simpler.
|
||||
|
||||
I have friends who install 3<sup>rd</sup> party software on Windows just to keep their drivers up to date, because it grabs code from many more websites than just Microsoft’s. Windows has gotten better over the years, and it has more games and desktop applications, but it is an aging, closed system.
|
||||
|
||||
I find Gnome classic a streamlined experience. I wish it wasn’t written in the clunky [fad Javascript][42], and they re-enabled a community around custom themes and color schemes. It’s also still missing some nice features from Gnome 2 and Windows 10, and could be a bit more stable. Gnome 3.0 in 2011 was a step backwards, but six years later we’re up to Gnome 3.22, and things are mature again.
|
||||
|
||||
Gnome Classic is one of the best GUIs, but there are a [number of good ones][43] and all are getting better. This machine is working quite well now and I’m just going to sit back and keep waiting for the HiDPI and other improvements! I’m looking forward to deep learning inside the grammar checker of LibreOffice.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://keithcu.com/wordpress/?p=3739
|
||||
|
||||
作者:[keithccurtis][a]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://twitter.com/keithccurtis
|
||||
[1]:https://www.amazon.com/Lenovo-13-3-inch-Multitouch-Convertible-Platinum/dp/B01NA6ANNK/
|
||||
[2]:http://keithcu.com/wordpress/?p=3270
|
||||
[3]:http://configure.us.dell.com/dellstore/config.aspx?oc=cax13w10ph5122&model_id=xps-13-9360-laptop&c=us&l=en&s=bsd&cs=04
|
||||
[4]:http://blog.lenovo.com/en/blog/why-you-should-give-in-to-the-new-thinkpad-keyboard
|
||||
[5]:https://www.freedesktop.org/wiki/Software/libinput/
|
||||
[6]:https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=762ce4458974534a2407cc924db05840c89105df
|
||||
[7]:https://mjg59.dreamwidth.org/41713.html
|
||||
[8]:https://en.wikipedia.org/wiki/Electromigration
|
||||
[9]:http://support.lenovo.com/us/en/products/Laptops-and-netbooks/Yoga-Series/yoga-900-13isk2/80UE/downloads/DS112754
|
||||
[10]:http://support.lenovo.com/us/en/products/laptops-and-netbooks/yoga-series/yoga-900-13isk2/downloads/ds119354
|
||||
[11]:https://linux.slashdot.org/comments.pl?sid=9861381&cid=53241071
|
||||
[12]:https://www.reddit.com/r/linux/comments/54gtpc/letter_to_the_federal_trade_commission_regarding/
|
||||
[13]:http://venturebeat.com/2016/09/21/lenovo-confirms-that-linux-wont-work-on-yoga-900-and-900s-laptops/
|
||||
[14]:http://venturebeat.com/2016/09/21/lenovo-confirms-that-linux-wont-work-on-yoga-900-and-900s-laptops/
|
||||
[15]:https://www.reddit.com/user/baronhk/
|
||||
[16]:https://www.reddit.com/user/baronhk/
|
||||
[17]:https://www.reddit.com/user/baronhk/
|
||||
[18]:https://duckduckgo.com/?q=lenovo+yoga+linux+compatibility&t=hs&ia=web
|
||||
[19]:https://duckduckgo.com/?q=lenovo+yoga+linux+compatibility&t=hs&ia=web
|
||||
[20]:https://duckduckgo.com/?q=lenovo+yoga+linux+compatibility&t=hs&ia=web
|
||||
[21]:https://www.spinics.net/lists/linux-ide/msg53370.html
|
||||
[22]:http://ark.intel.com/products/codename/37572/Skylake
|
||||
[23]:http://ark.intel.com/products/codename/37572/Skylake
|
||||
[24]:http://ark.intel.com/products/codename/37572/Skylake
|
||||
[25]:http://ark.intel.com/products/codename/42174/Haswell#@All
|
||||
[26]:http://www.anandtech.com/show/9562/intels-skylake-gpu-analyzing-the-media-capabilities
|
||||
[27]:http://www.anandtech.com/show/9562/intels-skylake-gpu-analyzing-the-media-capabilities
|
||||
[28]:https://trac.ffmpeg.org/wiki/HWAccelIntro
|
||||
[29]:http://www.game-debate.com/gpu/index.php?gid=3295&gid2=3285&compare=iris-graphics-540-mobile-vs-intel-hd-graphics-520-mobile
|
||||
[30]:https://www.freedesktop.org/wiki/Software/Beignet/
|
||||
[31]:http://keithcu.com/wordpress/?p=3444
|
||||
[32]:https://cgit.freedesktop.org/libreoffice/core/log/?qt=grep&q=hidpi
|
||||
[33]:http://wiki.audacityteam.org/wiki/Linux_Issues#Hi-DPI
|
||||
[34]:https://antergos.com/
|
||||
[35]:https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface
|
||||
[36]:https://wiki.archlinux.org/index.php/Profile-sync-daemon
|
||||
[37]:https://ffmpeg.zeranoe.com/builds/
|
||||
[38]:https://www.nuget.org/
|
||||
[39]:https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/
|
||||
[40]:http://keithcu.com/wordpress/?page_id=558
|
||||
[41]:https://github.com/Microsoft/BashOnWindows/issues/992
|
||||
[42]:http://notes.ericjiang.com/posts/751
|
||||
[43]:https://wiki.archlinux.org/index.php/Desktop_environment
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user