2019年7月

了解如何在 Linux 中使用 xclip。

在使用 Linux 桌面工作时,你通常如何复制全部或部分文本?你可能会在文本编辑器中打开文件,选择全部或仅选择要复制的文本,然后将其粘贴到其他位置。

这样没问题。但是你可以使用 xclip 在命令行中更有效地完成工作。xclip 提供了在终端窗口中运行的命令与 Linux 图形桌面环境中的剪贴板之间的管道。

安装 xclip

xclip 并不是许多 Linux 发行版的标准套件。要查看它是否已安装在你的计算机上,请打开终端窗口并输入 which xclip。如果该命令返回像 /usr/bin/xclip 这样的输出,那么你可以开始使用了。否则,你需要安装 xclip

为此,请使用你的发行版的包管理器。如果你喜欢冒险,你可以从 GitHub 获取源代码并自己编译。

基础使用

假设你要将文件的内容复制到剪贴板。在 xclip 中可以使用两种方法。输入:

xclip file_name

或者

xclip -sel clip file_name

两个命令之间有什么区别(除了第二个命令更长)?第一个命令在你使用鼠标中键粘贴的情况下有效。但是,不是每个人都这样做。许多人习惯使用右键单击菜单或按 Ctrl+V 粘贴文本。如果你时其中之一(我就是!),使用 -sel clip 选项可确保你可以粘贴要粘贴的内容。

将 xclip 与其他应用一起使用

将文件内容直接复制到剪贴板是个巧妙的技巧。很可能你不会经常这样做。还有其他方法可以使用 xclip,其中包括将其与另一个命令行程序结合。

结合是用管道(|)完成的。管道将一个命令行程序的输出重定向到另一个命令行程序。这样我们就会有更多的可能性,我们来看看其中的三个。

假设你是系统管理员,你需要将日志文件的最后 30 行复制到 bug 报告中。在文本编辑器中打开文件,向下滚动到最后,复制和粘贴有一点工作量。为什么不使用 xcliptail) 来快速轻松地完成?运行此命令以复制最后 30 行:

tail -n 30 logfile.log | xclip -sel clip

我的写作有相当一部分用于内容管理系统 (CMS) 或者在其他网络中发布。但是,我从不使用 CMS 的 WYSIWYG 编辑器来编写 - 我采用 Markdown 格式离线编写纯文本。也就是说,许多编辑器都有 HTML 模式。通过使用此命令,我可以使用 Pandoc 将 Markdown 格式的文件转换为 HTML 并将其一次性复制到剪贴板:

pandoc -t html file.md | xclip -sel clip

在其他地方,粘贴完成。

我的两个网站使用 GitLab Pages 托管。我使用名为 Certbot 的工具为这些站点生成 HTTPS 证书,每当我更新它时,我需要将每个站点的证书复制到 GitLab。结合 cat) 命令和 xclip 比使用编辑器更快,更有效。例如:

cat /etc/letsencrypt/live/website/fullchain.pem | xclip -sel clip

这就是全部可以用 xclip 做的事么?当然不是。我相信你可以找到更多用途来满足你的需求。

最后总结

不是每个人都会使用 xclip。没关系。然而,它是一个在你需要它时非常方便的一个小工具。而且,正如我几次发现的那样,你不知道什么时候需要它。等到时候,你会很高兴能用上 xclip


via: https://opensource.com/article/19/7/xclip

作者:Scott Nesbitt 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Mac 用户可使用 MicroK8s 运行 Kubernetes 环境,进而开发、测试应用。通过下面的步骤可轻松搭建此环境。

MicroK8s 是一个 Ubuntu 推出的一个本地的 Kubernetes 版本。它是一个轻量级的 snap 应用,可安装到 PC 上作为一个单节点集群使用。尽管 MicroK8s 仅针对 Linux 构建,但是也可以在 Mac 上启动 Ubuntu VM 来实现。

MicroK8s 可在 Ubuntu 和任意支持 snap 的 OS 上运行全部原生的 K8s 服务。这对于开发应用,创建简单的 K8s 集群和本地微服务开发非常有帮助,所有的开发工作最终都还是需要部署的。

MicroK8s 提供另一个级别的可靠性因为它提供了与当前 Kubernetes(以下简称 Kubernetes 为 K8s)版本一致的开发环境。 在最新的上游 K8s 发布后的一周内,在 Ubuntu 上即可使用。

在 Mac 上配置 Kubernetes

K8s 和 MicroK8s 都需要一个 Linux 内核来工作,因此二者都需要 Ubuntu 环境。Mac 用户可使用 Multipass,此工具被设计为方便用户在 Mac、Windows、Linux 上开启 Ubuntu VM(虚拟)环境。

下面的教程将介绍在 Mac 上配置 Multipass 和运行 K8s。

步骤1:使用 Multipass 为 Mac 安装一个 VM

最新的 Multipass 的程序包可在 GitHub 上找到,双击 .pkg 即可安装。用 MicroK8s 来启动一个 VM:

multipass launch --name microk8s-vm --mem 4G --disk 40G  
multipass exec microk8s-vm -- sudo snap install microk8s --classic       
multipass exec microk8s-vm -- sudo iptables -P FORWARD ACCEPT       

确保为主机保留足够的资源。上述命令表示我们创建了一个名字为 microk8s-vm 的 VM,分配了 4GB 内存和 40GB 硬盘。

使用以下命令来查看 VM 分配的 IP 地址:(记一下下面的 IP,我们将从此开始)

multipass list  
Name         State     IPv4            Release     
microk8s-vm  RUNNING   192.168.64.1   Ubuntu 18.04 LTS                                                              

步骤2:在 VM 上与 MicroK8s 互动

可使用以下 3 种方式:

命令行,用 Multipass 的 shell 提示符:

multipass shell microk8s-vm                                                                                     

multipass exec 来执行一个命令(输入后无提示):

multipass exec microk8s-vm -- /snap/bin/microk8s.status                             

调用运行在 VM 的 K8s API 服务器,这里使用 MicroK8s 的 kubeconfig 文件和一个本地的安装的 kubectl 来访问 VM 内的 K8s,运行以下命令:

multipass exec microk8s-vm -- /snap/bin/microk8s.config > kubeconfig     

下一步,在本地主机安装 kubectl,然后使用 kubeconfig:

kubectl --kubeconfig=kubeconfig get all --all-namespaces            
NAMESPACE  NAME  TYPE  CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE          
Default service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 3m12s

步骤 3:用 Mutlpass 服务访问 VM 并开启 MicroK8s 组件

配置基础的 MicroK8s 组件是开启 Grafana 仪表,下面我们将展示一步开启 Grafana,监视和分析一个 MicroK8s 实例。可执行以下命令:

multipass exec microk8s-vm -- /snap/bin/microk8s.enable dns dashboard  
Enabling DNS  
Applying manifest  
service/kube-dns created  
serviceaccount/kube-dns created  
configmap/kube-dns created  
deployment.extensions/kube-dns created  
Restarting kubelet  
DNS is enabled  
Enabling dashboard  
secret/kubernetes-dashboard-certs created  
serviceaccount/kubernetes-dashboard created  
deployment.apps/kubernetes-dashboard created  
service/kubernetes-dashboard created  
service/monitoring-grafana created  
service/monitoring-influxdb created  
service/heapster created  
deployment.extensions/monitoring-influxdb-grafana-v4 created  
serviceaccount/heapster created  
configmap/heapster-config created  
configmap/eventer-config created  
deployment.extesions/heapster-v1.5.2 created  
dashboard enabled

接下来,用下面命令检查部署进程:

multipass exec microk8s-vm -- /snap/bin/microk8s.kubectl get all --all-namespaces                                                                                                                        

返回信息如下:

一旦所有的必要服务已开启,接下来使用以下的链接访问仪表。命令如下:

multipass exec microk8s-vm -- /snap/bin/microk8s.kubectl cluster-info    
Kubernetes master is running at https://127.0.0.1:16443  
Heapster is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/heapster/proxy  
KubeDNS is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy  
Grafana is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy  
InfluxDB is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/monitoring-influxdb:http/proxy  
  
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

如果我们在 VM 内,可以用此链接来访问 Grafana 仪表。不过,我们可以通过代理在主机上访问。

multipass exec microk8s-vm -- /snap/bin/microk8s.kubectl proxy --address='0.0.0.0' --accept-hosts='.*'   
Starting to serve on [::][::]:8001

保持终端运行状态,记一下端口号(8001),我们在下一步需要用到。要访问 Grafana 仪表,我们需要修改 VM 内仪表的链接:

  • 使用 VM 的 IP 替换 127.0.0.1(multipass info microk8s-vm
  • 将端口(16443)替换为代理端口 8001。
  • 在浏览器内输入这个链接地址:https://127.0.0.1:8001/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy,你将看到 Grafana 仪表,如下图:

总结

使用 MicroK8s 在本地开发和测试应用,将使得团队在部署上更快,这对于开发者和 DevOp 团队来说是非常有价值和意义的。

使用 pyenv 和 virtualwrapper 来管理你的虚拟环境,可以避免很多困惑。

作为 Python 开发者和 MacOS 用户,拿到新机器首先要做的就是设置 Python 开发环境。下面是最佳实践(虽然我们已经写过 在 MacOS 上管理 Python 的其它方法)。

预备

首先,打开终端,在其冰冷毫无提示的窗口输入 xcode-select --install 命令。点击确认后,基本的开发环境就会被配置上。MacOS 上需要此步骤来设置本地开发实用工具库,根据 OS X Daily 的说法,其包括 ”许多常用的工具、实用程序和编译器,如 make、GCC、clang、perl、svn、git、size、strip、strings、libtool、cpp、what 及许多在 Linux 中系统默认安装的有用命令“。

接下来,安装 Homebrew, 执行如下的 Ruby 脚本。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果你像我一样,对随意就运行的来源于互联网的脚本心存疑虑的话,可以点击上面的脚本去仔细看看其具体功能。

一旦安装完成后,就恭喜了,你拥有了一个优秀的包管理工具。自然的,你可能接下来会执行 brew install python 或其他的命令。不要这样,哈哈!Homebrew 是为我们提供了一个 Python 的管理版本,但让此工具来管理我们的 Python 环境话,很快会失控的。我们需要 pyenv,一款简单的 Python 版本管理工具,它可以安装运行在 许多操作系统 上。运行如下命令:

$ brew install pyenv

想要每次打开命令提示框时 pyenv 都会运行的话,需要把下面的内容加入你的配置文件中(MacOS 中默认为 .bash_profile,位于家目录下):

$ cd ~/
$ echo 'eval "$(pyenv init -)"' >> .bash_profile

添加此行内容后,每个终端都会启动 pyenv 来管理其 PATH 环境变量,并插入你想要运行的 Python 版本(而不是在环境变量里面设置的初始版本。更详细的信息,请阅读 “如何给 Linux 系统设置 PATH 变量”)。打开新的终端以使修改的 .bash_profile 文件生效。

在安装你中意的 Python 版本前,需要先安装一些有用的工具,如下示:

$ brew install zlib sqlite

pyenv 依赖于 zlib 压缩算法和 SQLite 数据库,如果未正确配置,往往会导致构建问题。将这些导出配置命令加入当前的终端窗口执行,确保它们安装完成。

$ export LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/sqlite/lib"
$ export CPPFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/sqlite/include"

现在准备工作已经完成,是时候安装一个适合于现代人的 Python 版本了:

$ pyenv install 3.7.3

去喝杯咖啡吧,挑些豆类,亲自烧烤,然后品尝。说这些的意思是上面的安装过程需要一段时间。

添加虚拟环境

一旦完成,就可以愉快地使用虚拟环境了。如没有接下来的步骤的话,你只能在你所有的工作项目中共享同一个 Python 开发环境。使用虚拟环境来隔离每个项目的依赖关系的管理方式,比起 Python 自身提供的开箱即用功能来说,更加清晰明确和更具有重用性。基于这些原因,把 virtualenvwrapper 安装到 Python 环境中吧:

$ pyenv global 3.7.3
# Be sure to keep the $() syntax in this command so it can evaluate
$ $(pyenv which python3) -m pip install virtualenvwrapper

再次打开 .bash_profile 文件,把下面内容添加进去,使得每次打开新终端时它都有效:

# We want to regularly go to our virtual environment directory
$ echo 'export WORKON_HOME=~/.virtualenvs' >> .bash_profile
# If in a given virtual environment, make a virtual environment directory
# If one does not already exist
$ echo 'mkdir -p $WORKON_HOME' >> .bash_profile
# Activate the new virtual environment by calling this script
# Note that $USER will substitute for your current user
$ echo '. ~/.pyenv/versions/3.7.3/bin/virtualenvwrapper.sh' >> .bash_profile

关掉终端再重新打开(或者运行 exec /bin/bash -l 来刷新当前的终端会话),你会看到 virtualenvwrapper 正在初始化环境配置:

$ exec /bin/bash -l
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/premkproject
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postmkproject
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/initialize
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/premkvirtualenv
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postmkvirtualenv
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/prermvirtualenv
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postrmvirtualenv
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/predeactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postdeactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/preactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/get_env_details

从此刻开始,你的所有工作都是在虚拟环境中的,其允许你使用临时环境来安全地开发。使用此工具链,你可以根据工作所需,设置多个项目并在它们之间切换:

$ mkvirtualenv test1
Using base prefix '/Users/moshe/.pyenv/versions/3.7.3'
New python executable in /Users/moshe/.virtualenvs/test1/bin/python3
Also creating executable in /Users/moshe/.virtualenvs/test1/bin/python
Installing setuptools, pip, wheel...
done.
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/get_env_details
(test1)$ mkvirtualenv test2
Using base prefix '/Users/moshe/.pyenv/versions/3.7.3'
New python executable in /Users/moshe/.virtualenvs/test2/bin/python3
Also creating executable in /Users/moshe/.virtualenvs/test2/bin/python
Installing setuptools, pip, wheel...
done.
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/get_env_details
(test2)$ ls $WORKON_HOME
get_env_details postmkvirtualenv premkvirtualenv
initialize postrmvirtualenv prermvirtualenv
postactivate preactivate test1
postdeactivate predeactivate test2
postmkproject premkproject
(test2)$ workon test1
(test1)$

此处,使用 deactivate 命令可以退出当前环境。

推荐实践

你可能已经在比如 ~/src 这样的目录中添加了长期的项目。当要开始了一个新项目时,进入此目录,为此项目增加子文件夹,然后使用强大的 Bash 解释程序自动根据你的目录名来命令虚拟环境。例如,名称为 “pyfun” 的项目:

$ mkdir -p ~/src/pyfun && cd ~/src/pyfun
$ mkvirtualenv $(basename $(pwd))
# we will see the environment initialize
(pyfun)$ workon
pyfun
test1
test2
(pyfun)$ deactivate
$

当需要处理此项目时,只要进入该目录,输入如下命令重新连接虚拟环境:

$ cd ~/src/pyfun
(pyfun)$ workon .

初始化虚拟环境意味着对 Python 版本和所加载的模块的时间点的拷贝。由于依赖关系会发生很大的改变,所以偶尔需要刷新项目的虚拟环境。这种情况,你可以通过删除虚拟环境来安全的执行此操作,源代码是不受影响的,如下所示:

$ cd ~/src/pyfun
$ rmvirtualenv $(basename $(pwd))
$ mkvirtualenv $(basename $(pwd))

这种使用 pyenvvirtualwrapper 管理虚拟环境的方法可以避免开发环境和运行环境中 Python 版本的不一致出现的苦恼。这是避免混淆的最简单方法 - 尤其是你工作的团队很大的时候。

如果你是初学者,正准备配置 Python 环境,可以阅读下 MacOS 中使用 Python 3 文章。 你们有关于 Python 相关的问题吗,不管是初学者的还是中级使用者的?给我们留下评论信息,我们在下篇文章中会考虑讲解。


via: https://opensource.com/article/19/6/virtual-environments-python-macos

作者:Matthew Broberg 选题:lujun9972 译者:runningwater 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Debian 项目发布了它的最新稳定版 Debian 10,其代号是 “Buster”,这个发布版将获得 5 年的支持。Debian 10 可用于 32 位和 64 位系统。这个发布版带来很多新的特色,列出下面一些特色:

  • 引入新的 Debian 10 的主题 “FuturePrototype”
  • 新版本的电脑桌面环境 GNOME 3.30、Cinnamon 3.8、KDE Plasma 5.14、MATE 1.20、Xfce 4.12
  • 长期支持版内核 4.19.0-4
  • 新的 Python 3 (3.7.2)、Perl 5.28、PHP 7.3
  • iptables 替换为 nftables
  • 更新 LibreOffice 6.1、GIMP 2.10.8
  • 更新 OpenJDK 11、MariaDB 10.3 和 Apache 2.4.38
  • 更新 Chromium 73.0、Firefox 60.7
  • 改进 UEFI 支持

在这篇文章中,我们将演示如何在你的笔记本电脑和台式电脑上安装 Debian 10 “Buster” 工作站。

Debian 10 建议系统要求:

  • 2 GB 内存
  • 2 GHz 双核处理器
  • 10 GB 可用硬盘空间
  • 可启动安装介质(USB / DVD)
  • 网络连接(可选)

让我们跳转到 Debian 10 的安装步骤。

步骤:1)下载 Debian 10 ISO 文件

从它的官方入口网站,下载 Debian 10 ISO 文件,

ISO 文件下载完成后刻录它到 USB 或 DVD,使其可用来启动。

步骤:2)使用安装可启动介质(USB / DVD)启动你的电脑系统

重启你将安装 Debian 10 的电脑,转到 BIOS 设置,并设置启动介质为 USB 或 DVD。 用可启动介质启动电脑后,那么我们将看到下面的屏幕。

选择第一个选项 “Graphical Install”。

步骤:3)选择你的首选语言、位置和键盘布局

在这个步骤中,你将被要求选择你的首选语言。

点击 “Continue”。

选择你的首选位置,电脑系统将依照位置自动设置时区。

现在选择适合于你安装设备的键盘布局。

点击 “Continue” 以继续。

步骤:4)为 Debian 10 系统设置主机名称和域名

设置适合于你的环境的主机名,然后在 “Continue” 上单击,就我而言, 我指定主机名为 “debian10-buster”。

指定适合于环境的域名,并安装,然后在 “Continue” 上单击。

步骤:5)指定 root 用户的密码

在下面的屏幕中指定 root 密码,然后在 “Continue” 上单击。

步骤:6)创建本地用户和它的密码

在这个步骤中,你将被提示指定本地用户具体信息,如完整的姓名、用户名和密码,

在 “Continue” 上单击。

在 “Continue” 上单击,并在接下来的窗口中指定密码。

步骤:7)为 Debian 10 选择硬盘分区方案

在这个步骤中,为 Debian 10 选择硬盘分区方案,就我而言,我有 40 GB 硬盘可用于操作系统安装。分区方案有两种类型:

  • 向导分区(安装器将自动创建需要的分区)
  • 手动分区(正如名字所示,使用这种方式,我们可以手动创建分区方案)

在这篇教程中,我们将在我 42 GB 硬盘上使用带有 LVM 的向导分区。

在 “Continue” 上单击来继续,

正如我们所视,我大约有 42 GB 硬盘空间,选择 “Continue”。

在接下来的屏幕中,你将被要求选择分区,如果是 Linux 新用户,那么选择第一个选项。假使你想要一个独立的 home 分区,那么选择第二种方案,否则选择第三种方案,它们将为 /home/var/tmp 创建独立的分区。

就我而言,我将通过选择第三种选项来为 /home/var/tmp 创建独立的分区。

在接下来的屏幕中,选择 “yes” 来将更改写到磁盘中,配置 LVM ,然后在 “Continue” 上单击。

在接下来的屏幕中,将显示分区表,验证分区大小、文件系统类型和挂载点。

在 “Continue” 上单击来继续,

在接下来的屏幕中,选择 “yes” 来写更改到磁盘中,

在 “Continue” 上单击来继续安装,

步骤:7)Debian 10 安装开始

在这一步骤中,Debian 10 的安装已经开始,并正在进行中,

在安装期间,安装器将提示你扫描 CD/DVD 以配置软件包管理器,选择 “No” ,然后在 “Continue” 上单击。

在接下来的屏幕中,如果你想配置基于网络的软件包管理器选择 “yes” ,但是为了使这个方式工作,要确保你的系统连接到了网络,否则选择 “No”。

在 “Continue” 上单击来配置基于你本地的软件包管理器,在接下来的几个屏幕中,你将被提示选择本地和 Debian 软件包存储库 URL ,然后你将获得下面的屏幕。

选择 “No” 来跳过软件包审查步骤,然后在 “Continue” 上单击。

在接下来的窗口中,你将被提示选择电脑桌面环境和其它软件包,就我而言,我选择 “Gnome Desktop” ,“SSH Server” 和 “Standard System utilities”。

在 “Continue” 上单击来继续安装,

选择选项 “yes” 来安装 Grub 引导加载程序。

在 “Continue” 上单击来继续,然后在接下来的窗口中选择将安装引导加载程序的磁盘(/dev/sda)。

在 “Continue” 上单击来继续安装,一旦安装完成,安装器将提示我们来重启系统,

在 “Continue” 上单击来重启你的系统,不要忘记在 BIOS 设置中更改启动介质,以便系统从我们已经安装 Debian 10 操作系统的硬盘启动。

步骤:8)启动你新安装的 Debian 10 系统

在成功安装后,一旦我们重启系统,我们将获取下面的引导加载程序屏幕。

选择第一个选项 “Debian GNU/Linux” 并敲击回车键。

一旦系统启动,使用我在安装期间创建的本地用户和它的密码。

在成功登录后,将看到如下电脑桌面屏幕,

这证实 Debian 10 已经成功安装,这就是本文的全部,探索这个令人激动的 Linux 发行版吧,玩得开心 ?


via: https://www.linuxtechi.com/debian-10-buster-installation-guide/

作者:Pradeep Kumar 选题:lujun9972 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Steam 寻求公众反馈以便为 AMD GPU 测试 ACO(一个新的 Mesa 着色器编译器)已经有几天了。

目前,AMD 驱动程序使用 LLVM 作为着色器编译器。而 Mesa) 则是一个开源的 LLVM 的替代品。因此,在这种情况下,Valve 希望支持 AMD 显卡以提高 Linux 游戏在各种 Linux 发行版上的性能。

为了提高游戏性能,编译时间至关重要,使用新的 ACO 编译器,它将时间缩短了近 50%。 Valve 在其 Steam 社区的帖子中解释了更多关于它的信息:

AMD OpenGL 和 Vulkan 驱动程序目前使用的着色器编译器是上游 LLVM 项目的一部分。该项目规模庞大,并且有许多不同的目标,游戏着色器的在线编译只是其中之一。这可能会导致不同的开发权衡,其中改进游戏特定功能比其他情况更难,特定于游戏的功能也经常被 LLVM 的开发人员因其他事情破坏。特别是,着色器编译速度就是这样一个例子:它在大多数其他场景中并不是一个关键因素,只能锦上添花。但是对于游戏来说,编译时间是至关重要的,而缓慢的着色器编译可能导致几乎无法播放的顿挫。

Linux 游戏真的有性能提升吗?

是的,没错。

这里的主要亮点是编译时间。如果着色器编译时间急剧减少,理论上应该会改善游戏的性能。

而且,根据最初的基准报告,我们确实看到了一些重大改进。

当然,游戏中的 FPS 改进并不是很大。但是,它在早期阶段仍然是一个很好的进步。

如果你对编译时间的改进感到好奇,下面是结果:

是的,即使大幅的编译时间减少也不会大幅影响游戏中的 FPS。但是,它仍然是一件大事,因为目前,这是一项正在进行中的工作。所以,我们可以有更多期待。

但是,还能做些什么呢?

好吧,ACO 还没完成。下面是为什么(在 Valve 中提到):

现在,ACO 只处理像素和计算着色器阶段。当其余的阶段实现时,我们预计编译时间将进一步减少。

总结

尽管我没有配备 AMD GPU,但我很有兴趣看到对 Linux 游戏场景的改进。

此外,随着事情进展,我们将期待更多的基准和报告。

你怎么看待?请在下面的评论中告诉我们你的想法。如果你有基本报告要分享,请告诉我们。


via: https://itsfoss.com/linux-games-performance-boost-amd-gpu/

作者:Ankush Das 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Public vs Private blockchain

区块链 2.0系列的前一篇文章探索了智能合同的现状。这篇文章旨在揭示可以创建的不同类型的区块链。它们每个都用于非常不同的应用程序,并且根据用例的不同,每个应用程序所遵循的协议也不同。现在,让我们将公有链之于私有链对比一下开源软件之于专有技术。

正如我们所知,基于区块链的分布式分类账本的基本三层结构如下:

图 1 – 区块链分布式账本的基本结构

这里提到的类型之间的差异主要归因于底层区块链其所依赖的协议。该协议规定了参与者的规则和参与的方式。

阅读本文时,请记住以下几点事项:

  • 任何平台的产生都是为了解决需求而生。技术应该采取最好的方向。例如,区块链具有巨大的应用价值,其中一些可能需要丢弃在其他情形中看起来很重要的功能。在这方面,分布式存储就是最好的例子。
  • 区块链本质上是一个数据库系统,通过时间戳和区块的形式组织数据来跟踪信息。此类区块链的创建者可以选择谁有权产出这些区块并进行修改。
  • 区块链也可以“中心化”,参与的程度可以限定于由“中央权威”认定为符合条件的人。

大多数区块链要么是公有的,要么是私有的。广义上说,公有链可以被认为是开源软件的等价物,大多数私有链可以被视为源自公有链的专有平台。下图应该会让大多数人明显地看出基本的区别。

图 2 – 公有链/私有链与开源/专有技术的对比

虽然这是最受欢迎的理解。但是这并不是说所有的私有链都是从公有链中衍生出来的。

公有链

公有链可以被视为是一个无需许可的、开放的平台或网络。任何拥有专业知识和计算资源的人都可以参与其中。这将产生以下影响:

  • 任何人都可以加入公有链网络并参与到其中。“参与者” 所需要的只是稳定的网络资源和计算资源。
  • 参与行为包括了读取、写入、验证和提供交易期间的共识。比特币矿工就是很好的例子。作为网络的参与者,矿工会得到比特币作为回报。
  • 平台完全去中心,完全冗余。
  • 由于去中心化,没有一个实体可以完全控制分类账本中记录的数据。所有 (或大多数) 参与者都需要通过验证区块的方式检查数据。
  • 这意味着,一旦信息被验证和记录,就不能轻易改变。即使能改变,也不可能不留下痕迹。
  • 在比特币和莱特币等平台上,参与者的身份仍然是匿名的。设计这些平台的目的是保护和保护用户身份。这主要是由上层协议栈提供的功能。
  • 公有链有比特币、莱特币、以太坊等不同的网络。
  • 广泛的去中心化意味着,在区块链分布式网络实现的交易,获得共识可能需要一段时间,对于旨在每时每刻都在推动大量交易的大型企业来说,吞吐量可能是一个挑战。
  • 开放式参与,使比特币等公有链中的大量参与者,往往会增加对计算设备和能源成本的初始投资。
  • 公有链以设计安全著称。它们的实现依靠以下几点:

    • 匿名参与者
    • 多个节点上的分布式和冗余的加密存储
    • 创建和更改数据需要大量的共识

私有链

相比之下,私有链是一个被许可的区块链*。这意味着:

  • 参与网络的许可受到限制,并由监督网络的所有者或机构主持。这意味着,即使个人能够存储数据并进行交易(例如,发送和接收付款),这些交易的验证和存储也只能由选定的参与者来完成。
  • 参与者一旦获得中心机构的许可,将受到条款的限制。例如,在金融机构运营的私有链网络中,并不是每个客户都可以访问整个区块链的分布式账本,甚至在那些获得许可的客户中吗,也不是每个人都能访问所有的东西。在这种情况下,中心机构将授予访问选择服务的权限。这通常被称为 “通道”。
  • 与公有链相比,这种系统具有更大的吞吐量能力,也展示了更快的交易速度,因为区块只需要由少数几个人验证。

私有链通常在其协议中没有任何特征。这使得该系统仅与目前使用的大多数基于云的数据库系统一样安全。

智者的观点

需要注意的一点是,它们被命名为公有或私有(或开源、闭源)的事实与底层代码库无关。在这两种情况下,平台所基于的代码或文字基础可能是公开的,也可能不是公开的。R3 是一家 DLT( 分布式分类账本 D istributed L edger T echnology )公司,领导着由 200 多家跨国机构组成的公有财团。他们的目标是在金融和商业领域进一步发展区块链和相关分布式账本技术。corda 是这一共同努力的产物。R3 将 corda 定义为专门为企业构建的区块链平台。其代码库同样是开源的,鼓励世界各地的开发人员为这个项目做出贡献。然而,考虑到 corda 面临的业务性质和旨在满足的需求,corda 被归类为许可的封闭区块链平台。这意味着企业可以在部署后选择网络的参与者,并通过使用原生可用的智能合约工具选择这些参与者可以访问的信息类型。

虽然像比特币和以太坊这样的公有链负责该领域的广泛认知和发展,但仍然可以认为,为企业或商业环境中的特定用例设计的私有链将在短期内引领货币投资。这些都是我们大多数人在不久的将来会看到以实际方式运用起来的平台。

请继续阅读本系列中下一篇有关 Hyperledger 项目的文章。

我们正在研究更多有趣的区块链技术话题。敬请期待!


via: https://www.ostechnix.com/blockchain-2-0-public-vs-private-blockchain-comparison/

作者:ostechnix 选题:lujun9972 译者:zionfuo 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出