Mac 上安装 Arch Linux,ZFS 真香

最近在 Mac 上装了 Arch Linux,按照 Mac - Arch Linux Wiki 一路一路走,创建单独的一个 EFI 分区给 Arch Linux 放 GRUB 和内核,一个 ext4 作为根分区。由于 Arch ISO 不支持 Broadcom 的无线网卡,于是先拿 Apple Ethernet Adapter 连到路由器上装机。然后把一些需要的驱动装上了,桌面用的 KDE Plasma,Trackpad 用的 xf86-input-mtrack-git,HiDPI 设置为 2x Scale,各种体验都还可以,就是 Wi-Fi 的 802.1X 没配置好,然后 kwalletd5 老是崩没找到原因。常见的应用除了微信基本都有,也终于可以体验 Steam Play,利用 Proton 在 Linux 上跑一些只支持 Windows 的游戏,不过我已经很少玩游戏了。 然后我就想,怎么做 macOS 和 Linux 之间的文件共享。典型的操作可能是 exFAT,但是作为数据盘的话,这还是不大适合。或者就直接用 ext4,配合 extFS For Mac by Paragon 使用,也可以,最后我选择了 ZFS。 在 macOS 上安装 OpenZFS on OSX ,在 Linux 上安装 ZFS on Linux 。具体命令就是:

Read More

USB/IP 实践

之前一直想玩 USB/IP,但是一直没有找俩 Linux 设备然后共享,今天终于尝试了一下,没有什么大问题。这次采用的设备是 Raspberri Pi 3 和 SaltedFish Pi。一开始尝试从后者向前者共享,但总是出现这个错误: libusbip: error: udev_device_get_sysattr_value failed usbip: error: open vhci_driver 然后我反过来做就好了,比较神奇。 主要过程如下: pacman -S usbip 安装用户态软件 systemctl enable --now usbipd 启动 USB/IP 的端口监听 daemon usbip list -l 查看本地有哪些 USB 设备可以共享 usbip bind -b [BUS_ID] 把指定的 USB 设备共享出去,其中 BUS_ID 从上个命令中查看 usbip list -r [IP] 在另一个设备上查看这个设备共享的 USB 设备,可以看到许多信息 usbip attach -r [IP] -b [BUS_ID] 把对方共享的 USB 设备 attach 到本地 效果:把一个 U 盘成功映射到了本地: $ lsusb -t /: Bus 04.

Read More

超过 100 篇博文了!

今天看了下,发现算上这一篇,这个博客已经有 103 篇文章了,这个数量还是蛮多的,特此庆祝一下。我也顺带做了一下简单的数据处理,得到这么一张图: ![graph](/images/2018-11-17 07.52.06.jpg) 目测数量与干活的频率相关性很高啊。

Read More

向咸鱼派写入 ArchlinuxARM

之前由于我的 macOS 上不知道为啥不能把我的 TF 卡设备放到我的虚拟机里,所以之前就没能刷 ArchLinuxARM 上去。今天我想到了一个方法,完成了这件时期: $ wget https://mirrors.tuna.tsinghua.edu.cn/archlinuxarm/os/ArchLinuxARM-armv7-latest.tar.gz $ dd if=/dev/zero of=archlinuxarm.img bs=1M count=1024 $ mkfs.ext4 archlinuxarm.img $ sudo mkdir -p /mnt/archlinuxarm $ sudo mount -o loop archlinuxarm.img /mnt/archlinuxarm $ sudo bsdtar -xpf ArchLinuxARM-armv7-latest.tar.gz -C /mnt/archlinuxarm $ sudo umount /mnt/archlinuxarm 这样就获得了一个 ext4 的 ArchlinuxARM 镜像。刚好解压出来不到 1G,所以开了 1G 的镜像刚好放得下。然后把 archlinuxarm.img 拷回 macOS,然后用 dd 写进去: $ sudo dd if=archlinuxarm.img of=/dev/rdisk4s2 bs=1048576 这时候可以确认,我们确实是得到了一个正确的 ext4fs: $ sudo /usr/local/opt/e2fsprogs/sbin/tune2fs -l /dev/disk4s2 不过,我们实际的分区大小可能不止 1G,所以可以修改一下大小:

Read More

咸鱼派的启动配置

最近刚拿到了一个咸鱼派的测试板子,准备自己把 U-Boot 和 Linux 内核这一套东西跑通,都用主线的东西,尽量减少魔改的部分。首先是编译 u-boot,我用的是现在的 master 分支的最新版 99431c1c: $ # Archlinux $ sudo pacman -Sy arm-none-eabi-gcc $ make LicheePi_Zero_defconfig $ make ARCH=arm CROSS_COMPILE=arm-none-eabi- -j24 这时候会得到一个 u-boot-sunxi-with-spl.bin 的文件。我们只要把它写到 SD 卡的 8192 偏移处,就可以把 U-Boot 跑起来了: $ diskutil unmountDisk /dev/disk4 $ sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/disk4 bs=1024 seek=8 接着我们做一下分区。我采用的是 MBR 分区,这样保证不会和 U-Boot 冲突。使用 fdisk 进行分区,我从 1M 处开始分了一个 10M 的 FAT-32 分区作为启动分区,然后之后都是 EXT4 的系统盘分区。接着就是编译内核。 我用的是八月份时候的 4.18.2 内核,虽然不是很新但也足够新了。一番调整内核参数后,得到了一个可用的内核,然后把 zImage 和 sun8i-v3s-licheepi-zero.dtb 都复制到刚才创建的 FAT-32 启动分区,然后进入 U-Boot 进行启动:

Read More

使用 HomeBridge 把小米空气净化器加入到 HomeKit 中

受 @NSBlink 安利,自己部署了一下 HomeBridge ,然后在 iOS 的家庭上就可以看到它。然后,通过 homebrdige-mi-airpurifier 和 miio 按照教程进行配置。然后就可以在家庭里看到小米空气净化器,包括空气质量,湿度,睡眠模式,温度,打开状态。然后我就可以做一些配置,如离开宿舍的时候自动关闭空气净化器,回来的时候自动打开。不过由于自己没有一个一直放在宿舍的 iPad、Apple TV 或者 HomePod,失去了中枢,这个功能可能会打折扣。 后续想买一些智能的灯啊,然后就可以用 Siri 进行打开 / 关闭了。 此外,我又试了下,可以用 homebridge-camera-ffmpeg 把摄像头配置到 HomeKit 中。这样,就可以远程查看视频流了。

Read More

部署 adminMongo 的 Docker 镜像

之前在软工的平台上部署了一个 MongoDB,但是自然是仅内网访问,想要浏览内容只能通过网页上的 Console 进去看,体验特别不好。所以想着能不能找一个在线的 MongoDB 浏览器。由于软工平台只能部署 Docker 镜像,所以我找到了mongo-express和adicom/admin-mongo。但软工平台现在还没实现环境变量的配置,所以我选了后者。 首先本地创建一个 app.json,让它监听 0.0.0.0:80,通过 deployer 传到平台上的配置,然后再把配置 mount 到 /app/config 路径上。现在就可以成功地在网页上浏览 MongoDB 了。

Read More

OpenWRT 上配置 Gandi DDNS

一直想给自己的 OpenWRT 路由器添加 DDNS 功能,但 Gandi 不在官方的 ddns-scripts 列表中,自己在网上找了一些脚本,发现是 Python 写的,尝试把 Python 安装到路由器上又发现空间不够,虽然可以安装到 USB 上,但总归是麻烦。 最后找到了官方的一个脚本,非常适合我的需求。简单修改一下,然后安装一下支持 HTTPS 的 cURL: $ opkg update $ opkg install ca-bundle $ opkg install curl 然后把脚本添加到 crontab 即可。

Read More

ETC 比赛无线网络搭建小记

正好上着李贺武老师的《无线移动网络技术》课,然后今天又给 ETC 比赛搭建无线网络,于是周二的时候找老师咨询了一下意见。我们大概给老师讲了一下场地的样子和尺寸(当时估计的大了),然后老师给我们提供了一个可以供参考的部署方案,包括几个 AP 分别放在哪,这些 AP 的 2.4GHz 都用哪个 channel,然后都用多少功率。并且很友善地在周五的时候让助教来场地帮我们 survey 一下无线网络的状况。我们用 Fluke Networks 的 AirCheck Wi-Fi Tester 看了一下场地的各个频道的 AP 数量和信号强度,发现虽然 AP 挺多的,但是它们的信号都比我们的小不少,而且我们也都开到了 50mW,所以干扰不大。 然后昨天下午一点半钟来到场地,用板车把设备都运到计算机开放实验室,然后开始部署无线网络。我们提前来踩过几次点,这边的网络是没有 DHCP 服务器的,通过一个指定的网关出去。我们发现可以利用已有的这些交换机从地下连到各个电脑上的网线,来连接我们的 AP 和交换机,这样我们就免去了走线的麻烦。于是我们先定下放 AP 的位置,然后用寻线器找到网线插到了交换机的哪一个端口上,标记好后换成连接到我们自己的交换机的网线上,从而可以通过 PoE 把我们的 AP 给启动起来。然后用我自己的路由器,把 LAN 口插到交换机上,给 AP 分发 DHCP 地址,然后把下发的默认网关配置为真实的网关(DHCP Option 3) ,没做但是也可以顺带做的是把 WLC 的地址分发下去(DHCP Option 43 Type 241)。 当然,这个过程也遇到了一点小坑,就是交换机还保留了之前的配置,所以这次把新的几个端口划到了一个 VLAN 下,命令自然是记不住的要现查。然后起来以后还挺稳定的,也没出现什么问题,网络带宽也足够用,离千兆还有蛮多距离,一天也才跑了接近俩 TB 的流量。

Read More

Unicode En Dash 小坑

今天有同学问到我这个问题: $ gcc -o ph ph.c –lpthread 为啥不工作。我怎么看都觉得没啥问题,一开始以为是找不到 pthread,但马上又排除了。想了下会不会是有隐藏的字符,于是让同学 pbpaste | xxd 一下,果然发现这里的 – 是 \xe2\x80\x93 ,查了下是 Unicode 里的 En Dash。由于这是从 PDF 里直接拷贝出来的,所以凉了。改成正常的短横杠即可。

Read More