Skip to content

Latest commit

 

History

History
270 lines (182 loc) · 7.57 KB

source.markdown

File metadata and controls

270 lines (182 loc) · 7.57 KB

% nixpkgs % サニエ エリック % 2016年6月24日 - Tokyo NixOS Meetup

アジェンダ

  • ニュース
  • nixpkgsとは
    • 構造
    • ライブラリ
    • プログラミング言語サポート
    • NixOS
  • Free talk

This month in Nix

This month in Nix

Nix Trick

  • 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»; }

nixpkgs

  • gitレポジトリ
  • Nix(パッケージマネージャー)のパッケージ(レシピ)セット
  • それ以外
    • NixOSのコード・モジュール・テスト
    • nixpkgsとNixOSのドキュメンテーション
  • マニュアル

ローカルnixpkgsの利点

  • カスタムなパッケージセット、モジュールを利用できます
  • 自サーバHydraと組める

nixpkgsをゲット

  • 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の使い方

  • ローカルnixpkgsからパッケージを検索する

    $ nix-env -qaf ./ firefox
  • ロカールnixpkgsからシェルを起動する

    $ nix-shell -p htop -I nixpkgs=./
  • ローカルnixpkgsからパッケージをビルド

    $ nix-build -A htop

nixpkgsのフォルダー構造

  • doc: nixpkgsのドキュメンテーション
  • lib: Nix言語のライブラリ関数
  • maintainers: メンテナ用のスクリプト等
  • nixos: NixOS関連コード
  • pkgs: メインフォルダー、パッケージセット

doc

  • xml形式のnixpkgsドキュメンテーション

  • language-frameworksにプログラミング言語のドキュメンテーション

  • default.nixでマニュアルビルドエクスプレッション

  • ビルドできます

    $ nix-build doc/default.nix

lib

  • Nix言語のライブラリ
    • セット、リスト、文字列等の関連関数
  • NixOSモジュールシステムライブラリ
  • メンテナ、対応システム、ライセンス一覧

pkgs

  • すべてのパッケージ定義
    • pkgs/top-level/all-packages.nix
  • フォルダーでパッケージの種類が別れています
    • 多少不規則
    • 似たパッケージがあれば(grepで検索)同様な構造にするが無難

all-packages.nixまで

  • default.nix: Nixのバージョンチェック
  • pkgs/top-level/default.nix
    • システムチェック
    • ライブラリのインポート
    • 設定ファイルの読み込み(~/.nixpkgs/config.nix)
    • オーバーライドを適応
  • pkgs/top-level/all-packages.nix: すべてのパッケージセット
  • ノート: all-packages.nixまでの流れを改善するPRがあります

all-packages.nix

  • すべてのパッケージをまとめるファイル
  • 17000行、多少カオス
  • パッケージ追加に必ず変更する

パッケージの追加

  • 流れ
    • パッケージファイルを作る
    • all-packages.nixにパッケージ呼び出しを追加
  • 参考書

プログラミング言語対応

Hydraとの連携

  • Hydraのジョブはnixpkgsで定義されています
  • pkgs/top-level/release.nixに宣言
  • x86_64-linuxi686-linuxx86_64-darwin対応
    • pkgs/top-level/release-cross.nixで他のシステム
  • 流れ

nixos

  • NixOS関連コード
  • nixos
    • doc: NixOSのドキュメンテーション
    • lib: NixOS専用ライブラリ(モジュールシステム、テスト関連)
    • modules: 各モジュールの宣言
    • tests: リリース用のテスト
    • release.nix: NixOS関連のジョブ(マニュアル、バーチャルマシンなど)
    • release-combined.nix: NixOSとnixpkgsのHydraのジョブ

modules

  • NixOSのメインコード
  • pkgsと同様、種類別でフォルダー分けています
  • 各モジュールは宣言(options)とロジック(config)を含む
  • モジュールのドキュメンテーションも含まれます

tests

  • 各テスト宣言

  • 専用なライブラリ(nixos/lib/test-driver/Machine.pm

  • テストはQemuバーチャルマシンで実行されます

  • 正常に終わると結果にHTMLレポートができます

  • 手動で実行可能

    $ nix-build nixos/release.nix -A tests.i3wm

release.nix

  • 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

Free talk ideas

  • Question time
  • Nix Expressionの解読
  • stdenvの仕組み
  • lib関数チェック