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
#!/bin/sh
#
# Copyright (C) 2023 Etersoft
# Copyright (C) 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/>.
#
load_helper epm-sh-altlinux
# copied from epm-addrepo
get_archlist()
{
echo "noarch"
echo "$DISTRARCH"
case $DISTRARCH in
x86_64)
echo "i586"
;;
esac
}
# https://www.altlinux.org/APT_%D0%B2_ALT_Linux/CreateRepository
__epm_repoindex_alt()
{
local archlist="i586 x86_64 x86_64-i586 aarch64 noarch"
local init=''
if [ "$1" = "--init" ] ; then
init='--init'
shift
fi
epm assure genbasedir apt-repo-tools || fatal
REPO_DIR="$1"
# TODO: check if we inside arch dir or RPMS.*
[ -n "$REPO_DIR" ] || REPO_DIR="$(pwd)"
if [ -z "$init" ] ; then
[ -d "$REPO_DIR" ] || fatal "Repo dir $REPO_DIR does not exist"
fi
REPO_NAME="$2"
if [ -z "$REPO_NAME" ] ; then
# default name
REPO_NAME="addon"
# detect name if already exists
for arch in $archlist ; do
local rd="$(echo $REPO_DIR/$arch/RPMS.*)"
[ -d "$rd" ] && REPO_NAME="$(echo "$rd" | sed -e 's|.*\.||')" && break
done
fi
if [ -n "$init" ] ; then
for arch in $(get_archlist); do
mkdir -pv "$REPO_DIR/$arch/base/"
mkdir -pv "$REPO_DIR/$arch/RPMS.$REPO_NAME/"
done
return
fi
for arch in $archlist; do
[ -d "$REPO_DIR/$arch/RPMS.$REPO_NAME" ] || continue
mkdir -pv "$REPO_DIR/$arch/base/"
docmd genbasedir --bloat --progress --topdir=$REPO_DIR $arch $REPO_NAME
done
}
__epm_repoindex_deb()
{
local init=''
if [ "$1" = "--init" ] ; then
init='--init'
shift
fi
local dir="$1"
docmd mkdir -pv "$dir" || fatal
assure_exists gzip
docmd dpkg-scanpackages -t deb "$dir" | gzip | cat > "$dir/Packages.gz"
}
epm_repoindex()
{
case $PMTYPE in
apt-rpm)
__epm_repoindex_alt "$@"
;;
apt-dpkg|aptitude-dpkg)
__epm_repoindex_deb "$@"
;;
yum-rpm)
epm install --skip-installed yum-utils createrepo || fatal
docmd mkdir -pv "$@"
docmd createrepo -v -s md5 "$@"
docmd verifytree
;;
dnf-rpm)
epm install --skip-installed yum-utils createrepo || fatal
docmd mkdir -pv "$@"
docmd createrepo -v -s md5 "$@"
docmd verifytree
;;
eoget)
docmd eoget index "$@"
;;
*)
fatal "Have no suitable command for $PMTYPE"
;;
esac
}
epm_repocreate()
{
epm_repoindex --init "$@"
}