Skip to content

Commit 563f346

Browse files
fix: add SOCI snapshotter hash check (#985)
Issue #, if available: Split from #969 *Description of changes:* This change fixes SOCI installation to verify pull artifacts matches hardcoded hashchecks. *Testing done:* Updated unit tests to check for new hashcheck. - [x] I've reviewed the guidance in CONTRIBUTING.md #### License Acceptance By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. Signed-off-by: Austin Vazquez <[email protected]>
1 parent 06b9027 commit 563f346

File tree

2 files changed

+44
-13
lines changed

2 files changed

+44
-13
lines changed

pkg/config/lima_config_applier.go

+18-3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import (
1919

2020
const (
2121
sociVersion = "0.5.0"
22+
sociAMD64Sha256Sum = "768f73dbd2c772386df1d12d0a371e9cbcefebea4856623335a2e8ea5170691c"
23+
sociARM64Sha256Sum = "9238e00426ec67a725d511e232476248f2379d66a4ccab224a50ad4c56a0292e"
2224
snapshotterProvisioningScriptHeader = "# snapshotter provisioning script"
2325
sociInstallationProvisioningScriptHeader = snapshotterProvisioningScriptHeader + ": soci"
2426
sociFileNameFormat = "soci-snapshotter-%s-linux-%s.tar.gz"
@@ -29,9 +31,17 @@ const (
2931
if [ ! -f /usr/local/bin/soci ]; then
3032
# download soci
3133
set -e
34+
35+
# pull release tarball
36+
release_tarball="%s"
3237
curl --retry 2 --retry-max-time 120 -OL "%s"
38+
39+
# validate shasum
40+
(sha256sum "${release_tarball}" | cut -d ' ' -f 1 | grep -xq "^%s$") || \
41+
(echo "error: shasum verification failed for SOCI release tarball" && rm -f "${release_tarball}" && exit 1)
42+
3343
# move to usr/local/bin
34-
tar -C /usr/local/bin -xvf %s ./soci ./soci-snapshotter-grpc
44+
tar -C /usr/local/bin -xvf ${release_tarball} ./soci ./soci-snapshotter-grpc
3545
3646
# install as a systemd service
3747
curl --retry 2 --retry-max-time 120 -OL "%s"
@@ -235,11 +245,16 @@ func (lca *limaConfigApplier) provisionSnapshotters(limaCfg *limayaml.LimaYAML)
235245
}
236246

237247
func (lca *limaConfigApplier) provisionSociSnapshotter(limaCfg *limayaml.LimaYAML) {
238-
sociFileName := fmt.Sprintf(sociFileNameFormat, sociVersion, lca.systemDeps.Arch())
248+
arch := lca.systemDeps.Arch()
249+
sociFileName := fmt.Sprintf(sociFileNameFormat, sociVersion, arch)
239250
sociDownloadURL := fmt.Sprintf(sociDownloadURLFormat, sociVersion, sociFileName)
251+
sociSha256Sum := sociAMD64Sha256Sum
252+
if arch == "arm64" {
253+
sociSha256Sum = sociARM64Sha256Sum
254+
}
240255
sociServiceDownloadURL := fmt.Sprintf(sociServiceDownloadURLFormat, sociVersion)
241256
sociInstallationScript := fmt.Sprintf(sociInstallationScriptFormat, sociInstallationProvisioningScriptHeader,
242-
sociDownloadURL, sociFileName, sociServiceDownloadURL)
257+
sociFileName, sociDownloadURL, sociSha256Sum, sociServiceDownloadURL)
243258
limaCfg.Provision = append(limaCfg.Provision, limayaml.Provision{
244259
Mode: "system",
245260
Script: sociInstallationScript,

pkg/config/lima_config_applier_darwin_test.go

+26-10
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package config
88

99
import (
1010
"fmt"
11+
"runtime"
1112
"testing"
1213

1314
"github.com/golang/mock/gomock"
@@ -105,16 +106,21 @@ func TestDiskLimaConfigApplier_Apply(t *testing.T) {
105106
require.NoError(t, err)
106107
cmd.EXPECT().Output().Return([]byte("13.0.0"), nil)
107108
creator.EXPECT().Create("sw_vers", "-productVersion").Return(cmd)
108-
deps.EXPECT().Arch()
109+
deps.EXPECT().Arch().Return(runtime.GOARCH)
109110
},
110111
postRunCheck: func(t *testing.T, fs afero.Fs) {
111-
sociFileName := fmt.Sprintf(sociFileNameFormat, sociVersion, "")
112+
sociFileName := fmt.Sprintf(sociFileNameFormat, sociVersion, runtime.GOARCH)
112113
sociDownloadURL := fmt.Sprintf(sociDownloadURLFormat, sociVersion, sociFileName)
114+
sociShaSum := sociAMD64Sha256Sum
115+
if runtime.GOARCH == "arm64" {
116+
sociShaSum = sociARM64Sha256Sum
117+
}
113118
sociServiceDownloadURL := fmt.Sprintf(sociServiceDownloadURLFormat, sociVersion)
114119
sociInstallationScript := fmt.Sprintf(sociInstallationScriptFormat,
115120
sociInstallationProvisioningScriptHeader,
116-
sociDownloadURL,
117121
sociFileName,
122+
sociDownloadURL,
123+
sociShaSum,
118124
sociServiceDownloadURL)
119125

120126
buf, err := afero.ReadFile(fs, "/override.yaml")
@@ -257,16 +263,21 @@ func TestDiskLimaConfigApplier_Apply(t *testing.T) {
257263
require.NoError(t, err)
258264
cmd.EXPECT().Output().Return([]byte("13.0.0"), nil)
259265
creator.EXPECT().Create("sw_vers", "-productVersion").Return(cmd)
260-
deps.EXPECT().Arch()
266+
deps.EXPECT().Arch().Return(runtime.GOARCH)
261267
},
262268
postRunCheck: func(t *testing.T, fs afero.Fs) {
263-
sociFileName := fmt.Sprintf(sociFileNameFormat, sociVersion, "")
269+
sociFileName := fmt.Sprintf(sociFileNameFormat, sociVersion, runtime.GOARCH)
264270
sociDownloadURL := fmt.Sprintf(sociDownloadURLFormat, sociVersion, sociFileName)
271+
sociShaSum := sociAMD64Sha256Sum
272+
if runtime.GOARCH == "arm64" {
273+
sociShaSum = sociARM64Sha256Sum
274+
}
265275
sociServiceDownloadURL := fmt.Sprintf(sociServiceDownloadURLFormat, sociVersion)
266276
sociInstallationScript := fmt.Sprintf(sociInstallationScriptFormat,
267277
sociInstallationProvisioningScriptHeader,
268-
sociDownloadURL,
269278
sociFileName,
279+
sociDownloadURL,
280+
sociShaSum,
270281
sociServiceDownloadURL)
271282

272283
buf, err := afero.ReadFile(fs, "/override.yaml")
@@ -316,16 +327,21 @@ func TestDiskLimaConfigApplier_Apply(t *testing.T) {
316327
require.NoError(t, err)
317328
cmd.EXPECT().Output().Return([]byte("13.0.0"), nil)
318329
creator.EXPECT().Create("sw_vers", "-productVersion").Return(cmd)
319-
deps.EXPECT().Arch()
330+
deps.EXPECT().Arch().Return(runtime.GOARCH)
320331
},
321332
postRunCheck: func(t *testing.T, fs afero.Fs) {
322-
sociFileName := fmt.Sprintf(sociFileNameFormat, sociVersion, "")
333+
sociFileName := fmt.Sprintf(sociFileNameFormat, sociVersion, runtime.GOARCH)
323334
sociDownloadURL := fmt.Sprintf(sociDownloadURLFormat, sociVersion, sociFileName)
335+
sociShaSum := sociAMD64Sha256Sum
336+
if runtime.GOARCH == "arm64" {
337+
sociShaSum = sociARM64Sha256Sum
338+
}
324339
sociServiceDownloadURL := fmt.Sprintf(sociServiceDownloadURLFormat, sociVersion)
325340
sociInstallationScript := fmt.Sprintf(sociInstallationScriptFormat,
326341
sociInstallationProvisioningScriptHeader,
327-
sociDownloadURL,
328342
sociFileName,
343+
sociDownloadURL,
344+
sociShaSum,
329345
sociServiceDownloadURL)
330346

331347
buf, err := afero.ReadFile(fs, "/override.yaml")
@@ -392,7 +408,7 @@ func TestDiskLimaConfigApplier_Apply(t *testing.T) {
392408
require.NoError(t, err)
393409
cmd.EXPECT().Output().Return([]byte("13.0.0"), nil)
394410
creator.EXPECT().Create("sw_vers", "-productVersion").Return(cmd)
395-
deps.EXPECT().Arch().Return("arm64")
411+
deps.EXPECT().Arch().Return(runtime.GOARCH)
396412
},
397413
postRunCheck: func(t *testing.T, fs afero.Fs) {
398414
buf, err := afero.ReadFile(fs, "/override.yaml")

0 commit comments

Comments
 (0)