diff options
author | Hongxu Jia <hongxu.jia@windriver.com> | 2012-11-29 08:14:35 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-12-03 14:41:00 +0000 |
commit | e85e1aace604626914a06dab4663094d6dd9b035 (patch) | |
tree | bea63d6a52c78d5123d8b7e15867ba663a81af9c | |
parent | 53294e7c6e4fabc36f0a6a303bfd0e72808e4b41 (diff) | |
download | openembedded-core-e85e1aace604626914a06dab4663094d6dd9b035.tar.gz openembedded-core-e85e1aace604626914a06dab4663094d6dd9b035.tar.bz2 openembedded-core-e85e1aace604626914a06dab4663094d6dd9b035.zip |
populate_sdk_base:tarball installer:add sudo prompt
1.Adds a sudo passwd prompt during installation if the
user couldn't install on the dir.
2.Adds option -d <dir> to enter dir without prompt.
3.Adds option -y for automatic yes to all prompts, a non-
interactive method.
[YOCTO# 3153]
[YOCTO# 3309]
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/classes/populate_sdk_base.bbclass | 69 |
1 files changed, 51 insertions, 18 deletions
diff --git a/meta/classes/populate_sdk_base.bbclass b/meta/classes/populate_sdk_base.bbclass index f1fcde6f44..02ade52d1c 100644 --- a/meta/classes/populate_sdk_base.bbclass +++ b/meta/classes/populate_sdk_base.bbclass @@ -128,12 +128,33 @@ fi DEFAULT_INSTALL_DIR="${SDKPATH}" COMPONENTS_LEN=$(echo ".${SDKPATH}" | sed "s/\// /g" | wc -w) +SUDO_EXEC="" +target_sdk_dir="" +answer="" +while getopts ":yd:" OPT; do + case $OPT in + y) + answer="Y" + [ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR + ;; + d) + target_sdk_dir=$OPTARG + ;; + *) + echo "Usage: $(basename $0) [-y] [-d <dir>]" + echo " -y Automatic yes to all prompts" + echo " -d <dir> Install the SDK to <dir>" + exit 1 + ;; + esac +done printf "Enter target directory for SDK (default: $DEFAULT_INSTALL_DIR): " -read target_sdk_dir - if [ "$target_sdk_dir" = "" ]; then - target_sdk_dir=$DEFAULT_INSTALL_DIR + read target_sdk_dir + [ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR +else + echo "$target_sdk_dir" fi eval target_sdk_dir=$target_sdk_dir @@ -153,10 +174,12 @@ else default_answer="y" fi -read answer if [ "$answer" = "" ]; then - answer="$default_answer" + read answer + [ "$answer" = "" ] && answer="$default_answer" +else + echo $answer fi if [ "$answer" != "Y" -a "$answer" != "y" ]; then @@ -164,47 +187,57 @@ if [ "$answer" != "Y" -a "$answer" != "y" ]; then exit 1 fi +# create dir and don't care about the result. mkdir -p $target_sdk_dir >/dev/null 2>&1 -if [ $? -ne 0 ]; then - echo "Error: Unable to create target directory. Do you have permissions?" - exit 1 + +# if don't have the right to access dir, gain by sudo +if [ ! -x $target_sdk_dir -o ! -w $target_sdk_dir -o ! -r $target_sdk_dir ]; then + SUDO_EXEC=$(which "sudo") + if [ -z $SUDO_EXEC ]; then + echo "No command 'sudo' found, please install sudo first. Abort!" + exit 1 + fi + + # test sudo could gain root right + $SUDO_EXEC pwd >/dev/null 2>&1 + [ $? -ne 0 ] && echo "Sorry, you are not allowed to execute as root." && exit 1 fi payload_offset=$(($(grep -na -m1 "^MARKER:$" $0|cut -d':' -f1) + 1)) printf "Extracting SDK..." -tail -n +$payload_offset $0| tar xj --strip-components=$COMPONENTS_LEN -C $target_sdk_dir +tail -n +$payload_offset $0| $SUDO_EXEC tar xj --strip-components=$COMPONENTS_LEN -C $target_sdk_dir echo "done" printf "Setting it up..." # fix environment paths for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do - sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" -i $env_setup_script + $SUDO_EXEC sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" -i $env_setup_script done # fix dynamic loader paths in all ELF SDK binaries -native_sysroot=$(cat $env_setup_script |grep OECORE_NATIVE_SYSROOT|cut -d'=' -f2|tr -d '"') -dl_path=$(find $native_sysroot/lib -name "ld-linux*") -executable_files=$(find $native_sysroot -type f -perm +111) -${env_setup_script%/*}/relocate_sdk.py $target_sdk_dir $dl_path $executable_files +native_sysroot=$($SUDO_EXEC cat $env_setup_script |grep OECORE_NATIVE_SYSROOT|cut -d'=' -f2|tr -d '"') +dl_path=$($SUDO_EXEC find $native_sysroot/lib -name "ld-linux*") +executable_files=$($SUDO_EXEC find $native_sysroot -type f -perm +111) +$SUDO_EXEC ${env_setup_script%/*}/relocate_sdk.py $target_sdk_dir $dl_path $executable_files if [ $? -ne 0 ]; then echo "SDK could not be set up. Relocate script failed. Abort!" exit 1 fi # replace ${SDKPATH} with the new prefix in all text files: configs/scripts/etc -find $native_sysroot -type f -exec file '{}' \;|grep ":.*ASCII.*text"|cut -d':' -f1|xargs sed -i -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" +$SUDO_EXEC find $native_sysroot -type f -exec file '{}' \;|$SUDO_EXEC grep ":.*ASCII.*text"|cut -d':' -f1|$SUDO_EXEC xargs sed -i -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" # change all symlinks pointing to ${SDKPATH} -for l in $(find $native_sysroot -type l); do - ln -sfn $(readlink $l|sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:") $l +for l in $($SUDO_EXEC find $native_sysroot -type l); do + $SUDO_EXEC ln -sfn $(readlink $l|$SUDO_EXEC sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:") $l done echo done # delete the relocating script, so that user is forced to re-run the installer # if he/she wants another location for the sdk -rm ${env_setup_script%/*}/relocate_sdk.py +$SUDO_EXEC rm ${env_setup_script%/*}/relocate_sdk.py echo "SDK has been successfully set up and is ready to be used." |