2022年6月

有一大堆文件尺寸巨大的图片占用了太多的磁盘空间?或者你必须将图片上传到有文件大小限制的门户网站?

你可能有很多原因想要压缩图片。有大量的工具可以帮助你,我在这里说的不是命令行的工具。

你可以使用一个成熟的图像编辑器,如 GIMP。你也可以使用像 Squoosh 这样的网络工具,这是谷歌的一个开源项目。它甚至可以让你比较每个压缩级别的文件。

然而,所有这些工具都是针对单个图像工作的。如果你想批量压缩照片怎么办?Curtail 是一个能帮助你的应用。

Curtail: Linux 中用于图像压缩的灵巧工具

使用 Python 和 GTK3 构建的 Curtail 是一个简单的 GUI 应用,使用 OptiPNG、jpegoptim 等开源库来提供图像压缩功能。

它有一个 Flatpak 应用。请确保你的系统已启用 Flatpak 支持

首先添加 Flathub 仓库:

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

然后使用下面的命令来安装 Curtail:

flatpak install flathub com.github.huluti.Curtail

安装后,在你的 Linux 系统的菜单中寻找它,并从那里启动它。

curtail app

界面朴素而简单。你可以选择你想要无损压缩还是有损压缩。

有损压缩会有质量差的图像,但尺寸较小。无损压缩会有更好的质量,但尺寸可能不会比原来的小很多。

curtail app interface

你可以浏览图片,或者把它们拖到应用中。

是的,你可以用 Curtail 一键压缩多张图片。

事实上,你甚至不需要点击。只要你选择图片或拖放它们,它们就会被压缩,你会看到压缩过程的摘要。

curtail image compression summary

正如你在上面的图片中看到的,我的一张图片的尺寸减少了 35%,另外两张图片的尺寸减少了 3% 和 8%。这是在无损压缩的情况下。

这些图片以 -min 为后缀(默认),保存在与原始图片相同的目录中。

虽然它看起来很简约,但有几个选项可以配置 Curtail。点击菜单,你会看到一些设置选项。

curtail configuration options

你可以选择是将压缩文件保存为新文件还是替换现有文件。如果你选择新文件(默认行为),你也可以为压缩后的图像提供一个不同的后缀。保留文件属性的选项也在这里。

在下一个选项卡中,你可以配置有损压缩的设置。默认情况下,压缩级别为 90%。

curtail compression options

高级选项卡让你可以选择配置 PNG 和 WebP 文件的无损压缩级别。

curtain advanced options

总结

正如我前面所说,这不是一个突破性的工具。你可以用其他工具如 GIMP 做同样的事情。它只是使图像压缩的任务更简单,特别是对于批量图像压缩。

我很想看到在压缩时有转换图像文件格式的选项,就像我们在 Converseen 等工具中所拥有的那样。

总的来说,对于图像压缩的具体目的来说,这是一个不错的小工具。


via: https://itsfoss.com/curtail-image-compress/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对:wxy

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

大家好!我又写了一篇关于 我最喜欢的电脑工具 的文章。这一篇讲的是 Docker Compose!

本文主要就是讲一讲我对 Docker Compose 有多么满意啦(不讨论它的缺点)!咳咳,因为它总能够完成它该做的,并且似乎总能有效,更棒的是,它的使用还非常简单。另外,在本文中,我只讨论我是如何用 Docker Compose 来搭建开发环境的,而不涉及它在生产中的使用。

最近,我考虑了很多关于这种个人开发环境的搭建方式,原因是,我现在把所有的计算工作都搬到了一个私有云上,大概 20 美元/月的样子。这样一来,我就不用在工作的时候花时间去思考应该如何管理几千台 AWS 服务器了。

在此之前,我曾花了两天的时间,尝试使用其他的工具来尝试搭建一个开发环境,搭到后面,我实在是心累了。相比起来,Docker Compose 就简单易用多了,我非常满意。于是,我和妹妹分享了我的 docker-compose 使用经历,她略显惊讶:“是吧!你也觉得 Docker Compose 真棒对吧!” 嗯,我觉得我应该写一篇博文把过程记录下来,于是就有了你们看到的这篇文章。

我们的目标是:搭建一个开发环境

目前,我正在编写一个 Ruby on Rails 服务(它是一个计算机“调试”游戏的后端)。在我的生产服务器上,我安装了:

  • 一个 Nginx 服务器
  • 一个 Rails 服务
  • 一个 Go 服务(使用了 gotty 来代理一些 SSH 连接)
  • 一个 Postgres 数据库

在本地搭建 Rails 服务非常简单,用不着容器(我只需要安装 Postgres 和 Ruby 就行了,小菜一碟)。但是,我还想要把匹配 /proxy/* 的请求的发送到 Go 服务,其他所有请求都发送到 Rails 服务,所以需要借助 Nginx。问题来了,在笔记本电脑上安装 Nginx 对我来说太麻烦了。

是时候使用 docker-compose 了!

docker-compose 允许你运行一组 Docker 容器

基本上,Docker Compose 的作用就是允许你运行一组可以互相通信 Docker 容器。

你可以在一个叫做 docker-compose.yml 的文件中,配置你所有的容器。我在下方将贴上我为这个服务编写的 docker-compose.yml 文件(完整内容),因为我觉得它真的很简洁、直接!

version: "3.3"
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: password # yes I set the password to 'password'
  go_server:
    # todo: use a smaller image at some point, we don't need all of ubuntu to run a static go binary
    image: ubuntu
    command: /app/go_proxy/server
    volumes:
      - .:/app
  rails_server:
    build: docker/rails
    command: bash -c "rm -f tmp/pids/server.pid && source secrets.sh && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/app
  web:
    build: docker/nginx
    ports:
      - "8777:80" # this exposes port 8777 on my laptop

这个配置包含了两种容器。对于前面两个容器,我直接使用了现有的镜像(image: postgresimage: ubuntu)。对于后面两个容器,我不得不构建一个自定义容器镜像,其中, build: docker/rails 的作用就是告诉 Docker Compose,它应该使用 docker/rails/Dockerfile 来构建一个自定义容器。

我需要允许我的 Rails 服务访问一些 API 密钥和其他东西,因此,我使用了 source secrets.sh,它的作用就是在环境变量中预设一组密钥。

如何启动所有服务:先 “build” 后 “up”

我一直都是先运行 docker-compose build 来构建容器,然后再运行 docker-compose up 把所有服务启动起来。

你可以在 yaml 文件中设置 depends_on,从而进行更多启动容器的控制。不过,对于我的这些服务而言,启动顺序并不重要,所以我没有设置它。

网络互通也非常简单

容器之间的互通也是一件很重要的事情。Docker Compose 让这件事变得超级简单!假设我有一个 Rails 服务正在名为 rails_server 的容器中运行,端口是 3000,那么我就可以通过 http://rails_server:3000 来访问该服务。就是这么简单!

以下代码片段截取自我的 Nginx 配置文件,它是根据我的使用需求配置的(我删除了许多 proxy_set_headers 行,让它看起来更清楚):

location ~ /proxy.* {
  proxy_pass http://go_server:8080;
}
location @app {
  proxy_pass http://rails_server:3000;
}

或者,你可以参考如下代码片段,它截取自我的 Rails 项目的数据库配置,我在其中使用了数据库容器的名称(db):

development:
  <<: *default
  database: myproject_development
  host: db # <-------- 它会被“神奇地”解析为数据库容器的 IP 地址
  username: postgres
  password: password

至于 rails_server 究竟是如何被解析成一个 IP 地址的,我还真有点儿好奇。貌似是 Docker 在我的计算机上运行了一个 DNS 服务来解析这些名字。下面是一些 DNS 查询记录,我们可以看到,每个容器都有它自己的 IP 地址:

$ dig +short @127.0.0.11 rails_server
172.18.0.2
$ dig +short @127.0.0.11 db
172.18.0.3
$ dig +short @127.0.0.11 web
172.18.0.4
$ dig +short @127.0.0.11 go_server
172.18.0.5

是谁在运行这个 DNS 服务?

我(稍微)研究了一下这个 DNS 服务是怎么搭建起来的。

以下所有命令都是在容器外执行的,因为我没有在容器里安装很多网络工具。

第一步::使用 ps aux | grep puma,获取 Rails 服务的进程 ID。

找到了,它是 1837916!简单~

第二步::找到和 1837916 运行在同一个网络命名空间的 UDP 服务。

我使用了 nsenter 来在 puma 进程的网络命令空间内运行 netstat(理论上,我猜想你也可以使用 netstat -tupn 来只显示 UDP 服务,但此时,我的手指头只习惯于打出 netstat -tulpn)。

$ sudo nsenter -n -t 1837916 netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.11:32847        0.0.0.0:*               LISTEN      1333/dockerd
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      1837916/puma 4.3.7
udp        0      0 127.0.0.11:59426        0.0.0.0:*                           1333/dockerd

我们可以看到,此时有一个运行在 59426 端口的 UDP 服务,它是由 dockerd 运行的!或许它就是我们要找的 DNS 服务?

第三步:确定它是不是我们要找的 DNS 服务

我们可以使用 dig 工具来向它发送一个 DNS 查询:

$ sudo nsenter -n -t 1837916 dig +short @127.0.0.11 59426 rails_server
172.18.0.2

奇怪,我们之前运行 dig 的时候,DNS 查询怎么没有发送到 59426 端口,而是发送到了 53 端口呢?这到底是怎么回事呀?

第四步:iptables

对于类似“这个服务似乎正运行在 X 端口上,但我却在 Y 端口上访问到了它,这是什么回事呢?”的问题,我的第一念头都是“一定是 iptables 在作怪”。

于是,我在运行了容器的网络命令空间内执行 iptables-save,果不其然,真相大白:

$ sudo nsenter -n -t 1837916 iptables-save
.... redacted a bunch of output ....
-A DOCKER_POSTROUTING -s 127.0.0.11/32 -p udp -m udp --sport 59426 -j SNAT --to-source :53
COMMIT

在输出中有一条 iptables 规则,它将 53 端口的流量发送到了 59426 上。哈哈,真有意思!

数据库文件储存在一个临时目录中

这样做有一个好处:我可以直接挂载 Postgres 容器的数据目录 ./tmp/db,而无需在我的笔记本电脑上管理 Postgres 环境。

我很喜欢这种方式,因为我真的不想在笔记本电脑上独自管理一个 Postgres 环境(我也真的不知道该如何配置 Postgres)。另外,出于习惯,我更喜欢让开发环境的数据库和代码放在同一个目录下。

仅需一行命令,我就可以访问 Rails 控制台

管理 Ruby 的版本总是有点棘手,并且,即使我暂时搞定了它,我也总是有点担心自己会把 Ruby 环境搞坏,然后就要修它个十年(夸张)。

(使用 Docker Compose)搭建好这个开发环境后,如果我需要访问 Rails 控制台 console (一个交互式环境,加载了所有我的 Rails 代码),我只需要运行一行代码即可:

$ docker-compose exec rails_server rails console
Running via Spring preloader in process 597
Loading development environment (Rails 6.0.3.4)
irb(main):001:0>

好耶!

小问题:Rails 控制台的历史记录丢失了

我碰到了一个问题:Rails 控制台的历史记录丢失了,因为我一直在不断地重启它。

不过,我也找到了一个相当简单的解决方案(嘿嘿):我往容器中添加了一个 /root/.irbrc 文件,它能够把 IRB 历史记录文件的保存位置指向一个不受容器重启影响的地方。只需要一行代码就够啦:

IRB.conf[:HISTORY_FILE] = "/app/tmp/irb_history"

我还是不知道它在生产环境的表现如何

到目前为止,这个项目的生产环境搭建进度,还停留在“我制作了一个 DigitalOcean droplet(LCCT 译注:一种 Linux 虚拟机服务),并手工编辑了很多文件”的阶段。

嗯……我相信以后会在生产环境中使用 docker-compose 来运行一下它的。我猜它能够正常工作,因为这个服务很可能最多只有两个用户在使用,并且,如果我愿意,我可以容忍它在部署过程中有 60 秒的不可用时间。不过话又说回来,出错的往往是我想不到的地方。

推特网友提供了一些在生产中使用 docker-compose 的注意事项:

  • docker-compose up 只会重启那些需要重启的容器,这会让重启速度更快。
  • 有一个 Bash 小脚本 wait-for-it,你可以用它来保持等待一个容器,直到另一个容器的服务可用。
  • 你可以准备两份 docker-compose.yaml 文件:用于开发环境的 docker-compose.yaml 和用于生产环境的 docker-compose-prod.yaml。我想我会在分别为 Nginx 指定不同的端口:开发时使用 8999,生产中使用 80
  • 人们似乎一致认为,如果你的项目是一台计算机上运行的小网站,那么 docker-compose 在生产中不会有问题。
  • 有个人建议说,如果愿意在生产环境搭建复杂那么一丢丢,Docker Swarm 就或许会是更好的选择,不过我还没试过(当然,如果要这么说的话,干嘛不用 Kubernetes 呢?Docker Compose 的意义就是它超级简单,而 Kubernetes 肯定不简单 : ))。

Docker 似乎还有一个特性,它能够 把你用 docker-compose 搭建的环境,自动推送到弹性容器服务(ESC)上,听上去好酷的样子,但是我还没有试过。

docker-compose 会有不适用的场景吗

我听说 docker-compose 在以下场景的表现较差:

  • 当你有很多微服务的时候(还是自己搭建比较好)
  • 当你尝试从一个很大的数据库中导入数据时(就像把几百 G 的数据存到每个人的笔记本电脑里一样)
  • 当你在 Mac 电脑上运行 Docker 时。我听说 Docker 在 macOS 上比在 Linux 上要慢很多(我猜想是因为它需要做额外的虚拟化)。我没有 Mac 电脑,所以我还没有碰到这个问题。

以上就是全部内容啦!

在此之前,我曾花了一整天时间,尝试使用 Puppet 来配置 Vagrant 虚拟机,然后在这个虚拟机里配置开发环境。结果,我发现虚拟机启动起来实在是有点慢啊,还有就是,我也不喜欢编写 Puppet 配置(哈哈,没想到吧)。

幸好,我尝试了 Docker Compose,它真好简单,马上就可以开始工作啦!


via: https://jvns.ca/blog/2021/01/04/docker-compose-is-nice/

作者:Julia Evans 选题:lujun9972 译者:lkxed 校对:turbokernel

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

一名安全专家成功地在谷歌 Nest Hub(第 2 代)上运行了 Ubuntu,嗯,然后呢?

Ubuntu Google

我刚刚看到了一个关于在谷歌 Nest Hub(第 2 代)上运行的 Ubuntu 的消息。

嗯,这实在是让人兴奋!

所以,让我在这里分享更多关于它的信息吧。

破解谷歌 Nest Hub 以安装 Ubuntu

是的,破解使得这成为可能。

网络安全专家 Frédéric Basse 破解了谷歌 Nest Hub(第 2 代)的安全启动,并成功运行 Ubuntu。

当然,谷歌 Nest Hub 并没有正式支持启动一个自定义操作系统。但是,Fred 使用了一个安全漏洞,从而成功运行了 Ubuntu。

虽然这很有趣,但对于始终在线的谷歌智能家居显示器来说,这也是一个严重的安全问题。

正如这位安全专家在 博客文章 中所解释的,他使用了树莓派 Pico 微控制器,利用引导加载程序中的 USB 漏洞,从而破坏了安全启动链。

这位安全专家得出结论:

因此,攻击者可以通过插入恶意 USB 设备并按下两个按钮,从而在早期启动阶段(内核执行之前)执行任意代码。

如果你想进行实验(适合安全研究人员),他还在 GitHub 上提供了相关代码(关于如何利用这个引导加载程序漏洞)。

让 Ubuntu 在 Google Nest 上运行

该漏洞允许攻击者启动未签名的操作系统。但是,在那之前,攻击者必须对为树莓派(64 位 ARM 版)量身定制的预装 Ubuntu 镜像进行一些修改。

这位安全专家还提到了以下内容:

我们构建了一个自定义 U-Boot 引导加载程序,禁用了安全引导,并更改了引导流程以从 USB 闪存驱动器加载环境。我们还为 elaine 构建了一个自定义 Linux 内核,其中包括包括了一些 额外驱动,例如 USB 鼠标 。重新打包了来自 Ubuntu 的初始 ramdisk(initrd),以集成触摸屏所需的固件二进制文件。引导镜像是基于自定义 Linux 内核和修改的 initrd 创建的。

因此,很明显,你不会获得完整的 Ubuntu 体验,但由于该漏洞,我们现在知道,如果你愿意破解 谷歌 Nest 进行测试的话(真心不建议!),Ubuntu 是可以在谷歌 Nest 上作运行的。

智能家居安全担忧 + Linux

网络安全专家指出,该漏洞已在上游(两次)修复。

但是,研究人员也指出,缺乏分配的 CVE 编号可能会导致修复程序无法向下游传播。

毫无疑问,看到有人在不受支持的设备上运行 Linux 真是太棒了。这让我思考,我们是否应该也制造一些 由 Linux 驱动的商业智能家居设备?

或者说,已经有类似的东西了吗?

然而,智能家居设备容易受到简单攻击,也同样令人担忧。

你怎么看?在下面的评论中分享你的想法吧。

本文最初发布于 Liliputing


via: https://news.itsfoss.com/ubuntu-google-nest/

作者:Ankush Das 选题:lkxed 译者:lkxed 校对:wxy

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

懒人程序员们可以付费使用 AI 代写“作业”了

GitHub 宣布它的 AI 编程助手 Copilot 将开放付费使用,开发者可支付月费 10 美元或年费 100 美元。核实过的学生和流行开源项目的维护者可免费使用。Copilot 使用公开的代码库进行训练,在开发者写代码时根据函数名等上下文自动补完后续代码。很多时候 Copilot 补充的是公开代码库中代码片段的拷贝,在设置中提供了一个选项可以关闭来自公开代码库的代码补充建议。

消息来源:GitHub
老王点评:作为一个有 20 多年编程经验的人,我觉得这对编程人员来说可能并非好事。虽然它可能帮你更快、更轻松地编程,但是也可能导致你的编程基础技能进一步被削弱。最终,Copilot 的进一步强大和程序员越来越弱的编程能力,导致最终失业的是那些依赖 Copilot 的程序员们。

开源代码项目平均有 49 个漏洞

在最新《开源安全状态》报告中发现,一个开源的项目平均有 49 个漏洞和 80 个直接依赖项。修复开源项目漏洞所需的时间也在稳步增加。早在 2018 年,修复安全漏洞平均需要 49 天,而 2021 年则需要 110 天。该报告称,只有 49% 的组织制定了开源软件开发或使用的安全策略,对于大中型公司来说仅为 27%,甚至大约 30% 的组织中没有人直接负责和解决开源安全问题。

消息来源:SNYK
老王点评:开源软件从非主流变成主流,其原本的一些小问题也逐渐形成了大问题。在所有人都开始拥抱开源的时候,反而要审慎地应用开源,要对进入严肃应用场合的开源软件进行管理,使之可以避免一些固有的缺陷和风险。

研究发现区块链的中心化风险

近日,美国国防高级研究计划局(DARPA)发布了一份名为《区块链真的是去中心化吗?》的报告,发现区块链的关键漏洞有可能危及其所谓“去中心化”理念。根据该报告,至少在过去五年中,60% 的比特币流量仅通过三个互联网服务供应商,而 55% 的比特币流量是通过 Tor 进行的。这意味着这些供应商有可能拥有“改写历史”的能力,限制某些交易。此外,大约 21% 的比特币节点正在运行一个容易受到攻击的旧版本的比特币核心客户端。

消息来源:SecurityBoulevard
老王点评:毕竟区块链也是运行在网络上的,算法上的安全并不能解决基础设施不安全的问题。值此区块链暴跌的时机,这一报告又将雪上加霜。

回音

  • Cloudflare 解释 说 20 日的 事故 是网络配置错误导致的。Cloudflare 称它修改网络配置本意是增加弹性,结果却导致其 4% 的网络受到影响,进而影响到它处理的大约 50% 的 HTTP 请求。

WineZGUI - 一个使用 Zenity 的 Wine GUI 前台

不久前,我们写了关于 Bottles 的文章,这是一个开源的图形应用,可以在 Linux 操作系统上轻松运行 Windows 软件和游戏。今天,我们将讨论一个类似的有趣项目。向 WineZGUI 打个招呼,它是一个 Wine GUI 前台,可以 在 Linux 上用 Wine 运行 Windows 应用和游戏

什么是 WineZGUI?

WineZGUI 是一个 Bash 脚本的集合,它允许你轻松地管理 Wine 前缀,并在 Linux 上使用 Zenity 提供更轻松的 Wine 游戏体验。

(LCTT 译注:Wine 前缀是一个特殊文件夹,Wine 在其中放置所有 Wine 特定的文件,安装 Windows 程序、库和注册表代码,以及用户首选项。)

使用 WineZGUI,我们可以直接从文件管理器中启动 Windows EXE 文件或游戏,而无需安装它们。

WineZGUI 为每个应用或游戏创建快捷方式,以便于访问,同时也为每个 EXE 二进制文件创建单独的前缀。

当你用 WineZGUI 启动一个 Windows EXE 文件时,它会提示你是否使用默认的 Wine 前缀或创建一个新的前缀。默认的前缀是 ~/.local/share/winezgui/default

如果你选择为 Windows 二进制文件(EXE)创建一个新的前缀,WineZGUI 将尝试从 EXE 文件中提取产品名称和图标,并创建一个桌面快捷方式。

当你以后启动相同的二进制文件(EXE)时,它将建议你用先前的相关前缀来运行它。

说得通俗一点,WineZGUI 只是一个用于官方原始 Wine 的简单 GUI。当我们启动一个 EXE 来玩游戏时,Wine 前缀的设置是自动的。

你只需打开一个 EXE,它就会创建一个前缀和一个桌面快捷方式,并从该 EXE 中提取名称和图标。

它使用 exiftoolicotool 工具来分别提取名称和图标。你可以通过现有的前缀打开一个 EXE 来启动该游戏,或者使用桌面快捷方式。

WineZGUI 是一个在 GitHub 上免费托管的 shell 脚本。你可以抓取源代码,改进它,修复错误和增加功能。

Bottles Vs WineZGUI

你可能想知道 WineZGUI 与 Bottles 相比如何。但这些应用之间有一个微妙的区别。

Bottles 是面向前缀的面向运行器的。意思是:Bottles 首先创建一个前缀,然后使用不同的 EXE 文件。Bottles 不会记住 EXE 的前缀。Bottles 使用不同的运行器。

WineZGUI 是面向 EXE 的。它使用 EXE 并只为该 EXE 创建一个前缀。下次我们打开一个 EXE 时,它将询问是否用现有的 EXE 前缀启动。

WineZGUI 不提供像 Bottles 或 lutris 那样的高级功能,如运行程序、在线安装程序等。

如何在 Linux 中安装 WineZGUI

确保你已经安装了 WineZGUI 的必要先决条件。

Debian/Ubuntu:

$ sudo dpkg --add-architecture i386
$ sudo apt install zenity wine winetricks libimage-exiftool-perl icoutils gnome-terminal

Fedora:

$ sudo dnf install zenity wine winetricks perl-Image-ExifTool icoutils gnome-terminal

官方推荐的安装 WineZGUI 的方法是使用 Flatpak

安装完 Flatpak 后,逐一运行以下命令,在 Linux 中安装 WineZGUI。

$ flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
$ flatpak --user -y install flathub org.winehq.Wine/x86_64/stable-21.08
$ wget https://github.com/fastrizwaan/WineZGUI-Releases/releases/download/WineZGUI-0.4_20220608/io.github.WineZGUI_0_4_20220608.flatpak
$ flatpak --user -y install io.github.WineZGUI_0_4_20220608.flatpak

在 Linux 中用 WineZGUI 运行 Windows 应用和游戏

从 Dash 或菜单中启动 WineZGUI。

Launch WineZGUI

这就是 WineZGUI 的默认界面的样子。

WineZGUI Interface

正如你在上面的截图中看到的,WineZGUI 的界面非常简单易懂。从主窗口中,你可以:

  • 打开一个 EXE 文件。
  • 打开 Winetricks GUI 和 CLI。
  • 启动 Wine 配置。
  • 启动资源管理器。
  • 打开 BASH Shell。
  • 关闭所有的应用/游戏,包括 WineZGUI 界面。
  • 删除 Wine 前缀。
  • 查看已安装的 WineZGUI 版本。

为了演示,我将打开一个 EXE 文件。

在下一个窗口中,选择要运行的 EXE 文件。在我的例子中,它是 WinRAR。

Choose The EXE File To Run

接下来,你是想用默认的前缀运行 EXE 文件,还是创建一个新的前缀。我选择默认的前缀。

Run WinRAR With Default Prefix

几秒钟后,会出现 WinRAR 安装向导。点击安装,继续。

Install WinRAR In Linux

点击 “OK” 来完成 WinRAR 的安装。

Complete WinRAR Installation

点击 “ 运行 WinRAR Run WinRAR ” 来启动它。

Run WinRAR

下面是 WinRAR 在我的 Fedora 36 桌面上的运行情况!

WinRAR Is Running In Fedora Using Wine

总结

WineZGUI 是俱乐部的新人。如果你正在寻找一种在 Linux 桌面上使用 Wine 运行 Windows 应用和游戏的更简单方法,WineZGUI 可能是一个不错的选择。

在 WineZGUI 的帮助下,用户可以选择在与 EXE 相同的文件夹中创建一个 Wine 前缀,并创建一个相对链接的 .desktop 条目来自动执行此操作。

原因是使用 Wine 前缀备份和删除游戏更容易,并且让它生成一个 .desktop 将使其能够适应移动和转移。

一个很酷的场景是使用该应用进行设置,然后将 Wine 前缀分享给你的朋友和其他人,他们只需要一个具有所有依赖性和保存的工作 Wine 前缀。

请试一试它,在下面的评论区告诉我们你对这个项目的看法。

资源:


via: https://ostechnix.com/winezgui-run-windows-apps-and-games-on-linux/

作者:sk 选题:lkxed 译者:geekpi 校对:wxy

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

在这篇文章中学习混沌工程的基础知识。

 title=

混沌工程是由科学、规划以及实验组成的。它是一门在系统上进行实验的学科,用来建立系统在生产中承受混乱条件能力的信心。

首先,我会在文章导论部分解释混沌系统如何工作。

如何开始学习混沌系统呢?

以我的经验,开始学习混沌系统的最好方式是触发一个此前生产中出现的事故来进行实验。使用过去的数据,制定一个计划,以相同的方式破坏你的系统,然后建立修复策略,并确认结果满足你预期。如果计划失败,你就有了一种新的实验方式,并朝着快速处理问题的新方式前进。

最重要的是,你可以随时记录所有内容,这意味着,随着时间的推移,整个系统将被完整记录下来,任何人都可以值守而无需太多加码,每个人都可以在周末好好休息。

你要在混沌工程中做什么?

混沌系统实验运行背后有一些科学依据。我记录了其中一些步骤:

  1. 定义一个稳定状态: 使用监控工具来搜集当系统没有问题或事故时,看起来功能正常的数据。
  2. 提出假设或使用先前的事故: 现在你已经定义了一个稳定状态,请提出一个关于在事故或中断期间会发生(或发生过)的情况的假设。用这个假设来得出一系列将会发生的事故,以及如何解决问题的理论。然后你可以制定一个故意引发该问题的计划。
  3. 引发问题: 用这个计划来破坏系统,并开始在真实环境中测试。收集破坏时的指标状态,按计划修复,并追踪提出解决方案所需时长。确保你把所有的东西都记录下来,以备将来发生故障时使用。
  4. 试图推翻你的假设: 实验中最精彩的部分是尝试推翻你的思考或计划。你要创建一个不同的状态,看看你能走多远,并在系统中生成一个不同的稳定状态。

确保在你在另一个系统中生成的破坏因素前,建立一个处于稳定状态的控制系统。这将使你更容易在实验前、期间和之后发现各种稳定状态的差异。

混沌工程需要什么?

这有一些初学混沌工程很好的工具:

  • 良好的文档编制方法
  • 一个捕捉你系统是否处于稳定状态的监控系统

    • Grafana
    • Prometheus
  • 混沌工程工具:

    • Chaos mesh
    • Litmus
    • 之后的文章我会介绍更多
  • 一个假设
  • 一个计划

去搞破坏吧

现在你已经掌握了基础,是时候去安全的摧毁你的系统了。我计划每年制造四次混乱,然后努力实现每月一次的破坏。

混沌工程是一种很好的实践,也是推进你的内部文档保持最新的好方法。此外,随着时间的推移,新升级或应用程序部署将更加顺畅,你的日常生活管理将通过 Kubernetes 变得更加轻松。


via: https://opensource.com/article/21/5/kubernetes-chaos

作者:Jessica Cherry 选题:lujun9972 译者:Donkey 校对:turbokernel, wxy

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