epm-epm_install 4.75 KB
Newer Older
1 2
#!/bin/sh

3
# Copyright (C) 2016, 2020, 2023  Etersoft
4
# Copyright (C) 2016  Danil Mikhailov <danil@etersoft.ru>
5
# Copyright (C) 2016, 2020, 2023  Vitaly Lipatov <lav@etersoft.ru>
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#
# 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/>.
#

21
load_helper epm-install
22

23 24
# default repo
EPM_KORINF_REPO_URL="https://updates.etersoft.ru/pub/Korinf"
25

26 27
__epm_korinf_site_mask() {
    local MASK="$1"
28
    local archprefix=""
29
    # short hack to install needed package
30
    rhas "$MASK" "[-_]" || MASK="${MASK}[-_][0-9]"
31
    # set arch for Korinf compatibility
32
    [ "$SYSTEMARCH" = "x86_64" ] && archprefix="x86_64/"
33
    local URL="$EPM_KORINF_REPO_URL/$archprefix$DISTRNAME/$DISTRVERSION"
34
    if ! eget --check-url "$URL" ; then
35
        tURL="$EPM_KORINF_REPO_URL/$archprefix$BASEDISTRNAME/$DISTRREPONAME"
36
        docmd eget --check-url "$tURL" && URL="$tURL"
37
    fi
38
    eget --list --latest "$URL/$MASK*.$PKGFORMAT"
39 40 41 42
}

__epm_korinf_list() {
    local MASK="$1"
43 44 45
    MASK="$(__epm_korinf_site_mask "$MASK")"
    showcmd eget --list "$MASK"
    eget --list "$MASK" | sort
46
}
47

48

49
__epm_korinf_install() {
50

51
    local pkg pkgurl
52
    local pkg_urls=''
53 54
    for pkgurl in $* ; do
        pkg="$(__epm_korinf_site_mask "$pkgurl")"
Vitaly Lipatov's avatar
Vitaly Lipatov committed
55
        [ -n "$pkg" ] || fatal "Can't get package url by $pkgurl"
56
        [ -n "$pkg_urls" ] && pkg_urls="$pkg_urls $pkg" || pkg_urls="$pkg"
57
    done
58 59
    # due Error: Can't use epm call from the piped script
    #epm install $(__epm_korinf_site_mask "$PACKAGE")
60
    pkg_names='' pkg_files='' epm_install
61
}
62

63 64 65 66 67
__epm_korinf_install_eepm()
{

    if [ "$BASEDISTRNAME" = "alt" ] && [ "$DISTRVERSION" != "Sisyphus" ] && [ "$EPMMODE" = "package" ] ; then
        if epm status --original eepm ; then
68
            warning 'Using external (Korinf) repo is forbidden for stable ALT branch $DISTRVERSION.'
69 70
            info "Check https://bugzilla.altlinux.org/44314 for reasons."
            info "You can install eepm package from Korinf manually, check instruction at https://eepm.ru"
Boria138's avatar
Boria138 committed
71
            info
72 73 74 75 76
            info "Trying update eepm from the stable ALT repository ..."
            docmd epm install eepm
            return
        fi
    fi
77 78

    # enable interactive for install eepm from console
79
    if inputisatty && [ "$EPMMODE" != "pipe" ] ; then
80
        [ -n "$non_interactive" ] || interactive="--interactive"
81 82
    else
        [ -n "$interactive" ] || non_interactive="--auto"
83 84 85 86 87 88 89 90 91 92 93 94 95
    fi

    # as now, can't install one package from task (and old apt-repo can't install one package)
    if false && [ "$BASEDISTRNAME" = "alt" ] && [ -z "$direct" ] ; then
        local task="$(docmd eget -O- https://eepm.ru/vendor/alt/task)"
        if [ -n "$task" ] ; then
            docmd epm install $task
            return
        else
            info "Can't get actual task for ALT, fallback to Korinf"
        fi
    fi

96
    pkg_list="eepm"
97 98 99 100
    # don't lose eepm-* if installed
    for i in repack play ; do
       is_installed eepm-$i && pkg_list="$pkg_list eepm-$i"
    done
101 102 103

    # enable scripts to resolve dependencies with apt
    scripts='--scripts' __epm_korinf_install $pkg_list
104 105
}

106 107
epm_epm_install_help()
{
108
    message "epm ei [URL] [packages] - install packages from EPM based Korinf repository"
109
            get_help HELPCMD $SHAREDIR/epm-epm_install
110
    message '
111

112
Default Korinf repository: $EPM_KORINF_REPO_URL
113 114

Examples:
115 116 117 118
  epm ei [epm|eepm]                 - install latest eepm (default action)
  epm ei <package1> [<package2>...] - install package(s) from default Korinf repo
  epm http://someurl.ru <package>   - install package(s) from a repo defined by URL
  epm --list <package mask>         - list available packages by mask
119
'
120 121 122
}


123 124
epm_epm_install()
{
125 126 127 128
    if is_url "$1" ; then
        EPM_KORINF_REPO_URL="$1"
        info "Using $EPM_KORINF_REPO_URL repo ..."
        shift
129
    fi
130

131 132 133
    case "$1" in
        ""|epm|eepm)
            # install epm by default
134
            __epm_korinf_install_eepm
135 136 137 138 139 140 141
            return
            ;;
        -h|--help)                     # HELPCMD: help
            epm_epm_install_help
            return
            ;;
        --list)                        # HELPCMD: list only packages
142 143
            shift
            __epm_korinf_list "$1"
144 145 146 147
            return
            ;;
    esac

148
    __epm_korinf_install "$@"
149
}