Files
new_install/operation/install_pkg.sh
Wei,Shuai f8ee3637ab 修复bug2012,安装软件包,出现目录冲突却没有报错的问题
将pkgadd -f改为pkgadd

	modified:   operation/finish_install/exec_install_lib_32.sh
	modified:   operation/install_pkg.sh

	Signed-off-by: Wei,Shuai <swei@linx-info.com>
2014-08-28 14:10:07 +08:00

190 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
#
# DESCRIPTION: install package, if -s options not given,
# get package from /Rocky/packages by default.
#
# SCRIPT NAME: install_pkg.sh
#
# Usage: echo "acl" |./install_pkg.sh -s /Rocky/packages
#
# Input: stdin
# 1. pkgname
# argument:
# [--help] show usage
# [-s|--source] package source directory, if not specify, default is /Rocky/packages.
#
# Output:
# sucess:
# @ install $pkgname success.
# Return value:
# 1 argument error
# 2 source directory $PKG_SOURCE_DIR doesn't exist
# 3 pkgname doesn't exist in source directory
#
# TODO:
# 1. need handle more case for install package (use pkgadd utils)
# 1). if package has already installed.
# 2). if devices nearly no spaces left.
#
# 2. add install package from below media:
# 1). install from network.
# (1). get packages.txt from mirror.
# (2). download package from mirror to hardisk /var/lib/pkg/cache,
# make sure cache is have enough spaces to store download package.
# Notice: download package, need convert package name of #->%23
# 2). install from nfs.
# (1). mount nfs directory as package source directory.
#
#
# AUTHOR: Qin Bo
#
# EMAIL: bqin@linx-info.com
#
# DATE: 2010-08-09
#
# HISTORY:
# REVISOR DATE MODIFICATION
# Qin Bo 2010-08-09 create
#
#
#
source ./functions
usage ()
{
if [ "$1" == "-n" ];then
cmd="info"
ret=0
else
cmd="err"
ret=1
fi
$cmd "
This script will install a package
Usage: $0 options
options:
[--help] show this message
[-s|--source] package source directory, if not specify, default is /Rocky/packages.
(ex: echo make|install_pkg.sh -s /Rocky/packages)
"
return $ret
}
# get the package file in source directory
get_pkg_file ()
{
if [ $# -ne 1 ];then
err "$FUNCNAME function argument error , it must 1 argument !"
return 1
fi
local pkg_name="$1"
# get the first package if have multi-package in source directory
if [ -e "$PKG_SOURCE_DIR"/"$pkgname"'#'*tar.gz ]; then
ls "$PKG_SOURCE_DIR"/"$pkgname"'#'*tar.gz|head -n 1
elif [ -e "/Rocky/install_lib_32/pkg_lib_i686"/"$pkgname"'#'*tar.gz ]; then
ls "/Rocky/install_lib_32/pkg_lib_i686"/"$pkgname"'#'*tar.gz|head -n 1
else
err "package \"$pkgname\" doesn't exist in "$PKG_SOURCE_DIR" "
return 3
fi
}
add_pkg ()
{
if [ $# -ne 1 ];then
err "$FUNCNAME function argument error , it must have 1 argument!"
return 1
fi
local pkg_src=$1
pkgadd -r $TARGET $pkg_src 1>>$DEV_LOG 2>&1
}
install_pkg ()
{
if [ $# -ne 1 ];then
err "$FUNCNAME function argument error , it must have 1 argument!"
return 1
fi
local pkgname
local db_dir
local db
local pkg_src
pkgname="$1"
# create db for pkgutils
db_dir="/var/lib/pkg"
db="$TARGET$db_dir/db"
if [ ! -e "$db" ];then
info "create $db ..."
mkdir -p "$TARGET$db_dir"
touch "$db"
fi
pkg_src=$(get_pkg_file $pkgname)
if [ "${?}" -eq 0 ];then
info "installing $pkg_src to $TARGET"
add_pkg $pkg_src
erv
fi
}
main ()
{
local line
local tmp
local pkgname
tmp=$(getopt -o s: --long source:,help -- "$@" 2>>$DEV_LOG)
if [ $? -ne 0 ];then
usage; erv
fi
# set all argument to arg variable
eval set -- "$tmp"
while true ;do
case "$1" in
-s|--source)
PKG_SOURCE_DIR="$2"
shift 2
;;
--help) usage -n; exit 0 ;;
# shift the last "--", this dash is define by getopt (more information see man getopt)
--) shift; break;;
*) usage; erv ;;
esac
done
if [ ! -e "$PKG_SOURCE_DIR" ];then
err "source directory: $PKG_SOURCE_DIR doen't exist !"
exit 2
fi
while read line ;do
echo "$line"
done | sort -u |
while read pkgname;do
if [ -n "$pkgname" ];then
install_pkg "$pkgname"
erv
info "install $pkgname success" stdout
fi
done
}
PKG_SOURCE_DIR="/Rocky/packages"
main "$@"