复制 btrfs 分区到另一块硬盘
双十一来了,我入手了心心念念的致钛Ti 7100 plus。 但是迟迟没有将它换到我的笔记本上,直到这周末,才终于有时间将数据迁移到新盘上面,可惜的是,我的 $HOME 已经在周五晚上的测试打包过程中被误删了,后来回滚到了今年 7 月的快照。不过幸运的是除了我以外没有其他用户被删 $HOME,咱不用被挂在耻辱柱上了。
基本思路
由于 btrfs 有子卷 (subvolume),无法像以前 ext4 时候一样直接用 rsync 同步数据。但是我又不想直接全盘 dd。
在咨询了群友以及在谷歌后,决定使用 dd 来迁移数据。基本步骤是
缩小 btrfs 所在分区
dd 缩小后的分区到新的硬盘上。
开始操作
应某群友的要求,这一部分我尽量详细地介绍具体操作。本操作需要你的电脑具有至少两个 nvme 硬盘位。
拆机换硬盘
电脑关机,拔掉电源。
脱下毛衣等易产生静电的衣物,双手摸墙 10s 放静电
用螺丝刀将电脑后盖拆开。
断开电脑的内置电池。
长按电源键 15s 放电。
顺便清一下灰,这一步可以不做。
换上新的硬盘到另一个槽位。
合上后盖(轻轻合在一起即可,不要拧后盖螺丝)。
复制文件
...
从零开始的 NixOS 教程(Flake篇)
想不到还有人看,本来我都弃坑了,想到有人看,又捡起来了。我的 flake 已经托管到 github 仓库了,目前我还算新手,因此提交信息还比较乱。
安装教程见从零开始的 NixOS 教程(安装篇)。
Nix 系列最吸引我的地方之一就在于 flake 了,我们可以把所有的 flake 托管到 GitHub, 然后在服务器上引入。这样简简单单就备份好了各种配置文件。重装系统或者批量部署非常容易。
简单说明 Nix 的语法
我在写 flake 的时候,最痛苦的就是不知道要怎么写,也不知道该去哪里学。后来慢慢读了一些文档,但是也还是不会写。直到我看到了 nix pills. 对 nix 的机制有了一些了解,才算比较会用/会写 nix 了。
Nix 是一个函数式编程语言,我们需要注意的通常就三点:
{} 是一个 set, 不是其他语言中的作用域的概念。
p:q 是一个函数,接受一个参数 p,输出一个 q.
某些 .nix 文件需要遵守特定的格式(包含且只能包含某些特定的属性,比如 flake.nix)
开始抄一个 Flake
我们在上一篇教程里面已经开启了 flake 支 ...
certbot 自动更新 DNSPOD 泛域名证书
最近我把服务器上的证书全换成泛域名证书了。域名比较多的话,每一个域名都要申请一份证书,虽然可以用 certbot 自动续期,但是因为不同的域名证书不一样,在写 nginx 配置的时候比较麻烦。
由于 certbot 已经支持了 泛域名证书的申请,所以我们可以申请泛域名证书,然后为泛域名证书自动续期就好了。假设我们的域名是 askk.cc,我希望为 askk.cc 与 *.askk.cc 申请一份证书。
具体步骤
首先,我们需要一个软件包:certbot-dns-dnspod, arch 用户的话,我已经打包好了certbot-dns-dnspod-git.
安装上该软件包之后,去 DNSPOD 申请 APIKEY. 具体做法参考 腾讯云 DNSPod 域名 API 申请 Let’s Encrypt 泛域名 SSL 证书过程记录。
然后记录下ID 与 KEY,写到文件里(我写到 /etc/letsencrypt/dnspod.ini) 记得将文件权限设置为 600。
123# cat /etc/letsencrypt/dnspod.inidns_dnspod_api_id="Y ...
从巨潮资讯爬取上市公司公告
背景
最近闲着没什么事,就帮同学写了个爬取巨潮资讯上市公司公告的 python 脚本,根据公司的股票代码以及公告的日期自动下载公告( pdf 或者 html 格式)。
脚本开源在 cninfo-crawler。
刚开始本来想用 selenium 爬的,结果搞到一半发现完全没有反爬,就直接用 requests 库了。
爬取过程
我们先进入巨潮资讯主页,打开 F12 开发人员工具,再随便搜索一个公司的股票代码跟公告日期。
点击查询,然后关注右边开发者工具捕捉到的消息,将它们按照 Type 排序,我们要找的应该在 xhr 里面,而且方法应该是 POST。
一眼我们就发现 query 特别可疑,点开它看看。
先看标头 POST 再看载荷
这个应该就是我们搜索的时候填的表单,stock 里面的 300409 就是股票代码, 但是那个 9900023868 是啥,不太懂。 seDate 就是我们查询的时间段。其他参数不用改。
获取下载链接
看一下预览,很明显 adjunctUrl 就是下载链接了,可惜这是个相对链接,
我们先点进去看一看,刚开始我尝试从 公告下载 捕获下载链接,但是事实证 ...
从零开始的 NixOS 教程(安装篇)
前言
与 archlinux 不同, NixOS(以下简称 Nix)因其可复现构建的特性而更加适合服务器。简单来说,在 archlinux 上,你在不同的时间构建同一个版本的软件,构建出来很可能是不一样的,而在 Nix 上,不同时间构建出来的同一份软件应当是二进制级别的相同,而这种特性就非常适合服务器。同时 Nix 每个包的依赖都是独立的,都放在 /nix/store下面的子文件夹,文件夹名称通常是 对应构建的 id,不同版本的依赖直接自动链接到对应的文件。 但是 Nix 由于不支持 FHS 规范,个人认为不太适合当成个人电脑的系统,个人电脑上也不需要可复现的构建(至少我作为打包者也不关心,我只要最新的,不要可复现)。还有就是 Nix 应该会在 /nix/store 下面存放好多个不同版本的软件(作为依赖引入嘛),所以磁盘空间会消耗得比较快(服务器上当然无所谓啦)。
闲话就说到这。我之前申请了甲骨文的 ARM 免费服务器,配置为 4c24g,100G. 由于 arch 没有官方的 arm 支持,所以后来装了 Nix, 但是我还不太会 Nix, 当时是用 cloudinit 脚本一键安装 ...
使用 mitmproxy 抓包 https
这一次是要抓腾讯会议的包,前段时间有人在 AUR 给我维护的 wemeet-bin 标记了过期,并提供了新的版本号,但是,腾讯会议的下载链接不能由版本号完全确定。例如 https://updatecdn.meeting.qq.com/cos/60bbaecfb3bf32615331b07d46001353/TencentMeeting_0300000000_3.10.0.400_x86_64_default.publish.deb 这个链接中 60bbaecfb3bf32615331b07d46001353 的含义不明(其实是 deb 包 的 md5sum),我们没法由版本号推断出下载链接。因而只能跟随官网更新。
一开始我尝试按照 使用 wireshark 抓包 svstudio 的经验,采用了 SSLKEYLOGFILE 环境变量,但是发现完全没有用, QT 的应用不吃这个环境变量[^1],没有办法使用 Wireshark 来抓包。后来在群友的推荐下使用 mitmproxy 来抓包。
具体步骤
安装
首先安装 mitmproxy
1yay -S mitmproxy
然后执行 mitm ...