概要
よくある構成のマシンを開発環境としてセットアップする際のまとめ。
大まかに以下の要素からなる環境を構築する。
- 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.conf
のrlimit-nproc=3
をコメントアウトする。
(デフォルトだとavahi-daemonのマシン全体での起動プロセス数が制限されている)
結論
だいたいArch Wikiに書いてある。