オブジェクトストレージへ

晴れ今日もPHP8への対応をやっていた。 ついでに、動的にサーバー内に作成するファイルがあるのだけど、以前gitが競合を起こしたか何かで、サーバー内でgit cloneし直した際、動的に作成されるファイルの存在を失念していて、全て吹き飛ばしたことがあった。 それらのファイルはデータベースを元に作成しているので、復元はできたのだけど、そもそも動的なファイルをgit管理化に置くのはNGだと思うので、オブジェクトストレージに保存するよう変更し、移行スクリプト書いて、オブジェクトストレージ管理にした。 微々たるものだけど、常時85%くらいになってしまっているディスク使用量削減にも多少効果があったと思う。

夜はジョギングへ。 前半はキロ5を目安に、後半は多少上げるのを意識して、久々に9.6kmコースへ。
5.11, 4.56, 5.01, 4.54, 4.53, 4.35, 4.34, 4.20, 4.25, 4.09と、9.6kmを45分21秒で、キロ4分43秒ペースだった。
最近、速いペースでの練習があまりできていなかったので、ランクインすることが少なかったのだけど、このペースは9.6kmコースの歴代8位の記録だった。
1位の記録が2年半前に樹立した43分43秒で、キロ4分33秒ペースなのだけど、4分40秒くらいのペースなら、比較的楽に走れるようになってきているので、本気で記録狙いに行けば、この記録は更新できそうだな。
どこかで調子を整えて記録更新したいと思う。 一方12.1kmコースと6kmコースは、キロ4分22秒の記録なので、更新するのがちょっと厳しそう。 なぜか9.6kmだけ10秒以上も遅いペース。

PHP8への対応

晴れ今日はPHP8への対応をがっつりとやっていた。 PHP8では、7以前ではNoticeだった場所がWarningに変換された為、自分のプログラムではかなりの箇所でWarningが発生している。 それらを直していかないといけない。 現時点で動いているサイトが多分34サイトあって、プログラムの行数は余裕で10万行を超えると思う。 それらを全て修正していかなくてはならないのだけど、サイトによってエラーが多かったり少なかったり、基本的にはソースコードの行数に比例する。 サイトにも重要度で優先順位があるのだけど、優先度が高すぎるサイトは、変更のリスクを許容できないので、優先度が5番目くらいのサイトから手を付けていった。 ただ、全てのサイトで共通で使っているコアファイル的なものがあって、それは先に直さなくてはならない、優先度の高いサイトもそれを読み込んでいるので、慎重にやった。 しばらくはPHP7で動かすので、直接的な影響はないはずだが、やはり怖いは怖い。
基本的にはissetを付けていったり、一部ではissetだと都合が悪いので!emptyを使ったりで対処していく。 全体的に一時しのぎの対応になってしまったが、そのうちちゃんと書き直して綺麗にしたい願望はある。

UbuntuのサーバーはPHP8対応終わるまでほとんど用無しになってしまったので、ディスクだけ残して、インスタンスは削除することにした。 さて、せっかくインスタンスを新しくするプロジェクトが動き出せたのに、PHP8対応で詰まるとは思っていなかった。 今からPHP7でインスタンス作るのはありえないのでやるしかないが。

夜はジョギングなし。

初めてのUbuntu

晴れサーバー系で苦戦中。 今日はさくらのクラウドに新しいインスタンス作成して、Ubuntu20.04というのを入れて、ウェブアプリケーションが動くようにする作業の、手順確認をしている。 ローカルに入れてやれって話だけど、Dockerの登場でVagrant消してしまったし、WindowsのWSL2がUbuntuだというが、それを同じように扱えるのかわからないし、扱えたとしても環境汚したくないので、多少のお金がかかるけど、実際にインスタンス作ってやるのがベストと判断して。
ディスクは、今が20GBだけど、使用率が85%くらいになっていてこの先怖いので、今はまだ最小の20GBで作るけど、本番時は40GBにするつもり。 Ubuntu使うの初めてで、yumじゃなくてaptだったり、firewalldじゃなくてufwだったりするが、基本的にはLinuxなので、これくらいの違いしか自分にはわからず。
とりあえずPHPは8.0.0を入れたが、昨日か今日に、8.0.1というのがリリースされているので、本番時はそれを入れたいので、自動的に落ちて来なかったら入れる方法探さなくてはならない。
あとはnginxやImageMagick入れたのだけど、ImageMagicで待望のWebPが扱えるようになっていて素晴らしい。 今動いているCentOS7のyumから入れられるImageMagickはWebPに対応しておらず、やるとしたら自分でコンパイルしないといけなくて、それはリスクが高すぎるのでずっとWebP対応ができていなかった。 iOSでもWebPが扱えるようになった今、対応しない理由はない。

今まではpostfix+dovecotでメールサーバーも立てていたが、メールサーバーはもういらないかな…… 独自ドメインのメール使うことほとんどないし、もし使うならSESとか外のサービス使おうと思う。
eth1の追加はCentOS7よりわかりやすい感じだった、yml編集するだけだったので。

色々設定して、いざアプリケーションを動かしてみようと思ったら、PHPのエラーで動かない。 色々調べていたが、PHP8からの「後方互換性のない変更点」に引っかかっていた。 このページの

多くの notice が警告に変換されるようになりました:

未定義の変数を読み取ろうとした場合
未定義のプロパティを読み取ろうとした場合
未定義の配列のキーを読み取ろうとした場合
オブジェクトでない値のプロパティを読み取ろうとした場合
配列でない値のインデックスにアクセスしようとした場合
配列を文字列に変換しようとした場合
リソースを配列のキーとして使おうとした場合
null や bool 値や float の値を文字列オフセットとして使おうとした場合
境界を超えて文字列のオフセットを読み取ろうとした場合
文字列のオフセットに空文字列を割り当てようとした場合


の、特に先頭から3つ目までに。 これはコード自体をかなり修正しないといけないので、手元で検証してからじゃないとできなさそうだ。
php-fpmの設定で、php7系とphp8系を、ドメインを区別して、同じnginxで処理したいのだけど、Dockerで出来るかな。 ポート変えれば簡単にできるが、出来るならポート変えずに処理したい。
fastcgi_pathで、php-fpmのソケットを指定しているので、そこを変えれば多分行けるので、これは明日以降で要検証だ。

あとは公開鍵認証、Mackerelくらいだろうか。 今はMunin入れてるけど、これももういらないかな。
今まで1年掛かって取り掛かりすらしなかったプロジェクトに、ここ数日で取り組んでいて、やる気になれば1週間もあれば終わりそうなので、今までどれだけ逃げてきたかっていうのが分かる。

夜はジョギングには行かずランジジャンプ30回×5セットのトレーニング。 1セット目で膝とか痛かったが、2セット目以降で痛みが消えて、筋肉と心臓が鍛えられた。

さくらのクラウド データベースアプライアンス

晴れ火曜はいつもの店でいつものように打ち合わせ。 今日は道路が非常に混んでおり、年末年始休みが終わって、人々が平常通りに動き出しているのを感じた。
首都圏で緊急事態宣言出ているが、香川県のこのお店への来客具合は、いつもと変わらないような気がする。 2021年が始まって2週間経ったが、この集まりでのプロジェクトの動きはまだ何も無い。 1年って52週間しかないので、そのうちの4%も、もう経過しているということを再認識しなくてはならない。 あっという間に夏になって、また年末になってしまうだろう。
モーニング

自分のサーバーでは、さくらのクラウドを使っているのだけど、アプリケーションとデータベースを同じサーバーに同居させている。
何度か書いているが、新しいインスタンスに新しいディストリビューションを入れて、PHPなどを最新版にしたい。 だが、アプリケーションとDBが同居していると、別のインスタンス立ち上げてDB接続させたい場合問題になる。 やろうと思えば古いインスタンスのポート開けて、そこに接続させることもできるのだけど、微妙な策だ。
なので、DBをサーバーに同居させるのではなく、AWSでいうRDSみたいに、DB専用のサービスみたいなものが、さくらのクラウドにもあるので、それに移行する作業をしていた。

さくらのクラウドでデータベースアプライアンスを使うには、スイッチが必須。 スイッチは、スイッチのみのプランか、スイッチ+ルータのプランがある。 別にルータ機能は求めてないし、ルータ機能がついているとIPアドレスも16個や32個取得しなくてはならず、金額が跳ね上がる。 裏側でネットワーク組むだけなので、スイッチだけのプランを作成し、データベースアプライアンスと、今動いているインスタンスにNICを追加してスイッチに接続させた。 インスタンスにNICを追加するのは動かしながらはできないので、一旦サーバーを落とさなくてはならない。 冗長化などもしてないため、2,3分で終わるので今アクセスしている人たちは無視して、無理やりシャットダウンしてNIC追加して、ついでにプランを2CPU×2GBメモリに上げた。 今までは1×1で、22時前後など負荷のかかる時間は少々厳しかったので。
で、SSHでeth1を追加したりして、ようやくDBアプライアンスに接続することができた。 ネットワークは苦手なので、この辺りの一連の作業も気を使う。

接続できたので、次はデータベースのデータを移行しなくてはならない。 mysqldumpで丸っと移せばいいのだけど、mysqlの管理テーブルとかも移ってしまうのと、without的なものが見つからなかったので、1データベースずつmysqldump, mysqlコマンドで流し込んでいった。
で、軽くテストして、いざデータベース接続先を変更したら、insertの一部クエリでエラーが発生。 not nullのカラムを持つテーブルにinsertする場合に発生していたのだけど、例えばnameがnot nullだとして、
INSERT INTO table (id, name, birthday) VALUES(1, ”, ‘2000-01-01’);
というのは通るが、
INSERT INTO table (id, birthday) VALUES(1, ‘2000-01-01’);
というのはエラーが発生する。 こんな処理している箇所がけっこうあって、コード直すのは箇所が多くて大変なのだけど、DB側でnot null制約を外して対応してしまった。

が、後で調べて分かったのだけど、MariaDB10.2.4からsqlmodeに「STRICT_TRANS_TABLES」が追加されたよう。 これはSQLを厳密に処理する設定らしく、上で挙げたようなnot nullなのにカラム指定しないインサート、つまり空ではなくnullのような場合にエラーを吐くようになっていたらしい。
前まで使っていたのが、MariaDB10.1.48で、今がMariaDB10.4.12だからだな。

とりあえず、色々計画している中での、データベースの分離は終わった。 これでようやくスタートラインに立てた感じがする。

夜はジョギングへ。 ペース気にせず
5.31, 5.27, 5.23, 5.09, 5.08, 5.05と、6kmを31分46秒で、キロ5分17秒ペースだった。

道の駅ふれあいパークみの

晴れ今日は「道の駅ふれあいパークみの」に併設されている公園に遊びに行く予定になっている。 11時半くらいに家を出て、マルナカでお昼ごはんを購入して、車内で食べながら一般道で向かう。
13時前に到着して、シートを敷いて荷物を置いておく。 寒い冬の日の屋外だからだろうか、それとも新型コロナウィルスの影響だろうか、公園には人がまばらだった。
滑り台で遊んだり、長男がクリスマスにもらったバレーボールで遊んだり、それを使ってドッジボールをしたり。 最後の1時間くらいは、地元の幼稚園に通う子が「一緒に遊ぼう」と言いに来て、長男と三女とその子の3人で、いろいろやって遊んでいた。
17時まで滞在したが、今日はここ数日に比べたら暖かかったので助かった。 高松空港や綾川に比べたら、海も近いし三野の方が暖かそうなイメージはあるが。
ふれあいパークみの

夕飯を食べてからはジョギング。 さっき公園で暇すぎたので、ストレッチやランジウォークやっていたので、少し足が疲れていたのと、食後20分でのランだったので、少しお腹が苦しかった。
5.14, 4.46, 4.44, 4.35と、3.8kmを18分41秒で、キロ4分51秒ペースだった。

この三連休、三女の陸上がなかったのだけど、陸上習い始める1年くらい前までは、毎土日が今日のような感じで予定がなく、昼前から公園に遊びに行っていたなぁと思い出した。
それはそれで充実していたと思うけど、陸上のある日々で、休みなのに朝から夜まで出かけている方が、充実感があるなぁと実感した。 疲れたりパソコンやる時間がなかったりと、問題はあるのだけど。
新型コロナウィルスが三度猛威を振るう中、陸上がどうなっていくのかが、まだわからない。 監督はやる気だけど、そもそもの競技場や四番丁が閉鎖されたら、活動の場がなくなってしまう。
そういえば、屋島競技場は先週金曜日の朝に、観客席の天井部分からアルミの部品(長さ2.1m、重さ5kg)が落下していたのを発覚したらしく、コロナ関係なく閉鎖されている。
観客席の屋根の内側を構成する部品の一つだろうけど、その重量のものが、高さ12m上から落ちてきたのが直撃したら、下手したら死ぬかもしれないな……

38歳の誕生日

曇り今日は38歳の誕生日。 誕生日だからといって、特に変わったことはないのだが。
家でお昼ごはんを食べて、午後から三女と、さぬきこどもの国に遊びに行ってきた。 この前陸上チームのサイクリングで来たが、三女と2人でくるのは結構ひさしぶりな気がする。 施設の中で遊んだが、リニューアルされていたので、プラネタリウムの改修が終わってから、もしかしたら一度も来ていなかったのかもしれない。 新型コロナウィルスの影響だろうけど、館内はガラガラだった。 特に科学や美術の体験コーナーは人が全然いなかった。
三女の年齢的に、この施設ではもうあまり楽しめなくなってきたな。 1時間程滞在した。

特に行く場所はないので、このまま西ウィングの方に車で走っていって、空港公園の施設の一部で、ロープのピラミッドみたいなのがある広場でちょっとだけ遊んだが寒すぎた……
それから、車でブラブラと走り、矢坪のファミリーマートでシュークリームやファミチキ、コーヒーなど購入して、綾川競技場に行ってみることに。

綾川競技場は10月から改修工事中で4月くらいまで使えないのだが、どんなになっているのだろうと思って。
工事中なので、競技場は全体が柵に囲まれていて、中があまり見えなかった。 芝生の部分は全部剥がされて、ショベルカーが穴を掘っていた。 競技場のトラックはそのままだったけど、リレーゾーン変更などが適用された、新仕様には変えてくれないのだろうか。

それから、トンネルで少しだけトレーニングして、芝生広場の前で軽くドリルして遊んで、綾川競技場を出発。
帰りは国分寺経由で、通ったことない道を走って、新しい道を覚えて帰ってきた。

夜は自分の誕生日を祝ってもらった。 子供たちからはプレゼントをもらった。 ジョギング用のニット帽、手袋、靴下×6足、ビール×6本、ガム×2パック、ノート。
靴下は持っているやつがほとんど穴が開いているので、今日買いに行こうかと思っていた。 もらったやつはちょっと分厚そうなのとグリップがついていないので、どんな具合なのかは履いてみないとわからないな。 夏は暑そうな感じがする。 ニット帽は、ほぼ新品のが1つ余っているので、使い所が難しいのと生地がちょい薄手なので、真冬じゃなくて、春先と秋に使えそうな感じかもしれない。 手袋は今使っているのが登山用で使っていて、処分することになったやつを使っているので、もう8年くらい使っているものだと思う。 10本の指のうち8本くらいに穴が開いていて、自分は特にみっともなさとか気にしないのだが、捨てるいいチャンスになったかな。 これは今度使ってみよう。

今夜もジョギングは無し。 休みだと夜走りに行くのが面倒で難しいのだが、3日連続で休んでいるので、ちょっとやばいかも。

寒すぎる空港公園

曇り今日は有明クロスカントリーの日だが、新型コロナウィルスが急速に広まってきたこともあり、チームとして出場辞退するということになった。 そのためいつも通りの土曜日なので、朝は三女のスイミングへ。  スイミング後はくら寿司へ。 Go to Eatの無限くら寿司で1回だけポイントをためたので、今回は1000円引きで食べることができる。 といっても、2人でデザートまで食べて、1,700円くらいだったが。

それからゆめタウンで、三女の上履きと飲み物を買って、図書館へ。 年末から借りていた本を返して別の本を借りてきた。 ここで、三女と同じ陸上チームで、同じ小学校の家族と遭遇。
図書館の後は、空港公園のアドベンチャーゾーンに遊びに行った。 ここで一輪車や凧揚げをしようと思っている。 車の中で少しくつろいでいたら、先程図書館で遭遇した同じ陸上チームの家族がやってきた。 偶然にも空港公園、それも人気エリアではないアドベンチャーゾーンで遭遇するとは。
今日は天気も良くなく、風も強くて、空港公園は非常に寒かった。 風が強いので凧は良く上がったが、強すぎてかなり引っ張られる感じだった。
空港公園は風が強いのに加えて、時々雪が降っていた。 日陰の場所では薄っすらと雪も積もっていたし……

15時半くらいまで、1時間ほど空港公園に滞在して、マルナカで夕飯のシチューの材料を購入して帰宅。
今夜もジョギングは無し。

新学期

晴れ今日から子供たちの学校の新学期が始まった。 朝は7時位に起きて、子供たちを学校まで送っていってあげる。 家に帰ってきて7時半くらい。 二度寝してもいいのだが、最初の目覚ましが15分後、次の目覚ましが30分後になるので、今から寝てもほとんど寝ることができない。 寝ると、起きる時がつらすぎるので、寝ずにパソコンやることにした。
いつもより15分くらいは時間があるので、早めに切り上げてマックに行こうと思っていたのに、逆にいつもより10分遅くなって、マックに着いたのが9時半になってしまった。 そのため、ほとんど滞在することはできず。

前から検討しているサーバーおOSだけど、CentOS8の雲行きが怪しくなってきたので、今まで一度も使ったことがないのだが、DebianかUbuntuを試してみようかと思い始めている。 RHELがさくらのクラウドで使えれば値段によっては検討してもいいのだけど、今の所ラインナップにすら入っていないので検討すらできない。
DebianもUbuntuも使ったことがないので、どっちがどうとかわからないけど、シェア的にはUbuntuが高い? よくわからないので、ググったり、試しに両方入れてみて、って感じになるかもしれない。
が、もう1年越しのプロジェクトなので、いつ出来るかもわからないが……

今夜はジョギング無し。 明日から三連休だけど、クロスカントリーも中止だし、陸上練習もないので、やることがなさそうだ。