% nixpkgs % サニエ エリック % 2016年6月24日 - Tokyo NixOS Meetup
- ニュース
- nixpkgsとは
- 構造
- ライブラリ
- プログラミング言語サポート
- NixOS
- Free talk
- Rework goPackages
- Python: buildPyPIPackage and generated data
- DisNix 0.6
- Nix: Get rid of the Perl dependency (rewrite in C++, too bad not in Haskell!)
- Haskell LTS support change
-
Using string as path to eg. builtins.readFile
nix-repl> ./ + "/foo" error: syntax error, unexpected '.', at (string):1:1 nix-repl> ./. + "/foo" /home/eric/Projects/nixos/nixpkgs/foo
-
Hydraでのパッケージ評価を確認
nix-repl> :l ./nixos/release-combined.nix Added 3 variables. nix-repl> nixpkgs.php { i686-linux = «derivation /nix/store/jnh3rdr9bxp0yi1kcsi9pcd2cga43njb-php-5.6.22.drv»; x86_64-linux = «derivation /nix/store/11bxnw1bkfmzjwrjhccr2g39bdy8xjaq-php-5.6.22.drv»; }
- カスタムなパッケージセット、モジュールを利用できます
- 自サーバHydraと組める
-
git
でクローンできます$ git clone https://github.com/NixOS/nixpkgs.git
-
チャンネルのリモートを追加するとテストの際にバイナリパッケージを利用できます
$ cd nixpkgs $ git remote add channels https://github.com/NixOS/nixpkgs-channels.git $ git fetch channels
-
ローカルnixpkgsからパッケージを検索する
$ nix-env -qaf ./ firefox
-
ロカールnixpkgsからシェルを起動する
$ nix-shell -p htop -I nixpkgs=./
-
ローカルnixpkgsからパッケージをビルド
$ nix-build -A htop
doc
: nixpkgsのドキュメンテーションlib
: Nix言語のライブラリ関数maintainers
: メンテナ用のスクリプト等nixos
: NixOS関連コードpkgs
: メインフォルダー、パッケージセット
-
xml形式のnixpkgsドキュメンテーション
-
language-frameworks
にプログラミング言語のドキュメンテーション -
default.nix
でマニュアルビルドエクスプレッション -
ビルドできます
$ nix-build doc/default.nix
- Nix言語のライブラリ
- セット、リスト、文字列等の関連関数
- NixOSモジュールシステムライブラリ
- メンテナ、対応システム、ライセンス一覧
- すべてのパッケージ定義
pkgs/top-level/all-packages.nix
- フォルダーでパッケージの種類が別れています
- 多少不規則
- 似たパッケージがあれば(
grep
で検索)同様な構造にするが無難
default.nix
: Nixのバージョンチェックpkgs/top-level/default.nix
- システムチェック
- ライブラリのインポート
- 設定ファイルの読み込み(
~/.nixpkgs/config.nix
) - オーバーライドを適応
pkgs/top-level/all-packages.nix
: すべてのパッケージセット- ノート:
all-packages.nix
までの流れを改善するPRがあります
- すべてのパッケージをまとめるファイル
- 17000行、多少カオス
- パッケージ追加に必ず変更する
pkgs/development/
以下に入っています- 言語によってサポートは不平等
- Haskellは特によくサポートされています
- 言語毎に統一性は少ない(専用DSLに近い)
- が最近は改善されています
- Haskellがベース(
withPackages
など)
- 最近は言語毎の全パッケージで自動的に全パッケージセットを生成する
- Hydraのジョブはnixpkgsで定義されています
pkgs/top-level/release.nix
に宣言x86_64-linux
、i686-linux
とx86_64-darwin
対応pkgs/top-level/release-cross.nix
で他のシステム
- 流れ
- NixOS関連コード
nixos
doc
: NixOSのドキュメンテーションlib
: NixOS専用ライブラリ(モジュールシステム、テスト関連)modules
: 各モジュールの宣言tests
: リリース用のテストrelease.nix
: NixOS関連のジョブ(マニュアル、バーチャルマシンなど)release-combined.nix
: NixOSとnixpkgsのHydraのジョブ
- NixOSのメインコード
pkgs
と同様、種類別でフォルダー分けています- 各モジュールは宣言(
options
)とロジック(config
)を含む - モジュールのドキュメンテーションも含まれます
-
各テスト宣言
-
専用なライブラリ(
nixos/lib/test-driver/Machine.pm
) -
テストはQemuバーチャルマシンで実行されます
-
正常に終わると結果にHTMLレポートができます
-
手動で実行可能
$ nix-build nixos/release.nix -A tests.i3wm
-
NixOSのHydraジョブ
-
マニュアル
$ nix-build nixos/release.nix -A manual
$ nix-build nixos/release.nix -A manualPDF
-
バーチャルマシンイメージ
$ nix-build nixos/release.nix -A ova
-
NixOSのインストールCDイメージ
$ nix-build nixos/release.nix -A iso_minimal
-
テスト
$ nix-build nixos/release.nix -A tests.i3wm
- Question time
- Nix Expressionの解読
stdenv
の仕組みlib
関数チェック