制作自定义的 archlinux initramfs 与 rootfs
最近想做一个自定义的 archlinux pxe 启动环境,由于 pxe 走的 tftp, 因此希望 initramfs 尽量小,官方 iso 里面的 initramfs 带了一些 glibc 的动态链接库,因此体积还是比较大的。我打算基于 busybox 去做一个 initramfs, 尽量只包含 busybox 以及网卡驱动,其他一概不加,都放在 rootfs 里面。
最后所有脚本放在 Github 仓库
制作 initramfs
我并不打算从头写 init 脚本,而是尽量抄 mkinitcpio 的代码。首先我们尝试通过自制的 initramfs 引导 archiso 带的 rootfs.
先新建一个文件夹,将 archiso 的 initramfs 复制进去解压
1lsinitcpio -x initramfs-linux.img
看一下目录结构
12345678910111213141516171819202122232425262728293031323334353637383940414243444546➜ initramfs tree -L 2.├── bin -&g ...
PXE 启动 archlinux
本文没有编写完成,以后也许不会更新。
最近想整个 PXE 启动的 archlinux 环境,启动之后像 archiso 一样,跑在内存里面。
实现思路
PXE 启动 grub, 然后走 http 下载 kernel 和 initramfs, 在 initramfs 启动过程中下载 rootfs,最后 switch_root 到 rootfs。
搭建一个 tftp、dhcp、http server
根据 archwiki 的指导,我们用 dnsmasq 作为 tftp 与 dhcp server. 下面是我的 dnsmasq 配置(与软件包内置版本的 diff)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990diff --git a/dnsmasq.conf b/dnsmasq.confindex ...
复制 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 就是下载链接了,可惜这是个相对链接,
我们先点进去看一看,刚开始我尝试从 公告下载 捕获下载链接,但是事实证 ...