mirror of
https://github.com/xcat2/xcat-dep.git
synced 2026-09-12 12:36:23 +00:00
fix(genesis): share copied package verification
This commit is contained in:
+5
-9
@@ -123,8 +123,6 @@ command -v cmp >/dev/null 2>&1 \
|
||||
if [[ -n "$GENESIS_RELEASE" ]]; then
|
||||
command -v dpkg-deb >/dev/null 2>&1 \
|
||||
|| die "dpkg-deb not found. Install: sudo apt-get install dpkg"
|
||||
command -v sha256sum >/dev/null 2>&1 \
|
||||
|| die "sha256sum not found. Install: sudo apt-get install coreutils"
|
||||
GENESIS_CHECKSUMS=$(mktemp "${TMPDIR:-/tmp}/xcat-genesis-checksums.XXXXXX")
|
||||
cp -- "$GENESIS_RELEASE/SHA256SUMS" "$GENESIS_CHECKSUMS"
|
||||
"$GENESIS_VERIFIER" --complete --format deb "$GENESIS_RELEASE"
|
||||
@@ -193,17 +191,15 @@ copy_deb() {
|
||||
copy_genesis_deb() {
|
||||
local source="$1"
|
||||
local directory="$2"
|
||||
local name destination relative expected actual
|
||||
local name destination relative
|
||||
name=$(basename "$source")
|
||||
destination="$directory/$name"
|
||||
relative="deb/$name"
|
||||
cp -- "$source" "$destination"
|
||||
expected=$(awk -v path="$relative" '$2 == path { print $1 }' "$GENESIS_CHECKSUMS")
|
||||
[[ -n "$expected" ]] || die "Missing verified checksum for $relative"
|
||||
actual=$(sha256sum "$destination")
|
||||
actual=${actual%% *}
|
||||
[[ "$actual" = "$expected" ]] \
|
||||
|| die "Collected Genesis package checksum mismatch: $destination"
|
||||
"$GENESIS_VERIFIER" \
|
||||
--checksum-file "$GENESIS_CHECKSUMS" \
|
||||
--relative-file "$relative" \
|
||||
--copied-file "$destination"
|
||||
}
|
||||
|
||||
for ver in "${SELECTED_VERS[@]}"; do
|
||||
|
||||
@@ -10,17 +10,44 @@ use lib "$FindBin::Bin/../lib";
|
||||
use XCAT::BuildUtils qw(capture_command require_command);
|
||||
use XCAT::GenesisRelease qw(
|
||||
deb_package_name
|
||||
read_checksum_manifest
|
||||
rpm_package_name
|
||||
validate_complete_release
|
||||
validate_release
|
||||
verify_release_file
|
||||
);
|
||||
|
||||
my $format = 'all';
|
||||
my $complete = 0;
|
||||
my ($checksum_file, $relative_file, $copied_file);
|
||||
GetOptions(
|
||||
'format=s' => \$format,
|
||||
'complete!' => \$complete,
|
||||
'format=s' => \$format,
|
||||
'complete!' => \$complete,
|
||||
'checksum-file=s' => \$checksum_file,
|
||||
'relative-file=s' => \$relative_file,
|
||||
'copied-file=s' => \$copied_file,
|
||||
) or die usage();
|
||||
|
||||
my $copy_mode = grep { defined($_) }
|
||||
($checksum_file, $relative_file, $copied_file);
|
||||
if ($copy_mode) {
|
||||
die usage()
|
||||
unless defined($checksum_file)
|
||||
&& defined($relative_file)
|
||||
&& defined($copied_file)
|
||||
&& !$complete
|
||||
&& $format eq 'all'
|
||||
&& !@ARGV;
|
||||
$checksum_file = abs_path($checksum_file)
|
||||
or die "Cannot resolve checksum file\n";
|
||||
$copied_file = abs_path($copied_file)
|
||||
or die "Cannot resolve copied file\n";
|
||||
my $checksums = read_checksum_manifest($checksum_file);
|
||||
verify_release_file($checksums, $relative_file, $copied_file);
|
||||
print "Verified copied Genesis package: $copied_file\n";
|
||||
exit(0);
|
||||
}
|
||||
|
||||
die usage() unless @ARGV == 1;
|
||||
die "Unsupported verification format: $format\n"
|
||||
unless $format eq 'all' || $format eq 'rpm' || $format eq 'deb';
|
||||
@@ -103,5 +130,9 @@ sub _verify_deb {
|
||||
}
|
||||
|
||||
sub usage {
|
||||
return "Usage: verify-release [--format all|rpm|deb] [--complete] RELEASE_DIRECTORY\n";
|
||||
return <<'USAGE';
|
||||
Usage: verify-release [--format all|rpm|deb] [--complete] RELEASE_DIRECTORY
|
||||
verify-release --checksum-file SHA256SUMS --relative-file PATH
|
||||
--copied-file FILE
|
||||
USAGE
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ use XCAT::BuildUtils qw(digest_file read_lines relative_files);
|
||||
our @EXPORT_OK = qw(
|
||||
architectures
|
||||
deb_package_name
|
||||
read_checksum_manifest
|
||||
read_release_manifest
|
||||
rpm_package_name
|
||||
validated_release_checksums
|
||||
@@ -60,9 +61,8 @@ sub _read_key_values {
|
||||
return \%values;
|
||||
}
|
||||
|
||||
sub _read_checksums {
|
||||
my ($root) = @_;
|
||||
my $path = "$root/SHA256SUMS";
|
||||
sub read_checksum_manifest {
|
||||
my ($path) = @_;
|
||||
my %checksums;
|
||||
for my $line (read_lines($path)) {
|
||||
die "Invalid checksum entry in $path: $line\n"
|
||||
@@ -80,7 +80,7 @@ sub _read_checksums {
|
||||
sub _verify_checksums {
|
||||
my ($root) = @_;
|
||||
my @files = grep { $_ ne 'SHA256SUMS' } relative_files($root);
|
||||
my $checksums = _read_checksums($root);
|
||||
my $checksums = read_checksum_manifest("$root/SHA256SUMS");
|
||||
|
||||
my %files = map { $_ => 1 } @files;
|
||||
for my $name (@files) {
|
||||
@@ -224,7 +224,7 @@ sub validate_complete_release {
|
||||
sub validated_release_checksums {
|
||||
my ($directory) = @_;
|
||||
validate_release($directory);
|
||||
return _read_checksums($directory);
|
||||
return read_checksum_manifest("$directory/SHA256SUMS");
|
||||
}
|
||||
|
||||
sub verify_release_file {
|
||||
|
||||
Reference in New Issue
Block a user