Merge remote-tracking branch 'LCTT/master'

This commit is contained in:
Xingyu.Wang 2018-11-27 19:05:42 +08:00
commit d9ec0f755b
4 changed files with 44 additions and 49 deletions

View File

@ -1,38 +1,38 @@
Anbox如何方便地安装 Google Play 商店以及启用 ARMlibhoudini 支持 如何在 Anbox 上安装 Google Play 商店及启用 ARM 支持
====== ======
![](https://4.bp.blogspot.com/-xBysI_ar5UU/W0NxTe42FkI/AAAAAAAAA2c/KTRtA4C2yYYN9aaMwwAwTXe8deXF4LdNgCLcBGAs/s1600/anbox-google-play-store.png) ![](https://4.bp.blogspot.com/-xBysI_ar5UU/W0NxTe42FkI/AAAAAAAAA2c/KTRtA4C2yYYN9aaMwwAwTXe8deXF4LdNgCLcBGAs/s1600/anbox-google-play-store.png)
**[Anbox][1] 或称为 Anroid in a Box 是一个免费的开源工具,它允许在 Linux 上运行 Android 应用程序**。它的工作原理是在 LXC 容器中运行 Android 运行时环境,重新创建 Android 的目录结构作为可挂载的 loop 镜像,同时使用本机 Linux 内核来执行应用。 [Anbox][1] Anroid in a Box是一个自由开源工具它允许你在 Linux 上运行 Android 应用程序。它的工作原理是在 LXC 容器中运行 Android 运行时环境,重新创建 Android 的目录结构作为可挂载的 loop 镜像,同时使用本机 Linux 内核来执行应用。
据其网站所述,它的主要特性是安全性、性能、集成和趋同(不同外形尺寸缩放)。 据其网站所述,它的主要特性是安全性、性能、集成和趋同(不同外形尺寸缩放)。
**使用 Anbox每个 Android 应用或游戏就像系统应用一样都在一个单独的窗口中启动**,它们的行为或多或少类似于常规窗口,显示在启动器中,可以平铺等等。 使用 Anbox每个 Android 应用或游戏就像系统应用一样都在一个单独的窗口中启动,它们的行为或多或少类似于常规窗口,显示在启动器中,可以平铺等等。
默认情况下Anbox 没有 Google Play 商店或 ARM 应用支持。要安装应用,你必须下载每个应用 APK 并使用 adb 手动安装。此外,默认情况下不能使用 Anbox 安装 ARM 应用或游戏 - 尝试安装 ARM 应用会显示以下错误: 默认情况下Anbox 没有 Google Play 商店或 ARM 应用支持。要安装应用,你必须下载每个应用 APK 并使用 `adb` 手动安装。此外,默认情况下不能使用 Anbox 安装 ARM 应用或游戏 —— 尝试安装 ARM 应用会显示以下错误:
``` ```
Failed to install PACKAGE.NAME.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113] Failed to install PACKAGE.NAME.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]
``` ```
你可以在 Anbox 中手动设置 Google Play 商店和 ARM 应用支持(通过 libhoudini但这是一个非常复杂的过程。**为了更容易地在 Anbox 上安装 Google Play 商店和 Google Play 服务,并让它支持 ARM 应用程序和游戏(使用 libhoudini[geeks-r-us.de][2](文章是德语)上的人创建了一个自动执行这些任务的脚本** 你可以在 Anbox 中手动设置 Google Play 商店和 ARM 应用支持(通过 libhoudini但这是一个非常复杂的过程。为了更容易地在 Anbox 上安装 Google Play 商店和 Google Play 服务,并让它支持 ARM 应用程序和游戏(使用 libhoudini[geeks-r-us.de][2](文章是德语)上的人创建了一个自动执行这些任务的脚本。
在使用之前,我想明确指出,即使在集成 libhoudini 来支持 ARM 后,也并非所有 Android 应用和游戏都能在 Anbox 中运行。某些 Android 应用和游戏可能根本不会出现在 Google Play 商店中,而一些应用和游戏可能可以安装但无法使用。此外,某些应用可能无法使用某些功能。 在使用之前,我想明确指出,即使在集成 libhoudini 来支持 ARM 后,也并非所有 Android 应用和游戏都能在 Anbox 中运行。某些 Android 应用和游戏可能根本不会出现在 Google Play 商店中,而一些应用和游戏可能可以安装但无法使用。此外,某些应用可能无法使用某些功能。
### 安装 Google Play 商店并在 Anbox 上启用 ARM 应用/游戏支持Android in a Box ### 安装 Google Play 商店并在 Anbox 上启用 ARM 应用/游戏支持
如果你的 Linux 桌面上尚未安装 Anbox这些说明显然不起作用。如果你还没有请按照[此处][7]的安装说明安装 Anbox。此外请确保在安装 Anbox 之后,使用此脚本之前至少运行一次 `anbox.appmgr`,以避免遇到问题。另外,确保在执行下面的脚本时 Anbox 没有运行(我怀疑这是导致评论中提到的这个[问题][8]的原因)。 如果你的 Linux 桌面上尚未安装 Anbox这些说明显然不起作用。如果你还没有请按照[此处][7]的安装说明安装 Anbox。此外请确保在安装 Anbox 之后,使用此脚本之前至少运行一次 `anbox.appmgr`,以避免遇到问题。另外,确保在执行下面的脚本时 Anbox 没有运行(我怀疑这是导致评论中提到的这个[问题][8]的原因)。
1\. 安装所需的依赖项wget、lzip、unzip 和 squashfs-tools 1 安装所需的依赖项wget、lzip、unzip 和 squashfs-tools
在 Debian、Ubuntu 或 Linux Mint 中,使用此命令安装所需的依赖项: 在 Debian、Ubuntu 或 Linux Mint 中,使用此命令安装所需的依赖项:
``` ```
sudo apt install wget lzip unzip squashfs-tools sudo apt install wget lzip unzip squashfs-tools
``` ```
2\. 下载并运行脚本,在 Anbox 上自动下载并安装 Google Play商店和 Google Play 服务)和 libhoudini用于 ARM 应用/游戏支持)。 2 下载并运行脚本,在 Anbox 上自动下载并安装 Google Play 商店(和 Google Play 服务)和 libhoudini用于 ARM 应用/游戏支持)。
**警告:永远不要在不知道它做什么的情况下运行不是你写的脚本。在运行此脚本之前,请查看其[代码][4]。** **警告:永远不要在不知道它做什么的情况下运行不是你写的脚本。在运行此脚本之前,请查看其[代码][4]。**
@ -42,25 +42,23 @@ sudo apt install wget lzip unzip squashfs-tools
wget https://raw.githubusercontent.com/geeks-r-us/anbox-playstore-installer/master/install-playstore.sh wget https://raw.githubusercontent.com/geeks-r-us/anbox-playstore-installer/master/install-playstore.sh
chmod +x install-playstore.sh chmod +x install-playstore.sh
sudo ./install-playstore.sh sudo ./install-playstore.sh
``` ```
3\. 要让 Google Play 商店在 Anbox 中运行,你需要启用 Google Play 商店和 Google Play 服务的所有权限 3要让 Google Play 商店在 Anbox 中运行,你需要启用 Google Play 商店和 Google Play 服务的所有权限
为此请运行Anbox 为此请运行Anbox
``` ```
anbox.appmgr anbox.appmgr
``` ```
然后进入`设置>应用> Google Play 服务>权限`并启用所有可用权限。对 Google Play 商店也一样! 然后进入“设置 > 应用 > Google Play 服务 > 权限”并启用所有可用权限。对 Google Play 商店也一样!
![](https://4.bp.blogspot.com/-_eNBaOz1RFs/W0NySoRZ5qI/AAAAAAAAA2s/tJseV74r-3Y3M6dnUBmMo9mDfQLqNK7YwCLcBGAs/s1600/anbox-google-play-services-permissions.png) ![](https://4.bp.blogspot.com/-_eNBaOz1RFs/W0NySoRZ5qI/AAAAAAAAA2s/tJseV74r-3Y3M6dnUBmMo9mDfQLqNK7YwCLcBGAs/s1600/anbox-google-play-services-permissions.png)
你现在应该可以使用 Google 帐户登录 Google Play 商店了。 你现在应该可以使用 Google 帐户登录 Google Play 商店了。
如果未启用 Google Play 商店和 Google Play 服务的所有权限,你可能会在尝试登录 Google 帐户时可能会遇到问题,并显示以下错误消息:“_Couldn't sign in. There was a problem communicating with Google servers. Try again later_ “,如你在下面的截图中看到的那样: 如果未启用 Google Play 商店和 Google Play 服务的所有权限,你可能会在尝试登录 Google 帐户时可能会遇到问题并显示以下错误消息“Couldn't sign in. There was a problem communicating with Google servers. Try again later“如你在下面的截图中看到的那样
![](https://4.bp.blogspot.com/-00ffP4iLTT4/W0NyBGECDLI/AAAAAAAAA2k/re7YRgzeU6M6ccVnODlYGak0UsdImrJ_ACLcBGAs/s1600/anbox-google-play-error-login-problem-google-servers.png) ![](https://4.bp.blogspot.com/-00ffP4iLTT4/W0NyBGECDLI/AAAAAAAAA2k/re7YRgzeU6M6ccVnODlYGak0UsdImrJ_ACLcBGAs/s1600/anbox-google-play-error-login-problem-google-servers.png)
@ -68,23 +66,18 @@ anbox.appmgr
**如果你在 Anbox 上登录 Google 帐户时遇到一些连接问题**,请确保 `anbox-bride.sh` 正在运行: **如果你在 Anbox 上登录 Google 帐户时遇到一些连接问题**,请确保 `anbox-bride.sh` 正在运行:
* 启动它: 启动它:
``` ```
sudo /snap/anbox/current/bin/anbox-bridge.sh start sudo /snap/anbox/current/bin/anbox-bridge.sh start
``` ```
重启它:
* 重启它:
``` ```
sudo /snap/anbox/current/bin/anbox-bridge.sh restart sudo /snap/anbox/current/bin/anbox-bridge.sh restart
``` ```
根据[此][9]用户的说法,如果 Anbox 仍然存在连接问题,你可能还需要安装 dnsmasq 包。但是在我的 Ubuntu 18.04 桌面上不需要这样做。 根据[此用户][9]的说法,如果 Anbox 仍然存在连接问题,你可能还需要安装 dnsmasq 包。但是在我的 Ubuntu 18.04 桌面上不需要这样做。
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -94,7 +87,7 @@ via: https://www.linuxuprising.com/2018/07/anbox-how-to-install-google-play-stor
作者:[Logix][a] 作者:[Logix][a]
选题:[lujun9972](https://github.com/lujun9972) 选题:[lujun9972](https://github.com/lujun9972)
译者:[geekpi](https://github.com/geekpi) 译者:[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/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
@ -107,4 +100,4 @@ via: https://www.linuxuprising.com/2018/07/anbox-how-to-install-google-play-stor
[6]:https://github.com/anbox/anbox/issues/118#issuecomment-295270113 [6]:https://github.com/anbox/anbox/issues/118#issuecomment-295270113
[7]:https://github.com/anbox/anbox/blob/master/docs/install.md [7]:https://github.com/anbox/anbox/blob/master/docs/install.md
[8]:https://www.linuxuprising.com/2018/07/anbox-how-to-install-google-play-store.html?showComment=1533506821283#c4415289781078860898 [8]:https://www.linuxuprising.com/2018/07/anbox-how-to-install-google-play-store.html?showComment=1533506821283#c4415289781078860898
[9]:https://github.com/anbox/anbox/issues/118#issuecomment-295270113 [9]:https://github.com/anbox/anbox/issues/118#issuecomment-295270113

View File

@ -1,67 +1,65 @@
2018 重温 Unix 哲学 2018 重温 Unix 哲学
====== ======
在现代微服务环境中,构建小型,集中应用程序的旧策略又再一次流行了起来。 > 在现代微服务环境中,构建小型、单一的应用程序的旧策略又再一次流行了起来。
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/brain_data.png?itok=RH6NA32X) ![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/brain_data.png?itok=RH6NA32X)
1984年Rob Pike 和 Brian W 在 AT&T 贝尔实验室技术期刊上发表了名为 “[Unix 环境编程][1]” 的文章,其中他们使用 BSD 的 **cat -v** 例子来认证 Unix 哲学。简而言之Unix 哲学是:构建小型,单一的应用程序——不管用什么语言——只做一件小而美的事情,用 **stdin** / **stdout** 进行通信,并通过管道进行连接。 1984 Rob Pike 和 Brian W. Kernighan 在 AT&T 贝尔实验室技术期刊上发表了名为 “[Unix 环境编程][1]” 的文章,其中他们使用 BSD 的 `cat -v` 例子来认证 Unix 哲学。简而言之Unix 哲学是:构建小型、单一的应用程序 —— 不管用什么语言 —— 只做一件小而美的事情,用 `stdin` / `stdout` 进行通信,并通过管道进行连接。
听起来是不是有点耳熟? 听起来是不是有点耳熟?
是的,我也这么认为。这就是 James Lewis 和 Martin Fowler 给出的 [微服务的定义][2] 。 是的,我也这么认为。这就是 James Lewis 和 Martin Fowler 给出的 [微服务的定义][2] 。
> 简单来说,微服务架构的风格是将应用程序开发为一套单一,小型服务的方法,每个服务都运行在它的进程中,并用轻量级机制进行通信,通常是 HTTP 资源 API 。 > 简单来说,微服务架构的风格是将单个 应用程序开发为一套小型服务的方法,每个服务都运行在它的进程中,并用轻量级机制进行通信,通常是 HTTP 资源 API 。
虽然一个 *nix 程序或者是一个微服务本身可能非常局限甚至不是很有,但是当这些独立工作的单元组合在一起的时候就显示出了它们真正的好处和强大。 虽然一个 *nix 程序或者是一个微服务本身可能非常局限甚至不是很有,但是当这些独立工作的单元组合在一起的时候就显示出了它们真正的好处和强大。
### *nix程序 vs 微服务 ### *nix程序 vs 微服务
下面的表格对比了 *nix 环境中的程序(例如 **cat** 或 **lsof**)与微服务环境中的程序。 下面的表格对比了 *nix 环境中的程序(例如 `cat``lsof`)与微服务环境中的程序。
| | *nix 程序 | 微服务 | | | *nix 程序 | 微服务 |
| ----------------------------------- | -------------------------- | ---------------------------------- | | ------------- | ------------------------- | ----------------------- |
| 执行单元 | 程序使用 `stdin/stdout` | 使用 HTTP 或 gRPC API | | 执行单元 | 程序使用 `stdin`/`stdout` | 使用 HTTP 或 gRPC API |
| 数据流 | 管道 | | | 数据流 | 管道 | |
| 可配置和参数化 | 命令行参数 | | | 可配置和参数化 | 命令行参数、环境变量和配置文件 | JSON/YAML 文档 |
| 环境变量和配置文件 | JSON/YAML 文档 | | | 发现 | 包管理器、man、make | DNS、环境变量、OpenAPI |
| 发现 | 包管理器, man make | DNS, 环境变量, OpenAPI |
让我们详细的看看每一行。 让我们详细的看看每一行。
#### 执行单元 #### 执行单元
*nix 系统( Linux中的执行单元是一个可执行的文件二进制或者是脚本理想情况下它们从 `stdin` 读取输入并将输出写入 `stdout`。而微服务通过暴露一个或多个通信接口来提供服务,比如 HTTP 和 gRPC APIs。在这两种情况下,你都会发现无状态示例(本质上是纯函数行为)和有状态示例,除了输入之外,还有一些内部(持久)状态决定发生了什么。 *nix 系统( Linux中的执行单元是一个可执行的文件二进制或者是脚本理想情况下它们从 `stdin` 读取输入并将输出写入 `stdout`。而微服务通过暴露一个或多个通信接口来提供服务,比如 HTTP 和 gRPC API。在这两种情况下你都会发现无状态示例本质上是纯函数行为和有状态示例除了输入之外还有一些内部持久状态决定发生了什么。
#### 数据流 #### 数据流
传统的,*nix 程序能够通过管道进行通信。换话说,我们要感谢 [Doug McIlroy][3],你不需要创建临时文件来传递,而可以在每个进程之间处理无穷无尽的数据流。据我所知,除了 [2017 年做的基于 `Apache Kafka` 小实验][4],没有什么能比得上管道化的微服务了。 传统的,*nix 程序能够通过管道进行通信。换话说,我们要感谢 [Doug McIlroy][3],你不需要创建临时文件来传递,而可以在每个进程之间处理无穷无尽的数据流。据我所知,除了我在 [2017 年做的基于 Apache Kafka 小实验][4],没有什么能比得上管道化的微服务了。
#### 可配置和参数化 #### 可配置和参数化
你是如何配置程序或者服务的,无论是永久性的服务还是即时的服务?是的,在 *nix 系统上,你通常有三种方法:命令行参数,环境变量,或全面化的配置文件。在微服务架构中,典型的做法是用 YAML ( 或者甚至是worseJSON ) 文档,定制好一个服务的布局和配置以及依赖的组件和通信,存储,和运行时配置。例如 [ Kubernetes 资源定义][5][Nomad 工作规范][6],或 [Docker 组件][7] 文档。这些可能参数化也可能不参数化;也就是说,除非你知道一些模板语言,像 Kubernetes 中的 [Helm][8],否则你会发现你使用了很多 **sed -i** 这样的命令。 你是如何配置程序或者服务的,无论是永久性的服务还是即时的服务?是的,在 *nix 系统上,你通常有三种方法:命令行参数、环境变量,或全面的配置文件。在微服务架构中,典型的做法是用 YAML或者甚至是 JSON文档定制好一个服务的布局和配置以及依赖的组件和通信、存储和运行时配置。例如 [Kubernetes 资源定义][5]、[Nomad 工作规范][6] 或 [Docker 编排][7] 文档。这些可能参数化也可能不参数化;也就是说,除非你知道一些模板语言,像 Kubernetes 中的 [Helm][8],否则你会发现你使用了很多 `sed -i` 这样的命令。
#### 发现 #### 发现
你怎么知道有哪些程序和服务可用,以及如何使用它们?在 *nix 系统中通常都有一个包管理器和一个很好用的 man 页面;使用们,应该能够回答你所有的问题。在微服务的设置中,在寻找一个服务的时候会相对更自动化一些。除了像 [Airbnb 的 SmartStack][9] 或 [Netflix 的 Eureka][10] 等可以定制以外,通常还有基于环境变量或基于 DNS 的[方法][11],允许您动态的发现服务。同样重要的是,事实上 [OpenAPI][12] 为 HTTP API 提供了一套标准文档和设计模式,[gRPC][13] 为一些耦合性强的高性能项目也做了同样的事情。最后非常重要的一点是,考虑到开发人员的经验DX应该从写一份好的 [Makefiles][14] 开始,并以编写符合 [**风格**][15] 的文档结束。 你怎么知道有哪些程序和服务可用,以及如何使用它们?在 *nix 系统中通常都有一个包管理器和一个很好用的 man 页面;使用们,应该能够回答你所有的问题。在微服务的设置中,在寻找一个服务的时候会相对更自动化一些。除了像 [Airbnb 的 SmartStack][9] 或 [Netflix 的 Eureka][10] 等可以定制以外,通常还有基于环境变量或基于 DNS 的[方法][11],允许您动态的发现服务。同样重要的是,事实上 [OpenAPI][12] 为 HTTP API 提供了一套标准文档和设计模式,[gRPC][13] 为一些耦合性强的高性能项目也做了同样的事情。最后非常重要的一点是,考虑到开发经验DX应该从写一份好的 [Makefile][14] 开始,并以编写符合 [风格][15] 的文档结束。
### 优点和缺点 ### 优点和缺点
*nix 系统和微服务都提供了许多挑战和机遇 *nix 系统和微服务都提供了许多挑战和机遇
#### 模块性 #### 模块性
设计一个简洁,有清晰的目的并且能够很好的和其它模块配合是很困难的。甚至是在不同版本中实现并引入相应的异常处理流程都很困难的。在微服务中,这意味着重试逻辑和超时机制,或者将这些功能外包到服务网格( service mesh 是不是一个更好的选择呢?这确实比较难,可如果你做好了,那它的可重用性是巨大的。 要设计一个简洁、有清晰的目的,并且能够很好地和其它模块配合的某个东西是很困难的。甚至是在不同版本中实现并引入相应的异常处理流程都很困难的。在微服务中,这意味着重试逻辑和超时机制,或者将这些功能外包到<ruby>服务网格<rt>service mesh</rt></ruby>是不是一个更好的选择呢?这确实比较难,可如果你做好了,那它的可重用性是巨大的。
#### Observability #### 可观测性
#### 预测 在一个<ruby>独石<rt>monolith</rt></ruby>2018 年或是一个试图做任何事情的大型程序1984 年),当情况恶化的时候,应当能够直接的找到问题的根源。但是在一个
在一个巨型2018年或是一个试图做任何事情的大型程序1984当事情开始变坏的时候应当能够直接的找到问题的根源。但是在一个
``` ```
yes | tr \\n x | head -c 450m | grep n yes | tr \\n x | head -c 450m | grep n
``` ```
或者在一个微服务设置中请求一个路径例如涉及20个服务你怎么弄清楚是哪个服务的问题幸运的是我们有很多标准特别是 [OpenCensus][16] 和 [OpenTracing][17]。如果您希望转向微服务,可预测性仍然可能是最大的问题。 或者在一个微服务设置中请求一个路径,例如,涉及 20 个服务,你怎么弄清楚是哪个服务的问题?幸运的是,我们有很多标准,特别是 [OpenCensus][16] 和 [OpenTracing][17]。如果您希望转向微服务,可预测性仍然可能是最大的问题。
#### 全局状态 #### 全局状态
@ -77,8 +75,8 @@ via: https://opensource.com/article/18/11/revisiting-unix-philosophy-2018
作者:[Michael Hausenblas][a] 作者:[Michael Hausenblas][a]
选题:[lujun9972][b] 选题:[lujun9972][b]
译者:[Jamkr](https://github.com/Jamkr) 译者:[Jamskr](https://github.com/Jamskr)
校对:[校对者ID](https://github.com/校对者ID) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -1,3 +1,5 @@
translating by valonia
How Creative Commons benefits artists and big business How Creative Commons benefits artists and big business
====== ======
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/CreativeCommons_ideas_520x292_1112JS.png?itok=otei0vKb) ![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/CreativeCommons_ideas_520x292_1112JS.png?itok=otei0vKb)

View File

@ -1,3 +1,5 @@
Translating by LazyWolfLin
7 command-line tools for writers | Opensource.com 7 command-line tools for writers | Opensource.com
====== ======
Put away your word processor and start writing from the command line using these open source tools. Put away your word processor and start writing from the command line using these open source tools.