forked from freifunk-berlin/bbb-configs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimagebuilder.yml
184 lines (158 loc) · 5.26 KB
/
imagebuilder.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
---
- name: Create images dir
file:
state: directory
path: "{{ images_dir }}"
mode: "755"
run_once: true
- name: Clear old image and logfile
file:
state: absent
path: "{{ item }}"
loop:
- "{{ images_dir }}/{{ inventory_hostname }}.bin"
- "{{ images_dir }}/{{ inventory_hostname }}.img"
- "{{ images_dir }}/{{ inventory_hostname }}.itb"
- "{{ images_dir }}/{{ inventory_hostname }}.log"
- name: Create Download directory
file:
path: "{{ dl_dir }}"
state: directory
mode: "755"
run_once: true
- name: Set destination path for imagebuilder
set_fact:
imagebuilder_path: "{{ dl_dir }}/{{ imagebuilder | basename }}"
- name: Download Imagebuilder if upstream is newer
get_url:
url: "{{ imagebuilder }}"
dest: "{{ dl_dir }}/{{ imagebuilder_filename }}"
mode: "644"
when: '"http" in imagebuilder'
# For testing purposes the imagebuilder variable can be replaced with a path to a local file.
# This task takes care of using this file instead of trying to download something
- name: Copy Local Imagebuilder
command:
argv:
- "cp"
- "{{ imagebuilder }}"
- "{{ dl_dir }}"
when: '"http" not in imagebuilder'
changed_when: true
- name: Clear workdir
file:
state: absent
path: "{{ build_dir }}"
- name: (Re)-Create workdir
file:
state: directory
path: "{{ build_dir }}"
mode: "755"
- name: Extract imagebuilder
unarchive:
src: "{{ imagebuilder_path }}"
dest: "{{ build_dir }}"
extra_opts: ['--strip=1']
- name: Read instruction set
shell:
chdir: "{{ build_dir }}"
cmd: grep -oP 'CONFIG_TARGET_ARCH_PACKAGES="\K[^"]+' .config
register: instr_set_result
when: 'instr_set is not defined and feed_version is defined'
changed_when: false
- name: Extract Instruction set if needed
set_fact:
instr_set: "{{ instr_set_result.stdout_lines | first }}"
when: 'instr_set is not defined and feed_version is defined'
- name: Insert falter OPKG feed
lineinfile:
path: "{{ build_dir }}/repositories.conf"
line: "{{ feed }}"
when: 'feed_version is defined and openwrt_version != "snapshot"'
- name: Add falter OPKG feed key
copy:
src: "files/packagefeed_master.pub"
dest: "{{ build_dir }}/keys/61a078a38408e710" # matches fingerprint
mode: "preserve"
when: 'feed_version is defined'
- name: Disable OPKG signature verification if required
lineinfile:
path: "{{ build_dir }}/repositories.conf"
line: "option check_signature"
state: "absent"
when: 'imagebuilder_disable_signature_check is defined and imagebuilder_disable_signature_check'
- name: Add falter APK feed
lineinfile:
path: "{{ build_dir }}/repositories"
line: "{{ feed }}"
when: 'feed_version is defined and openwrt_version == "snapshot"'
- name: Add falter APK feed to image
lineinfile:
path: "{{ configs_dir }}/etc/apk/repositories.d/falter.list"
line: "{{ feed }}"
create: true
when: 'feed_version is defined and openwrt_version == "snapshot"'
- name: Add falter APK feed key
copy:
src: "files/falter.snapshot.pem"
dest: "{{ build_dir }}/keys/"
mode: "preserve"
when: 'feed_version is defined and openwrt_version == "snapshot"'
- name: Add falter APK feed key to image
copy:
src: "files/falter.snapshot.pem"
dest: "{{ configs_dir }}/etc/apk/keys/"
mode: "preserve"
when: 'feed_version is defined and openwrt_version == "snapshot"'
- name: Add custom APK feed key
copy:
src: "{{ feed_key }}"
dest: "{{ build_dir }}/keys/falter.custom.pem"
mode: "preserve"
when: 'feed_version is defined and openwrt_version == "snapshot" and feed_key is defined'
- name: Add custom APK feed key to image
copy:
src: "{{ feed_key }}"
dest: "{{ configs_dir }}/etc/apk/keys/falter.custom.pem"
mode: "preserve"
when: 'feed_version is defined and openwrt_version == "snapshot" and feed_key is defined'
- name: Override compat_version check to bbb-configs exclusive value 9.9
lineinfile:
path: "{{ build_dir }}/include/image-commands.mk"
search_string: "compat_version=$(if $(DEVICE_COMPAT_VERSION),$(DEVICE_COMPAT_VERSION),1.0)"
line: "compat_version=9.9"
- name: Run Imagebuilder
changed_when: false
command:
chdir: "{{ build_dir }}"
argv:
- "bash"
- "-c"
- "make image PROFILE='{{ override_target | default(model) }}' PACKAGES='{{ packages | join(' ') }}' DISABLED_SERVICES='{{ disabled_services | join(' ') }}' FILES='{{ configs_dir }}' 1>&2"
register: output
- name: Write build log to output dir
copy:
content: "{{ output.stderr }}"
dest: "{{ images_dir }}/{{ inventory_hostname }}.log"
mode: "preserve"
- name: Find output image
find:
paths: "{{ build_dir }}/bin/"
patterns: "{{ image_search_pattern }}"
recurse: true
register: image_list
- name: Check Imagebuilder result
assert:
that: image_list.files | length > 0
fail_msg: 'No image was built, check log at {{ images_dir }}/{{ inventory_hostname }}.log'
- name: Declare source
set_fact:
image_src: "{{ image_list.files | map(attribute='path') | list | first }}"
- name: Declare target
set_fact:
image: "{{ images_dir }}/{{ inventory_hostname }}{{ image_src | splitext | last }}"
- name: Copy Image to Image dir
copy:
src: "{{ image_src }}"
dest: "{{ image }}"
mode: "preserve"