コピペコードで快適生活

明日使えるソースを自分のために

plantumlをcliで使う

やりたいこと

PlantUMLでUML図をコード管理したい。 cliでコードからSVGに変換できるようにする。

手順

jdkをインストールする

graphvizをインストールする

brew install graphviz

plantuml.jarをダウンロードする

ここからDLして、適当な場所に配置する。 https://plantuml.com/ja/download

シェルコマンド作る

パスの通ったところにシェルコマンドを配置する。

以下のような感じで作る。

#!/bin/sh
java -jar ~/bin/plantuml.jar -charset UTF-8 "$@"

svgを出力する

plantuml -tsvg xxx.puml

で、xxx.svgが出力される

go buildメモ

コマンド

# myappという名前で実行ファイルをビルドする
# 環境変数を指定しないと、ビルドする環境向けのバイナリが作成される
go build -o myapp main.go

# 他の環境向けのバイナリを作成するときは環境変数で指定をする
env GOOS=linux GOARCH=amd64 go build -o myapp main.go

GOOSやGOARCHで指定できる値は下記を参照する。 https://golang.org/doc/install/source#environment

もしくは下記コマンドで確認できる

go tool dist list

手元の環境は以下コマンドで確認できる

go version
# go version go1.17 darwin/amd64

CPUのアーキテクチャ

だいたい arch コマンドで確認できる。

Dockerのイメージとコンテナ

イメージ作ったり、イメージからコンテナ作ったり、コンテナからイメージ作ったりのコマンドメモ。

イメージ

# 手元にあるイメージを確認する
# イメージは、リポジトリ&タグの組み合わせで一意になる
docker images

# Dockerfileを元にイメージを作成する
docker build .

# イメージ名指定&キャッシュを使わずにイメージ作成
docker build . --no-cache -t [イメージ名]

# 手元にイメージをDLする   
docker pull [リポジトリURL]

# イメージを削除する
# イメージに紐づくコンテナがある場合は削除できない
# 先に紐づくコンテナをstopしてrmする必要がある
docker rmi [ImageID]

# イメージ情報の取得
docker inspect [リポジトリ名]:[タグ]

# CMDの確認
docker inspect [リポジトリ名]:[タグ] --format='{{.Config.Cmd}}'

コンテナ

# コンテナの一覧を確認
docker ps -a

# イメージからコンテナを作成する
# /sbin/init をつけないともともと設定してあるCMDが実行される
docker run --name [コンテナ名] -d [イメージID] /sbin/init

# イメージからコンテナを作って起動状態を維持する
# i: 標準入力(STDIN)を開いたままにする
# t: 擬似ttyに接続する。ディスプレイ(STDOUT)をつなぐイメージ
# d: デタッチモード バックグラウンドでコンテナ起動
docker run -itd --name [コンテナ名] -d [イメージID] /bin/sh

# docker-composeではこんな感じ
# イメージからコンテナ作ってシェル実行してコンテナ消す
docker-compose run --rm php /bin/bash -c ""

# コンテナからイメージを作る
# まず止めて
docker stop [コンテナ名]
# イメージ作る
docker commit [コンテナ名] [リポジトリ名]:[タグ]

# コンテナ削除
# まず止めて
docker stop [コンテナ名]
# 消す
docker rm [コンテナ名]

CentOSでルート証明書はどのように配置されているか

  • ca-certificates
    • MozillaFoundationが選定したCA証明書のセット
    • yum install ca-certificates でインストールされる
    • インストール場所は、rpm -Vv ca-certificates で確認できる
    • ルート証明書/usr/share/pki/ca-trust-source 直下に配置される。
    • ca-certificatesをupgradeすることで最新の証明書に更新される
  • ルート証明書を自分で追加/削除する
  • update-ca-trustコマンド
    • ca-certificates に含まれるコマンド
    • ca-certificatesに元から含まれる証明書と、自身で配置した証明書をバンドルして出力する
    • 出力先は /etc/pki/ca-trust/extracted 以下
    • 基本的にアプリケーションは、これで出力された証明書を参照する。
      • Rubyはこれで確認できる OpenSSL::X509::DEFAULT_CERT_FILE
      • 後方互換
        • かつて(CentOS6以前?)は以下にバンドルされた証明書があった
          • /etc/pki/tls/cert.pem
          • /etc/pki/tls/certs/ca-bundle.crt
          • /etc/pki/tls/certs/ca-bundle.trust.crt
        • CentOS7以降ではこれらのパスは残されていて、/etc/pki/ca-trust/extracted/* へのシンボリックリンクとなっている
          • かつての配置場所を参照するアプリケーションとの互換性のため
            • /etc/pki/tls/cert.pem -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
            • /etc/pki/tls/certs/ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
            • /etc/pki/tls/certs/ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
        • LINKS

FTPのメモ

FTP

  • 2つのコネクションがある
    • コントロールコネクション: コマンドの制御用
    • データコネクション: データの送受信
  • anonymousモード
    • データのダウンロード専用
    • ログイン情報なしで利用できる
  • 転送モード
    • アスキーモード: テキスト送受信用。改行コードと文字コードが自動で変換される(いまは利用しない)
    • バイナリモード: なんでもOK
  • 接続モード
    • アクティブモード
      • データコネクション
        • サーバからクライアントに通信して確立する
        • ポート番号として20番を利用する
    • パッシブモード
      • データコネクション
        • クライアントからサーバに接続して確立する
        • ポート番号は毎回ランダムに決まる
          • ポート番号はコントロールコネクションで通知される
      • 普通はこっち使う
    • 共通

FTPS

  • SSL/TLSを利用してFTPで暗号化通信を実現するプロトコル
  • 2つの通信モード
    • Explict(明示的)モード
      • 21ポートで通信する
      • 最初は平文通信
      • クライアントのAUTHコマンド実行から通信が暗号化される
    • Implicit(暗黙的)モード
      • FTPとは別のポート(989or990)で最初から暗号化通信を行う

links

tcpdumpの基本的な使い方

macでのインストール

brew install tcpdump

よく使いそうなコマンド

# パケットの中身をアスキー文字で出力する
sudo tcpdump -A

# インターフェース指定
sudo tcpdump -i eth0

# ファイル出力
sudo tcpdump -w ~/tcp.log

# 送信元IP指定
sudo tcpdump src host 192.168.0.10

# 送信先IP指定
sudo tcpdump dst host 8.8.8.8

# 送信元port指定
sudo tcpdump src port 80

# 送信先port指定
sudo tcpdump dst port 443

# andでIP,portの組み合わせ指定
sudo tcpdump dst port 53 and dst host 8.8.8.8

RSpecで既存のクラスをモックに差し替える

本来はDependencyInjectionでやるべきかもだけど。 そうもいかないケースもあるわけで。

# 既存クラス
let(:api_client) { ::MyApp::ApiClient }
let(:api_response) { double('api_response', status: 200) }

# post_xxxメソッドを上書きして、api_responseを返す
allow(api_client).to receive(:post_xxx).and_return(api_response)

# post_xxxメソッドを上書きして、例外をraiseする
allow(api_client).to receive(:post_xxx).and_raise(::MyApp::MyApp::BadRequest)