22時に寝て何度か起きて7時に起きた。一昨日からイスラエルとパレスチナの背景の調査をしていて、だいぶあてられてしんどくなってきた。歳のせいか、誰も幸せにならない難しい問題を調べているとしんどくなる。
Posts for: #2023/10
解決すべき難しい問題と戦争
23時頃から寝始めて3時ころに吐き気で苦しんで7時に起きた。寝る前にちょっとお菓子食べたのがよくなかったのかもしれない。
イスラエルとハマスの戦争
昨日の夕方からハマス (パレスチナ) がイスラエルにロケッ弾を打ち込んだというニュースをみていろいろ調べていた。ハマスはパレスチナのガザ地区を実効支配するイスラム組織だそうで、からなずしもパレスチナを代表しているわけではないらしい。パレスチナにもファタハと呼ばれる穏健派もあるそうで一枚岩ではないとのこと。経営者になると、こういった世界のニュースに対して経済への影響が気になって情報収集してしまう。イスラエルとパレスチナの2国間の問題はとても難しいものになっているようで、どうやって解決するのか、誰もアイディアのないまま、いまに至っているようにみえる。是非はとまかく、どちらかがどちらかを滅ぼすしかないのかもしれない。いまのところ、イスラエルとパレスチナの紛争は日常と言えるほど起こっていて、その2国間でドンパチするなら世界経済に大きな影響はないだろうとみられている。一方で今回は規模が大きいのと、一般市民への虐殺や犯行もみられることから、もっと大きな戦争に発展する懸念もみられている。ウクライナとロシアの戦争とも影響して台湾有事への懸念も、リスクは低いかもしれないが、ないわけではないとみられている。
世界観のあう買いもの
0時に寝て何度か起きて7時に起きた。2-3日前から首を寝違えていて違和感がある。課題管理のブログ記事を書こうと思っていたけど、気分がのらなくて遊んでいた。
ストレッチ
今週も忙しくはなく、のんびり過ごしていたので体調は徐々に復調している。腰の張りは先週に比べてかなりよくなっているように感じた。トレーナーさんによるとふくらはぎの筋の張りがあったそうだけど、私からみたらそんなに気にはならなかった。今日の開脚幅は開始前155cmで、ストレッチ後158cmだった。首を寝違えているのもなにかしらよくなる方法があるかと思って相談してみた。トレーナーさん曰く、首の寝違えだけは自然治癒しか方法がないという。トレーナーさんたちの間でもいろいろ試してみたことがあるらしい。しかし、どれも一時的に痛みを和らげる効果のあるストレッチはあるものの、時間が経つと元に戻るので限定的なものらしい。その一時的に痛みを和らげるのも、脇の下の筋を伸ばすと効果があるらしい。トレーナーさんもなぜその筋を伸ばすと痛みが和らぐのかの理屈はよく分からないそうだが、実際に試してみてそこだけが効果があったと話されていた。
Python Boot Camp
来週、徳島の鳴門でイベントがある。いま余裕もあるのでスタッフが足らなかったら手伝ってもいいと、前にてらださんと話していた。ちょっと前まで参加者が1人しかいなかったので手伝う必要ないかと思っていたんだが、ここ数日でいっきに参加者が増えたみたいで助っ人で手伝いに行くことにした。ブートキャンプに参加するのは初めて。チュートリアルやスタッフの要項などのドキュメントを予習として読んでいた。
ヨハクさんのフレークシール
たまたま「余白」というキーワードでインターネットを検索していて次のサイトをみつけた。
マスキングテープの専門店らしいが、なんとなく制作物の世界観が私にあうので応援も含めて次のフレークシールを買ってみることにした。
3種類買ってみて、今日届いたので、試しに一緒に入っていた型紙に貼ってフレームに入れてみた。こういう雰囲気が好き。しばらくオフィスの棚に飾ってみようと思う。
- ツキトホシ
- ダイアリー
- テガミ
税理士さんの選定
1時に寝て3時頃に吐き気で起きて1時間ぐらい苦しんでた。久しぶりにやばかった。その後なんとか寝て7時半に起きた。
税理士さんとの打ち合わせ1
うちの会社のイベントとして毎年ワーケーション (開発合宿) をやろうかと考えている。コワーキングやコミュニティの延長上でワーケーションを行うわけだが、いくらかうちの会社の持ち出しで費用負担してよいと考えている。しかし、そのときの支出はどういった建付けで経費として扱えるのかどうか、私は税理士ではないのでよくわかっていない。そういったことを相談するために税理士さんに顧問になってもらおうと考えている。うちから税理士さんへの要件としては freee のデータを正として扱ってくれればそれでいいかな。
また2021年度は赤字決算になったので2022年度に 法人税の欠損金の繰り戻し還付 を行った。このお金を2022年度に計上していないため、その分の金額が資産のマイナスとして2023年度の決算に残ってしまっている。法人税の支払いは正しいのだが、還付金を2023年度に雑収入として登録するか、2022年度に遡って未計上の金額を登録するかのどちらかで訂正しないといけない。過去の法人決算の訂正自体も行う仕組みはあるので手続きするだけだが、それも手間暇がかかるのでついでに税理士さんにやってもらうと考えている。
会計システムに freee を使っているので freee さんの税理士紹介サービスを使って選定する。3事務所ピックアップしてくれたので順番に打ち合わせしていく。今日はその最初の税理事務所の方と打ち合わせした。話した感覚でうちの会社の考え方や規模にあった税理士さんだったのでこの方でいいんじゃないかとも思っているけれど、せっかく他の事務所もピックアップしてくれたので他の税理士さんの話も来週また聞いてみる。
コードレビュー
まる一日コードレビューをしていた。私もマージリクエストを投げていてレビューしてもらいつつ、メンバーのコードレビューも順番にやっていった。その中で smtp の仕様を把握しておく必要があっていくつかシニアエンジニアの方からもアドバイスをもらって、私もそうだったんだと勉強していた。メールヘッダーのエンコーディング、昔は覚えていたけど、ずっとメールを送るコードを書いてなかったので私も忘れてしまっていた。こういうことをさらっと指摘できるのがシニアエンジニアのすごいところ。
go だと標準ライブラリに mime パッケージがある。mime パッケージを使って件名を utf-8 でエンコーディングされた文字列で指定すると次のようになる。q エンコーディングと b エンコーディングの2種類がある。b エンコーディングの方がデータ量が減ってよさそう。
fmt.Println("Subject: " + mime.QEncoding.Encode("utf-8", "テスト"))
fmt.Println("Subject: " + mime.BEncoding.Encode("utf-8", "テスト"))
Subject: =?utf-8?q?=E3=83=86=E3=82=B9=E3=83=88?=
Subject: =?UTF-8?b?44OG44K544OI?=
ふりかえり + チーム勉強会
22時から寝始めて何度か起きて7時に起きた。久しぶりにどっしりくるような夢をみたけれど、もう内容を覚えていない。
ふりかえりを兼ねたチーム勉強会
新しい開発に着手して初めてのチーム勉強会を行った。前の開発とチーム勉強会の運用を大きく変更した。ざっくり次が要項になる。
- 前開発の postmortem 運用がうまくいかなかったので代替としてやってみる
- 開発システム全体の機能が増えてきて、メンバーそれぞれがやっていることもバラバラになりつつある
- 普段やっていることを他メンバーへ情報共有する機会とする
- そのときのマイルストーンでやっていることをふりかえりする機会とする
- 開発システムについて知りたいところや設計の議論などをしてもよい
- メンバーが全員揃っていれば、どんな質問をしても誰かが知っているはず
- そのマイルストーンでやったことを基本として他メンバーへ共有する
- 内容は基本的になんでもよい、あまり準備せずに話せる内容でよい
- 特定の issue の内容でも、マージリクエストの解説でも、機能や振る舞いの考察など
- 知識やノウハウを他メンバーに共用する上で wiki やブログの記事などにしてもよい
- 書くところがなかったらテックブログに書けばよい
- 内容は基本的になんでもよい、あまり準備せずに話せる内容でよい
- 勉強会のために調査する時間が必要であれば、その調査時間も仕事の一環とする
- 勉強会の準備も考慮して開発のスケジュールを各自で調整する
- 業務で実装したことや調査したことを共有する機会にもなる
まだ合流前だけど、メンバーが新規に1人増える。2週間に1回の定例のみだと、新しいメンバーが既存のメンバーに追いつくための情報が足りないだろうと思って質問しやすい機会を設けようと考えていた。雑談時間とか、設計会議とか、そういう呼び方をしてもよいのだけど、私にとって違和感なく一番しっくりきて柔軟性も高いのが「チーム勉強会」になる。ふりかえりと情報共有と学びの場の3つを兼ね、チームビルディングにも応用しようという、まさに天才の所業ではないかw まだ始めたばかりだから言うだけ言っておく。また開発が終わったときに良し悪しのふりかえりはする。
今日のところは最初だったので前マイルストーンでやった issue をメンバーそれぞれ1つずつ内容を説明して共有した。私も mongodb の初期化ツールのマージリクエストが出来たばかりだったのでその背景や意図、工夫したところなどを紹介した。他のメンバーも背景やソースコードを紹介しながらみんなでわいわいできた。第1回目にしては活気があって情報共有という目的も果たせたし、よい感じの取り組みにみえた。このままうまく運用にのせていく。
相続税の申告の一歩手前
22時頃から寝始めて何度か起きて6時に起きた。早寝早起き。
会計士事務所への訪問
相続税の申告手続きを未だにやっている。
父が失くなったのが 昨年の12月26日 になる。相続税は死亡を知った日から10ヶ月以内と期限が決められている。それを過ぎると算税や延滞税などのペナルティが科せられる。うちの期限は10月26日になる。1-3月ぐらい葬儀やらお仕事やらで忙しかったものの、4月ぐらいから相続の手続きに着手した。5月29日に親族の相続関連の書類を取りまとめて弁護士さんへ送付した。それから銀行口座の解約やら司法書士さんやら税理士さんの作業やらなんやらあって、いまもまだ会計士さんに申告の書類を作ってもらっているところ。その過程でいくつか質疑応答があってそれを調査したりしている。
その会計士さんの事務所が近所にあるのでお昼に訪問して挨拶してきた。申告に必要な書類の提出をしつつ軽く打ち合わせをした。税務署は20年遡って口座のお金を動きを調べるらしい。話しているときに死亡保険金とかないですか?と聞かれて、母が受けとったと話していたなと思い出して、それも父の遺産として扱う必要がありますと言われて、確かにそうだと思って申告漏れしていることに気付いた。これで死亡保険金の書類が必要になってまた取り寄せに時間がかかる。こんな感じに五月雨式に遅れていくので10ヶ月ぎりぎりになりそうな雰囲気。来週中に申告が終わる嬉しいなといったところ。
mongodb の初期化ツール
ちょっと前から少しずつ mongodb の初期化ツールを作っている。コレクションの作成ならびにインデックスの追加を、さらに初期データの投入も制御したい。mongodb のバージョンが 6.0.x のときは作成済みのコレクションに対して同じ設定で作成しようとすると、既に作成済みというエラーが発生していた。それが 7.0.x になってエラーにならないようになっていることに気付いた。調べてみると、次の issue で同じ設定なら作成の結果に関係なく冪等であるのでエラーとして扱わなくてよいという考え方になる。
これは初期化ツールを作っている私にとっては朗報で、同じコレクションに対して複数の操作をしても変更した設定だけが有効になるといった振る舞いをする。こういう細かい所もバージョンアップをしながら改善していくことが伺えて学びになった。
selinux はなるべく有効にして使うもの
22時ぐらいから寝始めて何度か起きて6時に起きた。早く寝たから早く起きた。
selinux の微妙な振る舞い
今日は火曜日なのでチームの定例会議をやって、ドキュメントを書いて、その後はインフラの細かい作業をわちゃわちゃやって、ドキュメントを書いてとわちゃわちゃやってた。
先週、最新の almalinux 8 をインストールして、その後、lvm の論理ボリュームの結合 とか、rootless コンテナ の設定とか、テスト環境を構築していた。gitlab ci/cd から ssh で公開鍵認証を使ってデプロイしている。作り直したこのテスト環境に対してその公開鍵認証がうまく動かない現象に遭遇した。よくある設定や権限のトラブルではなく、デバッグ用の sshd を起動すると公開鍵認証できた。なにかしら systemd 経由で起動する sshd の設定ミスなんじゃないかと、2-3時間デバッグしてもわからなくて社内の有識者に尋ねてみた。
$ sudo /usr/sbin/sshd -d -p 2222
selinux を無効にしてみたら?というアドバイスをいただいて、試しに enforced から disabled にしたら動いたので selinux のなにかしらの設定を変えてしまったのかな?とそのときは思っていた。しかし、別の開発者からデフォルト設定で enforced でも動くはずという情報をもらって、もう一度 disabled から enforced に戻して再起動したら普通に動いて、その前の公開鍵認証の失敗を再現できなくなった。私にはこの先のデバッグはまったくわからない。お手伝い先のシニアエンジニアの方にみてもらって次のようなことを教えてもらった。
SElinuxが怪しいなと思ったら、/var/log/audit/audit.log とか
ausearch -m avc
コマンドを確認。
authorized_keysのアクセスが拒否されているので確かにSELinuxの問題があったことがわかります。
type=AVC msg=audit(1696315292.258:1446): avc: denied { read } for pid=446534 comm=“sshd” name=“authorized_keys” dev=“dm-0” ino=201836096 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:default_t:s0 tclass=file permissive=0
現在、authorized_keysのコンテキストは期待通りunconfined_u:object_r:ssh_home_t:s0となっているけど、問題が起きていたときは、unconfined_u:object_r:default_t:s0 だったことがわかります。
詳しい経緯はわからないけど、.ssh/authorized_keysを作成した時点でopenssh用のselinuxポリシーが適用されていなかったと考えられます。
その後なにかのイベント(再起動?)でrestorecon 相当が行われて、コンテキストがssh_home_tに変更され問題は解消した。
なんだかよくわかないけど、OSのマイナーバージョンアップで微妙にセキュリティコンテキストが変更されてrestoreconすると解決する、ってのは時々起きてますね。
たぶんopensshインストール前にrsyncしたのでコンテキストがdefault_tになってたんじゃないかと。なかなかの罠ですね。
おそらく lvm の論理ボリュームのバックアップ/リストアに rsync -a
を使った (本当は cp -a
の方がよい) ことによる問題ではないかということ。私が報告した状況と selinux のログからすぐ助言できるのが素晴らしいと思う。まだまだ私のインフラエンジニアとしての未熟さを実感した瞬間でもあった。一昔前は selinux は disabled にするものという常識だったが、最近は初期設定で動くようになっているのでなるべく selinux は有効にして運用するものという意識に変わってきているらしい。
インフラの式年遷宮
1時に寝て何度か起きて5時に起きた。それからだらだらして寝てまた7時に起きた。
テスト環境の再整備と rootless コンテナ
インフラの式年遷宮のようなことをしていて、テスト環境をリファクタリングして再整備していた。これまで root でコンテナを実行していたが、最近は rootless コンテナがセキュリティ強化の観点から望ましいということで次のドキュメントをみながら設定した。
設定はとくに難しくないが、dockerd や containerd の起動を systemd のユーザーインスタンスに依存することになる。systemd のユーザーインスタンスは基本的にユーザーがログインしたときに生成されるものなので OS が再起動したときなどに困る。OS 再起動時にも systemd のユーザーインスタンスを生成するには linger という仕組みを有効にすればよいらしい。systemd –user の扱いと linger のことまで理解していれば、たぶん大丈夫なのかな?これで運用がうまくいくことを祈りたい。
$ sudo loginctl enable-linger ucidm
インボイス制度の開始
0時に寝て何度か起きて7時過ぎに起きた。いろいろ作業していたんだけど、お昼からインボイス制度の開始に伴って請求書や会計処理がちょっと変わるのでそのシステムの運用や調べものをしていた。
インボイス制度の開始
10/1にサブスクリプションの請求が届いているものを経費登録しようとしていて税区分が変わってくることに気付いた。適格請求書発行事業者向けの支払いであればこれまで通りだが、そうじゃない場合に経過措置期間用税区分が新設されている。合理的に考えたら経過措置の控除割合80%を選択することで節税になる。ここで会計システムに経費登録する際、適格請求書発行事業者なのかどうかについて、これまでは未確認だったものを請求書 (領収書) から判断する必要が出てくる。いまみたらセブンイレブンのレシートにも登録番号が記載されている。こうやってシステム (仕組み) で世の中を変えていくのは強力だなと思えた。
その後、取引先の設定に適格請求書発行事業者の登録番号を設定できることがわかって、明らかにそうだとわかっているものは検索して設定したりしていた。外国企業については 国境を越えた役務の提供に係る消費税の課税関係について に書いてある。例えば、google workspace を使っていると請求書には Google Asia Pacific Pte. LTd. と書いてある。しかし、請求書には登録番号がない。これは 登録国外事業者名簿 をみると、有効であることがわかり、さらに法人番号もみつかる。法人に関しては法人番号と登録番号は基本的に同じなのでそれを登録しておけばよい。