插图

从零开始实现 Nix 三角函数库

(题图来自:维基百科 - 三角函数)起因我想计算我的所有 VPS 节点之间的网络延迟,并把延迟写入 Bird BGP 服务端的配置中,以便让节点之间的数据转发经过延迟最低的路径。但是,我的节点截至今天有 17 个,我不想在节点之间手动两两 Ping 获取延迟。于是我想了一种方法:标记所有节点所在物理地点的经纬度,根据经纬度计算物理距离,再将距离除以光速的一半即可获得大致的延迟。我随机抽样了几对节点,发现她们之间的路由都比较直,没有严重的绕路现象,此时物理距离就是一个可以满足我要求的近似值。因为我的节点上用的都是 NixOS,统一使用 Nix 语言管理配置,所以我需要找到一种在 Nix 中计算这个距离的方法。一种常用的根据经纬度算距离的方法是半正矢公式(Haversine Formula),它将地球近似为一个半径为 6371 公里的球体,再使用以下公式计算经纬度之间的距离:参考资料:维基百科 - 半正矢公式 h=hav(dr)=(hav(φ2−φ1)+cos⁡(φ1)cos⁡(φ2)...
插图

解决 Pipewire 被 SIGKILL 的问题

症状我频繁遇到 Pipewire 音频框架突然停止运行的情况:问题通常出现在我的笔记本电脑连接 / 断开电源的时候,此时我的电脑会因为切换性能模式卡顿一小段时间;systemctl --user status pipewire.service 只能看到 Pipewire 进程被 SIGKILL 信号终止,没有其它有用的日志信息;coredumpctl 和 dmesg 里也找不到 Coredump 内存转储事件的记录。原因Pipewire 进程运行时具有实时优先级,其调度需求被最优先满足,以便及时处理音频数据,避免音频卡顿。Pipewire 提高进程优先级是通过它的 libpipewire-module-rt 模块请求系统中以 root 权限运行的 RTKit(Realtime Kit)服务,然后 RTKit 以特权修改进程优先级来达成的。但是,如果一个具有实时优先级的进程出了 Bug,进入了死循环,那么它会占用所有的 CPU 资源。系统上绝大部分其它进程(包括但不限于 SSH 服务端,Xorg,还有你的 Shell)由于优先级更低,就无法得到任何 CPU 时间片,无法处理任何任务,...
插图

如何引爆 DN42 网络(2023-05-12 更新)

DN42 是一个测试网络,所有人都在帮助所有人。即使你不小心搞砸了,也没有人会指责你。你可以在 DN42 的 IRC 频道,邮件列表或者非官方 Telegram 群组寻求帮助。由于 DN42 是一个实验用网络,其中也有很多新手、小白参与,因此时不时会有新手配置出现错误,而对整个 DN42 网络造成影响,甚至炸掉整个网络。现在,作为一名长者(x),我将教各位小白如何操作才能炸掉 DN42,以及如果你作为小白的邻居(指 Peer 关系),应该如何防止他炸到你。注意:你不应该在 DN42 网络中实际执行这些操作,你应该更加注重对破坏的防御。恶意破坏会导致你被踢出 DN42 网络。本文信息根据 Telegram 群及 IRC 中的真实惨案改编。更新记录2023-05-12:增加修改 BGP Localpref 导致环路的内容。2020-08-27:格式修改,添加完整 IRC 日志,部分内容的中文翻译,添加另一段地址掩码填错的内容,以及 ASN 少了一位的内容。2020-07-13:添加 Registry IPv6 地址段掩码填错的内容,...

Optimus MUXed 笔记本上的 NVIDIA 虚拟机显卡直通(2023-05 更新)

一年前,为了能够一边用 Arch Linux 浏览网页、写代码,一边用 Windows 运行游戏等没法在 Linux 上方便地完成的任务,我试着在我的联想 R720 游戏本上进行了显卡直通。但是由于那台电脑是 Optimus MUXless 架构(前文有各种架构的介绍),也就是独显没有输出端口、全靠核显显示画面,那套配置的应用受到了很大的阻碍,最后被我放弃。但是现在,我换了台新电脑。这台电脑的 HDMI 输出接口是直连 NVIDIA 独立显卡的,也就是 Optimus MUXed 架构。在这种架构下,有办法让虚拟机识别到一个「独显上的显示器」,从而正常启用大部分功能。于是,我终于可以配置出一套可以长期使用的显卡直通配置。更新日志2023-05-08:针对新版 Looking Glass B6 更新部分内容。2022-01-26:PCIe 省电补丁实测无效。准备工作在按照本文进行操作前,你需要准备好:一台 Optimus MUXed 架构的笔记本电脑。我的电脑型号是 HP OMEN 17t-ck000(i7-11800H,RTX 3070)。(2022-01)...

修改 APN 解决 AOSP ROM 上中国电信无法 4G 漫游问题

由于我的一加 8T 官方系统维护周期即将结束,我给手机刷上了 Nameless OS,一个基于 Lineage OS 的第三方安卓 ROM。但是刷入后,我发现我的中国电信手机卡无法连接本地运营商的 4G 网络进行国际漫游,只有 2G 或 3G 信号。由于本地运营商近期正在进行 2G、3G 退网,手机的漫游信号很差,收发短信都有很大延迟,也无法连接 VoLTE 进行正常通话。我测试了其它的基于 Lineage OS 的第三方 ROM,都有类似的问题。多次尝试后,我发现问题似乎出在手机的 APN 设置上。我说「似乎」是因为修改 APN 解决了我的问题,但我完全不明白为什么能行,也不确定这就是正确的解决方法。我解决问题的操作步骤如下:进入手机设置 - SIM 卡 - 中国电信 - APN 设置。点击「中国电信 NET 设置」(ctnet)进入详细设置。把 APN 类型一项(APN Type)修改为:default,supl,dun,ims原始值是 default,supl,dun点击右上角三个点的菜单,选择保存。选中「中国电信 NET 设置」右边的单选按钮,...

老款 HP 工作站配置 NAS + 软路由笔记

我买了一台 HP 的老款工作站,用作家里的 NAS + 软路由。本文简单记录这台工作站的配置过程。硬件选择NAS 的硬件主要有这些选择:成品 NAS(如群晖)优点:开箱即用。缺点:价格贵,到了「买系统送硬件」的程度。而且与各种 Linux 发行版相比,NAS 的原厂系统难以定制。二手服务器优点:便宜,在保修期结束后,这些服务器大都被数据中心当作废品处理,然后被以极低的成本回收,翻新后二次售卖。稳定,这些服务器在设计时就考虑了长期运行,并且一直在温湿度稳定、无尘的数据中心中运行。缺点:噪音大,需要自行修改系统配置降低风扇转速,更换静音风扇,或者加装风扇减速线。体积大(主要针对机架式服务器)。专用配件,服务器厂商会定制各种配件供特定型号使用,如果你有扩展需求,需要加价购买这些专用配件。二手工作站优点:便宜、稳定,与二手服务器相同。噪音小,毕竟工作站是放在办公桌边,而不是在机房里使用的。缺点:专用配件,与二手服务器相同。...
插图

NixOS 系列(四):「无状态」操作系统

NixOS 系列文章目录:NixOS 系列(一):我为什么心动了NixOS 系列(二):基础配置,Nix Flake,和批量部署推荐阅读:NixOS 与 Nix Flakes 新手入门,作者 Ryan YinNixOS 系列(三):软件打包,从入门到放弃NixOS 系列(四):「无状态」操作系统更新记录:2023-02-18:在「移动 Nix Daemon 的临时文件夹」一段,修正配置不对 root 用户生效的问题。NixOS 广为人知的一大特点是,系统大部分软件的设置都由 Nix 语言的配置文件统一生成并管理。即使这些软件在运行时修改了自己的配置文件,在下次切换 Nix 配置或者系统重启时,NixOS 也会将配置文件重新覆盖。例如,在运行 NixOS 的电脑上运行 ls -alh /etc,可以看到大部分配置文件都只是到 /etc/static 的软链接:123456789101112# 省略部分不相关的行lrwxrwxrwx 1 root root 18 Jan 13 03:02 bashrc -> /etc/static/bashrclrwxrwxrwx 1 root root 18 Jan 13 03:...
插图

NixOS 系列(三):软件打包,从入门到放弃

NixOS 系列文章目录:NixOS 系列(一):我为什么心动了NixOS 系列(二):基础配置,Nix Flake,和批量部署推荐阅读:NixOS 与 Nix Flakes 新手入门,作者 Ryan YinNixOS 系列(三):软件打包,从入门到放弃NixOS 系列(四):「无状态」操作系统NixOS 的一大特点是,系统所有的二进制程序和库文件都在 /nix/store 目录中,由 Nix包管理器管理。这也意味着,NixOS 不符合Linux 的 FHS 标准,它的 /lib 或 /lib64 目录下不存在类似 ld-linux-x86-64.so.2 之类的库文件动态加载器,更不存在 libc.so 之类的库文件。因此,除非静态链接,否则为其它 Linux 下编译的二进制文件将完全无法在 NixOS 下运行。所以,要在 NixOS 上使用尚不存在于 Nixpkgs 仓库中的软件,最佳方案是自己用 Nix 语言写一份打包脚本,给这个软件打一个包,然后把打包定义加入 configuration.nix 中,从而安装到系统上。关于 NixOS 的软件打包,有三个好消息和两个坏消息。好消息是:...

用逆向工程方式给惠普暗影精灵宏按键编写 Linux 驱动

我前段时间换了台新电脑,惠普的暗影精灵 17t-ck000(美版,应该对应的是国内的暗影精灵 7 Plus)。这台电脑好是好,做工优秀,性能强大,就是有一个问题:它在 Linux 下的驱动支持实在是太烂了。不支持调节风扇转速,你能看到风扇转速,但仅此而已。再加上惠普的默认风扇策略非常激进,即使我开启了 BIOS 中的低温风扇停转功能,它依然在 CPU 温度只有 40 度、显卡空载的情况下转得非常欢快。其实可以用 NBFC 直接写 EC 寄存器来控制,但在某次不幸的事故中当时的配置方案丢失了。我配置 NBFC 时正在新电脑试用 NixOS。事故发生时新电脑上的 NixOS 被我删掉了,而且当时的配置没上传 GitHub。过段时间再重新写一遍(咕咕咕)不支持调整键盘背光颜色,它们在 Windows 下由 OMEN Command Center 软件控制。有时系统崩溃、我长按电源键断电重启时,BIOS 会将键盘背光恢复成默认的五彩斑斓的颜色,此时我只能回到 Windows 进行调节。...

用 NS1 和 UptimeRobot/Freshping 组建超低价 GeoDNS

本文部分内容参考自 https://hostedtalk.net/t/connecting-uptime-robot-with-ns1-dns-api/3883。目标我的 VPS 多且遍布世界各地,但一直以来,我的网站都只用了美国洛杉矶的一台 VPS 提供服务。因为我为了特殊线路、低价等原因购买的都是小服务商的 VPS,而非 DigitalOcean、Vultr 甚至 AWS、Azure 等大厂,这台美国洛杉矶的 VPS 网络有时会不稳定,虽然次数很少,但每次我都得手动临时切换 DNS 到其它 VPS 上,等网络恢复后再切换回来。因此,我希望可以把手头所有的 VPS 都用来提供网站服务,在某台 VPS 宕机时,用 DNS 将流量自动切到其它 VPS 上。由于我的网站使用 Hexo 静态网页生成系统,同步网站数据并无难度:只需要在一台 VPS 上生成文件,再用 Ansible 批量同步到所有 VPS 上即可。但更大的问题是 DNS 的配置。我希望用 GeoDNS 把用户导流到最近的 VPS 上,例如亚洲用户可以访问我的中国香港节点,美国用户可以访问我的美国洛杉矶节点,等等。...