2023年7月

IMAX 电影播放仍然需要一台 21 年前的掌上电脑

在《奥本海默》上映之前,IMAX TikTok 官方账号发布的一段视频中,有一个小小的蓝银色 Palm 设备。它是在另一台设备上运行的 Palm Pilot 模拟器,安装在放置卷轴的机器旁边的白色柱子上。这个仿真的设备是 Palm m130,于 2002 年发布。它有一个两英寸的 160x160 显示屏,采用 33MHz 的摩托罗拉处理器,运行 Palm OS 4.1 系统。在 IMAX 影院中,该掌上电脑的工作是控制快转卷轴装置,多年来,在大多数 IMAX 影院里,似乎都有一个实体 m130。IMAX 为什么还要在 21 年前的设备上运行其系统?又为什么会选择在一台蹩脚的 Windows 平板电脑上简单地模拟这台 21 年前的设备呢?因为,放映员们已经习惯了它的存在。

消息来源:The Verge
老王点评:2000 年时,我用过早期 Palm,却没想到在二十几年后 Palm 仍然在用。

特斯拉开始生产可以媲美超算榜首的 Dojo 超级计算机

特斯拉在 2023 年第二季度财报中概述了大规模解决车辆自动驾驶问题所需的四大技术支柱:超大型真实世界数据集、神经网络训练、车辆硬件和车辆软件。特斯拉表示,它已经开始生产用于训练其自动驾驶车队的 Dojo 超级计算机,该计算机宣布于 2019 年。特斯拉已经拥有一台基于英伟达 GPU 的大型超级计算机,它是世界上最强大的超级计算机之一,但新的 Dojo 定制计算机使用的是特斯拉设计的芯片。此前,马斯克曾宣称,Dojo 的运算能力将达到 1 ExaFLOP。目前,据公开披露的信息,美国橡树岭国家实验室的超级计算机 Frontier 是全球首台达到 ExaFLOP 级别的计算机,也是唯一一台。

消息来源:The Verge
老王点评:虽然可能还需要一年时间,但是特斯拉能从芯片到贴片、托盘、机架,乃至于构成一个集群,其计算实力不容小觑。

AMI 固件中发现影响数百万计算机的严重漏洞

这些漏洞是在 AMI 为 BMC(底板管理控制器)制作的固件中发现的,BMC 是集成在服务器主板上的小型计算机,可以远程管理多台计算机。可以访问 Redfish 远程管理接口的本地或远程攻击者可以利用这些漏洞,导致未经授权的访问、远程代码执行和服务器的潜在物理损坏。这一漏洞使其能够在世界上一些最敏感的云环境中获得超级用户身份。在那里,攻击者可以安装勒索软件和间谍恶意软件,在受感染机器的最底层运行。成功的攻击者还可能对服务器造成物理损坏或无限期重启循环。

消息来源:Ars Technica
老王点评:在支持远程管理的固件上出现的安全漏洞,那才叫一个防不胜防。

当我第一次知道 DNS 时,我想它应该不会很复杂。不就是一些存储在服务器上的 DNS 记录罢了。有什么大不了的?

但是教科书上只是介绍了 DNS 的原理,并没有告诉你实际使用中 DNS 可能会以多少种方式破坏你的系统。这可不仅仅是缓存问题!

所以我 在 Twitter 上发起了一个提问,征集人们遇到的 DNS 问题,尤其是那些一开始看起来与 DNS 没什么关系的问题。(“总是 DNS 问题”这个梗)

我不打算在这篇文章中讨论如何解决或避免这些问题,但我会放一些讨论这些问题的链接,在那里可以找到解决问题的方法。

问题:网络请求缓慢

如果你的网络比预期的要慢,这是因为某些原因导致 DNS 解析器变慢了。这可能是解析器负载过大或者存在内存泄漏等原因导致的。

我的路由器的 DNS 转发器曾遇到过这个问题,导致我的所有 DNS 请求很慢。我通过重启路由器解决了这个问题。

问题:DNS 超时

一些网友提到由于 DNS 查询超时,他们的网络请求需要耗时 2 秒多甚至 30 秒。这跟“网络请求缓慢”问题类似,但情况要更糟糕,因为 DNS 请求就会消耗掉几秒钟时间。

Sophie Haskins 有一篇关于 Kubernete DNS 超时的博客文章 一次 Kube DNS 踩坑经历

问题:ndots 设置

一些网友提到在 /etc/resolv.conf 中设置 ndots:5 时会出现问题。

下面是从 这篇《Kubernetes 容器荚中 /etc/resolv.conf 里设置 ndots:5 为什么会拖慢你的程序性能》中引用的 /etc/resolv.conf文件。

    nameserver 100.64.0.10
    search namespace.svc.cluster.local svc.cluster.local cluster.local eu-west-1.compute.internal
    options ndots:5

如果你用上面的配置文件,想要查询得域名是 google.com,那么你的程序会调用 getaddrinfo 函数,而它会依次查询以下域名:

  1. google.com.namespace.svc.cluster.local.
  2. google.com.svc.cluster.local.
  3. google.com.cluster.local.
  4. google.com.eu-west-1.compute.internal.
  5. google.com.

简单来说,它会检查 google.com 是不是 search 这一行中的某个子域名。

所以每发起一次 DNS 查询,你都得先等待前 4 次查询失败后才能获取到最终查询结果。

问题:难以判断系统使用的 DNS 解析器

这本身并不是一个问题,但当你遇到 DNS 问题时,一般都会跟 DNS 解析器有关。我没有一种判断 DNS 解析器的万能方法。

下面是我知道的方法:

  • 在 Linux 系统上,最常见的是通过 /etc/resolv.conf 来选择 DNS 解析器。但是也有例外,比如浏览器可能会忽略 /etc/resolv.conf,而是使用 基于 HTTPS 的 DNS DNS-over-HTTPS 服务。
  • 如果你使用的是 UDP DNS,你可以通过 sudo tcpdump port 53 来查看 DNS 请求被发送到了哪里。但如果你使用的是基于 HTTPS 的 DNS 或 基于 TLS 的 DNS DNS over TLS ,这个方法就不行了。

我依稀记得这在 MacOS 系统上会更加令人迷惑,我也不清楚原因。

问题:DNS 服务器返回 NXDOMAIN 而不是 NOERROR

这是我曾经遇到过的一个 Nginx 不能解析域名的问题。

  • 我设置 Nginx 使用一个特定的 DNS 服务器来解析 DNS 查询
  • 当访问这个域名时,Nginx 做了两次查询,第一次是对 A 的,第二次是对 AAAA
  • 对于 A 的查询,DNS 服务器返回 NXDOMAIN
  • Nginx 认为这个域名不存在,然后放弃查询
  • 对于 AAAA 的查询 DNS 服务器返回了成功
  • 但 Nginx 忽略了对 AAAA 返回的查询结果,因为它前面已经放弃查询了

问题出在 DNS 服务器本应该返回 NOERROR 的——那个域名确实存在,只是没有关于 A 的记录罢了。我报告了这个问题,然后他们修复了这个问题。

我自己也写出过这个问题,所以我理解为什么会发生这种情况——很容易想当然地认为“没有要查询的记录,就应该返回 NXDOMAIN 错误码”。

问题:自动生效的 DNS 缓存

如果你在生成一个域名的 DNS 记录之前就访问这个域名,那么这个记录的缺失会被缓存起来。当你第一次遇到这个问题时一定会非常吃惊——我也是去年才知道有这个问题。

缓存的 TTL 就是域名的 起始权限记录 Start of Authority (SOA) 记录的 TTL ——比如对于 jvns.ca ,这个值是一个小时。

问题:Nginx 永久缓存 DNS 记录

如果你在 Nginx 中使用下面的配置:

    location / {
        proxy_pass https://some.domain.com;
    }

Nginx 只会在启动的时候解析一次 some.domain.com,以后不会再对其进行解析。这是非常危险的操作,尤其是对于那些 IP 地址经常变动的域名。它可能平安无事地运行几个月,然后突然在某个凌晨两点把你从床上纠起来。

针对这个问题已经有很多众所周知的方法了,但由于本文不是关于 Nginx 的,所以我不打算深入探讨它。但你第一次遇到它时一定会很惊讶。

这是一篇关于这个问题发生在 AWS 负载均衡器上的 博客文章

问题:Java 永久缓存 DNS 记录

跟上面类似的问题,只是出现在 Java 上:据说 这与你 Java 的配置有关。“JVM 的默认 TTL 设置可能会导致只有 JVM 重启时才会刷新 DNS 记录。”

我还没有遇到过这个问题,不过我那些经常写 Java 的朋友遇到过这个问题。

当然,任何软件都可能存在永久缓存 DNS 的问题,但据我所知它经常出现在 Nginx 和 Java 上。

问题:被遗忘的 /etc/hosts 记录

这是另一种缓存问题:/etc/hosts 中的记录会覆盖你的常规 DNS 设置!

让人迷惑的是 dig 命令会忽略 /etc/hosts 文件。所以当你使用 dig whatever.com 来查询 DNS 信息时,它会告诉你一切正常。

问题:电子邮件未发送 / 将成为垃圾邮件

电子邮件是通过 DNS(MX 记录, SPF 记录, DKIM 记录)来发送和验证的,所以有些电子邮件问题其实是 DNS 问题。

问题:对国际化域名无效

你可以使用非 ASCII 字符甚至是表情符来注册域名,比如 拉屎网 https://?.la

DNS 能够处理国际化域名是因为 ?.la 会被用 punycode 编码将转换为 xn--ls8h.la

尽管已经有了 DNS 处理国际化域名的标准,很多软件并不能很好地处理国际化域名。Julian Squires 的 干掉 Chrome 浏览器的表情符!! 就是一个非常有趣的例子。

问题:TCP DNS 被防火墙拦截

有人提到一些防火墙会允许在 53 端口上使用 UDP 协议,但是禁止 TCP 协议。然而很多 DNS 查询需要在 53 端口上使用 TCP,这可能会导致很难排查的间歇性的问题。

问题:musl 不支持 TCP DNS

很多应用程序使用 libcgetaddrinfo 来做 DNS 查询。musl 是用在 Alpine Docker 容器上的 glibc 替代品。而它不支持 TCP DNS。如果你的 DNS 查询的响应数据超过 DNS UDP 数据包的大小(512 字节)就会出现问题。

我对此仍然不太清楚,我下面我的理解也可能是错的:

  1. muslgetaddrinfo 发起一个 DNS 请求
  2. DNS 服务器发现请求的响应数据太大了,没法放入一个 DNS 数据包中
  3. DNS 服务器返回一个 空截断响应 empty truncated response ,并期望客户端通过 TCP DNS 重新用发起查询
  4. musl 不支持 TCP DNS,所以根本不会重试

关于这个问题的文章:在 Alpine Linux 上的 DNS 解析问题

问题:getaddrinfo 不支持轮询 DNS

轮询 round robin DNS 是一种 负载均衡 load balancing 技术,每次 DNS 查询都会获得一个不同的 IP 地址。显然如果你使用 gethostbyname 做 DNS 查询不会有任何问题,但是用 getaddrinfo 就不行了。因为 getaddrinfo 会对获得的 IP 地址进行排序。

在你从 gethostbyname 切换到 getaddrinfo 时可能完全不会意识到这可能会引起负载均衡问题。

这个问题可能会非常隐蔽,如果你不是用 C 语言编程的话,这些函数调用被隐藏在各种调用库背后,你可能完全意识不到发生了这种改变。所以某次看似人畜无害的升级就可能导致你的 DNS 负载均衡失效。

下面是讨论这个的一些文章:

问题:启动服务时的竞争条件

有人 提到 使用 Kubernete DNS 时遇到的问题:他们有两个同时启动的容器,一旦启动就会立即尝试解析对方的地址。由于 Kubernete DNS 还没有改变,所以 DNS 查询会失败。这个失败会被缓存起来,所以后续的查询会一直失败。

写在最后

我所列举的不过是 DNS 问题的冰山一角,期待大家告诉我那些我没有提到的问题和相关链接。我希望了解这些问题在实际中是如何发生的以及如何被解决的。

(题图:MJ/f512f18e-2e1d-4614-bed1-b0a0c373e14d)


via: https://jvns.ca/blog/2022/01/15/some-ways-dns-can-break/

作者:Julia Evans 选题:lujun9972 译者:toknow-gh 校对:wxy

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

Geary 44 听起来是一个有趣的版本,有一些有用的变化。

geary email app

Geary 是 Linux 上最好的电子邮件客户端 之一,多年来增加了一些相当不错的更新。

它是 GNOME 项目下的一个电子邮件应用,为 GNOME 桌面(不限于)量身定制,支持 IMAP 和 SMTP 协议,使其能够与大多数网络邮件服务完美集成。

几天前,它发布了具有重要改进的新版本。让我们快速浏览一下这些内容。

? Geary 44:有什么新内容?

a screenshot of geary 44's about page

Geary 44 是一个相对较小的版本,有两个重要的补充。第一个是重新设计的标题栏,第二个是重新设计的对话列表。

新的“选择”按钮已添加到搜索按钮附近的标题栏中,并且消息视图工具栏图标的位置已更改。

a screenshot of the inbox view on geary 44

当我们上次查看 Geary 时,它有不同的对话列表布局。但现在,重新设计的对话列表让邮件阅读体验变得更好

你知道,这让我想知道 Geary 的这个版本与即将重新设计的 Thunderbird 相比会如何。你可能需要做出一些选择,是吗??

?️ 其他更改和改进

除了上面提到的之外,还有一些值得注意的变化:

  • 修复网络检测问题。
  • 各种用户界面翻译改进。
  • 系统挂起时使用挂起引擎。
  • 多个错误修复和用户界面调整。

你可以浏览 发行说明 以了解有关此版本的更多信息。

? 获取 Geary 44

你可以从 GitLab 上提供的源代码构建 Geary,也可以从 Flathub 商店 获取它。

Geary 44 (Flathub)

? 如果你要尝试此版本的 Geary,请告诉我们!


via: https://news.itsfoss.com/geary-44-release/

作者:Sourav Rudra 选题:lkxed 译者:geekpi 校对:wxy

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

现存最古老的发行版 Slackware 已经 30 岁了

本周,Slackware Linux 项目庆祝其成立 30 周年。Slackware 1.0 版本于 1993 年 7 月 16 日发布,它是目前仍在积极维护和开发的最古老的 Linux 发行版,虽然它不是第一个 Linux 发行版。最让人敬佩的是,其创始人至今仍在维护该项目。他说,“这真的是一段非凡的旅程,我在 1993 年开始时根本无法预料。”当前版本 Slackware 15 于 2021 年进入测试阶段,并于去年初发布。顺便说一句,MCC Interim Linux 可以说是第一个发行版,它的第一个候选版本 0.97 在 1991 年内核发布几个月后就出现了。Debian 比 Slackware 稍微年轻一点,是在 Slackware 发布两个月后发布的。

消息来源:The Register
老王点评:Slackware 是我用过的第一个 Linux 发行版,那应该是 1997 年或 1998 年。而我那时最喜欢的发行版是 Mandrake。

黑客之王凯文·米特尼克去世

凯文·米特尼克 Kevin Mitnick ,曾被称为 “世界头号通缉黑客”,于上周日去世,享年 59 岁。他曾因侵入和篡改公司计算机网络而入狱服刑,2000 年获释后开始了新的职业生涯,担任安全顾问、作家和公共演讲人。他最为人熟知的是 20 世纪 90 年代的疯狂犯罪,当时他从美国各地的电脑中窃取了成千上万的数据文件和信用卡号码。他利用自己的技能进入美国的电话和手机网络,破坏政府、企业和大学的计算机系统。1995 年,经过长达两年多的追捕,他被美国联邦调查局抓获。

消息来源:Engadget
老王点评:这是一个传奇,虽然是那种以破坏为目的的“黑客”,但依然是传奇的一生。

苹果正在开发自己的人工智能大模型

据报道,苹果正在开发自己的大语言模型以及类似 ChatGPT 的 AI 工具。苹果的大模型代号 “Ajax”,苹果还创建了一个聊天机器人服务,一些工程师称之为 “Apple GPT”。苹果有多个团队在 AI 项目上展开合作,它已成为苹果的一大重要工作。苹果员工表示这项工作基本上是对 Bard、ChatGPT 的复制,并不包含任何新功能或新技术。苹果正在积极改进模型,但目前没有向消费者发布的计划。

消息来源:彭博社
老王点评:苹果在这一点上已经大大落后,不知道什么时候它的 Siri 才可以变聪明。

自打 LLUG 北京活动举办,大家就开始纷纷希望 LLUG 能够在自己所在的城市中举办,其中,呼声最高的,莫过于上海。

终于,大家千呼万唤的 LLUG 上海,来了。

7 月 23 日下午,我们将在上海举办 LLUG 线下活动,和大家一起聊聊 Linux 和开源技术方面的新动态,给 Linux 爱好者们送些小福利,以及邀请业界大咖,来给大家做个线下分享。本次我们分享的主题是:社区与云

具体议程如下:

时间议程演讲者
14:00 - 14:30签到
14:30 - 15:00《浅谈云计算架构设计》肖力某创业公司技术合伙人,腾讯云 TVP,中国商业联合会互联网应用工作委员会智库专家
15:00 - 15:10《龙蜥技术认证课程介绍》蔡佳丽龙蜥社区运营委员
15:10 - 15:30茶歇
15:30 - 16:00LCTT Tools 发布白宦成(Bestony)Linux 中国技术负责人
16:00 - 16:30神秘话题老王(wxy)Linux 中国创始人
16:30 - 17:30闪电演讲 & 自由交流

活动信息

活动主办方:Linux 中国

联合主办方:龙蜥社区(OpenAnolis)

活动支持:奇虎 360、图灵社区、SlashData

活动地点:上海市普陀区云岭东路570号

活动时间:2023 年 7 月 23 日,下午 14:00 ~ 17:00

报名方式:点击链接报名,或扫描下方二维码提交报名信息

如果你要来现场,不妨扫码加群,和我们更早的交流起来。到时候,咱们现场见!

One More Thing

我们将会在活动现场举办线下抽奖,如果来到现场,别忘了参与互动,进行线下的抽奖哦~我们为大家准备了技术图书、小米背包、充电头等精选好物,期待在现场见到你哦~

本章将介绍如何在 Bash Shell 脚本中使用数组。学习添加元素、删除元素和获取数组长度。

在本系列的前面部分中,你了解了变量。变量中可以有单个值。

数组内部可以有多个值。当你必须一次处理多个变量时,这会使事情变得更容易。你不必将各个值存储在新变量中。

因此,不要像这样声明五个变量:

distro1=Ubuntu
distro2=Fedora
distro3=SUSE
distro4=Arch Linux
distro5=Nix

你可以在单个数组中初始化它们所有:

distros=(Ubuntu Fedora SUSE "Arch Linux" Nix)

与其他一些编程语言不同,你不使用逗号作为数组元素分隔符。

那挺好的。让我们看看如何访问数组元素。

在 Bash 中访问数组元素

使用索引(数组中的位置)访问数组元素。要访问索引 N 处的数组元素,请使用:

${array_name[N]}
? 与大多数其他编程语言一样,Bash Shell 中的数组从索引 0 开始。这意味着第一个元素的索引为 0,第二个元素的索引为 1,第 n 个元素的索引为 n-1

因此,如果你想打印 SUSE,你将使用:

echo ${distros[2]}

Example of accessing array elements in bash shell

? ${ 之后或 } 之前不能有任何空格。你不能像 ${ array[n] } 那样使用它。

一次访问所有数组元素

假设你要打印数组的所有元素。

你可以一一使用 echo ${array[n]} 但这确实没有必要。有一个更好更简单的方法:

${array[*]}

这将为你提供所有数组元素。

Accessing all array elements at once in bash shell

在 Bash 中获取数组长度

如何知道数组中有多少个元素? 有一个专门的方法 在 Bash 中获取数组长度

${#array_name[@]}

就这么简单,对吧?

Get array length in bash

在 Bash 中添加数组元素

如果必须向数组添加其他元素,请使用 += 运算符 将元素追加到 Bash 中的现有数组

array_name+=("new_value")

这是一个例子:

Append new element to array

? 追加元素时使用 () 很重要。

你还可以使用索引将元素设置在任何位置。

array_name[N]=new_value

但请记住使用正确的索引编号。 如果在现有索引上使用它,新值将替换该元素。

如果你使用“越界”索引,它仍会添加到最后一个元素之后。例如,如果数组长度为 6,并且你尝试在索引 9 处设置新值,则该值仍将作为最后一个元素添加到第 7 个位置(索引 6)。

删除数组元素

你可以使用 Shell 内置的 unset 通过提供索引号来删除数组元素:

unset array_name[N]

这是一个示例,我删除了数组的第四个元素。

Delete array element in bash

你还可以通过 unset 来删除整个数组:

unset array_name
? Bash 中没有严格的数据类型规则。你可以创建一个同时包含整数和字符串的数组。

?️ 练习时间

让我们练习一下你所学到的有关 Bash 数组的知识。

练习 1:创建一个 Bash 脚本,其中包含五个最佳 Linux 发行版的数组。全部打印出来。

现在,用 “Hannah Montanna Linux” 替换中间的选择。

练习 2:创建一个 Bash 脚本,该脚本接受用户提供的三个数字,然后以相反的顺序打印它们。

预期输出:

Enter three numbers and press enter
12 23 44
Numbers in reverse order are: 44 23 12

我希望你喜欢通过本系列学习 Bash Shell 脚本。在下一章中,你将学习如何使用 if-else。敬请关注。

(题图:MJ/09477e2f-2bf9-4fdf-bc1e-c894a068adf2)


via: https://itsfoss.com/bash-arrays/

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

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