含有标签 Nix 的文章

用 Nix 编译自定义 Android 内核

前言 我现在使用的手机是 Motorola Edge+ 2023,一台 Android 手机。为了更好的自定义手机的功能,我解锁了手机的 Bootloader,并且获取了 Root 权限,以便安装 LSPosed 以及基于 LSPosed 的各种插件。 我使用的 Root 方案是 KernelSU ,通过修改 Linux 内核,从而允许且只允许指定程序获取 Root 权限。虽然 KernelSU 官方提供了适配大部分手机的 GKI 内核镜像,但我给手机刷了不兼容 GKI 的 LineageOS,所以只能自己编译内核。 由于直接修改内核镜像的难度较大,我们一般是从手机厂商获取以 GPLv2 协议开源的内核源码,按照 KernelSU 的官方教程 进行修改后,再编译成完整的内核。 注:现在有一种新的 Root 方案 APatch ,通过直接修改内核镜像来实现类似 KernelSU 的功能。我没试过 APatch,但如果你不想自己编译内核,可以尝试一下。 由于 KernelSU 使用广泛,有一些开发者编写了 GitHub Actions 的 Workflow,例如 https://github....

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

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

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