1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#!/bin/sh
#
# Copyright (C) 2012, 2014, 2016-2017, 2023 Etersoft
# Copyright (C) 2012, 2014, 2016-2017, 2023 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 korinf/tools/run-script/scripts/update
load_helper epm-sh-warmup
load_helper epm-check_updated_repo
# TODO: restore mirroring
get_latest_version()
{
URL="https://eepm.ru/app-versions"
#update_url_if_need_mirrored
local var
var="$(epm tool eget -q -O- "$URL/$1")" || return
echo "$var" | head -n1 | cut -d" " -f1
}
__check_for_epm_version()
{
# skip update checking for eepm from repo (ALT bug #44314)
[ "$BASEDISTRNAME" = "alt" ] && [ "$DISTRVERSION" != "Sisyphus" ] && epm status --original eepm && return
local latest="$(get_latest_version eepm)"
#[ -z "$latest" ] && return
local res="$(epm print compare "$EPMVERSION" "$latest")"
[ "$res" = "-1" ] && info "Latest EPM version in Korinf repository is $latest. You have version $EPMVERSION running." && info "You can update eepm with \$ epm ei command."
}
__save_available_packages()
{
[ -d "$epm_vardir" ] || return 0
# TODO: ignore in docker
# update list only if the system supports bash completion
[ -d /etc/bash_completion.d ] || return 0
# HACK: too much time (5 minutes) on deb systems in a docker
[ $PMTYPE = "apt-dpkg" ] && return 0
info "Retrieving list of all available packages (for autocompletion) ..."
load_helper epm-list_available
short=--short epm_list_available | sort | sudorun tee $epm_vardir/available-packages >/dev/null
}
__epm_update_content_index()
{
case $BASEDISTRNAME in
"alt")
load_helper epm-sh-altlinux-contents-index
update_alt_contents_index
return
;;
esac
case $PMTYPE in
apt-dpkg)
is_command apt-file || return 0
assure_exists apt-file || return 0
sudocmd apt-file update
;;
esac
}
__epm_update()
{
[ -z "$*" ] || fatal "No arguments are allowed here"
info "Running update the package index files from remote package repository database ..."
local ret=0
warmup_hibase
case $BASEDISTRNAME in
"alt")
# TODO: hack against cd to cwd in apt-get on ALT
cd /
sudocmd apt-get update
ret="$?"
cd - >/dev/null
return $ret
;;
esac
case $PMTYPE in
apt-rpm)
# TODO: hack against cd to cwd in apt-get on ALT
cd /
sudocmd apt-get update
ret="$?"
cd - >/dev/null
return $ret
;;
apt-dpkg)
sudocmd apt-get update || return
# apt-get update retrieve Contents file too
#sudocmd apt-file update
;;
packagekit)
docmd pkcon refresh
;;
#snappy)
# sudocmd snappy
# ;;
aptitude-dpkg)
sudocmd aptitude update || return
;;
yum-rpm)
# just skipped
[ -z "$verbose" ] || info "update command is stubbed for yum"
;;
dnf-rpm)
# just skipped
[ -z "$verbose" ] || info "update command is stubbed for dnf"
;;
urpm-rpm)
sudocmd urpmi.update -a
;;
pacman)
sudocmd pacman -S -y
;;
aura)
sudocmd aura -A -y
;;
zypper-rpm)
sudocmd zypper $(subst_option non_interactive --non-interactive) refresh
;;
emerge)
sudocmd emerge --sync
;;
slackpkg)
sudocmd /usr/sbin/slackpkg -batch=on update
;;
deepsolver-rpm)
sudocmd ds-update
;;
npackd)
sudocmd packdcl detect # get packages from MSI database
;;
homebrew)
docmd brew update
;;
opkg)
sudocmd opkg update
;;
eopkg)
sudocmd eopkg update-repo
;;
apk)
sudocmd apk update
;;
nix)
sudocmd nix-channel --update
;;
pkgsrc)
# portsnap extract for the first time?
sudocmd portsnap fetch update
;;
aptcyg)
sudocmd apt-cyg update
;;
xbps)
sudocmd xbps-install -S
;;
winget)
sudocmd winget source update
;;
*)
fatal "Have no suitable update command for $PMTYPE"
;;
esac
}
epm_update()
{
if [ "$1" = "--content-index" ] ; then
__epm_update_content_index
return
fi
__epm_update "$@" || return
__epm_touch_pkg
__save_available_packages
__epm_update_content_index
return 0
}