% NixOps & Nix DevOps % Tokyo NixOS Meetup % 2016年3月24日
This month in Nix - News from the front
- NixOS 16.03 β
- fcitx input method do not work on unstable and 16.03
- NixUP
- nixos-assimilate
- Multiple Outputテスト段階、16.09にマージ予定
- コンテナー改善
This month in Nix - Reddit topics
- Erlang Factory 2016で2つのNix関連トークがありました
- Practical use of NixOS/nixpkgs
This month in Nix - ML topics
- IED, an alternate package manager for node
- Overriding by removing a derivation attribute
- Displaying package parameters
This month in Nix - Tokyo NixOS
- OSC東京
- トーク
- グッズ
- マニュアル翻訳開始
- 勉強会資料生成をmakeからnixに変更
- 4月22日にWakame User GroupにNixを紹介します
- Buzzword
- デプロイメントから
- 組織改善まで
- "シスアドミン版のアジャイル"
- 今日はソフトウェアデプロイメント改善と自動化を中心とします
- 問題のないソフトウェアをリリースする
- 環境の統一
- 継続的インテグレーション(CI)、品質保証(QA)
- 簡単、早い、正しいデプロイメント
- 専用ツール
- リリース反復↑、品質↑、リスク↓、効率↑
-
環境とパッケージを別々に管理
-
依存地獄解決
-
設計でDevOps問題を部分的に解決
-
元々デプロイメントを解決するために開発された
-
nix論文より
This thesis is about getting computer programs from one machine to another - and having them still work when they get there.
-
特定な環境を起動するツール
-
nix-shell
を試す$ nix-shell -p redis --run "redis-server"
$ nix-shell -p redis --run "redis-cli"
-
nixファイルで定義した環境を読み込める
-
デモ: python開発用nix-shell
examples/nix-shell/python.nix
-
デモ: haskell開発用nix-shell
examples/nix-shell/haskell.nix
-I nixpkgs=
パラメーターで特定なnixpkgsバージョンを利用できます--pure
で純粋な環境を利用- hookも利用できます
- systemd-nspawnベース
- Web開発に向いてる
- configuration.nixで宣言
- Vagrantと似た使い方ができます
configuration.nix
と同じオプションを利用できます- ネットワーク定義 (
hostAddress
,localAddress
) - シェアフォルダー (
bindMounts
)
-
サンプル
containers.httpd = { privateNetwork = true; hostAddress = "10.0.0.11"; localAddress = "10.0.0.12"; autoStart = true; config = { config, pkgs, ... }: { # ポート開放 networking.firewall.allowedTCPPorts = [ 80 ]; # アパッチhttpdを有効 services.httpd = { enable = true; adminAddr = "[email protected]"; documentRoot = "${pkgs.valgrind.doc}/share/doc/valgrind/html"; }; }; };
-
[email protected]
ユニットで管理される -
コンテナーにログインできます
$ nixos-container login CONTAINER-NAME
$ nixos-container root-login CONTAINER-NAME
- Nixファイルでパッケージを定義
nix-build
でパッケージビルドnix-copy-closure
でクロージャを他マシンにコピーnix-env
で環境にインストール
-
パッケージとランタイム依存のセット
-
ストアパースに対して、クロージャーを
nix-store
コマンドで確認できます$ nix-store -qR STORE-PATH
-
--graph
パラメーターでクロージャーのdotファイルを生成できます$ nix-store -q --graph STORE-PATH > CLOSURE.dot
$ nix-shell -p python27Packages.xdot --run "xdot CLOSURE.dot"
-
nix-copy-closure
でクロージャーを他マシンに移動できます$ nix-copy-closure --to USER@SERVER STORE-PATH
$ nix-copy-closure --from USER@SERVER STORE-PATH
-
nix-env -i
でパッケージをインストールできます$ nix-env -i STORE-PATH
-
デモ: pythonアプリケーション
examples/package/
- NixOSデプロイメントを自動化
- コマンドラインツール:
nixops
- 論理ネットワークと物理ネットワークを別々に管理
sqlite
を利用(~/.nixops/deployments
)- Amazon EC2, Google CE、一般サーバ等のサポート
-
デプロイメントを作成
$ nixops create LOGICAL.nix PHYSICAL.nix -d DEPLOYMENT
-
デプロイメントをリストアップ
$ nixops list
-
デプロイメントの情報確認
$ nixops info -d DEPLOYMENT
-
デプロイメントを展開
$ nixops deploy -d DEPLOYMENT
-
マシンに接続
$ nixops ssh -d DEPLOYMENT MACHINE
-
デモ: pythonアプリケーション
examples/nixops/package/
-
モジュール例: binserverの紹介
-
デモ: python webサービス
examples/nixops/module/
-
デモ: python webサービス
examples/nixops/module+container/
-
none
バックエンドは普通のサーバをターゲットします -
サーバにNixOSインストールが必要
-
参考ファイル
examples/nixops/none/
-
論理定義ファイルを
NAME.logical.nix
、物理定義ファイルをNAME.physical.nix
にするとわかりやすい -
-I nixpkgs=
パラメーターで各コマンドに特定なチャンネルを利用できる$ nixops deploy -d DEPLOYMENT -I nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-15.09-small.tar.gz
$ nixops deploy -d DEPLOYMENT -I nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable-small.tar.gz
$ nixops deploy -d DEPLOYMENT -I nixpkgs=/home/foo/nixpkgs/
-
json形式でデプロイメントのインポート・エクスポートできます
$ nixops export -d DEPLOYMENT > FILE.json
$ nixops import -s DEPLOYMENT < FILE.json
-
パラメーターを設定する事ができます
$ nixops set-args --arg active true
-
デプロイメントは変更できます
$ nixops modify -d DEPLOYMENT -n NEWNAME LOGICAL.nix PHYSICAL.nix
- DisNixはNixを利用して、サービスの自動デプロイメントツール(異質環境対応)
- DisNix
- サービスモデル: サービスとその依存関係定義
- インフラモデル: 物理ネットワーク定義
- デプロイメントモデル: サービスをインフラのマップ定義
- 例
- NixOpsはNixOSの自動デプロイメントツール
- DisNixはNixベースのサービスデプロイメントツール
-
dockerTools
でdockerイメージを生成できます -
デモ: redisを含めたイメージを生成
examples/docker/
$ docker load < NIX-STORE $ docker run IMAGE COMMAND
- NixOpsマニュアル (英語)
- 日本語Wiki
- NixOSマニュアル (英語)
- パッケージ検索 (英語)
- モジュールオプション検索 (英語)
- Contributor Guide (英語)