メインコンテンツまでスキップ

snake

Ubuntu Server 20.04 LTSでCronが変な時間に動いておかしいと思ったら、タイムゾーンがUTCになっていたので、タイムゾーンを変更する方法について書いておきます。

現在のタイムゾーンや時間を確認するには下記のコマンドを使用します。

$ timedatectl

コマンドによって表示される情報は下記の通りです。

               Local time: Thu 2021-04-15 02:37:15 UTC
Universal time: Thu 2021-04-15 02:37:15 UTC
RTC time: Thu 2021-04-15 02:37:15
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

この場合、タイムゾーンはEtc/UTCに設定されている為、Asia/Tokyoに直します。

タイムゾーンを変更するには下記のコマンドを使用します。

sudo timedatectl set-timezone Asia/Tokyo

変更後、再度確認コマンドを使用すると下記のようになります。

               Local time: Thu 2021-04-15 11:49:07 JST
Universal time: Thu 2021-04-15 02:49:07 UTC
RTC time: Thu 2021-04-15 02:49:07
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

これで変更完了です。

snake

MySQL(MariaDB)への接続時にconnect ECONNREFUSEDというエラーが発生する場合の解決策についてまとめます。

下記は実際に発生した際のエラーログです。Ubuntu server 20.04 LTSのDockerコンテナ上でGhost blogの公式イメージを動かした際に発生しました。データベースにはMariaDBを使用していますが、MySQLでも発生を確認しています。

*...はIPです。*

[2021-04-11 08:09:51] INFO Ghost is running in production...
[2021-04-11 08:09:51] INFO Your site is now available on https://viasnake.com/
[2021-04-11 08:09:51] INFO Ctrl+C to shut down
[2021-04-11 08:09:51] INFO Ghost server started in 0.666s
[2021-04-11 08:09:51] ERROR connect ECONNREFUSED ***.***.***.***:3306

connect ECONNREFUSED ***.***.***.***:3306

"Unknown database error"

Error ID:
500

Error Code:
ECONNREFUSED

----------------------------------------

DatabaseError: connect ECONNREFUSED ***.***.***.***:3306
at DatabaseError.KnexMigrateError (/var/lib/ghost/versions/4.2.0/node_modules/knex-migrator/lib/errors.js:7:26)
at new DatabaseError (/var/lib/ghost/versions/4.2.0/node_modules/knex-migrator/lib/errors.js:55:26)
at /var/lib/ghost/versions/4.2.0/node_modules/knex-migrator/lib/database.js:48:19
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async DatabaseStateManager.getState (/var/lib/ghost/versions/4.2.0/core/server/data/db/state-manager.js:39:13)
at async DatabaseStateManager.makeReady (/var/lib/ghost/versions/4.2.0/core/server/data/db/state-manager.js:72:25)
at async initDatabase (/var/lib/ghost/versions/4.2.0/core/boot.js:49:5)
at async bootGhost (/var/lib/ghost/versions/4.2.0/core/boot.js:277:9)

Error: connect ECONNREFUSED ***.***.***.***:3306
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1144:16)
--------------------
at Protocol._enqueue (/var/lib/ghost/versions/4.2.0/node_modules/mysql/lib/protocol/Protocol.js:144:48)
at Protocol.handshake (/var/lib/ghost/versions/4.2.0/node_modules/mysql/lib/protocol/Protocol.js:51:23)
at Connection.connect (/var/lib/ghost/versions/4.2.0/node_modules/mysql/lib/Connection.js:116:18)
at /var/lib/ghost/versions/4.2.0/node_modules/knex/lib/dialects/mysql/index.js:68:18
at new Promise (<anonymous>)
at Client_MySQL.acquireRawConnection (/var/lib/ghost/versions/4.2.0/node_modules/knex/lib/dialects/mysql/index.js:63:12)
at create (/var/lib/ghost/versions/4.2.0/node_modules/knex/lib/client.js:290:39)

[2021-04-11 08:09:51] WARN Ghost is shutting down
[2021-04-11 08:09:51] WARN Ghost has shut down
[2021-04-11 08:09:51] WARN Your site is now offline
[2021-04-11 08:09:51] WARN Ghost was running for a few seconds

connect ECONNREFUSEDのエラーはサーバー側からの明示的な接続拒否です。

考えられる問題としては、MySQL(MariaDB)が動いていないか、IP(上記エラーの...箇所)をリッスンしていないかのどちらかが大きな問題の一つとして考えられます。

MySQL(MariaDB)が動いていない場合は、下記のコマンドで起動させてあげてください。

systemctl start mysql
systemctl start mariadb

IPリッスンしていない場合(ソケットのみをリッスンしている場合)は、/etc/my.cnfに下記を追記してください。

[mysqld]
skip-networking=0
skip-bind-address

これで動くはずです。

snake

Ubuntu Server 20.02 LTSのインストール時に最後のインストール画面でインストール状況を表示するログ画面があるのですが、その画面のrunning 'curtin hook'の横でスピナーがずっとぐるぐる回転しています。

所見でインストールした時、全然インストール終わらないなと思いながら、長時間待ってしまったので、書き残しておきます。

この問題はすでにバグとして報告されており、スピナーが回り続けるのみで実際にはインストール作業が終わっています。

インストール作業が完了しているかは「View full log」からログを確認することで分かります。

詳細はsubiquityのBug #1912957「"running 'curtin hook'" spinner keeps spinning forever 」を確認してください。

Bug #1912957 ”“running ‘curtin hook’” spinner keeps spinning for... : Bugs : subiquity

この問題は2021年01月24日に報告され、2021年02月21日に修正がコミットされています。

snake

Oracle Cloud Infrastructure(OCI) Free TierのAlways freeに1GBのVMがあるのですが、公式ウェブサイトやドキュメントに記載されている最大ネットワーク帯域幅のいう速度に全く達していないので、情報をまとめておきます。

Oracle Cloud InfrastructureとかFree TierとかAlways Freeとはなんぞやみたいな前提部分には特に触れないので、ググってください。Google先生は何でも知っています。

タイトルにある通り、OCIの無料VM「VM.Standard.E2.1.Micro」で期待されるネットワークスピードが出ないという問題が発生しました。

この問題が全ユーザー共通する問題なのか、一部のユーザーの問題なのかについては分かりません。少なくとも私はこの問題に直面しており、国外でも同じような状況のユーザーの方がいました。

まず「VM.Standard.E2.1.Micro」の最大ネットワーク帯域幅とはいくつなのかについてですが、Oracleの公式ウェブサイトを見ると0.48GbpsのVNICであるとされています。ドキュメント上でも最大ネットワーク帯域幅が480 Mbpsであるとされています。

下記にスクリーンショットとドキュメントのURLを載せておくので、細かな事は自分自身でチェックしてください。

Compute Shapes

Compute Shapes

それで本題は、実際に無料のVMの「VM.Standard.E2.1.Micro」を作ってネットワーク速度確認するとどの程度出るのかという事です。

Japan East(Tokyo)のAvailability domainがAD-1、Fault domainがFD-1、FD-2、FD-3で確認した限り、30Mbps~45Mbps程度しか出ないんですよね。インスタンスをCentOSやUbuntuで作成して、他になんの操作をしないでspeedtest.netのspeedtest cliでチェックしても、同じなんです。日付おいてからチェックしても同じような結果になりました。

でもおかしいんですよね。2020年の3月ごろに同じくspeedtest.netのspeedtest cliで同様のネットワークスピードをチェックした時は、300Mbpsぐらいは出ていたんですよ。(記憶なので正確な値は思い出せないですけど、少なくとも3桁だったのは確実)

となると、私が知らぬ間にOracle Cloudが仕様変更したと考えるのが妥当だけど、最初に確認したようにドキュメントに記載されている最大ネットワーク帯域幅は変わっていない。一応インスタンスを作り直してみたり、フォルトドメインを変更してみたり、OS変えてみたりしたけど、変わりないと。

うーん!分からん!なんで!教えてGoogleセンセー!

ということで適当な単語羅列してGoogle検索してみたら、Redditの投稿が出てきました。

Is it just me or is Oracle Cloud network slow.. Hi, is Oracle cloud free tier slow for anyone else? It says I have a 0.48Gbps VNIC but I only get speeds of 48mbps doing a speedtest (on the server). Pretty much makes that "10 TB data transfer" monthly useless... I tried creating a paid instance with my free trial and I got 500-600 mbps for a 0.7 Gbps VNIC so it seems they might be purposefully slowing down the free tier instances. Homebase is phoenix, both free tier instances get 48mbps. Thanks!

Is it just me or is Oracle Cloud network slow.. from pihole

おやおや、ちゃんと私以外にも同じ状況の人いるじゃないか。ということで投稿内容をDeepLに突っ込んでみましょう。ただDeepLに入れるだと、日本語的に読みづらくてしょうがないので、それっぽい文章に私が修正します。

これは私だけですか、それともOracle Cloudのネットワークが遅いですか...こんにちは、Oracle CloudのFree tierは、誰にとっても遅いですか?Oracle Cloudは0.48GbpsのVNICであると言っていますが、私はスピードテストを(サーバー上で)やってたった48Mbpsの速度でした。これでは毎月の「10TBのデータ転送」が無駄になってしまいますね...無料トライアルで有料インスタンスを作成してみたところ、0.7GbpsのVNICで500~600mbpsの速度が出たので、意図的にFree tierのインスタンスを遅くしているのかもしれません。 ホームベースはフェニックスで、Free tierのインスタンスは両方とも48mbpsを取得します。 ありがとうございます。

こんな感じになりました。最後に2行は置いとくと、これまでこの記事で話してきた内容とほぼ同じような内容になります。

この返信にどんな物があったかと言うと、次のような感じです。

Hi, I just got around to testing the Oracle free tier and arrived at the same conclusions as you... According to https://docs.cloud.oracle.com/en-us/iaas/Content/Compute/References/computeshapes.htm the Micro instance is supposed to be limited to 480Mbps. I spent some time looking for network shapers, bandwidth limiters and the like but everything seems in order... I'm gonna contact the customer service.

Comment from discussion puzzlingcaptcha's comment from discussion "Is it just me or is Oracle Cloud network slow..".

こちらも翻訳して、文章修正してみます。

こんにちは、私もオラクルのFree tierをテストして、あなたと同じ結論に達しました... https://docs.cloud.oracle.com/en-us/iaas/Content/Compute/References/computeshapes.htm によると、Micro インスタンスは 480Mbps に制限されているようです。 ネットワークシェイパーや帯域幅リミッターなどを探して時間を費やしましたが、すべてが順当なようです...。カスタマーサービスに問い合わせてみる。

この方も確認したら同じような結論にいたり、他の仕様も漁ってみたけど帯域幅に制限をかけるような他の仕様は見つからなかったよ。という感じですね。

そしたらこのRedditのスレ主がOracleに問い合わせしたという返信をしてきました。こちらも同様に翻訳して文章を修正します。

I already contacted them. They said its the full 480 mbps for same region instances whereas to public domain its capped at 50 mbps. They said they found their documentation doesn't state that and they will update it.

Comment from discussion RealRaspberryTech's comment from discussion "Is it just me or is Oracle Cloud network slow..".

私はすでにOracleに連絡しました。彼らは、パブリックドメインでは50 Mbpsに制限されているのに対し、同じ地域のインスタンスでは480Mbpsでフルだと言っていました。彼らはドキュメントにはそのように記載されていないことを発見し、それを更新すると言いました。

サポートからの返信が書かれている内容の通りだとするなら、単にドキュメントの更新忘れ?記載忘れ?だったみたいですね。

ちなみに返信した方も問い合わせを行ったようです。

I contacted them as well and have been playing ping-pong with support for the past two days. They just don't want to admit it. I also tried spinning up a larger instance and predictably got the full gigabit upstream uplink, so they only cap the Micro instance. I am not holding my breath for them updating the documentation, sounds like regular misleading advertising.

Comment from discussion puzzlingcaptcha's comment from discussion "Is it just me or is Oracle Cloud network slow..".

私も同様に彼らに連絡を取り、この2日間サポートとピンポンをしています。彼らはそれを認めたくないだけです。 私はまた、より大きなインスタンスをスピンアップしようとしましたが、予想通り、アップストリームのギガビットのアップリンクをフルに取得したので、彼らはマイクロインスタンスのキャップのみを取得しました。私は彼らがドキュメントを更新するために私の息を止めていない、通常の誤解を招くような広告のように聞こえる。

要は私もサポートと連絡取り合ってるけど、都合悪いから認めたくないだけ。更に良いインスタンスを作成したら問題なかった。誤解を招くような広告をしてるんだろう。みたいな感じのこと言ってますね。

この記事では取り上げませんが、インドのフォーラムでも同様の指摘がありました。

Oracle Cloud’s Lifetime free services (2 VPS + more) | Technology

結論

Oracle Cloud Infrastructure Free Tierの「VM.Standard.E2.1.Micro」では外部との通信に50Mbpsの制限がかかっている。同じリージョン内のインスタンス間ではドキュメント通り480Mbpsの速度がでる。

此処から先は愚痴みたいな感じです。

この投稿を書いているのが2021年03月で、私がこの問題を発見したのは2020年10月下旬頃です。で投稿内のRedditは2020年9月8日の話です。発見から投稿までに大きな時間差があるのは、書くのが面倒で放置してただけです。

でなんですけど、21年03月時点でドキュメント見ても特に記載らしい記載が無い。無料なので文句言えたもんじゃないですけど、ドキュメント更新してほしい。私の場合、使い始めの段階でネットワークスピードが正常に出ていたのに、途中から急に制限かけられたみたいな感覚なので、本当に意味がわからなかった。無料だからサポートも機能しないので、ヘルプ求めることもできないですし。

snake

FizzBuzzとは

数字が3の倍数ならFizz、5の倍数ならBuzz、15の倍数ならFizzBuzzを表示し、いずれにも当てはまらなければ数字をそのまま表示するプログラム

Fizz Buzz(Wikipedia)

ソースコード

#include <stdio.h>

int main(void) {
int i;
for(i=1; i<=100; i++) {
if(i%15 == 0) {
printf("FizzBuzz");
}
else if(i%3 == 0) {
printf("Fizz");
}
else if(i%5 == 0) {
printf("Buzz");
}
else {
printf("%d", i);
}
printf("\n");
}
return 0;
}

GitHubで全てのソースコードを公開しています。

ライセンスはMIT LICENCEです。

ViaSnake/FizzBuzz

タグ:

snake

FizzBuzzとは

数字が3の倍数ならFizz、5の倍数ならBuzz、15の倍数ならFizzBuzzを表示し、いずれにも当てはまらなければ数字をそのまま表示するプログラム

Fizz Buzz(Wikipedia)

ソースコード

for i in range(1, 101):
if i % 15 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
i += 1

GitHubで全てのソースコードを公開しています。

ライセンスはMIT LICENCEです。

ViaSnake/FizzBuzz

snake

FizzBuzzとは

数字が3の倍数ならFizz、5の倍数ならBuzz、15の倍数ならFizzBuzzを表示し、いずれにも当てはまらなければ数字をそのまま表示するプログラム

Fizz Buzz(Wikipedia)

ソースコード

for i in 1..101 {
if i % 15 == 0 {
print("FizzBuzz")
} else if i % 3 == 0 {
print("Fizz")
} else if i % 5 == 0 {
print("Buzz")
} else {
print("$i")
}
print("\n")
}

GitHubで全てのソースコードを公開しています。

ライセンスはMIT LICENCEです。

ViaSnake/FizzBuzz

タグ:

snake

Pythonライブラリに「Pyxel」というレトロゲームエンジンが存在するのですが、そちらのライブラリで使うタイルマップを表示する用のプログラム「Pyxel tilemap viewer」を公開しました。

個人的なプロジェクトでタイルマップ制作をする時に不便だったので、制作したツールです。そのため、特に大きな機能などはないです。本当に表示確認用です。

Pyxel tilemap viewer 1.0をダウンロード

Pyxel tilemap viewerはGitHub上でオープンソースです。

ViaSnake/Pyxel-tilemap-viewer

ライセンスはMITライセンスを適用しています。好きに使って下さい。

snake

GitHub

ViaSnake/Pyxel-tilemap-viewer

Pyxel tilemap viewer

Pyxel tilemap viewerは、タイルマップデザイン用のタイルマップ表示プログラムです。

個人的なプロジェクのために作られたツールです。

必要要件

おそらく最新ではないPyxelでも動作すると思いますが、動作保証はありません。

使い方

  1. viewr.pyをダウンロード。
  2. viwer.pyと同じディレクトリにtm.pyxresを配置する。
  3. viewer.pyを実行すると、タイルマップが表示されます。

W: 上へ移動‌‌

S: 下へ移動‌‌

A: 左へ移動‌‌

D: 右へ移動‌‌

0~7: タイルマップ変更

ライセンス

このソフトウェアはMITライセンス下でリリースされています。

snake

タイトルの通り、Google Adsenseの広告を入れました。

自動広告なので、どこに広告が埋め込められるかは分かりません。

このウェブサイトに載せたぐらいで手に入る金額は雀の涙ほどでしょうが、サーバー費の5%ぐらい手に入ればいいかなって感覚で載っけました。

今後も適当に更新していくので、もしよければ読んでいってください。