オープンソースを読む Dockerfile https://github.com/docker-library/mysql
Stdinということは、パイプでも使えるのか?
引数と標準入力両方取れる。
echo "arg1" "arg2" | log "INFO"
↓
2024-01-29 12:51:44+09:00 [INFO] [Entrypoint]: arg1 arg2
mysql_error <<-'EOF'
Database is uninitialized and password option is not specified
You need to specify one of the following as an environment variable:
- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
EOF
--system アプリを動かすためだけのユーザ。ログインできない。
-e | 何かのエラーが発生した時点で、処理を中断
-u | 未定義の変数を使ったらエラー
-x | 実行したコマンドを標準エラーに出力
Arm and 違い
.dockerignore
そんなのあるの
イメージ内で得られるユーザとグループは UID/GID に依存しないため、イメージの構築に関係なく次の UID/GID が割り当てられます。そのため、これが問題になるのであれば、UID/GID を明確に割り当ててください。
TTY やシグナル転送を使わないつもりであれば、 sudo のインストールや使用を避けたほうが良いでしょう。使うことで引き起こされる問題の解決は大変だからです。もし、どうしても sudo のような機能が必要であれば(例:root としてデーモンを初期化するが、実行は root 以外で行いたい時)、 「 gosu 」を使うことができます。
鍵に対する署名とファイルに対する署名
リダイレクトを前に書いても良いのか。
Gpgについて詳しい
コマンドが正しく実行されるかの確認のようだ
set -eo pipefail
shopt -s nullglob
#!/bin/bash
ls *.TXT
sts=$?
echo;echo "status [$sts]"
echo '=> shopt -s nullglob'
shopt -s nullglob
ls *.TXT
sts=$?
echo;echo "status [$sts]"
ls: '*.TXT' にアクセスできません: そのようなファイルやディレクトリはありません
status [2]
=> shopt -s nullglob
a.sh dist node_modules package.json pnpm-lock.yaml src tsconfig.json
status [0]
ワイルドカードの置き換えを強制するもののようだ
ヒットするものが無い場合には 後ろがnullで展開されて lsになっているんだと思う、
#!/bin/bash
echo *.TXT
echo '=> shopt -s nullglob'
shopt -s nullglob
echo *.TXT
*.TXT
=> shopt -s nullglob
アスタリスクをとりあえず展開させるという意味合いだとおもう。
#!/bin/bash
function a() {
local a=$(( ${#FUNCNAME[@]} - 1 ))
echo $a
echo ${FUNCNAME[4]}
echo ${FUNCNAME[3]}
echo ${FUNCNAME[2]}
echo ${FUNCNAME[1]}
echo ${FUNCNAME[0]}
}
function b() {
a
}
function c() {
b
}
c
main
c
b
a
a.shをsourceしたb.shでは以下のようになる
main
source
c
b
a
if ! _is_sourced; then
_main "$@"
fi
batsのテストでもこれは使えるんじゃないか?
# check to see if this file is being run or sourced from another script
_is_sourced() {
# https://unix.stackexchange.com/a/215279
[ "${#FUNCNAME[@]}" -ge 2 ] \
&& [ "${FUNCNAME[0]}" = '_is_sourced' ] \
&& [ "${FUNCNAME[1]}" = 'source' ]
}
cat <<-EOF
[client]
password="${MYSQL_ROOT_PASSWORD}"
EOF
使用されたバイナリログファイルを追跡するために、mysqld はバイナリログファイルの名前を含むバイナリログインデックスファイルも作成します。 デフォルトでは、これはバイナリログファイルと同じベース名を持ち、拡張子は'.index'です。 バイナリログインデックスファイルの名前は、--log-bin-index[=file_name] オプションを使用して変更できます。 mysqld の動作中にこのファイルを手動で変更しないでください。変更すると、mysqld を混乱させることになります。