Bump to latest git, resync spec again

f38
Adam Williamson 5 years ago
parent 0f25b10165
commit a8feb5f769

1
.gitignore vendored

@ -43,3 +43,4 @@
/os-autoinst-bcbc6c412cbd69ab461d5448f8bf08b5371a0adb.tar.gz
/os-autoinst-f38e8b174dc1a0cace4d624a197a297f9efdc2bb.tar.gz
/os-autoinst-5038d8c2e04d923a8e7d616ea4b88a9ba3af6fb4.tar.gz
/os-autoinst-b781299edace8743b63e826d85c4f7a24ac70817.tar.gz

@ -1,152 +0,0 @@
From bc1ad5fdcdff10be1c87364413d13cd47f76f4ea Mon Sep 17 00:00:00 2001
From: Oliver Kurz <okurz@suse.de>
Date: Sun, 12 Jul 2020 21:17:41 +0200
Subject: [PATCH] Make local VM host IPs '10.0.2.2' configurable
Related progress issue: https://progress.opensuse.org/issues/68851
---
doc/backend_vars.asciidoc | 1 +
doc/networking.md | 20 +++++++++++++-------
os-autoinst-openvswitch | 28 +++++++++++++++++-----------
t/03-testapi.t | 2 ++
testapi.pm | 4 ++--
5 files changed, 35 insertions(+), 20 deletions(-)
diff --git a/doc/backend_vars.asciidoc b/doc/backend_vars.asciidoc
index db6fe323..0eabe0c7 100644
--- a/doc/backend_vars.asciidoc
+++ b/doc/backend_vars.asciidoc
@@ -107,6 +107,7 @@ QEMUVGA;see qemu -device ?;cirrus;VGA device to use with VM
QEMU_COMPRESS_QCOW2;boolean;1;compress qcow2 images intended for upload
QEMU_IMG_CREATE_TRIES;integer;3;Define number of tries for qemu-img commands
QEMU_HUGE_PAGES_PATH;string;undef;Define a path to use huge pages (e.g. /dev/hugepages/)
+QEMU_HOST_IP;string;10.0.2.2;The VM host IP used in usermode networking. Set `NICTYPE=user` and NICTYPE_USER_OPTIONS accordingly to match following https://wiki.qemu.org/Documentation/Networking#User_Networking_.28SLIRP.29
QEMU_MAX_MIGRATION_TIME;integer;240;Maximum time in seconds a migration to file may take for example for snapshot creation before being forcefully aborted.
QEMU_NO_FDC_SET;boolean;0;Don't disable the floppy drive.
QEMU_NO_KVM;boolean;0;Don't use KVM acceleration.
diff --git a/doc/networking.md b/doc/networking.md
index fcc332d0..0a123586 100644
--- a/doc/networking.md
+++ b/doc/networking.md
@@ -13,13 +13,19 @@ limitation - only TCP and UDP are supported. However no additional configuration
If options for "user" mode are required, they can be set in NICTYPE_USER_OPTIONS variable.
## TAP device support
-When advanced configurations, routing or better performance is required, NICTYPE can be set to
-"tap". In this case, preconfigured TAP device on host system is used as VM network device.
-Which TAP device is used depends on TAPDEV variable which is automatically set to "tap" + worker id - 1,
-i.e. worker1 uses tap0, worker 6 uses tap5. This mode requires the system administrator to create
-a TAP device for each running worker and to manually prepare any routing or bridging before "tap"
-networking can be used. TAP devices need to be created with proper permissions so VMs can access
-them, e.g. "tunctl -u _openqa-worker -p -t tap0".
+
+When advanced configurations, routing or better performance is required,
+NICTYPE can be set to "tap". In this case, preconfigured TAP device on host
+system is used as VM network device. Which TAP device is used depends on
+TAPDEV variable which is automatically set to "tap" + worker id - 1, i.e.
+worker1 uses tap0, worker 6 uses tap5. This mode requires the system
+administrator to create a TAP device for each running worker and to manually
+prepare any routing or bridging before "tap" networking can be used. TAP
+devices need to be created with proper permissions so VMs can access them,
+e.g. "tunctl -u _openqa-worker -p -t tap0".
+
+Some configuration can also be configured by environment variables as defined
+in the script `os-autoinst-openvswitch`.
## Multiple network devices
To create multiple network devices, one can set multiple, comma-separated MAC addresses
diff --git a/os-autoinst-openvswitch b/os-autoinst-openvswitch
index f7f98762..d251e802 100755
--- a/os-autoinst-openvswitch
+++ b/os-autoinst-openvswitch
@@ -41,16 +41,22 @@ sub init_switch {
die "can't parse bridge local port MAC" unless $self->{MAC};
die "can't parse bridge local port IP" unless $self->{IP};
+ my $local_ip = $ENV{OS_AUTOINST_BRIDGE_LOCAL_IP} // '10.0.2.2';
+ my $netmask = $ENV{OS_AUTOINST_BRIDGE_NETMASK} // 15;
+ my $rewrite_target = $ENV{OS_AUTOINST_BRIDGE_REWRITE_TARGET} // '10.1.0.0';
+ # we also need a hex-converted form of the rewrite target, thanks
+ # https://www.perlmonks.org/?node_id=704295
+ my $rewrite_target_hex = unpack('H*', pack('C*', split ('\.', $rewrite_target)));
# the VM have unique MAC that differs in the last 16 bits (see /usr/lib/os-autoinst/backend/qemu.pm)
# the IP can conflict across vlans
- # to allow connection from VM to host os-autoinst (10.0.2.2), we have to do some IP translation
- # we use simple scheme:
+ # to allow connection from VM to host os-autoinst ($local_ip), we have to do some IP translation
+ # we use simple scheme, e.g.:
# MAC 52:54:00:12:XX:YY -> IP 10.1.XX.YY
- # br0 has IP 10.0.2.2 and netmask /15 that covers 10.0.0.0 and 10.1.0.0 ranges
+ # br0 has IP $local_ip and netmask $netmask. E.g. '/15' covers 10.0.2.2 and 10.1.0.0 ranges
# this should be also configured permanently in /etc/sysconfig/network
- die "bridge local port IP is expected to be 10.0.2.2/15" unless $self->{IP} eq '10.0.2.2/15';
+ die "bridge local port IP is expected to be $local_ip/$netmask" unless $self->{IP} eq "$local_ip/$netmask";
# openflow rules don't survive reboot so they must be installed on each startup
for my $rule (
@@ -64,23 +70,23 @@ sub init_switch {
# reply packets from local port are handled by learned rules in table 1
'table=0,priority=1,in_port=LOCAL,actions=resubmit(,1)',
- # arp 10.0.2.2 - learn rule for handling replies, rewrite ARP sender IP to 10.1.x.x range and send to local
+ # arp e.g. 10.0.2.2 - learn rule for handling replies, rewrite ARP sender IP to e.g. 10.1.x.x range and send to local
# the learned rule rewrites ARP target to the original IP and sends the packet to the original port
- 'table=0,priority=100,dl_type=0x0806,nw_dst=10.0.2.2,actions=' . #
+ "table=0,priority=100,dl_type=0x0806,nw_dst=$local_ip,actions=" . #
'learn(table=1,priority=100,in_port=LOCAL,dl_type=0x0806,NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[],output:NXM_OF_IN_PORT[]),' . #
- 'load:0xa010000->NXM_OF_ARP_SPA[],move:NXM_OF_ETH_SRC[0..15]->NXM_OF_ARP_SPA[0..15],' . #
+ "load:0x$rewrite_target_hex->NXM_OF_ARP_SPA[],move:NXM_OF_ETH_SRC[0..$netmask]->NXM_OF_ARP_SPA[0..$netmask]," . #
'local',
- # tcp to $self->{MAC} syn - learn rule for handling replies, rewrite source IP to 10.1.x.x range and send to local
+ # tcp to $self->{MAC} syn - learn rule for handling replies, rewrite source IP to e.g. 10.1.x.x range and send to local
# the learned rule rewrites DST to the original IP and sends the packet to the original port
"table=0,priority=100,dl_type=0x0800,tcp_flags=+syn-ack,dl_dst=$self->{MAC},actions=" . #
'learn(table=1,priority=100,in_port=LOCAL,dl_type=0x0800,NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:NXM_OF_IP_SRC[]->NXM_OF_IP_DST[],output:NXM_OF_IN_PORT[]),' . #
- 'mod_nw_src:10.1.0.0,move:NXM_OF_ETH_SRC[0..15]->NXM_OF_IP_SRC[0..15],' . #
+ "mod_nw_src:$rewrite_target,move:NXM_OF_ETH_SRC[0..$netmask]->NXM_OF_IP_SRC[0..$netmask]," . #
'local',
- # tcp to $self->{MAC} other - rewrite source IP to 10.1.x.x range and send to local
+ # tcp to $self->{MAC} other - rewrite source IP to e.g. 10.1.x.x range and send to local
"table=0,priority=99,dl_type=0x0800,dl_dst=$self->{MAC},actions=" . #
- 'mod_nw_src:10.1.0.0,move:NXM_OF_ETH_SRC[0..15]->NXM_OF_IP_SRC[0..15],local',
+ "mod_nw_src:$rewrite_target,move:NXM_OF_ETH_SRC[0..$netmask]->NXM_OF_IP_SRC[0..$netmask],local",
)
{
system('ovs-ofctl', 'add-flow', $self->{BRIDGE}, $rule);
diff --git a/t/03-testapi.t b/t/03-testapi.t
index 205c5098..d53aa125 100755
--- a/t/03-testapi.t
+++ b/t/03-testapi.t
@@ -677,6 +677,8 @@ subtest 'autoinst_url' => sub {
is(autoinst_url('foo'), 'http://my_worker_host:1/foo', 'autoinst_url returns reasonable URL based on WORKER_HOSTNAME');
$bmwqemu::vars{BACKEND} = 'qemu';
is(autoinst_url('foo'), 'http://10.0.2.2:1/foo', 'autoinst_url returns static IP for qemu');
+ $bmwqemu::vars{QEMU_HOST_IP} = '192.168.42.1';
+ is(autoinst_url('foo'), 'http://192.168.42.1:1/foo', 'autoinst_url returns configured static IP');
$bmwqemu::vars{AUTOINST_URL_HOSTNAME} = 'localhost';
is(autoinst_url('foo'), 'http://localhost:1/foo', 'we can configure the hostname that autoinst_url returns');
};
diff --git a/testapi.pm b/testapi.pm
index c7551650..ed94bd58 100755
--- a/testapi.pm
+++ b/testapi.pm
@@ -2012,10 +2012,10 @@ sub diag {
=for stopwords kvm VM
Return VM's host IP
- in a kvm instance you reach the VM's host under 10.0.2.2
+ in a kvm instance you reach the VM's host under default 10.0.2.2
=cut
sub host_ip {
- return check_var('BACKEND', 'qemu') ? '10.0.2.2' : get_required_var('WORKER_HOSTNAME');
+ return check_var('BACKEND', 'qemu') ? get_var('QEMU_HOST_IP', '10.0.2.2') : get_required_var('WORKER_HOSTNAME');
}
=head2 autoinst_url
--
2.28.0.rc1

@ -31,29 +31,29 @@
%global github_owner os-autoinst
%global github_name os-autoinst
%global github_version 4.6
%global github_commit 5038d8c2e04d923a8e7d616ea4b88a9ba3af6fb4
%global github_commit b781299edace8743b63e826d85c4f7a24ac70817
# if set, will be a post-release snapshot build, otherwise a 'normal' build
%global github_date 20200623
%global github_date 20200804
%global shortcommit %(c=%{github_commit}; echo ${c:0:7})
Name: os-autoinst
Version: %{github_version}
Release: 22%{?github_date:.%{github_date}git%{shortcommit}}%{?dist}
Release: 23%{?github_date:.%{github_date}git%{shortcommit}}%{?dist}
Summary: OS-level test automation
License: GPLv2+
URL: https://os-autoinst.github.io/openQA/
Source0: https://github.com/%{github_owner}/%{github_name}/archive/%{github_commit}/%{github_name}-%{github_commit}.tar.gz
# https://github.com/os-autoinst/os-autoinst/pull/1468
# Make local VM host IP configurable; including fix explained in
# https://github.com/os-autoinst/os-autoinst/pull/1468#issuecomment-663251952
Patch0: 0001-Make-local-VM-host-IPs-10.0.2.2-configurable.patch
# on SUSE this is conditional, for us it doesn't have to be but we
# still use a macro just to keep build_requires similar for ease of
# cross-comparison
%define opencv_require pkgconfig(opencv)
# The following line is generated from dependencies.yaml (upstream)
%define build_requires %opencv_require autoconf automake gcc-c++ libtool make perl(ExtUtils::Embed) perl(ExtUtils::MakeMaker) >= 7.12 perl(Module::CPANfile) perl(Pod::Html) pkg-config pkgconfig(fftw3) pkgconfig(libpng) pkgconfig(sndfile) pkgconfig(theoraenc)
%define build_base_requires %opencv_require gcc-c++ perl(Pod::Html) pkg-config pkgconfig(fftw3) pkgconfig(libpng) pkgconfig(sndfile) pkgconfig(theoraenc)
%define build_legacy_requires %build_base_requires autoconf automake libtool make perl(ExtUtils::Embed) perl(ExtUtils::MakeMaker) >= 6.66 perl(Module::CPANfile)
# diff from SUSE: SUSE has 'ninja', Fedora has 'ninja-build'
# The following line is generated from dependencies.yaml (upstream)
%define build_requires %build_base_requires cmake ninja-build
# this is stuff we added to requires, we put it in its own macro
# to make resyncing with upstream spec changes easier. SUSE has
# perl-base, we have perl(base)
@ -62,13 +62,18 @@ Patch0: 0001-Make-local-VM-host-IPs-10.0.2.2-configurable.patch
# which does not exist in Fedora - we have perl(base) in
# main_requires_additional and the perl(:MODULE_COMPAT) require below
# The following line is generated from dependencies.yaml (upstream)
%define main_requires %main_requires_additional git-core perl(B::Deparse) perl(Carp) perl(Carp::Always) perl(Class::Accessor::Fast) perl(Config) perl(Cpanel::JSON::XS) perl(Crypt::DES) perl(Cwd) perl(Data::Dumper) perl(Digest::MD5) perl(DynaLoader) perl(English) perl(Errno) perl(Exception::Class) perl(Exporter) perl(ExtUtils::testlib) perl(Fcntl) perl(File::Basename) perl(File::Find) perl(File::Path) perl(File::Spec) perl(File::Temp) perl(File::Touch) perl(File::Which) perl(IO::Handle) perl(IO::Scalar) perl(IO::Select) perl(IO::Socket) perl(IO::Socket::INET) perl(IO::Socket::UNIX) perl(IPC::Open3) perl(IPC::Run::Debug) perl(IPC::System::Simple) perl(List::MoreUtils) perl(List::Util) perl(Mojo::IOLoop::ReadWriteProcess) >= 0.23 perl(Mojo::JSON) perl(Mojo::Log) perl(Mojo::URL) perl(Mojo::UserAgent) perl(Mojolicious) >= 8.42 perl(Mojolicious::Lite) perl(Net::DBus) perl(Net::IP) perl(Net::SNMP) perl(Net::SSH2) perl(POSIX) perl(Scalar::Util) perl(Socket) perl(Socket::MsgHdr) perl(Term::ANSIColor) perl(Thread::Queue) perl(Time::HiRes) perl(Try::Tiny) perl(XML::LibXML) perl(XML::SemanticDiff) perl(autodie) perl(base) perl(constant) perl(integer) perl(strict) perl(warnings)
%define main_requires %main_requires_additional git-core perl(B::Deparse) perl(Carp) perl(Carp::Always) perl(Class::Accessor::Fast) perl(Config) perl(Cpanel::JSON::XS) perl(Crypt::DES) perl(Cwd) perl(Data::Dumper) perl(Digest::MD5) perl(DynaLoader) perl(English) perl(Errno) perl(Exception::Class) perl(Exporter) perl(ExtUtils::testlib) perl(Fcntl) perl(File::Basename) perl(File::Find) perl(File::Path) perl(File::Spec) perl(File::Temp) perl(File::Touch) perl(File::Which) perl(IO::Handle) perl(IO::Scalar) perl(IO::Select) perl(IO::Socket) perl(IO::Socket::INET) perl(IO::Socket::UNIX) perl(IPC::Open3) perl(IPC::Run::Debug) perl(IPC::System::Simple) perl(List::MoreUtils) perl(List::Util) perl(Mojo::IOLoop::ReadWriteProcess) >= 0.26 perl(Mojo::JSON) perl(Mojo::Log) perl(Mojo::URL) perl(Mojo::UserAgent) perl(Mojolicious) >= 8.42 perl(Mojolicious::Lite) perl(Net::DBus) perl(Net::IP) perl(Net::SNMP) perl(Net::SSH2) perl(POSIX) perl(Scalar::Util) perl(Socket) perl(Socket::MsgHdr) perl(Term::ANSIColor) perl(Thread::Queue) perl(Time::HiRes) perl(Try::Tiny) perl(XML::LibXML) perl(XML::SemanticDiff) perl(autodie) perl(base) perl(constant) perl(integer) perl(strict) perl(warnings)
# all requirements needed by the tests, do not require on this in the package
# itself or any sub-packages
# diff from SUSE: replaced qemu with qemu-kvm, qemu-tools with
# qemu-img, and qemu-x86 with qemu-system-i386
# The following line is generated from dependencies.yaml (upstream)
%define test_requires %build_requires %main_requires perl(Benchmark) perl(Devel::Cover) perl(FindBin) perl(Pod::Coverage) perl(Test::Exception) perl(Test::Fatal) perl(Test::Mock::Time) perl(Test::MockModule) perl(Test::MockObject) perl(Test::Mojo) perl(Test::More) perl(Test::Output) perl(Test::Pod) perl(Test::Strict) perl(Test::Warnings) >= 0.029 perl(YAML::PP) qemu-kvm /usr/bin/qemu-img /usr/bin/qemu-system-i386
%define test_base_requires %main_requires perl(Benchmark) perl(Devel::Cover) perl(FindBin) perl(Pod::Coverage) perl(Test::Exception) perl(Test::Fatal) perl(Test::Mock::Time) perl(Test::MockModule) perl(Test::MockObject) perl(Test::Mojo) perl(Test::More) perl(Test::Output) perl(Test::Pod) perl(Test::Strict) perl(Test::Warnings) >= 0.029 procps python3-setuptools qemu-kvm /usr/bin/qemu-img /usr/bin/qemu-system-i386
# The following line is generated from dependencies.yaml (upstream)
%define test_legacy_requires %build_legacy_requires %test_base_requires
# diff from SUSE: SUSE has python3-yamllint, Fedora has just yamllint
# The following line is generated from dependencies.yaml (upstream)
%define test_requires %build_requires %test_base_requires perl(YAML::PP) yamllint
# diff from SUSE: dropped perl(Devel::Cover::Report::Codecov) as it's
# not currently packaged for Fedora
# The following line is generated from dependencies.yaml (upstream)
@ -126,46 +131,35 @@ sed -i 's/ my $thisversion = qx{git.*rev-parse HEAD}.*;/ my $thisversion = "%{v
%if 0%{?no_fullstack}
rm -f t/99-full-stack.t
sed -i -e '/99-full-stack.t/d' Makefile.am
%endif # no_fullstack
%if 0%{?no_options}
rm -f t/18-qemu-options.t
sed -i -e '/18-qemu-options.t/d' Makefile.am
%endif
%if 0%{?no_isotovideo}
rm -f t/14-isotovideo.t
sed -i -e '/14-isotovideo.t/d' Makefile.am
%endif
# Tesseract 4.0.0 (in Rawhide as of 2018-11) fails utterly to OCR
# the test needle properly:
# https://github.com/tesseract-ocr/tesseract/issues/2052
rm -f t/02-test_ocr.t
sed -i -e '/02-test_ocr.t/d' Makefile.am
# https://progress.opensuse.org/issues/60755
rm -f t/07-commands.t
sed -i -e '/07-commands.t/d' Makefile.am
%build
mkdir -p m4
autoreconf -f -i
%configure --docdir=%{_pkgdocdir}
make INSTALLDIRS=vendor %{?_smp_mflags}
%cmake -DOS_AUTOINST_DOC_DIR:STRING=%{_docdir}/%{name} -DOS_AUTOINST_DATA_DIR:STRING=%{_libexecdir}/%{name} -GNinja
%ninja_build -C %{__cmake_builddir}
%install
%make_install INSTALLDIRS=vendor
# only internal stuff
rm -r %{buildroot}%{_libexecdir}/os-autoinst/tools/
%ninja_install -C %{__cmake_builddir} install-openvswitch
# we don't really need to ship this in the package, usually the web UI
# is much better for needle editing
rm %{buildroot}%{_libexecdir}/os-autoinst/crop.py*
# we're going to %%license this
rm %{buildroot}%{_pkgdocdir}/COPYING
# This is no use for package users
rm %{buildroot}%{_pkgdocdir}/INSTALL.asciidoc
ls -lR %buildroot
find %{buildroot} -type f -name .packlist -exec rm -f {} \;
find %{buildroot} -depth -type d -and -not -name distri -exec rmdir {} \;
@ -174,15 +168,10 @@ find %{buildroot} -depth -type d -and -not -name distri -exec rmdir {} \;
export NO_BRP_STALE_LINK_ERROR=yes
%check
# we may not pull Perl::Critic in for RPM builds as we don't run code
# quality checks, so cut it from cpanfile ahead of the next check
sed '/Perl::Critic/d' -i cpanfile
# should work offline
for p in $(cpanfile-dump); do rpm -q --whatprovides "perl($p)"; done
# 00-compile-check-all.t fails if this is present and Perl::Critic is
# not installed
rm tools/lib/perlcritic/Perl/Critic/Policy/*.pm
make test VERBOSE=1
%ninja_build -C %{__cmake_builddir} check-pkg-build
%post openvswitch
%systemd_post os-autoinst-openvswitch.service
@ -214,6 +203,7 @@ make test VERBOSE=1
%{_libexecdir}/os-autoinst/cv.pm
%{_libexecdir}/os-autoinst/ocr.pm
%{_libexecdir}/os-autoinst/osutils.pm
%{_libexecdir}/os-autoinst/signalblocker.pm
%{_libexecdir}/os-autoinst/needle.pm
%{_libexecdir}/os-autoinst/backend
%{_libexecdir}/os-autoinst/OpenQA
@ -231,6 +221,9 @@ make test VERBOSE=1
%files devel
%changelog
* Tue Aug 04 2020 Adam Williamson <awilliam@redhat.com> - 4.6-23.20200804gitb781299
- Bump to latest git, resync spec again
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 4.6-22.20200623git5038d8c
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
@ -244,16 +237,16 @@ make test VERBOSE=1
* Thu Jun 25 2020 Jitka Plesnikova <jplesnik@redhat.com> - 4.6-19.20200623git5038d8c
- Perl 5.32 rebuild
* Wed Jun 24 2020 Adam Williamson <awilliam@redhat.com> - 4.6-18.20200624git5038d8c2
* Wed Jun 24 2020 Adam Williamson <awilliam@redhat.com> - 4.6-18.20200623git5038d8c
- Bump to latest git, resync spec again
* Fri Jun 12 2020 Adam Williamson <awilliam@redhat.com> - 4.6-17.20200610gitf38e8b17
* Fri Jun 12 2020 Adam Williamson <awilliam@redhat.com> - 4.6-17.20200610gitf38e8b1
- Drop -devel dep that doesn't exist in Fedora
* Wed Jun 10 2020 Adam Williamson <awilliam@redhat.com> - 4.6-16.20200610gitf38e8b17
* Wed Jun 10 2020 Adam Williamson <awilliam@redhat.com> - 4.6-16.20200610gitf38e8b1
- Bump to latest git, resync spec again
* Mon Jun 08 2020 Adam Williamson <awilliam@redhat.com> - 4.6-15.20200608gitbcbc6c41
* Mon Jun 08 2020 Adam Williamson <awilliam@redhat.com> - 4.6-15.20200608gitbcbc6c4
- Bump to latest git, resync spec with upstream
* Thu Jun 04 2020 Nicolas Chauvet <kwizart@gmail.com> - 4.6-14.20200430git85fa4f1

@ -1 +1 @@
SHA512 (os-autoinst-5038d8c2e04d923a8e7d616ea4b88a9ba3af6fb4.tar.gz) = 0483646b4d21aae24034d944a9095aaae751883912d620439309198f4ff8ec591d1015a1c478eb142d9e4be0b93d511151af1ed993855505fe4d7557574669f9
SHA512 (os-autoinst-b781299edace8743b63e826d85c4f7a24ac70817.tar.gz) = 17d54760d65de29af1848ac34f3da635e73fd6db3f8dec5a3cf07ec6f2ab5b01a2109fbdc88fef44f66c1a95fef824ccbfc144bd23dac43473822332b25e2c0a

Loading…
Cancel
Save