% NixOS 16.09 Release % サニエ エリック % 2016年10月13日 - Tokyo NixOS Meetup
- サニエエリック
- 東京NixOSミートアップオーガナイザー
- NixOSコントリビューター(インプットメソッド等)
- 今は遊びでNixベースのスタティックサイトジェネレーターを作ってます
The Purely Functional Linux Distribution
- コントリビューションレートはGitHubのTop 10以内
- レビューアー数はGitHubの6位
- ~9万コミット
- ~900コントリビューター
- Nixパッケージマネジャーベース
- 完全オリジナル
- Nixパッケージマネージャーベース
- 2006年誕生
- 宣言型設定 (モジュールシステム)
- 安全性
- ロールバック機能
- アトミックアップグレード
- 軽量コンテナー
- DevOps
- OS = パッケージ + 設定
- パッケージ = Nix
- 設定 = モジュールシステム
- NixOS = Nix + モジュールシステム
- 宣言型設定
- プロビジョニング、サービス、ブート、ファイルシステム…
- 3500個以上のオプション
- Nix言語を利用
- 独自モジュールで拡張可能
/etc/nixos/configuration.nix
がメインの設定ファイル
-
プロビジョニング
environment.systemPackages = with pkgs; [ git mutt tmux ];
-
sytemdサービス
systemd.services.ircSession = { wantedBy = [ "multi-user.target" ]; after = [ "network.target" ]; serviceConfig = { Type = "forking"; User = "username"; ExecStart = "${pkgs.tmux}/bin/tmux new-session -d -s irc -n irc ${pkgs.irssi}/bin/irssi"; ExecStop = "${pkgs.tmux}/bin/tmux kill-session -t irc"; }; };
-
デスクトップ環境
services.xserver.enable = true; services.xserver.displayManager.gdm.enable = true; services.xserver.desktopManager.gnome3.enable = true;
-
カーネルバージョンの指定
boot.kernelPackages = pkgs.linuxPackages_4_4;
-
ユーザ作成
users.extraUsers.foo = { isNormalUser = true; extraGroups = [ "wheel" ]; };
-
httpdを有効
services.httpd = { enable = true; enablePHP = true; adminAddr = "[email protected]"; documentRoot = "/srv/http"; };
-
Nix言語も活かせる
services.httpd.virtualHosts = let makeVirtualHost = { name, root }: { hostName = name; documentRoot = root; adminAddr = "[email protected]"; }; in map makeVirtualHost [ { name = "example.org"; root = "/sites/example.org"; } { name = "example.com"; root = "/sites/example.com"; } { name = "example.gov"; root = "/sites/example.gov"; } { name = "example.nl"; root = "/sites/example.nl"; } ];
-
if
environment.systemPackages = with pkgs; if config.services.xserver.enable then [ firefox thunderbird ] else [ elinks mutt ];
-
gitlabを有効
services.gitlab = { enable = true; databasePassword = "eXaMpl3"; initialRootPassword = "UseNixOS!"; https = true; host = "git.example.com"; port = 443; user = "git"; group = "git"; extraConfig = { gitlab = { default_projects_features = { builds = false; }; }; }; };
-
nixos-rebuild
コマンドで設定を適応する$ nixos-rebuild switch
-
設定をビルドし、バーチャルマシン(QEMU)で動作確認
$ nixos-rebuild build-vm
-
パッケージセットと設定ファイルを指定できます
$ nixos-rebuild build-vm -I nixpkgs=~/my-project/nixpkgs/ -I nixos-config=~/my-project/configuration.nix
- 宣言的にOSを定義できます
- 設定ファイルを別マシンにコピーするだけで同じ環境を再現できます
- Surface 3用のNixOS設定ファイル
- セキュリティ: コンパイラ (Hardening Flags)
- 使用ディスク容量減少 (Multiple outputs)
- PXEネットブート対応
- 50以上の新モジュール