コピペコードで快適生活

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

git submodule

# submoduleの追加
git submodule add git@github.com:kinosuke01/xxxxx.git xxxxx

# submoduleの状態確認
# どのコミットハッシュのバージョンが
# submoduleとして登録されているかを確認できる
git submodule

# submodule内でコミットを積んだ場合は、
# 親リポジトリが参照するコミットハッシュも更新する必要がある
git submodule
git add .
git commit -m "update submodule"

# submodule内でブランチ変えたりコミットを積んでる状態から
# 親リポジトリがもともと参照しているバージョンに切り戻す
git submodule update

# はじめて親リポジトリをcloneしたときは
# submoduleのinitとupdateを同時に行う
git submodule update -i

links

wgetがリダイレクトしまくってエラーする

wgetがリダイレクトしまくってエラーする現象に出くわしたのでメモ。

自分の環境

golang:1.7

どんなエラーでてる?

root@7453a9101b5e:/var/app# wget --max-redirect=1 https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar
converted 'https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar' (ANSI_X3.4-1968) -> 'https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar' (UTF-8)
--2021-12-02 07:31:42--  https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar
Resolving github.com (github.com)... 52.69.186.44
Connecting to github.com (github.com)|52.69.186.44|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment%3B%20filename%3Dwp-cli-2.5.0.phar&response-content-type=application%2Foctet-stream [following]
converted 'https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment%3B%20filename%3Dwp-cli-2.5.0.phar&response-content-type=application%2Foctet-stream' (ANSI_X3.4-1968) -> 'https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A/20211202/us-east-1/s3/aws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment; filename=wp-cli-2.5.0.phar&response-content-type=application/octet-stream' (UTF-8)
--2021-12-02 07:31:42--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A/20211202/us-east-1/s3/aws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment;%20filename=wp-cli-2.5.0.phar&response-content-type=application/octet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.108.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 401 Unauthorized

Username/Password Authentication Failed.
--2021-12-02 07:31:42--  https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar
Connecting to github.com (github.com)|52.69.186.44|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment%3B%20filename%3Dwp-cli-2.5.0.phar&response-content-type=application%2Foctet-stream [following]
converted 'https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment%3B%20filename%3Dwp-cli-2.5.0.phar&response-content-type=application%2Foctet-stream' (ANSI_X3.4-1968) -> 'https://objects.githubusercontent.com/github-production-release-asset-2e65be/2360755/ae27af00-b8c0-11eb-8a65-ec58a9e54400?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A/20211202/us-east-1/s3/aws4_request&X-Amz-Date=20211202T073059Z&X-Amz-Expires=300&X-Amz-Signature=86171b4129a9e57e04e99ccfa77650440c906a3adc2831ed086b4495920c95df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=2360755&response-content-disposition=attachment; filename=wp-cli-2.5.0.phar&response-content-type=application/octet-stream' (UTF-8)
1 redirections exceeded.

似たような現象に出くわしている人がいた

https://github.com/hashicorp/packer/issues/2392

For me it was local encoding issue try wget --local-encoding=UTF-8

だって。

実際やってみた

wget --local-encoding=UTF-8 https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar

動いた!

どういうこと?

  • wgetはIRI (ユニコード対応版URI) をサポートしている。
  • IRIのリモートのエンコーディングUTF-8 、ローカルのエンコーディングANSI_X3.4-1968 となっていた。
  • サーバから受け取ったリダイレクト先のアドレスを ANSI_X3.4-1968 から、UTF-8 に変換しようとしていた。
  • この変換で正しくないアドレスが生成され、アクセスしてもエラーする状態となっていた。

ということかな。間違ってるかもしれないけど。

wgetのオプションについて

--no-iri IRI サポートを使わない
--local-encoding=ENC 指定した ENC を IRI のローカルエンコーディングにする
--remote-encoding=ENC 指定した ENC をデフォルトのリモートエンコーディングにする

コマンドで証明書の中身を確認する

ドメインから確認する

openssl s_client -connect example.com:443 -showcerts

サーバ証明書の中身を見る

openssl x509 -text -noout -in ***.crt

※crtファイルには中間証明書が含まれる場合もある。

秘密鍵の中身を見る

openssl rsa -text -noout -in ***.key

CSRの中身を見る

openssl req -text -noout -in ***.csr

p12ファイルからサーバ証明書を取り出す

openssl pkcs12 -in xxx.p12 -nodes -clcerts -out xxx.pem -password pass:xxxxx

p12ファイルの中身を確認する

keytool -list -v -keystore xxx.p12 -storetype PKCS12 -storepass xxxxx

link

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 で確認できる
    • docker build で 手元にイメージを作成できる
    • docker pull で手元にイメージをDLできる
    • docker rmi [ImageID] でイメージを削除できる
      • イメージに紐づくコンテナがある場合は削除できない
      • 先に紐づくコンテナをstopしてrmする必要がある
    • イメージ情報の取得
      • docker inspect [リポジトリ名]:[タグ]
      • CMDの確認: docker inspect [リポジトリ名]:[タグ] --format='{{.Config.Cmd}}'
  • コンテナ
    • docker ps -a で一覧確認できる
    • imageから作成される
      • docker run --name [コンテナ名] -d [イメージID] /sbin/init
      • /sbin/init をつけないともともと設定してあるCMDが実行される
        • 似てるもの
          • docker-compose run --rm php /bin/bash -c ""
            • イメージからコンテナ作ってシェル実行してコンテナ消す
    • コンテナからimageを作ることもできる
      • まず止める
        • docker stop [コンテナ名]
      • イメージを作成する
        • docker commit [コンテナ名] [リポジトリ名]:[タグ]
    • コンテナの削除
      • 止める: docker stop [コンテナ名]
      • 消す: docker rm [コンテナ名]