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