🤓谢本壹
2024.10https://xieby1.github.io/nix_config/docs/slides/2023.nix-env.slides.html
基于Nix的Linux发行版 (Distro)
apt install vim
nix-env -iA nixpkgs.vim
home.packages = [nixpkgs.vim];
Nix/NixOS | APT/Ubuntu | |
---|---|---|
使用用户 | root(system wide), 普通用户 | 仅root(system wide) |
版本升级 | 随时升级channel | 跨版本升级难 |
安装位置 | 全局/各用户:/nix/store配合符号链接 | 全局:/bin, /usr, … |
包的版本 | 能够同时安装多个版本的包 | 单一版本 |
包的数量 | >80,000[1] | 72,514[2] |
更新速度 | 每天几百个commits[3] | - |
开放程度 | 开放、可去中心化 | Canonical Ltd维护 |
历史回滚 | 支持 | - |
交互方式 | Declarative/Imperative | 仅Imperative |
apt list | wc -l
git log --date=short --pretty=format:%ad | sort | uniq -c
Nix/NixOS | Docker | |
---|---|---|
确定性 | 是 (确定性derivation) | 否 (非确定性layer) |
融入现有环境 | 轻松:nix-env/nix-shell | 难:本质各种隔离,bind/network/… |
学习曲线陡峭📈,但也别担心😸
nix-shell适合创建开发环境
同学壹🤓
搞了一个
gem5项目
同学贰🫠
在ubuntu22上
死活编译不成功
同学叁😨
在服务器(ubuntu16)上
好多库都没有
项目一开始就体验极差😖😤😱
shell.nix
shell.nix
shell.nix
成功编译🎉🎉🎉
并且结果一模一样!
一模一样具体是指?
同学壹🤓
同学贰😍
同学叁🥰
/bin
,
/lib
, …/nix/store/
里/nix/store/<hash>-<pname>-<version>
混乱的用户环境?
符号链接
~/.nix-profile/bin/
~/.nix-profile/lib/
写绝对路径
ELF文件Dynamic section的RUNPATH
可使用readelf -d
查看
动态链接器ld.so
会根据寻找RUNPATH
去找动态链接库
以上步骤,每次运行结果都不一样
就做了两件事:
大致涉及内容: