epm-repoindex 2.78 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#!/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

22 23 24 25 26 27 28 29 30 31 32 33
# copied from epm-addrepo
get_archlist()
{
    echo "noarch"
    echo "$DISTRARCH"
    case $DISTRARCH in
        x86_64)
            echo "i586"
            ;;
    esac
}

34 35 36 37 38 39 40 41 42 43 44
# https://www.altlinux.org/APT_%D0%B2_ALT_Linux/CreateRepository
__epm_repoindex_alt()
{
	local archlist="i586 x86_64 aarch64 noarch"

	local init=''
	if [ "$1" = "--init" ] ; then
		init='--init'
		shift
	fi

45
	epm assure genbasedir apt-repo-tools || fatal
46 47 48
	REPO_DIR="$1"
	# TODO: check if we inside arch dir or RPMS.*
	[ -n "$REPO_DIR" ] || REPO_DIR="$(pwd)"
49 50 51 52
	if [ -z "$init" ] ; then
		[ -d "$REPO_DIR" ] || fatal "Repo dir $REPO_DIR does not exist"
	fi

53 54 55 56
	REPO_NAME="$2"
	if [ -z "$REPO_NAME" ] ; then
		# default name
		REPO_NAME="addon"
57
		# detect name if already exists
58 59 60 61 62 63 64
		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
65 66 67
		for arch in $(get_archlist); do
			mkdir -pv "$REPO_DIR/$arch/base/"
			mkdir -pv "$REPO_DIR/$arch/RPMS.$REPO_NAME/"
68 69 70 71 72 73
		done
		return
	fi

	for arch in $archlist; do
		[ -d "$REPO_DIR/$arch/RPMS.$REPO_NAME" ] || continue
74
		mkdir -pv "$REPO_DIR/$arch/base/"
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
		sudocmd 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"
	sudocmd mkdir -pv "$dir" || fatal
	sudocmd 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
		sudocmd mkdir -pv "$@"
		sudocmd createrepo -v -s md5 "$@"
		sudocmd verifytree
		;;
	dnf-rpm)
110 111 112 113
		epm install --skip-installed yum-utils createrepo || fatal
		sudocmd mkdir -pv "$@"
		sudocmd createrepo -v -s md5 "$@"
		sudocmd verifytree
114 115 116 117 118 119 120 121 122 123 124
		;;
	eoget)
		docmd eoget index "$@"
		;;
	*)
		fatal "Have no suitable command for $PMTYPE"
		;;
esac

}