ルーターの設定でおかしなことをしてた
_ 恥ずかしくて書けない。ずっと前から見れなかった人、これで見れるはず。
_ vagrant-lxdを試したらかなり良かったのでメモ
tDiaryが嫌になってHexoに移行しようとしたけれど、インポートした過去の日記をビルドするだけで何十分もかかり移行計画は頓挫していました。しかし、夏に思うところあってTwitterを止めて、FacebookはFacebookでいろいろ問題もあり積極的に書く気にならず、結果的に自分のサイトに戻っています。
しかし、tDiaryから別のプラットフォームへの移行を含めたサーバーの刷新計画を諦めたわけではなく、時間を見つけてはVagrantで試しています。
そうするとVirtualBoxのリソースの消費が気になってきたりしたので、試しにlxdとVagrantにlxd providerを追加するvagrant-lxdプラグインを入れたところ、ほとんどハマるところなく動いて、なかなか良かったのでメモしておきます。
試している環境は、もちろんDebian Sid(amd64)です。Debian系なら、おそらく、そのまま使えると思います。
lxdのインストールと設定
当たり前ですがlxdが必要なのでインストールします。インストールは以下を参考にしました。
- Linux Containers - LXD - はじめに - コマンドライン: https://linuxcontainers.org/ja/lxd/getting-started-cli/
- 第521回 入門システムコンテナマネージャーLXD 3.0:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社: https://gihyo.jp/admin/serial/01/ubuntu-recipe/0521
lxdのインストールは、snapからのインストールが推奨されているようなのでsnapをインストールしてからlxdをインストールします。lxdのストレージプールにはbtrfsを利用するので一緒にbtrfs-progsもインストールしておきます。
$ sudo apt install snapd btrfs-progs
snapをインストールしたら、lxdをインストールします。
$ sudo snap install lxd
lxdがインストールできたら、snapでインストールされたパッケージのコマンドなどが入る /snap/bin
にパスを通しておきます。 ~/.bashrc
の後ろにでも追記しておきましょう。
export PATH="$PATH:/snap/bin"
そして、ユーザー権限でlxd関係を使うのでlxdグループに利用する人を追加しておきましょう。
$ sudo gpasswd -a (ユーザー) lxd
ここまでできればパスとグループの設定を反映させるため、一度、ログアウトしておきます。また、ログインしたなら設定の続きです。 まず、lxdを初期化します。
$ lxd init
実行するといろいろ質問されますがVagrantで使うだけなので、必要ならストレージプールの容量だけ変更して、それ以外はデフォルトのままでいいと思います。 これでlxdのインストールは終わりです。
vagrant-lxdのインストール
Vagrantにvagrant-lxdプラグインを追加します。プラグインのインストールは、通常のVagrantプラグイン追加と同じです。
$ vagrant plugin install vagrant-lxd
Vagratのlxdプロバイダーを使ってみる
準備が終わったので、vagrant-lxd READMEにあるQuick Startに沿ってlxd providerを試してみます。
- Catalyst IT / Development Tools / vagrant-lxd · GitLab: https://gitlab.com/catalyst-it/devtools/vagrant-lxd
$ vagrant init --minimal debian/stretch64
$ vagrant up --provider lxd
使用するboxがbusterでなくstretchなのは、lxc/lxd用のboxがstretchしかないからです。 それはさておき、 vagrant up
を実行するとエラーが出ました。
$ vagrant up --provider lxd
The LXD provider was unable to contact the daemon at https://127.0.0.1:8443.
It's possible that LXD isn't installed, or that it isn't configured to
accept HTTPS connections from your machine. You can check whether HTTPS
access is enabled with the following command:
$ lxc config get core.https_address
If the result is empty or an error is shown, you will need to correct
the way LXD is configured before Vagrant can use it. This can be done
with the following command:
$ lxc config set core.https_address 127.0.0.1
You can find more documentation about configuring LXD at:
https://linuxcontainers.org/lxd/getting-started-cli/#initial-configuration
メッセージを読んでみると、ローカルホストに接続できなかったそうです。 lxc config get core.https_address
で確認して結果がエラーか空ならば、 lxc config set core.https_address 127.0.0.1
を実行してVagrantが使えるようにしてくださいとのことなので試してみます。
$ lxc config get core.https_address
なんにもなかったのでメッセージの指示通りに以下を実行します。
$ lxc config set core.https_address 127.0.0.1
$ lxc config get core.https_address
127.0.0.1
これで、もう一度 vagrant up
を実行します。
$ vagrant up --provider lxd
The LXD provider could not authenticate to the daemon at https://127.0.0.1:8443.
You may need configure LXD to allow requests from this machine. The
easiest way to do this is to add your LXC client certificate to LXD's
list of trusted certificates. This can typically be done with the
following command:
$ lxc config trust add /home/(ユーザー名)/.vagrant.d/data/lxd/client.crt
You can find more information about configuring LXD at:
https://linuxcontainers.org/lxd/getting-started-cli/#initial-configuration
今度は別のエラーが発生しました。 認証ができなかったそうで、lxdの信頼できる証明書リストにlxcクライアント証明書を追加してくれと対処法も出ているので実行します。
$ lxc config trust add ~/.vagrant.d/data/lxd/client.crt
そして、vagrant-lxd READMEのClient AuthenticationにVagrantfileに証明書を指定する設定もあったので書いておきます。
Vagrant.configure("2") do |config|
config.vm.box = "debian/stretch64"
config.vm.provider 'lxd' do |lxd|
lxd.client_certificate = '~/.vagrant.d/data/lxd/client.crt'
lxd.client_key = '~/.vagrant.d/data/lxd/client.key'
end
end
これで vagrant up を実行すると…起動しました!
$ vagrant up --provider lxd
Bringing machine 'default' up with 'lxd' provider...
==> default: Machine has not been created yet, starting...
==> default: Box 'debian/stretch64' could not be found. Attempting to find and install...
default: Box Provider: lxc
default: Box Version: >= 0
==> default: Loading metadata for box 'debian/stretch64'
default: URL: https://vagrantcloud.com/debian/stretch64
==> default: Adding box 'debian/stretch64' (v9.1.0) for provider: lxc
default: Downloading: https://vagrantcloud.com/debian/boxes/stretch64/versions/9.1.0/providers/lxc.box
default: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
==> default: Successfully added box 'debian/stretch64' (v9.1.0) for 'lxc'!
==> default: The host machine does not support LXD synced folders.
==> default:
==> default: To use this feature, you must first configure ID mappings for the
==> default: current user in /etc/subuid and /etc/subgid. For more information,
==> default: refer to `vagrant lxd shadow --help`.
==> default:
==> default: Converting LXC image to LXD format...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 10.13.90.145:22
default: SSH username: vagrant
default: SSH auth method: private key
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Installing rsync to the VM...
==> default: Rsyncing folder: /home/vagrant/lxd/ => /vagrant
lxcのボックスがあるとlxd用にコンバートしてくれるので便利ですね。 それとメッセージに出ていますが、共有フォルダが使えないので共有フォルダを使うには設定をする必要があります。
共有フォルダの設定
共有フォルダ /vagrant
を使うには、 ホスト側の subuidとsubgidを設定します。
$ echo root:$(id -u):1 | sudo tee -a /etc/subuid
$ echo root:$(id -g):1 | sudo tee -a /etc/subgid
これで vagrant reload すれば、 /vagrant フォルダが使えるようになります。
まとめ
文章にすると長くなってますが、エラーメッセージも親切でメッセージを読んでREADMEを読めば、ほとんどハマることなく使えました。 これから活用していきます。