epm-sh-install 5.12 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/bin/sh
#
# Copyright (C) 2012-2020  Etersoft
# Copyright (C) 2012-2020  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-sh-altlinux
load_helper epm-query

__fast_hack_for_filter_out_installed_rpm()
{
25 26
    LANG=C LC_ALL=C xargs -n1 rpm -q 2>&1 | grep 'is not installed' |
        sed -e 's|^.*package \(.*\) is not installed.*|\1|g'
27 28 29 30 31
}

# pass only uninstalled packages
filter_out_installed_packages()
{
32
    [ -z "$skip_installed" ] && cat && return
33

34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
    case $PMTYPE in
        yum-rpm|dnf-rpm)
            if [ "$($DISTRVENDOR -a)" = "x86_64" ] && [ "$DISTRNAME" != "ROSA" ] ; then
                # shellcheck disable=SC2013
                for i in $(cat) ; do
                    is_installed "$(__print_with_arch_suffix $i .x86_64)" && continue
                    is_installed "$(__print_with_arch_suffix $i .noarch)" && continue
                    echo $i
                done
            else
                __fast_hack_for_filter_out_installed_rpm
            fi
            ;;
        *-rpm)
            __fast_hack_for_filter_out_installed_rpm
            ;;
        # 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'
        #    ;;
        *)
            # shellcheck disable=SC2013
            for i in $(cat) ; do
                is_installed $i || echo $i
            done
            ;;
    esac | sed -e "s|rpm-build-altlinux-compat[^ ]*||g" | filter_strip_spaces
62 63 64 65 66 67 68 69
}

get_only_installed_packages()
{
    local installlist="$*"
    estrlist exclude "$(echo "$installlist" | (skip_installed='yes' filter_out_installed_packages))" "$installlist"
}

70

71 72
__epm_print_warning_for_nonalt_packages()
{
73
    [ -n "$dryrun" ] && return 0
74 75 76
    # only ALT
    [ "$BASEDISTRNAME" = "alt" ] || return 0

77 78
    load_helper epm-status

79 80
    local i
    for i in $* ; do
81 82 83 84
        if epm_status_repacked "$i" ; then
            warning "%%% You are trying install package $i repacked from third-party software source. Use it at your own discretion. %%%"
            continue
        fi
85

86
        if epm_status_thirdparty "$i" ; then
87 88 89 90 91
            warning "%%% You are trying install package $i from third-party software source. Use it at your own discretion. %%%"
            continue
        fi

        if ! epm_status_original "$i" ; then
92
            warning "%%% You are trying install package $i not from official $DISTRNAME/$DISTRVERSION repository. Use it at your own discretion. %%%"
93 94
            continue
        fi
95 96 97
    done
}

98 99 100 101 102
# Args: package names. Set noscripts for outside packages.
__epm_check_vendor()
{
    # don't check vendor if there are forced script options
    [ -n "$scripts$noscripts" ] && return
103
    [ -n "$dryrun" ] && return 0
104

105
    # only ALT
106
    [ "$BASEDISTRNAME" = "alt" ] || return 0
107

108 109
    load_helper epm-status

110 111
    local i
    for i in $* ; do
112
        bi="$(basename $i)"
113
        if ! epm_status_validate "$i" ; then
114
            # it is missed package probably (package remove case)
115
            if is_installed "$i" ; then
116
                warning "Can't get any info for $i package. Scripts are DISABLED for package $bi. Use --scripts if you need run scripts from such packages."
117
            fi
118 119 120 121
            noscripts="--noscripts"
            continue
        fi

122
        local vendor
123
        vendor="$(epm print field Vendor for "$i")"
124

125
        if [ -z "$vendor" ] ; then
126
            warning "Can't get info about vendor for $i package. Scripts are DISABLED for package $bi. Use --scripts if you need run scripts from such packages."
127 128 129
            noscripts="--noscripts"
            continue
        fi
130

131
        epm_status_original "$i" && continue
132
        epm_status_repacked "$i" && continue
133 134

        if __epm_vendor_ok_scripts "$vendor" ; then
135
            warning "Scripts are ENABLED for package $bi from outside vendor '$vendor' (this vendor is listed in $CONFIGDIR/vendorallowscripts.list).  Use --noscripts if you need disable scripts in such packages."
136 137 138
            continue
        fi

139
        if __epm_package_ok_scripts "$i" ; then
140
            warning "Scripts are ENABLED for package $bi from outside vendor '$vendor' (the package is listed in $CONFIGDIR/pkgallowscripts.list).  Use --noscripts if you need disable scripts in such packages."
141 142
            continue
        fi
143
        warning "Scripts are DISABLED for package $bi from outside vendor '$vendor'. Use --scripts if you need run scripts from such packages."
144 145 146
        noscripts="--noscripts"
    done
}
147