diff options
Diffstat (limited to 'meta/recipes-devtools/installer/adt-installer/adt_installer')
-rwxr-xr-x | meta/recipes-devtools/installer/adt-installer/adt_installer | 419 |
1 files changed, 419 insertions, 0 deletions
diff --git a/meta/recipes-devtools/installer/adt-installer/adt_installer b/meta/recipes-devtools/installer/adt-installer/adt_installer new file mode 100755 index 0000000000..1f2d039598 --- /dev/null +++ b/meta/recipes-devtools/installer/adt-installer/adt_installer | |||
@@ -0,0 +1,419 @@ | |||
1 | #!/bin/bash | ||
2 | # Yocto ADT Installer | ||
3 | # | ||
4 | # Copyright 2010-2011 by Intel Corp. | ||
5 | # | ||
6 | # Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | # of this software and associated documentation files (the "Software"), to deal | ||
8 | # in the Software without restriction, including without limitation the rights | ||
9 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
10 | # copies of the Software, and to permit persons to whom the Software is | ||
11 | # furnished to do so, subject to the following conditions: | ||
12 | |||
13 | # The above copyright notice and this permission notice shall be included in | ||
14 | # all copies or substantial portions of the Software. | ||
15 | |||
16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
20 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
21 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
22 | # THE SOFTWARE. | ||
23 | |||
24 | |||
25 | usage () | ||
26 | { | ||
27 | |||
28 | INST_ARCH=`uname -m` | ||
29 | INST_OS=`uname -o| tr '[A-Z]' '[a-z]'` | ||
30 | INST_KR=`uname -r| tr '[A-Z]' '[a-z]'` | ||
31 | |||
32 | echo_info "#########################################################################" | ||
33 | echo_info "# Welcome to Yocto Application Developement Tools (ADT) Installer" | ||
34 | echo_info "# " | ||
35 | echo_info "# Host Machine:\t\t\t\t"$INST_ARCH | ||
36 | echo_info "# OS info:\t\t\t\t$INST_KR" | ||
37 | echo_info "# Yocto ADT version to be installed:\t$YOCTOADT_VERSION" | ||
38 | echo_info "# supported target architectures:\t$YOCTOADT_SUPPORTED_TARGETS" | ||
39 | echo_info "# supported target root_fs images:\t$YOCTOADT_SUPPORTED_ROOTFS" | ||
40 | echo_info "#########################################################################\n" | ||
41 | |||
42 | echo_info "Systemwide installation. Installation will occur under $INSTALL_FOLDER\n" | ||
43 | echo_info "############################################################################" | ||
44 | echo_info "# Your system installation configurations from adt_installer.conf" | ||
45 | echo_info "############################################################################" | ||
46 | |||
47 | echo_info "# Cross toolchains:\t\t$YOCTOADT_TARGETS" | ||
48 | echo_info "# Install Qemu:\t\t\t$YOCTOADT_QEMU" | ||
49 | echo_info "# Install NFS utilities:\t$YOCTOADT_NFS_UTIL" | ||
50 | #echo_info "# Install bitbake + UI:\t\t$YOCTOADT_BITBAKE" | ||
51 | #echo_info "# Install metadata:\t$YOCTOADT_METADATA" | ||
52 | #echo_info "############################################################################\n" | ||
53 | |||
54 | echo_info "\n##############################################################################" | ||
55 | echo_info "# Your rootfs image(s) and target sysroot selections from adt_installer.conf" | ||
56 | echo_info "##############################################################################" | ||
57 | prompt=1 | ||
58 | for arch_type in $YOCTOADT_TARGETS; do | ||
59 | download_images $arch_type $prompt | ||
60 | done | ||
61 | echo_info "############################################################################\n" | ||
62 | select_install_type | ||
63 | } | ||
64 | |||
65 | validate_config() | ||
66 | { | ||
67 | |||
68 | for selected_arch_type in $YOCTOADT_TARGETS; do | ||
69 | found=0 | ||
70 | select_machine_var="\$YOCTOADT_TARGET_MACHINE_$selected_arch_type" | ||
71 | select_machine=`eval echo $select_machine_var` | ||
72 | show_error_banner=0 | ||
73 | |||
74 | for supported_arch_type in $YOCTOADT_SUPPORTED_TARGETS; do | ||
75 | if [ "$selected_arch_type" == "$supported_arch_type" ]; then | ||
76 | found=1 | ||
77 | break | ||
78 | fi | ||
79 | done | ||
80 | if [ $found == 0 ]; then | ||
81 | echo_info "[ADT_INST] Error: YOCTADT_TARGETS in adt_installer.conf contains invalid entries: $YOCTOADT_TARGETS. Valid values are: $YOCTOADT_SUPPORTED_TARGETS" | ||
82 | show_error_banner=1 | ||
83 | elif [ -z "$select_machine" ]; then | ||
84 | echo_info "[ADT_INST] Error: No MACHINE was defined for $selected_arch_type architecture! This is needed to install the toolchain and the correct environment settings." | ||
85 | echo_info "[ADT_INST] To do that, in adt-installer.conf, set the following variable: YOCTOADT_TARGET_MACHINE_$selected_arch_type" | ||
86 | show_error_banner=1 | ||
87 | fi | ||
88 | |||
89 | if [ $show_error_banner == 1 ]; then | ||
90 | echo -e "\n#############################################################################" | ||
91 | echo -e "# Meet error(s) when installing Yocto ADT! Please check log file for details. " | ||
92 | echo -e "#############################################################################\n" | ||
93 | exit -1 | ||
94 | fi | ||
95 | done | ||
96 | |||
97 | for arch_type in $YOCTOADT_SUPPORTED_TARGETS; do | ||
98 | #select_target_var="\$YOCTOADT_TARGET_$arch_type" | ||
99 | #select_target=`eval echo $select_target_var` | ||
100 | |||
101 | #if [ "$select_target" != "Y" ] || [ "$selected_target" != "y" ]; then | ||
102 | # continue; | ||
103 | #fi | ||
104 | |||
105 | target_sysroot_image_var="\$YOCTOADT_TARGET_SYSROOT_IMAGE_$arch_type" | ||
106 | target_sysroot_image=`eval echo $target_sysroot_image_var` | ||
107 | |||
108 | |||
109 | select_rootfs_var="\$YOCTOADT_ROOTFS_$arch_type" | ||
110 | select_rootfs=`eval echo $select_rootfs_var` | ||
111 | |||
112 | if [ "$select_rootfs" == "" ] && [ "$target_sysroot_image" == "" ]; then | ||
113 | continue; | ||
114 | fi | ||
115 | |||
116 | for image_type in $select_rootfs; do | ||
117 | #validate rootfs type defined in YOCTOADT_ROOTFS_{ARCH} is valid and in YOCTOADT_SUPPORTED_ROOTFS | ||
118 | found=0 | ||
119 | for supported_rootfs_type in $YOCTOADT_SUPPORTED_ROOTFS; do | ||
120 | if [ "$image_type" == "$supported_rootfs_type" ]; then | ||
121 | found=1 | ||
122 | break | ||
123 | fi | ||
124 | done | ||
125 | if [ $found == 0 ]; then | ||
126 | #the rootfs type listed for downloading is not valid | ||
127 | echo_info "[ADT_INST] Error: Selected YOCTOADT_ROOTFS_$arch_type value: $image_type, is not valid! Valid values are: $YOCTOADT_SUPPORTED_ROOTFS " | ||
128 | echo -e "\n#############################################################################" | ||
129 | echo -e "# Meet error(s) when installing Yocto ADT! Please check log file for details. " | ||
130 | echo -e "#############################################################################\n" | ||
131 | exit -1 | ||
132 | fi | ||
133 | done | ||
134 | |||
135 | found=0 | ||
136 | for image_type in $select_rootfs; do | ||
137 | #validate that rootfs to be extracted must be in the item: YOCTOADT_ROOTFS_${ARCH} | ||
138 | if [ "$target_sysroot_image" == "$image_type" ]; then | ||
139 | found=1 | ||
140 | break | ||
141 | fi | ||
142 | done | ||
143 | # the rootfs image to be extracted is not selected | ||
144 | if [ $found == 0 ]; then | ||
145 | echo_info "[ADT_INST] Error: YOCTOADT_TARGET_SYSROOT_IMAGE_$arch_type selection: $target_sysroot_image is not included in YOCTOADT_ROOTFS_$arch_type selections: $select_rootfs" | ||
146 | echo -e "\n#############################################################################" | ||
147 | echo -e "# Meet error(s) when installing Yocto ADT! Please check log file for details. " | ||
148 | echo -e "#############################################################################\n" | ||
149 | exit -1 | ||
150 | fi | ||
151 | done | ||
152 | } | ||
153 | |||
154 | |||
155 | #detect opkg installed or not, for installing sdk, we will use | ||
156 | #this installed local opkg | ||
157 | install_opkg() | ||
158 | { | ||
159 | if [ ! -x "$LOCAL_OPKG_LOC/bin/opkg-cl" ]; then | ||
160 | echo_info "OPKG is not setup, setting up opkg in local, which is required for installing yocto ADT...\n" | ||
161 | |||
162 | if [ -d $LOCAL_OPKG_LOC ]; then | ||
163 | echo_info "Deleting old OPKG folder, which doesn't contain executables... " | ||
164 | rm -rf $LOCAL_OPKG_LOC | ||
165 | fi | ||
166 | |||
167 | parent_folder=`pwd` | ||
168 | cd $LOCAL_OPKG_FOLDER | ||
169 | check_result | ||
170 | |||
171 | opkg_source_dir=`ls -d opkg-*` | ||
172 | |||
173 | if [ $opkg_source_dir == "" ]; then | ||
174 | echo_info "[ADT_INST] Error: OPKG source directory is not found!" | ||
175 | echo -e "\n#############################################################################" | ||
176 | echo -e "# Meet error(s) when installing Yocto ADT! Please check log file for details. " | ||
177 | echo -e "#############################################################################\n" | ||
178 | exit -1 | ||
179 | fi | ||
180 | |||
181 | cd $opkg_source_dir | ||
182 | check_result | ||
183 | |||
184 | echo_info "Configure opkg ...\n" | ||
185 | ./configure --prefix=$parent_folder/$LOCAL_OPKG_LOC --with-opkglibdir=$OPKG_LIBDIR --enable-shared=no --disable-curl --disable-ssl-curl --disable-gpg --disable-shave >> $parent_folder/$YOCTOADT_INSTALL_LOG_FILE | ||
186 | check_result | ||
187 | |||
188 | echo_info "Make opkg ...\n" | ||
189 | make &>> $parent_folder/$YOCTOADT_INSTALL_LOG_FILE | ||
190 | check_result | ||
191 | |||
192 | echo_info "Make Install opkg ...\n" | ||
193 | make install &>> $parent_folder/$YOCTOADT_INSTALL_LOG_FILE | ||
194 | #if meet error when installing opkg, cancel the installation | ||
195 | check_result | ||
196 | |||
197 | cd $parent_folder | ||
198 | echo_info "Successfully installed OPKG.\n" | ||
199 | fi | ||
200 | } | ||
201 | |||
202 | confirm_download() | ||
203 | { | ||
204 | #avoid repeated reminding | ||
205 | if [ "$override_oldfile" == 1 ]; then | ||
206 | return $pre_result | ||
207 | else | ||
208 | override_oldfile=1 | ||
209 | fi | ||
210 | |||
211 | while true; do | ||
212 | #echo_info "[ADT_INST] Files [$1] already exists. If you continue downloading, old files will be overrided." | ||
213 | #echo_info "[ADT_INST] Further prompts will not be given if there're more existing files to be downloaded." | ||
214 | #echo_info "[ADT_INST] Do you want to continue downloading? Please enter Y/N:" | ||
215 | echo_info "\nFile [$1] already exists, which means you've downloaded the qemu kernel and rootfs file(s) before. If you choose continue downloading, old files will be overridden." | ||
216 | echo_info "[ADT_INST] Do you want to continue downloading? Please enter Y/N:" | ||
217 | read YOCTOADT_INSTALL | ||
218 | YOCTOADT_INSTALL=`tr '[a-z]' '[A-Z]'<<<"$YOCTOADT_INSTALL"` | ||
219 | if [ "$YOCTOADT_INSTALL" == "Y" ]; then | ||
220 | pre_result=0 | ||
221 | return 0 | ||
222 | elif [ "$YOCTOADT_INSTALL" == "N" ]; then | ||
223 | pre_result=1 | ||
224 | return 1 | ||
225 | fi | ||
226 | done | ||
227 | } | ||
228 | |||
229 | download_file() | ||
230 | { | ||
231 | local filename=`echo ${1##*/}` | ||
232 | if [ -f "$LOCAL_DOWNLOAD/$filename" ]; then | ||
233 | confirm_download $filename | ||
234 | result="$?" | ||
235 | if [ ! "$result" == "0" ]; then | ||
236 | return | ||
237 | else | ||
238 | echo "Removing old file [$1]" | ||
239 | rm -rf "$LOCAL_DOWNLOAD/$filename" | ||
240 | fi | ||
241 | fi | ||
242 | echo_info "Downloading file: $filename..." | ||
243 | wget "$YOCTOADT_REPO/rootfs/$1" -P $LOCAL_DOWNLOAD --progress=bar:force 2>&1 | tee -a "$YOCTOADT_INSTALL_LOG_FILE" | ||
244 | } | ||
245 | |||
246 | |||
247 | |||
248 | #Need three input params: | ||
249 | # $1 arch_type(arm powerpc x86 mips) | ||
250 | # $2 machine(qemuarm beagleboard) | ||
251 | # $3 rootfs_image_type (a list of sdk sato minimal lsb) | ||
252 | get_image() | ||
253 | { | ||
254 | local machine=$2 | ||
255 | |||
256 | if [ "$1" == "x86" ] || [ "$1" == "x86_64" ]; then | ||
257 | kernel="bzImage-$machine.bin" | ||
258 | elif [ "$1" == "ppc" ] || [ "$1" == "mips" ]; then | ||
259 | kernel="vmlinux-$machine.bin" | ||
260 | else | ||
261 | kernel="zImage-$machine.bin" | ||
262 | fi | ||
263 | |||
264 | #echo_info "[ADT_INST] Downloading qemu kernel binary: $qemu_kernel" | ||
265 | download_file $machine/$kernel | ||
266 | check_result | ||
267 | |||
268 | for image_type in $select_rootfs; do | ||
269 | #echo_info "[ADT_INST] Downloading rootfs file: core-image-$image_type-$machine.tar.bz2" | ||
270 | filename="core-image-$image_type-$machine.tar.bz2" | ||
271 | download_file $machine/$filename | ||
272 | check_result | ||
273 | done | ||
274 | } | ||
275 | |||
276 | download_images() | ||
277 | { | ||
278 | select_rootfs_var="\$YOCTOADT_ROOTFS_$1" | ||
279 | select_sysroot_image_var="\$YOCTOADT_TARGET_SYSROOT_IMAGE_$1" | ||
280 | select_sysroot_var="\$YOCTOADT_TARGET_SYSROOT_LOC_$1" | ||
281 | select_machine_var="\$YOCTOADT_TARGET_MACHINE_$1" | ||
282 | select_rootfs=`eval echo $select_rootfs_var` | ||
283 | select_sysroot_image=`eval echo $select_sysroot_image_var` | ||
284 | select_sysroot=`eval echo $select_sysroot_var` | ||
285 | select_machine=`eval echo $select_machine_var` | ||
286 | |||
287 | if [ -n "$select_sysroot" ]; then | ||
288 | select_sysroot=`readlink -m $select_sysroot` | ||
289 | fi | ||
290 | |||
291 | if [ "$select_rootfs" != "" ]; then | ||
292 | if [ $2 ]; then | ||
293 | #echo_info "\n############################################################################" | ||
294 | #echo_info "# To be downloaded rootfs image details defined in adt_installer.conf" | ||
295 | #echo_info "############################################################################" | ||
296 | echo_info "# Target architecture:\t\t$1" | ||
297 | echo_info "# Target machine:\t\t$select_machine" | ||
298 | echo_info "# Root_fs images:\t\t$select_rootfs" | ||
299 | echo_info "# Target sysroot image:\t\t$select_sysroot_image" | ||
300 | echo_info "# Target sysroot loc:\t\t$select_sysroot" | ||
301 | echo_info "\n" | ||
302 | #echo_info "############################################################################\n" | ||
303 | else | ||
304 | get_image $1 $select_machine $select_rootfs | ||
305 | fi | ||
306 | fi | ||
307 | } | ||
308 | |||
309 | |||
310 | |||
311 | |||
312 | #Main body of installer | ||
313 | |||
314 | clear | ||
315 | |||
316 | run_path=`dirname $0` | ||
317 | cd $run_path | ||
318 | |||
319 | if [ ! -f "scripts/util" ]; then | ||
320 | echo -e "[ADT_INST] Error: Script file: util, can't be found under: $run_path!" | ||
321 | echo -e "\n#############################################################################" | ||
322 | echo -e "# Meet error(s) when installing Yocto ADT! Please check log file for details. " | ||
323 | echo -e "#############################################################################\n" | ||
324 | exit -1 | ||
325 | fi | ||
326 | |||
327 | if [ ! -f "scripts/adt_installer_internal" ]; then | ||
328 | echo -e "[ADT_INST] Error: Script file: adt_installer_internal, can't be found under: $run_path!" | ||
329 | echo -e "\n#############################################################################" | ||
330 | echo -e "# Meet error(s) when installing Yocto ADT! Please check log file for details. " | ||
331 | echo -e "#############################################################################\n" | ||
332 | exit -1 | ||
333 | fi | ||
334 | |||
335 | config_file="adt_installer.conf" | ||
336 | if [ ! -f "$config_file" ]; then | ||
337 | echo_info "[ADT_INST] Error: Installation configuration file: adt_installer.conf is not found!\n" | ||
338 | echo_info "\n##################################################################################" | ||
339 | echo_info "# Meet error(s) when installing Yocto ADT. Please check log file for details. " | ||
340 | echo_info "##################################################################################\n" | ||
341 | exit -1 | ||
342 | fi | ||
343 | |||
344 | . scripts/data_define | ||
345 | . scripts/util | ||
346 | |||
347 | |||
348 | if [ -f "$YOCTOADT_INSTALL_LOG_FILE" ]; then | ||
349 | rm $YOCTOADT_INSTALL_LOG_FILE | ||
350 | fi | ||
351 | |||
352 | echo -n "Please enter the install location (default: $DEFAULT_INSTALL_FOLDER): " | ||
353 | read INSTALL_FOLDER | ||
354 | |||
355 | if [ "$INSTALL_FOLDER" = "" ]; then | ||
356 | INSTALL_FOLDER=$DEFAULT_INSTALL_FOLDER | ||
357 | fi | ||
358 | |||
359 | eval INSTALL_FOLDER=$(printf "%q" "$INSTALL_FOLDER") | ||
360 | if [ -d "$INSTALL_FOLDER" ]; then | ||
361 | export INSTALL_FOLDER=$(cd "$INSTALL_FOLDER"; pwd) | ||
362 | else | ||
363 | export INSTALL_FOLDER=$(readlink -m "$INSTALL_FOLDER") | ||
364 | fi | ||
365 | |||
366 | if [ -n "$(echo $INSTALL_FOLDER|grep ' ')" ]; then | ||
367 | echo "The target directory path ($INSTALL_FOLDER) contains spaces. Abort!" | ||
368 | exit 1 | ||
369 | fi | ||
370 | |||
371 | clear | ||
372 | |||
373 | usage | ||
374 | |||
375 | user_inst_type="$?" | ||
376 | |||
377 | validate_config | ||
378 | check_result | ||
379 | |||
380 | #check adt_repo exist | ||
381 | wget $YOCTOADT_REPO 2>&1 | tee -a "$YOCTOADT_INSTALL_LOG_FILE" | ||
382 | if grep -q "ERROR 404: Not Found" $YOCTOADT_INSTALL_LOG_FILE; then | ||
383 | echo -e "[ADT_INST] Error: YOCTOADT_REPO does not exist: $YOCTOADT_REPO" | ||
384 | echo -e "\n#############################################################################" | ||
385 | echo -e "# Meet error(s) when installing Yocto ADT! Please check log file for details. " | ||
386 | echo -e "#############################################################################\n" | ||
387 | exit -1 | ||
388 | fi | ||
389 | |||
390 | #firstly we need to install opkg host | ||
391 | install_opkg | ||
392 | |||
393 | #Create folders for holding rootfs/qemu images | ||
394 | if [ ! -d "$LOCAL_DOWNLOAD" ]; then | ||
395 | echo_info "Creating new images downloading folder: $LOCAL_DOWNLOAD ..." | ||
396 | mkdir -p $LOCAL_DOWNLOAD | ||
397 | fi | ||
398 | |||
399 | #downloading required qemu images/rootfs | ||
400 | if [ "$user_inst_type" == "0" ]; then | ||
401 | override_oldfile=1 | ||
402 | else | ||
403 | override_oldfile=0 | ||
404 | fi | ||
405 | |||
406 | for arch_type in $YOCTOADT_TARGETS; do | ||
407 | download_images $arch_type | ||
408 | done | ||
409 | |||
410 | scripts/adt_installer_internal $user_inst_type | ||
411 | |||
412 | result="$?" | ||
413 | #echo_info "\n############################################################" | ||
414 | if [ "$result" == "0" ]; then | ||
415 | echo_info "\n############################################################" | ||
416 | echo_info "# Yocto ADT has been successfully installed." | ||
417 | echo_info "############################################################\n" | ||
418 | fi | ||
419 | |||