Skip to content

Commit 3bda474

Browse files
authored
Squash merge OR #64 fix Issue #17 チェックサムファイルの更新スクリプト
* feat: チェックサム(ハッシュ値)更新スクリプトの実装 * feat: CI の lint チェックにチェックサムファイルの確認を追加 * feat: Dev 用のチェックサム確認スクリプト実装 * feat: Dev 用のコマンドエイリアスにチェックサムの更新と照合追加 * chore: チェックサムファイルの更新と sig ファイルの削除 * fix: Busybox の sha512sum はロングオプションを持っていないのでショートに * fix: Docker Hub automated build error - coreutils が抜けていました close #17
1 parent def87e4 commit 3bda474

8 files changed

+198
-14
lines changed

.devcontainer/postCreateCommand.sh

+4
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,17 @@ PATH_DIR_ROOT_REPO="$(dirname "$(cd "$(dirname "$0")" && pwd)")"
88
PATH_FILE_WELCOME="${PATH_DIR_ROOT_REPO}/.devcontainer/welcome_msg.sh"
99
PATH_FILE_LINT="${PATH_DIR_ROOT_REPO}/.github/run-lint.sh"
1010
PATH_FILE_TEST="${PATH_DIR_ROOT_REPO}/.github/run-test.sh"
11+
PATH_FILE_UPDATE_HASH="${PATH_DIR_ROOT_REPO}/.github/update-checksum.sh"
12+
PATH_FILE_VERIFY_HASH="${PATH_DIR_ROOT_REPO}/.github/verify-checksum.sh"
1113

1214
# カレント・ユーザの .bashrc に追記
1315
{
1416
# コマンドのエイリアス
1517
echo "alias welcome='${PATH_FILE_WELCOME}'"
1618
echo "alias run-lint='${PATH_FILE_LINT}'"
1719
echo "alias run-test='${PATH_FILE_TEST}'"
20+
echo "alias update-checksum='${PATH_FILE_UPDATE_HASH}'"
21+
echo "alias verify-checksum='${PATH_FILE_VERIFY_HASH}'"
1822

1923
# ウェルカム・メッセージの表示
2024
echo "$PATH_FILE_WELCOME"

.devcontainer/welcome_msg.sh

+8-5
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@ cat <<HEREDOC
2121
Alt + Shift + F
2222
- このメッセージの再表示
2323
$ welcome
24+
- チェックサムファイルの更新
25+
$ update-checksum
2426
- テストの実行
25-
- 構文チェック/Lint の実行 ... shfmt, shellcheck が実行されます
26-
$ run-lint
27-
- ユニットテストの実行 ... shellspec が実行されます
28-
$ run-test
29-
27+
構文チェック/Lint の実行 ... shfmt, shellcheck が実行されます
28+
$ run-lint
29+
ユニットテストの実行 ... shellspec が実行されます
30+
$ run-test
31+
チェックサムファイルのハッシュ値確認
32+
$ verify-checksum
3033
HEREDOC

.github/run-lint.sh

+22-4
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@
66
# -----------------------------------------------------------------------------
77
# Constants
88
# -----------------------------------------------------------------------------
9+
SUCCESS=0
10+
FAILURE=1
11+
NAME_FILE_CHECKSUM='checksum.sha512'
12+
913
PATH_DIR_REPO="$(dirname "$(cd "$(dirname "$0")" && pwd)")"
1014
PATH_DIR_BIN="${PATH_DIR_REPO}/bin"
1115
PATH_DIR_RETURN="$(cd . && pwd)"
12-
SUCCESS=0
13-
FAILURE=1
16+
PATH_FILE_CHECKSUM="${PATH_DIR_BIN}/${NAME_FILE_CHECKSUM}"
1417

1518
# 拡張子のないスクリプトファイル一覧(テスト対象リスト)
1619
LIST_SCRIPT_NO_EXT="archive check dec enc keygen sign verify checkkeylength dearchive"
@@ -122,15 +125,30 @@ cd "$PATH_DIR_REPO" || {
122125

123126
exit $FAILURE
124127
}
128+
trap 'cd "$PATH_DIR_RETURN"' 0
125129

126130
echo '-------------------------------------------------------------------------------'
127131
echo ' Running linters'
128132
echo '-------------------------------------------------------------------------------'
129133
runShfmt
130134
runShellCheck
131135

132-
cd "$PATH_DIR_RETURN" || {
133-
echo >&2 "Failed to change dir to: ${PATH_DIR_RETURN}"
136+
echo '-------------------------------------------------------------------------------'
137+
echo ' Verifying Checksum File'
138+
echo '-------------------------------------------------------------------------------'
139+
140+
printf "%s" '- Checksum ... '
141+
142+
cd "$PATH_DIR_BIN" || {
143+
echo >&2 "Failed to change dir to: ${PATH_DIR_BIN}"
144+
145+
exit $FAILURE
146+
}
147+
148+
result=$(sha512sum -c "$PATH_FILE_CHECKSUM") || {
149+
echo >&2 "$result"
150+
echo >&2 "Filed to verify checksum."
134151

135152
exit $FAILURE
136153
}
154+
echo 'OK'

.github/update-checksum.sh

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#!/bin/sh
2+
# =============================================================================
3+
# Update CheckSUM
4+
# =============================================================================
5+
# このスクリプトは bin ディレクトリの各コマンドの SHA512 ハッシュの値を checksum.sha512
6+
# に出力するスクリプトです。署名はされません。
7+
8+
# -----------------------------------------------------------------------------
9+
# Constants
10+
# -----------------------------------------------------------------------------
11+
SUCCESS=0
12+
FAILURE=1
13+
LIST_SCRIPT_BIN="archive check dec enc keygen sign verify checkkeylength dearchive"
14+
NAME_FILE_CHECKSUM="checksum.sha512"
15+
16+
PATH_DIR_REPO="$(dirname "$(cd "$(dirname "$0")" && pwd)")"
17+
PATH_DIR_RETURN="$(cd . && pwd)"
18+
PATH_DIR_BIN="${PATH_DIR_REPO}/bin"
19+
PATH_FILE_CHECKSUM="${PATH_DIR_BIN}/${NAME_FILE_CHECKSUM}"
20+
21+
# -----------------------------------------------------------------------------
22+
# Setup
23+
# -----------------------------------------------------------------------------
24+
cd "$PATH_DIR_BIN" || {
25+
echo >&2 "ディレクトリの移動に失敗しました。bin ディレクトリに移動できません。"
26+
27+
exit $FAILURE
28+
}
29+
trap 'cd "$PATH_DIR_RETURN"' 0
30+
31+
# -----------------------------------------------------------------------------
32+
# Function
33+
# -----------------------------------------------------------------------------
34+
# appendChecksum は LIST_SCRIPT_BIN
35+
appendChecksum() {
36+
# shellcheck disable=SC2086
37+
set -- $LIST_SCRIPT_BIN
38+
39+
# LIST_SCRIPT_BIN のループごとにチェックサムを追記
40+
while [ "${1:+none}" ]; do
41+
path_file_target="${1}"
42+
43+
if [ ! -r "$path_file_target" ]; then
44+
echo >&2 "圧縮&暗号化したいファイル ${path_file_target} が見つかりません。"
45+
46+
return $FAILURE
47+
fi
48+
49+
# ハッシュ値を取得
50+
hashCurrent="$(openssl sha512 "$path_file_target" 2>&1)" || {
51+
echo >&2 "ファイルのハッシュ値取得に失敗しました。ファイル: ${path_file_target}"
52+
echo >&2 "$hashCurrent"
53+
54+
return $FAILURE
55+
}
56+
57+
# 更新(追記)
58+
echo "$hashCurrent" >>"$PATH_FILE_CHECKSUM"
59+
60+
shift
61+
done
62+
63+
return $SUCCESS
64+
}
65+
66+
verifyChecksum() {
67+
result=$(sha512sum -c "$PATH_FILE_CHECKSUM") || {
68+
echo >&2 "$result"
69+
70+
return $FAILURE
71+
}
72+
73+
return $SUCCESS
74+
}
75+
76+
# -----------------------------------------------------------------------------
77+
# Main
78+
# -----------------------------------------------------------------------------
79+
# チェックサムファイルの初期化
80+
cat /dev/null >"$PATH_FILE_CHECKSUM"
81+
82+
# ハッシュ値の更新
83+
printf "%s" "- ハッシュ値を更新します ... "
84+
appendChecksum || {
85+
echo >&2 "* エラー:ハッシュ値の更新に失敗しました。"
86+
87+
exit $FAILURE
88+
}
89+
echo 'OK'
90+
91+
# ハッシュ値の照合
92+
printf "%s" "- ハッシュ値を照合します ... "
93+
verifyChecksum || {
94+
echo >&2 "* エラー:ハッシュ値の照合に失敗しました。"
95+
96+
exit $FAILURE
97+
}
98+
echo 'OK'
99+
100+
echo 'OK: チェックサム用のハッシュ値の更新が完了しました。'

.github/verify-checksum.sh

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/bin/sh
2+
# =============================================================================
3+
# Update CheckSUM
4+
# =============================================================================
5+
# このスクリプトは bin ディレクトリの各コマンドの SHA512 ハッシュの値を checksum.sha512
6+
# に出力するスクリプトです。署名はされません。
7+
8+
# -----------------------------------------------------------------------------
9+
# Constants
10+
# -----------------------------------------------------------------------------
11+
SUCCESS=0
12+
FAILURE=1
13+
NAME_FILE_CHECKSUM="checksum.sha512"
14+
15+
PATH_DIR_REPO="$(dirname "$(cd "$(dirname "$0")" && pwd)")"
16+
PATH_DIR_RETURN="$(cd . && pwd)"
17+
PATH_DIR_BIN="${PATH_DIR_REPO}/bin"
18+
PATH_FILE_CHECKSUM="${PATH_DIR_BIN}/${NAME_FILE_CHECKSUM}"
19+
20+
# -----------------------------------------------------------------------------
21+
# Setup
22+
# -----------------------------------------------------------------------------
23+
cd "$PATH_DIR_BIN" || {
24+
echo >&2 "ディレクトリの移動に失敗しました。bin ディレクトリに移動できません。"
25+
26+
exit $FAILURE
27+
}
28+
trap 'cd "$PATH_DIR_RETURN"' 0
29+
30+
# -----------------------------------------------------------------------------
31+
# Functions
32+
# -----------------------------------------------------------------------------
33+
verifyChecksum() {
34+
result=$(sha512sum -c "$PATH_FILE_CHECKSUM") || {
35+
echo >&2 "$result"
36+
37+
return $FAILURE
38+
}
39+
40+
return $SUCCESS
41+
}
42+
43+
# -----------------------------------------------------------------------------
44+
# Main
45+
# -----------------------------------------------------------------------------
46+
# ハッシュ値の照合
47+
printf "%s" "- ハッシュ値を照合します ... "
48+
verifyChecksum || {
49+
echo >&2 "* エラー:ハッシュ値の照合に失敗しました。"
50+
51+
exit $FAILURE
52+
}
53+
echo 'OK'

Dockerfile

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ FROM alpine:latest AS testbuild
1919
RUN apk add --no-cache \
2020
openssl \
2121
openssh \
22+
coreutils \
2223
ca-certificates && update-ca-certificates
2324

2425
# Install requirements for testing
@@ -47,6 +48,7 @@ FROM alpine
4748
RUN apk add --no-cache \
4849
openssl \
4950
openssh \
51+
coreutils \
5052
ca-certificates && update-ca-certificates
5153

5254
COPY --from=testbuild /app/bin /usr/local/sbin

bin/checksum.sha512

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
SHA512(enc)= 1dbe9385c98b037c504a97eea73968c917bda3242be10b1b5edd0e8e9ea4d0e8c23e0d03d14b5532c530af2c6836336a3f308b62bd5702c2cdd0a23111078ee9
2-
SHA512(dec)= 84b5792acc10b50c5f377c05fa17f8bb5787a8a8530327d8cf56ad725b2af040a3127429660db31e84bce7c1791737e712c6308e99940e243d3ed8376e436d99
3-
SHA512(check)= 52d72637792dc031a316d6d18286d406857062a6c1c0ced4e8b39c1363a40b4172688c0d542dcca2af67a06522c0abb7cd9776d55698b6b8c58beede0572b935
4-
SHA512(sign)= f1079e594aff9c06b4c0d2f5e9839fa2531f9179321e9a70e2679e150b780f7c8fca65b8c821133716f85d9790f092808f98af7481ab008f01a792b53e6746b8
5-
SHA512(verify)= a6f7602fadd1c3b28609a3e0b0ad64f7d65243054fdebf7c53aaa11abf9bbebe1c54b5c5b8250e88e69dd37bab6056f2a641c25cd5d05d63bfa8e4386ef52fb7
1+
SHA512(archive)= fcb4698a5f4f96800ae240dc89cba9357b1cf790580caa32b2e812cd3ff9e86ae78f83ef55052ab55915d8fdf2084d0449bf2de3d194923b679eb7718bb340c2
2+
SHA512(check)= 692552538d1de7ac088028e3e7534cb1cd4bff36414182c9144d0c3007e3b9a6f903deb1a4a998724e6dd2e2b302e29401e6da396ba9e85c8d7b1adfa41530b5
3+
SHA512(dec)= fc008d500df780fbd346546530881a892f8d675ace94acedb27f137d86bf4f340e18089847c541c43593453097d8a73c5b9a750bf869c9f366ebaa85e4c4f2cf
4+
SHA512(enc)= be9026689c4f372eb4a43e73a0da226a40cea0bec3329522ec0b6368c489d9340721a97d88efb9933e6b18b24e097789b651992717313a86e9d28581581ed904
5+
SHA512(keygen)= 19cd976454b9bf76080bfb2ad4c294a1cd5d1fa39956a84e3a8b06e342f5dcb1d107be7df444369b8386c75935dbd497df53b4b5f103db5ec13c937dfbaeee62
6+
SHA512(sign)= 41f0f7561e54b74c077cf9db185f26c578a9684d4392ae167faac0799891407577dc43c279dbaba9ad060cc09c2662e4d6dd62ef05128c6ba493f1e356a59393
7+
SHA512(verify)= eabbf0253650f6acce4a2359fb45cf084997a7108017eaca453da5c157c8d1a04a34abce7dfcb19d13c95f28c7b895d73c79c0fa8c2d5b873d5700a8fb480e6c
8+
SHA512(checkkeylength)= b08b5a0d0cee7a872ed0354251f30228663b386f30b5c08bb6feba2c6cbf71425cdfc8d40f89af85766e63fc404a8917717a342917259fec4f71d3ae1a72b28e
9+
SHA512(dearchive)= ec09979610be4ba119edf38a252fde9367f9a3c4a50027da1635e1268d01e1df5103dd0728b8335b7a751841e7d6ed8cb39be61b2c580dc8e59995f131cdddbb

bin/checksum.sha512.sig

-512 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)