AIによる記事自動生成ブログ四三式

このブログは天才チンパンジー「アイ(AI)ちゃん」が、言語訓練のために作成しているものです。

OracleCloud AlwaysFreeでUbuntu22.04LTSでNextCloud

以前から余ってるHDDを使ってNextCloudを構築したいな~と思っていたのだが、余剰PCが無い(思いついた時には諸々廃棄しちゃってた)し、ラズパイ買うにしても数千円投資が必要だし、そこまでして必要か??みたいなのがあってなかなか手を出さずにいた。

だらりだらりと情報収集だけはしていたのだが、この度OracleCloudのAlwaysFreeなるものがあることを知る。詳しくは割愛。やたらと太っ腹なサービスで驚く。裾野を広げて商用ユーザを増やす、という思惑なんだろうけど、それにしても採算性があるようには思えない。余剰枠の開放も兼ねてるのかな。すぐ改悪しそうだw

導入時に参照したサイト

手順はこちらを参考。大変わかりやすく有り難い。こういうTipsが揃ってる時点で時代に感謝だなあ。

Oracle Cloud Always Free 枠でArmインスタンスを作る - Fun Scripting 2.0

Oracle Cloud Always Free で組む Nextcloud 自分用オンラインストレージ - Fun Scripting 2.0

この方は香港の方なので、timezone設定が香港になっているけど、こちらは日本在住民なのでAsia/Tokyoに設定

ちなみにトライアル1ヶ月経過後はインスタンスが必ず無効にされるとの情報も記載されている(有り難い…)。予め注意が必要。

Oracle Cloud Always Free A1インスタンスがトライアル終了後に強制停止 - Fun Scripting 2.0

躓いたポイント

Linuxを触るのは5億年ぶりぐらい。大体Webに上がってるTipsの通り操作してもかならず躓くのがLinux。だから嫌い(初心者)。

とか言いながら上記サイトで採用しているUbuntu20.04LTSではなく22.04LTSを入れちゃうところよな

SSHログインで四苦八苦

インスタンスを作成した後にふと、あれ?どうやってログインすればいいんだ??と。当然といえば当然なのだけど、インスタンスクラウド上にあるので、リモートでログインすることになる。なのでクライアントソフトが必要。定番らしいTeraTermUTF-8 TeraTerm Pro with TTSSH2)は設定も含めてめちゃんこ便利。昔やってたCygwin構築の面倒臭さとか今思うとアホらしいな…環境変数とかもう死語なんだろうか…(当時はローカル作業も必要だったからしゃーないのだけど)

参考

UTF-8 TeraTerm Pro with TTSSH2 を使ってみる

そして今どきはSSHを使うらしい。(えっtelnetじゃないの…2006年にRFCが策定されたらしいので、ちょうど俺が社会人になったぐらいから主流になってるのだな…。)

SSH公開鍵暗号方式なので、事前に公開鍵と秘密鍵の鍵ペア準備が必要。インスタンス作成時によく分からず、OracleCloud上で鍵ペア作成を選択しダウンロードしていたのでそこで生成した秘密鍵を使ってログインしてみる。

できねえ。なんでだよ。

そもそもOracleCloudで鍵ペア生成した時にパスワードを入力した記憶がない。もしかしてそこ?TeraTermにも鍵ペア作成機能があるので、それで鍵ペアを作成し、インスタンス生成時に公開鍵を食わせてみる。

また、OracleCloudのインスタンス名はデフォルトを使うと「-(ハイフン)」が悪さをする、みたいなコメントも見つけて、その辺も気をつけてみる。

やっぱりできねえ。はああ??

で、調べてたら、どうやらUbuntuの22.04LTSにバンドルされているOpenSSHはRSA鍵をデフォルトで無効化しているらしい。

Ubuntu Server 22.04 LTSのSSH鍵認証でRSA認証が無効化されていて躓いた話 - Pandora Pocket

これかあー!!!結果、Ed25519で鍵ペア作成してログイン成功できた。OracleCloudで生成した鍵ペアももしかしたらRSAで作成されてのかもしれない。よく分からんけど。

結果的にインスタンスを立てたり停止(削除)したりを繰り返していい練習になったw

TeraTermのマクロ作成で無効なホストエラー

で、TeraTermで毎回秘密鍵やらパスワードを指定するのがかったるいので、マクロ(ttlファイル)を作成する(自動でttlファイル作ってくれよ…)。…が、何度やっても「無効なホスト」エラーが発生してしまう。

困りまくって調べたら、どうやらttlファイルを関連付けるのはttempro.exeではなく、マクロ実行用に用意されているttpmacro.exeじゃないとダメだったらしい。関連付けを変えたら無事ログイン成功。

ポートが開放できない

古よりサーバ構築時に牙をむくと評判のポート開放。ギターで言えばF。ギター弾けないけど。

先述のサイトに従って、OracleCloudのイングレスルールの追加、それから/etc/iptables/rules.v4を直接編集・・・しても全くポートが開放されない。SSHの22番はOKだけど、80も443もNG。ちなみにポート開放チェックはnmapできる他マシンなんてものは存在しないので、そこいらのポートチェックサイトを利用。

ポートチェック【外部からポート開放確認】

イングレスルールの追加に関しては間違える余地がない。なので、疑われるのはUbuntu側。調べると22.04LTSでは皆ufw(標準ファイアウォール)を使ってポートを開けている。なんか前田日明とか髙田延彦が所属してそうな名前。

youtu.be

調べてみると、OracleCloud上のUbuntu20.04LTSはではufwを使ってのポート開放はバグがあって機能しないというトラブルがあったらしい。なので先述手順ではiptablesを使っていたのだな。あとufw自体がインスタンスがクラッシュするらしく、推奨自体がされていないと聞く。

うーん、でもデフォルトではufwは無効になってる訳で、弾かれる訳が無いんだけどなあ…。そうは思いつつも思い切ってufwを有効にしてポート開放設定を試してみる。…が、やっぱり開放できない。

埒が明かないのでTwitterで情報を探してみると、Ubuntuは待ち受けるサービス自体が稼働していないとポートが開放されない、という投稿を見る。

何もしなくても…というのは本当か??という気はするが…ufwでポート開放設定をした状態で藁にもすがる思いでその後のNextCloudインストールまで進めてみた。

試しにhttp(80/tcpポート)でブラウザからアクセス…したらNextCloudの画面(その後のユーザ登録とかドメイン登録とかSSL証明書登録とかしてないのでエラー画面なのだが)が出現。ポート開放できてんじゃん!!

再度ポートチェックサイトで確認すると80ポートが開放状態になっていた。「本当だったんだ!」っていうパズーが初めてラピュタに遭遇したときのような気持ち。

そのまま先にすすめると無事httpsでもアクセス出来た。(ufwで80/tcpを閉じたらちゃんとNGになった)

今の所ufwで特段問題は起きていないので、クラッシュ問題がどうなったのか知らんけど、とりあえずはufwを使うのが簡単ね。

ドメインが無い(IPアドレスだけ)状態だとWin7WebDAV登録できない

手軽に固定IP環境が得られる訳だし、ドメイン登録まではいいや、とIPアドレスだけの状態でLet’s Encryptの利用をする。この場合はどうしても自己署名証明書オレオレ証明書)になってしまうらしい。

先述の手順書はドメインありきなので、以下のサイトが役立った。

Ubuntu 20.04にNextcloudをインストールして設定する方法 | DigitalOcean

・ステップ3 - 信頼できるドメインの調整

・ステップ4のオプション2: 自己署名証明書を使用したSSLのセットアップ

自己署名証明書なのでWebブラウザ上の警告が出ちゃうけど、無事にNextCloud環境ができた。

でも、なんか動作がもっさり。こんなもんなのか?しゃーないのでWebDAVで運用することにした…が、Windows7WebDAVのフォルダ登録(「ネットワークの場所を追加する」)ができない。IE自己署名証明書を食わせることまではできるけど、その先で、WebDAVのURLにIPアドレスが含まれていると登録NGになっちゃうらしい。マジかあ。

Win7を未だに使い続けてるのが悪い、というのはごもっともなんだが、Win10よりも使いやすいし機能として十分だからしゃーない。

ちなみにAirLiveDriveみたいな外部ツールを使ってみてもダメ。これは自己署名証明書だから?なのかもしれない。

確認のため、Android(ファイルマネージャー+)でWebDAV登録してみたら、さっくり登録できた。実際、WebDAV経由だとサクサクなので、GUIがもっさりなんだろうな。なんとかPCでもWebDAVを使いたい。

※ファイルマネージャー+はクラウドサービス枠の「NextCloud」としても登録できるのだが、こちらではエラーになった。謎・・・自己署名証明書だから?

面倒くさ…だけど、ドメイン取得&ちゃんとしたSSL証明書を取得するか…。

ドメイン取得とSSL証明書の取得でまた詰まる

ドメイン取得にはfreenomを使…おうと思ったらシステムエラーが長期継続中らしく断念。myDNS.jpを利用。myDNS.jpのサブドメインを取得した上で、更にサブドメイン(子ID)を取得して運用しようと思ったが、親IDのドメインのIP通知も定期的に必要になるらしく、面倒くさすぎるので子IDの取得は見送り。

Let'sEncryptでSSL証明書を取得する際は再び80ポートを再度開放(OracleCloud上でも、インスタンスUbuntu)上でも)しなければならないので注意が必要。

SSL証明書を改めて取得しようとLet’s Encryptを叩く…とfindコマンドでパーミッションエラーが起きる。初回時はOKだったのに…なんでだ。。。

ubuntu@ubuntu:~$ sudo nextcloud.enable-https lets-encrypt
In order for Let's Encrypt to verify that you actually own the
domain(s) for which you're requesting a certificate, there are a
number of requirements of which you need to be aware:
 
1. In order to register with the Let's Encrypt ACME server, you must
   agree to the currently-in-effect Subscriber Agreement located
   here:
 
       https://letsencrypt.org/repository/
 
   By continuing to use this tool you agree to these terms. Please
   cancel now if otherwise.
 
2. You must have the domain name(s) for which you want certificates
   pointing at the external IP address of this machine.
 
3. Both ports 80 and 443 on the external IP address of this machine
   must point to this machine (e.g. port forwarding might need to be
   setup on your router).
 
Have you met these requirements? (y/n) y
Please enter an email address (for urgent notices or key recovery): メールアドレス
Please enter your domain name(s) (space-separated): ドメイン
Attempting to obtain certificates... done
find: Failed to restore initial working directory: /home/ubuntu: Permission denied

もしかして自己署名証明書が残ってるとダメなのか?とか思いながらも、とりあえずは当該ディレクトリ(/home/ubuntu)のアクセス権限を確認する。

ubuntu@ubuntu:~$ sudo ls -l /home
total 8
drwxr-x--- 3 opc    opc    4096 Feb  1 09:06 opc
drwxr-x--- 4 ubuntu ubuntu 4096 Feb  1 15:12 ubuntu

とりあえずよく分からんから全アクセス権限を付与してみて再チャレンジ。

ubuntu@ubuntu:~$ sudo chmod 777 /home/ubuntu/
ubuntu@ubuntu:~$ sudo ls -l /home/
total 8
drwxr-x--- 3 opc    opc    4096 Feb  1 09:06 opc
drwxrwxrwx 4 ubuntu ubuntu 4096 Feb  1 15:12 ubuntu
(前略)
Have you met these requirements? (y/n) y
Please enter an email address (for urgent notices or key recovery): メールアドレス
Please enter your domain name(s) (space-separated): ドメイン
Attempting to obtain certificates... done
Restarting apache... done

通った。やったね!

Webブラウザで改めてアクセスすると証明書の警告も消えた。ちなみに前回取得した自己署名証明書は何も手を加えなくても作業は出来た。本当は失効・削除しないと行けないんだろうけど、よく分からんので放置でヨシ!

忘れずにパーミッションを戻す。

ubuntu@ubuntu:~$ sudo chmod 750 /home/ubuntu/
ubuntu@ubuntu:~$ sudo ls -l /home/
total 8
drwxr-x--- 3 opc    opc    4096 Feb  1 09:06 opc
drwxr-x--- 4 ubuntu ubuntu 4096 Feb  1 15:12 ubuntu

ポートもちゃんと閉じる。(これとは別にOracleCloudのイングレス・ルールでも80ポートを消す)

ubuntu@ubuntu:~$ sudo ufw delete allow 80/tcp
Rule deleted
Rule deleted (v6)
ubuntu@ubuntu:~$ sudo ufw reload
Firewall reloaded
ubuntu@ubuntu:~$ sudo ufw status
Status: active
 
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

ドメインがある状態でも結局WebDAV登録できなくて泣いた

早速、先程失敗したWindows7WebDAVのフォルダ登録(「ネットワークの場所を追加する」)を実施。

エラー

なんでだよ!!

先述のAirLiveDriveで登録してみたらこちらは成功。AirLiveDriveではWebDAVだけでなくクラウドサービス枠の「NextCloud」としての登録も出来てる。ただ、ハードディスクドライブ一覧での空き容量の表示がおかしい(満杯表示)。まあ、使えるからいいや…。

myDNS.jpにIPアドレスを定期通知する

これはそこまで躓いた話でもないけど。OracleCloudは固定IPみたいなもんなので(素晴らしい)、DDNSサービスを使う必要性も無いんだが、定期的に通知しないとドメインが削除されてしまうので、キャシャーンがやらなくてもやらねばならぬ。

こちらを参考にした

MyDNSの使い方とIPアドレスの自動通知方法【DDNS】 | Cooeil

ただ、作ったシェルスクリプト(.sh)ファイルってどこに置けば良いんだ??とりあえず、自作のスクリプトとかは「/usr/local/bin」に置くことが多い、っていう話らしい。そこにした。 crontabではこんな感じ、毎日12時に通知とかにしておいた。

 0 12 * * * /usr/local/bin/mydns.sh

IPアドレスの通知が成功するとmyDNS.jpのログイン直後のページ(Log Info)にログが掲載されるので確認可能・・・なんだけど、一度確認すると24時間は反応してくれない(myDNS.jpの仕様)なので、実際にcorontabでの動作結果を確認できるのは24時間以後になる。

とりあえず、24時間前なんだけどcrontabの実行ログを見てみる…が、/var/log/cron.logが存在しない。デフォルトだとsyslogに統合されているらしい。

というか、Ubuntuだとjournalctlコマンドを使うのが一般的らしい。

cronの実行ログを見るにはjournalctlコマンドを使う - モヒカンメモ

ubuntu@ubuntu:~$ sudo journalctl -u cron
中略
Feb  5 12:00:01 ubuntu CRON[870755]: (ubuntu) CMD (/usr/local/bin/mydns.sh)

とりあえず無事ロギングはされてた。翌日、myDNS.jpに通知反映されていたので、これにてOracleCloudのAlwaysFreeでUbuntu&NextCloud構築完了!あとは1ヶ月後の強制インスタンス無効化に構えるまでだな…。

 OlacleCloudでのサーバ構築

Tipsが充実しているってのもあるけど、めちゃめちゃ簡単でビビった。何より軽率に固定IPが得られる上にネットワーク上のポート開放が楽ちんなのがデカイ(世間のレンタルサーバと呼ばれているものでは当たり前だったのかもしれないけどw)。無料で100GB以上使えて実用的なのも恐ろしい。ほんと、いつまで使えるんだか…。