动态

详情 返回 返回

dbyum.sh - centos系統下不需要root權限即可實現yum一鍵安裝軟件的bash腳本 - 动态 详情

#!/bin/bash
#dbyum.sh

# 在沒有root權限時,使用yum search和yumdownloader 安裝軟件到指定路徑下

E_BADARGS=65

if [ $# -eq 1 ]
then
  rpm_name=$1
  install_path=${HOME}/yum_custom
elif [ $# -eq 2 ] ; then
  rpm_name=$1
  install_path=$2
else
  echo -e "\nUsage: `basename $0` {rpm_name} [install_path](default: \$HOME/yum_custom)"
  echo "在沒有root權限時,使用yum安裝軟件到指定路徑下(默認:\$HOME/yum_custom)."
  echo "在大多數情況下(有的時候可能也不一定需要),你可以使用yum list | grep xxx 或yum search xxx"
  echo "來查找可用的軟件包名稱作為第一個參數:比如perf命令的準確軟件包名稱是:perf.x86_64"
  echo ""
  exit $E_BADARGS
fi

E_YUM_NOT_INSTALLED=66
E_YUMDOWNLOADER_NOT_INSTALLED=67
E_RPM2CPIO_NOT_INSTALLED=68
E_CPIO_NOT_INSTALLED=69
E_YUM_DOWNLOAD_FAILED=70
E_INVALID_INSTALL_PATH=71
E_INSTALL_FAILED=72


if [ ! -d ${install_path} -o ! -w ${install_path} ]
then
  echo "install_path: ${install_path} is not a directory or not writable!"
  exit $E_INVALID_INSTALL_PATH
fi

if ! type yum &> /dev/null ; then
  echo "You should make sure yum is installed!";
  exit $E_YUM_NOT_INSTALLED
fi

if ! type yumdownloader &> /dev/null ; then
  echo "You should make sure yumdownloader is installed!";
  exit $E_YUMDOWNLOADER_NOT_INSTALLED
fi

if ! type rpm2cpio &> /dev/null ; then
  echo "You should make sure rpm2cpio is installed!";
  exit $E_RPM2CPIO_NOT_INSTALLED
fi

if ! type cpio &> /dev/null ; then
  echo "You should make sure cpio is installed!";
  exit $E_CPIO_NOT_INSTALLED
fi


number=$RANDOM
TMP_DOWNLOAD_DIR=/tmp/rpm.tmp.$number
echo "TMP_DOWNLOAD_DIR: $TMP_DOWNLOAD_DIR"
mkdir -p $TMP_DOWNLOAD_DIR

#yum search rpm_name --->  found its name
yumdownloader --destdir=$TMP_DOWNLOAD_DIR --resolve ${rpm_name}
if [ $? -ne 0 ]
then
  echo "yumdownloader failed!"
  rm -rf $TMP_DOWNLOAD_DIR
  exit $E_YUM_DOWNLOAD_FAILED
fi

cd ${install_path}
install_path=$(pwd)

# 遍歷所有.rpm 文件
for file in $(find "$TMP_DOWNLOAD_DIR" -type f -name "*.rpm"); do
  echo "Installing $file ......"
  if ! rpm2cpio $file | cpio -idmv ; then
    echo "Failed to execute rpm2cpio or cpio for $file!"
    rm -rf $TMP_DOWNLOAD_DIR
    exit $E_INSTALL_FAILED
  fi
done
rm -rf $TMP_DOWNLOAD_DIR

source_file=${install_path}/source.txt

echo "export PATH=$install_path/usr/sbin:$install_path/usr/bin:$install_path/bin:\${PATH}" > $source_file
echo "export MANPATH=$install_path/usr/share/man:\${MANPATH}" >> $source_file
echo "export LD_LIBRARY_PATH=${install_path}/usr/lib:${install_path}/usr/lib64:\${LD_LIBRARY_PATH}" >> ${source_file}

echo "Success to install \"${rpm_name}\" into \"${install_path}\", you can source [  ${source_file}  ] to use it!"

exit 0
user avatar hppyvyv6 头像
点赞 1 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.