分类 技术 下的文章

简介

正如我们 最近解释的,WebAssembly 是一种用于以任何语言编写的二进制格式的软件,旨在最终无需更改就能在任意平台运行。WebAssembly 的第一个应用是在 Web 浏览器中,以使网站更快、更具交互性。WebAssembly 有计划推向 Web 之外,从各种服务器到物联网(IoT),其创造了很多机会,但也存在很多安全问题。这篇文章是对这些问题和 WebAssembly 安全模型的一篇介绍性概述。

WebAssembly 跟 JavaScript 很像

在 Web 浏览器内部,WebAssembly 模块由执行 JavaScript 代码的同一 虚拟机 VM 管理。因此,WebAssembly 和 JavaScript 一样,造成的危害也是相同的,只是效率更高,更不易被察觉。由于 JavaScript 是纯文本,运行前需要浏览器编译,而 WebAssembly 是一种可立即运行的二进制格式,运行速度更快,也更难被扫描出(即使使用杀毒软件)其中的恶意指令。

WebAssembly 的这种 “代码混淆” 效果已经被用来弹出不请自来的广告,或打开假的 “技术支持” 窗口,要求提供敏感数据。另一个把戏则是自动将浏览器重定向到包含真正危险的恶意软件的 “落地” 页。

最后,就像 JavaScript 一样,WebAssembly 可能被用来 “窃取” 处理能力而不是数据。2019 年,对 150 个不同的 WASM 模块的分析 发现,其中约 32% 被用于加密货币挖掘。

WebAssembly 沙盒和接口

WebAssembly 代码在一个由虚拟机(而不是操作系统)管理的 沙盒 中封闭运行。这使它无法看到主机,也无法直接与主机交互。对系统资源(文件、硬件或互联网连接)的访问只能通过该虚拟机提供的 WebAssembly 系统接口 WebAssembly System Interface (WASI) 进行。

WASI 不同于大多数其他应用程序编程接口(API),它具有独特的安全特性,真正推动了 WASM 在传统服务器和 边缘 Edge 计算场景中的采用,这将是下一篇文章的主题。在这里,可以说,当从 Web 迁移到其他环境时,它的安全影响会有很大的不同。现代 Web 浏览器是极其复杂的软件,但它是建立在数十年的经验和数十亿人的日常测试之上的。与浏览器相比,服务器或物联网(IoT)设备几乎是未知领域。这些平台的虚拟机将需要扩展 WASI,因此,肯定会带来新的安全挑战。

WebAssembly 中的内存和代码管理

与普通的编译程序相比,WebAssembly 应用程序对内存的访问非常受限,对它们自己也是如此。WebAssembly 代码不能直接访问尚未调用的函数或变量,不能跳转到任意地址,也不能将内存中的数据作为字节码指令执行。

在浏览器内部,WASM 模块只能获得一个连续字节的全局数组( 线性内存 linear memory )进行操作。WebAssembly 可以直接读写该区域中的任意位置,或者请求增加其大小,但仅此而已。这个 线性内存 linear memory 也与包含其实际代码、执行堆栈、当然还有运行 WebAssembly 的虚拟机的区域分离。对于浏览器来说,所有这些数据结构都是普通的 JavaScript 对象,使用标准过程与所有其他对象隔离。

结果还好,但不完美

所有这些限制使得 WebAssembly 模块很难做出不当行为,但也并非不可能。

沙盒化的内存使 WebAssembly 几乎不可能接触到 外部 的东西,也使操作系统更难防止 内部 发生不好的事情。传统的内存监测机制,比如 堆栈金丝雀 Stack Canaries 能注意到是否有代码试图扰乱它不应该接触的对象,但在这里没用

事实上,WebAssembly 只能访问自己的 线性内存 linear memory ,但可以直接访问,这也可能为攻击者的行为 提供便利。有了这些约束和对模块源代码的访问,就更容易猜测覆盖哪些内存位置可能造成最大的破坏。破坏局部变量似乎也是 可能的,因为它们停留在 线性内存 linear memory 中的无监督堆栈中。

2020 年的一篇关于 WebAssembly 的二进制安全性 的论文指出,WebAssembly 代码仍然可以在设定的常量内存中覆盖字符串文字。同一篇论文描述了在三个不同的平台(浏览器、Node.JS 上的服务端应用程序,和独立 WebAssembly 虚拟机的应用程序)上,WebAssembly 可能比编译为原生二进制文件时更不安全的其他方式。建议进一步阅读此主题。

通常,认为 WebAssembly 只能破坏其自身沙盒中的内容的想法可能会产生误导。WebAssembly 模块为调用它们的 JavaScript 代码做繁重的工作,每次都会交换变量。如果模块在这些变量中的任意一处写入不安全的调用 WebAssembly 的 JavaScript 代码,就 导致崩溃或数据泄露。

未来的方向

WebAssembly 的两个新出现的特性:并发 和内部垃圾收集,肯定会影响其安全性(如何影响以及影响多少,现在下结论还为时过早)。

并发允许多个 WebAssembly 模块在同一个虚拟机中并行。目前,只有通过 JavaScript web workers 才能实现这一点,但更好的机制正在开发中。安全方面,他们可能会带来 以前不需要的大量的代码,也就是更多出错的方法。

为了提高性能和安全性,我们需要一个 本地的垃圾收集器,但最重要的是,要在经过良好测试的浏览器的 Java 虚拟机之外使用 WebAssembly,因为这些虚拟机无论如何都会在自己内部收集所有的垃圾。当然,甚至这个新代码也可能成为漏洞和攻击的另一个入口。

往好处想,使 WebAssembly 比现在更安全的通用策略也是存在的。再次引用 这篇文章,这些策略包括:编译器改进、栈/堆和常量数据的 分离 的线性存储机制,以及避免使用 不安全的语言(如 C)编译 WebAssembly 模块代码。

本文 WebAssembly 安全的现在和未来 首次发表在 Linux 基金会 - 培训


via: https://www.linux.com/news/webassembly-security-now-and-in-the-future/

作者:Dan Brown 选题:lujun9972 译者:hanszhao80 校对:wxy

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

通过这篇新的可下载指南开始探索容器技术的要领。

在电视剧 《 太空堡垒卡拉狄加 Battlestar Galactica 》中,这艘名副其实的巨型飞船其实并没有做什么。它是船员们坚定的庇护所,是战略和协调的中心联络点,也是资源管理的安全场所。而 卡布里安毒蛇号 Caprican Vipers 这种单人的独立太空船,出去对付邪恶的 赛昂人 Cylons 和其他太空中的危险。他们也从不只派一两艘毒蛇号出去。他们派了很多。这许许多多的冗余的飞船具有基本相同的能力和目的,但由于它们非常灵活和数量众多,它们总是能够处理每个星期都在威胁战星的任何问题。

如果你认为你感到这像是一个正在发展中的比喻,那么你是对的。现代的“云”大而无当,是分布在很远距离的大量基础设施的集合体。它具有强大的能力,但如果你将其视为普通计算机,就会浪费了它的大部分能力。当你想要处理来自数百万个输入源的大量数据时,把你的解决方案(无论它是采用应用、网站、数据库、服务器还是其他形式)打包起来,并发送该解决方案的微小镜像来处理数据集群,实际上是更有效的。当然,这些都是 “ 容器 container ”,它们是云的劳动力。它们是你发送来处理服务请求的小型解决方案工厂,并且由于你可以根据任何给定时间传入的请求生成所需要的数量,因此理论上它们是取之不尽的。

在家里使用容器

如果你没有大量的传入请求需要处理,你可能会想知道容器给你带来什么好处。不过,在个人电脑上使用容器确实有其用途。

容器作为虚拟环境

通过 Podman、LXC 和 Docker 等工具,你可以像以往运行虚拟机一样运行容器。不过,与虚拟机不同,容器没有因模拟固件和硬件而产生的开销。

你可以从公共仓库下载容器镜像,启动一个最小化的 Linux 环境,并将其作为命令或开发的测试场所。例如,假设你想试试你在 Slackware Linux 上构建的一个应用。首先,在仓库中搜索一个合适的镜像:

$ podman search slackware

然后选择一个镜像,作为你的容器的基础:

$ podman run -it --name slackware vbatts/slackware
sh-4.3# grep -i ^NAME\= /etc/os-release
NAME=Slackware

在工作中使用容器

当然,容器不只是个精简的虚拟机。它们可以是针对为非常具体的需求提供的特定解决方案。如果你不熟悉容器,那么新系统管理员最常见的入门仪式之一可能会有所帮助:启动你的第一个 Web 服务器,但是在容器中。

首先,获取一个镜像。你可以使用 podman search 命令来搜索你喜欢的发行版,或者直接搜索你喜欢的 httpd 服务器。当使用容器时,我倾向于信任我在裸机上使用的相同发行版。

当你你找到一个镜像作为你的容器的基础,你就可以运行你的镜像。然而,正如这个术语所暗示的,容器是封起来的,所以如果你只是启动一个容器,你将无法访问标准的 HTTP 端口。你可以使用 -p 选项将一个容器端口映射到一个标准的网络端口:

$ podman run -it -p 8080:80 docker.io/fedora/apache:latest

现在看看你本地主机上的 8080 端口:

$ curl localhost:8080
Apache

成功了。

了解更多

容器拥有比模仿虚拟机更多的潜力。你可以将它们分组在 “ pod ” 中,构建复杂应用的自动部署,启动冗余服务以满足高需求等等。如果你刚刚开始使用容器,你可以 下载我们最新的电子书 来学习该技术,甚至学习创建一个 “ pod ”,以便你可以运行 WordPress 和数据库。

下载我们最新的电子书

(LCTT 译注:容器环境中使用的 “Pod” 一词,我以前根据容器相关术语多用航海领域名词比喻来将其译做“吊舱”,但也有同学表示了不同意见。根据对 Kubernetes 文档,这个词来自对 鲸鱼荚 pod of whales 豌豆荚 pea pod 的比喻,所以我觉得采用“荚”的翻译比较合适。—— wxy)


via: https://opensource.com/article/22/5/containers-pods-101-ebook

作者:Seth Kenlon 选题:lkxed 译者:geekpi 校对:wxy

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

如果你是我们的忠实读者,你可能读过 GNOME 计划用自家的文本编辑器取代 Gedit 的消息了。

没错,GNOME 推出了一款全新的文本编辑器,名字就叫做,嗯,“ 文本编辑器 Text Editor ”。

尽管 GNOME 桌面的默认文本编辑器还是 Gedit,但是这个新的编辑器已经和 GNOME 42 一起发布了。

也就是说,这款新编辑器可以在 Ubuntu 最新的长期发行版或者其他使用 GNOME 42 的发行版上获取(笔者现在使用的正是 Ubuntu 22.04)。

感兴趣吗?在本文,笔者将分享这款编辑器的使用体验以及安装步骤。

GNOME 文本编辑器使用体验

GNOME 文本编辑器基于 有争议的 libadwaita 库,遵循着其开发委员会的设计新理念,采用圆角边框,外观优美典雅,颇具现代化特点。

但就功能而言,这款软件并没有什么特别的“过人之处”。毕竟,它并不能取代 Atom 或者 VS Code 这类专业的代码编辑器。但同时,它也绝不像 Windows 的记事本那样“平平无奇”。

那么,让我们来一睹它的“风采”吧!

会话保存功能

默认情况下,GNOME 文本编辑器会自动打开上次编辑的文件,这一功能可以让你快速继续之前的工作。

你可以通过首选项下的还原会话选项,开启或关闭该功能。

你还可以搜索文件记录,打开最近处理的文件。请注意:清除文件记录(见上图 “ 清除历史 Clear History ”)会清除最近打开的文件列表。

主题与内置主题

GNOME 文本编辑器与其他新的 GNOME 软件一样,自带三种主题风格:跟随系统、浅色模式和深色模式。如果你选择了跟随系统,编辑器会根据系统主题(浅色或深色)自动变换自身的深浅主题色。

System theme option gnome text editor

此外,在首选项下还设有八个主题(深浅色模式下主题有所不同),为用户提供了更多的选择。

Theme options under preference

只需点击选中,主题即可生效。

文件修改以及未保存文件的处理

在你工作时,已修改和未保存的文件会突出地反映出来。

Unsaved files are more prominently marked

在你修改文件后点击关闭窗口时,编辑器会提醒你选择保存修改还是放弃修改。

相比之下,Gedit 有自动保存选项,无需插件即可使用。

暂无插件功能

提到插件,不得不承认这款新的编辑器还没有推出插件功能。而另一方面,Gedit 有着良好的插件生态,所以它的功能更加强大。

我不确定 GNOME 文本编辑器未来是否会引入支持插件的功能。

代码语法高亮

近年来,代码语法高亮可以说是文本编辑器的一个必备功能了。GNOME 文本编辑器也提供了这一功能,支持各种程序语言语法高亮。

通常来说,语法高亮的前提是代码文件要有对应的后缀名。不过,我发现 GNOME 文本编辑器甚至可以在文件保存之前就识别出 bash 脚本和 C/C++ 程序,并对其语法标出高亮。

Bash scripts. C/C++ code are detected even without file extension

快捷键

笔者喜欢在常用软件里使用快捷键,因为这样效率会更高。

GNOME 文本编辑器的各种操作都支持快捷键。你可以点击软件右上角的汉堡菜单( 符号)看到快捷键列表;或者直接敲快捷键 Ctrl+? 调出。

Keyboard shortcuts in Text Editor

查找和替换

GNOME 文本编辑器有着完善的查找替换功能。它有三种模式可供选择:正则表达式、区分大小写以及匹配精准字符。

search replace gnome text editor

更多功能

GNOME 文本编辑器与 Gedit 一样,还具备一些其他功能:

  • 拼写检查
  • 显示行号
  • 自动缩进
  • 空格和制表位缩进
  • 大小写转换
  • 自动换行

GNOME 文本编辑器的局限

归根结底,GNOME 文本编辑器依旧是一个文本编辑器,无法也无意用来打开 doc 文件。如果你执意用它要打开 doc 文件,你看到的就只有一堆乱码。当然,pdf 文件也是如此。

此外,GNOME 文本编辑器并不是专门用来写复杂代码的,它无法取代 VS Code 等代码编辑器。如果说偶尔用来读读代码或者写写 shell 脚本,倒也无伤大雅,但是它并不具备管理项目文件夹和运行代码等功能。

安装 GNOME 文本编辑器

就像笔者在开头所说,GNOME 文本编辑器已经和 GNOME 42 一起发布了,不过它并不属于默认安装的软件。在 Ubuntu 22.04,Universe 仓库里就有 GNOME 文本编辑器,你可以通过输入下面的命令进行安装:

sudo apt install gnome-text-editor

其他采用 GNOME 42 的发行版也可以获取 GNOME 文本编辑器,请在安装前查看所用系统的 桌面环境版本

安装完成后,可以点击屏幕左上角的“ 活动 Activities ”按钮,查找并打开 GNOME 文本编辑器。它的图标与 Gedit 的图标相似,但设计更为新颖。

总结

Gedit 是一款非常完善的文本编辑器,也是 GNOME 桌面环境长期以来的预装软件。几年前,Gedit 疏于开发,但现在已经恢复了开发。然而,如今 GNOME 团队正在努力为 GTK 4 和 libadwaita 改进核心应用程序。

GNOME 文本编辑器很像 Gedit 的翻版,两者有着相似的界面和功能。不过,GNOME 文本编辑器与新版 GNOME 的设计风格更加统一,使用体验也更加流畅。

这款新的编辑器日后很有可能会成为 GNOME 的默认文本编辑器。不过让人感兴趣的是,GNOME 文本编辑器将来是否会拥有自己的插件生态呢?


via: https://itsfoss.com/gnome-text-editor/

作者:Abhishek Prakash 选题:lujun9972 译者:aREversez 校对:wxy

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

在本教程中,你将学习如何在一个“吊舱”中运行两个容器来托管一个 WordPress 站点。

 title=

无论你是将其作为工作的一部分、未来的工作机会或者仅仅是出于对新技术的兴趣,容器对很多人,即使是经验丰富的系统管理员,可能是非常难以应付的。那么如何真正开始使用容器呢?从容器到 Kubernetes 的成长路径是什么?另外,为什么有不止一条路径?如你所料,最好的起点就是现在。

1、了解容器

略一回忆,容器的开端可以追溯到早期 BSD 及其特殊的 chroot 监狱,但让我们直接跳到发展中期讲起。

之前,Linux 内核引入了 “ 控制组 cgroup ”,允许你能够使用 “ 命名空间 namespace ” 来“标记”进程。当你将进程分组到一个命名空间时,这些进程的行为就像在命名空间之外的东西不存在一样,这就像你把这些进程放入某种容器中。当然,这种容器是虚拟的,它位于计算机内部,它和你操作系统的其余进程使用相同的内核、内存和 CPU,但你用容器包含了这些进程。

分发的预制容器仅包含运行它所包含的应用程序必须的内容。使用容器引擎,如 Podman、Docker 或 CRI-O,你可以运行一个容器化应用程序,而无需进行传统意义上的安装。容器引擎通常是跨平台的,因此即使容器运行在 Linux 上,你也可以在其他 Linux、MacOS 或 Windows 上启动容器。

更重要的是,当需求量很大时,你可以运行同一应用程序的多个容器。

现在你知道了什么是容器,下一步是运行一个容器。

2、运行一个容器

在运行容器之前,你应该有一个想要运行它的理由。你可以编一个,这有助于你对让容器创建过程感兴趣,这样你就会受到鼓舞,真正去使用你所运行的容器。毕竟,运行容器但不使用它提供的应用程序,只能证明你没有注意到任何故障,但使用容器证明它可以工作。

我推荐从 WordPress 开始,它是一个很流行的 Web 应用程序,容易使用,所以一旦容器运行起来,你就可以测试使用它。虽然你可以轻松地配置一个 WordPress 容器,但还是有很多配置选项可以引导你发现更多运行容器的方式(例如运行数据库容器)以及容器如何通信。

我使用 Podman,它是一个友好、方便且无守护进程的容器引擎。如果你没有安装 Podman,可以改用 Docker 命令。它们都是很棒的开源容器引擎,而且它们的语法是相同的(只需输入 docker 而不是 podman)。因为 Podman 没有守护进程,所以它需要更多的配置,但为了这种运行免 root、无守护进程的容器的能力是值得的。

如果你使用 Docker,可以跳到下面的 运行 WordPress 容器 小节,否则,打开终端安装并配置 Podman:

$ sudo dnf install podman

容器会产生许多进程,通常只有 root 用户有权创建数千个进程 ID。创建一个名为 /etc/subuid 的文件,定义一个适当的起始 UID 和大量合法的 PID,这样就可以为你添加一些额外的进程 ID:

seth:200000:165536

在名为 /etc/subgid 的文件中对你的组执行相同的操作。在这个例子中,我的主要组是 staff(对你来说可能是 users,或者和你的用户名一样,这取决于你的系统)。

staff:200000:165536

最后,确认你的用户可以管理很多命名空间:

$ sysctl --all --pattern user_namespaces
user.max_user_namespaces = 28633

如果你的用户无权管理超过 28,000 个命名空间,创建 /etc/sysctl.d/userns.conf 文件来增加数量并输入:

user.max_user_namespaces=28633

运行 WordPress 容器

现在,无论你使用的是 Podman 还是 Docker,你都可以从在线容器仓库中下载 WordPress 容器并运行它。你可以使用以下 Podman 命令完成所有这些操作:

$ podman run --name mypress \
    -p 8080:80 -d wordpress

给 Podman 一会时间来找到容器、从互联网下载它,然后启动。

在收到终端返回提示符后,启动 Web 浏览器,打开 localhost:8080。WordPress 正在运行,等待你进行设置。

 title=

不过,你很快就会遇到障碍,因为 WordPress 使用数据库来存储数据,因此你需要为其提供一个数据库。

在继续之前,停止并删除 WordPress 容器:

$ podman stop mypress
$ podman rm mypress

3、在吊舱中运行容器

正如名字所暗示的那样,容器在设计上是独立的。在容器中运行的应用程序不应该与在容器外的应用程序或基础设施进行交互。因此,当一个容器需要另一个容器才能运行时,一种解决方案是将这两个容器放在一个更大的容器中,称为 “ 吊舱 pod ”。吊舱确保其容器可以共享重要的命名空间以便相互通信。

创建一个新的吊舱,为它提供一个名称,以及希望能够访问的端口:

$ podman pod create \
    --name wp_pod \
    --publish 8080:80

确认吊舱存在:

$ podman pod list
POD ID        NAME     STATUS    INFRA ID      # OF CONTAINERS
100e138a29bd  wp_pod   Created   22ace92df3ef   1

将容器添加到吊舱

现在你已经为相互依赖的容器创建了一个吊舱,你可以通过指定一个运行的吊舱来启动每个容器。

首先,启动一个数据库容器。你可以创建自己的凭据,只要在 WordPress 连接到数据库时使用相同的凭据。

$ podman run --detach \
    --pod wp_pod \
    --restart=always \
    -e MYSQL_ROOT_PASSWORD="badpassword0" \
    -e MYSQL_DATABASE="wp_db" \
    -e MYSQL_USER="tux" \
    -e MYSQL_PASSWORD="badpassword1" \
    --name=wp_db mariadb

接下来,在同一个吊舱中启动 WordPress 容器:

$ podman run --detach \
    --restart=always --pod=wp_pod \
    -e WORDPRESS_DB_NAME="wp_db" \
    -e WORDPRESS_DB_USER="tux" \
    -e WORDPRESS_DB_PASSWORD="badpassword1" \
    -e WORDPRESS_DB_HOST="127.0.0.1" \
    --name mypress wordpress

现在启动你最喜欢的网络浏览器并打开 localhost:8080

这一次,设置会正常进行。WordPress 会连接到数据库,因为你在启动容器时传递了这些环境变量。

 title=

创建用户账户后,你可以登录查看 WordPress 仪表板。

 title=

下一步

你已经创建了两个容器,并在一个吊舱中运行了它们。你现在已经了解了如何在自己的服务器上运行容器及服务。如果你想迁移到云,容器非常适合你。使用像 Kubernetes 和 OpenShift 这样的工具,你可以自动化启动 集群上的容器和吊舱。如果你正在考虑采取下一步行动,阅读 Kevin Casey 的 3 个开始使用 Kubernetes 的方法,并尝试他提到的 Minikube 教程。


via: https://opensource.com/article/22/2/start-running-containers

作者:Seth Kenlon 选题:lujun9972 译者:MjSeven 校对:wxy

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

当你开始使用 新安装的 Ubuntu 系统 并尝试打开一个 MP4 文件进行播放时,它可能会显示一个错误,即:

播放这个文件要求 H.264(高清)解码器 ,但是没有安装。

当播放特定媒体文件时,Ubuntu 的默认视频播放器会显示错误

你可能会猜到原因:系统没有安装所需的多媒体解码器,导致视频播放器播放该视频文件。

所以,解决方案是什么?安装所需的解码器。怎么做呢?

我将讨论解决这个问题的三种方法:

  1. 只安装所需的解码器:它能解决所需的文件播放,但是一些其它格式的文件仍然会处在无解码器可用的状态。
  2. 一次安装多种多媒体解码器:它会安装解码器之外,还会安装你不需要的其它软件包,类似微软的字体库一样。
  3. 安装一个不同的视频播放器:像 VLC 和 MPV 视频播放器默认状态下对解码器有更好的支持。对大多数常规视频文件来说,你不必分别安装它们。

如果你遵从我的建议,我建议你采用第二种和第三种方法。为什么?一会你就知道了。

在 Ubuntu Linux 获取 H.264 解码器

这里我使用 Ubuntu Linux。第一和第三种方法应该也适用于其它发行版,但是第二种方法不适用,因为所提到的包(常常)是 Ubuntu 所独有的。

方法 1: 只安装所需的解码器(不推荐)

当你看到这个错误时,它给你一个叫做 “在 Ubuntu 软件中心查找” 的按钮。点击这个按钮打开软件中心,可能显示(或不显示)一些将在你的系统上安装 H.264 解码器的软件包。

在 Ubuntu 软件中心可能提供 H.264 解码器软件包

软件包名可能听起来很相似,但是你需要安装来自 “不良”组合 "bad" set 的 GStreamer 多媒体解码器。注意检查软件包的描述。

或者,你可以使用如下命令在终端来安装软件包:

sudo apt install gstreamer1.0-plugins-bad

如果你对终端不了解,请注意要求使用你的账户密码的提示。当你输入你的密码时,屏幕什么都不显示。这是 Linux 的方式。你盲输密码然后按回车键。

一旦软件包安装完成,再次打开文件看看是否能够正常播放。

这可能对你有用,但是解决方案并未结束。你可能有其它格式的一些视频文件要求一些其它的 H.264 解码器或者其它解码器。

其它的解码器播放视频你可能仍然有问题

你可以通过如下命令安装更多的解码器:

sudo apt install libavcodec-extra gstreamer1.0-plugins-ugly gstreamer1.0-libav

然而,在 Ubuntu 有一个 安装多媒体解码器更加方便的方法,我会在下一节展示给你。

方法 2: 安装所有多媒体解码器(推荐)

Ubuntu 系统提供了一个名字叫做 ubuntu-restricted-extras 的基础软件包,由许多常规的音频和视频解码器以及像类似微软字体库那样多余的一些软件包组成。

安装这个软件包你将不用再担心多媒体解码器的问题了。

在 Ubuntu 打开终端并键入以下命令:

sudo apt install ubuntu-restricted-extras

由于这个基础软件包包含类似微软字库那样用不到的一些多余的软件,你必须得接受最终用户许可协议(EULA)才行。

按下 tab 键 然后点击回车接受 EULA 协议

下一屏类似如下。按下 tab 键会高亮显示选项。当正确的选项高亮显示时,按下回车键来确认你的选择。

当高亮显示你正确的选项时,按下 tab 键,按回车键确认

当多媒体解码器安装完成后,你应该能够播放绝大多数媒体文件了。你的音乐播放器能播放 MP3 文件,你的视频播放器能播放 MP4,MKV 等等格式。

然而,这也不是解决方案的终点,至少对某些人来说。

为什么我要那样说?因为我已经注意到 Ubuntu 系统下的默认视频播放器 Totem 在播放某些视频格式文件时常常遇到问题。你会注意到突然你的系统主机发热,风扇狂转并且鼠标指针停止运行。

为什么?因为 Totem 播放器在视频解码方面占用了大量的处理器资源。

当你播放视频的时候你可以通过 top 命令尝试查看名称为 totem 这个进程(那是默认视频播放器的名字)。

Ubuntu 默认的视频播放器 Totem 可能消耗过多的必要的 CPU 资源

你现在能够做什么?你的麻烦看起来永无止境,别担心。在 Linux 上有更好的视频播放器 并且它们能帮助你解决问题。

方法 3: 安装一个更优秀的视频播放器(推荐)

在 Linux 上有很多优秀的视频播放器。我发现它们优于默认的 Totem 视频播放器。

就我个人来说,那么多个我只喜欢这两个:VLCMPV

VLC 是一个功能丰富且超级流行的视频播放器。很可能你已经使用过 VLC 。

MPV 媒体播放器不是那么流行,但使用这个轻量级的程序播放视频文件是再合适不过了。

VLC 和 MPV 播放器都擅长处理多媒体解码器。你甚至不必分开来安装多媒体解码器。只需要 安装 VLC 或者 MPV ,你就能够播放各种格式的视频文件。

在软件中心也可以找到它:

在 Ubuntu 软件中心 MPV 可用

或者 使用命令行 在 Ubuntu 安装 MPV

sudo apt install mpv

现在你已经有了一个新的视频播放器,你应该右键点击视频文件,选择新的视频播放器来打开。

或者,你可以使其作为默认程序 双击来播放视频文件。

对你有用吗?

我在这里没有说太多细节。我想阐述各种方法以及对应的优缺点。

你在 Ubuntu 处理好 H.264 解码器的问题了吗?哪种方法对你有用?


via: https://itsfoss.com/install-h-264-decoder-ubuntu/

作者:Abhishek Prakash 选题:lujun9972 译者:hwlife 校对:turbokernel

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

Memray 是一个由彭博社开发的 内存剖析器 memory profiler ,现在已经开源。它可以跟踪 Python 代码中的内存分配,包括本地扩展和 Python 解释器本身。内存剖析是了解程序如何利用内存的有力工具,因此可以检测内存泄漏或确定程序中哪些区域消耗的内存最多。

与 py-spy 等抽样内存剖析器相比,Memray 可以跟踪每个函数调用,包括对 C/C++ 库的调用,并详细显示调用栈。彭博社称,这并不以牺牲性能为代价,剖析只使解释代码的速度变慢一点。然而,原生代码剖析的速度较慢,因此需要直接启用。

Memray 可以根据获得的内存消耗数据生成各种报告,包括火焰图,这对快速、准确地识别最常见的代码路径很有价值。

据 EgdeDB 的联合创始人兼 CEO Yury Selivanov 称,该工具提供了以前无法获得的对 Python 应用的洞察力。Memray 可以用来从命令行中执行和剖析 Python 应用。

$ python3 -m memray run -o output.bin my_script.py
$ python3 -m memray flamegraph output.bin

另外,你可以使用 pytest-memray 将 Memray 集成到你的测试套件中。你也可以用 -native 命令行选项对所有的 C/C++ 调用进行剖析,或者用 -live 命令行选项在程序执行过程中实时分析内存分配。Memray 可以在 Linux x86/64 系统上用 python3 -m pip install memray 来安装。

(题图由 Frantisek KrejciPixabay 上发布 )


via: https://www.opensourceforu.com/2022/04/bloomberg-open-sources-memray-a-python-memory-profiler/

作者:Laveesh Kocher 选题:lkxed 译者:geekpi 校对:wxy

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