1 初衷和面临的一些问题

首先,这不是一个对 NixOS 以及 Nix 介绍文章。也不会去讨论 Nix的原理以及论文的实现。因为 NixOS/Nix 的方式方法以及 Roadmap 和要解决问题,包括现有的成果。都让它的用户群体和应用场景都维持在了比较小的且高需求的技术群体。

对于主流 unix 用户来讲,一个软件的构建部署服务的维护,复杂的依赖安全 patch 的维护更新,离他们太遥远。docker build 上游发布人员,也基本不会关心复杂依赖版本多次 build

后产生若干不同的 hash image 的问题。因为商业的方案和软件,总能有更加简单粗暴的方式提供给用户,无所谓背后的实现,以及 unix 发行版维护人员的工作量和开源社区越来越缺人的状态。

其次,DevOps(NixOps)是 Nix(OS)的最大亮点,尽管它拥有更好的实现和优点,什么是好的 DevOps 该有的功能。但是本身的特点和 hack 方式,就像这个

Automatic: instead of a manual multi-step process, it has a single step, which can be performed automatically.

Repeatable: instead of only being able to deploy to one lovingly hand-maintained server, it can deploy reliably multiple times to multiple servers.

Idempotent: if the target is already in the desired state, no extra work needs to be done.

Reversible: if it turns out I made a mistake, I can go back to the previous state.

Atomic: an external observer can only see the new state or the old state, not any intermediate state.

Source link: Functional DevOps in a Dysfunctional World - Vaibhav Sagar 文章一样,尽管潜在用户有着复杂环境所要解决的相似问题,但门槛就让大多数人望而却步。

另外, Nix(OS)的NixOS/nixpkgs: Nix Packages collection 的方式极大的减少了 unix maintainers 面对传统方式的疲劳工作周期,下发给用户的服务和软件更加稳定,响应安全 patch 版本 Hh 也能以极小的时间花费去修复快速下发。但这样的好处相应的也给 maintainers 本身带来更高的要求和知识的掌握程度。如 Nix(OS)挖坑笔记(1) - 初识 · 极术 一篇想初学 Nix(OS)的文章末尾讲的。

尽管有种种优点,我在现实中却暂时没找到它的用武之地。在服务器端线上生产环境已经有了一整套的自动化服务器管理流程,在没有吃透 NixOS 之前贸然进行改造出现问题多半搞不定。在桌面端我本地的 Chrome OS + Crostini 环境也很难把它用起来。

所以在初略看过一眼之后,我就放弃了进一步的学习,把 Nix(OS)定位为也许某一天会派上用场的技术,希望将来有空了再来深入了解。

因为 Nix(OS)本的就有一定的研究性质,和各种高门槛的设定。如果用户没有一定程度上的知识面,和时间上的花费研究学习,很难去理解和考量现实中 Nix(OS)与商业方案的解决点和关联点在那里。尽管 Nix 已有google/nixery: Container registry which transparently builds images using the Nix package manager 联动 docker 解决 build 版本稳定性 kubernix/nix at master · saschagrunert/kubernix 与 k8s 的联动维护 Ops 等项目方案,但对商业公司和团队选择使用 Nix(OS)的挑战依然巨大。

以下 Nix × IPFS - Milestone 1 使用 Nix 的安全考量问题场景

For users of Obsidian’s open-source software specifically, they finally have an easy and robust way to trust neither our own pre-built binaries or cache.nixos.org’s, but build everything from source, which makes auditing security-critical code easier.

包括 input-output-hk/cardano-ops: NixOps deployment configuration for IOHK/Cardano devops 这种商业化的公司(区块链) 的实现,给了很多商业化技术公司参考。但对于国内的环境和业务需求来讲依然存在很多迷雾区。

最后,对于国内云厂商团队是否对于这种 Nix(OS)的这种技术方式感兴趣,我也依旧是怀着许多疑惑去写了这篇文章。以下展示仅仅是我做为一个安全工程师去实现整个 dev(nix)ops 安全业务中,所测试展示的个小环节,希望能给一些团队提供思考和合作的方式,代替场景等。

以下是期望合作的点: 希望相关云厂商能提供 S3的cache.nixos.org is up binary cache 的反代。加速 tuna 的 下载的 nixHydra - Overview二进制缓存源。

以及能够提供 Multi-Arch 的 binary build machines 为 CN 区域的用户提供 CI/CD 构建测试后的 binary cache.

2 快速开发部署展示

2.1 快速部署 zeek ids

  1. nix build 快速构建源码软件包(拉取缓存加速构建)

  1. nix run 快速运行 bin 且从源码构建

  1. 快速部署 zeek ids with bash shell

  1. ✰ IMPORTANT 使用 Nixos module systemd 部署 zeek (nixops devops feature)

2.2 nix develop 快速部署 next-termianl

1
2
3
4
nix develop -c deploy 0.0.0.0:8889

## without download repo
nix develop github:GTrunSec/next-terminal-flake-nix -c deploy 127.0.0.1:8889

2.3 Apache airflow 快速部署 master 分支

  • 启动 webserver
1
nix-shell shell.nix --command "airflow webserver -p 8889"

2.4 nix develop 快速部署 Browse Your Life in Pictures – PhotoPrism 照片服务

1
nix develop github:GTrunSec/photoprism-flake -c deploy 127.0.0.1:8889

3 Docker 构建包

3.1 Docker 构建gibiansky/IHaskell: A Haskell kernel for IPython.

过程漫长中断构建,直接展示结果

th-packages /nix/store/xvlabkhqf2prhd9yhgdp1bgz69q9c11c-bulk-layers /nix/store/2sg1yj0bjya7xf9j2p6sv3pf3iz29913-ihaskell- nix-config.json nix/store/w7cnxzvcgvfs987nc4zqyvbk94prqkqy-closure tar: Removing leading `' from member names tar: Removing leading `/' from member names Finished building layer ‘ihaskell-nix-granular-docker-layers’ building ‘/nix/store/dvvss7sds5hxgsxc4i2syhxbm9pf33dv-docker-image-ihaskell-nix.tar.gz.drv’… Cooking the image… Finished. /nix/store/pzdy5s3fh11c81jdyf4mxszk1q4rx7mq-docker-image-ihaskell-nix.tar.gz

4 Nix CI/CD hydra Server

官方提供了整个 CI/CD 的测试流程,ci-cri-containerd-e2e-cos-gce-slow #1357408432365244416 类似 k8s 的 prow

deploy with nixops

4.1 Queensland FP Lab - Your First Hydra

4.2 建立自己的 hydra

hydra 的部署和测试也为用户提供了属于自己的 binary cache 测试 CI/CD 服务, 以下为 hardnedlinux 自建服务

测试于nixos-cn/flakes的包构建

5 NixOps 展示

5.1 Nixops with virtuanlbox

2021-02-2302-21-13.mp4