by shigemk2

当面は技術的なことしか書かない

RDS DBスナップショットの暗号化メモ

メリット

  • DBインスタンス、自動バックアップ、リードレプリカ、スナップショットを暗号化する
  • データへのアクセスと復号の認証でストレージへの不正アクセスからデータを保護する
    • アプリケーションのデータ保護
    • コンプライアンス要件の達成

docs.aws.amazon.com

暗号化することでできないこと

  • 暗号化していないDBスナップショットを他のアカウントに共有するためには暗号化に使った暗号化キーを別アカウントに認識させる必要がある
    • 暗号化していなかったらそのままDBスナップショットを共有できる
    • 暗号化キーがデフォルトの場合は別アカウントに共有はできない
    • 共有できるスナップショットは手動のみ。自動DBスナップショットは共有できない。

docs.aws.amazon.com

apex ドキュメント ビルドメモ

github.com

CONTRIBUTING.mdを見たらいいんだけど、

docsの下のマークダウンを直して、go get -u ./... して go run cmd/apex/main.go docs したけど修正が反映されない!なんでだ!とおもって見てみたら、 go-bindataなるものを使っていた。リソースデータをGoのプログラムに埋め込むあのライブラリである。

使い方は調べてくれるといいとして、まあ大体こんな使い方。

$ go get -u github.com/jteeuwen/go-bindata/...
$ go-bindata data 
$ go run bindata.go main.go|iconv -f EUC-JP -t UTF-8

で、docsディレクトリの下でgo-bindata -pkg docs . を実行するとdocsディレクトリの下にbindata.goが出来て、go run cmd/apex/main.go docs するとそっちのビルドしたリソースを読み込んでくれて、修正が反映される。

fish shellのコマンドマニュアルでコマンド名が二度表示されるのを直したい→直した

www.shigemk2.com

コピーのテスト。

直したプルリク

取り込まれるかどうかは知らない→取り込まれた。 github.com

概要

fish shellで、abbr --help とか man abbr を実行すると、以下のような結果が得られる。

       abbrabbr - manage fish abbreviations
        -

   Synopsis
       abbr --add [SCOPE] WORD EXPANSION
       abbr --erase word
       abbr --rename [SCOPE] OLD_WORD NEW_WORD
       abbr --show
       abbr --list

最初のセクションでabbrが2つ続いている。2つ続いてはダメでしょう。

バグの原因

Doxygenの生成元のファイルの書き方の問題。

man pageもwebのドキュメントも、doc_srcディレクトリのテキストファイルからDoxygenで生成している。以下は実際のテキストファイルdoc_src/abbr.txtのいちぶ。

\section abbr abbr - manage fish abbreviations

\subsection abbr-synopsis Synopsis
\fish{synopsis}
abbr --add [SCOPE] WORD EXPANSION
abbr --erase word
abbr --rename [SCOPE] OLD_WORD NEW_WORD
abbr --show
abbr --list
\endfish

\sectionではセクション名とセクションタイトルを続けて書かないといけないが、セクション名とセクションタイトルが同名で続いているために、manで表示するとabbrabbrで表示されてしまう。 ちなみに、abbr.txtの中身はwebドキュメント上ではcommands.htmlのなかで表示されるが、HTMLではこのように生成される。

 <h1><a class="anchor" id="abbr"></a>
abbr - manage fish abbreviations</h1>
<h2><a class="anchor" id="abbr-synopsis"></a>
Synopsis</h2>
 
 <pre class="fish synopsis">
<span class="command">abbr</span> <span class="argument">--add</span> <span class="argument">[SCOPE]</span> <span class="argument">WORD</span> <span class="argument">EXPANSION</span>
<span class="command">abbr</span> <span class="argument">--erase</span> <span class="argument">word</span>
<span class="command">abbr</span> <span class="argument">--rename</span> <span class="argument">[SCOPE]</span> <span class="argument">OLD_WORD</span> <span class="argument">NEW_WORD</span>
<span class="command">abbr</span> <span class="argument">--show</span>
<span class="command">abbr</span> <span class="argument">--list</span>

\sectionでセクション名はa#idとして、セクションタイトルはh1の本文として表示されている。 \sectionでセクション名とセクションタイトルを別名にしてしまえばmanでabbrabbrと表示されるバグは回避出来るが、今度はHTMLが正しく表示されない。

マニュアル生成の実体

マニュアル生成はこのスクリプトで行っており、通常のDoxygenから、かなりカスタマイズしたものになっている。 fish-shell/build_documentation.sh at master · fish-shell/fish-shell · GitHub

マニュアル生成の部分についてざっくりまとめると

  1. tmpディレクトリを作成
  2. 1で作成したディレクトリのなかに、doc_srcのtxtを一部コメントをくっつけて、.doxygen拡張子にリネームしてコピー(このディレクトリはマニュアルを生成するためだけのファイルしか置かれていない)
  3. 2でdoxygenを実行(実行するときはマニュアル生成のための設定ファイルDoxyfile.helpを読み込む)
  4. doxygenで生成したマニュアルについて一部文言を修正

というふうになっている。2と4でちょっとしたシェル芸が使われていて、単にtxtファイルを修正したら影響範囲がでかすぎるけど、ここのシェル芸を弄ればうまい具合にバグを回避できそうなので、2と4の修正でバグ回避を試みた。

(そもそもDoxygenで\sectionでセクション名とセクションタイトルが同じ名前だとうまく出力されないことは確認できているので、Doxygen自体を修正することも考えたけどC++わからないし時間がかかりすぎるからやめた)

シェル芸の修正

あとはsedと正規表現の領域。Gistにまとめたけど、\sectionのセクション名とセクションタイトルが同じにならないようにtmpのテキストファイルを修正しつつ、下の例でand.1.organd.1のように書き換えるシェル芸を書いた。

改行コードはzオプションで書かないといけないとか、そもそもオリジナルのsedシェル芸(コマンド名を太字にする "s/^$CMD_NAME * \\\- \([^ ]*\) /\\\fB\1\\\fP -/")が失敗しているとか、-e-zは組み合わせることができないとか、"もちゃんと消さないといけないとかいろいろ工夫してシェル芸を書いた。工夫になっているかどうか知らないけど。 gist.github.com

なお、修正してもらうのに時間がかかりそうだしIssue自体あんまり捌けてなさそうだから、Issueは投げてない。あれこれ考えつつアズールレーンをプレイしながらコードを書いていた。

コメントレビュー

Macだとsedの-zオプションが使えないということを言われた。たしかにそうだ。でも-zを使わないで改行を置換するにはどうしたらいいか。というところをあれこれいろいろ考えていたら、Perlに行き着いた

まとめ

Doxygenの問題なのかfish shellの問題なのかよく分からなくて若干苦戦した。関数のヘッダーの情報をDoxygenでHTML表示するのはかなり前にやったことがあるけど、man pageを生成するのは初めてだったしやり方も書式もよく分からなかったのが原因だと思う。

この修正でさえも良い修正とは思っていない。Issueも投げておくべきだったかなーとは思う。manの書き方は少しだけ理解したし、ソースコードを1行1行読んで何をやっているか把握して文章にするのはすごく大事だと思う。

CODE_OF_CONDUCT apex words

CODE_OF_CONDUCT apex words

apex/CODE_OF_CONDUCT.md at master · apex/apex · GitHub

の単語。

単語 内容
205 a a
65 in
47 on
44 or または
43 an
30 at 〜で
25 of
23 the その
20 and そして
17 to
15 be 〜する
14 is
13 project プロジェクト
8 as として
8 for ために
7 other その他
6 behavior 動作
6 code コード
6 conduct 行動
6 maintain 維持する
5 community コミュニティ
5 contributor 投稿者
5 maintainers メンテナー
5 our 我々の
5 we 我々
4 acceptable 許容可能な
4 age 年齢
4 appropriate 適切な
4 by 〜によって
4 may かもしれない
4 that それ
3 are
3 covenant 契約
3 enforce 強制する
3 examples
3 experience 経験
3 include 含める
3 its その
3 sexual 性的
3 this この
3 unacceptable 容認できない
3 using を使用して
3 with 〜と
2 acting 演技
2 address 住所
2 any どれか
2 comments コメント
2 deem 考える
2 edit 編集
2 enforcement 執行
2 environment 環境
2 further さらに
2 harassment 嫌がらせ
2 identity 身元
2 inappropriate 不適切
2 include:

出典は、これ。でも、最後のURLがhttpのまま。

https://www.contributor-covenant.org/

wip golang import package

wip golang import package

解決していない。

import (
    "io"
    "os"
    "os/exec"

    "github.com/mattn/go-isatty"
    "github.com/tj/cobra"

    "github.com/apex/apex/cmd/apex/root"
    doc "github.com/apex/apex/docs"
)

ココで、importしているわけだけど、docがたぶんリモートからダウンロードしたものを見ているからdocsの下を編集しても反映されないんじゃないかと勝手に思い始めている。

https://golang.org/cmd/go/#hdr-Relative_import_paths

memo lsof

memo lsof

FD(ファイルディスクリプタ)の読み方と、TYPEの読み方。だいたい読んだら分かるかも。size/offは

FD – stands for File descriptor and may seen some of the values as:

cwd current working directory
rtd root directory
txt program text (code and data)
mem memory-mapped file

 
Also in FD column numbers like 1u is actual file descriptor and followed by u,r,w of it’s mode as:

r for read access.
w for write access.
u for read and write access.
TYPE – of files and it’s identification.

DIR – Directory
REG – Regular file
CHR – Character special file.
FIFO – First In First Out

size/offについては、manにこんなことが書いてあった

is the size of the file or the file offset in bytes.  A value is displayed in this column only if it is available.  Lsof displays whatever value - size or offset -  is  appropriate
                  for the type of the file and the version of lsof.

memo lsof file descriptor

memo lsof file descriptor

lsofで存在しない(既に消された)ファイルに対してプロセスが動いているかどうか確認できる

こんなことができるのは、Linuxではファイルが使用中でもファイルを消せるから。使用中のファイルを消したら、プロセスだけが残る。

それを確認するためには、lsof(deleted)になっているプロセスでかつ、大きなファイルサイズのファイルにアクセスしようとしていたプロセスをサーチする。

# lsof | grep deleted | sort -k 7 -nr | head とか。

これはlsofでsize/offをhuman-readableにしている。 lsof | grep /var* | numfmt --field=8 --to=iec | head

なお、dfとかduとかで分かるのは論理ボリュームの使用量であるため、物理ディスクの使用量を知りたい場合は別の方法が必要になる。(lsblkfdisk -lでは分からなかった)

file descriptorは、プログラムがアクセスするファイルなどの識別子