前言 #
这几个月一直都在折腾Guix相关的程序组件,以及忙着开发游戏,因此渐渐地忘记了做笔记。回想起来,实在感觉不做个笔记记录下自己的心路历程就有点可惜了。
初始 #
这里是一切的初始,万物归一的地方……额,不装了。想着折腾Guix的动机,还得从了解到Guix开始说起。最开始我是想了解下函数式的构建系统,因为了解到了Nix的,所以当时有点想尝试下NixOS来改善自己的工作流。
然后通过社群某人推荐,我了解到了理念比Nix更纯的Guix。虽然Nix也是函数式构建,但Guix似乎有着更严格的可复现性,虽然代价是生态没那么好,不过我确实也是看中了这点于是决定尝试下Guix的。
最初的尝试是在自己的VPS上进行的,给VPS装上了Guix的镜像,然后写了最初的服务配置,顺便自己写了个简单的密码导入脚本(虽然似乎不太安全),花了几天功夫调试,成功在服务器上跑起来了Guix的服务。
感觉VPS跑Guix效果非常不错,而且VPS本身是虚拟的,所以不用担心Linux-Libre不兼容硬件,虽然Guix很多东西并没有内置服务,不过这一块通过第三方频道和自己写的频道完全可以补全。
Guix有个很强大的服务叫做oci-service-type,这个服务允许你自己定义一个容器性质的shepherd服务,虽然后面过度依赖oci部署自己的服务也导致了破坏完全的复现性和另一个问题,之后我其实也意识到了这个问题。
Guix虽然写服务的时候很慢,但重复部署和更换系统的效率非常高。
系统实装 #
经过最初使用Guix服务器部署的试点,效果很满意。于是我开始推广到实用到自己的主系统和工作流中。之前使用的操作系统是Gentoo,只是因为我觉得Gentoo会比Archlinux更稳定。但现在看来还是Guix的可重现构建更强大,更稳定。
基于之前的使用经验,我也有了Emacs为主的工作流的基础。所以单纯写Lisp配置对我而言也不算难事了。
即便如此,还是花费了许多超过预期的时间和精力成本来调试Guix的实机使用,因为要配置的项确实非常多而且比较复杂。加上默认Guix内核是Linux Libre,所以需要走Nonguix频道来更换内核。
我是先用Nonguix配置好了私人NAS的系统,然后才配置的个人电脑。个人电脑的配置是最难做的,因为涉及到了麻烦的图形栈和驱动兼容问题,也是在象友的帮助下捣鼓了很久才摸索出一套可正常运行的配置。
装好系统后顺便也改善了下自己的工作流,学会了一些软件的习惯,然后继续上手游戏开发了。
服务部署 #
之后是一边使用一边折腾和部署各个服务,首先为了解决NFS访问性能的问题我最后还是换了一个webdav的极简实现phodav,配合gio做了一个轻量级远程目录访问。
后来为了方便AI的环境,参考别人的ollama-bin,手动打包了个ollama-bin包。当时调试AI的时候发现ollama总是无法读到显卡,也不知道为什么,然后看了看包才发现,原来是包里面没有装cuda库。
当时我先是装了个libcuda没用,之后手动下载了个二进制包,然后摸索了下,用nonguix提供的构建方法,把cuda库包装进二进制包才能用了。
AI服务之后还有一些Emacs组件,了解AI的时候还了解到了MCP-Server,于是我下载了一些MCP服务引入我的Emacs Copilot Chat工作流。
感觉这玩意配合Claude确实能胜任许多复杂的工作了。接下来又陆续配置了synapse、mailserver、hegedoc等服务,不过我实际写的配置更多,因为很多服务我是先试了别的服务,发现不好用,才换了个方式配置。
到最近,终于搭好了Forgejo服务了,至此,我的CI/CD流程也可以开始学习和实验了。
在这期间,我还试了试IPFS,这套分布式的网盘的确相当好用,虽然我还没实际使用,但只要有pin服务存在,IPFS确实可以很方便地存放各类资源和数据,尤其是视频和音频资源,而且只要有人愿意长期存这些资源,就再也不怕资源弄丢了。