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
  • メリット: 一般ユーザがインストールできる
  • デメリット: 宣言型ではない

システムプロフィールに(NixOSのみ)

/etc/nixos/configuration.nixでシステムレベルでインストールするパッケージを指定できます。 該当設定項目はenvironment.systemPackagesとなります。

  environment.systemPackages = with pkgs; [
    firefox
    termite
    wget
  ];

パッケージを追加した後はnixos-rebuild switchで設定を適用し、パッケージをインストールします。

$ nixos-rebuild switch
  • メリット: 宣言型である
  • デメリット: root権限が必要

パッケージのアップデート

NixはNixストアで利用しているチャンネルに合っているnixpkgsをもっていますので、 パッケージアップデートをするは2ステップです。

  1. チャンネルをアップデートして、ストア内のnixpkgsをアップデートする
  2. パッケージをアップデートする

パッケージのアップデート

ユーザパッケージは

$ nix-env -u

システムパッケージは

$ nixos-rebuild switch --update

で更新できます。

nixos-rebuild switchconfiguration.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.nixenvironment.systemPackagesから削除してから

$ nixos-rebuild switch

ガーベージコレクション

NixOSのロールバック機能のために以前のプロフィール世代に利用されているパッケージが必要です。 古いプロフィール世代を削除することで、NixOSは不要なパッケージを判断し、ストアから削除します。

$ nix-collect-garbage --delete-older-than 14d

--delete-older-than14dは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
⚠️ **GitHub.com Fallback** ⚠️