Commit 8ec3eb44 authored by Vitaly Lipatov's avatar Vitaly Lipatov

add yum wrapper

parent 99e0f7af
#!/bin/sh
#
# Copyright (C) 2012-2021 Etersoft
# Copyright (C) 2012-2021 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/>.
#
PROGDIR=$(dirname "$0")
PROGNAME=$(basename "$0")
[ "$PROGDIR" = "." ] && PROGDIR=$(pwd)
if [ "$0" = "/dev/stdin" ] || [ "$0" = "sh" ] ; then
PROGDIR=""
PROGNAME=""
fi
# will replaced to /usr/share/eepm during install
SHAREDIR=$PROGDIR
CONFIGDIR=$PROGDIR/..
load_helper()
{
local CMD="$SHAREDIR/$1"
# do not use fatal() here, it can be initial state
[ -r "$CMD" ] || { echo "FATAL: Have no $CMD helper file" ; exit 1; }
# shellcheck disable=SC1090
. $CMD
}
load_helper epm-sh-functions
#PATH=$PATH:/sbin:/usr/sbin
set_pm_type
set_sudo
check_tty
#############################
phelp()
{
echo "
Usage: yum [options] COMMAND
List of Commands:
$(get_help HELPCMD | sed -e 's@|@,@g')
Options:
$(get_help HELPOPT | sed -e 's@|@,@g')
"
}
print_version()
{
echo "EPM package manager version @VERSION@ https://wiki.etersoft.ru/Epm"
echo "Running on $($DISTRVENDOR -e) ('$PMTYPE' package manager uses '$PKGFORMAT' package format)"
echo "Copyright (c) Etersoft 2012-2021"
echo "This program may be freely redistributed under the terms of the GNU AGPLv3."
}
EPMVERSION=@VERSION@
verbose=
quiet=
nodeps=
noremove=
dryrun=
force=
repack=
inscript=
scripts=
noscripts=
short=
direct=
sort=
non_interactive=
skip_installed=
skip_missed=
show_command_only=
epm_cmd=
pkg_files=
pkg_dirs=
pkg_names=
pkg_urls=
quoted_args=
# load system wide config
[ -f /etc/eepm/eepm.conf ] && . /etc/eepm/eepm.conf
check_command()
{
# do not override command
[ -z "$epm_cmd" ] || return
# HELPCMD:
case $1 in
check) # HELPCMD: Check for problems in the rpmdb
epm_cmd=check
;;
check-update) # HELPCMD: Check for available package updates
epm_cmd=upgrade
;;
clean) # HELPCMD: Remove cached data
epm_cmd=clean
;;
deplist) # HELPCMD: List a package's dependencies
# TODO: hilevel in any case
epm_cmd=requires
;;
distribution-synchronization) # HELPCMD: Synchronize installed packages to the latest available versions
# TODO: some differences from just upgrade?
epm_cmd=upgrade
;;
downgrade) # HELPCMD: downgrade a package
epm_cmd=downgrade
;;
erase) # HELPCMD: Remove a package or packages from your system
epm_cmd=remove
;;
groupinfo) # HELPCMD: Display details about a package group
fatal "Is not supported"
;;
groupinstall) # HELPCMD: Install the packages in a group on your system
fatal "Is not supported"
;;
grouplist) # HELPCMD: List available package groups
fatal "Is not supported"
;;
groupremove) # HELPCMD: Remove the packages in a group from your system
fatal "Is not supported"
;;
help) # HELPCMD: Display a helpful usage message
help=1
phelp
exit 0
;;
history) # HELPCMD: Display, or use, the transaction history
fatal "Is not supported"
;;
info) # HELPCMD: Display details about a package or group of packages
epm_cmd=info
;;
install) # HELPCMD: Install a package or packages on your system
epm_cmd=install
;;
list) # HELPCMD: List a package or groups of packages
# TODO: support base options (see list -h), all available packages by default
epm_cmd=packages
;;
load-transaction) # HELPCMD: load a saved transaction from filename
fatal "Is not supported"
;;
makecache) # HELPCMD: Generate the metadata cache
fatal "Is not supported"
;;
provides) # HELPCMD: Find what package provides the given value
# TODO: hilevel in any case
epm_cmd=provides
;;
reinstall) # HELPCMD: reinstall a package
epm_cmd=reinstall
;;
repolist) # HELPCMD: Display the configured software repositories
epm_cmd=repolist
;;
resolvedep) # HELPCMD: Determine which package provides the given dependency
epm_cmd=whatprovides
;;
search) # HELPCMD: Search package details for the given string
epm_cmd=search
;;
shell) # HELPCMD: Run an interactive yum shell
# TODO: not full compatible
apt-shell
;;
update) # HELPCMD: Update a package or packages on your system
epm_cmd=install
;;
upgrade) # HELPCMD: Update packages taking obsoletes into account
epm_cmd=upgrade
;;
version) # HELPCMD: Display a version for the machine and/or available repos.
fatal "Is not supported"
;;
*)
return 1
;;
esac
return 0
}
check_option()
{
case $1 in
-h|--help) # HELPOPT: show this help message and exit
help=1
phelp
exit 0
;;
-t|--tolerant) # HELPOPT: be tolerant of errors
fatal "Is not supported"
;;
-C|--cacheonly) # HELPOPT: run entirely from system cache, don't update cache
fatal "Is not supported"
;;
--showduplicates) # HELPOPT: show duplicates, in repos, in list/search commands
fatal "Is not supported"
;;
--quiet) # HELPOPT: quiet operation
quiet=1
;;
-v|--verbose) # HELPOPT: verbose operation
verbose="--verbose"
;;
-y|--assumeyes) # HELPOPT: answer yes for all questions
non_interactive="--auto"
;;
--assumeno) # HELPOPT: answer no for all questions
fatal "Is not supported"
;;
--version) # HELPOPT: show Yum version and exit
print_version
exit 0
;;
# --installroot=[path] set install root
# --enablerepo=[repo] enable one or more repositories (wildcards allowed)
# --disablerepo=[repo] disable one or more repositories (wildcards allowed)
# -x [package], --exclude=[package]
# exclude package(s) by name or glob
# --disableexcludes=[repo]
# disable exclude from main, for a repo or for
# everything
# --obsoletes enable obsoletes processing during updates
# --noplugins disable Yum plugins
# --nogpgcheck disable gpg signature checking
# --skip-broken skip packages with depsolving problems
# --releasever=RELEASEVER
# set value of $releasever in yum config and repo files
# --downloadonly don't update, just download
# --downloaddir=DLDIR specifies an alternate directory to store packages
# --setopt=SETOPTS set arbitrary config and repo options
*)
return 1
;;
esac
return 0
}
# TODO: skip for commands where we don't need parse args
check_filenames()
{
local opt
for opt in "$@" ; do
# files can be with full path or have extension via .
if [ -f "$opt" ] && echo "$opt" | grep -q "[/\.]" ; then
has_space "$opt" && warning "There are space(s) in filename '$opt', it is not supported. Skipped" && continue
pkg_files="$pkg_files $opt"
elif [ -d "$opt" ] ; then
has_space "$opt" && warning "There are space(s) in directory path '$opt', it is not supported. Skipped" && continue
pkg_dirs="$pkg_dirs $opt"
elif echo "$opt" | grep -q "^[fhtps]*://" ; then
has_space "$opt" && warning "There are space(s) in URL '$opt', it is not supported. Skipped" && continue
pkg_urls="$pkg_urls $opt"
else
has_space "$opt" && warning "There are space(s) in package name '$opt', it is not supported. Skipped." && continue
pkg_names="$pkg_names $opt"
fi
quoted_args="$quoted_args \"$opt\""
done
}
FLAGENDOPTS=
for opt in "$@" ; do
[ "$opt" = "--" ] && FLAGENDOPTS=1 && continue
if [ -z "$FLAGENDOPTS" ] ; then
check_command "$opt" && continue
check_option "$opt" && continue
fi
# Note: will parse all params separately (no package names with spaces!)
check_filenames "$opt"
done
pkg_files=$(strip_spaces "$pkg_files")
pkg_dirs=$(strip_spaces "$pkg_dirs")
# in common case dirs equals to names only suddenly
pkg_names=$(strip_spaces "$pkg_names $pkg_dirs")
pkg_urls=$(strip_spaces "$pkg_urls")
pkg_filenames=$(strip_spaces "$pkg_files $pkg_names")
# Just debug
#echover "command: $epm_cmd"
#echover "pkg_files=$pkg_files"
#echover "pkg_names=$pkg_names"
# Just printout help if run without args
if [ -z "$epm_cmd" ] ; then
phelp
echo
fatstr="No such command: $*. Please use /usr/bin/yum --help"
[ -n "$*" ] || fatstr="You need to give some command"
info "$fatstr."
exit 1
fi
[ -n "$verbose$EPM_VERBOSE" ] && showcmd "$0 $*"
# Run helper for command with natural args
load_helper epm-$epm_cmd
eval epm_$epm_cmd $quoted_args
# return last error code (from subroutine)
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