Commit 2d72a762 authored by Vitaly Lipatov's avatar Vitaly Lipatov

backported to M60P as 1.3.1-alt0.M60P.1 (with rpmbph script)

parents 6e2b73b3 ff699790
......@@ -2,3 +2,15 @@
3. Доделать и проверить deplist|requires
https://wiki.archlinux.org/index.php/Pacman_Rosetta
Вывернуть:
Не case по каждой системе, а в каталоге по каждой системе разместить файлы, выполняющие нужные действия.
apt-rpm/install
apt-rpm/remove
при упаковке лучше собирать в один файл.
Внесто общих функций тоже модули.
serv должен уметь показывать порядок загрузки?
......@@ -73,6 +73,7 @@ quiet=
nodeps=
force=
short=
sort=
non_interactive=
skip_installed=
show_command_only=
......@@ -110,6 +111,12 @@ case $progname in
epmqp)
epm_cmd=query_package
;;
epmql)
epm_cmd=filelist
;;
epmu)
epm_cmd=update
;;
epm|upm|eepm)
;;
*)
......@@ -148,7 +155,7 @@ check_command()
Install) # HELPCMD: perform update package repo info and install package(s) via install command
epm_cmd=Install
;;
-q|installed) # HELPCMD: check presence of package(s)
-q|installed|query) # HELPCMD: check presence of package(s) and print this name (also --short is supported)
epm_cmd=query
;;
-sf|sf|filesearch) # HELPCMD: search in which package a file is included
......@@ -178,7 +185,7 @@ check_command()
-qa|list|packages|-l) # HELPCMD: list of installed package(s)
epm_cmd=packages
;;
programs) # HELPCMD: list of installed program(s)
programs) # HELPCMD: list of installed GUI program(s)
epm_cmd=programs
;;
......@@ -198,7 +205,7 @@ check_command()
release-upgrade) # HELPCMD: update whole system to the next release
epm_cmd=release_upgrade
;;
kernel-update|kernel-upgrade|update-kernel) # HELPCMD: update system kernel to the last repo version
kernel-update|kernel-upgrade|update-kernel|upgrade-kernel) # HELPCMD: update system kernel to the last repo version
epm_cmd=kernel_update
;;
......@@ -258,9 +265,12 @@ check_option()
--force) # HELPOPT: force install/remove package (f.i., override)
force="--force"
;;
--short) # HELPOPT: short output (package instead package-version-release)
--short) # HELPOPT: short output (just 'package' instead 'package-version-release')
short="--short"
;;
--sort) # HELPOPT: sort output, f.i. --sort=size (supported only for packages command)
sort="$1"
;;
--auto) # HELPOPT: non interactive mode
non_interactive=1
;;
......
......@@ -20,9 +20,10 @@
epm_autoremove()
{
case $PMTYPE in
#apt-rpm)
# sudocmd apt-get autoclean
# ;;
apt-rpm)
# ALT Linux only
sudocmd remove-old-kernels
;;
apt-dpkg)
sudocmd apt-get autoremove
;;
......@@ -32,7 +33,7 @@ case $PMTYPE in
yum-rpm)
# cleanup orphanes?
while true ; do
docmd package-cleanup --leaves
docmd package-cleanup --leaves $(subst_option non_interactive --assumeyes)
# FIXME: package-cleanup have to use stderr for errors
local PKGLIST=$(package-cleanup --leaves | grep -v "Loaded plugins" | grep -v "Unable to")
[ -n "$PKGLIST" ] || break
......@@ -48,7 +49,7 @@ case $PMTYPE in
sudocmd revdep-rebuild
;;
pacman)
sudocmd pacman -Qdtq | pacman -Rs -
sudocmd pacman -Qdtq | sudocmd pacman -Rs -
;;
slackpkg)
# clean-system removes non official packages
......
......@@ -43,9 +43,9 @@ case $PMTYPE in
emerge)
sudocmd revdep-rebuild
;;
urpm-rpm)
#sudocmd urpme --auto-orphans
;;
#urpm-rpm)
# sudocmd urpme --auto-orphans
# ;;
zypper-rpm)
sudocmd zypper verify || exit
;;
......
......@@ -17,6 +17,8 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# TODO: move zip,rar,7z to arc project, and pack all to check_pkg_integrity
# also use arc project if installed
check_rpm_integrity()
{
docmd rpm --checksig $@
......
......@@ -48,6 +48,38 @@ __use_zypper_no_gpg_checks()
a= zypper install --help 2>&1 | grep -q -- "--no-gpg-checks" && echo "--no-gpg-checks"
}
# args: cmd_reinstall, cmd_install, packages
__separate_sudocmd_foreach()
{
local cmd_re=$1
local cmd_in=$2
shift 2
separate_installed $@
if [ -n "$pkg_noninstalled" ] ; then
sudocmd_foreach "$cmd_re" $pkg_noninstalled || return
fi
if [ -n "$pkg_installed" ] ; then
sudocmd_foreach "$cmd_in" $pkg_installed || return
fi
return 0
}
# args: cmd_reinstall, cmd_install, packages
__separate_sudocmd()
{
local cmd_re=$1
local cmd_in=$2
shift 2
separate_installed $@
if [ -n "$pkg_noninstalled" ] ; then
sudocmd "$cmd_re" $pkg_noninstalled || return
fi
if [ -n "$pkg_installed" ] ; then
sudocmd "$cmd_in" $pkg_installed || return
fi
return 0
}
# copied from etersoft-build-utils/share/eterbuild/functions/rpmpkg
epm_install_names()
{
......@@ -92,31 +124,21 @@ epm_install_names()
sudocmd mpkg install $@
return ;;
npackd)
separate_installed $@
# FIXME: fix return status
# TODO: use upgrade if package is already installed
[ -n "$pkg_noninstalled" ] && sudocmd npackdcl add --package=$@ $pkg_noninstalled
[ -n "$pkg_installed" ] && sudocmd npackdcl update --package=$@ $pkg_installed
# FIXME: correct arg
__separate_sudocmd_foreach "npackdcl add --package=" "npackdcl update --package=" $@
return ;;
slackpkg)
separate_installed $@
# TODO: use upgrade if package is already installed
[ -n "$pkg_noninstalled" ] && sudocmd /usr/sbin/slackpkg install $pkg_noninstalled
[ -n "$pkg_installed" ] && sudocmd /usr/sbin/slackpkg upgrade $pkg_installed
__separate_sudocmd_foreach "/usr/sbin/slackpkg install" "/usr/sbin/slackpkg upgrade" $@
return ;;
homebrew)
separate_installed $@
[ -n "$pkg_noninstalled" ] && sudocmd brew install $pkg_noninstalled
[ -n "$pkg_installed" ] && sudocmd brew upgrade $pkg_installed
__separate_sudocmd "brew install" "brew upgrade" $@
return ;;
ipkg)
[ -n "$force" ] && force=-force-depends
sudocmd ipkg $force install $@
return ;;
nix)
separate_installed $@
[ -n "$pkg_noninstalled" ] && sudocmd nix-env --install $pkg_noninstalled
[ -n "$pkg_installed" ] && sudocmd nix-env --upgrade $pkg_installed
__separate_sudocmd "nix-env --install" "nix-env --upgrade" $@
return ;;
*)
fatal "Have no suitable install command for $PMTYPE"
......@@ -168,10 +190,8 @@ epm_ni_install_names()
sudocmd nix-env --install $@
return ;;
slackpkg)
separate_installed $@
# FIXME: broken status when use batch and default answrt
[ -n "$pkg_noninstalled" ] && sudocmd /usr/sbin/slackpkg -batch=on -default_answer=yes install $pkg_noninstalled
[ -n "$pkg_installed" ] && sudocmd /usr/sbin/slackpkg -batch=on -default_answer=yes upgrade $pkg_installed
# FIXME: broken status when use batch and default answer
__separate_sudocmd_foreach "/usr/sbin/slackpkg -batch=on -default_answer=yes install" "/usr/sbin/slackpkg -batch=on -default_answer=yes upgrade" $@
return ;;
*)
fatal "Have no suitable appropriate install command for $PMTYPE"
......@@ -179,6 +199,13 @@ epm_ni_install_names()
esac
}
__epm_check_if_rpm_already_installed()
{
# Not: we can make optimize if just check version?
LANG=C $SUDO rpm -Uvh $force $nodeps $@ 2>&1 | grep -q "is already installed"
}
epm_install_files()
{
[ -z "$1" ] && return
......@@ -186,9 +213,12 @@ epm_install_files()
case $PMTYPE in
apt-rpm)
sudocmd rpm -Uvh $force $nodeps $@ && return
# TODO: check for "is already installed"
local RES=$?
__epm_check_if_rpm_already_installed $@ && return
# if run with --nodeps, do not fallback on hi level
[ -n "$nodeps" ] && return
[ -n "$nodeps" ] && return $RES
# use install_names
;;
......@@ -197,35 +227,50 @@ epm_install_files()
if [ -n "$non_interactive" ] ; then
DPKGOPTIONS="--force-confdef --force-confold"
fi
# FIXME: return false in case no install and in case install with broken deps
sudocmd dpkg $DPKGOPTIONS -i $@
local RES=$?
# if run with --nodeps, do not fallback on hi level
[ -n "$nodeps" ] && return
[ -n "$nodeps" ] && return $RES
# fall to apt-get -f install for fix deps
# can't use APTOPTIONS with empty install args
epm_install_names -f
# repeat install for get correct status
sudocmd dpkg $DPKGOPTIONS -i $@
return
;;
yum-rpm|dnf-rpm)
sudocmd rpm -Uvh $force $nodeps $@ && return
# if run with --nodeps, do not fallback on hi level
__epm_check_if_rpm_already_installed $@ && return
[ -n "$nodeps" ] && return
YUMOPTIONS=--nogpgcheck
# use install_names
;;
zypper-rpm)
sudocmd rpm -Uvh $force $nodeps $@ && return
local RES=$?
__epm_check_if_rpm_already_installed $@ && return
# if run with --nodeps, do not fallback on hi level
[ -n "$nodeps" ] && return
[ -n "$nodeps" ] && return $RES
ZYPPEROPTIONS=$(__use_zypper_no_gpg_checks)
# use install_names
;;
urpm-rpm)
sudocmd rpm -Uvh $force $nodeps $@ && return
local RES=$?
__epm_check_if_rpm_already_installed $@ && return
# if run with --nodeps, do not fallback on hi level
[ -n "$nodeps" ] && return
[ -n "$nodeps" ] && return $RES
URPMOPTIONS=--no-verify-rpm
# use install_names
......@@ -239,11 +284,15 @@ epm_install_files()
return ;;
pacman)
sudocmd pacman -U --noconfirm $force $nodeps $@ && return
[ -n "$nodeps" ] && return
local RES=$?
[ -n "$nodeps" ] && return $RES
sudocmd pacman -U $force $@
return ;;
slackpkg)
sudocmd /sbin/installpkg $@
# FIXME: check for full package name
# FIXME: broken status when use batch and default answer
__separate_sudocmd_foreach "/sbin/installpkg" "/sbin/upgradepkg" $@
return ;;
esac
......
......@@ -69,7 +69,7 @@ __emerge_install_ebuild()
}
# install one ebuild
__emerge_install_tbgz2()
__emerge_install_tbz2()
{
local TGDIR=/usr/portage/packages/app-arch
mkdir -p $TGDIR
......
......@@ -17,9 +17,26 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
__epm_packages_sort()
{
# FIXME: sort depends on --sort value
case $PMTYPE in
apt-rpm|yum-rpm|urpm-rpm|zypper-rpm|dnf-rpm)
docmd rpm -qa --queryformat "%{size} %{name}-%{version}-%{release}\n" $pkg_filenames | sort -n
;;
apt-dpkg)
docmd dpkg-query -W --showformat="\${Size} \${Package}-\${Version}\n" $pkg_filenames | sort -n
;;
*)
fatal "Sorted package list are not realized for $PMTYPE"
;;
esac
}
epm_packages()
{
local CMD
[ -n "$sort" ] && __epm_packages_sort && return
case $PMTYPE in
apt-rpm)
......@@ -27,7 +44,8 @@ case $PMTYPE in
[ -n "$short" ] && CMD="rpm -qa --queryformat %{name}\n $pkg_filenames"
;;
apt-dpkg)
CMD="dpkg -l $pkg_filenames"
#CMD="dpkg -l $pkg_filenames"
CMD="dpkg-query -W --showformat=\${Package}-\${Version}\n $pkg_filenames"
[ -n "$short" ] && CMD="dpkg-query -W --showformat=\${Package}\n $pkg_filenames"
;;
yum-rpm|urpm-rpm|zypper-rpm|dnf-rpm)
......@@ -58,7 +76,10 @@ case $PMTYPE in
slackpkg)
CMD="ls -1 /var/log/packages/"
if [ -n "$short" ] ; then
docmd ls -1 /var/log/packages/ | sed -e "s|-[0-9].*||g"
# FIXME: does not work for libjpeg-v8a
# TODO: remove last 3 elements (if arch is second from the last?)
# FIXME this hack
docmd ls -1 /var/log/packages/ | sed -e "s|-[0-9].*||g" | sed -e "s|libjpeg-v8a.*|libjpeg|g"
return
fi
;;
......
......@@ -17,6 +17,8 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
load_helper epm-query
epm_provides()
{
local CMD
......
#!/bin/sh
#
# Copyright (C) 2012 Etersoft
# Copyright (C) 2012 Vitaly Lipatov <lav@etersoft.ru>
# Copyright (C) 2012, 2013 Etersoft
# Copyright (C) 2012, 2013 Vitaly Lipatov <lav@etersoft.ru>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
......@@ -26,14 +26,63 @@ _query_via_packages_list()
local res=0
local firstpkg=$1
shift
# separate first line for print out command
short=1 pkg_filenames=$firstpkg epm_packages | grep -- "^$firstpkg$" || res=1
for pkg in "$@" ; do
short=1 pkg_filenames=$pkg epm_packages 2>/dev/null | grep -- "^$pkg$" || res=1
done
return $res
}
# internal use only
__epm_get_hilevel_nameform()
{
[ -n "$*" ] || return
case $PMTYPE in
apt-rpm)
# use # as delimeter for apt
local pkg
pkg=$(rpm -q --queryformat "%{NAME}#%{SERIAL}:%{VERSION}-%{RELEASE}\n" $1)
echo $pkg | grep -q "(none)" && pkg=$(rpm -q --queryformat "%{NAME}#%{VERSION}-%{RELEASE}\n" $1)
# HACK: can use only for multiple install packages like kernel
echo $pkg | grep -q kernel || return 1
echo $pkg
return
;;
yum-rpm)
# just use strict version with Epoch and Serial
local pkg
pkg=$(rpm -q --queryformat "%{EPOCH}:%{NAME}%{VERSION}-%{RELEASE}.${ARCH}\n" $1)
echo $pkg | grep -q "(none)" && pkg=$(rpm -q --queryformat "%{NAME}-%{VERSION}-%{RELEASE}.${ARCH}\n" $1)
echo $pkg
return
;;
*)
return 1
;;
esac
}
# for local installed packages only
# used from epm remove
__epm_get_hilevel_name()
{
local i
for i in $@ ; do
local pkg
# get short form in pkg
quiet=1 short=1 pkg=$(__epm_query_name $i)
# if already short form, skipped
[ "$pkg" = "$i" ] && echo "$i" && continue
# try get long form or use short form
__epm_get_hilevel_nameform $i || echo $pkg
done
}
__epm_query_file()
{
local CMD
......@@ -43,13 +92,11 @@ __epm_query_file()
case $PMTYPE in
*-rpm)
CMD="rpm -qp"
[ -n "$short" ] && CMD="rpm -qp --queryformat %{name}\n"
;;
apt-dpkg)
CMD="dpkg-deb --show"
# TODO: make rpm-like output
#showcmd dpkg -l $pkg_filenames
#dpkg -l $pkg_filenames | grep "^ii"
#return
CMD="dpkg-deb --show --showformat=\${Package}-\${Version}\n"
[ -n "$short" ] && CMD="dpkg-query --show --showformat=\${Package}\n"
;;
*)
fatal "Do not know command for query file package"
......@@ -68,14 +115,12 @@ __epm_query_name()
case $PMTYPE in
*-rpm)
CMD="rpm -q"
[ -n "$short" ] && CMD="rpm -q --queryformat %{name}\n"
;;
apt-dpkg)
#docmd dpkg -l $@
docmd dpkg -l $@ | grep "^ii"
# TODO: make rpm-like output
#showcmd dpkg -l $pkg_filenames
#dpkg -l $pkg_filenames | grep "^ii"
return
#docmd dpkg -l $@ | grep "^ii"
CMD="dpkg-query -W --showformat=\${Package}-\${Version}\n"
[ -n "$short" ] && CMD="dpkg-query -W --showformat=\${Package}\n"
;;
npackd)
CMD="npackdcl path --package=$@"
......@@ -84,6 +129,7 @@ __epm_query_name()
warning "fix query"
return 1
;;
# Note: slackpkg info pkgname
*)
_query_via_packages_list $@
return
......
......@@ -36,7 +36,7 @@ epm_reinstall_names()
esac
# fallback to generic install
epm_install_names
epm_install_names $@
}
epm_reinstall_files()
......
#!/bin/sh
#
# Copyright (C) 2012 Etersoft
# Copyright (C) 2012 Vitaly Lipatov <lav@etersoft.ru>
# Copyright (C) 2012, 2013 Etersoft
# Copyright (C) 2012, 2013 Vitaly Lipatov <lav@etersoft.ru>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
......@@ -17,6 +17,8 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
load_helper epm-query
# Try remove with low level removing
epm_remove_low()
{
......@@ -26,8 +28,7 @@ epm_remove_low()
sudocmd rpm -ev $nodeps $@
return ;;
apt-dpkg)
[ -n "$nodeps" ] && nodeps="--force-all"
sudocmd dpkg -P $nodeps $@
sudocmd dpkg -P $(subst_option nodeps --force-all) $@
return ;;
pkgsrc)
sudocmd pkg_delete -r $@
......@@ -97,8 +98,7 @@ epm_remove_names()
sudocmd brew remove $@
return ;;
ipkg)
[ -n "$force" ] && force=-force-depends
sudocmd ipkg $force remove $@
sudocmd ipkg $(subst_option force -force-depends) remove $@
return ;;
*)
fatal "Have no suitable command for $PMTYPE"
......@@ -173,18 +173,22 @@ epm_remove()
return
fi
[ -n "$pkg_files" ] && fatal "FIXME: remove by package file is not supported yet"
# get full package name(s) from the package file(s)
[ -n "$pkg_files" ] && pkg_names="$pkg_names $(epm query $pkg_files)"
[ -n "$pkg_names" ] || fatal "Run remove without args"
epm_remove_low $pkg_names && return
[ -n "$pkg_filenames" ] || fatal "Run remove without args"
epm_remove_low $pkg_filenames && return
# get package name for hi level package management command (with version if supported and if possible)
pkg_names=$(__epm_get_hilevel_name $pkg_names)
if [ -n "$non_interactive" ] ; then
epm_remove_nonint $pkg_filenames
epm_remove_nonint $pkg_names
local RET=$?
# if not separate command, use usual command
[ "$RET" = "5" ] || return $RET
fi
epm_remove_names $pkg_filenames
epm_remove_names $pkg_names
}
......@@ -22,14 +22,19 @@ epm_requires()
local CMD
[ -n "$pkg_filenames" ] || fatal "Run query without names"
# TODO: Здесь выбирать команду по расширению, а не по системному менеджеру
# В других таких случаях тоже
# В списке пакетов на установку проверять, что пакеты имеют соответствующее расширение
# by package file
case $PMTYPE in
apt-rpm|urpm-rpm|zypper-rpm|yum-rpm)
CMD="rpm -q --requires -p"
;;
apt-dpkg)
# FIXME: need package base
showcmd dpkg -s $pkg_files
a= dpkg -s $pkg_names | grep "^Depends:" | sed "s|^Depends:||g"
# FIXME: we need execute package name section too
return
;;
*)
......
......@@ -96,7 +96,7 @@ docmd()
"$@"
}
# Print command line and run command line
# Run every arg with docmd
docmd_foreach()
{
local cmd
......@@ -115,6 +115,19 @@ sudocmd()
$SUDO "$@"
}
# Run every arg with sudocmd
sudocmd_foreach()
{
local cmd
cmd="$1"
#showcmd "$@"
shift
for pkg in "$@" ; do
sudocmd $cmd $pkg
done
}
filter_strip_spaces()
{
# possible use just
......@@ -128,6 +141,28 @@ strip_spaces()
echo "$*" | filter_strip_spaces
}
# param true false
subst_option()
{
eval "[ -n \"\$$1\" ]" && echo "$2" || echo "$3"
}
store_output()
{
# use make_temp_file from etersoft-build-utils
RC_STDOUT=$(mktemp)
#RC_STDERR=$(mktemp)
"$@" 2>&1 | tee $RC_STDOUT
# http://tldp.org/LDP/abs/html/bashver3.html#PIPEFAILREF
return $PIPESTATUS
}
clean_store_output()
{
rm -f $RC_STDOUT
}
epm()
{
$PROGDIR/epm $@
......@@ -144,6 +179,16 @@ fatal()
exit 1
}
# Print warning message
warning()
{
if [ -z "$TEXTDOMAIN" ] ; then
echo "Warning: $@" >&2
# else
# echog "Error in $0: $@" >&2
fi
}
set_sudo()
{
SUDO=""
......@@ -165,7 +210,7 @@ set_sudo()
# print options description from HELPCMD/HELPOPT lines in the code
get_help()
{
grep -- "# $1" $0 | while read n ; do
grep -v -- "^#" $0 | grep -- "# $1" | while read n ; do
opt=$(echo $n | sed -e "s|) # $1:.*||g")
desc=$(echo $n | sed -e "s|.*) # $1:||g")
printf " %-20s %s\n" $opt "$desc"
......
......@@ -31,9 +31,31 @@ __use_yum_assumeno()
a= yum --help 2>&1 | grep -q -- "--assumeno"
}
__check_yum_result()
{
grep "^No package" $1 && return 1
grep "^Complete!" $1 && return 0
grep "^Exiting on user Command" $1 && return 0
grep "^Exiting on user command" $1 && return 0
# return default result by default
return $2
}
__check_pacman_result()
{
grep "^error: target not found:" $1 && return 1
grep "^Total Installed Size:" $1 && return 0
grep "^Total Download Size:" $1 && return 0
# return default result by default
return $2
}
_epm_do_simulate()
{
local CMD
local RES=0
local filenames="$*"
case $PMTYPE in
......@@ -42,20 +64,17 @@ _epm_do_simulate()
;;
yum-rpm)
if __use_yum_assumeno ; then
LC_ALL=C sudocmd yum --assumeno install $filenames
# FIXME: check only error output
LC_ALL=C sudocmd yum --assumeno install $filenames 2>&1 | grep "^No package" && return 1
LC_ALL=C sudocmd yum --assumeno install $filenames 2>&1 | grep "^Complete!" && return 0
LC_ALL=C sudocmd yum --assumeno install $filenames 2>&1 | grep "^Exiting on user Command" && return 0
LC_ALL=C sudocmd yum --assumeno install $filenames >/dev/null 2>&1 || return
LC_ALL=C store_output sudocmd yum --assumeno install $filenames
__check_yum_result $RC_STDOUT $?
else
LC_ALL=C echo n | sudocmd yum install $filenames
# FIXME: check only error output
LC_ALL=C echo n | sudocmd yum install $filenames 2>&1 | grep "^No package" && return 1
LC_ALL=C echo n | sudocmd yum install $filenames 2>&1 | grep "^Complete!" && return 0
LC_ALL=C echo n | sudocmd yum install $filenames >/dev/null 2>&1 || return
LC_ALL=C store_output sudocmd yum install $filenames <<EOF
n
EOF
__check_yum_result $RC_STDOUT $?
fi
return 0 ;;
RES=$?
clean_store_output
return $RES ;;
urpm-rpm)
CMD="urpmi --test --auto"
;;
......@@ -76,9 +95,13 @@ _epm_do_simulate()
done
return $res ;;
pacman)
showcmd $SUDO pacman -v -S $filenames
echo no | $SUDO pacman -v -S $filenames
return ;;
LC_ALL=C store_output sudocmd pacman -v -S $filenames <<EOF
no
EOF
__check_pacman_result $RC_STDOUT $?
RES=$?
clean_store_output
return $RES ;;
slackpkg)
#docmd /usr/sbin/slackpkg -batch=on -default_answer=yes download
# just try search every package
......@@ -86,6 +109,8 @@ _epm_do_simulate()
local pkg res
res=0
for pkg in $filenames ; do
# FIXME: -[0-0] does not work in search!
# FIXME: we need strict search here (not find gst-plugins-base if search for gst-plugins
pkg_filenames="$pkg-[0-9]" epm_search | grep -E "(installed|upgrade)" && continue
pkg_filenames="$pkg" epm_search | grep -E "(installed|upgrade)" && continue
res=1
......
......@@ -52,7 +52,7 @@ case $PMTYPE in
sudocmd emerge --sync
;;
slackpkg)
sudocmd /usr/sbin/slackpkg update
sudocmd /usr/sbin/slackpkg -batch=on update
;;
deepsolver-rpm)
sudocmd ds-update
......
......@@ -24,7 +24,8 @@ epm_upgrade()
case $PMTYPE in
apt-rpm|apt-dpkg)
# FIXME: apt-get update before
# non_interactive
# Функцию добавления параметра при условии
CMD="apt-get dist-upgrade"
;;
yum-rpm)
......
epm
\ No newline at end of file
epm
\ No newline at end of file
......@@ -141,7 +141,7 @@ show_command_only=
serv_cmd=
service_name=
params=
withoutservicename=
check_command()
{
......@@ -154,6 +154,7 @@ check_command()
;;
usage) # HELPCMD: print out usage of the service
serv_cmd=usage
withoutservicename=1
;;
#restart) # HELPCMD: restart service
#reload) # HELPCMD: reload service
......@@ -168,12 +169,15 @@ check_command()
;;
list) # HELPCMD: list running services
serv_cmd=list
withoutservicename=1
;;
list-all) # HELPCMD: list all available services
serv_cmd=list_all
withoutservicename=1
;;
list-startup) # HELPCMD: list all services to run on startup
serv_cmd=list_startup
withoutservicename=1
;;
on|enable) # HELPCMD: add service to run on startup and start it now
serv_cmd=enable
......@@ -229,7 +233,7 @@ echover "service: $service_name"
echover "command: $serv_cmd"
# Just printout help if run without args
if [ "$serv_cmd" != "list" ] && [ "$serv_cmd" != "list_all" ] && [ -z "$service_name" ] ; then
if [ -z "$withoutservicename" ] && [ -z "$service_name" ] ; then
print_version
echo
fatal "Run $ $progname --help for get help"
......
......@@ -30,13 +30,13 @@ serv_list()
sudocmd service --status-all
;;
systemd)
sudocmd systemctl list-units
sudocmd systemctl list-units $@
;;
*)
load_helper serv-list_all
load_helper serv-status
for i in $(serv_list_all) ; do
is_service_running $i && echo $i
is_service_running $i >/dev/null && echo $i
done
;;
esac
......
......@@ -29,7 +29,7 @@ serv_list_all()
sudocmd ls -1 /etc/init.d/* | sed -e "s|/etc/init.d/||g" | grep -v README
;;
systemd)
sudocmd systemctl list-unit-files
sudocmd systemctl list-unit-files $@
;;
*)
fatal "Have no suitable command for $SERVICETYPE"
......
......@@ -31,7 +31,12 @@ serv_list_startup()
# sudocmd systemctl list-unit-files
# ;;
*)
fatal "Have no suitable command for $SERVICETYPE"
load_helper serv-list_all
load_helper serv-status
for i in $(serv_list_all | cut -f 1 -d" " | grep "\.service$") ; do
is_service_autostart >/dev/null $i && echo $i
done
;;
esac
}
#!/bin/sh
#
# Copyright (C) 2012 Etersoft
# Copyright (C) 2012 Vitaly Lipatov <lav@etersoft.ru>
# Copyright (C) 2012, 2013 Etersoft
# Copyright (C) 2012, 2013 Vitaly Lipatov <lav@etersoft.ru>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
......@@ -28,8 +28,7 @@ is_service_running()
$SUDO /etc/init.d/$1 status >/dev/null
;;
systemd)
#sudocmd systemctl is-enabled $1
fatal "FIXME: don't know how detect current startup state"
$SUDO systemctl status $1 >/dev/null
;;
*)
fatal "Have no suitable command for $SERVICETYPE"
......@@ -48,7 +47,7 @@ is_service_autostart()
fatal "FIXME: don't know how detect current startup state"
;;
systemd)
sudocmd systemctl is-enabled $1.service
$SUDO systemctl is-enabled $1
;;
*)
fatal "Have no suitable command for $SERVICETYPE"
......@@ -58,7 +57,7 @@ is_service_autostart()
serv_status()
{
is_service_autostart $1 && echo "Service $1 is sheduled to run on startup" || echo "Service $1 will NOT run on startup"
is_service_autostart $1 && echo "Service $1 is scheduled to run on startup" || echo "Service $1 will NOT run on startup"
local SERVICE="$1"
shift
......@@ -71,7 +70,7 @@ serv_status()
sudocmd /etc/init.d/$SERVICE status "$@"
;;
systemd)
sudocmd systemctl status $SERVICE.service "$@"
sudocmd systemctl status $SERVICE "$@"
;;
*)
fatal "Have no suitable command for $SERVICETYPE"
......
# This spec is backported to ALTLinux p6 automatically by rpmbph script. Do not edit it.
#
Name: eepm
Version: 1.2.6
Version: 1.3.1
Release: alt0.M60P.1
Summary: Etersoft EPM package manager
License: AFGPLv3
License: AGPLv3
Group: System/Configuration/Packaging
Url: http://wiki.etersoft.ru/EPM
......@@ -46,6 +46,10 @@ install -m 0755 packed/serv.sh %buildroot/%_datadir/%name/serv-packed.sh
mkdir -p %buildroot%_sysconfdir/bash_completion.d/
install -m 0644 bash_completion/serv %buildroot%_sysconfdir/bash_completion.d/serv
ln -s serv %buildroot%_sysconfdir/bash_completion.d/cerv
# shebang.req.files
chmod a+x %buildroot%_datadir/%name/{serv-,epm-}*
%files
%doc README TODO LICENSE
......@@ -57,11 +61,39 @@ install -m 0644 bash_completion/serv %buildroot%_sysconfdir/bash_completion.d/se
%_bindir/distr_info
%_datadir/%name/
%_sysconfdir/bash_completion.d/serv
%_sysconfdir/bash_completion.d/cerv
%changelog
* Tue Apr 30 2013 Vitaly Lipatov <lav@altlinux.ru> 1.2.6-alt0.M60P.1
* Thu Jul 25 2013 Vitaly Lipatov <lav@altlinux.ru> 1.3.1-alt0.M60P.1
- backport to ALTLinux p6 (by rpmbph script)
* Wed Jul 24 2013 Vitaly Lipatov <lav@altlinux.ru> 1.3.1-alt1
- epm-packages: add size sort support for rpm and dpkg
- fix epm query for non rpm/deb systems
- epm-install: rewrite pkg_(non)installed for get correct return status
* Thu Jul 11 2013 Vitaly Lipatov <lav@altlinux.ru> 1.3.0-alt1
- slackware: fix repo update, fix install pkg from file
- query, packages: print out in name-version format
- remove: add support for remove by package file
- remove: improve remove versioned packages via apt and yum
* Sat Jun 29 2013 Vitaly Lipatov <lav@altlinux.ru> 1.2.9-alt1
- fix simulate for ArchLinux and old yum
- small fixes
* Wed Jun 26 2013 Vitaly Lipatov <lav@altlinux.ru> 1.2.8-alt1
- add epmql short command for epm -ql
- autoremove: add --auto support for yum
- epm-simulate: rewrite check yum result with store_output
* Wed Jun 19 2013 Vitaly Lipatov <lav@altlinux.ru> 1.2.7-alt1
- add epmu == epm update command
- serv: fix without param checking
- serv: fixes for systemd after real use
- epm-install: fix Slackware install with sudocmd_foreach
- epm-install: do not fall to hi level if rpm is already installed
* Tue Apr 30 2013 Vitaly Lipatov <lav@altlinux.ru> 1.2.6-alt1
- epm Install: do package base update only if really need install something
......
......@@ -126,6 +126,18 @@ sudocmd()
$SUDO "$@"
}
sudocmd_foreach()
{
local cmd
cmd="$1"
#showcmd "$@"
shift
for pkg in "$@" ; do
sudocmd $cmd $pkg
done
}
filter_strip_spaces()
{
# possible use just
......@@ -139,6 +151,27 @@ strip_spaces()
echo "$*" | filter_strip_spaces
}
subst_option()
{
eval "[ -n \"\$$1\" ]" && echo "$2" || echo "$3"
}
store_output()
{
# use make_temp_file from etersoft-build-utils
RC_STDOUT=$(mktemp)
#RC_STDERR=$(mktemp)
"$@" 2>&1 | tee $RC_STDOUT
# http://tldp.org/LDP/abs/html/bashver3.html#PIPEFAILREF
return $PIPESTATUS
}
clean_store_output()
{
rm -f $RC_STDOUT
}
epm()
{
$PROGDIR/epm $@
......@@ -152,6 +185,13 @@ fatal()
exit 1
}
warning()
{
if [ -z "$TEXTDOMAIN" ] ; then
echo "Warning: $@" >&2
fi
}
set_sudo()
{
SUDO=""
......@@ -172,7 +212,7 @@ set_sudo()
get_help()
{
grep -- "# $1" $0 | while read n ; do
grep -v -- "^#" $0 | grep -- "# $1" | while read n ; do
opt=$(echo $n | sed -e "s|) # $1:.*||g")
desc=$(echo $n | sed -e "s|.*) # $1:||g")
printf " %-20s %s\n" $opt "$desc"
......@@ -237,7 +277,7 @@ case $DISTRNAME in
CMD="ipkg"
;;
*)
fatal "Do not known DISTRNAME $DISTRNAME"
fatal "Have no suitable DISTRNAME $DISTRNAME"
;;
esac
PMTYPE=$CMD
......@@ -273,13 +313,13 @@ case $PMTYPE in
#sudocmd repo-add $pkg_filenames
;;
npackd)
docmd npackdcl add-repo --url=$pkg_filenames
sudocmd npackdcl add-repo --url=$pkg_filenames
;;
slackpkg)
echo "You need manually add repo to /etc/slackpkg/mirrors"
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -290,23 +330,46 @@ esac
epm_autoremove()
{
case $PMTYPE in
#apt-rpm)
# sudocmd apt-get autoclean
# ;;
apt-rpm)
# ALT Linux only
sudocmd remove-old-kernels
;;
apt-dpkg)
sudocmd apt-get autoremove
;;
#yum-rpm)
# sudocmd yum clean all
# ;;
#urpm-rpm)
# sudocmd urpmi --clean
# ;;
aura)
sudocmd aura -Oj
;;
yum-rpm)
# cleanup orphanes?
while true ; do
docmd package-cleanup --leaves $(subst_option non_interactive --assumeyes)
# FIXME: package-cleanup have to use stderr for errors
local PKGLIST=$(package-cleanup --leaves | grep -v "Loaded plugins" | grep -v "Unable to")
[ -n "$PKGLIST" ] || break
sudocmd yum remove $PKGLIST
done
;;
urpm-rpm)
sudocmd urpme --auto-orphans
;;
emerge)
sudocmd emerge --depclean
docmd epm --skip-installed install gentoolkit
sudocmd revdep-rebuild
;;
pacman)
sudocmd pacman -Qdtq | sudocmd pacman -Rs -
;;
slackpkg)
# clean-system removes non official packages
#sudocmd slackpkg clean-system
;;
#zypper-rpm)
# sudocmd zypper clean
# ;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -324,7 +387,7 @@ __epm_changelog_files()
docmd_foreach "rpm -p --changelog" $@ | less
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -350,7 +413,7 @@ __epm_changelog_local_names()
docmd pacman -Qc $1 | less
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
}
......@@ -377,7 +440,7 @@ __epm_changelog_unlocal_names()
# sudocmd zypper clean
# ;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -423,28 +486,19 @@ case $PMTYPE in
#docmd package-cleanup --dupes
sudocmd package-cleanup --cleandupes
# cleanup orphanes?
while true ; do
docmd package-cleanup --leaves
# FIXME: package-cleanup have to use stderr for errors
local PKGLIST=$(package-cleanup --leaves | grep -v "Loaded plugins" | grep -v "Unable to")
[ -n "$PKGLIST" ] || break
sudocmd yum remove $PKGLIST
done
docmd rpm -Va --nofiles --nodigest
;;
pacman)
emerge)
sudocmd revdep-rebuild
;;
urpm-rpm)
sudocmd urpme --auto-orphans
;;
#urpm-rpm)
# sudocmd urpme --auto-orphans
# ;;
zypper-rpm)
sudocmd zypper verify || exit
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -523,20 +577,19 @@ check_pkg_integrity()
# TODO: Попробовать здесь оставить возможность перегрузки функций
case $EXT in
rpm)
docmd rpm --checksig $@
docmd rpm --checksig $1
;;
deb)
# FIXME: debsums -ca package ?
docmd dpkg --contents $@
docmd dpkg --contents $1 >/dev/null && echo "Package $1 is correct."
;;
bz2)
docmd bunzip -t $1
;;
#*)
# fatal "Unknown package extension '$EXT' in $PKG package"
# ;;
esac
*)
check_${EXT}_integrity "$PKG" || fatal "Unknown package extension '$EXT' in $PKG package"
;;
esac
}
__epm_check_installed_pkg()
......@@ -549,7 +602,7 @@ case $PMTYPE in
docmd debsums $@
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -580,7 +633,7 @@ case $PMTYPE in
;;
yum-rpm)
sudocmd yum clean all
sudocmd yum makecache
#sudocmd yum makecache
;;
dnf-rpm)
sudocmd dnf clean all
......@@ -594,10 +647,16 @@ case $PMTYPE in
zypper-rpm)
sudocmd zypper clean
;;
nix)
sudocmd nix-collect-garbage
;;
slackpkg)
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
echo "It is recommend to run 'epm autoremove' also"
}
......@@ -618,7 +677,7 @@ __epm_filelist_file()
CMD="dpkg --contents"
;;
*)
fatal "Do not known query command for $PMTYPE"
fatal "Have no suitable query command for $PMTYPE"
;;
esac
......@@ -657,7 +716,7 @@ __epm_filelist_name()
return
;;
*)
fatal "Do not known query command for $PMTYPE"
fatal "Have no suitable query command for $PMTYPE"
;;
esac
......@@ -719,6 +778,10 @@ case $PMTYPE in
is_installed $pkg_names && docmd pacman -Qi $pkg_names && return
docmd pacman -Si $pkg_names
;;
aura)
is_installed $pkg_names && docmd pacman -Qi $pkg_names && return
docmd aura -Ai $pkg_names
;;
npackd)
# FIXME: --version=
docmd npackdcl info --package=$pkg_names
......@@ -730,7 +793,7 @@ case $PMTYPE in
docmd ipkg info $pkg_names
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -748,10 +811,11 @@ filter_out_installed_packages()
LANG=C LC_ALL=C xargs -n1 rpm -q 2>&1 | grep 'is not installed' |
sed -e 's|^.*package \(.*\) is not installed.*|\1|g'
;;
"deb")
LANG=C LC_ALL=C xargs -n1 dpkg -l 2>&1 | grep 'no packages found matching' |
sed -e 's|^.*no packages found matching \(.*\)|\1|g'
;;
# dpkg -l lists some non ii status (un, etc)
#"deb")
# LANG=C LC_ALL=C xargs -n1 dpkg -l 2>&1 | grep -i 'no packages found matching' |
# sed -e 's|\.\+$||g' -e 's|^.*[Nn]o packages found matching \(.*\)|\1|g'
# ;;
*)
for i in $(cat) ; do
is_installed $i || echo $i
......@@ -760,6 +824,40 @@ filter_out_installed_packages()
esac | sed -e "s|rpm-build-altlinux-compat[^ ]*||g" | filter_strip_spaces
}
__use_zypper_no_gpg_checks()
{
a= zypper install --help 2>&1 | grep -q -- "--no-gpg-checks" && echo "--no-gpg-checks"
}
__separate_sudocmd_foreach()
{
local cmd_re=$1
local cmd_in=$2
shift 2
separate_installed $@
if [ -n "$pkg_noninstalled" ] ; then
sudocmd_foreach "$cmd_re" $pkg_noninstalled || return
fi
if [ -n "$pkg_installed" ] ; then
sudocmd_foreach "$cmd_in" $pkg_installed || return
fi
return 0
}
__separate_sudocmd()
{
local cmd_re=$1
local cmd_in=$2
shift 2
separate_installed $@
if [ -n "$pkg_noninstalled" ] ; then
sudocmd "$cmd_re" $pkg_noninstalled || return
fi
if [ -n "$pkg_installed" ] ; then
sudocmd "$cmd_in" $pkg_installed || return
fi
return 0
}
epm_install_names()
{
......@@ -788,6 +886,9 @@ epm_install_names()
pacman)
sudocmd pacman -S $force $nodeps $@
return ;;
aura)
sudocmd aura -A $force $nodeps $@
return ;;
yum-rpm)
sudocmd yum $YUMOPTIONS install $@
return ;;
......@@ -800,23 +901,25 @@ epm_install_names()
mpkg)
sudocmd mpkg install $@
return ;;
npackd)
# FIXME: correct arg
__separate_sudocmd_foreach "npackdcl add --package=" "npackdcl update --package=" $@
return ;;
slackpkg)
separate_installed $@
# TODO: use upgrade if package is already installed
[ -n "$pkg_noninstalled" ] && sudocmd /usr/sbin/slackpkg install $pkg_noninstalled
[ -n "$pkg_installed" ] && sudocmd /usr/sbin/slackpkg upgrade $pkg_installed
__separate_sudocmd_foreach "/usr/sbin/slackpkg install" "/usr/sbin/slackpkg upgrade" $@
return ;;
homebrew)
separate_installed $@
[ -n "$pkg_noninstalled" ] && sudocmd brew install $pkg_noninstalled
[ -n "$pkg_installed" ] && sudocmd brew upgrade $pkg_installed
__separate_sudocmd "brew install" "brew upgrade" $@
return ;;
ipkg)
[ -n "$force" ] && force=-force-depends
sudocmd ipkg $force install $@
return ;;
nix)
__separate_sudocmd "nix-env --install" "nix-env --upgrade" $@
return ;;
*)
fatal "Do not known install command for $PMTYPE"
fatal "Have no suitable install command for $PMTYPE"
;;
esac
}
......@@ -841,12 +944,18 @@ epm_ni_install_names()
pkgsrc)
sudocmd pkg_add -r $@
return ;;
emerge)
sudocmd emerge -uD $@
return ;;
pacman)
sudocmd pacman -S --noconfirm $force $nodeps $@
return ;;
aura)
sudocmd aura -A $force $nodeps $@
return ;;
npackd)
# npackdcl update --package=<package> (remove old and install new)
docmd npackdcl add --package=$@
sudocmd npackdcl add --package=$@
return ;;
chocolatey)
docmd chocolatey install $@
......@@ -854,16 +963,26 @@ epm_ni_install_names()
ipkg)
sudocmd ipkg -force-defaults install $@
return ;;
nix)
sudocmd nix-env --install $@
return ;;
slackpkg)
# TODO: use upgrade if package is already installed
sudocmd /usr/sbin/slackpkg -batch=on -default_answer=yes install $@
# FIXME: broken status when use batch and default answer
__separate_sudocmd_foreach "/usr/sbin/slackpkg -batch=on -default_answer=yes install" "/usr/sbin/slackpkg -batch=on -default_answer=yes upgrade" $@
return ;;
*)
fatal "Do not known appropriate install command for $PMTYPE"
fatal "Have no suitable appropriate install command for $PMTYPE"
;;
esac
}
__epm_check_if_rpm_already_installed()
{
# Not: we can make optimize if just check version?
LANG=C $SUDO rpm -Uvh $force $nodeps $@ 2>&1 | grep -q "is already installed"
}
epm_install_files()
{
[ -z "$1" ] && return
......@@ -871,9 +990,12 @@ epm_install_files()
case $PMTYPE in
apt-rpm)
sudocmd rpm -Uvh $force $nodeps $@ && return
# TODO: check for "is already installed"
local RES=$?
__epm_check_if_rpm_already_installed $@ && return
# if run with --nodeps, do not fallback on hi level
[ -n "$nodeps" ] && return
[ -n "$nodeps" ] && return $RES
# use install_names
;;
......@@ -882,35 +1004,50 @@ epm_install_files()
if [ -n "$non_interactive" ] ; then
DPKGOPTIONS="--force-confdef --force-confold"
fi
# FIXME: return false in case no install and in case install with broken deps
sudocmd dpkg $DPKGOPTIONS -i $@
local RES=$?
# if run with --nodeps, do not fallback on hi level
[ -n "$nodeps" ] && return
[ -n "$nodeps" ] && return $RES
# fall to apt-get -f install for fix deps
# can't use APTOPTIONS with empty install args
epm_install_names -f
# repeat install for get correct status
sudocmd dpkg $DPKGOPTIONS -i $@
return
;;
yum-rpm|dnf-rpm)
sudocmd rpm -Uvh $force $nodeps $@ && return
# if run with --nodeps, do not fallback on hi level
__epm_check_if_rpm_already_installed $@ && return
[ -n "$nodeps" ] && return
YUMOPTIONS=--nogpgcheck
# use install_names
;;
zypper-rpm)
sudocmd rpm -Uvh $force $nodeps $@ && return
local RES=$?
__epm_check_if_rpm_already_installed $@ && return
# if run with --nodeps, do not fallback on hi level
[ -n "$nodeps" ] && return
ZYPPEROPTIONS=--no-gpg-checks
[ -n "$nodeps" ] && return $RES
ZYPPEROPTIONS=$(__use_zypper_no_gpg_checks)
# use install_names
;;
urpm-rpm)
sudocmd rpm -Uvh $force $nodeps $@ && return
local RES=$?
__epm_check_if_rpm_already_installed $@ && return
# if run with --nodeps, do not fallback on hi level
[ -n "$nodeps" ] && return
[ -n "$nodeps" ] && return $RES
URPMOPTIONS=--no-verify-rpm
# use install_names
......@@ -918,13 +1055,21 @@ epm_install_files()
pkgsrc)
sudocmd pkg_add $@
return ;;
emerge)
load_helper epm-install-emerge
sudocmd epm_install_emerge $@
return ;;
pacman)
sudocmd pacman -U --noconfirm $force $nodeps $@ && return
[ -n "$nodeps" ] && return
local RES=$?
[ -n "$nodeps" ] && return $RES
sudocmd pacman -U $force $@
return ;;
slackpkg)
sudocmd /sbin/installpkg $@
# FIXME: check for full package name
# FIXME: broken status when use batch and default answer
__separate_sudocmd_foreach "/sbin/installpkg" "/sbin/upgradepkg" $@
return ;;
esac
......@@ -944,6 +1089,10 @@ epm_print_install_command()
pkgsrc)
echo "pkg_add $@"
;;
emerge)
# need be placed in /usr/portage/packages/somewhere
echo "emerge --usepkg $@"
;;
pacman)
echo "pacman -U --noconfirm --force $nodeps $@"
;;
......@@ -957,7 +1106,7 @@ epm_print_install_command()
echo "ipkg install $@"
;;
*)
fatal "Do not known appropriate install command for $PMTYPE"
fatal "Have no suitable appropriate install command for $PMTYPE"
;;
esac
}
......@@ -970,7 +1119,7 @@ epm_install()
return
fi
[ -n "$pkg_files$pkg_names" ] || fatal "Run install without packages"
[ -n "$pkg_files$pkg_names" ] || { echo "Skip empty install list" ; return 22 ; }
local names="$(echo $pkg_names | filter_out_installed_packages)"
local files="$(echo $pkg_files | filter_out_installed_packages)"
......@@ -981,6 +1130,105 @@ epm_install()
epm_install_files $files
}
# File bin/epm-Install:
epm_Install()
{
# copied from epm_install
local names="$(echo $pkg_names | filter_out_installed_packages)"
local files="$(echo $pkg_files | filter_out_installed_packages)"
[ -z "$files$names" ] && echo "Skip empty install list" && return 22
# do update only if really need install something
case $PMTYPE in
yum-rpm)
;;
*)
epm_update || return
;;
esac
epm_install_names $names || return
epm_install_files $files
}
# File bin/epm-install-emerge:
__emerge_install_ebuild()
{
local EBUILD="$1"
[ -s "$EBUILD" ] || fatal ".ebuild file '$EBUILD' is missing"
# load ebuild and get vars
. $(pwd)/$EBUILD
[ -n "$SRC_URI" ] || fatal "Can't load SRC_URI from $EBUILD"
# try to detect tarballs
local TARBALLS=
local BASEDIR=$(dirname $EBUILD)
for i in $SRC_URI ; do
[ -s "$BASEDIR/$(basename $i)" ] || continue
TARBALLS="$TARBALLS $BASEDIR/$(basename $i)"
done
local PORTAGENAME=epm
local LP=/usr/local/portage/$PORTAGENAME
docmd mkdir -p $LP/
MAKECONF=/etc/portage/make.conf
[ -r "$MAKECONF" ] || MAKECONF=/etc/make.conf
if ! grep -v "^#" $MAKECONF | grep -q $LP ; then
echo "PORTDIR_OVERLAY=\"$LP \${PORTDIR_OVERLAY}\"" >>$MAKECONF
# Overlay name
mkdir -p $LP/profiles/
echo "$PORTAGENAME" > $LP/profiles/repo_name
fi
# copy tarballs
local DDIR=/usr/portage/distfiles
[ -d /var/calculate/remote/distfiles ] && DDIR=/var/calculate/remote/distfiles
docmd cp -f $TARBALLS $DDIR/ || return
# copy ebuild
docmd cp -f $EBUILD $LP/ || return
cd $LP
docmd ebuild $(basename $EBUILD) digest
cd -
# FIXME: more correcty get name
local PKGNAME=$(echo $EBUILD | sed -e "s|-[0-9].*||g")
docmd emerge -av $PKGNAME || return
}
__emerge_install_tbz2()
{
local TGDIR=/usr/portage/packages/app-arch
mkdir -p $TGDIR
cp $i $TGDIR || return
docmd emerge --usepkg $TGDIR/$(basename $i) || return
}
epm_install_emerge()
{
local EBUILD=
#local TARBALLS=
local i
# search ebuild in the args
for i in $* ; do
if echo $i | grep -q ebuild ; then
__emerge_install_ebuild $i || return
elif echo $i | grep -q "\.tbz2$" ; then
__emerge_install_tbz2 $i || return
# else
# TARBALLS="$TARBALLS $i"
fi
done
}
# File bin/epm-kernel_update:
epm_kernel_update()
......@@ -995,16 +1243,32 @@ epm_kernel_update()
case $PMTYPE in
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
}
# File bin/epm-packages:
__epm_packages_sort()
{
case $PMTYPE in
apt-rpm|yum-rpm|urpm-rpm|zypper-rpm|dnf-rpm)
docmd rpm -qa --queryformat "%{size} %{name}-%{version}-%{release}\n" $pkg_filenames | sort -n
;;
apt-dpkg)
docmd dpkg-query -W --showformat="\${Size} \${Package}-\${Version}\n" $pkg_filenames | sort -n
;;
*)
fatal "Sorted package list are not realized for $PMTYPE"
;;
esac
}
epm_packages()
{
local CMD
[ -n "$sort" ] && __epm_packages_sort && return
case $PMTYPE in
apt-rpm)
......@@ -1012,7 +1276,8 @@ case $PMTYPE in
[ -n "$short" ] && CMD="rpm -qa --queryformat %{name}\n $pkg_filenames"
;;
apt-dpkg)
CMD="dpkg -l $pkg_filenames"
#CMD="dpkg -l $pkg_filenames"
CMD="dpkg-query -W --showformat=\${Package}-\${Version}\n $pkg_filenames"
[ -n "$short" ] && CMD="dpkg-query -W --showformat=\${Package}\n $pkg_filenames"
;;
yum-rpm|urpm-rpm|zypper-rpm|dnf-rpm)
......@@ -1033,10 +1298,18 @@ case $PMTYPE in
fi
;;
npackd)
CMD="npackdcl list"
CMD="npackdcl list --status=installed"
# TODO: use search if pkg_filenames is not empty
;;
slackpkg)
CMD="ls -1 /var/log/packages/"
if [ -n "$short" ] ; then
# FIXME: does not work for libjpeg-v8a
# TODO: remove last 3 elements (if arch is second from the last?)
# FIXME this hack
docmd ls -1 /var/log/packages/ | sed -e "s|-[0-9].*||g" | sed -e "s|libjpeg-v8a.*|libjpeg|g"
return
fi
;;
homebrew)
CMD="brew $pkg_filenames"
......@@ -1045,7 +1318,7 @@ case $PMTYPE in
CMD="ipkg list"
;;
*)
fatal "Do not known query command for $PMTYPE"
fatal "Have no suitable query command for $PMTYPE"
;;
esac
......@@ -1066,6 +1339,52 @@ epm_programs()
xargs $0 -qf --quiet --short | sort -u
}
# File bin/epm-provides:
epm_provides()
{
local CMD
[ -n "$pkg_filenames" ] || fatal "Run query without names"
case $PMTYPE in
*-rpm)
CMD="rpm -q --provides -p"
;;
*)
fatal "Have no suitable command for $PMTYPE"
;;
esac
[ -n "$pkg_files" ] && docmd $CMD $pkg_files
case $PMTYPE in
apt-rpm)
if is_installed $pkg_names ; then
CMD="rpm -q --provides"
else
CMD="apt-cache depends"
fi
;;
urpm-rpm|zypper-rpm)
if is_installed $pkg_names ; then
CMD="rpm -q --provides"
else
fatal "FIXME: use hi level commands"
fi
;;
emerge)
CMD="equery files"
;;
*)
fatal "Have no suitable command for $PMTYPE"
;;
esac
[ -n "$pkg_names" ] && docmd $CMD $pkg_names
}
# File bin/epm-query:
......@@ -1075,14 +1394,60 @@ _query_via_packages_list()
local res=0
local firstpkg=$1
shift
# separate first line for print out command
short=1 pkg_filenames=$firstpkg epm_packages | grep -- "^$firstpkg$" || res=1
for pkg in "$@" ; do
short=1 pkg_filenames=$pkg epm_packages 2>/dev/null | grep -- "^$pkg$" || res=1
done
return $res
}
__epm_get_hilevel_nameform()
{
[ -n "$*" ] || return
case $PMTYPE in
apt-rpm)
# use # as delimeter for apt
local pkg
pkg=$(rpm -q --queryformat "%{NAME}#%{SERIAL}:%{VERSION}-%{RELEASE}\n" $1)
echo $pkg | grep -q "(none)" && pkg=$(rpm -q --queryformat "%{NAME}#%{VERSION}-%{RELEASE}\n" $1)
# HACK: can use only for multiple install packages like kernel
echo $pkg | grep -q kernel || return 1
echo $pkg
return
;;
yum-rpm)
# just use strict version with Epoch and Serial
local pkg
pkg=$(rpm -q --queryformat "%{EPOCH}:%{NAME}%{VERSION}-%{RELEASE}.${ARCH}\n" $1)
echo $pkg | grep -q "(none)" && pkg=$(rpm -q --queryformat "%{NAME}-%{VERSION}-%{RELEASE}.${ARCH}\n" $1)
echo $pkg
return
;;
*)
return 1
;;
esac
}
__epm_get_hilevel_name()
{
local i
for i in $@ ; do
local pkg
# get short form in pkg
quiet=1 short=1 pkg=$(__epm_query_name $i)
# if already short form, skipped
[ "$pkg" = "$i" ] && echo "$i" && continue
# try get long form or use short form
__epm_get_hilevel_nameform $i || echo $pkg
done
}
__epm_query_file()
{
local CMD
......@@ -1092,13 +1457,11 @@ __epm_query_file()
case $PMTYPE in
*-rpm)
CMD="rpm -qp"
[ -n "$short" ] && CMD="rpm -qp --queryformat %{name}\n"
;;
apt-dpkg)
CMD="dpkg-deb --show"
# TODO: make rpm-like output
#showcmd dpkg -l $pkg_filenames
#dpkg -l $pkg_filenames | grep "^ii"
#return
CMD="dpkg-deb --show --showformat=\${Package}-\${Version}\n"
[ -n "$short" ] && CMD="dpkg-query --show --showformat=\${Package}\n"
;;
*)
fatal "Do not know command for query file package"
......@@ -1117,13 +1480,12 @@ __epm_query_name()
case $PMTYPE in
*-rpm)
CMD="rpm -q"
[ -n "$short" ] && CMD="rpm -q --queryformat %{name}\n"
;;
apt-dpkg)
CMD="dpkg -l"
# TODO: make rpm-like output
#showcmd dpkg -l $pkg_filenames
#dpkg -l $pkg_filenames | grep "^ii"
#return
#docmd dpkg -l $@ | grep "^ii"
CMD="dpkg-query -W --showformat=\${Package}-\${Version}\n"
[ -n "$short" ] && CMD="dpkg-query -W --showformat=\${Package}\n"
;;
npackd)
CMD="npackdcl path --package=$@"
......@@ -1132,6 +1494,7 @@ __epm_query_name()
warning "fix query"
return 1
;;
# Note: slackpkg info pkgname
*)
_query_via_packages_list $@
return
......@@ -1144,7 +1507,7 @@ __epm_query_name()
is_installed()
{
#pkg_filenames="$@" epm_query >/dev/null
epm installed $@ >/dev/null
epm installed $@ >/dev/null 2>/dev/null
}
separate_installed()
......@@ -1240,7 +1603,7 @@ __do_query()
CMD="ipkg files"
;;
*)
fatal "Do not known query command for $PMTYPE"
fatal "Have no suitable query command for $PMTYPE"
;;
esac
......@@ -1271,7 +1634,7 @@ __do_short_query()
return
;;
*)
fatal "Do not known query command for $PMTYPE"
fatal "Have no suitable query command for $PMTYPE"
;;
esac
......@@ -1327,7 +1690,7 @@ epm_reinstall_names()
esac
# fallback to generic install
epm_install_names
epm_install_names $@
}
epm_reinstall_files()
......@@ -1406,7 +1769,7 @@ epm_release_upgrade()
epm Upgrade
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -1415,6 +1778,7 @@ epm_release_upgrade()
# File bin/epm-remove:
epm_remove_low()
{
[ -z "$1" ] && return
......@@ -1423,8 +1787,7 @@ epm_remove_low()
sudocmd rpm -ev $nodeps $@
return ;;
apt-dpkg)
[ -n "$nodeps" ] && nodeps="--force-all"
sudocmd dpkg -P $nodeps $@
sudocmd dpkg -P $(subst_option nodeps --force-all) $@
return ;;
pkgsrc)
sudocmd pkg_delete -r $@
......@@ -1479,10 +1842,13 @@ epm_remove_names()
sudocmd mpkg remove $@
return ;;
npackd)
docmd npackdcl remove --package=$@
sudocmd npackdcl remove --package=$@
return ;;
nix)
sudocmd nix-env --uninstall $@
return ;;
chocolatey)
docmd chocolatey uninstall $@
sudocmd chocolatey uninstall $@
return ;;
slackpkg)
sudocmd /usr/sbin/slackpkg remove $@
......@@ -1491,11 +1857,10 @@ epm_remove_names()
sudocmd brew remove $@
return ;;
ipkg)
[ -n "$force" ] && force=-force-depends
sudocmd ipkg $force remove $@
sudocmd ipkg $(subst_option force -force-depends) remove $@
return ;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
}
......@@ -1553,7 +1918,7 @@ epm_print_remove_command()
echo "ipkg remove $@"
;;
*)
fatal "Do not known appropriate remove command for $PMTYPE"
fatal "Have no suitable appropriate remove command for $PMTYPE"
;;
esac
}
......@@ -1566,19 +1931,23 @@ epm_remove()
return
fi
[ -n "$pkg_files" ] && fatal "FIXME: remove by package file is not supported yet"
# get full package name(s) from the package file(s)
[ -n "$pkg_files" ] && pkg_names="$pkg_names $(epm query $pkg_files)"
[ -n "$pkg_names" ] || fatal "Run remove without args"
epm_remove_low $pkg_names && return
[ -n "$pkg_filenames" ] || fatal "Run remove without args"
epm_remove_low $pkg_filenames && return
# get package name for hi level package management command (with version if supported and if possible)
pkg_names=$(__epm_get_hilevel_name $pkg_names)
if [ -n "$non_interactive" ] ; then
epm_remove_nonint $pkg_filenames
epm_remove_nonint $pkg_names
local RET=$?
# if not separate command, use usual command
[ "$RET" = "5" ] || return $RET
fi
epm_remove_names $pkg_filenames
epm_remove_names $pkg_names
}
......@@ -1609,13 +1978,13 @@ case $PMTYPE in
echo "You need remove repo from /etc/pacman.conf"
;;
npackd)
docmd npackdcl remove-repo --url=$pkg_filenames
sudocmd npackdcl remove-repo --url=$pkg_filenames
;;
slackpkg)
echo "You need remove repo from /etc/slackpkg/mirrors"
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -1669,7 +2038,7 @@ case $PMTYPE in
docmd grep -v -- "^#\|^$" /etc/slackpkg/mirrors
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -1687,12 +2056,14 @@ case $PMTYPE in
CMD="rpm -q --requires -p"
;;
apt-dpkg)
# FIXME: need package base
showcmd dpkg -s $pkg_files
a= dpkg -s $pkg_names | grep "^Depends:" | sed "s|^Depends:||g"
# FIXME: we need execute package name section too
return
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -1713,7 +2084,7 @@ case $PMTYPE in
CMD="apt-cache depends"
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -1746,6 +2117,9 @@ case $PMTYPE in
pacman)
CMD="pacman -Ss"
;;
aura)
CMD="aura -As"
;;
yum-rpm)
CMD="yum search"
;;
......@@ -1759,7 +2133,8 @@ case $PMTYPE in
CMD="mpkg search"
;;
npackd)
fatal "FIXME: Have not idea for search with npackdcl list"
docmd npackdcl search --query="$pkg_filenames" --status=all
return
;;
chocolatey)
CMD="chocolatey list"
......@@ -1774,7 +2149,7 @@ case $PMTYPE in
CMD="brew search"
;;
*)
fatal "Do not known search command for $PMTYPE"
fatal "Have no suitable search command for $PMTYPE"
;;
esac
......@@ -1840,7 +2215,7 @@ case $PMTYPE in
CMD="ipkg search"
;;
*)
fatal "Do not known search file command for $PMTYPE"
fatal "Have no suitable search file command for $PMTYPE"
;;
esac
......@@ -1861,9 +2236,31 @@ __use_yum_assumeno()
a= yum --help 2>&1 | grep -q -- "--assumeno"
}
__check_yum_result()
{
grep "^No package" $1 && return 1
grep "^Complete!" $1 && return 0
grep "^Exiting on user Command" $1 && return 0
grep "^Exiting on user command" $1 && return 0
# return default result by default
return $2
}
__check_pacman_result()
{
grep "^error: target not found:" $1 && return 1
grep "^Total Installed Size:" $1 && return 0
grep "^Total Download Size:" $1 && return 0
# return default result by default
return $2
}
_epm_do_simulate()
{
local CMD
local RES=0
local filenames="$*"
case $PMTYPE in
......@@ -1872,20 +2269,17 @@ _epm_do_simulate()
;;
yum-rpm)
if __use_yum_assumeno ; then
LC_ALL=C sudocmd yum --assumeno install $filenames
# FIXME: check only error output
LC_ALL=C sudocmd yum --assumeno install $filenames 2>&1 | grep "^No package" && return 1
LC_ALL=C sudocmd yum --assumeno install $filenames 2>&1 | grep "^Complete!" && return 0
LC_ALL=C sudocmd yum --assumeno install $filenames 2>&1 | grep "^Exiting on user Command" && return 0
LC_ALL=C sudocmd yum --assumeno install $filenames >/dev/null 2>&1 || return
LC_ALL=C store_output sudocmd yum --assumeno install $filenames
__check_yum_result $RC_STDOUT $?
else
LC_ALL=C echo n | sudocmd yum install $filenames
# FIXME: check only error output
LC_ALL=C echo n | sudocmd yum install $filenames 2>&1 | grep "^No package" && return 1
LC_ALL=C echo n | sudocmd yum install $filenames 2>&1 | grep "^Complete!" && return 0
LC_ALL=C echo n | sudocmd yum install $filenames >/dev/null 2>&1 || return
LC_ALL=C store_output sudocmd yum install $filenames <<EOF
n
EOF
__check_yum_result $RC_STDOUT $?
fi
return 0 ;;
RES=$?
clean_store_output
return $RES ;;
urpm-rpm)
CMD="urpmi --test --auto"
;;
......@@ -1897,12 +2291,22 @@ _epm_do_simulate()
CMD="zypper --non-interactive install"
;;
emerge)
echo "FIXME: Skip with emerge"
return ;;
local res=0
for pkg in $filenames ; do
is_installed $pkg && continue
docmd emerge --pretend $pkg && continue
pkg=1
break
done
return $res ;;
pacman)
showcmd $SUDO pacman -v -S $filenames
echo no | $SUDO pacman -v -S $filenames
return ;;
LC_ALL=C store_output sudocmd pacman -v -S $filenames <<EOF
no
EOF
__check_pacman_result $RC_STDOUT $?
RES=$?
clean_store_output
return $RES ;;
slackpkg)
#docmd /usr/sbin/slackpkg -batch=on -default_answer=yes download
# just try search every package
......@@ -1910,6 +2314,8 @@ _epm_do_simulate()
local pkg res
res=0
for pkg in $filenames ; do
# FIXME: -[0-0] does not work in search!
# FIXME: we need strict search here (not find gst-plugins-base if search for gst-plugins
pkg_filenames="$pkg-[0-9]" epm_search | grep -E "(installed|upgrade)" && continue
pkg_filenames="$pkg" epm_search | grep -E "(installed|upgrade)" && continue
res=1
......@@ -1917,7 +2323,7 @@ _epm_do_simulate()
done
return $res ;;
*)
fatal "Do not known simulate command for $PMTYPE"
fatal "Have no suitable simulate command for $PMTYPE"
;;
esac
......@@ -1967,6 +2373,9 @@ case $PMTYPE in
pacman)
sudocmd pacman -S -y
;;
aura)
sudocmd aura -A -y
;;
zypper-rpm)
sudocmd zypper refresh
;;
......@@ -1974,11 +2383,14 @@ case $PMTYPE in
sudocmd emerge --sync
;;
slackpkg)
sudocmd /usr/sbin/slackpkg update
sudocmd /usr/sbin/slackpkg -batch=on update
;;
deepsolver-rpm)
sudocmd ds-update
;;
npackd)
sudocmd packdcl detect # get packages from MSI database
;;
homebrew)
sudocmd brew update
;;
......@@ -1986,7 +2398,7 @@ case $PMTYPE in
sudocmd ipkg update
;;
*)
fatal "Do not known update command for $PMTYPE"
fatal "Have no suitable update command for $PMTYPE"
;;
esac
......@@ -2001,10 +2413,12 @@ epm_upgrade()
case $PMTYPE in
apt-rpm|apt-dpkg)
# FIXME: apt-get update before
# non_interactive
# Функцию добавления параметра при условии
CMD="apt-get dist-upgrade"
;;
yum-rpm)
# can do update repobase automagically
CMD="yum update"
;;
dnf-rpm)
......@@ -2018,7 +2432,10 @@ epm_upgrade()
CMD="zypper dist-upgrade"
;;
pacman)
CMD="pacman -S -u"
CMD="pacman -S -u $force"
;;
aura)
CMD="aura -A -u"
;;
emerge)
CMD="emerge -NuDa world"
......@@ -2039,7 +2456,7 @@ epm_upgrade()
CMD="/usr/sbin/slackpkg upgrade-all"
;;
*)
fatal "Do not known command for $PMTYPE"
fatal "Have no suitable command for $PMTYPE"
;;
esac
......@@ -2059,7 +2476,33 @@ epm_Upgrade()
;;
esac
epm_upgrade $pkg_filenames
epm_upgrade
}
# File bin/epm-whatdepends:
epm_whatdepends()
{
local CMD
[ -n "$pkg_names" ] || fatal "Run query without names"
case $PMTYPE in
apt-rpm|apt-dpkg)
CMD="apt-cache whatdepends"
;;
yum-rpm)
CMD="repoquery --whatrequires"
;;
emerge)
CMD="equery depends -a"
;;
*)
fatal "Have no suitable command for $PMTYPE"
;;
esac
[ -n "$pkg_names" ] && docmd $CMD $pkg_names
}
internal_distr_info()
{
......@@ -2169,7 +2612,9 @@ if distro altlinux-release ; then
elif distro gentoo-release ; then
DISTRIB_ID="Gentoo"
DISTRIB_RELEASE=`basename $(readlink $ROOTDIR/etc/make.profile)`
MAKEPROFILE=$(readlink $ROOTDIR/etc/portage/make.profile 2>/dev/null) || MAKEPROFILE=$(readlink $ROOTDIR/etc/make.profile)
DISTRIB_RELEASE=`basename $MAKEPROFILE`
echo $DISTRIB_RELEASE | grep -q "[0-9]" || DISTRIB_RELEASE=`basename $(dirname $MAKEPROFILE)`
# Slackware based
elif distro mopslinux-version ; then
......@@ -2378,7 +2823,7 @@ $(get_help HELPOPT)
print_version()
{
echo "EPM package manager version 1.2.2"
echo "EPM package manager version 1.3.0"
echo "Running on $($DISTRVENDOR) ('$PMTYPE' package manager uses '$PKGFORMAT' package format)"
echo "Copyright (c) Etersoft 2012-2013"
echo "This program may be freely redistributed under the terms of the GNU AGPLv3."
......@@ -2395,6 +2840,7 @@ quiet=
nodeps=
force=
short=
sort=
non_interactive=
skip_installed=
show_command_only=
......@@ -2432,6 +2878,12 @@ case $progname in
epmqp)
epm_cmd=query_package
;;
epmql)
epm_cmd=filelist
;;
epmu)
epm_cmd=update
;;
epm|upm|eepm)
;;
*)
......@@ -2450,7 +2902,7 @@ check_command()
-i|install|add) # HELPCMD: install package(s) from remote repositories or from local file
epm_cmd=install
;;
-e|-P|remove|delete) # HELPCMD: remove (delete) package(s) from the database and the system
-e|-P|remove|delete|uninstall) # HELPCMD: remove (delete) package(s) from the database and the system
epm_cmd=remove
;;
-s|search) # HELPCMD: search in remote package repositories
......@@ -2467,7 +2919,10 @@ check_command()
reinstall) # HELPCMD: reinstall package(s) from remote repositories or from local file
epm_cmd=reinstall
;;
-q|installed) # HELPCMD: check presence of package(s)
Install) # HELPCMD: perform update package repo info and install package(s) via install command
epm_cmd=Install
;;
-q|installed|query) # HELPCMD: check presence of package(s) and print this name (also --short is supported)
epm_cmd=query
;;
-sf|sf|filesearch) # HELPCMD: search in which package a file is included
......@@ -2488,10 +2943,16 @@ check_command()
requires|deplist) # HELPCMD: print package requires
epm_cmd=requires
;;
provides) # HELPCMD: print package provides
epm_cmd=provides
;;
whatdepends) # HELPCMD: print packages dependences on that
epm_cmd=whatdepends
;;
-qa|list|packages|-l) # HELPCMD: list of installed package(s)
epm_cmd=packages
;;
programs) # HELPCMD: list of installed program(s)
programs) # HELPCMD: list of installed GUI program(s)
epm_cmd=programs
;;
......@@ -2511,7 +2972,7 @@ check_command()
release-upgrade) # HELPCMD: update whole system to the next release
epm_cmd=release_upgrade
;;
kernel-update|kernel-upgrade|update-kernel) # HELPCMD: update system kernel to the last repo version
kernel-update|kernel-upgrade|update-kernel|upgrade-kernel) # HELPCMD: update system kernel to the last repo version
epm_cmd=kernel_update
;;
......@@ -2571,9 +3032,12 @@ check_option()
--force) # HELPOPT: force install/remove package (f.i., override)
force="--force"
;;
--short) # HELPOPT: short output (package instead package-version-release)
--short) # HELPOPT: short output (just 'package' instead 'package-version-release')
short="--short"
;;
--sort) # HELPOPT: sort output, f.i. --sort=size (supported only for packages command)
sort="$1"
;;
--auto) # HELPOPT: non interactive mode
non_interactive=1
;;
......
......@@ -124,6 +124,18 @@ sudocmd()
$SUDO "$@"
}
sudocmd_foreach()
{
local cmd
cmd="$1"
#showcmd "$@"
shift
for pkg in "$@" ; do
sudocmd $cmd $pkg
done
}
filter_strip_spaces()
{
# possible use just
......@@ -137,6 +149,27 @@ strip_spaces()
echo "$*" | filter_strip_spaces
}
subst_option()
{
eval "[ -n \"\$$1\" ]" && echo "$2" || echo "$3"
}
store_output()
{
# use make_temp_file from etersoft-build-utils
RC_STDOUT=$(mktemp)
#RC_STDERR=$(mktemp)
"$@" 2>&1 | tee $RC_STDOUT
# http://tldp.org/LDP/abs/html/bashver3.html#PIPEFAILREF
return $PIPESTATUS
}
clean_store_output()
{
rm -f $RC_STDOUT
}
epm()
{
$PROGDIR/epm $@
......@@ -150,6 +183,13 @@ fatal()
exit 1
}
warning()
{
if [ -z "$TEXTDOMAIN" ] ; then
echo "Warning: $@" >&2
fi
}
set_sudo()
{
SUDO=""
......@@ -170,7 +210,7 @@ set_sudo()
get_help()
{
grep -- "# $1" $0 | while read n ; do
grep -v -- "^#" $0 | grep -- "# $1" | while read n ; do
opt=$(echo $n | sed -e "s|) # $1:.*||g")
desc=$(echo $n | sed -e "s|.*) # $1:||g")
printf " %-20s %s\n" $opt "$desc"
......@@ -235,7 +275,7 @@ case $DISTRNAME in
CMD="ipkg"
;;
*)
fatal "Do not known DISTRNAME $DISTRNAME"
fatal "Have no suitable DISTRNAME $DISTRNAME"
;;
esac
PMTYPE=$CMD
......@@ -259,7 +299,7 @@ serv_common()
sudocmd systemctl "$@" $SERVICE
;;
*)
fatal "Do not known command for $SERVICETYPE"
fatal "Have no suitable command for $SERVICETYPE"
;;
esac
......@@ -284,7 +324,7 @@ serv_disable()
sudocmd systemctl disable $1
;;
*)
fatal "Do not known command for $SERVICETYPE"
fatal "Have no suitable command for $SERVICETYPE"
;;
esac
}
......@@ -308,7 +348,7 @@ serv_enable()
sudocmd systemctl enable $1
;;
*)
fatal "Do not known command for $SERVICETYPE"
fatal "Have no suitable command for $SERVICETYPE"
;;
esac
......@@ -326,13 +366,13 @@ serv_list()
sudocmd service --status-all
;;
systemd)
sudocmd systemctl list-units
sudocmd systemctl list-units $@
;;
*)
load_helper serv-list_all
load_helper serv-status
for i in $(serv_list_all) ; do
is_service_running $i && echo $i
is_service_running $i >/dev/null && echo $i
done
;;
esac
......@@ -351,10 +391,10 @@ serv_list_all()
sudocmd ls -1 /etc/init.d/* | sed -e "s|/etc/init.d/||g" | grep -v README
;;
systemd)
sudocmd systemctl list-unit-files
sudocmd systemctl list-unit-files $@
;;
*)
fatal "Do not known command for $SERVICETYPE"
fatal "Have no suitable command for $SERVICETYPE"
;;
esac
}
......@@ -365,8 +405,13 @@ serv_list_startup()
{
case $SERVICETYPE in
*)
fatal "Do not known command for $SERVICETYPE"
load_helper serv-list_all
load_helper serv-status
for i in $(serv_list_all | cut -f 1 -d" " | grep "\.service$") ; do
is_service_autostart >/dev/null $i && echo $i
done
;;
esac
}
......@@ -388,7 +433,7 @@ serv_start()
sudocmd systemctl start "$SERVICE" "$@"
;;
*)
fatal "Do not known command for $SERVICETYPE"
fatal "Have no suitable command for $SERVICETYPE"
;;
esac
}
......@@ -405,11 +450,10 @@ is_service_running()
$SUDO /etc/init.d/$1 status >/dev/null
;;
systemd)
#sudocmd systemctl is-enabled $1
fatal "FIXME: don't know how detect current startup state"
$SUDO systemctl status $1 >/dev/null
;;
*)
fatal "Do not known command for $SERVICETYPE"
fatal "Have no suitable command for $SERVICETYPE"
;;
esac
}
......@@ -424,17 +468,17 @@ is_service_autostart()
fatal "FIXME: don't know how detect current startup state"
;;
systemd)
sudocmd systemctl is-enabled $1.service
$SUDO systemctl is-enabled $1
;;
*)
fatal "Do not known command for $SERVICETYPE"
fatal "Have no suitable command for $SERVICETYPE"
;;
esac
}
serv_status()
{
is_service_autostart $1 && echo "Service $1 is sheduled to run on startup" || echo "Service $1 will NOT run on startup"
is_service_autostart $1 && echo "Service $1 is scheduled to run on startup" || echo "Service $1 will NOT run on startup"
local SERVICE="$1"
shift
......@@ -447,10 +491,10 @@ serv_status()
sudocmd /etc/init.d/$SERVICE status "$@"
;;
systemd)
sudocmd systemctl status $SERVICE.service "$@"
sudocmd systemctl status $SERVICE "$@"
;;
*)
fatal "Do not known command for $SERVICETYPE"
fatal "Have no suitable command for $SERVICETYPE"
;;
esac
}
......@@ -473,7 +517,7 @@ serv_stop()
sudocmd systemctl stop $SERVICE "$@"
;;
*)
fatal "Do not known command for $SERVICETYPE"
fatal "Have no suitable command for $SERVICETYPE"
;;
esac
}
......@@ -499,7 +543,7 @@ serv_try_restart()
sudocmd systemctl try-restart $SERVICE "$@"
;;
*)
fatal "Do not known command for $SERVICETYPE"
fatal "Have no suitable command for $SERVICETYPE"
;;
esac
}
......@@ -529,7 +573,7 @@ serv_usage()
sudocmd systemctl $SERVICE 2>&1
;;
*)
fatal "Do not known command for $SERVICETYPE"
fatal "Have no suitable command for $SERVICETYPE"
;;
esac
......@@ -644,7 +688,9 @@ if distro altlinux-release ; then
elif distro gentoo-release ; then
DISTRIB_ID="Gentoo"
DISTRIB_RELEASE=`basename $(readlink $ROOTDIR/etc/make.profile)`
MAKEPROFILE=$(readlink $ROOTDIR/etc/portage/make.profile 2>/dev/null) || MAKEPROFILE=$(readlink $ROOTDIR/etc/make.profile)
DISTRIB_RELEASE=`basename $MAKEPROFILE`
echo $DISTRIB_RELEASE | grep -q "[0-9]" || DISTRIB_RELEASE=`basename $(dirname $MAKEPROFILE)`
# Slackware based
elif distro mopslinux-version ; then
......@@ -890,7 +936,7 @@ case $DISTRNAME in
# CMD="chocolatey"
# ;;
*)
fatal "Do not known DISTRNAME $DISTRNAME yet"
fatal "Have no suitable DISTRNAME $DISTRNAME yet"
;;
esac
......@@ -920,7 +966,7 @@ $(get_help HELPOPT)
print_version()
{
echo "Service manager version 1.2.2"
echo "Service manager version 1.3.0"
echo "Running on $($DISTRVENDOR)"
echo "Copyright (c) Etersoft 2012, 2013"
echo "This program may be freely redistributed under the terms of the GNU AGPLv3."
......@@ -940,7 +986,7 @@ show_command_only=
serv_cmd=
service_name=
params=
withoutservicename=
check_command()
{
......@@ -953,6 +999,7 @@ check_command()
;;
usage) # HELPCMD: print out usage of the service
serv_cmd=usage
withoutservicename=1
;;
#restart) # HELPCMD: restart service
#reload) # HELPCMD: reload service
......@@ -967,12 +1014,15 @@ check_command()
;;
list) # HELPCMD: list running services
serv_cmd=list
withoutservicename=1
;;
list-all) # HELPCMD: list all available services
serv_cmd=list_all
withoutservicename=1
;;
list-startup) # HELPCMD: list all services to run on startup
serv_cmd=list_startup
withoutservicename=1
;;
on|enable) # HELPCMD: add service to run on startup and start it now
serv_cmd=enable
......@@ -1028,7 +1078,7 @@ echover "service: $service_name"
echover "command: $serv_cmd"
# Just printout help if run without args
if [ "$serv_cmd" != "list" ] && [ "$serv_cmd" != "list_all" ] && [ -z "$service_name" ] ; then
if [ -z "$withoutservicename" ] && [ -z "$service_name" ] ; then
print_version
echo
fatal "Run $ $progname --help for get help"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment