zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

【ezmlm】モデレータによる投稿時に承認メールは誰に飛ぶのか問題

■結論
ezmlmの「モデレータのみ投稿できます。モデレータ以外はモデレータに問い合わせて承認を得ます」について、明示的なドキュメントが見つけられなかったのですが、挙動としては下記のような感じっぽいです

モデレータA受信 モデレータB受信 モデレータC受信
モデレータAから送信 × ×
モデレータBから送信 × ×
非モデレータから送信
  • モデレータのメールアドレスアドレスから送信→送信者にのみMODERATE確認メールが届く
  • モデレータ以外のメールアドレスから送信→モデレータ全員にMODERATE確認メールが届く


■MLツール(ezmlm)で利用可能なメッセージの投稿ルール

  • 誰でも投稿できます
  • 参加者のみ投稿できます。参加者以外は宛先不明で返信されます
  • 参加者のみ投稿できます。参加者以外はモデレータに問い合わせて承認を得ます
  • モデレータのみ投稿できます。モデレータ以外は宛先不明で返信されます
  • モデレータのみ投稿できます。モデレータ以外はモデレータに問い合わせて承認を得ます

根拠が見つけられたら追記します&&だれか情報あったら教えてください。。

【Subversion】誤コミットの取り消し(svnadmin dump | svndumpfilter exclude)

■概要

バージョン管理ツールでは、誤ってコミットしてしまった場合でも履歴から復元できてしまうため、その取り消しが課題になりがちです。
今回はSubversionにコミットしてしまったファイルを指定してリポジトリから消したい、というモノへの対応方法を記載します

■作業メモ

※事前に利用者に利用停止を呼びかける、アクセス権を一時的に停止するなどしてsvnの利用を止めたうえで下記作業を行います。

1. 現在のリポジトリから除外パスを指定してダンプファイル作成
svnadmin dump /path/to/repository | svndumpfilter exclude \
/doc/derete/file1.txt \
/doc/delete/directoryname/ \
> /path/to/backup/repos.dump

# 除外パスに日本語ファイル名(ここではSJIS)を含む場合にエラーとなる場合、環境変数文字コードを一時的に設定します

LANG=ja_JP.SJIS
LC_ALL=ja_JP.SJIS
2.元のリポジトリのバックアップ

# リポジトリをリネームしてバックアップを取得。
mv /path/to/repository /path/to/repository.bak

3.リポジトリの新規作成

# 同じ名で作成します。
# 既存のリポジトリの作成方法に従ってください。
svnadmin create /path/to/repository

4.ダンプファイルのリストア

最初に作成したダンプファイルを上記で新規作成したリポジトリにリストアします。
svnadmin load /path/to/repository < /path/to/backup/repos.dump

5.hooksやconfファイルの反映

/path/to/repository/hooks
/path/to/repository/config
など初期設定以後設定追加している場合は、バックアップより認証情報等を書き戻します
例)

rm -rf /path/to/repository/conf
cp -rp /path/to/repository.bak/conf /path/to/repository/conf
6.リポジトリからの再チェックアウト

これで過去のリビジョンから該当ファイルを取り出すことはできなくなりました。
(コミットログ上にはファイルのコミット情報は残りますが、履歴から開こうとするとエラーとなります)
念のため再チェックアウトを利用者に依頼します

DATADOG(無料プラン)でWindowsStorageServerを監視してみる

【概要】

結構前に作ったDATADOGお勉強用のアカウントがあって
PROプランの試用期限が切れたからもうだめかなー、と思ってたら、FreePlanにダウングレードして継続利用できるみたい。
折角なので手持ちのNAS(WindowsStorageServer)に入れて監視してみた

【メモ】

FREE Planでできること
https://www.datadoghq.com/ja/pricing/
※上記によればアラートに関してはOFFとなっているが、今んとこSlackにアラート発報できてる。

【作業】

1)DATADOGアカウント作成:

省略。Datadog Free Trial 期限が過ぎていて Free Plan になっているものをベースに以下作業します

2)以下のサイトを参考に、エージェントをダウンロードしてインストールする

https://docs.datadoghq.com/ja/agent/basic_agent_usage/windows/?tab=guiWindows 用 Agent の基本的な使用方法


(概要)

  • Datadog Agent インストーラーをダウンロードしてインストール
  • プロンプトに従ってライセンス契約に同意し、Datadog API キー(※)を入力

※Datadog API Keyは、Datadog管理画面の[Integrations]-[APIs]-[API Keys]でAPI Keyの値を取得
API KeyがないときはNew API Key-[Create API Key]で作成

3)DATADOGの監視画面-[Infrastructure]で対象のマシンが監視されていることを確認
4)アラート設定

参考:https://qiita.com/suzuyui/items/50ace200cb030cfed363

例)# datadog-monitoring

  • Datadog で Integrations > Integrations を選択し、Slack を選択する

→Configuration→[Connect Slack Account]
→Slackでパーミッションを確認して[Allow]する

  • Slack IntegrationのCHannlel Nameで先ほどの連絡先チャンネル

例)# datadog-monitoring
を選択して[save]

  • Datadog でのモニタリング追加

[Monitors]-[+New Monitor]で監視したい項目を追加していく

例)
Query:avg(last_5m):max:system.cpu.user{host:ホスト名} > 60
Message:@slack-datadog-monitoring

パソコンのマシン名を設定しよう案内

集中管理とかで一覧したときにマシン名が揃ってないと気持ち悪いので以下のアナウンスをした

■Windows10の場合
[スタート]-[設定]-[システム]-[バージョン情報]-[デバイス名]で現在のPCの名称を確認
→初期設定のままの場合(Desktop-xxxなど)は、同画面の[このPCの名前を変更]で
ご自身のノートPCの管理番号”PC-xxxx”に変更してください。

macOSの場合
Macでアップルメニュー >「システム環境設定」と選択し、「共有」をクリックします。
左下のロックがロックされている場合 、クリックして環境設定パネルのロックを解除します。
「コンピュータ名」フィールドに新しい名前ご自身のノートPCの管理番号”PC-xxxx”に変更してください。

メモ迄

【ezmlm+qmailadmin】システムから送られるメールの文字化け対応

【概要】

ezmlm+qmailadminの環境で、モデレータによる承認などの際にシステムから送られるメールの文字コードについて、WindowsPCでは文字化けが発生するため以下の対応を行った

【作業】

  • 1)既存のMLのcharset指定

既存のMLのディレクトリ直下に、中身が「iso-2022-jp」のcharset
というファイルを配置する

  • 2)今後作成されるMLで自動的にcharsetファイルが作成されるようにする
cd /usr/local/ezmlm/bin
cp ezmlmrc ezmlmrc.org
echo \</charset/\> >> ezmlmrc
echo iso-2022-jp >> ezmlmrc

【AWS】RDSの多段レプリケーションによるupgrade実施

【まとめ】

AWSの(RDS)MySQL5.5→5.7への強制Upgrade予告に対応するため、リードレプリカによる多段レプリケーションを組んだところ、シーケンシャルに行うと4時間弱のサービス停止が20分程度に抑えられた。
詳しくは以下を参照のこと
aws.amazon.com

【概要】

2020年の秋、AWSから以下の様なメールが届いた

Amazon RDS for MySQL 5.5 の廃止に関するお知らせ | Amazon RDS for MySQL 5.5 End-of-Life date is approaching

Amazon RDS は、MySQL メジャーバージョン 5.5 の廃止プロセスを開始します。これは、MySQL コミュニティでは、2018 年 12 月 3 日にすでに MySQL 5.5 のサポートを終了した為です。
Amazon RDS for MySQL 5.5 は、UTC 協定世界時間の 2021 年 2 月 9 日 00:00:01 (JST 日本標準時間の 2021 年 2 月 9 日(火) 09:00:01) に廃止されます。
(中略)
2021 年 2 月 9 日までにデータベースをアップグレードしていない場合、RDS は、2021 年 2 月 9 日 00:00:01 UTC (2021 年 2 月 9 日 09:00:01 JST) から 2021 年 3 月 9 日 00:00:01 UTC (2021 年 3 月 9 日 09:00:01 JST) の間に、スケジュールされたメンテナンスウィンドウ内で MySQL 5.5 のデータベースをバージョン 5.7 にアップグレードします。2021 年 3 月 9 日 00:00:01 UTC (2021 年 3 月 9 日 09:00:01 JST) の時点で、残りのすべての Amazon RDS for MySQL 5.5 インスタンスは、メンテナンスウィンドウ中であるかどうかに問わず、バージョン 5.7 にアップグレードされます。

またか。
検証環境を作成してMySQL5.7での動作に問題がないことは確認できたが、Upgrade作業の間のサービス断をできるだけ短くしたい。

【初期測定】

AWSを利用し始めた最初期の頃のサービス群が対象となるが、運用期間も長くデータも大量で、試しにシーケンシャルにUpgradeを実行したところ(MySQLは一気に5.5→5.7とは出来ず、5.5→5.6、5.6→5.7と1段階ずつUpgradeが必要だった)、本番RDSをクローンした環境で

  • MySQL5.5→5.6で3時間
  • MySQL5.6→5.7で30分

かかった。

【解決策】

4時間弱のサービス停止は厳しいな……と思っていたところ、まとめにも記載した素敵な手順書が。これだ!
aws.amazon.com

RDSのリードレプリカを用いて、

MySQL5.5(親)→MySQL5.6(子)→MySQL5.7(孫)

の様な多段レプリケーションを構成し、レプリケーションが出来たらメンテインして親の更新を止め、孫をマスタに昇格する、といった内容。この手順を使った結果、サービス停止は20分でUpgradeが完了した。(あまり焦ると親→孫間のレプリケーションラグがありうるので確認は慎重に!)

【多段レプリケーション作成】

1)親(hoge-db)のリードレプリカ(子リードレプリカ:hoge-rr)を作成
2)子リードレプリカ(hoge-db-rr)が作成できたら、そのリードレプリカをUpgradeする(MySQL5.5→5.6)
3)子リードレプリカ(hoge-db-rr)がUpgradeできたら、hoge-db-rrに対してさらにリードレプリカ(孫リードレプリカ:hoge-db-rr-rr)を作成する
4)孫リードレプリカ:hoge-db-rr-rrが作成できたら、そのリードレプリカをUpgradeする(MySQL5.6→5.7)

世代 備考
DB名 hoge-db hoge-db-rr hoge-db-rr-rr
エンジンバージョン 5.5.57 5.5.57→5.6.49 5.6.49→5.7.31
Multi-AZ あり なし あり ★親がMylti-AZの場合は孫のRRをMulti-AZにしておくこと
オプショングループ default:mysql-5-5 og-hoge-db-mysql5-6 og-hoge-db-mysql5-7 ★オプショングループは事前に用意
パラメータグループ pg-hoge-db-mysql5-5 pg-hoge-db-mysql5-6 pg-hoge-db-mysql5-7 ★ パラメータグループは事前に用意
バックアップ保持期間 なし 5.6にUpgrade後「1日間」に変更 1日間 ★子のバックアップ保持期間を1日以上にして有効にすると孫RRが作成可能

備考の★印が今回ハマったところ。参考になれば。。
– 親がMulti-AZの場合は孫のRRをMulti-AZにしておくことで昇格後のMulti-AZ構成変換しないですむようにする
– 参考にした手順では「 ※ リードレプリカインスタンスを作成するためには、自動バックアップを有効化する必要有り」とありましたが、より具体的には子のバックアップ保持期間を1日以上にして有効にすることで孫RRが作成可能でした。

【反映作業】

1)サービスメンテイン
  • ALB等でWebUIの流入停止
  • cronバッチ、サービス等DBのupsertがあるものを停止
2)マスタRDSのリネーム

hoge-db→hoge-db-org
[すぐに適用]
→エンドポイント名が変わるので、サービスはDBに接続できなくなるが、JavaなどDNSキャッシュするものもあるため以下の手順でプロセスの停止とレプリケーション状態を確認する

3)レプリケーション状態確認

※ここで焦らず5分ほどかけてレプリケーション漏れがないことを確認する。
■親

mysql> show processlist;
+----+--------------+---------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+
| Id | User         | Host                | db   | Command     | Time | State                                                                 | Info             |
+----+--------------+---------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+
|  x | rdsrepladmin | xx.xx.xx.xx:xxxx    | NULL | Binlog Dump |  396 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL             |
|  x | rdsadmin     | localhost:xxxxx     | NULL | Sleep       |    5 |                                                                       | NULL             |
|  x | root         | xx.xx.xx.xx;xxxx    | NULL | Query       |    0 | NULL                                                                  | show processlist |
+----+--------------+---------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+
# 「Master has sent all binlog to slave;」が出ていることを確認
# ほかにプロセスが走っていないことを確認

SHOW MASTER STATUS;
+----------------------------+----------+--------------+------------------+
| File                       | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------------+----------+--------------+------------------+
| mysql-bin-changelog.315036 |      107 |              |                  |
+----------------------------+----------+--------------+------------------+

■子

mysql> show processlist;
+------+--------------+---------------------+------+-------------+------+-----------------------------------------------------------------------------+------------------+
| Id   | User         | Host                | db   | Command     | Time | State                                                                       | Info             |
+------+--------------+---------------------+------+-------------+------+-----------------------------------------------------------------------------+------------------+
| xxxx| rdsadmin     | localhost:xxxxx     | NULL | Sleep       |    8 |                                                                             | NULL             |
| xxxx| system user  |                     | NULL | Connect     |  677 | Waiting for master to send event                                            | NULL             |
| xxxx| system user  |                     | NULL | Connect     |  241 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL             |
| xxxx| rdsrepladmin | xx.xx.xx.xx:xxxx    | NULL | Binlog Dump |   18 | Master has sent all binlog to slave; waiting for binlog to be updated       | NULL             |
| xxxx| root         | xx.xx.xx.xx:xxxx    | NULL | Query       |    0 | init                                                                        | show processlist |
+------+--------------+---------------------+------+-------------+------+-----------------------------------------------------------------------------+------------------+
# Slave has read all relay log; 
# Master has sent all binlog to slave;
# が出ていることを確認

SHOW SLAVE STATUS\G
              Master_Log_File: mysql-bin-changelog.315036
          Read_Master_Log_Pos: 107
(略)
        Relay_Master_Log_File: mysql-bin-changelog.315036
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes


SHOW MASTER STATUS;
+----------------------------+----------+--------------+------------------+-------------------+
| File                       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------------+----------+--------------+------------------+-------------------+
| mysql-bin-changelog.000499 |      120 |              |                  |                   |
+----------------------------+----------+--------------+------------------+-------------------+

■孫

mysql> show processlist;
+------+-------------+---------------------+------+---------+--------+--------------------------------------------------------+------------------+
| Id   | User        | Host                | db   | Command | Time   | State                                                  | Info             |
+------+-------------+---------------------+------+---------+--------+--------------------------------------------------------+------------------+
| xxxx | rdsadmin    | xx.xx.xx.xx:xxxx    | NULL | Sleep   |     13 |                                                        | NULL             |
| xxxx | system user |                     | NULL | Connect | 395926 | Waiting for master to send event                       | NULL             |
| xxxx | system user |                     | NULL | Connect |     29 | Slave has read all relay log; waiting for more updates | NULL             |
| xxxx| root        | xx.xx.xx.xx:xxxx    | NULL | Query   |      0 | starting                                               | show processlist |
+------+-------------+---------------------+------+---------+--------+--------------------------------------------------------+------------------+
# Slave has read all relay log; 
# が出ていることを確認

SHOW SLAVE STATUS\G
              Master_Log_File: mysql-bin-changelog.000499
          Read_Master_Log_Pos: 120
(略)

        Relay_Master_Log_File: mysql-bin-changelog.000499
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
4)孫RR昇格

[アクション]-昇格
設定はデフォルトのままで昇格を実施

5)孫RRリネーム

hoge-db-rr-rr→hoge-db
[すぐに適用]

6)メンテアウト
7)MySQLクライアントのUpgrade

必要に応じてMySQLクライアントをUpgradeしておいてください
(クライアントが5.5のままだとMySQLDumpができなくなる)

【感想】

今後MySQL5.6も強制Upgrade対象となる可能性大なので、RRを使ったUpgradeをやっていきたい。記事を作成してくれたAWSのなかの人ありがとうございました。

【俺的2021標準環境作成メモ】WSL2 + VSCode + Docker 開発環境

【概要】

業務用PC(Windows10Home)に標準的(と思われる)開発環境の構築を行いましたのでメモを残します。

■WSL2インストール

MS公式の手順に従います。
https://docs.microsoft.com/ja-jp/windows/wsl/install-win10
(今回は通常のWindows10の2020年末最新状態を想定し、PowerShellでの作業を実施します)
1)LinuxWindows サブシステムを有効にする
管理者権限でPowerShellを開き、以下のコマンドを実行します

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

2)現在のWindows10のビルドバージョンを確認

  • [Windows]キー+Rでファイル名を指定して実行、を開き、winverコマンドを実行

※必要条件

 x64 システムの場合:バージョン 1903 以降、ビルド 18362 以上。
 ARM64 システムの場合:バージョン 2004 以降、ビルド 19041 以上。
 18362 より前のビルドは WSL 2 をサポートしていません。 Windows 更新アシスタントを使用して、お使いのバージョンの Windows を更新します。

3)”仮想マシン プラットフォーム”オプション機能を有効にする
管理者権限でPowerShellを開き、以下のコマンドを実行します

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

お使いのマシンを 再起動 して WSL のインストールを完了し、WSL 2 に更新します。

4)Linux カーネル更新プログラム パッケージをダウンロードして実行
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

5)WSL2を既定のバージョンとして設定
PowerShell

wsl --set-default-version 2

Ubuntuのインストール

1)[MicrosoftSore]でUbuntuで検索、[Ubuntu](実際は20.04LTSの導入となる)を[入手]
2)インストールが完了したら[起動]します
3)UNIX用のユーザー名とパスワードを設定します
4)念のためUpdateします(sudo apt update && sudo apt upgrade)

Visual Studio Code のインストールと日本語化

1)VS Code自体は以下のサイトより[Windows]をダウンロードして導入
 https://code.visualstudio.com/download
(以下日本語化、お好みで)
2)VS Codeを起動してウィンドウ上のメニューから[View]-[CommandPalette]-[Configure Display Lanuage]と進みます
3)[Install additional languages...]を選択し、左ペインに表示されるパッケージより[Japanese Language Pack for VS Code]を[install]し、[restart now]します

VS CodeからWLSへの接続

1)VS Codeを起動して、[拡張機能]から、wsl で検索して[Remote - WSL]をインストールします。
2)VS Codeを閉じます

Ubuntu から VS Codeを起動

1)スタートメニューよりUbuntuを起動
2)作業ディレクトリを作成し、その中からVS Codeを起動します

cd ~
mkdir workdir
cd workdir
code .

VS Code Serverがインストールされ、そのうえでVS CodeUbuntuに接続された状態で起動します。

■Docker Desktop for Windowsのインストール

1)Docker Desktop(2020年末バージョン3.0.0)のダウンロードサイトよりダウンロードしてインストール
https://www.docker.com/products/docker-desktop
2)Configuration画面で[Install required Windows components for WSL 2]にチェックが入っていることを確認してインストールを完了させてください。

■WSL2 上での確認

1)VS Codeを起動して、[拡張機能]から、Docker で検索して[Docker]を[WSL:Ubuntuにインストールする]でインストールします。
2)Ubuntu のシェルで、docker version とコマンドを実行すると、Docker の情報が表示されます。

■極私的:VS Code拡張いれとくメモ

※プロジェクトによりVS Code拡張機能に規定がある場合があります。プロジェクトに従ってください。

  • Bracket Pair Colorizer
  • vscode-icons
  • Git Graph
  • Git History
  • GitLens — Git supercharged
  • HashiCorp Terraform