打造一个更好的狗狗摄像头(第1部分):用 NixOS 驱动树莓派
我先说,这部分在我进行第二次尝试之前是未完成的。所以把它看作是笔记的集合,而不是完整的说明书。
在本页
去年我写过关于使用 Frigate 的自主机狗摄像头.当时我用的是TP-Link Tapo摄像头,不得不专门写一节讲如何通过防火墙隔离摄像头与互联网隔离来保护它们。
我一直渴望有一个不需要这种方式的解决方案。然后Benn Jordan做了一个关于摄像头的安全风险:
也许你应该和家人现实地讨论一下你刚听说的风险和摄像头对你有用的概率......但如果你问我的看法,鉴于我们似乎正陷入专制主义,考虑到网络安全的悲惨状况,我会说,拥有科技集团的云端摄像头会让你的安全感大大降低。
他还建议,如果你仍然觉得需要摄像头才能安全,可以买一台离线型号,把加密文件写入SD卡。我觉得这是一个平衡的做法。
不过我的使用场景有点不同,因为我不想在外面装摄像头,也不想保护我的房子。我想要在我不在时有狗摄像头,方便我年迈的狗狗在屋里查看。
比如有一次我们抓到她在屋里拉屎。所以我很遗憾需要一个可以远程访问的摄像头。我想要的是一个摄像头,不用设置防火墙,不用开专用VLAN,也不需要阻止DNS等等。
第一次尝试:用RPi手卷相机
归根结底,狗用相机不过是一台带摄像头的小电脑。如果我自己做一个,就能避免相机打电话回家。我自负地想,“这有多难呢?”
我想用普通零件组装一个东西。即使价格上涨,树莓派依然相当实惠。我也很幸运附近有一家Micro Center,如果你只买一个,他们能以建议零售价出售。
买多个时价格会迅速上涨,以吓退黄牛。
我可以直接插个USB摄像头,设置远程访问。我已经有一个在运行了鸟网GO.甚至还有各种 Pi 相机模块,专门配置成 Pi 能处理它们。
我想要一台小巧的,于是买了一台Raspberry Pi Zero 2w和一台Pi Camera 3 NoIR宽屏。不过他们实际上缺了2W,所以我只好买了1GB RPi 4。
2GB的也缺货了,谁愿意花100美元买4GB呢。而且如果我能在1GB下让所有设备正常运行,那对想尝试的人来说是个大收获。
哦,还有可打印的相机卡口有空。
使用 NixOS 构建自定义镜像
NixOS 维基有一个通用的介绍树莓派上的页面,外加专门为π 4.你可以在桌面上写配置,生成一个可以刷写的图片。
他们提供的示例使用了 nix 通道,而我想用 flakes 代替:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
nixos-hardware.url = "github:NixOS/nixos-hardware";
};
outputs = { self, nixpkgs, nixos-hardware, ... }: {
nixosConfigurations.camera = nixpkgs.lib.nixosSystem {
system = "aarch64-linux";
modules = [
"${nixpkgs}/nixos/modules/installer/sd-card/sd-image-aarch64.nix"
nixos-hardware.nixosModules.raspberry-pi-4
./configuration.nix
];
};
};
}
大部分配置都很标准:
- 启用Tailscale。
- 启用 ssh
- 禁用蓝牙
- 启用交换
不过,这个项目有一些具体的变化。
而不是使用摄像组在维基上我用了Nixos-Hardware叠加层:
hardware.raspberry-pi."4" = {
apply-overlays-dtmerge.enable = lib.mkDefault true;
};
hardware.deviceTree.overlays = [
{
name = "imx708";
dtboFile = "${pkgs.raspberrypifw}/share/raspberrypi/boot/overlays/imx708.dtbo";
}
];
boot.kernelPackages = pkgs.linuxPackages_rpi4;
然后我把用户设置在video组别:
users.users.camera = {
isNormalUser = true;
extraGroups = [ "video" "wheel" ];
};
最后,我生成闪烁图像:
sdImage.compressImage = true;
sdImage.imageName = "rpi4-camera.img";
最后一部分是设置go2rtc用于摄像头的直播,但我被另一个选项分心了。
然后决定尝试Secluso。
我会在第二部分(待定)中详细讲述,但我发现了一个叫做隐居目标是用 Pi 零件提供一个安全且私密的摄像头。我决定放弃这项工作,看看能否把时间投入到那个项目中。
这意味着放弃 NixOS,但我更愿意和一群人一起做类似的事情。