Nix - 純粋に機能的なLinux用パッケージマネージャ


Nix は、信頼性と再現性のあるパッケージ管理のために設計された強力で純粋に機能的なパッケージ管理システムです。GNULGPLv2.1の条件の下でリリースされています。これはあまり知られていないLinuxディストリビューションである NixOS の主要なパッケージ管理システムです。

Nixは、開発者がどのプログラミング言語やツールを使用しているかにかかわらず、アトミックアップグレードとロールバック、複数バージョンのパッケージインストール、マルチユーザーパッケージ管理、パッケージのビルド環境の簡単なセットアップを提供します。

Nix では、パッケージは「 Nixの表現」と呼ばれる機能的なパッケージ言語から構築されます。パッケージ管理に対するこの機能的なアプローチは、あるパッケージをインストールまたはアップグレードすることで他のパッケージを壊すことができないことを保証します。

Nixはマルチユーザーサポートも持っています。つまり、通常の(または特権のない)システムユーザーは安全にパッケージをインストールでき、各ユーザーはプロファイル(ユーザーのPATHに表示されるNixストア内のパッケージの集合)によって識別されます。

1人のユーザーがパッケージをインストールした場合、別のユーザーが同じパッケージをインストールしようとしても、そのパッケージは2度目にはビルドまたはダウンロードされません。

現在はLinux(i686、x86_64)およびMac OS X(x86_64)をサポートしています。しかし、それはかなり移植性があり、POSIXスレッドをサポートしC ++ 11コンパイラを持つほとんどのプラットフォームで試すことができます。

この記事では、Linuxでのインストール方法(マルチユーザーモード)と Nix パッケージマネージャの使い方を説明します。一般的に使用されるツールに関連して、基本的なパッケージ管理タスクのいくつかについて説明します。

LinuxにNix Package Managerをインストールする方法

マルチユーザーモードで Nix の最新版(執筆時点では v2.1.3 )をインストールします。幸い、システム上で次のcurlコマンドを使用して、通常のユーザーとしてシェルから実行できる準備ができたインストールスクリプトが用意されています。

$ sh <(curl https://nixos.org/nix/install) --daemon

上記のコマンドを実行すると、最新のnixバイナリtarボールがダウンロードされ、スクリーンショットに示すように、マルチユーザーのnixインストール画面に移動します。

インストールプロセス中に何が起こるかの詳細なリストを表示するには、 y を入力して Enter を押します。問題がなく、続行する準備が整ったら、 y と入力して Enter を押します。

スクリプトは必要に応じてsudoコマンドを何度も呼び出します。 y に答えて Enter を押すことで、 sudo を使用することを許可する必要があります。

その後、インストーラはいくつかのテストを実行してNix設定レポートを生成し、ユーザーID 30001 30032 の間にビルドユーザーを作成し、グループIDが 30000 プロンプトが表示されたら続行するには y を入力してください。それは異なるビルドユーザーのためにビルドグループを設定し、Nixの基本的なディレクトリ構造を作ります。

ファイルがある場合は、/etc/bashrc zsh の場合は/etc/zshrc )が変更されます。最初に上記のファイルが .backup-before-nix の拡張子でバックアップされ、インストーラによって /etc/profile.d/nix.sh というファイルも作成されます。

インストーラはまた、nix-daemonサービスとnix-daemonソケットサービスをセットアップし、nix-daemon用のsystemdユニットをロードして、前述の2つのサービスを開始します。

インストールが完了したら、Nixを使い始めるために新しいターミナルウィンドウを開く必要があります。あるいは、最近の変更を適用するためにシェルを閉じて再度開きます。それから /etc/profile.d/nix.sh ファイルを読み込みます(これはシェル起動ファイルではないため、新しいシェルを開いてもファイルは読み込まれません)。

$ source /etc/profile.d/nix.sh

次に、次のコマンドを実行して、プロジェクトの公式Webサイトから Nix が動作するのに必要なパスをダウンロードします。すべてのパスがダウンロードされ、正しい場所にコピーされると、スクリーンショットに示すように、システムとnixのインストールタイプの概要が表示されます。

$ nix-shell -p nix-info --run "nix-info -m"

LinuxでNix Package Managerを使用する方法

[ Nix ]の下では、パッケージ管理は nix-env ユーティリティによって行われます。これは、パッケージのインストール、アップグレード、削除、削除、およびインストールされているパッケージやインストール可能なパッケージの照会に使用されます。

すべてのパッケージはNixチャネルにあります。Nixチャネルは、Nix式のコレクションとバイナリキャッシュへのポインタの両方を含むリポジトリを指すURLです。

デフォルトのチャンネルは Nixpkgs で、購読しているチャンネルのリストは〜/ .nix-channels に保存されています。次のコマンドを使用してそれらを一覧表示できます(出力なしはチャンネルなしを意味します)。 。

$ nix-channel --list

Nixチャンネルを追加するには、次のコマンドを使います。

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

パッケージをインストールする前に、Nixチャンネルを更新することから始めてください。これはAPTパッケージマネージャで apt update を実行するのと似ています。

$ nix-channel --update

次のコマンドを使用して、どのパッケージがインストールに利用可能かを問い合わせることができます。

$ nix-env -qa

この例では、grepと組み合わせて前のコマンドを使用してApache Tomcatサーバーをインストールし、図のようにパッケージがインストール可能であることを確認します。

$ nix-env -qa | grep "apache-tomcat"

パッケージをインストールするには、パッケージのバージョンを指定して次のコマンドを使用します(例: apache-tomcat-9.0.2 )。

$ nix-env -i apache-tomcat-9.0.2

ローカルシステムでは、Nixは Nixストアにデフォルトでパッケージを保存します。デフォルトでは/nix/store ディレクトリです。各パッケージには固有のサブディレクトリがあります。たとえば、 apache-tomcat パッケージは次の場所に格納されています。

/nix/store/95gmgnxlrcpkhlm00fa5ax8kvd6189py-apache-tomcat-9.0.2

このパスで、ランダムな文字 95gmgnxlrcpkhlm00fa5ax8kvd6189py は、すべての依存関係を考慮に入れたパッケージの一意の識別子です。

次のコマンドでインストール済みパッケージを一覧表示できます。

$ nix-env -q

apache-tomcat パッケージをアップグレードするには、図のように -u アップグレードスイッチを使用できます。

$ nix-env -u apache-tomcat

apache-tomcat を削除または削除したい場合は、 -e フラグを使用してください。ここで、パッケージはシステムからすぐに消去されるのではなく、未使用にされるだけです。ロールバックを実行したい場合や、他のユーザーのプロファイルに含まれている場合があるため、これは便利です。

$ nix-env -e apache-tomcat

パッケージを削除したら、 nix-collect-garbage ユーティリティを使用してガベージコレクションを実行できます。

$ nix-collect-garbage

LinuxでNix Package Managerを削除する方法

Nixをアンインストールするには、一度にすべてのnix関連ファイルを削除します。

$ sudo rm -rf /etc/profile/nix.sh /etc/nix /nix ~root/.nix-profile ~root/.nix-defexpr ~root/.nix-channels ~/.nix-profile ~/.nix-defexpr ~/.nix-channels

systemdがインストールされているシステムで、次のコマンドを実行して、nixに関連するすべてのサービスを停止して無効にします。

$ sudo systemctl stop nix-daemon.socket
$ sudo systemctl stop nix-daemon.service
$ sudo systemctl disable nix-daemon.socket
$ sudo systemctl disable nix-daemon.service
$ sudo systemctl daemon-reload

さらに、これらのファイル内のNixへの参照をすべて削除する必要があります。/etc/profile /etc/bashrc /etc/zshrc

詳しくは、上記のユーティリティのmanページを参照してください。

$ man nix-channel
$ man nix-env

プロジェクトのWebサイトhttps://nixos.org/nix/にNix Package Managerの資料があります。

Nix は、信頼性と再現性のあるパッケージ管理のために設計された純粋に機能的なパッケージマネージャです。これは、YUM、APT、その他多くのLinuxで一般的に使用されているツールとはまったく異なる、パッケージ管理の興味深い概念を提供します。

この記事では、マルチユーザーモードでnixをインストールする方法を示し、Nixを使ってパッケージ管理を行う方法について説明しました。私たちとあなたの考えを共有したり、以下のコメントフォームを介して質問をします。最後に、今後の記事で、Nixパッケージ管理コマンドについてさらに説明します。それまでは、接続したままにしてください。