2019-01-29 14:56:01 +00:00
use base "installedtest" ;
use strict ;
use testapi ;
use utils ;
sub run {
my $ self = shift ;
my $ version = get_var ( "VERSION" ) ;
2022-04-26 17:41:23 +00:00
my $ rawrel = get_var ( "RAWREL" ) ;
my $ branch ;
my $ repoks ;
my $ releasever ;
2023-08-09 21:27:38 +00:00
my $ mockver ;
2022-04-26 17:41:23 +00:00
if ( $ version eq $ rawrel ) {
$ branch = "main" ;
$ repoks = "fedora-repo-rawhide.ks" ;
$ releasever = "Rawhide" ;
2023-08-09 21:26:02 +00:00
$ mockver = "rawhide" ;
2022-04-26 17:41:23 +00:00
}
else {
$ branch = "f${version}" ;
$ repoks = "fedora-repo-not-rawhide.ks" ;
$ releasever = $ version ;
2023-08-09 21:26:02 +00:00
$ mockver = $ version ;
2022-04-26 17:41:23 +00:00
}
2019-01-29 14:56:01 +00:00
my $ advortask = get_var ( "ADVISORY_OR_TASK" ) ;
my $ arch = get_var ( "ARCH" ) ;
my $ subv = get_var ( "SUBVARIANT" ) ;
my $ lcsubv = lc ( $ subv ) ;
2023-06-13 21:48:53 +00:00
# we need the update repo mounted to use it in image creation
mount_update_image ;
2020-05-06 04:12:12 +00:00
if ( get_var ( "NUMDISKS" ) > 2 ) {
2023-06-28 14:48:55 +00:00
# put /var/lib/mock on the third disk. FIXME: this used to
# be because we used the second disk for the updates repo,
# but now we use an updates image, we can probably change
# this
2020-05-06 04:12:12 +00:00
assert_script_run "echo 'type=83' | sfdisk /dev/vdc" ;
assert_script_run "mkfs.ext4 /dev/vdc1" ;
assert_script_run "echo '/dev/vdc1 /var/lib/mock ext4 defaults 1 2' >> /etc/fstab" ;
assert_script_run "mkdir -p /var/lib/mock" ;
assert_script_run "mount /var/lib/mock" ;
}
2019-01-29 14:56:01 +00:00
# install the tools we need
assert_script_run "dnf -y install mock git pykickstart tar" , 120 ;
2019-09-23 23:00:08 +00:00
# base mock config on original
2023-08-09 21:26:02 +00:00
assert_script_run "echo \"include('/etc/mock/fedora-${mockver}-${arch}.cfg')\" > /etc/mock/openqa.cfg" ;
2023-08-09 22:21:35 +00:00
if ( $ version eq $ rawrel ) {
# FIXME correct releasever for Rawhide:
# https://github.com/rpm-software-management/mock/issues/1177
assert_script_run "echo \"config_opts['releasever'] = '${version}'\" >> /etc/mock/openqa.cfg" ;
}
2023-08-10 01:04:05 +00:00
elsif ( $ version eq "39" ) {
# similar corrections for F39, while mock still thinks it's Rawhide
assert_script_run "sed -e 's,38,39,g' /etc/mock/fedora-38-${arch}.cfg > /etc/mock/fedora-39-${arch}.cfg" ;
}
2020-09-15 21:44:34 +00:00
# make the side and workarounds repos and the serial device available inside the mock root
2019-09-23 23:00:08 +00:00
assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_enable\'] = True" >> /etc/mock/openqa.cfg' ;
2023-07-04 20:13:15 +00:00
assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/mnt/updateiso/update_repo\', \'/mnt/updateiso/update_repo\'))" >> /etc/mock/openqa.cfg' if ( get_var ( "ISO_2" ) ) ;
2023-06-25 23:50:49 +00:00
assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/mnt/workaroundsiso/workarounds_repo\', \'/mnt/workaroundsiso/workarounds_repo\'))" >> /etc/mock/openqa.cfg' if ( get_var ( "ISO_3" ) ) ;
2019-01-29 14:56:01 +00:00
assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/dev/' . $ serialdev . '\', \'/dev/' . $ serialdev . '\'))" >> /etc/mock/openqa.cfg' ;
2023-07-04 20:13:15 +00:00
my $ tag = get_var ( "TAG" ) ;
my $ repos = 'config_opts[\'dnf.conf\'] += \"\"\"\n' ;
# add the update repo or tag repo to the config
$ repos . = '[advisory]\nname=Advisory repo\nbaseurl=file:///mnt/updateiso/update_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n' if ( get_var ( "ISO_2" ) ) ;
$ repos . = '[openqa-testtag]\nname=Tag test repo\nbaseurl=https://kojipkgs.fedoraproject.org/repos/' . "${tag}/latest/${arch}" . '\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n' if ( $ tag ) ;
2023-06-13 21:48:53 +00:00
# and the workaround repo if present
2023-06-25 23:50:49 +00:00
$ repos . = '\n[workarounds]\nname=Workarounds repo\nbaseurl=file:///mnt/workaroundsiso/workarounds_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n' if ( get_var ( "ISO_3" ) ) ;
2022-12-10 17:25:29 +00:00
# also the buildroot repo, for Rawhide
if ( $ version eq $ rawrel ) {
2023-08-02 08:10:55 +00:00
$ repos . = '\n[koji-rawhide]\nname=Buildroot repo\nbaseurl=https://kojipkgs.fedoraproject.org/repos/f' . $ version . '-build/latest/\$basearch/\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\nskip_if_unavailable=1\n' ;
2022-12-10 17:25:29 +00:00
}
$ repos . = '\"\"\"' ;
assert_script_run 'printf "' . $ repos . '" >> /etc/mock/openqa.cfg' ;
2019-08-15 20:36:25 +00:00
# replace metalink with mirrorlist so we don't get slow mirrors
2022-12-10 17:25:29 +00:00
repos_mirrorlist ( "/etc/mock/templates/*.tpl" ) ;
2019-01-29 14:56:01 +00:00
# upload the config so we can check it's OK
upload_logs "/etc/mock/openqa.cfg" ;
# now check out the kickstarts
2023-07-24 18:56:28 +00:00
# FIXME using HTTP 1.1 seems to avoid some weird hangs we're
# seeing on pagure.io lately as of 2023/07:
# https://pagure.io/fedora-infrastructure/issue/11426
assert_script_run 'git config --global http.version HTTP/1.1' ;
2019-01-29 14:56:01 +00:00
assert_script_run 'git clone https://pagure.io/fedora-kickstarts.git' ;
assert_script_run 'cd fedora-kickstarts' ;
2022-04-26 17:41:23 +00:00
assert_script_run "git checkout ${branch}" ;
2023-07-04 20:13:15 +00:00
# now add the side repo or tag repo to the appropriate repo ks
assert_script_run 'echo "repo --name=advisory --baseurl=file:///mnt/updateiso/update_repo" >> ' . $ repoks if ( get_var ( "ISO_2" ) ) ;
assert_script_run 'echo "repo --name=openqa-testtag --baseurl=https://kojipkgs.fedoraproject.org/repos/' . "${tag}/latest/${arch}" . '" >> ' . $ repoks if ( $ tag ) ;
2020-09-15 21:21:07 +00:00
# and the workarounds repo
2023-06-25 23:50:49 +00:00
assert_script_run 'echo "repo --name=workarounds --baseurl=file:///mnt/workaroundsiso/workarounds_repo" >> ' . $ repoks if ( get_var ( "ISO_3" ) ) ;
2022-12-10 17:25:29 +00:00
# and the buildroot repo, for Rawhide
if ( $ version eq $ rawrel ) {
2023-07-28 17:31:32 +00:00
assert_script_run 'echo "repo --name=koji-rawhide --baseurl=https://kojipkgs.fedoraproject.org/repos/f' . $ version . '-build/latest/\$basearch/" >> ' . $ repoks ;
2022-12-10 17:25:29 +00:00
}
2019-01-29 14:56:01 +00:00
# now flatten the kickstart
assert_script_run "ksflatten -c fedora-live-${lcsubv}.ks -o openqa.ks" ;
# upload the kickstart so we can check it
upload_logs "openqa.ks" ;
# now install the tools into the mock
2023-02-03 17:04:48 +00:00
assert_script_run "mock -r openqa --isolation=simple --install bash coreutils glibc-all-langpacks lorax-lmc-novirt selinux-policy-targeted shadow-utils util-linux" , 900 ;
2019-01-29 14:56:01 +00:00
# now make the image build directory inside the mock root and put the kickstart there
2021-03-10 00:02:06 +00:00
assert_script_run 'mock -r openqa --isolation=simple --chroot "mkdir -p /chroot_tmpdir"' ;
assert_script_run "mock -r openqa --isolation=simple --copyin openqa.ks /chroot_tmpdir" ;
2023-07-28 22:10:37 +00:00
# make sure volume ID isn't too long (for multiple Koji task cases)
my $ aot28 = substr ( $ advortask , 0 , 28 ) ;
my $ volid = "FWL-${aot28}" ;
2019-01-29 14:56:01 +00:00
# PULL SOME LEVERS! PULL SOME LEVERS!
2023-07-28 22:10:37 +00:00
assert_script_run "mock -r openqa --enable-network --isolation=simple --chroot \"/sbin/livemedia-creator --ks /chroot_tmpdir/openqa.ks --logfile /chroot_tmpdir/lmc-logs/livemedia-out.log --no-virt --resultdir /chroot_tmpdir/lmc --project Fedora-${subv}-Live --make-iso --volid ${volid} --iso-only --iso-name Fedora-${subv}-Live-${arch}-${advortask}.iso --releasever ${releasever} --macboot\"" , 7200 ;
2022-08-19 19:23:36 +00:00
unless ( script_run "mock -r openqa --isolation=simple --copyout /chroot_tmpdir/lmc-logs/livemedia-out.log ." , 90 ) {
2019-01-29 14:56:01 +00:00
upload_logs "livemedia-out.log" ;
}
2022-08-19 19:23:36 +00:00
unless ( script_run "mock -r openqa --isolation=simple --copyout /chroot_tmpdir/lmc-logs/anaconda/ anaconda" , 90 ) {
2019-01-29 14:56:01 +00:00
assert_script_run "tar cvzf anaconda.tar.gz anaconda/" ;
upload_logs "anaconda.tar.gz" ;
}
2022-08-19 19:23:36 +00:00
assert_script_run "mock -r openqa --isolation=simple --copyout /chroot_tmpdir/lmc/Fedora-${subv}-Live-${arch}-${advortask}.iso ." , 180 ;
2019-01-29 14:56:01 +00:00
upload_asset "./Fedora-${subv}-Live-${arch}-${advortask}.iso" ;
}
sub test_flags {
2022-07-28 20:32:57 +00:00
return { fatal = > 1 } ;
2019-01-29 14:56:01 +00:00
}
1 ;
# vim: set sw=4 et: