#!/bin/sh # # Copyright (C) 2012 Etersoft # Copyright (C) 2012 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/>. # # copied from /etc/init.d/outformat (ALT Linux) isatty() { # Set a sane TERM required for tput [ -n "$TERM" ] || TERM=dumb export TERM test -t 1 } check_tty() { isatty || return which tput >/dev/null 2>/dev/null || return # FreeBSD does not support tput -S echo | tput -S >/dev/null 2>/dev/null || return [ -z "$USETTY" ] || return export USETTY=1 } : ${BLACK:=0} ${RED:=1} ${GREEN:=2} ${YELLOW:=3} ${BLUE:=4} ${MAGENTA:=5} ${CYAN:=6} ${WHITE:=7} set_boldcolor() { [ "$USETTY" = "1" ] || return { echo bold echo setaf $1 } |tput -S } restore_color() { [ "$USETTY" = "1" ] || return { echo op; # set Original color Pair. echo sgr0; # turn off all special graphics mode (bold in our case). } |tput -S } echover() { [ -n "$verbose" ] || return echo "$*" >&2 } # Used DISTRNAME set_target_pkg_env() { [ -n "$DISTRNAME" ] || fatal "Run set_target_pkg_env without DISTRNAME" PKGFORMAT=$($DISTRVENDOR -p "$DISTRNAME") PKGVENDOR=$($DISTRVENDOR -s "$DISTRNAME") RPMVENDOR=$($DISTRVENDOR -n "$DISTRNAME") } # for systems without realpath command realpath() { readlink -f "$@" } # Print command line and run command line showcmd() { if [ -z "$quiet" ] ; then set_boldcolor $GREEN local PROMTSIG="\$" [ "$UID" = 0 ] && PROMTSIG="#" echo " $PROMTSIG $@" restore_color fi >&2 } # Print command line and run command line docmd() { showcmd "$@" "$@" } # Print command line and run command line docmd_foreach() { local cmd cmd="$1" #showcmd "$@" shift for pkg in "$@" ; do docmd $cmd $pkg done } # Print command line and run command line with SUDO sudocmd() { showcmd "$SUDO $@" $SUDO "$@" } filter_strip_spaces() { # possible use just #xargs echo sed -e "s| \+| |g" | \ sed -e "s|^ ||" | sed -e "s| \$||" } strip_spaces() { echo "$*" | filter_strip_spaces } epm() { $PROGDIR/epm $@ } # Print error message and stop the program fatal() { if [ -z "$TEXTDOMAIN" ] ; then echo "Error: $@" >&2 # else # echog "Error in $0: $@" >&2 fi exit 1 } set_sudo() { SUDO="" # skip SUDO if disabled [ -n "$EPMNOSUDO" ] && return # set SUDO not for root user [ -n "$UID" ] || UID=`id -u` # do not need sudo [ $UID = "0" ] && return # use sudo if possible which sudo >/dev/null 2>/dev/null && SUDO="sudo" && return SUDO="fatal 'Can't find sudo. Please install sudo or run epm under root.'" } # print options description from HELPCMD/HELPOPT lines in the code get_help() { grep -- "# $1" $0 | 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" done } # FIXME: detect if not recognized set_pm_type() { local CMD # Fill for use: PMTYPE, DISTRNAME, DISTRVERSION, PKGFORMAT, PKGVENDOR, RPMVENDOR DISTRVENDOR=$PROGDIR/distr_info [ -n "$DISTRNAME" ] || DISTRNAME=$($DISTRVENDOR -d) || fatal "Can't get distro name." [ -n "$DISTRVERSION" ] || DISTRVERSION=$($DISTRVENDOR -v) set_target_pkg_env # override package manager detection result if [ -n "$FORCEPM" ] ; then PMTYPE=$FORCEPM return fi case $DISTRNAME in ALTLinux|PCLinux) CMD="apt-rpm" #which deepsolver 2>/dev/null >/dev/null && CMD=deepsolver-rpm ;; PCLinux) CMD="apt-rpm" ;; Ubuntu|Debian|Mint) CMD="apt-dpkg" ;; Mandriva|ROSA) CMD="urpm-rpm" ;; FreeBSD|NetBSD|OpenBSD|Solaris) CMD="pkgsrc" ;; Gentoo) CMD="emerge" ;; ArchLinux) CMD="pacman" ;; Fedora|LinuxXP|ASPLinux|CentOS|RHEL|Scientific) CMD="yum-rpm" ;; Slackware) CMD="slackpkg" ;; SUSE|SLED|SLES) CMD="zypper-rpm" ;; Windows) CMD="chocolatey" ;; MacOS) CMD="homebrew" ;; OpenWRT) CMD="ipkg" ;; *) fatal "Do not known DISTRNAME $DISTRNAME" ;; esac PMTYPE=$CMD }