Merge ~xueshengyao/pc-enablement/+git/oem-scripts:master into ~oem-solutions-engineers/pc-enablement/+git/oem-scripts:master
- Git
- lp:~xueshengyao/pc-enablement/+git/oem-scripts
- master
- Merge into master
Proposed by
Shengyao Xue
Status: | Merged |
---|---|
Merged at revision: | a8558fa198690dc2b059e269086ba9c012295092 |
Proposed branch: | ~xueshengyao/pc-enablement/+git/oem-scripts:master |
Merge into: | ~oem-solutions-engineers/pc-enablement/+git/oem-scripts:master |
Diff against target: |
373 lines (+331/-0) 5 files modified
autoISO.go (+321/-0) debian/changelog (+6/-0) debian/control (+1/-0) debian/install (+1/-0) debian/rules (+2/-0) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
jeremyszu | Pending | ||
Shih-Yuan Lee | Pending | ||
Review via email:
|
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/autoISO.go b/autoISO.go | |||
2 | 0 | new file mode 100644 | 0 | new file mode 100644 |
3 | index 0000000..3f7eb72 | |||
4 | --- /dev/null | |||
5 | +++ b/autoISO.go | |||
6 | @@ -0,0 +1,321 @@ | |||
7 | 1 | // make a auto install OEM ISO from a base OEM ISO image. | ||
8 | 2 | // Usage: autoISO /path/to/oem-xxx.iso | ||
9 | 3 | // Copyright (C) 2021 Canonical Ltd. | ||
10 | 4 | // Author: Shengyao Xue <shengyao.xue@canonical.com> | ||
11 | 5 | // | ||
12 | 6 | // This program is free software; you can redistribute it and/or modify | ||
13 | 7 | // it under the terms of the GNU General Public License as published by | ||
14 | 8 | // the Free Software Foundation; either version 3 of the License, or | ||
15 | 9 | // (at your option) any later version. | ||
16 | 10 | // | ||
17 | 11 | // This program is distributed in the hope that it will be useful, | ||
18 | 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
19 | 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
20 | 14 | // GNU General Public License for more details. | ||
21 | 15 | // | ||
22 | 16 | // You should have received a copy of the GNU General Public License | ||
23 | 17 | // along with this program; if not, write to the Free Software | ||
24 | 18 | // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
25 | 19 | |||
26 | 20 | package main | ||
27 | 21 | |||
28 | 22 | import ( | ||
29 | 23 | "bytes" | ||
30 | 24 | "flag" | ||
31 | 25 | "fmt" | ||
32 | 26 | "io/ioutil" | ||
33 | 27 | "os" | ||
34 | 28 | "os/exec" | ||
35 | 29 | "os/user" | ||
36 | 30 | "path/filepath" | ||
37 | 31 | ) | ||
38 | 32 | |||
39 | 33 | func check(e error) { | ||
40 | 34 | if e != nil { | ||
41 | 35 | panic(e) | ||
42 | 36 | } | ||
43 | 37 | } | ||
44 | 38 | |||
45 | 39 | func fileExists(path string) bool { | ||
46 | 40 | _, err := os.Stat(path) | ||
47 | 41 | return err == nil | ||
48 | 42 | } | ||
49 | 43 | |||
50 | 44 | func main() { | ||
51 | 45 | if !fileExists("/usr/bin/mksquashfs") { | ||
52 | 46 | fmt.Println("Please install squashfs-tools package first.") | ||
53 | 47 | os.Exit(-1) | ||
54 | 48 | } | ||
55 | 49 | if !fileExists("/usr/bin/genisoimage") { | ||
56 | 50 | fmt.Println("Please install genisoimage package first.") | ||
57 | 51 | os.Exit(-1) | ||
58 | 52 | } | ||
59 | 53 | |||
60 | 54 | extractOnly := flag.Bool("x", false, "extract the base ISO image only.") | ||
61 | 55 | keepFolder := flag.Bool("k", false, "keep the temporary folder after the new image created.") | ||
62 | 56 | sanityTest := flag.Bool("s", false, "add first boot sanity test.") | ||
63 | 57 | flag.Parse() | ||
64 | 58 | |||
65 | 59 | currentUser, err := user.Current() | ||
66 | 60 | check(err) | ||
67 | 61 | if currentUser.Username != "root" { | ||
68 | 62 | fmt.Printf("This program requires superuser privileges, please run it as root.\n") | ||
69 | 63 | os.Exit(-1) | ||
70 | 64 | } | ||
71 | 65 | var baseiso string | ||
72 | 66 | if flag.NArg() == 1 { | ||
73 | 67 | baseiso = filepath.Clean(flag.Arg(0)) | ||
74 | 68 | } else { | ||
75 | 69 | fmt.Printf("Usage: autoISO [option] /path/to/oem-xxx.iso\n") | ||
76 | 70 | fmt.Printf(" -h: help for options.\n") | ||
77 | 71 | os.Exit(0) | ||
78 | 72 | } | ||
79 | 73 | |||
80 | 74 | parentDir, err := os.Getwd() | ||
81 | 75 | check(err) | ||
82 | 76 | fmt.Printf("autoISO started, the artifacts will be created in current working directory: %v\n", parentDir) | ||
83 | 77 | fmt.Printf("This might take several minutes. Please wait...\n") | ||
84 | 78 | //autoISODir, err := os.MkdirTemp(parentDir, "autoISO-*") | ||
85 | 79 | autoISODir, err := ioutil.TempDir(parentDir, "autoISO-*") | ||
86 | 80 | check(err) | ||
87 | 81 | check(os.Chdir(autoISODir)) | ||
88 | 82 | check(os.Mkdir("iso", 0775)) | ||
89 | 83 | check(os.Mkdir("squash", 0775)) | ||
90 | 84 | cmd := exec.Command("mount", baseiso, "iso") | ||
91 | 85 | cmd.Dir = autoISODir | ||
92 | 86 | check(cmd.Run()) | ||
93 | 87 | cmd = exec.Command("mount", "iso/casper/filesystem.squashfs", "squash") | ||
94 | 88 | check(cmd.Run()) | ||
95 | 89 | cmd = exec.Command("cp", "-a", "iso", "isorw") | ||
96 | 90 | check(cmd.Run()) | ||
97 | 91 | cmd = exec.Command("cp", "-a", "squash", "squashrw") | ||
98 | 92 | check(cmd.Run()) | ||
99 | 93 | cmd = exec.Command("umount", "squash") | ||
100 | 94 | check(cmd.Run()) | ||
101 | 95 | cmd = exec.Command("umount", "iso") | ||
102 | 96 | check(cmd.Run()) | ||
103 | 97 | if *extractOnly { | ||
104 | 98 | fmt.Printf("autoISO extracted only.\n") | ||
105 | 99 | } else { | ||
106 | 100 | // oem-config | ||
107 | 101 | check(os.Mkdir("squashrw/usr/lib/oem-config/pre-install", 0775)) | ||
108 | 102 | preseed := `#!/bin/bash | ||
109 | 103 | cat <<EOF | sudo debconf-communicate ubiquity | ||
110 | 104 | SET passwd/user-fullname u | ||
111 | 105 | FSET passwd/user-fullname seen true | ||
112 | 106 | SET passwd/username u | ||
113 | 107 | FSET passwd/username seen true | ||
114 | 108 | SET passwd/user-password u | ||
115 | 109 | FSET passwd/user-password seen true | ||
116 | 110 | SET passwd/user-password-again u | ||
117 | 111 | FSET passwd/user-password-again seen true | ||
118 | 112 | SET passwd/auto-login true | ||
119 | 113 | FSET passwd/auto-login seen true | ||
120 | 114 | SET time/zone Asia/Shanghai | ||
121 | 115 | FSET time/zone seen true | ||
122 | 116 | EOF | ||
123 | 117 | |||
124 | 118 | cat <<EOF | sudo debconf-communicate keyboard-configuration | ||
125 | 119 | SET keyboard-configuration/xkb-keymap us | ||
126 | 120 | FSET keyboard-configuration/xkb-keymap seen true | ||
127 | 121 | SET keyboard-configuration/layoutcode us | ||
128 | 122 | FSET keyboard-configuration/layoutcode seen true | ||
129 | 123 | SET keyboard-configuration/layout English (US) | ||
130 | 124 | FSET keyboard-configuration/layout seen true | ||
131 | 125 | SET keyboard-configuration/variant English (US) | ||
132 | 126 | FSET keyboard-configuration/variant seen true | ||
133 | 127 | EOF | ||
134 | 128 | ` | ||
135 | 129 | //check(ioutil.WriteFile("squashrw/usr/lib/oem-config/pre-install/oobe-preseed", []byte(preseed), 0775)) | ||
136 | 130 | check(ioutil.WriteFile("squashrw/usr/lib/oem-config/pre-install/oobe-preseed", []byte(preseed), 0775)) | ||
137 | 131 | grub := "GRUB_CMDLINE_LINUX=$(echo $GRUB_CMDLINE_LINUX automatic-oem-config)\n" | ||
138 | 132 | check(ioutil.WriteFile("squashrw/etc/default/grub.d/automatic-oem-config.cfg", []byte(grub), 0664)) | ||
139 | 133 | |||
140 | 134 | // sanity test | ||
141 | 135 | if *sanityTest { | ||
142 | 136 | oemDevFirstBoot := `#!/bin/bash | ||
143 | 137 | |||
144 | 138 | set -x | ||
145 | 139 | |||
146 | 140 | while true ; do | ||
147 | 141 | sleep 10 | ||
148 | 142 | ping -c 3 8.8.8.8 && break # ideally wired network works, use it. | ||
149 | 143 | sleep 10 | ||
150 | 144 | if [ -e /etc/oem-config-hack/connect-wifi ]; then | ||
151 | 145 | bash /etc/oem-config-hack/connect-wifi | ||
152 | 146 | else | ||
153 | 147 | echo Wired network not working and wifi not available, Quit! | ||
154 | 148 | bash | ||
155 | 149 | exit | ||
156 | 150 | fi | ||
157 | 151 | done | ||
158 | 152 | |||
159 | 153 | if ! dpkg-query -W prepare-checkbox-sanity; then | ||
160 | 154 | sudo add-apt-repository -y ppa:checkbox-dev/ppa | ||
161 | 155 | sudo apt install -y prepare-checkbox-sanity | ||
162 | 156 | sudo reboot | ||
163 | 157 | exit | ||
164 | 158 | fi | ||
165 | 159 | |||
166 | 160 | if [ -e ~/.config/autostart/oem-dev-firstboot.desktop ]; then | ||
167 | 161 | rm ~/.config/autostart/oem-dev-firstboot.desktop | ||
168 | 162 | fi | ||
169 | 163 | |||
170 | 164 | checkbox-run-plan pc-sanity-smoke-test --checkbox-conf /home/u/.config/checkbox.conf -b | ||
171 | 165 | |||
172 | 166 | sleep 3 | ||
173 | 167 | |||
174 | 168 | gio open ~/.local/share/checkbox-ng/submission_*.html | ||
175 | 169 | |||
176 | 170 | bash | ||
177 | 171 | ` | ||
178 | 172 | check(ioutil.WriteFile("squashrw/usr/bin/oem-dev-firstboot", []byte(oemDevFirstBoot), 0775)) | ||
179 | 173 | oemDevFirstBootAutoStart := `#!/bin/bash | ||
180 | 174 | set -x | ||
181 | 175 | mkdir -p "/home/$1/.config/autostart/" | ||
182 | 176 | cat > /home/$1/.config/autostart/oem-dev-firstboot.desktop << EOF | ||
183 | 177 | [Desktop Entry] | ||
184 | 178 | Version=1.0 | ||
185 | 179 | Encoding=UTF-8 | ||
186 | 180 | Name=Local Sanity | ||
187 | 181 | Type=Application | ||
188 | 182 | Terminal=true | ||
189 | 183 | Exec=/usr/bin/oem-dev-firstboot | ||
190 | 184 | Categories=System;Settings | ||
191 | 185 | EOF | ||
192 | 186 | cat > /home/$1/.config/checkbox.conf <<EOF | ||
193 | 187 | [environment] | ||
194 | 188 | ROUTERS = multiple | ||
195 | 189 | OPEN_N_SSID = ubuntu-cert-n-open | ||
196 | 190 | OPEN_BG_SSID = ubuntu-cert-bg-open | ||
197 | 191 | OPEN_AC_SSID = ubuntu-cert-ac-open | ||
198 | 192 | OPEN_AX_SSID = ubuntu-cert-ax-open | ||
199 | 193 | WPA_N_SSID = ubuntu-cert-n-wpa | ||
200 | 194 | WPA_BG_SSID = ubuntu-cert-bg-wpa | ||
201 | 195 | WPA_AC_SSID = ubuntu-cert-ac-wpa | ||
202 | 196 | WPA_AX_SSID = ubuntu-cert-ax-wpa | ||
203 | 197 | WPA_N_PSK = insecure | ||
204 | 198 | WPA_BG_PSK = insecure | ||
205 | 199 | WPA_AC_PSK = insecure | ||
206 | 200 | WPA_AX_PSK = insecure | ||
207 | 201 | SERVER_IPERF = 192.168.1.99 | ||
208 | 202 | TEST_TARGET_IPERF = 192.168.1.99 | ||
209 | 203 | BTDEVADDR = 34:13:E8:9A:52:12 | ||
210 | 204 | |||
211 | 205 | # Transfer server | ||
212 | 206 | TRANSFER_SERVER = cdimage.ubuntu.com | ||
213 | 207 | EOF | ||
214 | 208 | touch "/home/$1/.config/gnome-initial-setup-done" | ||
215 | 209 | chown -R "$1.$1" "/home/u/.config" | ||
216 | 210 | ` | ||
217 | 211 | check(ioutil.WriteFile("squashrw/usr/bin/oem-dev-firstboot-autostart", []byte(oemDevFirstBootAutoStart), 0775)) | ||
218 | 212 | oemDevFirstBootPostInstall := `#!/bin/bash | ||
219 | 213 | set -x | ||
220 | 214 | /usr/bin/oem-dev-firstboot-autostart u | ||
221 | 215 | ` | ||
222 | 216 | check(ioutil.WriteFile("squashrw/usr/lib/oem-config/post-install/oem-dev-firstboot", []byte(oemDevFirstBootPostInstall), 0775)) | ||
223 | 217 | } | ||
224 | 218 | // ubiquity | ||
225 | 219 | ubiquity, err := ioutil.ReadFile("squashrw/usr/lib/ubiquity/bin/ubiquity") | ||
226 | 220 | check(err) | ||
227 | 221 | ubiquity = bytes.Replace(ubiquity, []byte("def run_oem_hooks():\n \"\"\"Run hook scripts from /usr/lib/oem-config/post-install.\"\"\"\n hookdir = '/usr/lib/oem-config/post-install'\n"), []byte("def run_oem_hooks(hookdir):\n \"\"\"Run hook scripts from hookdir.\"\"\""), -1) | ||
228 | 222 | ubiquity = bytes.Replace(ubiquity, []byte("if oem_config:\n run_oem_hooks()"), []byte("if oem_config:\n run_oem_hooks('/usr/lib/oem-config/post-install')"), -1) | ||
229 | 223 | ubiquity = bytes.Replace(ubiquity, []byte("if args"), []byte("if oem_config:\n run_oem_hooks('/usr/lib/oem-config/pre-install')\n\n if args"), -1) | ||
230 | 224 | check(ioutil.WriteFile("squashrw/usr/lib/ubiquity/bin/ubiquity", ubiquity, 0755)) | ||
231 | 225 | |||
232 | 226 | // recovery | ||
233 | 227 | recovery, err := ioutil.ReadFile("squashrw/usr/lib/ubiquity/plugins/ubuntu-recovery.py") | ||
234 | 228 | check(err) | ||
235 | 229 | // check if this change already landed to ubuntu-recovery package (version >= 0.4.9~20.04ouagadougou22) | ||
236 | 230 | if !bytes.Contains(recovery, []byte("'UBIQUITY_AUTOMATIC' in os.environ")) { | ||
237 | 231 | recovery = bytes.Replace(recovery, []byte("os.path.exists(\"/cdrom/.oem/bypass_create_media\")"), []byte("os.path.exists(\"/cdrom/.oem/bypass_create_media\") or ('UBIQUITY_AUTOMATIC' in os.environ)"), -1) | ||
238 | 232 | check(ioutil.WriteFile("squashrw/usr/lib/ubiquity/plugins/ubuntu-recovery.py", recovery, 0755)) | ||
239 | 233 | } | ||
240 | 234 | |||
241 | 235 | // bootstrap | ||
242 | 236 | bootstrap, err := ioutil.ReadFile("squashrw/usr/lib/ubiquity/plugins/ubuntu-bootstrap.py") | ||
243 | 237 | check(err) | ||
244 | 238 | bootstrap = bytes.Replace(bootstrap, []byte("gi.require_version('UDisks', '2.0')\n"), []byte("gi.require_version('UDisks', '2.0')\nfrom gi.repository import GLib\n"), -1) | ||
245 | 239 | bootstrap = bytes.Replace(bootstrap, []byte("self.interactive_recovery.set_sensitive(False)\n self.automated_recovery.set_sensitive(False)"), []byte("self.interactive_recovery.set_sensitive(False)\n self.automated_recovery.set_sensitive(False)\n if value == \"dev\" and stage == 1:\n self.automated_recovery.set_active(True)\n self.controller.allow_go_forward(True)\n GLib.timeout_add(5000, self.controller.go_forward)\n"), -1) | ||
246 | 240 | bootstrap = bytes.Replace(bootstrap, []byte("elif rec_type == 'hdd' or rec_type == 'dev':"), []byte("elif rec_type == 'hdd' or (rec_type == 'dev' and self.stage == 2):"), -1) | ||
247 | 241 | bootstrap = bytes.Replace(bootstrap, []byte("or rec_type == 'hdd' or rec_type == 'dev':"), []byte("or rec_type == 'hdd' or (rec_type == 'dev' and self.stage == 2):"), -1) | ||
248 | 242 | bootstrap = bytes.Replace(bootstrap, []byte("rpconf.rec_type == \"factory\""), []byte("(rpconf.rec_type == \"factory\" or rpconf.rec_type == \"dev\")"), -1) | ||
249 | 243 | check(ioutil.WriteFile("squashrw/usr/lib/ubiquity/plugins/ubuntu-bootstrap.py", bootstrap, 0755)) | ||
250 | 244 | |||
251 | 245 | // user ubuntu, reservation for MAAS, cloud init etc. | ||
252 | 246 | uUbuntu := `#!/bin/bash | ||
253 | 247 | adduser --disabled-password --gecos "" ubuntu | ||
254 | 248 | adduser ubuntu sudo | ||
255 | 249 | ` | ||
256 | 250 | check(ioutil.WriteFile("squashrw/usr/lib/oem-config/post-install/u-ubuntu", []byte(uUbuntu), 0775)) | ||
257 | 251 | |||
258 | 252 | // gconf-modification | ||
259 | 253 | gconfModification := `#!/bin/bash | ||
260 | 254 | cat <<EOF >> /usr/share/glib-2.0/schemas/certification.gschema.override | ||
261 | 255 | [org.gnome.settings-daemon.plugins.power] | ||
262 | 256 | idle-dim=false | ||
263 | 257 | #sleep-display-ac=0 | ||
264 | 258 | sleep-inactive-ac-timeout=0 | ||
265 | 259 | sleep-inactive-battery-timeout=0 | ||
266 | 260 | [org.gnome.desktop.session] | ||
267 | 261 | idle-delay=0 | ||
268 | 262 | [org.gnome.desktop.screensaver] | ||
269 | 263 | ubuntu-lock-on-suspend=false | ||
270 | 264 | lock-enabled=false | ||
271 | 265 | idle-activation-enabled=false | ||
272 | 266 | EOF | ||
273 | 267 | |||
274 | 268 | glib-compile-schemas /usr/share/glib-2.0/schemas | ||
275 | 269 | ` | ||
276 | 270 | check(ioutil.WriteFile("squashrw/usr/lib/oem-config/post-install/gconf-modification", []byte(gconfModification), 0775)) | ||
277 | 271 | |||
278 | 272 | // disable unattended update of APT | ||
279 | 273 | oemDisableUattn := `#!/usr/bin/python3 | ||
280 | 274 | import softwareproperties | ||
281 | 275 | from softwareproperties import SoftwareProperties | ||
282 | 276 | import os | ||
283 | 277 | |||
284 | 278 | # given | ||
285 | 279 | # euid,eguid 1000,1000 | ||
286 | 280 | # ruid,rguid 0, 0 | ||
287 | 281 | # we need to seteuid to 0 so we have permission. | ||
288 | 282 | os.seteuid(0) | ||
289 | 283 | os.setegid(0) | ||
290 | 284 | |||
291 | 285 | s = SoftwareProperties.SoftwareProperties() | ||
292 | 286 | s.set_update_automation_level(softwareproperties.UPDATE_MANUAL) | ||
293 | 287 | |||
294 | 288 | print("OK") | ||
295 | 289 | ` | ||
296 | 290 | check(ioutil.WriteFile("squashrw/usr/lib/oem-config/post-install/oem-disable-uattn", []byte(oemDisableUattn), 0775)) | ||
297 | 291 | |||
298 | 292 | // sudoers | ||
299 | 293 | sudoers := "%sudo ALL=(ALL:ALL) NOPASSWD: ALL\n" | ||
300 | 294 | check(ioutil.WriteFile("squashrw/etc/sudoers.d/oem-config-hack-nopwd", []byte(sudoers), 0664)) | ||
301 | 295 | |||
302 | 296 | // make new squashfs | ||
303 | 297 | cmd = exec.Command("mksquashfs", "squashrw", "isorw/casper/filesystem.squashfs", "-noappend") | ||
304 | 298 | check(cmd.Run()) | ||
305 | 299 | |||
306 | 300 | // projectCfg | ||
307 | 301 | projectCfg, err := ioutil.ReadFile("isorw/preseed/project.cfg") | ||
308 | 302 | check(err) | ||
309 | 303 | // change recovery_type to dev | ||
310 | 304 | projectCfg = bytes.Replace(projectCfg, []byte("# Hide"), []byte("ubiquity ubuntu-recovery/recovery_type string dev\n\n# Hide"), -1) | ||
311 | 305 | // change poweroff to reboot | ||
312 | 306 | projectCfg = bytes.Replace(projectCfg, []byte("ubiquity/reboot boolean false"), []byte("ubiquity/reboot boolean true"), -1) | ||
313 | 307 | projectCfg = bytes.Replace(projectCfg, []byte("ubiquity/poweroff boolean true"), []byte("ubiquity/poweroff boolean false"), -1) | ||
314 | 308 | check(ioutil.WriteFile("isorw/preseed/project.cfg", projectCfg, 0755)) | ||
315 | 309 | |||
316 | 310 | // make new ISO | ||
317 | 311 | cmd = exec.Command("genisoimage", "-J", "-l", "-cache-inodes", "-allow-multidot", "-r", "-input-charset", "utf-8", "-eltorito-alt-boot", "-efi-boot", "boot/grub/efi.img", "-no-emul-boot", "-o", parentDir+"/"+filepath.Base(baseiso)+"."+filepath.Base(autoISODir)+".iso", "isorw") | ||
318 | 312 | check(cmd.Run()) | ||
319 | 313 | |||
320 | 314 | if !*keepFolder { | ||
321 | 315 | check(os.RemoveAll(autoISODir)) | ||
322 | 316 | fmt.Printf("autoISO done.\n") | ||
323 | 317 | } else { | ||
324 | 318 | fmt.Printf("autoISO done. Temporary folder %v keeped.\n", autoISODir) | ||
325 | 319 | } | ||
326 | 320 | } | ||
327 | 321 | } | ||
328 | diff --git a/debian/changelog b/debian/changelog | |||
329 | index 38037d5..049e0a6 100644 | |||
330 | --- a/debian/changelog | |||
331 | +++ b/debian/changelog | |||
332 | @@ -1,3 +1,9 @@ | |||
333 | 1 | oem-scripts (1.9) focal; urgency=medium | ||
334 | 2 | |||
335 | 3 | * Add autoISO.go to oem-scripts. | ||
336 | 4 | |||
337 | 5 | -- Shengyao Xue <shengyao.xue@canonical.com> Fri, 20 Aug 2021 16:04:49 +0800 | ||
338 | 6 | |||
339 | 1 | oem-scripts (1.8) focal; urgency=medium | 7 | oem-scripts (1.8) focal; urgency=medium |
340 | 2 | 8 | ||
341 | 3 | * debian/tests/mir-bug, | 9 | * debian/tests/mir-bug, |
342 | diff --git a/debian/control b/debian/control | |||
343 | index 7ef7aa5..2427bba 100644 | |||
344 | --- a/debian/control | |||
345 | +++ b/debian/control | |||
346 | @@ -6,6 +6,7 @@ Build-Depends: | |||
347 | 6 | debhelper (>=11), | 6 | debhelper (>=11), |
348 | 7 | dh-python, | 7 | dh-python, |
349 | 8 | flake8, | 8 | flake8, |
350 | 9 | golang-go, | ||
351 | 9 | python3-all, | 10 | python3-all, |
352 | 10 | python3-debian, | 11 | python3-debian, |
353 | 11 | python3-launchpadlib, | 12 | python3-launchpadlib, |
354 | diff --git a/debian/install b/debian/install | |||
355 | 12 | new file mode 100644 | 13 | new file mode 100644 |
356 | index 0000000..b1f5851 | |||
357 | --- /dev/null | |||
358 | +++ b/debian/install | |||
359 | @@ -0,0 +1 @@ | |||
360 | 1 | autoISO /usr/sbin/ | ||
361 | diff --git a/debian/rules b/debian/rules | |||
362 | index 98284ec..02ab8ad 100755 | |||
363 | --- a/debian/rules | |||
364 | +++ b/debian/rules | |||
365 | @@ -3,6 +3,8 @@ | |||
366 | 3 | 3 | ||
367 | 4 | %: | 4 | %: |
368 | 5 | dh $@ --with python3 --buildsystem=pybuild | 5 | dh $@ --with python3 --buildsystem=pybuild |
369 | 6 | go build autoISO.go | ||
370 | 7 | strip autoISO | ||
371 | 6 | 8 | ||
372 | 7 | override_dh_auto_test: | 9 | override_dh_auto_test: |
373 | 8 | ./tests/test_black | 10 | ./tests/test_black |