#!/bin/bash
install_path=${1}
package_arch=${2}
install_for_all_flag=${3}
pylocal=y
function get_right() {
if [ "$install_for_all_flag" = 1 ] || [ "$UID" = "0" ]; then
right=${root_right}
else
right=${user_right}
fi
}
function install_whl_package() {
local _pylocal=$1
local _package=$2
local _pythonlocalpath=$3
print "INFO" "Start to install ${_package}."
if [ ! -f "${_package}" ]; then
print "ERROR" "Install whl The ${_package} does not exist."
return 1
fi
if [ "-${_pylocal}" = "-y" ]; then
pip3 install --upgrade --no-deps --force-reinstall --disable-pip-version-check "${_package}" -t "${_pythonlocalpath}" > /dev/null 2>&1
else
if [ "$(id -u)" -ne 0 ]; then
pip3 install --upgrade --no-deps --force-reinstall --disable-pip-version-check "${_package}" --user > /dev/null 2>&1
else
pip3 install --upgrade --no-deps --force-reinstall --disable-pip-version-check "${_package}" > /dev/null 2>&1
fi
fi
if [ $? -ne 0 ]; then
print "ERROR" "Install ${_package} failed."
return 1
fi
chmod -R u+rwx,go+rx,go-w "${_pythonlocalpath}"
print "INFO" "Install ${_package} success."
return 0
}
function implement_install() {
create_directory ${install_path}/${MSPROF_PATH} ${right}
create_directory ${install_path}/${arch_name}/lib64 ${right}
create_directory ${install_path}/${arch_name}/include/acl ${right}
create_directory ${install_path}/${arch_name}/include/ge ${right}
create_directory ${install_path}/${ANALYSIS_PATH} ${right}
create_directory ${install_path}/${SHARE_INFO_DIR}/${MSPROF} ${right}
create_directory ${install_path}/${SAMPLE_PATH} ${right}
copy_file ${UNINSTALL_SCRIPT} ${install_path}/${SHARE_INFO_DIR}/${MSPROF}/${UNINSTALL_SCRIPT}
copy_file ${UTILS_SCRIPT} ${install_path}/${SHARE_INFO_DIR}/${MSPROF}/${UTILS_SCRIPT}
copy_file ${VERSION_INFO} ${install_path}/${SHARE_INFO_DIR}/${MSPROF}/${VERSION_INFO}
copy_file ${MSPROF} ${install_path}/${MSPROF_PATH}/${MSPROF}
copy_file ${LIB_MS_PROFILER} ${install_path}/${arch_name}/lib64/${LIB_MS_PROFILER}
copy_file ${LIB_PROF_API} ${install_path}/${arch_name}/lib64/${LIB_PROF_API}
copy_file ${LIB_PROF_IMPL} ${install_path}/${arch_name}/lib64/${LIB_PROF_IMPL}
copy_file ${ACL_PROF_H} ${install_path}/${arch_name}/include/acl/${ACL_PROF_H}
copy_file ${GE_PROF_H} ${install_path}/${arch_name}/include/ge/${GE_PROF_H}
copy_file ${SAMPLE} ${install_path}/${SAMPLE_PATH}
chmod -R 755 ${install_path}/${ANALYSIS_PATH}
copy_file ${ANALYSIS} ${install_path}/${ANALYSIS_PATH}/${ANALYSIS}
source_whl=$(ls msprof-*-py3-none-any.whl 2>/dev/null | head -1)
if [ -f "$source_whl" ]; then
rm -f "${install_path}/${ANALYSIS_PATH}"/msprof-*-py3-none-any.whl
cp "$source_whl" "${install_path}/${ANALYSIS_PATH}"
install_whl_package $pylocal ${source_whl} ${install_path}/${ANALYSIS_PATH}
chmod -R 755 ${install_path}/${ANALYSIS_PATH}
fi
if [ $? -ne 0 ]; then
print "ERROR" "Install msprof analysis whl failed."
return 1
fi
if [[ -s "${PLATFORM_PROFILER_RUN}" ]]; then
chmod u+x "${PLATFORM_PROFILER_RUN}"
if ./"${PLATFORM_PROFILER_RUN}" --install --install-path="${install_path}"; then
echo "INFO: ${PLATFORM_PROFILER_RUN} installed successfully to ${install_path}"
else
echo "ERROR: ${PLATFORM_PROFILER_RUN} installation failed" >&2
fi
fi
}
function create_directory() {
local _dir=${1}
local _right=${2}
if [ ! -d "${_dir}" ]; then
mkdir -p ${_dir}
chmod ${_right} ${_dir}
fi
}
function copy_file() {
local filename=${1}
local target_file=$(readlink -f ${2})
if [ ! -f "$filename" ] && [ ! -d "$filename" ]; then
return
fi
if [ -f "$target_file" ] || [ -d "$target_file" ]; then
local parent_dir=$(dirname ${target_file})
local parent_right=$(stat -c '%a' ${parent_dir})
chmod u+w ${parent_dir}
chmod -R u+w ${target_file}
rm -r ${target_file}
cp -r ${filename} ${target_file}
chmod -R ${parent_right} ${target_file}
chmod ${parent_right} ${parent_dir}
else
cp -r ${filename} ${target_file}
chmod -R ${right} ${target_file}
fi
print "INFO" "$filename is replaced."
}
function chmod_ini_file() {
local ini_config_dir=${install_path}${ANALYSIS_PATH}${ANALYSIS}"/config"
if [ -d "$ini_config_dir" ]; then
if [ "$install_for_all_flag" = "1" ] || [ "$UID" = "0" ]; then
find "${ini_config_dir}" -type f -exec chmod ${root_ini_right} {} \;
else
find "${ini_config_dir}" -type f -exec chmod ${user_ini_right} {} \;
fi
fi
}
function set_libmsprofiler_right() {
libmsprofiler_right=${user_libmsprofiler_right}
if [ "$install_for_all_flag" = "1" ] || [ "$UID" = "0" ]; then
libmsprofiler_right=${root_libmsprofiler_right}
fi
}
function chmod_libmsprofiler() {
if [ -f "${install_path}/${arch_name}/lib64/${LIB_MS_PROFILER}" ]; then
chmod ${libmsprofiler_right} "${install_path}/${arch_name}/lib64/${LIB_MS_PROFILER}"
fi
if [ -f "${install_path}/${arch_name}/lib64/${LIB_PROF_API}" ]; then
chmod ${libmsprofiler_right} "${install_path}/${arch_name}/lib64/${LIB_PROF_API}"
fi
if [ -f "${install_path}/${arch_name}/lib64/${LIB_PROF_IMPL}" ]; then
chmod ${libmsprofiler_right} "${install_path}/${arch_name}/lib64/${LIB_PROF_IMPL}"
fi
}
function register_uninstall() {
local target_line='uninstall_package "share/info/msprof"'
if [ ! -f "${install_path}/${SHARE_INFO_DIR}/${MSPROF}/${UNINSTALL_SCRIPT}" ]; then
print "ERROR" "No such file: ${install_path}/${SHARE_INFO_DIR}/${MSPROF}/${UNINSTALL_SCRIPT}"
fi
if [ ! -x "${install_path}/${SHARE_INFO_DIR}/${MSPROF}/${UNINSTALL_SCRIPT}" ]; then
print "ERROR" "The file ${install_path}/${SHARE_INFO_DIR}/${MSPROF}/${UNINSTALL_SCRIPT} is not executable."
return 1
fi
if [ ! -f "${install_path}/${CANN_UNINSTALL_SCRIPT}" ]; then
print "ERROR" "Failed to register uninstall script, no such file: ${install_path}/${CANN_UNINSTALL_SCRIPT}"
return 1
fi
if grep -qxF "${target_line}" "${install_path}/${CANN_UNINSTALL_SCRIPT}"; then
return 0
fi
local script_right=$(stat -c '%a' "${install_path}/${CANN_UNINSTALL_SCRIPT}")
chmod u+w "${install_path}/${CANN_UNINSTALL_SCRIPT}"
sed -i "/^exit /i uninstall_package \"share\/info\/msprof\"" "${install_path}/${CANN_UNINSTALL_SCRIPT}"
chmod ${script_right} "${install_path}/${CANN_UNINSTALL_SCRIPT}"
}
source utils.sh
right=${user_right}
arch_name="${package_arch}-linux"
get_right
implement_install
if [ $? -eq 0 ]; then
register_uninstall
fi
chmod_ini_file
set_libmsprofiler_right
chmod_libmsprofiler