5 # Copyright 2019 Red Hat Inc.
8 # Gerd Hoffmann <kraxel@redhat.com>
10 # This code is licensed under the GPL version 2 or later. See
11 # the COPYING file in the top-level directory.
22 class FedoraVM(basevm
.BaseVM
):
26 base
= "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/30/"
27 link
= base
+ "Server/x86_64/iso/Fedora-Server-netinst-x86_64-30-1.2.iso"
28 repo
= base
+ "Server/x86_64/os/"
29 full
= base
+ "Everything/x86_64/os/"
30 csum
= "5e4eac4566d8c572bfb3bcf54b7d6c82006ec3c6c882a2c9235c6d3494d7b100"
36 'gcc', 'binutils', 'make',
42 '"pkgconfig(libusb-1.0)"',
43 '"pkgconfig(libusbredirparser-0.5)"',
46 '"pkgconfig(gnutls)"',
50 '"pkgconfig(gtk+-3.0)"',
51 '"pkgconfig(ncursesw)"',
54 '"pkgconfig(libpulse)"',
60 rm -rf /home/qemu/qemu-test.*
61 cd $(mktemp -d /home/qemu/qemu-test.XXXXXX);
62 mkdir src build; cd src;
65 ../src/configure --python=python3 {configure_opts};
66 gmake --output-sync -j{jobs} {target} {verbose};
69 def build_image(self
, img
):
70 self
.print_step("Downloading install iso")
71 cimg
= self
._download
_with
_cache
(self
.link
, sha256sum
=self
.csum
)
72 img_tmp
= img
+ ".tmp"
73 iso
= img
+ ".install.iso"
75 self
.print_step("Preparing iso and disk image")
76 subprocess
.check_call(["cp", "-f", cimg
, iso
])
77 self
.exec_qemu_img("create", "-f", "qcow2", img_tmp
, self
.size
)
78 self
.print_step("Booting installer")
79 self
.boot(img_tmp
, extra_args
= [
80 "-bios", "pc-bios/bios-256k.bin",
81 "-machine", "graphics=off",
84 self
.console_init(300)
85 self
.console_wait("installation process.")
87 self
.console_send("\t")
89 self
.console_send(" console=ttyS0")
90 proxy
= os
.environ
.get("http_proxy")
92 self
.console_send(" proxy=%s" % proxy
)
93 self
.console_send(" inst.proxy=%s" % proxy
)
94 self
.console_send(" inst.repo=%s" % self
.repo
)
95 self
.console_send("\n")
97 self
.console_wait_send("2) Use text mode", "2\n")
99 self
.console_wait_send("5) [!] Installation Dest", "5\n")
100 self
.console_wait_send("1) [x]", "c\n")
101 self
.console_wait_send("2) [ ] Use All Space", "2\n")
102 self
.console_wait_send("2) [x] Use All Space", "c\n")
103 self
.console_wait_send("1) [ ] Standard Part", "1\n")
104 self
.console_wait_send("1) [x] Standard Part", "c\n")
106 self
.console_wait_send("7) [!] Root password", "7\n")
107 self
.console_wait("Password:")
108 self
.console_send("%s\n" % self
.ROOT_PASS
)
109 self
.console_wait("Password (confirm):")
110 self
.console_send("%s\n" % self
.ROOT_PASS
)
112 self
.console_wait_send("8) [ ] User creation", "8\n")
113 self
.console_wait_send("1) [ ] Create user", "1\n")
114 self
.console_wait_send("3) User name", "3\n")
115 self
.console_wait_send("ENTER:", "%s\n" % self
.GUEST_USER
)
116 self
.console_wait_send("4) [ ] Use password", "4\n")
117 self
.console_wait_send("5) Password", "5\n")
118 self
.console_wait("Password:")
119 self
.console_send("%s\n" % self
.GUEST_PASS
)
120 self
.console_wait("Password (confirm):")
121 self
.console_send("%s\n" % self
.GUEST_PASS
)
122 self
.console_wait_send("7) Groups", "c\n")
125 good
= self
.console_wait("3) [x] Installation",
126 "3) [!] Installation")
127 self
.console_send("r\n")
133 good
= self
.console_wait("4) [x] Software",
135 self
.console_send("r\n")
139 self
.console_send("r\n" % self
.GUEST_PASS
)
141 self
.console_wait_send("'b' to begin install", "b\n")
143 self
.print_step("Installation started now, this will take a while")
145 self
.console_wait_send("Installation complete", "\n")
146 self
.print_step("Installation finished, rebooting")
150 self
.console_ssh_init(prompt
, self
.GUEST_USER
, self
.GUEST_PASS
)
151 self
.console_wait_send(prompt
, "exit\n")
155 self
.console_ssh_init(prompt
, "root", self
.ROOT_PASS
)
156 self
.console_sshd_config(prompt
)
158 # setup virtio-blk #1 (tarfile)
159 self
.console_wait(prompt
)
160 self
.console_send("echo 'KERNEL==\"vdb\" MODE=\"666\"' >> %s\n" %
161 "/etc/udev/rules.d/99-qemu.rules")
163 self
.print_step("Configuration finished, rebooting")
164 self
.console_wait_send(prompt
, "reboot\n")
165 self
.console_wait("login:")
168 self
.print_step("Installing packages")
169 self
.ssh_root_check("rm -vf /etc/yum.repos.d/fedora*.repo\n")
170 self
.ssh_root_check("echo '[fedora]' >> /etc/yum.repos.d/qemu.repo\n")
171 self
.ssh_root_check("echo 'baseurl=%s' >> /etc/yum.repos.d/qemu.repo\n" % self
.full
)
172 self
.ssh_root_check("echo 'gpgcheck=0' >> /etc/yum.repos.d/qemu.repo\n")
173 self
.ssh_root_check("dnf install -y %s\n" % " ".join(self
.pkgs
))
176 self
.ssh_root(self
.poweroff
)
177 self
.console_wait("sleep state S5")
180 if os
.path
.exists(img
):
182 os
.rename(img_tmp
, img
)
184 self
.print_step("All done")
186 if __name__
== "__main__":
187 sys
.exit(basevm
.main(FedoraVM
))