some fix
This commit is contained in:
@@ -51,26 +51,29 @@ fi
|
||||
|
||||
#------------ check status function ------------
|
||||
check() {
|
||||
[ $1 -ne 0 ] \
|
||||
&& printf "${BBLUE}**${BWHITE} $2 [${BRED} ERROR ${BWHITE}]\n${RESET}" \
|
||||
&& exit $1
|
||||
if [ $1 -ne 0 ]; then
|
||||
printf "${BBLUE}**${BWHITE} $2 [${BRED} ERROR ${BWHITE}]\n${RESET}"
|
||||
exit $1
|
||||
fi
|
||||
printf "${BBLUE}**${BWHITE} $2 [${BGREEN} SUCCESS ${BWHITE}]\n${RESET}"
|
||||
}
|
||||
#-----------------------------------------------
|
||||
|
||||
#---------------- check root priveleges function ------------------------
|
||||
checkroot() {
|
||||
[[ $(id -u) != 0 ]] \
|
||||
&& printf "${BBLUE}**${BWHITE} You must be root [${BRED} ERROR ${BWHITE}]\n${RESET}" \
|
||||
&& exit 1
|
||||
if [ $(id -u) -ne 0 ]; then
|
||||
printf "${BBLUE}**${BWHITE} You must be root [${BRED} ERROR ${BWHITE}]\n${RESET}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
# check non root priveleges function
|
||||
checknonroot() {
|
||||
[[ $(id -u) == 0 ]] \
|
||||
&& printf "${BBLUE}**${BWHITE} You must be non root [${BRED} ERROR ${BWHITE}]\n${RESET}" \
|
||||
&& exit 1
|
||||
if [ $(id -u) = 0 ]; then
|
||||
printf "${BBLUE}**${BWHITE} You must be non root [${BRED} ERROR ${BWHITE}]\n${RESET}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
# ----------------------------------
|
||||
|
||||
@@ -106,7 +109,7 @@ down() {
|
||||
serverdir=$(echo $serverdir | sed -e "/ftp:\/\//s///")
|
||||
repoquery=$(/usr/bin/cat $reposquerydir/$serverdir/query | sed -e '/.pkg.gz/s///')
|
||||
for j in $repoquery; do
|
||||
if [[ "$(get_pkgname $j)" == "$k" ]]; then
|
||||
if [ "$(get_pkgname $j)" = "$(get_pkgname $k)" ] || [ "$(get_pkgname $j)" = "$k" ]; then
|
||||
if [ ! -f $cachedpkgdir/$j.pkg.gz ]; then
|
||||
printf "${YELLOW}**${RESET} Downloading ${YELLOW}$serverdir: ${BWHITE}$j\n${RESET}"
|
||||
echo $i/$j.pkg.gz
|
||||
@@ -114,14 +117,15 @@ down() {
|
||||
check $? "Download package"
|
||||
else
|
||||
printf "${YELLOW}**${GREEN} successful downloaded $k\n${RESET}"
|
||||
downloaded=y
|
||||
export downloaded=y
|
||||
fi
|
||||
downloaded=y
|
||||
export downloaded=y
|
||||
fi
|
||||
done
|
||||
done
|
||||
if [ "$downloaded" == "n" ]; then
|
||||
if [ "$downloaded" = "n" ]; then
|
||||
printf "${BBLUE}**${BWHITE} Can't find package $k [${BRED} ERROR ${BWHITE}]\n${RESET}"
|
||||
exit 1
|
||||
fi
|
||||
continue
|
||||
done
|
||||
@@ -134,68 +138,120 @@ download() {
|
||||
#-------------------- unpack local package archive ----------------------
|
||||
unpack() {
|
||||
checkroot
|
||||
[[ "$archives" == "" ]] \
|
||||
&& printf "${BBLUE}**${BWHITE} Specify package name [${BRED} ERROR ${BWHITE}]\n${RESET}" \
|
||||
&& exit 1
|
||||
for i in $archives; do
|
||||
if [ ! -f $i ]; then
|
||||
printf "${BBLUE}**${BWHITE} File $i not found [${BRED} ERROR ${BWHITE}]\n${RESET}" \
|
||||
if [[ "$archives" == "" ]]; then
|
||||
printf "${BBLUE}**${BWHITE} Specify package name [${BRED} ERROR ${BWHITE}]\n${RESET}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Сохраняем список архивов для итерации, чтобы он не перезатерся
|
||||
local_archives="$archives"
|
||||
|
||||
for archive in $local_archives; do
|
||||
if [ ! -f $archive ]; then
|
||||
printf "${BBLUE}**${BWHITE} File $archive not found [${BRED} ERROR ${BWHITE}]\n${RESET}" \
|
||||
&& exit 1
|
||||
fi
|
||||
packagename=$(echo $i | sed -e "/.gz/s///")
|
||||
packagename=$(echo $archive | sed -e "/.gz/s///")
|
||||
packagename=${packagename#*pkg/}
|
||||
printf "${YELLOW}**${GREEN} Installing ${packagename%.pkg*}\n${RESET}"
|
||||
[ ! -f $packagesqueryfile ] \
|
||||
&& printf "${BBLUE}**${BWHITE} Can't find $packagesqueryfile [${BRED} ERROR ${BWHITE}]\n${RESET}" \
|
||||
if [ ! -f $packagesqueryfile ]; then
|
||||
printf "${BBLUE}**${BWHITE} Can't find $packagesqueryfile [${BRED} ERROR ${BWHITE}]\n${RESET}" \
|
||||
&& exit 1
|
||||
fi
|
||||
installed=false
|
||||
for i in $(/usr/bin/cat $packagesqueryfile); do
|
||||
[ "$i" = "${packagename%.pkg*}" ] \
|
||||
&& export installed=true \
|
||||
&& break
|
||||
# Используем уникальное имя переменной для цикла
|
||||
for installed_pkg in $(/usr/bin/cat $packagesqueryfile); do
|
||||
if [ "$installed_pkg" = "${packagename%.pkg*}" ]; then
|
||||
export installed=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
[[ "$installed" == "true" ]] \
|
||||
&& printf "${YELLOW}**${RESET} Package already installed:${YELLOW} reinstalling\n${RESET}"
|
||||
if [[ "$installed" == "true" ]]; then
|
||||
printf "${YELLOW}**${RESET} Package already installed:${YELLOW} reinstalling\n${RESET}"
|
||||
fi
|
||||
tar -xf $cachedpkgdir/$packagename.gz -C $rootdir/tmp
|
||||
cd $rootdir/tmp/$packagename
|
||||
[ -f pre_install ] \
|
||||
&& /usr/bin/sh -c ./pre_install \
|
||||
&& rm -v pre_install &> /dev/null
|
||||
if [ -f pre_install ]; then
|
||||
/usr/bin/sh -c ./pre_install
|
||||
rm -v pre_install &> /dev/null
|
||||
fi
|
||||
if [ -f deps ]; then
|
||||
printf "${YELLOW}**${GREEN} Checking deps\n${RESET}"
|
||||
deps=$(/usr/bin/cat deps)
|
||||
for dep in $deps; do
|
||||
pkg_deps=$(/usr/bin/cat deps)
|
||||
|
||||
missing_deps=""
|
||||
# Используем уникальное имя переменной
|
||||
for dep in $pkg_deps; do
|
||||
have=false
|
||||
for pack in $(/usr/bin/cat $packagesqueryfile); do
|
||||
if [ $pack = $dep ]; then
|
||||
for installed_pack in $(/usr/bin/cat $packagesqueryfile); do
|
||||
if [ $installed_pack = $dep ]; then
|
||||
have=yes
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ "$have" = "false" ]; then
|
||||
pkgnow=$packagename
|
||||
add "" $dep
|
||||
unpack $cachedpkgdir/$pkgnow.gz
|
||||
return
|
||||
missing_deps="$missing_deps $dep"
|
||||
fi
|
||||
done
|
||||
mkdir $installedpackagesdir/$packagename &> /dev/null
|
||||
|
||||
# Если есть недостающие зависимости, устанавливаем их
|
||||
if [ ! -z "$missing_deps" ]; then
|
||||
printf "${YELLOW}**${GREEN} Installing missing dependencies: $missing_deps\n${RESET}"
|
||||
# Сохраняем полное текущее состояние
|
||||
saved_packagename="$packagename"
|
||||
saved_archives="$archives"
|
||||
saved_packages="$packages"
|
||||
saved_dir=$(pwd)
|
||||
|
||||
# Устанавливаем все недостающие зависимости
|
||||
for missing_dep in $missing_deps; do
|
||||
printf "${YELLOW}**${GREEN} Installing dependency: $missing_dep\n${RESET}"
|
||||
|
||||
# Переходим в безопасную директорию перед вызовом add
|
||||
cd $rootdir
|
||||
|
||||
# Устанавливаем переменные для add
|
||||
packages="$missing_dep"
|
||||
archives=""
|
||||
|
||||
# Вызываем add, который скачает и установит зависимость
|
||||
# add изменит глобальные переменные packages и archives
|
||||
add
|
||||
|
||||
# Возвращаемся в директорию текущего пакета
|
||||
cd "$saved_dir"
|
||||
done
|
||||
|
||||
# Полностью восстанавливаем сохраненные переменные
|
||||
packagename="$saved_packagename"
|
||||
archives="$saved_archives"
|
||||
packages="$saved_packages"
|
||||
|
||||
printf "${YELLOW}**${GREEN} Continuing installation of ${packagename%.pkg*}\n${RESET}"
|
||||
fi
|
||||
|
||||
mkdir -p $installedpackagesdir/$packagename &> /dev/null
|
||||
mv -v deps $installedpackagesdir/$packagename &> /dev/null
|
||||
fi
|
||||
mkdir $installedpackagesdir/$packagename &> /dev/null
|
||||
mkdir -p $installedpackagesdir/$packagename &> /dev/null
|
||||
mv -v list $installedpackagesdir/$packagename &> /dev/null
|
||||
[ -f pre_delete ] \
|
||||
&& mv -v pre_delete $installedpackagesdir/$packagename &> /dev/null
|
||||
[ -f post_delete ] \
|
||||
&& mv -v post_delete $installedpackagesdir/$packagename &> /dev/null
|
||||
if [ -f pre_delete ]; then
|
||||
mv -v pre_delete $installedpackagesdir/$packagename &> /dev/null
|
||||
fi
|
||||
if [ -f post_delete ]; then
|
||||
mv -v post_delete $installedpackagesdir/$packagename &> /dev/null
|
||||
fi
|
||||
cp -r ./* $rootdir/
|
||||
[ -f $rootdir/post_install ] \
|
||||
&& rm $rootdir/post_install
|
||||
[ -f $rootdir/tmp/$packagename/post_install ] \
|
||||
&& printf "${YELLOW}**${GREEN} post_install script ${packagename%.pkg*}\n${RESET}" \
|
||||
&& /usr/bin/sh -c $rootdir/tmp/$packagename/post_install &> /dev/null
|
||||
[[ "$installed" == "false" ]] \
|
||||
&& echo ${packagename%.pkg*} >> $packagesqueryfile
|
||||
if [ -f $rootdir/post_install ]; then
|
||||
mv -v $rootdir/post_install $installedpackagesdir/$packagename &> /dev/null
|
||||
fi
|
||||
if [ -f $rootdir/tmp/$packagename/post_install ]; then
|
||||
printf "${YELLOW}**${GREEN} post_install script ${packagename%.pkg*}\n${RESET}"
|
||||
/usr/bin/sh -c $rootdir/tmp/$packagename/post_install &> /dev/null
|
||||
fi
|
||||
if [[ "$installed" == "false" ]]; then
|
||||
echo ${packagename%.pkg*} >> $packagesqueryfile
|
||||
fi
|
||||
rm -rv $rootdir/tmp/$packagename &> /dev/null
|
||||
printf "${YELLOW}**${GREEN} Installed ${packagename%.pkg*} successful\n${RESET}"
|
||||
cd - &> /dev/null
|
||||
|
||||
Reference in New Issue
Block a user