summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/installer/adt-installer/adt_installer
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/installer/adt-installer/adt_installer')
-rwxr-xr-xmeta/recipes-devtools/installer/adt-installer/adt_installer419
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 0000000..1f2d039
--- /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
25usage ()
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 "##############################################################################"
57prompt=1
58for arch_type in $YOCTOADT_TARGETS; do
59 download_images $arch_type $prompt
60done
61 echo_info "############################################################################\n"
62 select_install_type
63}
64
65validate_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
157install_opkg()
158{
159if [ ! -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"
199fi
200}
201
202confirm_download()
203{
204#avoid repeated reminding
205if [ "$override_oldfile" == 1 ]; then
206 return $pre_result
207else
208 override_oldfile=1
209fi
210
211while 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
226done
227}
228
229download_file()
230{
231local filename=`echo ${1##*/}`
232if [ -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
241fi
242echo_info "Downloading file: $filename..."
243wget "$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)
252get_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
276download_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
314clear
315
316run_path=`dirname $0`
317cd $run_path
318
319if [ ! -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
325fi
326
327if [ ! -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
333fi
334
335config_file="adt_installer.conf"
336if [ ! -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
342fi
343
344. scripts/data_define
345. scripts/util
346
347
348if [ -f "$YOCTOADT_INSTALL_LOG_FILE" ]; then
349 rm $YOCTOADT_INSTALL_LOG_FILE
350fi
351
352echo -n "Please enter the install location (default: $DEFAULT_INSTALL_FOLDER): "
353read INSTALL_FOLDER
354
355if [ "$INSTALL_FOLDER" = "" ]; then
356 INSTALL_FOLDER=$DEFAULT_INSTALL_FOLDER
357fi
358
359eval INSTALL_FOLDER=$(printf "%q" "$INSTALL_FOLDER")
360if [ -d "$INSTALL_FOLDER" ]; then
361 export INSTALL_FOLDER=$(cd "$INSTALL_FOLDER"; pwd)
362else
363 export INSTALL_FOLDER=$(readlink -m "$INSTALL_FOLDER")
364fi
365
366if [ -n "$(echo $INSTALL_FOLDER|grep ' ')" ]; then
367 echo "The target directory path ($INSTALL_FOLDER) contains spaces. Abort!"
368 exit 1
369fi
370
371clear
372
373usage
374
375user_inst_type="$?"
376
377validate_config
378check_result
379
380#check adt_repo exist
381wget $YOCTOADT_REPO 2>&1 | tee -a "$YOCTOADT_INSTALL_LOG_FILE"
382if 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
388fi
389
390#firstly we need to install opkg host
391install_opkg
392
393#Create folders for holding rootfs/qemu images
394if [ ! -d "$LOCAL_DOWNLOAD" ]; then
395 echo_info "Creating new images downloading folder: $LOCAL_DOWNLOAD ..."
396 mkdir -p $LOCAL_DOWNLOAD
397fi
398
399#downloading required qemu images/rootfs
400if [ "$user_inst_type" == "0" ]; then
401 override_oldfile=1
402else
403 override_oldfile=0
404fi
405
406for arch_type in $YOCTOADT_TARGETS; do
407 download_images $arch_type
408done
409
410scripts/adt_installer_internal $user_inst_type
411
412result="$?"
413#echo_info "\n############################################################"
414if [ "$result" == "0" ]; then
415 echo_info "\n############################################################"
416 echo_info "# Yocto ADT has been successfully installed."
417 echo_info "############################################################\n"
418fi
419