nix包管理器

参考: 使用nix包管理器解决 glibc 兼容问题

https://www.v2ex.com/t/892346#reply0

优势

当软件包依赖版本不一致时,nix 包管理可以兼容较新版本,且安装软件包时是无需 root 权限

例如,安装 mongodb 时,mongodb 使用的 glibc 版本较高

而 glibc 又是系统基础组件,不能随便升级(系统上已安装其他应用依赖旧的 glibc)

视频教程: 【如何在Ubuntu或者在非NixOS上使用Nix】 https://www.bilibili.com/video/BV1rk4y1V7ai/?share_source=copy_web&vd_source=d667d02f8e613e3abbe8796cd937c035


安装nix

# 安装 nix
sh <(curl -L https://nixos.org/nix/install) --daemon

检查nix是否正常工作

# nix-shell: 启动Nix的交互式shell环境,下载并运行neofetch
# -p neofetch: 
#   -p 是 --packages 的缩写,指定要在shell环境中临时安装的软件包
#   neofetch 是要安装的软件包名称(一个显示系统信息的工具)
# --run neofetch:
#   --run 表示在进入shell后立即执行指定的命令
#   neofetch 是要运行的命令,执行后会显示系统信息并立即退出shell环境
nix-shell -p neofetch --run neofetch


nix包管理器添加国内源

# 添加镜像源‌
## 将 交大 镜像站 和NixOS官方缓存 作为二进制包的下载源‌
sudo bash -c "echo substituters = https://mirror.sjtu.edu.cn/nix-channels/store https://cache.nixos.org/ >> /etc/nix/nix.conf"

# 更新添加包订阅
# nix-channel --add https://nixos.org/channels/nixpkgs-unstable

# 更新添加--国内 包订阅
nix-channel --add https://mirrors.ustc.edu.cn/nix-channels/nixpkgs-unstable nixpkgs

# 会将源地址 写入到~/.nix-channels文件中

# ‌重启 Nix 守护进程
sudo systemctl restart nix-daemon.service

# 刷新源
nix-channel --update

搜索软件包

加以到这里去搜索: https://search.nixos.org/

# 永久启用nix实验性特性
echo "experimental-features = nix-command flakes" | sudo tee -a /etc/nix/nix.conf

# 允许安装非自由软件
export NIXPKGS_ALLOW_UNFREE=1

# ‌重启 Nix 守护进程‌
systemctl restart nix-daemon
# 常用的软件搜索
nix search nixpkgs font

# 有很多内容,缩小一下范围:
nix search nixpkgs font chinese

# 知道具体名称的,正则表达式:
nix search nixpkgs ^qq$
# 使用 Nix 包管理器从 nixpkgs 仓库中搜索包含 "tmux" 关键字的软件包
nix search nixpkgs <包名>

nix search nixpkgs tmux

nix搜索软件包资源会严重飙升,甚至CPU和内存100%.

# 使用预构建的二进制缓存,秒搜到到
nix-env -qaP | grep tmux

nix run

临时运行一次性工具.

nix run 通过 /nix/store 直接调用预构建的二进制文件‌

立即运行软件,而且无需 sudo 权限,非常方便。

它实际上就是下载了二进制包到 /nix/store 然后执行,由于 nix 是沙箱、无状态,所以等于没安装,这个软件不在你的系统环境里,再次运行 yafetch、cbonsai 会提示找不到软件。

之后软件比较常用就加入配置,不好用也不用管它,下次垃圾回收直接带走。

nix run nixpkgs#cli名称

# 使用Nix运行nixpkgs仓库中的yafetch程序
# yafetch是一个轻量级的系统信息工具,类似neofetch但更简洁
# 这条命令会:
# 1. 自动下载nixpkgs仓库中的yafetch包
# 2. 临时安装并运行它
# 3. 运行后不会在系统中永久安装
nix run nixpkgs#yafetch

# 使用Nix运行nixpkgs仓库中的cbonsai程序并传递参数
# cbonsai是一个在终端中生成ASCII艺术盆景的程序
# 这条命令会:
# 1. 自动下载nixpkgs仓库中的cbonsai包
# 2. 临时安装并运行它
# 3. 将-l参数传递给cbonsai程序(-l表示"活着"模式,盆景会缓慢生长)
# 注意: --用于分隔nix run的参数和要传递给程序的参数
nix run nixpkgs#cbonsai -- -l

nix run nixpkgs#vim -- --help


nix-shell

nix-shell 会构建完整的依赖闭包并生成临时环境‌,用户手动退出当前shell.

# 运行 mongo
nix-shell -p  mongodb-5 --run "mongo --version"

# 退出当前shell
exit

运行redis

# 运行redis
nix shell nixpkgs#redis


nix profile

这个基本就等价于传统发行版的包管理 apt/dnf/pacman
安装软件包到用户环境,会持久化,即使重登系统,软件也能继续调用.

一般在 nixos 里很少使用,因为常用的软件就直接加入配置固定了,不常用的直接 nix run 或者 nix shell
不过在其它环境,比如其它发行版里的 nix,比如 wsl,懒得配置就用 nix profile


安装到用户环境

# 持久化安装mycli到用户环境
nix profile install nixpkgs#<包名>@<版本号>

# 示例
nix profile install nixpkgs#yafetch

# 示例
nix profile inistall nixpkgs#mycli


查看profile安装列表

nix profile list

获取到list的编号.


删除

# nix profile remove <包名>
nix profile remove yafetch

# nix remove <list编号>
nix remove 0

nix develop—未完待续

nix的精华部分,待深入学习


nix flake—未完待续

更新 flake.lock 文件中的依赖项版本

# 更新所有输入
nix flake update

# 仅更新特定输入
nix flake lock --update-input nixpkgs

Home manager—未完待续

# 通过 `nix run` 直接运行 home-manager 的初始化命令
# `home-manager/master` 表示从 master 分支获取最新版本
nix run home-manager/master -- init --switch

Enable home-manager

# 使用 Nix Flakes 动态加载并激活指定用户的 home-manager 配置
# 1. 无需永久安装即可运行 home-manager 最新稳定版‌
# 2. 要求目标目录已存在符合规范的 flake.nix 配置文件‌
# 3. 支持原子化切换配置,失败自动回滚‌
## nix run - Nix 的动态执行命令,创建隔离环境临时运行程序‌
## nixpkgs#home-manager - 从官方仓库获取指定版本的 home-manager‌
## -- - 参数分隔符,后续参数传递给 home-manager 主程序‌
## switch - 激活配置并创建新一代环境(支持回滚)‌
## --flake - 启用 Flakes 特性进行声明式配置管理
## <flake-file-path> - Flake 配置文件路径:
### 支持相对/绝对路径(如 ./nix 或 ~/nix-config)
### 必须包含 outputs 中定义的 homeConfigurations‌
## #<USERNAME> - 指定要配置的系统用户名:
### 需与 flake.nix 中 homeConfigurations 键名匹配‌
### 支持 ${USER} 环境变量自动替换‌
nix run nixpkgs#home-manager -- switch --flake <flake-file-path>#<USERNAME>
# 使用 Nix 临时运行 home-manager 并激活指定用户的 Flake 配置
# 此命令会动态加载 home-manager 而不需要永久安装
# 注意:需要提前配置好 nix/#$USER 目录下的 flake.nix 文件
## nix run - Nix 的动态执行命令,临时运行指定程序包
## nixpkgs#home-manager - 从官方 nixpkgs 仓库获取 home-manager 最新稳定版
## -- - 参数分隔符,后面的参数传递给 home-manager 程序
## switch - home-manager 子命令,表示激活并切换配置
## --flake - 指定使用 Flake 方式进行配置管理
## nix/#$USER - Flake 配置路径和用户名:
### nix/ - 本地包含 flake.nix 的目录路径
### #$USER - 对应 flake.nix 中 outputs 定义的用户配置名, $USER 会自动替换为当前系统用户名
nix run nixpkgs#home-manager -- switch --flake nix/#$USER

递归创建Nix配置目录结构

# 递归创建 Nix 配置目录结构
# 1. 创建多级目录用于存放 home-manager 应用配置
# 2. -p 参数自动创建父目录(不会因目录已存在报错)
# 3. 建议路径结构:~/nix/home-manager/apps/ 存放模块化应用配置
mkdir -p ~/nix/home-manager/apps


升级&垃圾回收

# 更新所有输入源到最新版本
nix flake update
# 执行Nix存储垃圾回收
nix store gc

其他

# 查询系统的环境:
nix info -m

查询 nix 的环境:

nix config show

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值