指南:将 EXT4 文件系统上的 Arch Linux 迁移至 ZFS

为了享受 ZFS 文件系统的 mirror 带来的数据安全保障,我将 Arch Linux 系统从 ext4 文件系统迁移至了 ZFS 文件系统。相关的限制条件包括:原来的硬盘是 三星 840 EVO 256G,需要与 金士顿 SA400S37 480G 组合成一个 mirror pool,也就意味着需要先从 三星 复制到 金士顿,再把 三星 做成 ZFS,将数据重新复制到三星,然后重启进系统把金士顿 attach 到 三星 变成一个 mirror pool;另外,我不想按照 Arch Linux 的指南对三星进行分区,想要让 ZFS 直接管理整个三星硬盘,所以需要外置引导设备。

阅读更多

Archlinux部署gitlab

Docker 使用docker来部署gitlab-ce,基本上就是两步走:首先创建文件目录,然后编写docker-compose.yml,就完了。 目录结构是这样的: /opt/gitlab/ |– config/ |– data/ |– logs/ `– docker-compose.yml docker-compose.yml的内容修改自官方的文件,主要去除了gitlab-runner的内容1。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37…

为archcn贡献似乎没有意义

今天在翻译archwiki的CN站的PKGBUILD页面的时候,一个念头突然在心里萌生并且迅速占据了上风:我做的这些翻译工作,是没有用的,没有意义的。

为什么这么说呢,因为看的人不会用,会用的人不会看,需求错位。

逐步分析哈,从最广泛的角度来讲,会来搞archlinux的人,英语能力肯定是足以阅读英文版的wiki的;如果连阅读英文维基的能力都没有,那就不会安装archlinux了。

再具体来说,当一个人已经开始contribute package,那么他一定知道一个事实:英文版的内容是up to date的,按照英文版的内容来做肯定不会错。PKGBUILD这种页面的阅读者甚至不是简单的“装了就行”的普通用户,而是对于Linux已经有很多的了解(我认为,至少是会编程的人,毕竟所有package即使不需要compile,多少也是python这样的,最不济-bin类型的包也涉及shell)的用户,这样的用户怎么会需要看中文维基呢?

所以我决定不搞了。在AUR上维护包对于社区的贡献比维护中文维基的还大。

Archlinux做路由器,并提供透明代理

背景 自从买了macbook air m1之后,家里的台式机就很少用了。以前用来挂机刷碧蓝,但是现在也不怎么玩碧蓝了,所以就改成了做 frp。后来恰逢联通和广电整蛊,我气不过决定换成电信的宽带。师傅装好宽带之后,我看着光猫上3个LAN口(1个接了无线路由器)+1个IPTV口陷入了沉思——为什么不试试把台式机直接接光猫呢,这不就可以让它不占用路由器的WAN口带宽了吗?当然可以的,台式机也成功从光猫获得了IPv4和IPv6地址 1 ,而且一切服务都正常。 我又想,既然在这个架构下台式机和无线路由器是平起平坐的,那么为什么不简化一下,让无线路由器只负责提供无线功能,路由功能由台式机负责呢?这样做的好处就是可以x86软路由玩起来,花样很多。所以下一步就是……心心念念的,我(台式机)做master,家里其他设备做slave了(大误)。正经地说,软路由透明代理就是为了让PS5和Switch能够无感地加速下载,特别是让PS5可以正常地上传截图。 当然,这样的结构只靠台式机主板的一个千兆网口是不行的,还需要另一个网口。如果用传统的路由器上的接口命名来称呼的话,台式机主板的网口用来做WAN,连光猫的LAN口;而另外买一个PCIE网卡插在主板上所提供的网口就是LAN口,连无线路由器的WAN口。示意图如下: 由于本人学艺不精,在调试软路由+docker+透明代理的时候失去耐心,所以直接把docker砍了,nextcloud根据 archlinux wiki 重新部署了一次——nftables真香。同时,虽然archlinux的wiki建议不要在路由器上提供网络应用(nextcloud),但是我没钱再搞一台电脑也没精力研究用虚拟机做路由器的技术,所以不听老人言吃亏在眼前导致透明代理不可以处理台式机自身产生的流量,否则在v2ray的日志里就会大量出现访问127.0.0.1:443的请求,导致无法使用nextcloud服务。 综上所述,本文会介绍: x86软路由(开启DHCP),用nftables实现路由和防火墙功能;无线接入点由Bridge模式的无线路由器提供 nftables劫持内网DNS流量至软路由的53端口,由cloudflared发送DoH查询(解决DNS污染问题) nftables实现透明代理,代理服务由V2Ray提供 第2、3步都是独立可选的,只不过是软路由最经典的玩法。注意下文中用尖括号( <> )括起来的内容都要换成你自己的环境里实际的数值。 1 实现上网功能 在开始前,请先把无线路由器配置好,让其他设备可以正常连接无线(不需要可以上网),最重要的是把无线路由器的WAN口设定为桥接模式(Bridge)。 1.1 固定网卡名称 台式机上有两块网卡,一个是主板自带的,以后要做WAN口用;一个是PCIE网卡提供的,以后做LAN口。为了之后使用nftables编制规则的时候可以用iifname这样的设备名matcher来方便地处理流量,现在先加两条udev规则把设备名固定下来。首先通过执行 ip addr 确定两个网口的MAC地址,然后在 /etc/udev/rules.d/ 内新建一个 10-network.rules 文件: 1 2 SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="<WAN口的MAC>", NAME="netwan" SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="<LAN口的MAC>", NAME="netlan" 保存后要么直接重启,要么执行 sudo udevadm trigger –verbose –subsystem-match=net –action=add…

Archlinux下的Python-pip安装需要多做的一步

今天在自己家台式机上安装supervisor的时候,supervisor报错: 1 2 3 4 5 6 7 8 9 10 Traceback (most recent call last): File "/usr/bin/supervisorctl", line 33, in <module> sys.exit(load_entry_point('supervisor==4.2.5', 'console_scripts', 'supervisorctl')()) File "/usr/bin/supervisorctl", line 22, in importlib_load_entry_point for entry_point in distribution(dist_name).entry_points File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 969, in distribution return Distribution.from_name(distribution_name) File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 548, in from_name raise…

Hyper-V NAT映射端口到Host

起因是想把一些服务搬到虚拟机里,因为Windows的”服务”体验比较差。为了开机可用,不想使用VBox,所以选择Hyper-V。Hyper-V的桥接网络有限问题,会导致Windows自己上不了网。因此,使用NAT+映射端口的方式来完成。 首先参照这篇文章新建一个NAT虚拟交换机。原文是英文系统的名称,本文使用中文系统环境,所以有些内容会对应更改。命令都是用管理员权限的Powershell运行的。名字是NATSwitch,类型是内部: 1 New-VMSwitch -SwitchName "NATSwitch" -SwitchType Internal 原文Windows(下文统一称为主机)的地址是192.168.0.1,但是我的物理LAN网段和它冲突了,所以主机的IP地址设置为192.168.2.1,网络段用192.168.2.0/24,虚拟交换机的名称vEthernet (NATSwitch)。先配置主机的网络: 1 New-NetIPAddress -IPAddress 192.168.2.1 -PrefixLength 24 -InterfaceAlias "vEthernet (NATSwitch)" 然后配置虚拟交换机的网络,注意Name要跟上面的匹配: 1 New-NetNAT -Name "NATNetwork" -InternalIPInterfaceAddressPrefix 192.168.2.0/24 虚拟机使用的是Archlinux,启动之前在设置里把网络适配器更改为NATSwitch。 在主机上配置NATSwitch,先给这个名字是”arch”的虚拟机设置一个静态IP(因为DHCP没法用)。虚拟机的IP是192.168.2.2。下面这个要保存到一个.ps1文件里,然后在管理员权限的Powershell里运行。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22…

Network Manager 启用搭配 DHCPCD

自从ArchLinux新装以来,就出现了没有办法连接校园网的问题。即使修改了防火墙,甚至改到没有拦截,都还是八行。最后只能从Network Manager身上找原因。想着和之前最大的区别就是没有装dhcpcd,装上再改了一下NetworkManager.conf指定

1
2
[main]
dhcp=dhcpcd

突然就可以了。真迷惑。

Windows虚拟机部署dm-crypt的Archlinux到物理分区并启动的记录

今天探索了怎么在linux上实现加密的效果。毕竟用惯了linux,还是有点离不开的感觉,但是Windows已经用了bitlocker进行加密,如果只有windows加密了linux不加密那和白给有什么不同呢。所以就看着Archlinux的维基进行摸索。 背景是Windows已经用bitlocker加密了系统分区(同时也是数据分区,毕竟SSD容量不大)。因为bitlocker要求加密分区之外再有一个引导分区,所以mbr分区表最多4个主分区已经占用了两个。ArchLinux的主分区也需要占用一个Primary分区,因为主分区要加密,所以引导分区也需要独立的一个,所以mbr下4个占满。如果直接在Windows的磁盘管理里面建立第四个分区,它会默认建立扩展分区,所以需要进PE用DG指定建立主分区。 为了减少流量消耗,这次安装用了骚方法:在Windows上用VirtualBox启动arch的liveCD,然后虚拟机的硬盘直接用物理硬盘sda3、sda4来做。_这里说一句题外话:也就linux能这样安装还能启动,windows这样搞一下子就死了。_Virtualbox和VMware不太一样,后者有GUI的“使用物理硬盘”的选项——虽然并不能用,用了就黑屏开不了机——前者需要用命令来完成,参考virtualbox manual的9.8.1.2: 1 2 VBoxManage.exe internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 3,4 光盘位置挂载arch的liveCD,然后启动进去就完成了前期准备工作。 加密用的是dm-crypt的全系统加密,由于是对块(block)设备的加密,所以要在建立建立文件系统之前就执行。按照wiki的指示配置好主分区的加密,其实就是几行命令: 1 2 3 4 # cryptsetup -y -v luksFormat /dev/sda3 # cryptsetup open /dev/sda3 cryptroot # mkfs.ext4 /dev/mapper/cryptroot # mount /dev/mapper/cryptroot /mnt 把sda4格式化之后挂载到/mnt/boot目录,就可以按照安装指导的Installation部分一直做到Initramfs之前为止。 然后回到dm-crypt的wiki,配置mkinitcpio.conf,主要是要保证有”keyboard keymap encrypt”三个钩子,并重新运行mkinitcpio: 1 HOOKS=(base udev autodetect keyboard keymap consolefont…

atom报错找不到uncrustify

今天看书的时候无意间打开了之前写的一个C程序,按保存的时候突然报错找不到uncrustify。再三确认uncrustify不仅安装了还是安装的最新版本的情况下,甚至指定了绝对路径,atom还是不认。网上搜的全都是“你肯定没有安装,装一个就好”。

思考再三,感觉和之前的dhcpcd 8.1事件有点类似。首先降级了atom到1.40.1,发现问题没有解决。然后把uncrustify从0.70.0降级到0.69.0,问题就解决了。所以结论就是最新版的uncrustify是有问题的。

有道词典|改良AUR

AUR的是1.1的,现在已经是6.0.0了。但是大佬的PKGBUILD还不错,只需要改掉source的下载链接、改掉prepare的patch、改掉package的cd文件夹,再补充一个python-opengl就可以了。取词和划词都能用,但是也都和windows环境下一样不是百分百成功。