LoginSignup
1
1

More than 5 years have passed since last update.

systemd-nspawnとbtrfsによる雑な開発環境作成

Posted at

概要

よくある構成のマシンを開発環境としてセットアップする際のまとめ。

大まかに以下の要素からなる環境を構築する。

  • SSD + HDD
  • linux
  • systemd
  • btrfs
  • systemd-nspawn
  • avahi

systemd-nspawnとbtrfsのサブボリュームで適当に環境を切り出して使っていく想定。

使用するマシン

そのへんに売ってる普通のデスクトップマシン。
ストレージがSSDとHDDをそれぞれ積んでいるもの。
メモリは多ければ多いほどよい。

使用するOS

Arch Linuxを使う。
systemdが使えるものがよい。
ローリングリリースだと楽。

プリインストールでWindowsが入っていて一応残しておきたい場合はデュアルブートにする。
今はWindows側でパーティション構成を変更可能で、ブートマネージャーもsystemd-bootを使えばよいので案外簡単にデュアルブートにできる。

開発環境として使用する際はコンテナを作成してその中で作業する。
ホストとなるOSはなるべく最小構成にしておく。

ファイルシステム(btrfs)

ファイルシステムはbtrfsを使う。
サブボリュームとスナップショットを使いたいため。systemd-spawnとかdockerとかはbtrfsをいい感じに使ってくれる。
OSのルートディレクトリもサブボリュームにしておくと何かと便利。
使ったことないがSnapperを使ってもいいのかもしれない。

HDDも同様にbtrfsでフォーマットし、適当に/mnt/dataなどにマウントする。

コンテナ(systemd-nspawn)

開発環境としてはsystemd-nspawnで作成したコンテナを利用する。
ネットワークに関してはsystemd-networkdでブリッジを作成する(大量にコンテナをつくる場合はあまり良くないかもしれない)。

machinectlで管理するため、コンテナのルートは/var/lib/machines以下にサブボリュームとして作成する。
まずベースとなるコンテナをread onlyで作成し、それをmachinectl cloneして使う。

起動オプションは直接/etc/systemd/system/machines.target/systemd-nspawn@.service内を書き換えている。

名前解決(avahi)

いちいちIPアドレスを管理するのも手間なので、mDNSを利用する。
コンテナ内にavahiを利用する際は/etc/avahi/avahi-daemon.confrlimit-nproc=3をコメントアウトする。
(デフォルトだとavahi-daemonのマシン全体での起動プロセス数が制限されている)

結論

だいたいArch Wikiに書いてある。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1