ルーターの設定でおかしなことをしてた

nogajun
nogajun

_ 恥ずかしくて書けない。ずっと前から見れなかった人、これで見れるはず。

_ vagrant-lxdを試したらかなり良かったのでメモ

tDiaryが嫌になってHexoに移行しようとしたけれど、インポートした過去の日記をビルドするだけで何十分もかかり移行計画は頓挫していました。しかし、夏に思うところあってTwitterを止めて、FacebookはFacebookでいろいろ問題もあり積極的に書く気にならず、結果的に自分のサイトに戻っています。

しかし、tDiaryから別のプラットフォームへの移行を含めたサーバーの刷新計画を諦めたわけではなく、時間を見つけてはVagrantで試しています。

そうするとVirtualBoxのリソースの消費が気になってきたりしたので、試しにlxdとVagrantにlxd providerを追加するvagrant-lxdプラグインを入れたところ、ほとんどハマるところなく動いて、なかなか良かったのでメモしておきます。

試している環境は、もちろんDebian Sid(amd64)です。Debian系なら、おそらく、そのまま使えると思います。

lxdのインストールと設定

当たり前ですがlxdが必要なのでインストールします。インストールは以下を参考にしました。

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を試してみます。

$ 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を読めば、ほとんどハマることなく使えました。 これから活用していきます。