CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
orangepi-xunlong

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.

GitHub Repository: orangepi-xunlong/orangepi-build
Path: blob/next/scripts/build-all-ng.sh
Views: 3960
1
#!/bin/bash
2
#
3
# Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com
4
#
5
# This file is licensed under the terms of the GNU General Public
6
# License version 2. This program is licensed "as is" without any
7
# warranty of any kind, whether express or implied.
8
9
10
# Functions:
11
# unset_all
12
# pack_upload
13
# build_main
14
# array_contains
15
# check_hash
16
# build_all
17
18
19
[[ -z $START ]] && START="0"
20
[[ -z $BSP_BUILD ]] && BSP_BUILD="no"
21
[[ -z $MULTITHREAD ]] && MULTITHREAD="0"
22
[[ -z $STABILITY ]] && STABILITY="stable"
23
[[ -z $BUILD_OPT ]] && BUILD_OPT="image"
24
[[ -z $BRANCH_OVER ]] && BRANCH_OVER=""
25
[[ -z $RELEASE_OVER ]] && RELEASE_OVER=""
26
[[ -z $CLEAN_LEVEL ]] && CLEAN_LEVEL="oldcache"
27
[[ -z $KERNEL_CONFIGURE ]] && KERNEL_CONFIGURE="no"
28
29
# cleanup
30
rm -f /run/orangepi/*.pid
31
mkdir -p /run/orangepi
32
33
# read user defined targets if exits
34
if [[ -f $USERPATCHES_PATH/targets.conf ]]; then
35
36
display_alert "Adding user provided targets configuration"
37
BUILD_TARGETS="${USERPATCHES_PATH}/targets.conf"
38
39
else
40
41
BUILD_TARGETS="${EXTER}/config/targets.conf"
42
43
fi
44
45
unset_all ()
46
{
47
unset LINUXFAMILY LINUXCONFIG KERNELDIR KERNELSOURCE KERNELBRANCH BOOTDIR BOOTSOURCE BOOTBRANCH ARCH UBOOT_USE_GCC \
48
KERNEL_USE_GCC CPUMIN CPUMAX UBOOT_VER KERNEL_VER GOVERNOR BOOTSIZE BOOTFS_TYPE UBOOT_TOOLCHAIN KERNEL_TOOLCHAIN \
49
DEBOOTSTRAP_LIST PACKAGE_LIST_EXCLUDE KERNEL_IMAGE_TYPE write_uboot_platform family_tweaks family_tweaks_bsp \
50
setup_write_uboot_platform uboot_custom_postprocess atf_custom_postprocess family_tweaks_s BOOTSCRIPT \
51
UBOOT_TARGET_MAP LOCALVERSION UBOOT_COMPILER KERNEL_COMPILER BOOTCONFIG_VAR_NAME INITRD_ARCH BOOTENV_FILE BOOTDELAY \
52
ATF_TOOLCHAIN2 MOUNT SDCARD BOOTPATCHDIR KERNELPATCHDIR RELEASE IMAGE_TYPE OVERLAY_PREFIX ASOUND_STATE ATF_COMPILER \
53
ATF_USE_GCC ATFSOURCE ATFDIR ATFBRANCH ATFSOURCEDIR PACKAGE_LIST_RM NM_IGNORE_DEVICES DISPLAY_MANAGER \
54
family_tweaks_bsp_s CRYPTROOT_ENABLE CRYPTROOT_PASSPHRASE CRYPTROOT_SSH_UNLOCK CRYPTROOT_SSH_UNLOCK_PORT \
55
CRYPTROOT_SSH_UNLOCK_KEY_NAME ROOT_MAPPER NETWORK HDMI USB WIRELESS ARMBIANMONITOR FORCE_BOOTSCRIPT_UPDATE \
56
UBOOT_TOOLCHAIN2 toolchain2 BUILD_REPOSITORY_URL BUILD_REPOSITORY_COMMIT BUILD_TARGET HOST BUILD_IMAGE \
57
DEB_STORAGE REPO_STORAGE REPO_CONFIG REPOSITORY_UPDATE PACKAGE_LIST_RELEASE LOCAL_MIRROR COMPILE_ATF \
58
PACKAGE_LIST_BOARD PACKAGE_LIST_FAMILY PACKAGE_LIST_DESKTOP_BOARD PACKAGE_LIST_DESKTOP_FAMILY ATF_COMPILE ATFPATCHDIR OFFSET BOOTSOURCEDIR BOOT_USE_BLOBS \
59
BOOT_SOC DDR_BLOB MINILOADER_BLOB BL31_BLOB BOOT_RK3328_USE_AYUFAN_ATF BOOT_USE_BLOBS BOOT_RK3399_LEGACY_HYBRID \
60
BOOT_USE_MAINLINE_ATF BOOT_USE_TPL_SPL_BLOB OFFLINE_WORK IMAGE_PARTITION_TABLE BOOT_LOGO
61
}
62
63
pack_upload ()
64
{
65
# pack and upload to server or just pack
66
67
local version="${BOARD^}_${REVISION}_${RELEASE}_${BRANCH}_${VER/-$LINUXFAMILY/}"
68
local subdir=""
69
70
cd "${DESTIMG}" || exit
71
72
if [[ -n "${SEND_TO_SERVER}" ]]; then
73
ssh "${SEND_TO_SERVER}" "mkdir -p ${SEND_TO_LOCATION}${BOARD}/{archive,nightly}" &
74
display_alert "Uploading" "Please wait!" "info"
75
nice -n 19 bash -c "rsync -arP --info=progress2 --prune-empty-dirs $DESTIMG/ -e 'ssh -T -c aes128-ctr -o Compression=no -x -p 22' ${SEND_TO_SERVER}:${SEND_TO_LOCATION}${BOARD}/${subdir}; rm -rf ${DESTIMG}/*" &
76
fi
77
}
78
79
80
81
build_main ()
82
{
83
84
# build images which we do pack or kernel
85
#local upload_image="${BOARD^}_$(cat ${SRC}/VERSION)_${RELEASE}_${BRANCH}_*${VER/-$LINUXFAMILY/}"
86
#local upload_subdir="archive"
87
88
[[ $BUILD_DESKTOP == yes ]] && upload_image=${upload_image}_desktop
89
[[ $BUILD_MINIMAL == yes ]] && upload_image=${upload_image}_minimal
90
91
touch "/run/orangepi/${BOARD^}_${BRANCH}_${RELEASE}_${BUILD_DESKTOP}_${BUILD_MINIMAL}.pid";
92
93
if [[ $BUILD_OPT == image ]]; then
94
95
#if ssh ${SEND_TO_SERVER} stat ${SEND_TO_LOCATION}${BOARD}/${upload_subdir}/${upload_image}* \> /dev/null 2\>\&1; then
96
# echo "$n exists $upload_image"
97
#else
98
#shellcheck source=main.sh
99
source "${SRC}"/scripts/main.sh
100
#[[ $BSP_BUILD != yes ]] && pack_upload
101
#fi
102
else
103
104
source "${SRC}"/scripts/main.sh
105
fi
106
107
echo -e "\n"
108
rm "/run/orangepi/${BOARD^}_${BRANCH}_${RELEASE}_${BUILD_DESKTOP}_${BUILD_MINIMAL}.pid"
109
}
110
111
112
113
114
array_contains ()
115
{
116
117
# utility snippet
118
119
local array="$1[@]"
120
local seeking=$2
121
local in=1
122
123
for element in "${!array}"; do
124
if [[ "${element}" == "${seeking}" ]]; then
125
in=0
126
break
127
fi
128
done
129
return $in
130
}
131
132
133
134
135
function build_all()
136
{
137
138
# main routine
139
140
buildall_start=$(date +%s)
141
n=0
142
ARRAY=()
143
buildlist="cat "
144
145
if [[ -f $USERPATCHES_PATH/build_all.config ]]; then
146
147
source $USERPATCHES_PATH/build_all.config
148
149
elif [[ -f $EXTER/config/templates/build_all.config ]]; then
150
151
cp $EXTER/config/templates/build_all.config $USERPATCHES_PATH/
152
source $USERPATCHES_PATH/build_all.config
153
fi
154
155
# building selected ones
156
if [[ -n ${REBUILD_IMAGES} ]]; then
157
158
buildlist="grep -w '"
159
filter="'"
160
for build in $(tr ',' ' ' <<< "${REBUILD_IMAGES}"); do
161
buildlist=$buildlist"$build\|"
162
filter=$filter"$build\|"
163
done
164
buildlist=${buildlist::-2}"'"
165
filter=${filter::-2}"'"
166
fi
167
168
# find unique boards - we will build debs for all variants
169
sorted_unique_ids=($(echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))
170
unique_boards=$(eval "${buildlist}" ${EXTER}/config/targets.conf | sed '/^#/ d' | awk '{print $1}')
171
read -a unique_boards <<< $(echo "${unique_boards[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')
172
173
while read -r line; do
174
175
[[ "${line}" =~ ^#.*$ ]] && continue
176
[[ -n "${REBUILD_IMAGES}" ]] && [[ -z $(echo "${line}" | eval grep -w "${filter}") ]] && continue
177
#[[ $n -lt $START ]] && ((n+=1)) && continue
178
179
unset_all
180
# unset also board related variables
181
unset BOARDFAMILY DESKTOP_AUTOLOGIN DEFAULT_CONSOLE FULL_DESKTOP MODULES_CURRENT MODULES_LEGACY MODULES_DEV \
182
BOOTCONFIG MODULES_BLACKLIST_LEGACY MODULES_BLACKLIST_CURRENT MODULES_BLACKLIST_DEV DEFAULT_OVERLAYS SERIALCON \
183
BUILD_MINIMAL RELEASE ATFBRANCH BOOT_FDT_FILE BOOTCONFIG_DEV
184
185
read -r BOARD BRANCH RELEASE BUILD_TARGET BUILD_STABILITY BUILD_IMAGE <<< "${line}"
186
187
# read all possible configurations
188
source ${EXTER}"/config/boards/${BOARD}".conf 2> /dev/null
189
190
# override branch to build selected branches if defined
191
[[ -n "${BRANCH_OVER}" ]] && [[ ${BRANCH} != ${BRANCH_OVER} ]] && continue
192
# override release to build selected release if defined
193
[[ -n "${RELEASE_OVER}" ]] && [[ "$RELEASE" != ${RELEASE_OVER} ]] && continue
194
# override board to build selected board if defined
195
[[ -n "${BOARD_OVER}" ]] && [[ "$BOARD" != ${BOARD_OVER} ]] && continue
196
197
# small optimisation. we only (try to) build needed kernels
198
if [[ $BUILD_OPT == kernel ]]; then
199
200
source "${EXTER}/config/sources/families/${BOARDFAMILY}.conf" 2> /dev/null
201
array_contains ARRAY "${LINUXFAMILY}${BRANCH}${BUILD_STABILITY}" && continue
202
ARRAY+=("${LINUXFAMILY}${BRANCH}${BUILD_STABILITY}")
203
BOARDFAMILY=${LINUXFAMILY}
204
205
elif [[ $BUILD_OPT == u-boot ]]; then
206
207
source "${EXTER}/config/sources/families/${BOARDFAMILY}.conf" 2> /dev/null
208
array_contains ARRAY "${BOARD}${BRANCH}${BUILD_STABILITY}" && continue
209
ARRAY+=("${BOARD}${BRANCH}${BUILD_STABILITY}")
210
211
elif [[ $BUILD_IMAGE == no ]] ; then
212
213
continue
214
fi
215
216
BUILD_DESKTOP="no"
217
BUILD_MINIMAL="no"
218
219
[[ ${BUILD_TARGET} == "desktop" ]] && BUILD_DESKTOP="yes"
220
[[ ${BUILD_TARGET} == "minimal" ]] && BUILD_MINIMAL="yes"
221
222
# create beta or stable
223
if [[ "${BUILD_STABILITY}" == "${STABILITY}" ]]; then
224
225
((n+=1))
226
227
if [[ $1 != "dryrun" ]] && [[ $n -ge $START ]]; then
228
229
while :
230
do
231
[[ $(find /run/orangepi/*.pid 2>/dev/null | wc -l) -le ${MULTITHREAD} || -z ${MULTITHREAD} ]] && break
232
sleep 5
233
done
234
235
display_alert "Building ${n}."
236
(build_main)
237
238
# create BSP for all boards
239
elif [[ "${BSP_BUILD}" == yes ]]; then
240
241
for BOARD in "${unique_boards[@]}"
242
do
243
source ${EXTER}"/config/boards/${BOARD}".conf 2> /dev/null
244
IFS=',' read -a RELBRANCH <<< $KERNEL_TARGET
245
for BRANCH in "${RELBRANCH[@]}"
246
do
247
RELTARGETS=(xenial buster bionic focal)
248
for RELEASE in "${RELTARGETS[@]}"
249
do
250
display_alert "BSP for ${BOARD} ${BRANCH} ${RELEASE}."
251
build_main
252
# unset non board related stuff
253
unset_all
254
done
255
done
256
done
257
display_alert "Done building all BSP images"
258
exit
259
else
260
# In dryrun it only prints out what will be build
261
printf "%s\t%-32s\t%-8s\t%-14s\t%-6s\t%-6s\t%-6s\n" "${n}." \
262
"$BOARD (${BOARDFAMILY})" "${BRANCH}" "${RELEASE}" "${BUILD_DESKTOP}" "${BUILD_MINIMAL}"
263
fi
264
fi
265
266
done < "${BUILD_TARGETS}"
267
268
}
269
270
# display what will be build
271
echo ""
272
display_alert "Building all targets" "$STABILITY - $BUILD_OPT"
273
274
printf "\n%s\t%-32s\t%-8s\t%-14s\t%-6s\t%-6s\t%-6s\n\n" "" "board" "branch" "release" "XFCE" "minimal"
275
276
# display what we will build
277
build_all "dryrun"
278
279
if [[ $BUILD_ALL != demo ]] ; then
280
281
echo ""
282
# build
283
build_all
284
285
fi
286
287
# wait until they are not finshed
288
sleep 5
289
while :
290
do
291
if [[ $(df | grep -c .tmp) -lt 1 ]]; then
292
break
293
fi
294
sleep 5
295
done
296
297
while :
298
do
299
if [[ -z $(ps -uax | grep 7z | grep OrangePi) ]]; then
300
break
301
fi
302
sleep 5
303
done
304
305
buildall_end=$(date +%s)
306
buildall_runtime=$(((buildall_end - buildall_start) / 60))
307
display_alert "Runtime in total" "${buildall_runtime} min" "info"
308
309