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 --update
nix-env
コマンドでパッケージを検索できます。
$ nix-env -qaP 'firefox'
正規表現も使えます
$ nix-env -qaP 'fire.*'
nox
というパッケージ検索インストールヘルパーがあります。
nix-env
よりは使いやすいのでメインで使うのはおすすめです。
$ nox firefox
Nixではマルチユーザーパッケージインストールが可能のため、パッケージのインストールには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-vm
nixos-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 switch
NixOSのロールバック機能のために以前のプロフィール世代に利用されているパッケージが必要です。 古いプロフィール世代を削除することで、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-generations
18世代目にロールバックしたい場合は
$ 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