PXE-Boot

调试环境

虚拟机一个,选择VMware个人免费版,这个版本不能直接设置UEFI启动,但是可以修改虚拟机的配置文件添加配置,在虚拟机存放目录里面一个后缀是 vmx 的文件,添加下面配置,默认是没有这个选项的,直接添加到末尾就可以。虚拟机多余的磁盘声卡全部删除,然后只留下一张网卡用来启动。

firmware = "efi"

启动Arch

根据Arch官方的教程,很容易就能引导起来,tftp服务器只是用来加载内核和微码镜像,rootfs 并没有使用tftp传输,因此启动完之后,会让你选择 http/nbd/nfs 其中的一种方式加载rootfs。

另外还有一个问题,把 dnsmasq 直接绑定在物理网卡上面,DHCP 始终无法正常工作,需要创建一个网卡,然后把物理网卡桥接到刚刚创建的网卡上面,然后将 dnsmasq 的 DHCP 监听端口绑定到这个桥接网卡上。最后还需要手动给网卡配置 IP 地址,就是网关的地址192.168.100.1

# disable dns server
port=0

# enable tftp server
enable-tftp
tftp-root=/srv/tftp

interface=br0
bind-interfaces
dhcp-range=lan,192.168.100.100,192.168.100.120,255.255.255.0,12h
dhcp-boot=/arch/boot/syslinux/lpxelinux.0
dhcp-option-force=209,boot/syslinux/archiso.cfg
dhcp-option-force=210,/arch/
dhcp-option-force=option:tftp-server,192.168.100.1
dhcp-option=option:router, 192.168.100.1

关于选项中代码和别名的对照表可以执行命令dnsmasq --help dhcp获取到,其中 209 是config-file,210 是 path-prefix这两个是pxelinux自身的参数。

使用动态令牌连接远程服务器

早期的网游似乎会让,玩家购买动态令牌绑定账户,提高游戏安全性,在那个木马横飞的年代,这种做法很有必要,不过现在的大数据风控加上手机短信验证,似乎比动态令牌来的安全,并且方便,毕竟手机随时随地都带着。

动态令牌产生一串简单的数字,能不能很好的保证安全,以前的我是挺怀疑的。工作原理并不显得复杂,过程就是对一串实现预置的密钥Key使用时间加盐,然后计算哈希值,并且保证30s内的哈希值都是一样的,服务端也保留着这个Key,验证的使用取出这个Key以同样的算法计算然后对比,特点是令牌有时效性,过一会儿就不能用了,为了排除时间不同步带来的偏差,当前时间产生的令牌的下一个或者上一个都是有效的,这种方法称为TOTP。另外一种是基于使用次数而变化算法,称为HOTP,把时间替换成计数器,每使用一次,计数器就加一,令牌也发生变化。上面QQ令牌就是使用TOTP,但不一定是标准协议。事实上如果最开始的Key就泄露了,那么根据Key计算出动态令牌也是很简单,之所以比密码安全,是因为将Key托管给了第三方的软件或者硬件,软件有Google 身份验证器,支持HOTP和TOTP,不支持同步不支持导出,也就是说除了在当前手机上面使用,除此之外,只能重新生成密钥。

![Google 身份验证器](../images/2019/winter/Google 身份验证器.webp)

Go通过D-bus直接与systemd通讯

systemd

systemd是一套软件,是Linux系统下面的第一个进程,用来初始化系统的各种任务,提供计划任务、电源管理、挂载磁盘、DNS解析、系统日志、网络配置等等,甚至使用systemd-boot替代Grub,大概感觉就是systemd能接管的,最后都会用systemd

systemctl是用来管理任务的,最直接的操作包括:启动、停止、重启、查看状态。

# 启动 caddy 服务
systemctl start caddy

这个命令是给维护人员在命令行上面使用的,虽然偶尔会偷懒,使用ifconfig命令获取IP地址之类的不是很骚的操作,但是调用二进制执行某些任务,最多只能知道成功了没有,这期间不包括某个命令找不到,缺乏执行权限,版本差异导致获取不到预期输出等等问题,最合适的做法是使用软件提供的开放接口执行命令。

PVE卡在initramfs-fsck检查无法顺利启动的解决

没有显示器,正常不关机,结果一次读写错误,只能重启,结果没开机,只能搬出显示器,接上键盘,过程实在麻烦。

简单说就是fsck检查没通过,需要手动解决,错误内容大概和下面差不多,我没有记录:

/dev/mapper/pve-data UNEXPECTED INCONSISTENCY; 
RUN fsck MANUALLY 
fsck excited with status code 4 
Failure: File system check of the root filesystem failed 
The root filesystem on /dev/mapper/pve-data requires a manual fsck

可以通过修改内核参数,强制跳过或者强制修复可能存在的错误。修改文件/etc/default/grub,找到

GRUB_CMDLINE_LINUX_DEFAULT

这个是内核启动参数,在后面添加:fsck.mode=force fsck.repair=yes,然后执行:

sudo update-grub

记录一下,开始使用tmux

之前一直使用screen,其目的也只是限于在断开服务器之后,任务不会给中断,以及可以看到之前任务的输出。换成tmux也差不多是这个目的,之前也自己尝试使用,自定义了一些配置文件,不过不太习惯,现在重新拿起来看看,顺带做一点笔记。