前言 差不多四年半前, 我把博客系统从 Typecho 迁移到了 Hexo 。Hexo 是一款静态网页生成器(Static Site Generator),本身无需连接 MySQL、PostgreSQL 等数据库动态生成网页,而是根据给定的 Markdown 文章文件一次性生成所有的 HTML 网页。相比于 WordPress、Typecho 等动态方案,预先生成静态网页不需要服务器支持 PHP 等动态语言,对服务器的性能压力更低。 但是 Hexo 本身并不新, 它的第一个版本发布于 2013 年 7 月 。当时以 React 为首的单页应用框架刚刚发布(React:2013 年 5 月),Webpack 等现代前端流程必须的框架也还不存在(Webpack:2014 年 2 月),因此 Hexo 理所当然的没有用上这些工具,而是停留在拼接 HTML 字符串的时代。Hexo 常用的几个主题模板系统 EJS,Pug 等都是基于字符串拼接的模板系统。 没有了现代前端流程,就意味着: 我需要手动处理拼接 HTML 的所有细节。每次修改模板都让我想起写 PHP 的美好时光。...
NixOS 系列(五):制作小内存 VPS 的 DD 磁盘镜像
NixOS 系列文章目录: NixOS 系列(一):我为什么心动了 NixOS 系列(二):基础配置,Nix Flake,和批量部署 推荐阅读: NixOS 与 Nix Flakes 新手入门 ,作者 Ryan Yin NixOS 系列(三):软件打包,从入门到放弃 NixOS 系列(四):「无状态」操作系统 NixOS 系列(五):制作小内存 VPS 的 DD 磁盘镜像 黑色星期五已经过了,相信有一些读者新买了一些特价的 VPS、云服务器等,并且想在 VPS 上安装 NixOS。但是由于 NixOS 的知名度不如 CentOS、Debian、Ubuntu 等老牌 Linux 发行版,几乎没有 VPS 服务商提供预装 NixOS 的磁盘镜像,只能由用户使用以下方法之一手动安装: 自行挂载 NixOS 的安装 ISO 镜像,然后手动格盘安装。 由于你可以在 NixOS 安装镜像的环境中随意操作 VPS 的硬盘,这种方法自由度最高,可以任意对硬盘进行分区,指定文件系统格式。但是,使用这种方法前,你的主机商需要在以下三项前提中满足任意一项:...
从零开始实现 Nix 三角函数库
(题图来自: 维基百科 - 三角函数 ) 起因 我想计算我的所有 VPS 节点之间的网络延迟,并把延迟写入 Bird BGP 服务端的配置中,以便让节点之间的数据转发经过延迟最低的路径。但是,我的节点截至今天有 17 个,我不想在节点之间手动两两 Ping 获取延迟。 于是我想了一种方法:标记所有节点所在物理地点的经纬度,根据经纬度计算物理距离,再将距离除以光速的一半即可获得大致的延迟。我随机抽样了几对节点,发现她们之间的路由都比较直,没有严重的绕路现象,此时物理距离就是一个可以满足我要求的近似值。 因为我的节点上用的都是 NixOS,统一使用 Nix 语言管理配置,所以我需要找到一种在 Nix 中计算这个距离的方法。一种常用的根据经纬度算距离的方法是半正矢公式(Haversine Formula),它将地球近似为一个半径为 6371 公里的球体,再使用以下公式计算经纬度之间的距离: 参考资料: 维基百科 - 半正矢公式 h = h a v ( d r ) = ( h a v ( φ 2 − φ 1 )...
解决 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 全称 Decentralized Network 42(42 号去中心网络),是一个大型、去中心化的 VPN 网络。详细的介绍可以在 DN42 实验网络介绍及注册教程 这篇文章看到。 DN42 是一个 测试网络 ,所有人都在帮助所有人。即使你不小心搞砸了,也没有人会指责你。你可以在 DN42 的 IRC 频道 , 邮件列表 或者 非官方 Telegram 群组 寻求帮助。 由于 DN42 是一个实验用网络,其中也有很多新手、小白参与,因此时不时会有新手配置出现错误,而对整个 DN42 网络造成影响,甚至炸掉整个网络。 现在,作为一名长者(x),我将教各位小白如何操作才能炸掉 DN42,以及如果你作为小白的邻居(指 Peer 关系),应该如何防止他炸到你。 注意:你不应该在 DN42 网络中实际执行这些操作,你应该更加注重对破坏的防御。 恶意破坏会导致你被踢出 DN42 网络。 本文信息根据 Telegram 群及 IRC 中的 真实惨案 改编。 更新记录 2023-05-12:增加修改 BGP Localpref 导致环路的内容。...
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)。...
修改 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 点击右上角三个点的菜单,选择保存。...
老款 HP 工作站配置 NAS+软路由笔记
我买了一台 HP 的老款工作站,用作家里的 NAS+软路由。本文简单记录这台工作站的配置过程。 硬件选择 NAS 的硬件主要有这些选择: 成品 NAS(如群晖) 优点:开箱即用。 缺点: 价格贵,到了「买系统送硬件」的程度。 而且与各种 Linux 发行版相比,NAS 的原厂系统难以定制。 二手服务器 优点: 便宜,在保修期结束后,这些服务器大都被数据中心当作废品处理,然后被以极低的成本回收,翻新后二次售卖。 稳定,这些服务器在设计时就考虑了长期运行,并且一直在温湿度稳定、无尘的数据中心中运行。 缺点: 噪音大,需要自行修改系统配置降低风扇转速,更换静音风扇,或者加装风扇减速线。 体积大(主要针对机架式服务器)。 专用配件,服务器厂商会定制各种配件供特定型号使用,如果你有扩展需求,需要加价购买这些专用配件。 二手工作站 优点: 便宜、稳定,与二手服务器相同。 噪音小,毕竟工作站是放在办公桌边,而不是在机房里使用的。 缺点: 专用配件,...
NixOS 系列(四):“无状态”操作系统
NixOS 系列文章目录: NixOS 系列(一):我为什么心动了 NixOS 系列(二):基础配置,Nix Flake,和批量部署 推荐阅读: NixOS 与 Nix Flakes 新手入门 ,作者 Ryan Yin NixOS 系列(三):软件打包,从入门到放弃 NixOS 系列(四):「无状态」操作系统 NixOS 系列(五):制作小内存 VPS 的 DD 磁盘镜像 更新记录: 2023-02-18:在「移动 Nix Daemon 的临时文件夹」一段,修正配置不对 root 用户生效的问题。 NixOS 广为人知的一大特点是,系统大部分软件的设置都由 Nix 语言的配置文件统一生成并管理。即使这些软件在运行时修改了自己的配置文件,在下次切换 Nix 配置或者系统重启时,NixOS 也会将配置文件重新覆盖。 例如,在运行 NixOS 的电脑上运行 ls -alh /etc ,可以看到大部分配置文件都只是到 /etc/static 的软链接: # 省略部分不相关的行 lrwxrwxrwx 1 root root 18 Jan 13 03:...
NixOS 系列(三):软件打包,从入门到放弃
NixOS 系列文章目录: NixOS 系列(一):我为什么心动了 NixOS 系列(二):基础配置,Nix Flake,和批量部署 推荐阅读: NixOS 与 Nix Flakes 新手入门 ,作者 Ryan Yin NixOS 系列(三):软件打包,从入门到放弃 NixOS 系列(四):「无状态」操作系统 NixOS 系列(五):制作小内存 VPS 的 DD 磁盘镜像 NixOS 的一大特点是,系统所有的二进制程序和库文件都在 /nix/store 目录中,由 Nix 包管理器管理。这也意味着,NixOS 不符合 Linux 的 FHS 标准 ,它的 /lib 或 /lib64 目录下不存在类似 ld-linux-x86-64.so.2 之类的库文件动态加载器,更不存在 libc.so 之类的库文件。因此,除非静态链接,否则为其它 Linux 下编译的二进制文件将完全无法在 NixOS 下运行。 所以,要在 NixOS 上使用尚不存在于 Nixpkgs 仓库中的软件,最佳方案是自己用 Nix 语言写一份打包脚本,给这个软件打一个包,然后把打包定义加入 configuration.nix 中,从而安装到系统上。...