using nixos - Tokyo-NixOS/Tokyo-NixOS-Meetup-Wiki GitHub Wiki
チャンネルはNixOSのアップグレード方法です。 システムのデフォルトチャンネルはインストールした際に利用したNixOSの安定バージョン。 システムチャンネルはrootユーザに登録されています。 一般ユーザはデフォルトでチャンネルを登録していない。
$ nix-channel --list利用できる公式チャンネルはこのページで確認できます。
チャンネルの種類は
- 安定チャンネル: 命名規則
nixos-YY-MM安定チャンネルのアップデートは主にバッグフィックスとなります。 - 開発チャンネル:
nixos-unstable開発チャンネル、最新の昨日も含めるがプロダクションシステムには向いてない。 - スモールチャンネル: 命名規則`nixos-[unstable|YY-MM]-small`` 該当チャンネルよりバイナリパッケジが少ない。サーバに向いています。
次のコマンドでチャンネルを変更できます
$ nix-channel --add https://nixos.org/channels/チェンネル名 nixosしたがって、nixos-unstableチャンネルを利用する場合は
$ nix-channel --add https://nixos.org/channels/nixos-unstable nixos$ nix-channel --updatenix-envコマンドでパッケージを検索できます。
$ nix-env -qaP 'firefox'正規表現も使えます
$ nix-env -qaP 'fire.*'noxというパッケージ検索インストールヘルパーがあります。
nix-envよりは使いやすいのでメインで使うのはおすすめです。
$ nox firefoxNixではマルチユーザーパッケージインストールが可能のため、パッケージのインストールには2つの方法があります。
NixOSの宣言型設定を活かしたり、シングルユーザーで使用したりする場合はシステムプロフィールへのインストールがおすすめです。
一般Linuxディストリビューションと同様にコマンドを実行してパッケージをインストールする。
$ nix-env -i firefox- メリット: 一般ユーザがインストールできる
- デメリット: 宣言型ではない
/etc/nixos/configuration.nixでシステムレベルでインストールするパッケージを指定できます。
該当設定項目はenvironment.systemPackagesとなります。
environment.systemPackages = with pkgs; [
firefox
termite
wget
];パッケージを追加した後はnixos-rebuild switchで設定を適用し、パッケージをインストールします。
$ nixos-rebuild switch- メリット: 宣言型である
- デメリット: root権限が必要
NixはNixストアで利用しているチャンネルに合っているnixpkgsをもっていますので、 パッケージアップデートをするは2ステップです。
- チャンネルをアップデートして、ストア内のnixpkgsをアップデートする
- パッケージをアップデートする
ユーザパッケージは
$ nix-env -uシステムパッケージは
$ nixos-rebuild switch --updateで更新できます。
nixos-rebuild switchはconfiguration.nixを再評価し、パッケージ以外にサービスやモジュールを同時にアップデートします。
アップデート結果を試す場合は、アップデート後の状態のバーチャルマシンを作りましょう。
$ nixos-rebuild build-vmnixos-rebuildには-I nixos-config=任意の設定ファイルと-I nixpkgs=で任意のnixpkgsパスを利用できます。
$ nixos-rebuild build-vm -I nixpkgs=~/my-project/nixpkgs/ -I nixos-config=~/my-project/configuration.nix
コマンドを実行したフォルダーにresult/binフォルダーが作成され、その中にバーチャルマシンの起動プログラムがあります。
$ ./result/bin/run-*-vm※ バーチャルマシンにはホストのデータがアクセスできないので、ユーザ等のデータは利用できません。
nix-shellで簡単にパッケージを試す事ができます。
$ nix-shell -p qutebrowser
$ qutebrowser※ -pの後に複数のパッケージを指定できます。
Nixの仕様上、パッケージを直接アンインストールする事はできません。 アンインストールするためにはパッケージをアンリンクしてから、ガーベージコレクションを実行します。
ユーザプロフィールにインストールしたパッケージなら
$ nix-env -e firefoxグローバルプロフィールにインストールされたパッケージはconfiguration.nixのenvironment.systemPackagesから削除してから
$ nixos-rebuild switchNixOSのロールバック機能のために以前のプロフィール世代に利用されているパッケージが必要です。 古いプロフィール世代を削除することで、NixOSは不要なパッケージを判断し、ストアから削除します。
$ nix-collect-garbage --delete-older-than 14d--delete-older-thanの14dは14日以上の古いプロフィール世代を削除し、不要になったパッケージ(世代にリンクされていないパッケージ)をストアから削除します。
使い方によってNixストアの利用領域は大きくなりやすいので、定期的にガーベージコレクションを行いたいましょう。
ユーザプロフィールは
$ nix-env --list-generationsシステムプロフィールは(root権限必要)
$ nix-env -p /nix/var/nix/profiles/system --list-generations
プロフィール世代とシステム世代をそれぞれロールバックできます。
まずはnix-envで世代を確認します
$ nix-env --list-generations18世代目にロールバックしたい場合は
$ nix-env --switch-generation 18まずはnix-envで世代を確認します
$ nix-env -p /nix/var/nix/profiles/system --list-generations
105世代目にロールバックしたい場合は
$ nix-env -p /nix/var/nix/profiles/system --switch-generation 105まずはnix-envで世代を確認します
$ nix-env -p /nix/var/nix/profiles/per-user/root/channels --list-generations
22世代目にロールバックしたい場合は
$ nix-env -p /nix/var/nix/profiles/per-user/root/channels --switch-generation 22