Nix

提供: ArchWiki
2024年5月7日 (火) 19:43時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎nix-shell の Zsh 統合: 記事を追加)
ナビゲーションに移動 検索に移動

Nix は、パッケージ管理の信頼性と再現性を高めることを目的とした純粋に機能的なパッケージマネージャーです。

インストール

Nix のインストールには 3 つの選択肢があります。ネイティブ Arch Linux パッケージ、Nix が公式にサポートするアップストリームインストールスクリプト、および Nix のサードパーティサポートを提供する会社である Determinate Systems が提供する「Zero to Nix」スクリプトです。

ネイティブ

Nix は nix パッケージでインストールできます。

アップストリームインストールスクリプト

ファイルを curl --proto '=https' --tlsv1.2 -sSfL https://nixos.org/nix/install -o nix-install.sh でダウンロードし、ファイルを確認します: less ./nix-install.sh、そしてスクリプトを実行します ./nix-install.sh --daemon で Nix のインストールを開始します。

警告: Nix のドキュメントが示唆しているように curl some-url | sh を実行することは、未知のコードを実行するためセキュリティリスクと見なされます。したがって、実行する前にスクリプトを手動でダウンロードして確認することを推奨します。

Zero to Nix インストールスクリプト

より簡単で、複雑でない Nix のセットアップを望む場合は、Determinate Systems のセットアップを使用できます。ファイルを curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix -o nix-install.sh でダウンロードし、ファイルを確認します: less ./nix-install.sh、そしてスクリプトを実行します sh ./nix-install.sh install でインストールを開始します。

警告: Determinate Systems が示唆しているように curl some-url | sh を実行することは、未知のコードを実行するためセキュリティリスクと見なされます。したがって、実行する前にスクリプトを手動でダウンロードして確認することを推奨します。
ノート: インストーラーはデフォルトで Determinate Systems にテレメトリを送信します。手動で無効にするには、sh ./nix-install.sh install --diagnostic-endpoint="" を使用してください。

詳細については、Determinate Systems のマニュアル を参照してください。

設定

Nix デーモンが起動時に起動するように、nix-daemon.service有効化します。

デーモンソケットにアクセスするために必要なユーザーを nix-users グループ に追加します。変更が有効になるためにセッションを再起動します。

チャンネル を追加し、更新します。

$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
$ nix-channel --update

使用方法

ノート: 公式リポジトリから Nix をインストールした場合、~/.nix-profile/bin ディレクトリを手動で PATH に追加する必要があります。

シェルが設定された後、以下を実行することで hello が更新された PATH にインストールされます:

$ nix-env -iA nixpkgs.hello

バイナリ自体は /nix/store/[hash]-hello-[version]/bin/hello に位置します。

hello を実行して、正しい PATH にあることを確認します。動作すれば、以下で削除できます:

$ nix-env --uninstall hello

または、インストールされているプログラムのリストを確認できます:

$ nix-env --query

さらに、世代をリストすることもできます:

$ nix-env --list-generations

より詳細な情報については nix-env(1) を参照してください。

ヒントとコツ

最大ジョブ数

デフォルトでは、nix は一つのビルダーのみを使用します。以下の設定により、nix は CPU の数だけのジョブを使用することができます:

/etc/nix/nix.conf
max-jobs = auto

グラフィカルアクセラレーション

OpenGL および Vulkan アプリケーションを実行するには、NixGL を使用します。

デスクトップ統合

デスクトップ環境と Nix アプリケーションを統合するために、~/.nix-profile/share ディレクトリを $XDG_DATA_DIRS に追加します。例えば、export XDG_DATA_DIRS=$HOME/.nix-profile/share:$XDG_DATA_DIRS を使用します。

nix-shell の Zsh 統合

nix-shell はデフォルトで Bash を起動します。zsh-nix-shellAUR は、nix-shell 環境でデフォルトのシェルとして Zsh を使用することを可能にします。一部のプロンプトプラグイン、例えば zsh-theme-powerlevel10kAURzsh-pure-promptAUR は、nix-shell インジケーターを提供します。

トラブルシューティング

ファイルが多すぎます

一部のビルドでは以下のようなエラーが発生することがあります:

error: opening directory '/nix/store/...': Too many open files

nix-daemon.service編集してファイルの上限を増やします:

[Service]
LimitNOFILE=65536

root ユーザーチャネルに関する警告メッセージ

Nix を使用中にこのエラーが発生した場合:

warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels' does not exist, ignoring

root ユーザーはチャネルを更新する必要があります:

# nix-channel --update

ユーザー関連の Nix 検索パスエントリが存在しない、無視しています

warning: Nix search path entry '/nix/var/nix/profiles/per-user/<USER>/channels' does not exist, ignoring

FS#78828 を参照してください。または、問題が発生しない #Upstream installation script または #Zero to Nix installation script を使用できます。

エラー: ファイル 'nixpkgs' が Nix 検索パスに見つかりませんでした (これを $NIX_PATH または -I で追加してください)

FS#78828 を参照してください。または、問題が発生しない #Upstream installation script または #Zero to Nix installation script を使用できます。

サンドボックスビルドの問題

その他のサンドボックスの問題

error: while setting up the build environment: mounting /proc: Operation not permitted
error: program '/usr/bin/nix-env' failed with exit code 1
1: package 'utils' in options("defaultPackages") was not found
2: package 'stats' in options("defaultPackages") was not found
Error: .onLoad failed in loadNamespace() for 'utils', details:
 call: system(paste(which, shQuote(names[i])), intern = TRUE, ignore.stderr = TRUE)
 error: cannot popen '/nix/store/fnkvlbls29d01jcx3wsdnhykyrl7087r-which-2.21/bin/which 'uname' 2>/dev/null', probable reason 'Cannot allocate memory'

この問題は上流で知られています:#2311#3000、および #4636

警告: サンドボックスを無効にすることは一般的に推奨されておらず、ビルド環境が汚染され、さらにビルドエラーが発生する可能性があります。nixpkgs からの何でもサンドボックスでビルドされることを期待しています。

最も一般的な修正は、設定ファイルでサンドボックスを無効にすることです:

/etc/nix/nix.conf
# disable sandboxing
sandbox = false

その後、nix-daemon サービスを再起動します。

ロケール警告

Nix wikiexport LOCALE_ARCHIVE=/usr/lib/locale/locale-archive の実行を推奨しています。または、環境変数 LC_ALL=C をエクスポートします。