Commit 5000593e authored by Vitaly Lipatov's avatar Vitaly Lipatov

backported to p7 as 1.5.4-alt0.M70P.1 (with rpmbph script)

parents c4ee6403 cd465a9c
pkgdatadir=$(datadir)/eepm pkgdatadir=$(datadir)/eepm
# due using %makeinstallstd in spec # due using %makeinstallstd in spec
instpkgdatadir=/usr/share/eepm instpkgdatadir=$(pkgdatadir)
install: install:
mkdir -p $(DESTDIR)$(bindir)/ mkdir -p $(DESTDIR)$(bindir)/
......
менеджер пакетов из NetBSD — pkgsrc (команды для поиска нужных пакетов – pkgin update; pkgin avail; pkgin search).
Загрузку конфига Загрузку конфига
Установку пакета по URL Установку пакета по URL
......
...@@ -235,9 +235,15 @@ check_command() ...@@ -235,9 +235,15 @@ check_command()
Upgrade) # HELPCMD: force update package base, then run upgrade Upgrade) # HELPCMD: force update package base, then run upgrade
epm_cmd=Upgrade epm_cmd=Upgrade
;; ;;
downgrade) # HELPCMD: downgrade [all] packages to the repo state
epm_cmd=downgrade
;;
simulate) # HELPCMD: simulate install with check requires simulate) # HELPCMD: simulate install with check requires
epm_cmd=simulate epm_cmd=simulate
;; ;;
audit) # HELPCMD: audits installed packages against known vulnerabilities
epm_cmd=audit
;;
-V|checkpkg|integrity) # HELPCMD: check package file integrity (checksum) -V|checkpkg|integrity) # HELPCMD: check package file integrity (checksum)
epm_cmd=checkpkg epm_cmd=checkpkg
;; ;;
...@@ -318,7 +324,7 @@ done ...@@ -318,7 +324,7 @@ done
# if input is not console, get pkg from it too # if input is not console, get pkg from it too
if ! inputisatty ; then if ! inputisatty ; then
for opt in $(timeout 1 cat) ; do for opt in $(timeout 1 cat 2>/dev/null) ; do
check_filenames $opt check_filenames $opt
done done
fi fi
......
#!/bin/sh
#
# Copyright (C) 2014 Etersoft
# Copyright (C) 2014 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
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
epm_audit()
{
case $PMTYPE in
pkgng)
sudocmd pkg audit -F
;;
*)
fatal "Have no suitable command for $PMTYPE"
;;
esac
}
...@@ -79,6 +79,9 @@ case $PMTYPE in ...@@ -79,6 +79,9 @@ case $PMTYPE in
guix) guix)
sudocmd guix gc sudocmd guix gc
;; ;;
pkgng)
sudocmd pkg autoremove
;;
#zypper-rpm) #zypper-rpm)
# sudocmd zypper clean # sudocmd zypper clean
# ;; # ;;
......
...@@ -23,7 +23,7 @@ case $PMTYPE in ...@@ -23,7 +23,7 @@ case $PMTYPE in
apt-rpm|apt-dpkg) apt-rpm|apt-dpkg)
#sudocmd apt-get check || exit #sudocmd apt-get check || exit
#sudocmd apt-get update || exit #sudocmd apt-get update || exit
sudocmd apt-get -f install || exit sudocmd apt-get -f install
;; ;;
apt-dpkg) apt-dpkg)
#sudocmd apt-get update || exit #sudocmd apt-get update || exit
...@@ -56,6 +56,9 @@ case $PMTYPE in ...@@ -56,6 +56,9 @@ case $PMTYPE in
conary) conary)
sudocmd conary verify sudocmd conary verify
;; ;;
pkgng)
sudocmd pkg check -d -a
;;
homebrew) homebrew)
sudocmd brew doctor sudocmd brew doctor
;; ;;
......
...@@ -47,6 +47,9 @@ case $PMTYPE in ...@@ -47,6 +47,9 @@ case $PMTYPE in
;; ;;
slackpkg) slackpkg)
;; ;;
pkgng)
sudo pkg clean
;;
*) *)
fatal "Have no suitable command for $PMTYPE" fatal "Have no suitable command for $PMTYPE"
;; ;;
......
#!/bin/sh
#
# Copyright (C) 2012,2014 Etersoft
# Copyright (C) 2012,2014 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
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
load_helper epm-check_updated_repo
__epm_add_apt_downgrade_preferences()
{
[ -r /etc/apt/preferences ] && fatal "/etc/apt/preferences already exists"
cat <<EOF | $SUDO tee /etc/apt/preferences
Package: *
Pin: release c=$1
Pin-Priority: 1001
EOF
}
__epm_remove_apt_downgrade_preferences()
{
sudocmd rm -f /etc/apt/preferences
}
epm_downgrade()
{
local CMD
# it is useful for first time running
update_repo_if_needed
info "Running command for downgrade packages"
case $PMTYPE in
apt-rpm)
__epm_add_apt_downgrade_preferences classic || return
sudocmd apt-get dist-upgrade
__epm_remove_apt_downgrade_preferences
;;
apt-dpkg)
__epm_add_apt_downgrade_preferences testing || return
sudocmd apt-get dist-upgrade
__epm_remove_apt_downgrade_preferences
;;
yum-rpm)
# can do update repobase automagically
sudocmd yum downgrade $pkg_filename
;;
urpm-rpm)
assure_exists urpm-reposync urpm-tools
sudocmd urpm-reposync -v
;;
*)
fatal "Have no suitable command for $PMTYPE"
;;
esac
}
...@@ -113,6 +113,9 @@ __epm_filelist_name() ...@@ -113,6 +113,9 @@ __epm_filelist_name()
assure_exists equery assure_exists equery
CMD="equery files" CMD="equery files"
;; ;;
pkgng)
CMD="pkg info -l"
;;
slackpkg) slackpkg)
is_installed $pkg_names || fatal "Query filelist for non installed packages does not realized" is_installed $pkg_names || fatal "Query filelist for non installed packages does not realized"
docmd awk 'BEGIN{desk=1}{if(/^FILE LIST:$/){desk=0} else if (desk==0) {print}}' /var/log/packages/${pkg_filenames}* | less docmd awk 'BEGIN{desk=1}{if(/^FILE LIST:$/){desk=0} else if (desk==0) {print}}' /var/log/packages/${pkg_filenames}* | less
......
...@@ -96,6 +96,9 @@ case $PMTYPE in ...@@ -96,6 +96,9 @@ case $PMTYPE in
ipkg) ipkg)
docmd ipkg info $pkg_names docmd ipkg info $pkg_names
;; ;;
pkgng)
docmd pkg info $pkg_names
;;
homebrew) homebrew)
docmd brew info $pkg_names docmd brew info $pkg_names
;; ;;
......
...@@ -106,6 +106,9 @@ epm_install_names() ...@@ -106,6 +106,9 @@ epm_install_names()
pkgsrc) pkgsrc)
sudocmd pkg_add -r $@ sudocmd pkg_add -r $@
return ;; return ;;
pkgng)
sudocmd pkg install $@
return ;;
emerge) emerge)
sudocmd emerge -uD $@ sudocmd emerge -uD $@
return ;; return ;;
...@@ -185,6 +188,9 @@ epm_ni_install_names() ...@@ -185,6 +188,9 @@ epm_ni_install_names()
pkgsrc) pkgsrc)
sudocmd pkg_add -r $@ sudocmd pkg_add -r $@
return ;; return ;;
pkgng)
sudocmd pkg install -y $@
return ;;
emerge) emerge)
sudocmd emerge -uD $@ sudocmd emerge -uD $@
return ;; return ;;
...@@ -299,6 +305,17 @@ epm_install_files() ...@@ -299,6 +305,17 @@ epm_install_files()
pkgsrc) pkgsrc)
sudocmd pkg_add $@ sudocmd pkg_add $@
return ;; return ;;
pkgng)
local PKGTYPE="$(get_package_type $@)"
case "$PKGTYPE" in
tbz)
sudocmd pkg_add $@
;;
*)
sudocmd pkg add $@
;;
esac
return ;;
android) android)
sudocmd pm install $@ sudocmd pm install $@
return ;; return ;;
...@@ -336,6 +353,9 @@ epm_print_install_command() ...@@ -336,6 +353,9 @@ epm_print_install_command()
pkgsrc) pkgsrc)
echo "pkg_add $@" echo "pkg_add $@"
;; ;;
pkgng)
echo "pkg add $@"
;;
emerge) emerge)
# need be placed in /usr/portage/packages/somewhere # need be placed in /usr/portage/packages/somewhere
echo "emerge --usepkg $@" echo "emerge --usepkg $@"
......
...@@ -55,6 +55,7 @@ __emerge_install_ebuild() ...@@ -55,6 +55,7 @@ __emerge_install_ebuild()
# copy tarballs # copy tarballs
local DDIR=/usr/portage/distfiles local DDIR=/usr/portage/distfiles
# FIXME: use independent dir
[ -d /var/calculate/remote/distfiles ] && DDIR=/var/calculate/remote/distfiles [ -d /var/calculate/remote/distfiles ] && DDIR=/var/calculate/remote/distfiles
docmd cp -f $TARBALLS $DDIR/ || return docmd cp -f $TARBALLS $DDIR/ || return
......
...@@ -59,6 +59,17 @@ case $PMTYPE in ...@@ -59,6 +59,17 @@ case $PMTYPE in
;; ;;
pkgsrc) pkgsrc)
CMD="pkg_info" CMD="pkg_info"
docmd $CMD | sed -e "s| .*||g"
return
;;
pkgng)
CMD="pkg info -E $pkg_filenames"
if [ -n "$short" ] ; then
docmd $CMD | sed -e "s| .*||g" | sed -e "s|-[0-9].*||g"
else
docmd $CMD | sed -e "s| .*||g"
fi
return
;; ;;
pacman) pacman)
CMD="pacman -Qs $pkg_filenames" CMD="pacman -Qs $pkg_filenames"
......
...@@ -72,6 +72,9 @@ case $PMTYPE in ...@@ -72,6 +72,9 @@ case $PMTYPE in
# yum-rpm) # yum-rpm)
# CMD="yum deplist" # CMD="yum deplist"
# ;; # ;;
pkgng)
CMD="pkg info -b"
;;
apt-dpkg) apt-dpkg)
# FIXME: need fix for a few names case # FIXME: need fix for a few names case
if is_installed $pkg_names ; then if is_installed $pkg_names ; then
......
...@@ -146,8 +146,13 @@ __epm_query_name() ...@@ -146,8 +146,13 @@ __epm_query_name()
warning "fix query" warning "fix query"
return 1 return 1
;; ;;
# TODO: need to print name if exists
#pkgng)
# CMD="pkg info -e"
# ;;
# Note: slackpkg info pkgname # Note: slackpkg info pkgname
*) *)
# default slow workaround
_query_via_packages_list $@ _query_via_packages_list $@
return return
;; ;;
......
...@@ -86,6 +86,9 @@ __do_query() ...@@ -86,6 +86,9 @@ __do_query()
pacman) pacman)
CMD="pacman -Qo" CMD="pacman -Qo"
;; ;;
pkgng)
CMD="pkg which"
;;
conary) conary)
CMD="conary query --path" CMD="conary query --path"
;; ;;
......
...@@ -33,6 +33,9 @@ epm_remove_low() ...@@ -33,6 +33,9 @@ epm_remove_low()
pkgsrc) pkgsrc)
sudocmd pkg_delete -r $@ sudocmd pkg_delete -r $@
return ;; return ;;
pkgng)
sudocmd pkg delete -R $@
return ;;
emerge) emerge)
sudocmd emerge --unmerge $@ sudocmd emerge --unmerge $@
return ;; return ;;
...@@ -69,6 +72,9 @@ epm_remove_names() ...@@ -69,6 +72,9 @@ epm_remove_names()
pkgsrc) # without dependencies pkgsrc) # without dependencies
sudocmd pkg_delete $@ sudocmd pkg_delete $@
return ;; return ;;
pkgng)
sudocmd pkg delete -R $@
return ;;
emerge) emerge)
#sudocmd emerge --unmerge $@ #sudocmd emerge --unmerge $@
sudocmd emerge -aC $@ sudocmd emerge -aC $@
...@@ -149,6 +155,9 @@ epm_remove_nonint() ...@@ -149,6 +155,9 @@ epm_remove_nonint()
slackpkg) slackpkg)
sudocmd /usr/sbin/slackpkg -batch=on -default_answer=yes remove $@ sudocmd /usr/sbin/slackpkg -batch=on -default_answer=yes remove $@
return ;; return ;;
pkgng)
sudocmd pkg delete -y -R $@
return ;;
ipkg) ipkg)
sudocmd ipkg -force-defaults remove $@ sudocmd ipkg -force-defaults remove $@
return ;; return ;;
...@@ -168,6 +177,9 @@ epm_print_remove_command() ...@@ -168,6 +177,9 @@ epm_print_remove_command()
pkgsrc) pkgsrc)
echo "pkg_delete -r $@" echo "pkg_delete -r $@"
;; ;;
pkgng)
echo "pkg delete -R $@"
;;
pacman) pacman)
echo "pacman -R $@" echo "pacman -R $@"
;; ;;
......
...@@ -82,6 +82,10 @@ case $PMTYPE in ...@@ -82,6 +82,10 @@ case $PMTYPE in
assure_exists equery assure_exists equery
CMD="equery depgraph" CMD="equery depgraph"
;; ;;
pkgng)
#CMD="pkg rquery '%dn-%dv'"
CMD="pkg info -d"
;;
*) *)
fatal "Have no suitable command for $PMTYPE" fatal "Have no suitable command for $PMTYPE"
;; ;;
......
...@@ -40,6 +40,9 @@ case $PMTYPE in ...@@ -40,6 +40,9 @@ case $PMTYPE in
pkgsrc) pkgsrc)
CMD="pkg_info -x --" CMD="pkg_info -x --"
;; ;;
pkgng)
CMD="pkg search -i --"
;;
emerge) emerge)
CMD="emerge --search --" CMD="emerge --search --"
;; ;;
......
...@@ -23,7 +23,7 @@ get_local_alt_contents_index() ...@@ -23,7 +23,7 @@ get_local_alt_contents_index()
{ {
load_helper epm-repolist load_helper epm-repolist
epm_repolist | grep "rpm file:/" | sed -e "s|^rpm file:||g" | while read URL ARCH other ; do epm_repolist | grep "rpm.*file:/" | sed -e "s|^rpm.*file:||g" | while read URL ARCH other ; do
test -d "$URL/$ARCH" || continue # fatal "Local mirror is not accessible via $URL/$ARCH" test -d "$URL/$ARCH" || continue # fatal "Local mirror is not accessible via $URL/$ARCH"
FILE="$URL/$ARCH/base/contents_index" FILE="$URL/$ARCH/base/contents_index"
if [ -r "$FILE" ] ; then if [ -r "$FILE" ] ; then
......
...@@ -288,7 +288,9 @@ __get_package_for_command() ...@@ -288,7 +288,9 @@ __get_package_for_command()
assure_exists() assure_exists()
{ {
load_helper epm-assure load_helper epm-assure
__epm_assure "$1" $(__get_package_for_command "$1") local package="$2"
[ -n "$package" ] || package="$(__get_package_for_command "$1")"
__epm_assure "$1" $package
} }
# improve # improve
...@@ -304,6 +306,14 @@ get_package_type() ...@@ -304,6 +306,14 @@ get_package_type()
echo "rpm" echo "rpm"
return return
;; ;;
*.txz)
echo "txz"
return
;;
*.tbz)
echo "tbz"
return
;;
*) *)
#fatal "Don't know type of $1" #fatal "Don't know type of $1"
# return package name for info # return package name for info
...@@ -359,6 +369,7 @@ case $DISTRNAME in ...@@ -359,6 +369,7 @@ case $DISTRNAME in
;; ;;
FreeBSD|NetBSD|OpenBSD|Solaris) FreeBSD|NetBSD|OpenBSD|Solaris)
CMD="pkgsrc" CMD="pkgsrc"
which pkg 2>/dev/null >/dev/null && CMD=pkgng
;; ;;
Gentoo) Gentoo)
CMD="emerge" CMD="emerge"
......
...@@ -69,6 +69,10 @@ case $PMTYPE in ...@@ -69,6 +69,10 @@ case $PMTYPE in
ipkg) ipkg)
sudocmd ipkg update sudocmd ipkg update
;; ;;
pkgsrc)
# portsnap extract for the first time?
sudocmd portsnap fetch update
;;
*) *)
fatal "Have no suitable update command for $PMTYPE" fatal "Have no suitable update command for $PMTYPE"
;; ;;
......
...@@ -66,6 +66,9 @@ epm_upgrade() ...@@ -66,6 +66,9 @@ epm_upgrade()
pkgsrc) pkgsrc)
CMD="freebsd-update fetch install" CMD="freebsd-update fetch install"
;; ;;
pkgng)
CMD="pkg upgrade"
;;
chocolatey) chocolatey)
CMD="chocolatey update all" CMD="chocolatey update all"
;; ;;
......
...@@ -40,6 +40,9 @@ case $PMTYPE in ...@@ -40,6 +40,9 @@ case $PMTYPE in
assure_exists equery assure_exists equery
CMD="equery depends -a" CMD="equery depends -a"
;; ;;
pkgng)
CMD="pkg info -r"
;;
*) *)
fatal "Have no suitable command for $PMTYPE" fatal "Have no suitable command for $PMTYPE"
;; ;;
......
...@@ -32,6 +32,8 @@ load_helper() ...@@ -32,6 +32,8 @@ load_helper()
load_helper epm-sh-functions load_helper epm-sh-functions
INITDIR=/etc/init.d
PATH=$PATH:/sbin:/usr/sbin PATH=$PATH:/sbin:/usr/sbin
set_sudo set_sudo
...@@ -239,6 +241,7 @@ if [ -z "$withoutservicename" ] && [ -z "$service_name" ] ; then ...@@ -239,6 +241,7 @@ if [ -z "$withoutservicename" ] && [ -z "$service_name" ] ; then
fatal "Run $ $progname --help for get help" fatal "Run $ $progname --help for get help"
fi fi
# use common way if the command is unknown
if [ -z "$serv_cmd" ] ; then if [ -z "$serv_cmd" ] ; then
serv_cmd=common serv_cmd=common
fi fi
......
...@@ -27,14 +27,18 @@ serv_common() ...@@ -27,14 +27,18 @@ serv_common()
sudocmd service $SERVICE "$@" sudocmd service $SERVICE "$@"
;; ;;
service-initd|service-update) service-initd|service-update)
sudocmd /etc/init.d/$SERVICE "$@" sudocmd $INITDIR/$SERVICE "$@"
;; ;;
systemd) systemd)
sudocmd systemctl "$@" $SERVICE # run init script directly (for nonstandart commands)
if [ -x $INITDIR/$SERVICE ] ; then
sudocmd $INITDIR/$SERVICE "$@"
else
sudocmd systemctl "$@" $SERVICE
fi
;; ;;
*) *)
fatal "Have no suitable command for $SERVICETYPE" fatal "Have no suitable command for $SERVICETYPE"
;; ;;
esac esac
} }
...@@ -26,7 +26,7 @@ serv_list_all() ...@@ -26,7 +26,7 @@ serv_list_all()
sudocmd chkconfig --list | cut -f1 sudocmd chkconfig --list | cut -f1
;; ;;
service-initd|service-update) service-initd|service-update)
sudocmd ls -1 /etc/init.d/* | sed -e "s|/etc/init.d/||g" | grep -v README sudocmd ls $INITDIR/ | grep -v README
;; ;;
systemd) systemd)
sudocmd systemctl list-unit-files $@ sudocmd systemctl list-unit-files $@
......
...@@ -28,7 +28,7 @@ serv_start() ...@@ -28,7 +28,7 @@ serv_start()
sudocmd service $SERVICE start "$@" sudocmd service $SERVICE start "$@"
;; ;;
service-initd|service-update) service-initd|service-update)
sudocmd /etc/init.d/$SERVICE start "$@" sudocmd $INITDIR/$SERVICE start "$@"
;; ;;
systemd) systemd)
sudocmd systemctl start "$SERVICE" "$@" sudocmd systemctl start "$SERVICE" "$@"
......
...@@ -25,7 +25,7 @@ is_service_running() ...@@ -25,7 +25,7 @@ is_service_running()
$SUDO service $1 status >/dev/null $SUDO service $1 status >/dev/null
;; ;;
service-initd|service-update) service-initd|service-update)
$SUDO /etc/init.d/$1 status >/dev/null $SUDO $INITDIR/$1 status >/dev/null
;; ;;
systemd) systemd)
$SUDO systemctl status $1 >/dev/null $SUDO systemctl status $1 >/dev/null
...@@ -67,7 +67,7 @@ serv_status() ...@@ -67,7 +67,7 @@ serv_status()
sudocmd service $SERVICE status "$@" sudocmd service $SERVICE status "$@"
;; ;;
service-update) service-update)
sudocmd /etc/init.d/$SERVICE status "$@" sudocmd $INITDIR/$SERVICE status "$@"
;; ;;
systemd) systemd)
sudocmd systemctl status $SERVICE "$@" sudocmd systemctl status $SERVICE "$@"
......
...@@ -28,7 +28,7 @@ serv_stop() ...@@ -28,7 +28,7 @@ serv_stop()
sudocmd service $SERVICE stop "$@" sudocmd service $SERVICE stop "$@"
;; ;;
service-initd|service-update) service-initd|service-update)
sudocmd /etc/init.d/$SERVICE stop "$@" sudocmd $INITDIR/$SERVICE stop "$@"
;; ;;
systemd) systemd)
sudocmd systemctl stop $SERVICE "$@" sudocmd systemctl stop $SERVICE "$@"
......
...@@ -32,7 +32,7 @@ serv_try_restart() ...@@ -32,7 +32,7 @@ serv_try_restart()
;; ;;
service-initd|service-update) service-initd|service-update)
is_service_running $SERVICE || return 0 is_service_running $SERVICE || return 0
sudocmd /etc/init.d/$SERVICE restart "$@" sudocmd $INITDIR/$SERVICE restart "$@"
;; ;;
systemd) systemd)
sudocmd systemctl try-restart $SERVICE "$@" sudocmd systemctl try-restart $SERVICE "$@"
......
# This spec is backported to ALTLinux p7 automatically by rpmbph script. Do not edit it. # This spec is backported to ALTLinux p7 automatically by rpmbph script. Do not edit it.
# #
Name: eepm Name: eepm
Version: 1.5.2 Version: 1.5.4
Release: alt0.M70P.1 Release: alt0.M70P.1
Summary: Etersoft EPM package manager Summary: Etersoft EPM package manager
...@@ -41,7 +41,7 @@ See detailed description here: http://wiki.etersoft.ru/EPM ...@@ -41,7 +41,7 @@ See detailed description here: http://wiki.etersoft.ru/EPM
%install %install
# install to datadir and so on # install to datadir and so on
%makeinstall version=%version-%release %makeinstall_std datadir=%_datadir bindir=%_bindir mandir=%_mandir version=%version-%release
install -m 0755 packed/epm.sh %buildroot/%_datadir/%name/epm-packed.sh install -m 0755 packed/epm.sh %buildroot/%_datadir/%name/epm-packed.sh
install -m 0755 packed/serv.sh %buildroot/%_datadir/%name/serv-packed.sh install -m 0755 packed/serv.sh %buildroot/%_datadir/%name/serv-packed.sh
...@@ -66,9 +66,18 @@ chmod a+x %buildroot%_datadir/%name/{serv-,epm-}* ...@@ -66,9 +66,18 @@ chmod a+x %buildroot%_datadir/%name/{serv-,epm-}*
%_sysconfdir/bash_completion.d/cerv %_sysconfdir/bash_completion.d/cerv
%changelog %changelog
* Tue Mar 25 2014 Vitaly Lipatov <lav@altlinux.ru> 1.5.2-alt0.M70P.1 * Wed Jun 04 2014 Vitaly Lipatov <lav@altlinux.ru> 1.5.4-alt0.M70P.1
- backport to ALTLinux p7 (by rpmbph script) - backport to ALTLinux p7 (by rpmbph script)
* Wed Jun 04 2014 Vitaly Lipatov <lav@altlinux.ru> 1.5.4-alt1
- add initial support for FreeBSD's pkgng
- add audit command for check installed packages against known vulnerabilities
* Wed May 28 2014 Vitaly Lipatov <lav@altlinux.ru> 1.5.3-alt1
- prefer to use init script directly
- introduce downgrade command
- use correct datadir
* Tue Mar 25 2014 Vitaly Lipatov <lav@altlinux.ru> 1.5.2-alt1 * Tue Mar 25 2014 Vitaly Lipatov <lav@altlinux.ru> 1.5.2-alt1
- use repolist for get local repo path - use repolist for get local repo path
- support --auto for reinstall - support --auto for reinstall
......
...@@ -110,17 +110,12 @@ echon() ...@@ -110,17 +110,12 @@ echon()
set_target_pkg_env() set_target_pkg_env()
{ {
[ -n "$DISTRNAME" ] || fatal "Run set_target_pkg_env without DISTRNAME" [ -n "$DISTRNAME" ] || fatal "Missing DISTRNAME in set_target_pkg_env."
PKGFORMAT=$($DISTRVENDOR -p "$DISTRNAME") PKGFORMAT=$($DISTRVENDOR -p "$DISTRNAME")
PKGVENDOR=$($DISTRVENDOR -s "$DISTRNAME") PKGVENDOR=$($DISTRVENDOR -s "$DISTRNAME")
RPMVENDOR=$($DISTRVENDOR -n "$DISTRNAME") RPMVENDOR=$($DISTRVENDOR -n "$DISTRNAME")
} }
realpath()
{
readlink -f "$@"
}
showcmd() showcmd()
{ {
if [ -z "$quiet" ] ; then if [ -z "$quiet" ] ; then
...@@ -236,6 +231,19 @@ warning() ...@@ -236,6 +231,19 @@ warning()
fi fi
} }
info()
{
[ -n "$quiet" ] && return
# print message to stderr if stderr forwarded to (a file)
if isatty2 ; then
isatty || return 0
echo "$@"
else
echo "$@" >&2
fi
}
set_sudo() set_sudo()
{ {
SUDO="" SUDO=""
...@@ -260,33 +268,30 @@ set_eatmydata() ...@@ -260,33 +268,30 @@ set_eatmydata()
# use if possible # use if possible
which eatmydata >/dev/null 2>/dev/null || return which eatmydata >/dev/null 2>/dev/null || return
SUDO="$SUDO eatmydata" SUDO="$SUDO eatmydata"
isatty && echo "Uwaga! eatmydata is installed, we will use it for disable all sync operations." >&2 info "Uwaga! eatmydata is installed, we will use it for disable all sync operations."
return 0 return 0
} }
assure_exists() __get_package_for_command()
{ {
PATH=$PATH:/sbin:/usr/sbin which $1 2>/dev/null >/dev/null && return case "$1" in
echo "Install appropriate package for $1 command..."
case $1 in
equery|revdep-rebuild) equery|revdep-rebuild)
epm install gentoolkit echo 'gentoolkit'
;;
apt-repo)
epm install apt-repo
;;
apt-file)
epm install apt-file
;; ;;
update-kernel|remove-old-kernels) update-kernel|remove-old-kernels)
epm install update-kernel echo 'update-kernel'
;;
*)
fatal "Internal error: Unknown binary $1 to check if exists"
;; ;;
esac esac
} }
assure_exists()
{
load_helper epm-assure
local package="$2"
[ -n "$package" ] || package="$(__get_package_for_command "$1")"
__epm_assure "$1" $package
}
get_package_type() get_package_type()
{ {
local i local i
...@@ -299,6 +304,14 @@ get_package_type() ...@@ -299,6 +304,14 @@ get_package_type()
echo "rpm" echo "rpm"
return return
;; ;;
*.txz)
echo "txz"
return
;;
*.tbz)
echo "tbz"
return
;;
*) *)
#fatal "Don't know type of $1" #fatal "Don't know type of $1"
# return package name for info # return package name for info
...@@ -351,6 +364,7 @@ case $DISTRNAME in ...@@ -351,6 +364,7 @@ case $DISTRNAME in
;; ;;
FreeBSD|NetBSD|OpenBSD|Solaris) FreeBSD|NetBSD|OpenBSD|Solaris)
CMD="pkgsrc" CMD="pkgsrc"
which pkg 2>/dev/null >/dev/null && CMD=pkgng
;; ;;
Gentoo) Gentoo)
CMD="emerge" CMD="emerge"
...@@ -404,10 +418,10 @@ case $PMTYPE in ...@@ -404,10 +418,10 @@ case $PMTYPE in
sudocmd apt-repo add $pkg_filenames sudocmd apt-repo add $pkg_filenames
;; ;;
apt-dpkg|aptitude-dpkg) apt-dpkg|aptitude-dpkg)
echo "You need manually add repo to /etc/apt/sources.list" info "You need manually add repo to /etc/apt/sources.list"
;; ;;
yum-rpm) yum-rpm)
echo "You need manually add repo to /etc/yum.repos.d/" info "You need manually add repo to /etc/yum.repos.d/"
;; ;;
urpm-rpm) urpm-rpm)
sudocmd urpmi.addmedia $pkg_filenames sudocmd urpmi.addmedia $pkg_filenames
...@@ -419,7 +433,7 @@ case $PMTYPE in ...@@ -419,7 +433,7 @@ case $PMTYPE in
sudocmd layman -a $pkg_filenames sudocmd layman -a $pkg_filenames
;; ;;
pacman) pacman)
echo "You need manually add repo to /etc/pacman.conf" info "You need manually add repo to /etc/pacman.conf"
# Only for alone packages: # Only for alone packages:
#sudocmd repo-add $pkg_filenames #sudocmd repo-add $pkg_filenames
;; ;;
...@@ -427,7 +441,7 @@ case $PMTYPE in ...@@ -427,7 +441,7 @@ case $PMTYPE in
sudocmd npackdcl add-repo --url=$pkg_filenames sudocmd npackdcl add-repo --url=$pkg_filenames
;; ;;
slackpkg) slackpkg)
echo "You need manually add repo to /etc/slackpkg/mirrors" info "You need manually add repo to /etc/slackpkg/mirrors"
;; ;;
*) *)
fatal "Have no suitable command for $PMTYPE" fatal "Have no suitable command for $PMTYPE"
...@@ -453,14 +467,14 @@ __epm_assure() ...@@ -453,14 +467,14 @@ __epm_assure()
if __check_command_in_path "$1" >/dev/null ; then if __check_command_in_path "$1" >/dev/null ; then
if [ -n "$verbose" ] ; then if [ -n "$verbose" ] ; then
local compath="$(__check_command_in_path "$1")" local compath="$(__check_command_in_path "$1")"
echo "Command $1 is exists: $compath" info "Command $1 is exists: $compath"
epm qf "$compath" epm qf "$compath"
fi fi
return return
fi fi
# TODO: use package name normalization # TODO: use package name normalization
echo "Install appropriate package for $1 command..." info "Installing appropriate package for $1 command..."
local PACKAGE="$2" local PACKAGE="$2"
[ -n "$PACKAGE" ] || PACKAGE="$1" [ -n "$PACKAGE" ] || PACKAGE="$1"
...@@ -475,12 +489,27 @@ __epm_assure() ...@@ -475,12 +489,27 @@ __epm_assure()
epm_assure() epm_assure()
{ {
[ -n "$pkg_filenames" ] || fatal "Run assure without params" [ -n "$pkg_filenames" ] || fatal "Assure: Missing params. Check $0 --help for info."
# use helper func for extract separate params # use helper func for extract separate params
__epm_assure $pkg_filenames __epm_assure $pkg_filenames
} }
# File bin/epm-audit:
epm_audit()
{
case $PMTYPE in
pkgng)
sudocmd pkg audit -F
;;
*)
fatal "Have no suitable command for $PMTYPE"
;;
esac
}
# File bin/epm-autoremove: # File bin/epm-autoremove:
__epm_autoremove_altrpm() __epm_autoremove_altrpm()
...@@ -488,8 +517,8 @@ __epm_autoremove_altrpm() ...@@ -488,8 +517,8 @@ __epm_autoremove_altrpm()
local pkg local pkg
local flag= local flag=
load_helper epm-packages load_helper epm-packages
echo info
echo "Just remove all non -devel libs packages not need by anything" info "Just removing all non -devel libs packages not need by anything"
for pkg in $(short=1 pkg_filenames= epm_packages | grep -- "^lib" | grep -v -- "-devel$" | grep -v -- ^libreoffice ) ; do for pkg in $(short=1 pkg_filenames= epm_packages | grep -- "^lib" | grep -v -- "-devel$" | grep -v -- ^libreoffice ) ; do
sudocmd rpm -v -e $pkg && flag=1 sudocmd rpm -v -e $pkg && flag=1
done done
...@@ -545,6 +574,9 @@ case $PMTYPE in ...@@ -545,6 +574,9 @@ case $PMTYPE in
guix) guix)
sudocmd guix gc sudocmd guix gc
;; ;;
pkgng)
sudocmd pkg autoremove
;;
#zypper-rpm) #zypper-rpm)
# sudocmd zypper clean # sudocmd zypper clean
# ;; # ;;
...@@ -640,7 +672,7 @@ __epm_changelog_unlocal_names() ...@@ -640,7 +672,7 @@ __epm_changelog_unlocal_names()
epm_changelog() epm_changelog()
{ {
[ -n "$pkg_filenames" ] || fatal "Run changelog without params" [ -n "$pkg_filenames" ] || fatal "Changelog: Missing package(s) name"
__epm_changelog_files $pkg_files __epm_changelog_files $pkg_files
...@@ -662,7 +694,7 @@ case $PMTYPE in ...@@ -662,7 +694,7 @@ case $PMTYPE in
apt-rpm|apt-dpkg) apt-rpm|apt-dpkg)
#sudocmd apt-get check || exit #sudocmd apt-get check || exit
#sudocmd apt-get update || exit #sudocmd apt-get update || exit
sudocmd apt-get -f install || exit sudocmd apt-get -f install
;; ;;
apt-dpkg) apt-dpkg)
#sudocmd apt-get update || exit #sudocmd apt-get update || exit
...@@ -695,6 +727,9 @@ case $PMTYPE in ...@@ -695,6 +727,9 @@ case $PMTYPE in
conary) conary)
sudocmd conary verify sudocmd conary verify
;; ;;
pkgng)
sudocmd pkg check -d -a
;;
homebrew) homebrew)
sudocmd brew doctor sudocmd brew doctor
;; ;;
...@@ -727,11 +762,8 @@ check_pkg_integrity() ...@@ -727,11 +762,8 @@ check_pkg_integrity()
true true
;; ;;
*) *)
assure_exists erc
docmd erc test "$PKG" && return docmd erc test "$PKG" && return
which erc >/dev/null 2>/dev/null && fatal "Check failed."
fatal "Install erc package for file package."
# TODO
epm install erc
;; ;;
esac esac
} }
...@@ -760,12 +792,12 @@ esac ...@@ -760,12 +792,12 @@ esac
epm_checkpkg() epm_checkpkg()
{ {
if [ -n "$pkg_names" ] ; then if [ -n "$pkg_names" ] ; then
echo "Suggest $pkg_names are names of installed packages" info "Suggest $pkg_names are name(s) of installed packages"
__epm_check_installed_pkg $pkg_names __epm_check_installed_pkg $pkg_names
return return
fi fi
[ -n "$pkg_files" ] || fatal "Run without names" [ -n "$pkg_files" ] || fatal "Checkpkg: missing file or package name(s)"
local pkg local pkg
for pkg in $pkg_files ; do for pkg in $pkg_files ; do
check_pkg_integrity $pkg || fatal "Broken package $pkg" check_pkg_integrity $pkg || fatal "Broken package $pkg"
...@@ -778,7 +810,10 @@ __is_repo_info_download() ...@@ -778,7 +810,10 @@ __is_repo_info_download()
{ {
case $PMTYPE in case $PMTYPE in
apt-*) apt-*)
test -r /var/cache/apt/pkgcache.bin || return if [ -r /var/cache/apt ] ; then
# FIXME: only if root permissions
test -r /var/cache/apt/pkgcache.bin || return
fi
;; ;;
*) *)
;; ;;
...@@ -830,11 +865,14 @@ case $PMTYPE in ...@@ -830,11 +865,14 @@ case $PMTYPE in
;; ;;
slackpkg) slackpkg)
;; ;;
pkgng)
sudo pkg clean
;;
*) *)
fatal "Have no suitable command for $PMTYPE" fatal "Have no suitable command for $PMTYPE"
;; ;;
esac esac
echo "It is recommend to run 'epm autoremove' also" info "It is recommend to run 'epm autoremove' also"
} }
...@@ -919,32 +957,80 @@ docmd $CMD $pkg_names ...@@ -919,32 +957,80 @@ docmd $CMD $pkg_names
epm_conflicts() epm_conflicts()
{ {
[ -n "$pkg_filenames" ] || fatal "Run query without names" [ -n "$pkg_filenames" ] || fatal "Conflicts: Missing package(s) name"
epm_conflicts_files epm_conflicts_files
epm_conflicts_names epm_conflicts_names
} }
# File bin/epm-downgrade:
__epm_add_apt_downgrade_preferences()
{
[ -r /etc/apt/preferences ] && fatal "/etc/apt/preferences already exists"
cat <<EOF | $SUDO tee /etc/apt/preferences
Package: *
Pin: release c=$1
Pin-Priority: 1001
EOF
}
__epm_remove_apt_downgrade_preferences()
{
sudocmd rm -f /etc/apt/preferences
}
epm_downgrade()
{
local CMD
# it is useful for first time running
update_repo_if_needed
info "Running command for downgrade packages"
case $PMTYPE in
apt-rpm)
__epm_add_apt_downgrade_preferences classic || return
sudocmd apt-get dist-upgrade
__epm_remove_apt_downgrade_preferences
;;
apt-dpkg)
__epm_add_apt_downgrade_preferences testing || return
sudocmd apt-get dist-upgrade
__epm_remove_apt_downgrade_preferences
;;
yum-rpm)
# can do update repobase automagically
sudocmd yum downgrade $pkg_filename
;;
urpm-rpm)
assure_exists urpm-reposync urpm-tools
sudocmd urpm-reposync -v
;;
*)
fatal "Have no suitable command for $PMTYPE"
;;
esac
}
# File bin/epm-filelist: # File bin/epm-filelist:
local_content_filelist() __alt_local_content_filelist()
{ {
local SYSARCH load_helper epm-sh-altlinux
SYSARCH=$(uname -m)
[ "$SYSARCH" = "x86_64" ] || SYSARCH=i586 local CI="$(get_local_alt_contents_index)"
local REPODIR=/var/ftp/pub/ALTLinux/Sisyphus # TODO: safe way to use less
local CI=$REPODIR/$SYSARCH/base/contents_index
local CINOA=$REPODIR/noarch/base/contents_index
#local OUTCMD="less" #local OUTCMD="less"
#[ -n "$USETTY" ] || OUTCMD="cat" #[ -n "$USETTY" ] || OUTCMD="cat"
OUTCMD="cat" OUTCMD="cat"
test -r $CI && test -r $CINOA || fatal "Can't locate $CI or $CINOA"
{ {
[ -n "$USETTY" ] && echo "Search in $CI and $CINOA for $1..." [ -n "$USETTY" ] && echo "Search in $CI for $1..."
grep -h -- ".*$1$" $CI $CINOA | sed -e "s|\(.*\)\t\(.*\)|\1|g" grep -h -- ".*$1$" $CI | sed -e "s|\(.*\)\t\(.*\)|\1|g"
} | $OUTCMD } | $OUTCMD
} }
...@@ -956,7 +1042,7 @@ __epm_filelist_remote() ...@@ -956,7 +1042,7 @@ __epm_filelist_remote()
case $PMTYPE in case $PMTYPE in
apt-rpm) apt-rpm)
# TODO: use RESTful interface to prometeus? See ALT bug #29496 # TODO: use RESTful interface to prometeus? See ALT bug #29496
docmd_foreach local_content_filelist $@ docmd_foreach __alt_local_content_filelist $@
;; ;;
*) *)
fatal "Query filelist for non installed packages does not realized" fatal "Query filelist for non installed packages does not realized"
...@@ -1022,6 +1108,9 @@ __epm_filelist_name() ...@@ -1022,6 +1108,9 @@ __epm_filelist_name()
assure_exists equery assure_exists equery
CMD="equery files" CMD="equery files"
;; ;;
pkgng)
CMD="pkg info -l"
;;
slackpkg) slackpkg)
is_installed $pkg_names || fatal "Query filelist for non installed packages does not realized" is_installed $pkg_names || fatal "Query filelist for non installed packages does not realized"
docmd awk 'BEGIN{desk=1}{if(/^FILE LIST:$/){desk=0} else if (desk==0) {print}}' /var/log/packages/${pkg_filenames}* | less docmd awk 'BEGIN{desk=1}{if(/^FILE LIST:$/){desk=0} else if (desk==0) {print}}' /var/log/packages/${pkg_filenames}* | less
...@@ -1040,7 +1129,7 @@ __epm_filelist_name() ...@@ -1040,7 +1129,7 @@ __epm_filelist_name()
epm_filelist() epm_filelist()
{ {
[ -n "$pkg_filenames" ] || fatal "Run query without names" [ -n "$pkg_filenames" ] || fatal "Filelist: missing package(s) name"
__epm_filelist_file $pkg_files || return __epm_filelist_file $pkg_files || return
...@@ -1063,7 +1152,7 @@ __epm_info_rpm_low() ...@@ -1063,7 +1152,7 @@ __epm_info_rpm_low()
epm_info() epm_info()
{ {
[ -n "$pkg_filenames" ] || fatal "Run info without names" [ -n "$pkg_filenames" ] || fatal "Info: missing package(s) name"
case $PMTYPE in case $PMTYPE in
apt-rpm) apt-rpm)
...@@ -1126,6 +1215,9 @@ case $PMTYPE in ...@@ -1126,6 +1215,9 @@ case $PMTYPE in
ipkg) ipkg)
docmd ipkg info $pkg_names docmd ipkg info $pkg_names
;; ;;
pkgng)
docmd pkg info $pkg_names
;;
homebrew) homebrew)
docmd brew info $pkg_names docmd brew info $pkg_names
;; ;;
...@@ -1220,6 +1312,9 @@ epm_install_names() ...@@ -1220,6 +1312,9 @@ epm_install_names()
pkgsrc) pkgsrc)
sudocmd pkg_add -r $@ sudocmd pkg_add -r $@
return ;; return ;;
pkgng)
sudocmd pkg install $@
return ;;
emerge) emerge)
sudocmd emerge -uD $@ sudocmd emerge -uD $@
return ;; return ;;
...@@ -1266,7 +1361,7 @@ epm_install_names() ...@@ -1266,7 +1361,7 @@ epm_install_names()
__separate_sudocmd "guix package -i" "guix package -i" $@ __separate_sudocmd "guix package -i" "guix package -i" $@
return ;; return ;;
android) android)
warning "We have no idea how to use package repository, ever if it is F-Droid." fatal "We still have no idea how to use package repository, ever if it is F-Droid."
return ;; return ;;
*) *)
fatal "Have no suitable install command for $PMTYPE" fatal "Have no suitable install command for $PMTYPE"
...@@ -1298,6 +1393,9 @@ epm_ni_install_names() ...@@ -1298,6 +1393,9 @@ epm_ni_install_names()
pkgsrc) pkgsrc)
sudocmd pkg_add -r $@ sudocmd pkg_add -r $@
return ;; return ;;
pkgng)
sudocmd pkg install -y $@
return ;;
emerge) emerge)
sudocmd emerge -uD $@ sudocmd emerge -uD $@
return ;; return ;;
...@@ -1412,6 +1510,17 @@ epm_install_files() ...@@ -1412,6 +1510,17 @@ epm_install_files()
pkgsrc) pkgsrc)
sudocmd pkg_add $@ sudocmd pkg_add $@
return ;; return ;;
pkgng)
local PKGTYPE="$(get_package_type $@)"
case "$PKGTYPE" in
tbz)
sudocmd pkg_add $@
;;
*)
sudocmd pkg add $@
;;
esac
return ;;
android) android)
sudocmd pm install $@ sudocmd pm install $@
return ;; return ;;
...@@ -1449,6 +1558,9 @@ epm_print_install_command() ...@@ -1449,6 +1558,9 @@ epm_print_install_command()
pkgsrc) pkgsrc)
echo "pkg_add $@" echo "pkg_add $@"
;; ;;
pkgng)
echo "pkg add $@"
;;
emerge) emerge)
# need be placed in /usr/portage/packages/somewhere # need be placed in /usr/portage/packages/somewhere
echo "emerge --usepkg $@" echo "emerge --usepkg $@"
...@@ -1482,12 +1594,12 @@ epm_install() ...@@ -1482,12 +1594,12 @@ epm_install()
return return
fi fi
[ -n "$pkg_files$pkg_names" ] || { echo "Skip empty install list" ; return 22 ; } [ -z "$pkg_files$pkg_names" ] && info "Skip empty install list" && return 22
local names="$(echo $pkg_names | filter_out_installed_packages)" local names="$(echo $pkg_names | filter_out_installed_packages)"
local files="$(echo $pkg_files | filter_out_installed_packages)" local files="$(echo $pkg_files | filter_out_installed_packages)"
[ -z "$files$names" ] && echo "Skip empty install list" && return 22 [ -z "$files$names" ] && info "Skip empty install list" && return 22
# it is useful for first time running # it is useful for first time running
update_repo_if_needed update_repo_if_needed
...@@ -1505,7 +1617,7 @@ epm_Install() ...@@ -1505,7 +1617,7 @@ epm_Install()
local names="$(echo $pkg_names | filter_out_installed_packages)" local names="$(echo $pkg_names | filter_out_installed_packages)"
local files="$(echo $pkg_files | filter_out_installed_packages)" local files="$(echo $pkg_files | filter_out_installed_packages)"
[ -z "$files$names" ] && echo "Skip empty install list" && return 22 [ -z "$files$names" ] && info "Install: Skip empty install list." && return 22
# do update only if really need install something # do update only if really need install something
case $PMTYPE in case $PMTYPE in
...@@ -1556,6 +1668,7 @@ __emerge_install_ebuild() ...@@ -1556,6 +1668,7 @@ __emerge_install_ebuild()
# copy tarballs # copy tarballs
local DDIR=/usr/portage/distfiles local DDIR=/usr/portage/distfiles
# FIXME: use independent dir
[ -d /var/calculate/remote/distfiles ] && DDIR=/var/calculate/remote/distfiles [ -d /var/calculate/remote/distfiles ] && DDIR=/var/calculate/remote/distfiles
docmd cp -f $TARBALLS $DDIR/ || return docmd cp -f $TARBALLS $DDIR/ || return
...@@ -1599,7 +1712,7 @@ epm_install_emerge() ...@@ -1599,7 +1712,7 @@ epm_install_emerge()
epm_kernel_update() epm_kernel_update()
{ {
echo "Start update system kernel to the latest version" info "Starting update system kernel to the latest version"
case $DISTRNAME in case $DISTRNAME in
ALTLinux) ALTLinux)
...@@ -1658,6 +1771,17 @@ case $PMTYPE in ...@@ -1658,6 +1771,17 @@ case $PMTYPE in
;; ;;
pkgsrc) pkgsrc)
CMD="pkg_info" CMD="pkg_info"
docmd $CMD | sed -e "s| .*||g"
return
;;
pkgng)
CMD="pkg info -E $pkg_filenames"
if [ -n "$short" ] ; then
docmd $CMD | sed -e "s| .*||g" | sed -e "s|-[0-9].*||g"
else
docmd $CMD | sed -e "s| .*||g"
fi
return
;; ;;
pacman) pacman)
CMD="pacman -Qs $pkg_filenames" CMD="pacman -Qs $pkg_filenames"
...@@ -1726,7 +1850,9 @@ epm_provides_files() ...@@ -1726,7 +1850,9 @@ epm_provides_files()
{ {
[ -n "$pkg_files" ] || return [ -n "$pkg_files" ] || return
case $(get_package_type $pkg_files) in local PKGTYPE="$(get_package_type $pkg_files)"
case $PKGTYPE in
rpm) rpm)
docmd rpm -q --provides -p $pkg_files docmd rpm -q --provides -p $pkg_files
;; ;;
...@@ -1769,10 +1895,13 @@ case $PMTYPE in ...@@ -1769,10 +1895,13 @@ case $PMTYPE in
assure_exists equery assure_exists equery
CMD="equery files" CMD="equery files"
;; ;;
pkgng)
CMD="pkg info -b"
;;
apt-dpkg) apt-dpkg)
# FIXME: need fix for a few names case # FIXME: need fix for a few names case
if is_installed $pkg_names ; then if is_installed $pkg_names ; then
echo "Please inform the author how to get provides from dpkg" info "Please inform the author how to get provides from dpkg"
fi fi
# CMD="rpm -q --provides" # CMD="rpm -q --provides"
#else #else
...@@ -1792,7 +1921,8 @@ docmd $CMD $pkg_names ...@@ -1792,7 +1921,8 @@ docmd $CMD $pkg_names
epm_provides() epm_provides()
{ {
[ -n "$pkg_filenames" ] || fatal "Run query without names" [ -n "$pkg_filenames" ] || fatal "Provides: missing package(s) name"
epm_provides_files epm_provides_files
epm_provides_names epm_provides_names
} }
...@@ -1923,8 +2053,13 @@ __epm_query_name() ...@@ -1923,8 +2053,13 @@ __epm_query_name()
warning "fix query" warning "fix query"
return 1 return 1
;; ;;
# TODO: need to print name if exists
#pkgng)
# CMD="pkg info -e"
# ;;
# Note: slackpkg info pkgname # Note: slackpkg info pkgname
*) *)
# default slow workaround
_query_via_packages_list $@ _query_via_packages_list $@
return return
;; ;;
...@@ -1951,7 +2086,7 @@ separate_installed() ...@@ -1951,7 +2086,7 @@ separate_installed()
epm_query() epm_query()
{ {
[ -n "$pkg_filenames" ] || fatal "Run query without names" [ -n "$pkg_filenames" ] || fatal "Query: missing package(s) name"
__epm_query_file $pkg_files || return __epm_query_file $pkg_files || return
...@@ -1973,7 +2108,7 @@ __do_query_real_file() ...@@ -1973,7 +2108,7 @@ __do_query_real_file()
else else
TOFILE=`which $1 2>/dev/null || echo $1` TOFILE=`which $1 2>/dev/null || echo $1`
if [ "$TOFILE" != "$1" ] ; then if [ "$TOFILE" != "$1" ] ; then
echo "Note: $1 is placed as $TOFILE" info "Note: $1 is placed as $TOFILE"
fi fi
fi fi
...@@ -1981,10 +2116,11 @@ __do_query_real_file() ...@@ -1981,10 +2116,11 @@ __do_query_real_file()
if [ -L "$TOFILE" ] ; then if [ -L "$TOFILE" ] ; then
__do_query $TOFILE __do_query $TOFILE
LINKTO=`readlink "$TOFILE"` LINKTO=`readlink "$TOFILE"`
echo "Note: $TOFILE is link to $LINKTO" info "Note: $TOFILE is link to $LINKTO"
__do_query_real_file "$LINKTO" __do_query_real_file "$LINKTO"
fi fi
FULLFILEPATH=`realpath $TOFILE`
FULLFILEPATH="$TOFILE"
} }
dpkg_print_name_version() dpkg_print_name_version()
...@@ -2025,6 +2161,9 @@ __do_query() ...@@ -2025,6 +2161,9 @@ __do_query()
pacman) pacman)
CMD="pacman -Qo" CMD="pacman -Qo"
;; ;;
pkgng)
CMD="pkg which"
;;
conary) conary)
CMD="conary query --path" CMD="conary query --path"
;; ;;
...@@ -2081,6 +2220,7 @@ epm_query_file() ...@@ -2081,6 +2220,7 @@ epm_query_file()
{ {
# in short mode print handle only real names and do short output # in short mode print handle only real names and do short output
# TODO: move to separate command? # TODO: move to separate command?
# FIXME: it is possible use query
if [ -n "$short" ] ; then if [ -n "$short" ] ; then
[ -n "$pkg_files" ] || fatal "Run query without file names (needed path to files)" [ -n "$pkg_files" ] || fatal "Run query without file names (needed path to files)"
__do_short_query $pkg_files __do_short_query $pkg_files
...@@ -2118,7 +2258,8 @@ epm_reinstall_names() ...@@ -2118,7 +2258,8 @@ epm_reinstall_names()
[ -n "$1" ] || return [ -n "$1" ] || return
case $PMTYPE in case $PMTYPE in
apt-rpm|apt-dpkg) apt-rpm|apt-dpkg)
sudocmd apt-get --reinstall install $@ local APTOPTIONS="$(subst_option non_interactive -y)"
sudocmd apt-get --reinstall $APTOPTIONS install $@
return ;; return ;;
aptitude-dpkg) aptitude-dpkg)
sudocmd aptitude reinstall $@ sudocmd aptitude reinstall $@
...@@ -2159,7 +2300,7 @@ epm_reinstall_files() ...@@ -2159,7 +2300,7 @@ epm_reinstall_files()
epm_reinstall() epm_reinstall()
{ {
[ -n "$pkg_filenames" ] || fatal "Run install without packages" [ -n "$pkg_filenames" ] || fatal "Reinstall: missing package(s) name."
epm_reinstall_names $pkg_names epm_reinstall_names $pkg_names
epm_reinstall_files $pkg_files epm_reinstall_files $pkg_files
...@@ -2170,8 +2311,8 @@ epm_reinstall() ...@@ -2170,8 +2311,8 @@ epm_reinstall()
epm_release_upgrade() epm_release_upgrade()
{ {
echo "Start upgrade whole system to the next release" info "Starting upgrade whole system to the next release"
echo "Check also http://wiki.etersoft.ru/Admin/UpdateLinux" info "Check also http://wiki.etersoft.ru/Admin/UpdateLinux"
case $PMTYPE in case $PMTYPE in
apt-rpm) apt-rpm)
...@@ -2244,6 +2385,9 @@ epm_remove_low() ...@@ -2244,6 +2385,9 @@ epm_remove_low()
pkgsrc) pkgsrc)
sudocmd pkg_delete -r $@ sudocmd pkg_delete -r $@
return ;; return ;;
pkgng)
sudocmd pkg delete -R $@
return ;;
emerge) emerge)
sudocmd emerge --unmerge $@ sudocmd emerge --unmerge $@
return ;; return ;;
...@@ -2280,6 +2424,9 @@ epm_remove_names() ...@@ -2280,6 +2424,9 @@ epm_remove_names()
pkgsrc) # without dependencies pkgsrc) # without dependencies
sudocmd pkg_delete $@ sudocmd pkg_delete $@
return ;; return ;;
pkgng)
sudocmd pkg delete -R $@
return ;;
emerge) emerge)
#sudocmd emerge --unmerge $@ #sudocmd emerge --unmerge $@
sudocmd emerge -aC $@ sudocmd emerge -aC $@
...@@ -2359,6 +2506,9 @@ epm_remove_nonint() ...@@ -2359,6 +2506,9 @@ epm_remove_nonint()
slackpkg) slackpkg)
sudocmd /usr/sbin/slackpkg -batch=on -default_answer=yes remove $@ sudocmd /usr/sbin/slackpkg -batch=on -default_answer=yes remove $@
return ;; return ;;
pkgng)
sudocmd pkg delete -y -R $@
return ;;
ipkg) ipkg)
sudocmd ipkg -force-defaults remove $@ sudocmd ipkg -force-defaults remove $@
return ;; return ;;
...@@ -2378,6 +2528,9 @@ epm_print_remove_command() ...@@ -2378,6 +2528,9 @@ epm_print_remove_command()
pkgsrc) pkgsrc)
echo "pkg_delete -r $@" echo "pkg_delete -r $@"
;; ;;
pkgng)
echo "pkg delete -R $@"
;;
pacman) pacman)
echo "pacman -R $@" echo "pacman -R $@"
;; ;;
...@@ -2407,7 +2560,7 @@ epm_remove() ...@@ -2407,7 +2560,7 @@ epm_remove()
# get full package name(s) from the package file(s) # get full package name(s) from the package file(s)
[ -n "$pkg_files" ] && pkg_names="$pkg_names $(epm query $pkg_files)" [ -n "$pkg_files" ] && pkg_names="$pkg_names $(epm query $pkg_files)"
[ -n "$pkg_names" ] || fatal "Run remove without args" [ -n "$pkg_names" ] || fatal "Remove: missing package(s) name."
epm_remove_low $pkg_names && return epm_remove_low $pkg_names && return
# get package name for hi level package management command (with version if supported and if possible) # get package name for hi level package management command (with version if supported and if possible)
...@@ -2434,10 +2587,10 @@ case $PMTYPE in ...@@ -2434,10 +2587,10 @@ case $PMTYPE in
sudocmd apt-repo rm $pkg_filenames sudocmd apt-repo rm $pkg_filenames
;; ;;
apt-dpkg|aptitude-dpkg) apt-dpkg|aptitude-dpkg)
echo "You need remove repo from /etc/apt/sources.list" info "You need remove repo from /etc/apt/sources.list"
;; ;;
yum-rpm) yum-rpm)
echo "You need remove repo from /etc/yum.repos.d/" info "You need remove repo from /etc/yum.repos.d/"
;; ;;
urpm-rpm) urpm-rpm)
sudocmd urpmi.removemedia $pkg_filenames sudocmd urpmi.removemedia $pkg_filenames
...@@ -2449,13 +2602,13 @@ case $PMTYPE in ...@@ -2449,13 +2602,13 @@ case $PMTYPE in
sudocmd layman -d$pkg_filenames sudocmd layman -d$pkg_filenames
;; ;;
pacman) pacman)
echo "You need remove repo from /etc/pacman.conf" info "You need remove repo from /etc/pacman.conf"
;; ;;
npackd) npackd)
sudocmd npackdcl remove-repo --url=$pkg_filenames sudocmd npackdcl remove-repo --url=$pkg_filenames
;; ;;
slackpkg) slackpkg)
echo "You need remove repo from /etc/slackpkg/mirrors" info "You need remove repo from /etc/slackpkg/mirrors"
;; ;;
*) *)
fatal "Have no suitable command for $PMTYPE" fatal "Have no suitable command for $PMTYPE"
...@@ -2527,7 +2680,9 @@ epm_requires_files() ...@@ -2527,7 +2680,9 @@ epm_requires_files()
{ {
[ -n "$pkg_files" ] || return [ -n "$pkg_files" ] || return
case $(get_package_type $pkg_files) in local PKGTYPE="$(get_package_type $pkg_files)"
case "$PKGTYPE" in
rpm) rpm)
docmd rpm -q --requires -p $pkg_files docmd rpm -q --requires -p $pkg_files
;; ;;
...@@ -2535,7 +2690,7 @@ epm_requires_files() ...@@ -2535,7 +2690,7 @@ epm_requires_files()
a= docmd dpkg -I $pkg_files | grep "^ *Depends:" | sed "s|^ *Depends:||g" a= docmd dpkg -I $pkg_files | grep "^ *Depends:" | sed "s|^ *Depends:||g"
;; ;;
*) *)
fatal "Have no suitable command for $PMTYPE" fatal "Have no suitable command for $PKGTYPE"
;; ;;
esac esac
} }
...@@ -2583,6 +2738,10 @@ case $PMTYPE in ...@@ -2583,6 +2738,10 @@ case $PMTYPE in
assure_exists equery assure_exists equery
CMD="equery depgraph" CMD="equery depgraph"
;; ;;
pkgng)
#CMD="pkg rquery '%dn-%dv'"
CMD="pkg info -d"
;;
*) *)
fatal "Have no suitable command for $PMTYPE" fatal "Have no suitable command for $PMTYPE"
;; ;;
...@@ -2595,7 +2754,7 @@ docmd $CMD $pkg_names ...@@ -2595,7 +2754,7 @@ docmd $CMD $pkg_names
epm_requires() epm_requires()
{ {
[ -n "$pkg_filenames" ] || fatal "Run query without names" [ -n "$pkg_filenames" ] || fatal "Requires: missing package(s) name"
epm_requires_files epm_requires_files
epm_requires_names epm_requires_names
} }
...@@ -2624,6 +2783,9 @@ case $PMTYPE in ...@@ -2624,6 +2783,9 @@ case $PMTYPE in
pkgsrc) pkgsrc)
CMD="pkg_info -x --" CMD="pkg_info -x --"
;; ;;
pkgng)
CMD="pkg search -i --"
;;
emerge) emerge)
CMD="emerge --search --" CMD="emerge --search --"
;; ;;
...@@ -2730,7 +2892,7 @@ __epm_search_make_grep() ...@@ -2730,7 +2892,7 @@ __epm_search_make_grep()
epm_search() epm_search()
{ {
[ -n "$pkg_filenames" ] || fatal "Please, use search with some argument" [ -n "$pkg_filenames" ] || fatal "Search: missing search argument(s)"
# it is useful for first time running # it is useful for first time running
update_repo_if_needed update_repo_if_needed
...@@ -2744,35 +2906,30 @@ epm_search() ...@@ -2744,35 +2906,30 @@ epm_search()
# File bin/epm-search_file: # File bin/epm-search_file:
local_content_search() __alt_local_content_search()
{ {
local SYSARCH load_helper epm-sh-altlinux
SYSARCH=$(uname -m)
[ "$SYSARCH" = "x86_64" ] || SYSARCH=i586 local CI="$(get_local_alt_contents_index)"
local REPODIR=/var/ftp/pub/ALTLinux/Sisyphus
local CI=$REPODIR/$SYSARCH/base/contents_index
local CINOA=$REPODIR/noarch/base/contents_index
#local OUTCMD="less" #local OUTCMD="less"
#[ -n "$USETTY" ] || OUTCMD="cat" #[ -n "$USETTY" ] || OUTCMD="cat"
OUTCMD="cat" OUTCMD="cat"
test -r $CI && test -r $CINOA || fatal "Can't locate $CI or $CINOA"
{ {
[ -n "$USETTY" ] && echo "Search in $CI and $CINOA for $1..." [ -n "$USETTY" ] && echo "Search in $CI for $1..."
grep -h -- ".*$1.*\t" $CI $CINOA | sed -e "s|\(.*\)\t\(.*\)|\2: \1|g" grep -h -- ".*$1.*\t" $CI | sed -e "s|\(.*\)\t\(.*\)|\2: \1|g"
} | $OUTCMD } | $OUTCMD
} }
epm_search_file() epm_search_file()
{ {
local CMD local CMD
[ -n "$pkg_filenames" ] || fatal "Run search without names" [ -n "$pkg_filenames" ] || fatal "Search file: missing file name(s)"
case $PMTYPE in case $PMTYPE in
apt-rpm) apt-rpm)
local_content_search $pkg_filenames __alt_local_content_search $pkg_filenames
return ;; return ;;
apt-dpkg|aptitude-dpkg) apt-dpkg|aptitude-dpkg)
assure_exists apt-file assure_exists apt-file
...@@ -2809,6 +2966,23 @@ docmd $CMD $pkg_filenames ...@@ -2809,6 +2966,23 @@ docmd $CMD $pkg_filenames
} }
# File bin/epm-sh-altlinux:
get_local_alt_contents_index()
{
load_helper epm-repolist
epm_repolist | grep "rpm.*file:/" | sed -e "s|^rpm.*file:||g" | while read URL ARCH other ; do
test -d "$URL/$ARCH" || continue # fatal "Local mirror is not accessible via $URL/$ARCH"
FILE="$URL/$ARCH/base/contents_index"
if [ -r "$FILE" ] ; then
echo "$FILE"
else
info "TODO for girar server: There is no $(basename $FILE) file in $(dirname $FILE)"
fi
done
}
# File bin/epm-simulate: # File bin/epm-simulate:
...@@ -2874,10 +3048,9 @@ EOF ...@@ -2874,10 +3048,9 @@ EOF
;; ;;
zypper-rpm) zypper-rpm)
if ! __use_zypper_dry_run >/dev/null ; then if ! __use_zypper_dry_run >/dev/null ; then
echo "zypper is too old: does not support --dry-run" fatal "zypper is too old: does not support --dry-run"
return
fi fi
CMD="zypper --non-interactive install" CMD="zypper --non-interactive install --dry-run"
;; ;;
emerge) emerge)
local res=0 local res=0
...@@ -2908,7 +3081,7 @@ EOF ...@@ -2908,7 +3081,7 @@ EOF
pkg_filenames="$pkg-[0-9]" epm_search | grep -E "(installed|upgrade)" && continue pkg_filenames="$pkg-[0-9]" epm_search | grep -E "(installed|upgrade)" && continue
pkg_filenames="$pkg" epm_search | grep -E "(installed|upgrade)" && continue pkg_filenames="$pkg" epm_search | grep -E "(installed|upgrade)" && continue
res=1 res=1
echo "Does not found in repository." info "Package '$pkg' does not found in repository."
done done
return $res ;; return $res ;;
*) *)
...@@ -2921,16 +3094,16 @@ EOF ...@@ -2921,16 +3094,16 @@ EOF
epm_simulate() epm_simulate()
{ {
[ -z "$pkg_filenames" ] && echo "Skip empty list" && return 22 [ -z "$pkg_filenames" ] && info "Simulate: Skip empty list" && return 22
local filenames="$(echo $pkg_filenames | filter_out_installed_packages)" local filenames="$(echo $pkg_filenames | filter_out_installed_packages)"
[ -z "$filenames" ] && echo "All packages are already installed" && return 0 [ -z "$filenames" ] && info "Simulate: All packages are already installed" && return 0
_epm_do_simulate $filenames _epm_do_simulate $filenames
local RES=$? local RES=$?
if [ -z "$quiet" ] ; then if [ -z "$quiet" ] ; then
[ "$RES" = 0 ] && echo "Result: $filenames package(s) CAN BE installed" || echo "Result: There are PROBLEMS with install some package(s)" [ "$RES" = 0 ] && info "Simulate result: $filenames package(s) CAN BE installed" || info "Simulate result: There are PROBLEMS with install some package(s)"
fi fi
return $RES return $RES
} }
...@@ -2941,7 +3114,7 @@ epm_simulate() ...@@ -2941,7 +3114,7 @@ epm_simulate()
epm_update() epm_update()
{ {
echo "Run command for update remote package repository database" info "Running command for update remote package repository database"
case $PMTYPE in case $PMTYPE in
apt-rpm) apt-rpm)
...@@ -2989,6 +3162,10 @@ case $PMTYPE in ...@@ -2989,6 +3162,10 @@ case $PMTYPE in
ipkg) ipkg)
sudocmd ipkg update sudocmd ipkg update
;; ;;
pkgsrc)
# portsnap extract for the first time?
sudocmd portsnap fetch update
;;
*) *)
fatal "Have no suitable update command for $PMTYPE" fatal "Have no suitable update command for $PMTYPE"
;; ;;
...@@ -3006,7 +3183,7 @@ epm_upgrade() ...@@ -3006,7 +3183,7 @@ epm_upgrade()
# it is useful for first time running # it is useful for first time running
update_repo_if_needed update_repo_if_needed
echo "Run command for upgrade packages" info "Running command for upgrade packages"
case $PMTYPE in case $PMTYPE in
apt-rpm|apt-dpkg) apt-rpm|apt-dpkg)
...@@ -3046,6 +3223,9 @@ epm_upgrade() ...@@ -3046,6 +3223,9 @@ epm_upgrade()
pkgsrc) pkgsrc)
CMD="freebsd-update fetch install" CMD="freebsd-update fetch install"
;; ;;
pkgng)
CMD="pkg upgrade"
;;
chocolatey) chocolatey)
CMD="chocolatey update all" CMD="chocolatey update all"
;; ;;
...@@ -3092,7 +3272,7 @@ epm_Upgrade() ...@@ -3092,7 +3272,7 @@ epm_Upgrade()
epm_whatdepends() epm_whatdepends()
{ {
local CMD local CMD
[ -n "$pkg_filenames" ] || fatal "Run query without names" [ -n "$pkg_filenames" ] || fatal "Whatdepends: missing package(s) name"
case $PMTYPE in case $PMTYPE in
apt-rpm) apt-rpm)
...@@ -3111,6 +3291,9 @@ case $PMTYPE in ...@@ -3111,6 +3291,9 @@ case $PMTYPE in
assure_exists equery assure_exists equery
CMD="equery depends -a" CMD="equery depends -a"
;; ;;
pkgng)
CMD="pkg info -r"
;;
*) *)
fatal "Have no suitable command for $PMTYPE" fatal "Have no suitable command for $PMTYPE"
;; ;;
...@@ -3125,7 +3308,7 @@ docmd $CMD $pkg_filenames ...@@ -3125,7 +3308,7 @@ docmd $CMD $pkg_filenames
epm_whatprovides() epm_whatprovides()
{ {
local CMD local CMD
[ -n "$pkg_filenames" ] || fatal "Run query without names" [ -n "$pkg_filenames" ] || fatal "Whatprovides: missing package(s) name"
case $PMTYPE in case $PMTYPE in
conary) conary)
...@@ -3484,7 +3667,7 @@ $(get_help HELPOPT) ...@@ -3484,7 +3667,7 @@ $(get_help HELPOPT)
print_version() print_version()
{ {
echo "EPM package manager version 1.5.0" echo "EPM package manager version 1.5.4"
echo "Running on $($DISTRVENDOR) ('$PMTYPE' package manager uses '$PKGFORMAT' package format)" echo "Running on $($DISTRVENDOR) ('$PMTYPE' package manager uses '$PKGFORMAT' package format)"
echo "Copyright (c) Etersoft 2012-2014" echo "Copyright (c) Etersoft 2012-2014"
echo "This program may be freely redistributed under the terms of the GNU AGPLv3." echo "This program may be freely redistributed under the terms of the GNU AGPLv3."
...@@ -3663,10 +3846,16 @@ check_command() ...@@ -3663,10 +3846,16 @@ check_command()
Upgrade) # HELPCMD: force update package base, then run upgrade Upgrade) # HELPCMD: force update package base, then run upgrade
epm_cmd=Upgrade epm_cmd=Upgrade
;; ;;
downgrade) # HELPCMD: downgrade [all] packages to the repo state
epm_cmd=downgrade
;;
simulate) # HELPCMD: simulate install with check requires simulate) # HELPCMD: simulate install with check requires
epm_cmd=simulate epm_cmd=simulate
;; ;;
checkpkg|integrity) # HELPCMD: check package file integrity (checksum) audit) # HELPCMD: audits installed packages against known vulnerabilities
epm_cmd=audit
;;
-V|checkpkg|integrity) # HELPCMD: check package file integrity (checksum)
epm_cmd=checkpkg epm_cmd=checkpkg
;; ;;
...@@ -3725,7 +3914,8 @@ check_option() ...@@ -3725,7 +3914,8 @@ check_option()
check_filenames() check_filenames()
{ {
local opt="$1" local opt="$1"
if [ -f "$opt" ] && echo $opt | grep -q "\." ; then # files can be with full path or have extension via .
if [ -f "$opt" ] && echo "$opt" | grep -q "[/\.]" ; then
pkg_files="$pkg_files $opt" pkg_files="$pkg_files $opt"
else else
pkg_names="$pkg_names $opt" pkg_names="$pkg_names $opt"
...@@ -3745,7 +3935,7 @@ done ...@@ -3745,7 +3935,7 @@ done
# if input is not console, get pkg from it too # if input is not console, get pkg from it too
if ! inputisatty ; then if ! inputisatty ; then
for opt in $(timeout 1 cat) ; do for opt in $(timeout 1 cat 2>/dev/null) ; do
check_filenames $opt check_filenames $opt
done done
fi fi
......
...@@ -108,17 +108,12 @@ echon() ...@@ -108,17 +108,12 @@ echon()
set_target_pkg_env() set_target_pkg_env()
{ {
[ -n "$DISTRNAME" ] || fatal "Run set_target_pkg_env without DISTRNAME" [ -n "$DISTRNAME" ] || fatal "Missing DISTRNAME in set_target_pkg_env."
PKGFORMAT=$($DISTRVENDOR -p "$DISTRNAME") PKGFORMAT=$($DISTRVENDOR -p "$DISTRNAME")
PKGVENDOR=$($DISTRVENDOR -s "$DISTRNAME") PKGVENDOR=$($DISTRVENDOR -s "$DISTRNAME")
RPMVENDOR=$($DISTRVENDOR -n "$DISTRNAME") RPMVENDOR=$($DISTRVENDOR -n "$DISTRNAME")
} }
realpath()
{
readlink -f "$@"
}
showcmd() showcmd()
{ {
if [ -z "$quiet" ] ; then if [ -z "$quiet" ] ; then
...@@ -234,6 +229,19 @@ warning() ...@@ -234,6 +229,19 @@ warning()
fi fi
} }
info()
{
[ -n "$quiet" ] && return
# print message to stderr if stderr forwarded to (a file)
if isatty2 ; then
isatty || return 0
echo "$@"
else
echo "$@" >&2
fi
}
set_sudo() set_sudo()
{ {
SUDO="" SUDO=""
...@@ -258,33 +266,30 @@ set_eatmydata() ...@@ -258,33 +266,30 @@ set_eatmydata()
# use if possible # use if possible
which eatmydata >/dev/null 2>/dev/null || return which eatmydata >/dev/null 2>/dev/null || return
SUDO="$SUDO eatmydata" SUDO="$SUDO eatmydata"
isatty && echo "Uwaga! eatmydata is installed, we will use it for disable all sync operations." >&2 info "Uwaga! eatmydata is installed, we will use it for disable all sync operations."
return 0 return 0
} }
assure_exists() __get_package_for_command()
{ {
PATH=$PATH:/sbin:/usr/sbin which $1 2>/dev/null >/dev/null && return case "$1" in
echo "Install appropriate package for $1 command..."
case $1 in
equery|revdep-rebuild) equery|revdep-rebuild)
epm install gentoolkit echo 'gentoolkit'
;;
apt-repo)
epm install apt-repo
;;
apt-file)
epm install apt-file
;; ;;
update-kernel|remove-old-kernels) update-kernel|remove-old-kernels)
epm install update-kernel echo 'update-kernel'
;;
*)
fatal "Internal error: Unknown binary $1 to check if exists"
;; ;;
esac esac
} }
assure_exists()
{
load_helper epm-assure
local package="$2"
[ -n "$package" ] || package="$(__get_package_for_command "$1")"
__epm_assure "$1" $package
}
get_package_type() get_package_type()
{ {
local i local i
...@@ -297,6 +302,14 @@ get_package_type() ...@@ -297,6 +302,14 @@ get_package_type()
echo "rpm" echo "rpm"
return return
;; ;;
*.txz)
echo "txz"
return
;;
*.tbz)
echo "tbz"
return
;;
*) *)
#fatal "Don't know type of $1" #fatal "Don't know type of $1"
# return package name for info # return package name for info
...@@ -349,6 +362,7 @@ case $DISTRNAME in ...@@ -349,6 +362,7 @@ case $DISTRNAME in
;; ;;
FreeBSD|NetBSD|OpenBSD|Solaris) FreeBSD|NetBSD|OpenBSD|Solaris)
CMD="pkgsrc" CMD="pkgsrc"
which pkg 2>/dev/null >/dev/null && CMD=pkgng
;; ;;
Gentoo) Gentoo)
CMD="emerge" CMD="emerge"
...@@ -403,16 +417,20 @@ serv_common() ...@@ -403,16 +417,20 @@ serv_common()
sudocmd service $SERVICE "$@" sudocmd service $SERVICE "$@"
;; ;;
service-initd|service-update) service-initd|service-update)
sudocmd /etc/init.d/$SERVICE "$@" sudocmd $INITDIR/$SERVICE "$@"
;; ;;
systemd) systemd)
sudocmd systemctl "$@" $SERVICE # run init script directly (for nonstandart commands)
if [ -x $INITDIR/$SERVICE ] ; then
sudocmd $INITDIR/$SERVICE "$@"
else
sudocmd systemctl "$@" $SERVICE
fi
;; ;;
*) *)
fatal "Have no suitable command for $SERVICETYPE" fatal "Have no suitable command for $SERVICETYPE"
;; ;;
esac esac
} }
# File bin/serv-disable: # File bin/serv-disable:
...@@ -498,7 +516,7 @@ serv_list_all() ...@@ -498,7 +516,7 @@ serv_list_all()
sudocmd chkconfig --list | cut -f1 sudocmd chkconfig --list | cut -f1
;; ;;
service-initd|service-update) service-initd|service-update)
sudocmd ls -1 /etc/init.d/* | sed -e "s|/etc/init.d/||g" | grep -v README sudocmd ls $INITDIR/ | grep -v README
;; ;;
systemd) systemd)
sudocmd systemctl list-unit-files $@ sudocmd systemctl list-unit-files $@
...@@ -537,7 +555,7 @@ serv_start() ...@@ -537,7 +555,7 @@ serv_start()
sudocmd service $SERVICE start "$@" sudocmd service $SERVICE start "$@"
;; ;;
service-initd|service-update) service-initd|service-update)
sudocmd /etc/init.d/$SERVICE start "$@" sudocmd $INITDIR/$SERVICE start "$@"
;; ;;
systemd) systemd)
sudocmd systemctl start "$SERVICE" "$@" sudocmd systemctl start "$SERVICE" "$@"
...@@ -557,7 +575,7 @@ is_service_running() ...@@ -557,7 +575,7 @@ is_service_running()
$SUDO service $1 status >/dev/null $SUDO service $1 status >/dev/null
;; ;;
service-initd|service-update) service-initd|service-update)
$SUDO /etc/init.d/$1 status >/dev/null $SUDO $INITDIR/$1 status >/dev/null
;; ;;
systemd) systemd)
$SUDO systemctl status $1 >/dev/null $SUDO systemctl status $1 >/dev/null
...@@ -598,7 +616,7 @@ serv_status() ...@@ -598,7 +616,7 @@ serv_status()
sudocmd service $SERVICE status "$@" sudocmd service $SERVICE status "$@"
;; ;;
service-update) service-update)
sudocmd /etc/init.d/$SERVICE status "$@" sudocmd $INITDIR/$SERVICE status "$@"
;; ;;
systemd) systemd)
sudocmd systemctl status $SERVICE "$@" sudocmd systemctl status $SERVICE "$@"
...@@ -621,7 +639,7 @@ serv_stop() ...@@ -621,7 +639,7 @@ serv_stop()
sudocmd service $SERVICE stop "$@" sudocmd service $SERVICE stop "$@"
;; ;;
service-initd|service-update) service-initd|service-update)
sudocmd /etc/init.d/$SERVICE stop "$@" sudocmd $INITDIR/$SERVICE stop "$@"
;; ;;
systemd) systemd)
sudocmd systemctl stop $SERVICE "$@" sudocmd systemctl stop $SERVICE "$@"
...@@ -647,7 +665,7 @@ serv_try_restart() ...@@ -647,7 +665,7 @@ serv_try_restart()
;; ;;
service-initd|service-update) service-initd|service-update)
is_service_running $SERVICE || return 0 is_service_running $SERVICE || return 0
sudocmd /etc/init.d/$SERVICE restart "$@" sudocmd $INITDIR/$SERVICE restart "$@"
;; ;;
systemd) systemd)
sudocmd systemctl try-restart $SERVICE "$@" sudocmd systemctl try-restart $SERVICE "$@"
...@@ -1003,6 +1021,8 @@ esac ...@@ -1003,6 +1021,8 @@ esac
} }
INITDIR=/etc/init.d
PATH=$PATH:/sbin:/usr/sbin PATH=$PATH:/sbin:/usr/sbin
set_sudo set_sudo
...@@ -1092,7 +1112,7 @@ $(get_help HELPOPT) ...@@ -1092,7 +1112,7 @@ $(get_help HELPOPT)
print_version() print_version()
{ {
echo "Service manager version 1.5.0" echo "Service manager version 1.5.4"
echo "Running on $($DISTRVENDOR)" echo "Running on $($DISTRVENDOR)"
echo "Copyright (c) Etersoft 2012, 2013" echo "Copyright (c) Etersoft 2012, 2013"
echo "This program may be freely redistributed under the terms of the GNU AGPLv3." echo "This program may be freely redistributed under the terms of the GNU AGPLv3."
...@@ -1210,6 +1230,7 @@ if [ -z "$withoutservicename" ] && [ -z "$service_name" ] ; then ...@@ -1210,6 +1230,7 @@ if [ -z "$withoutservicename" ] && [ -z "$service_name" ] ; then
fatal "Run $ $progname --help for get help" fatal "Run $ $progname --help for get help"
fi fi
# use common way if the command is unknown
if [ -z "$serv_cmd" ] ; then if [ -z "$serv_cmd" ] ; then
serv_cmd=common serv_cmd=common
fi fi
......
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