NixOSの話Tweetこんにちは。普段はデータサイエンティスト・機械学習エンジニアをやっています。2018の3日目の記事です。adventar.org昨日12月2日は、弊社delyの開発部プロダクトーナー兼GM奥原の記事でした。この1年でdelyは「kurashiru」の成長とともに体制も大きく変化しました。そんな中、若きプロダクトオーナー兼GMとなった彼の苦悩や意気込みなどが赤裸々に綴られています。tech.dely.jpさて、今回は特定のテーマに沿う必要はないとのことだったので、機械学習とは関係なく、ぼくが普段使っているクライアントOSの話をさせてもらおうと思います。ふつう、クライアントPCで使うOSといえば、MacOSやWindowsを使ってる方が多いかと思いますが、エンジニアの方ですと、なんらかのLinuxディストリビューションを使っている人もそれなりに多いのではないでしょうか?ぼく自身もとあるLinuxをクライアントOSとして3年ほど使っていまして、ちょっとクセの強いOSではあるのですが、使っていくうちにだんだんと安心感を感じてくる面白いOSなので、この機会にぜひご紹介させて頂きたいと思います。ぼくとNixOSとの出会いぼくはNixOS(最新バージョンは18.09)というOSを使っています。ほとんどの方がご存じないと思います(笑)。ぼくはこのOSを2015年の中頃から使い始めて、最初の頃はMac上のVirtualBoxに割り当てて使っていたのですが、ある日ふと気がついたら、自宅で使っているほぼすべてのPCがNixOSになってしまいました。delyでの開発に使っているクライアントマシンもこのNixOSです。LinuxNixOSについてNixOSのサイトに行くと、この様な記載があります。advantages.つまり、純粋関数型Linuxディストリビューションなのが売りと言っています。この説明にもあるように、NixOSはNixパッケージマネージャーの上に構築されていて、完全に宣言的に扱うことが可能となっています。いうわけでまずはNixパッケージマネージャーについてご紹介したいと思います。ManagerこちらのNixのサイトに行くと、次のように記載されています。environments.やはり、純粋関数型なんですね。要するに、NixOSというのは純粋関数型パッケージマネージャー上で動くOS、だから純粋関数型OSというわけなんです。このNixパッケージマネージャーついては、いわゆる通常のパッケージマネージャーの一つですので、aptやyum、homebrewなどと同じようにパッケージを管理するのに扱えます。以下のコマンドでmacOSにインストールすることも可能です。Collection)に登録されているライブラリの中からパッケージをインストールします。ソースはgithubでリポジトリ管理されていて、Hydraという継続ビルド管理システムで管理されています。github.comNixの仕組みもう少しNixの仕組みについて見ていきたいと思います。Dolstraさんの論文です。非常にエキサイティングな内容となっています。https://grosskurth.ca/bib/2006/dolstra-thesis.pdf全体としてはこのような外観となっています。WikiNixにおけるすべての設定関数はこのNix言語で記述します。使って構文を試すことができます。4[Nixストア]インストールパッケージは必ずNixストアにインストールされるストア内に同じパッケージの複数バージョンが共存できる(※なので、HDDの結構ボリュームが消費されます。それらを整理するためにGC機能があります。nixos-unstable-smallNixストア内にはNixチャンネルの最新nixpkgsが入っていてNixに利用されるHydraでインストールパッケージがビルドされ、自動的にバイナリパッケージが生成される(これが特定のチャンネルとして提供される)NixOSの仕組みNixOSは、このようにNixパッケージマネージャーを中心で構成されているOSなのでした。まとめるとNixOS自体はこのような外観をしています。NixOS全体の外観NixOSを使うと以下のような恩恵を受けられます。(NixOps)モジュールシステム(宣言型設定)なんと言ってもNixOSといえばこれという機能です。様々な設定やパッケージ管理、システムの自動化などを宣言的に管理することができます。モジュールシステムはnixpkgs内に含まれていてNix言語を使って記述します。NixOSのメインとなる情報はこのファイルに宣言的に記載します。/etc/nixos/configuration.nix宣言的に設定した例をいくつか紹介します。Hellからの脱却インストールパッケージは、ストア内の導出ハッシュによって特定されたフォルダにインストールされるので、たとえばバージョンの異なる2つのパッケージが上書きされることもなく(別のハッシュ値が生成されるため)、またパッケージが依存する別のパッケージについてもこの導出ハッシュを用いてビルドされるため、相互的に依存し合うパッケージは存在しません。インストール時に毎回、環境依存に怯えながらインストールすることはなくなります。(この点に関してはDockerを使えば問題は解決すると思いますが、NixOS上でもDockerはもちろん使えますので、ぼくの場合は用途によって適宜使い分けています。)ロールバックなんらかのsystem設定を間違えてしまったために、OSが起動しなくなってオワタという経験も、NixOSを使えばさっとロールバックできるから安心です。Dev/OpsツールNixOSのDev/OpsツールとしてNixOpsがあります。NixOSはDev/Opsを大変重要視した設計思想となっていて、NixOpsを使うことで、デプロイ先のハードウェアや仮想マシンに対してNixOSのセットを展開することができます。NixOSのシステム構成管理はクライアントPCとシームレスに管理でき、宣言的なアプローチをネットワークにも拡張し、さらにそのプロビジョニングを追加することができます。ぼくが所有している複数のNixOSマシンについてもNixOpsを用いて設定構成をネットワーク拡張して使用しています。NixOSの不便なところNixOSはとても便利かつ安心して利用できるOSなのですが、すべての人にとってそう言えるかといえばなかなかそれは難しい面もあります。クセが強いので慣れるまでに時間がかかる利用できるパッケージが他のパッケージより少ないので、ないパッケージは自分でビルドする必要がある(ものによっては結構難しい。)ちょっとしたことを試すのが面倒(そんなときこそDockerを使いましょう)Dockerのサービス起動もたったのこれだけです。};}終わりにいかがでしたでしょうか?NixOSの特性についてざっくりとご紹介させて頂きました。Hell”から開放され、依存関係の完結が保証されることで、堅牢な管理や安全なロールバックが可能となります。NixOSには今回ご紹介できなかった機能がまだまだたくさんありますので、もしご興味を持っていただけたらぜひお試し頂けると嬉しいです。2018)で、Nixを使ったデータパイプラインの設定についてのセションがあって個人的にとても興味深かったです。機械学習やパイプライン基盤にもNixOSを使うと面白そうですね。Calendarの明日のタイトルは、『超手軽に構築する!サーバレスなWEBパフォーマンス定点観測基盤』です。2019の23日目の記事です。qii...2019-12-19エンジニアは体が資本でしょ。dely株式会社サーバーサイドチームの安尾です。月別アーカイブはてなブログをはじめよう!delyjpさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。