Arch LinuxでFileZillaのパッケージのPKGBUILDを書いてる時、ふとsha512sumsを動的に生成したくなったのでそのためのメモです。
やりたいこと
ネット上にチェックサムがあるのでそれを使用してsource
で取得したファイルを検証したい。
問題点
makepkg
sha512sum関連の確認はsource
の取得前に行うのでsource
にsha512
のファイルを含めてcat
という方法は使えない。
またsha512sums
を生成する関数は存在しない。
解決策
sha512sums
配列の中に無理やりコマンドを入れてネット上のテキストファイルをcurlで取得する。
sha512sums=(
"$(
_url='https://dl2.cdn.filezilla-project.org/client/FileZilla_3.49.1.sha512?h=Is3dK9yMEdrdZ_TqQmoXJA&x=1597380525'
_sum=$(curl -L "${_url}" | grep "FileZilla_${pkgver}_${machine_arch}-linux-gnu.tar.bz2" | awk '{print $1}')
if [[ ! "${?}" = 0 ]] || [[ ! -v "_sum" ]]; then
echo -n "SKIP"
else
echo -n "${_sum}"
fi
)"
)
curl
が異常終了した際にはSKIP
を返して検証をスキップする。
正常終了してしっかりと値を取得できた場合にのみ値を返して検証する。
$ makepke -sf
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1152 100 1152 0 0 1050 0 0:00:01 0:00:01 --:--:-- 1050
==> パッケージを作成: filezilla-bin 3.49.1-1 (2020年08月14日 13時12分01秒)
==> ランタイムの依存関係を確認...
==> ビルドタイムの依存関係を確認...
==> ソースを取得...
-> ダウンロード FileZilla_3.49.1_x86_64-linux-gnu.tar.bz2...
--2020-08-14 13:12:01-- https://dl3.cdn.filezilla-project.org/client/FileZilla_3.49.1_x86_64-linux-gnu.tar.bz2?h=B4YMUwovpvAXnVxTDxxU6w&x=1597378984
CA証明書 '/etc/ssl/certs/ca-certificates.crt' をロードしました
dl3.cdn.filezilla-project.org (dl3.cdn.filezilla-project.org) をDNSに問いあわせています... 2a01:4f8:1c0c:5ed7::1, 195.201.38.126
dl3.cdn.filezilla-project.org (dl3.cdn.filezilla-project.org)|2a01:4f8:1c0c:5ed7::1|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 9768095 (9.3M) [application/octet-stream]
`FileZilla_3.49.1_x86_64-linux-gnu.tar.bz2.part' に保存中
FileZilla_3.49.1_x86_64-linux-g 100%[======================================================>] 9.32M 1.75MB/s 時間 5.8s
2020-08-14 13:12:09 (1.59 MB/s) - `FileZilla_3.49.1_x86_64-linux-gnu.tar.bz2.part' へ保存完了 [9768095/9768095]
==> source で sha512sums ファイルを検証...
FileZilla_3.49.1_x86_64-linux-gnu.tar.bz2 ... 成功
==> ソースを展開...
-> FileZilla_3.49.1_x86_64-linux-gnu.tar.bz2 を bsdtar で展開
==> fakeroot 環境を開始します...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1152 100 1152 0 0 1327 0 --:--:-- --:--:-- --:--:-- 1325
==> package() を開始...
==> インストールを整理...
-> libtool ファイルを削除...
-> 不要なファイルを削除...
-> スタティックライブラリファイルを削除しています...
-> バイナリとライブラリから不要なシンボルを削除...
-> man と info ページを圧縮...
==> パッケージの問題をチェック...
==> パッケージを作成 "filezilla-bin"...
-> .PKGINFO ファイルを生成...
-> .BUILDINFO ファイルを生成...
-> .MTREE ファイルを生成...
-> パッケージの圧縮...
==> fakeroot 環境を終了。
==> 作成完了: filezilla-bin 3.49.1-1 (2020年08月14日 13時12分18秒)
パッケージの作成開始の前の段階でcurlでチェックサムが生成されています。
しっかりと「成功」と表示されて検証されているのがわかります。