mirror of
https://git.yoctoproject.org/poky
synced 2026-04-26 09:32:14 +02:00
Since the extensible sdk uses bitbake, which can't run as root, the sdk shouldn't be installed as root. Previously it would error out late into setup when bitbake errored saying not to run bitbake as root. Now the script errors with a message saying the extensible sdk can't be installed as root. [Yocto #7545] (From OE-Core rev: 309e8f4e536148056223f50637ed291c48d148ca) Signed-off-by: Randy Witt <randy.e.witt@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
167 lines
4.3 KiB
Bash
167 lines
4.3 KiB
Bash
#!/bin/bash
|
|
|
|
INST_ARCH=$(uname -m | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
|
|
SDK_ARCH=$(echo @SDK_ARCH@ | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
|
|
|
|
verlte () {
|
|
[ "$1" = "`printf "$1\n$2" | sort -V | head -n1`" ]
|
|
}
|
|
|
|
verlt() {
|
|
[ "$1" = "$2" ] && return 1 || verlte $1 $2
|
|
}
|
|
|
|
verlt `uname -r` @OLDEST_KERNEL@
|
|
if [ $? = 0 ]; then
|
|
echo "Error: The SDK needs a kernel > @OLDEST_KERNEL@"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$INST_ARCH" != "$SDK_ARCH" ]; then
|
|
# Allow for installation of ix86 SDK on x86_64 host
|
|
if [ "$INST_ARCH" != x86_64 -o "$SDK_ARCH" != ix86 ]; then
|
|
echo "Error: Installation machine not supported!"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
DEFAULT_INSTALL_DIR="@SDKPATH@"
|
|
SUDO_EXEC=""
|
|
target_sdk_dir=""
|
|
answer=""
|
|
relocate=1
|
|
savescripts=0
|
|
verbose=0
|
|
while getopts ":yd:DRS" OPT; do
|
|
case $OPT in
|
|
y)
|
|
answer="Y"
|
|
[ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR
|
|
;;
|
|
d)
|
|
target_sdk_dir=$OPTARG
|
|
;;
|
|
D)
|
|
verbose=1
|
|
;;
|
|
R)
|
|
relocate=0
|
|
savescripts=1
|
|
;;
|
|
S)
|
|
savescripts=1
|
|
;;
|
|
*)
|
|
echo "Usage: $(basename $0) [-y] [-d <dir>]"
|
|
echo " -y Automatic yes to all prompts"
|
|
echo " -d <dir> Install the SDK to <dir>"
|
|
echo "======== Advanced DEBUGGING ONLY OPTIONS ========"
|
|
echo " -S Save relocation scripts"
|
|
echo " -R Do not relocate executables"
|
|
echo " -D use set -x to see what is going on"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo "@SDK_TITLE@ installer version @SDK_VERSION@"
|
|
echo "==========================================================="
|
|
|
|
if [ $verbose = 1 ] ; then
|
|
set -x
|
|
fi
|
|
|
|
@SDK_PRE_INSTALL_COMMAND@
|
|
|
|
if [ "$target_sdk_dir" = "" ]; then
|
|
read -e -p "Enter target directory for SDK (default: $DEFAULT_INSTALL_DIR): " target_sdk_dir
|
|
[ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR
|
|
fi
|
|
|
|
eval target_sdk_dir=$(echo "$target_sdk_dir"|sed 's/ /\\ /g')
|
|
if [ -d "$target_sdk_dir" ]; then
|
|
target_sdk_dir=$(cd "$target_sdk_dir"; pwd)
|
|
else
|
|
target_sdk_dir=$(readlink -m "$target_sdk_dir")
|
|
fi
|
|
|
|
if [ -n "$(echo $target_sdk_dir|grep ' ')" ]; then
|
|
echo "The target directory path ($target_sdk_dir) contains spaces. Abort!"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -e "$target_sdk_dir/environment-setup-@REAL_MULTIMACH_TARGET_SYS@" ]; then
|
|
echo "The directory \"$target_sdk_dir\" already contains a SDK for this architecture."
|
|
printf "If you continue, existing files will be overwritten! Proceed[y/N]?"
|
|
|
|
default_answer="n"
|
|
else
|
|
printf "You are about to install the SDK to \"$target_sdk_dir\". Proceed[Y/n]?"
|
|
|
|
default_answer="y"
|
|
fi
|
|
|
|
if [ "$answer" = "" ]; then
|
|
read answer
|
|
[ "$answer" = "" ] && answer="$default_answer"
|
|
else
|
|
echo $answer
|
|
fi
|
|
|
|
if [ "$answer" != "Y" -a "$answer" != "y" ]; then
|
|
echo "Installation aborted!"
|
|
exit 1
|
|
fi
|
|
|
|
# Try to create the directory (this will not succeed if user doesn't have rights)
|
|
mkdir -p $target_sdk_dir >/dev/null 2>&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
|
|
if [ "$SDK_EXTENSIBLE" = "1" ]; then
|
|
echo "Unable to access \"$target_sdk_dir\"."
|
|
exit 1
|
|
fi
|
|
|
|
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
|
|
|
|
# now that we have sudo rights, create the directory
|
|
$SUDO_EXEC mkdir -p $target_sdk_dir >/dev/null 2>&1
|
|
fi
|
|
|
|
payload_offset=$(($(grep -na -m1 "^MARKER:$" $0|cut -d':' -f1) + 1))
|
|
|
|
printf "Extracting SDK..."
|
|
tail -n +$payload_offset $0| $SUDO_EXEC tar xj -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
|
|
$SUDO_EXEC sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" -i $env_setup_script
|
|
done
|
|
|
|
@SDK_POST_INSTALL_COMMAND@
|
|
|
|
# delete the relocating script, so that user is forced to re-run the installer
|
|
# if he/she wants another location for the sdk
|
|
if [ $savescripts = 0 ] ; then
|
|
$SUDO_EXEC rm -f ${env_setup_script%/*}/relocate_sdk.py ${env_setup_script%/*}/relocate_sdk.sh
|
|
fi
|
|
|
|
echo "SDK has been successfully set up and is ready to be used."
|
|
echo "Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g."
|
|
echo " \$ . $target_sdk_dir/environment-setup-@REAL_MULTIMACH_TARGET_SYS@"
|
|
|
|
exit 0
|
|
|
|
MARKER:
|