gokigenmaruのブログ

40から始めるクラウドエンジニア

OpenTofuを使えるようにする

OpenTofuとは

Terraformを管理しているHashiCorpがTerraformを含む一部サービスをBSL(Business Source License)に変更すると2023年に発表がありました。
このライセンスに変更することで本番利用についてはライセンスが必要となる可能性が出ています。
※詳しいことはわからない…。

それに反発した人たちがコミュニティを立ち上げたのがOpenTofuというプロジェクトです。※Linux Foundation
今後Terraformがどこまで無料で使えるかわからないこともあり、新しくできたOpenTofuを勉強してみようと思います。

OpenTofuのインストール

公式サイトの手順通りに実行

まずはOpenTofuをインストールします。
公式サイトにインストール手順があるのでそれに従います。
opentofu.org

自分はWSL2でUbuntu22.04を使用しているので、Ubuntuのインストール手順を利用します。
opentofu.org

$ which snap
/usr/bin/snap
$ snap install --classic opentofu
error: cannot communicate with server: Post http://localhost/v2/snaps/opentofu: dial unix /run/snapd.socket: connect: no such file or directory

早速うまくいきません。
エラーメッセージを見ると、「dial unix /run/snapd.socket: connect: no such file or directory」とあるので、snapdのソケットが見つからないと。
snapdが動いてない?

snapdプロセス確認

ということで、プロセスを確認する。

$ ps -ef | grep snap
***+  5347  5312  0 17:11 pts/8    00:00:00 grep --color=auto snap
$ ps auxwww | grep snap
***+  5349  0.0  0.0   8168   716 pts/8    S+   17:11   0:00 grep --color=auto snap

居ない…。
なので、snapdを起動させる必要がありそうです。

Webで調べていると、WSLではsystemdでsnapがdisableになっているようです。
ということで、ちゃちゃっとenableにします。

sudo systemctl start snapd.service
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

おっふ、systemdが動いてない…。

WSL起動時にsystemdが動くようにする

boot時にsystemdが動くようwsl.confに設定を入れます。

$ sudo vi /etc/wsl.conf
$ sudo cat /etc/wsl.conf
#[network]
#generateResolvConf = false
[boot]
systemd=true

WSLの再起動が必要になるので、一度Ubuntuから抜けてpowershellを起動、WSLの停止をします。

PS C:\Users\***> wsl --shutdown

コマンド実行後、WSLを起動。Ubuntuにログインしsystemdの起動確認。

$ ps -ef | grep systemd
root          53       1  0 17:36 ?        00:00:00 /lib/systemd/systemd-journald
root          77       1  0 17:36 ?        00:00:00 /lib/systemd/systemd-udevd
systemd+     107       1  0 17:36 ?        00:00:00 /lib/systemd/systemd-networkd
systemd+     255       1  0 17:36 ?        00:00:00 /lib/systemd/systemd-resolved
message+     259       1  0 17:36 ?        00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root         268       1  0 17:36 ?        00:00:00 /lib/systemd/systemd-logind
***+    1045       1  0 17:36 ?        00:00:00 /lib/systemd/systemd --user
root        1138      77  0 17:37 ?        00:00:00 /lib/systemd/systemd-udevd
root        1139      77  0 17:37 ?        00:00:00 /lib/systemd/systemd-udevd
root        1140      77  0 17:37 ?        00:00:00 /lib/systemd/systemd-udevd
root        1141      77  0 17:37 ?        00:00:00 /lib/systemd/systemd-udevd

systemdの起動が確認できました。

OpenTofuインストールの再実行

これでもう一度OpenTofuのインストールを実行。

$ snap install --classic opentofu
error: access denied (try with sudo)

sudoつけろと怒られたので、sudoつけて実行。

$ sudo snap install --classic opentofu
opentofu 1.6.1 from OpenTofu Core Team installed

うまくいきました。
ちょっと時間かかりましたが、ようやくOpenTofuをインストールできました。

OpenTofuを使ってみる

今まではterraform xxxでterraformを実行していましたが、これがtofu xxxに変更になるようです。
opentofu.org

ここのStep2にあるtofu --versionを実行してみます。

$ tofu --version
OpenTofu v1.6.1
on linux_amd64

コマンドが通ることが確認できました。
これでtofuを使う準備は完了ですかね。

次回からinitやplan、applyなどを試してみようと思います。