epm-download 3.85 KB
Newer Older
1 2
#!/bin/sh
#
3 4
# Copyright (C) 2016  Etersoft
# Copyright (C) 2016  Vitaly Lipatov <lav@etersoft.ru>
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#
# 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/>.
#

20 21
__use_url_install()
{
Vitaly Lipatov's avatar
Vitaly Lipatov committed
22 23
	case $DISTRNAME in
		"ALTLinux")
24 25
			# not for https
			echo "$pkg_urls" | grep -q "https://" && return 1
26
			pkg_names="$pkg_names $pkg_urls"
Vitaly Lipatov's avatar
Vitaly Lipatov committed
27
			return 0
28
			;;
Vitaly Lipatov's avatar
Vitaly Lipatov committed
29 30 31 32 33 34
	esac

	case $PMTYPE in
		#apt-rpm)
		#	pkg_names="$pkg_names $pkg_urls"
		#	;;
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
		#deepsolver-rpm)
		#	pkg_names="$pkg_names $pkg_urls"
		#	;;
		#urpm-rpm)
		#	pkg_names="$pkg_names $pkg_urls"
		#	;;
		pacman)
			pkg_names="$pkg_names $pkg_urls"
			;;
		yum-rpm|dnf-rpm)
			pkg_names="$pkg_names $pkg_urls"
			;;
		#zypper-rpm)
		#	pkg_names="$pkg_names $pkg_urls"
		#	;;
		*)
			return 1
			;;
	esac
	return 0
}

# for download before install / checking
__download_pkg_urls()
{
	local url
	[ -z "$pkg_urls" ] && return
	for url in $pkg_urls ; do
		# TODO: use some individual tmp dir
		local new_file=/tmp/$(basename "$url")
Vitaly Lipatov's avatar
Vitaly Lipatov committed
65
		if docmd eget -O $new_file $url && [ -s "$new_file" ] ; then
66 67 68 69 70 71
			pkg_files="$pkg_files $new_file"
			to_remove_pkg_files="$to_remove_pkg_files $new_file"
		else
			warning "Failed to download $url, ignoring"
		fi
	done
72 73
	# restore
	pkg_filenames=$(strip_spaces "$pkg_files $pkg_names")
74 75 76 77 78 79 80 81 82
}

# NOTE: call __clean_downloaded_pkg_files after
__handle_pkg_urls_to_install()
{
	#[ -n "$pkg_urls" ] || return

	# TODO: do it correctly
	to_remove_pkg_files=
Vitaly Lipatov's avatar
Vitaly Lipatov committed
83 84
	# FIXME: check type of pkg_urls separately?
	if [ "$(get_package_type "$pkg_urls")" != $PKGFORMAT ] || ! __use_url_install ; then
85 86 87 88 89 90 91
		# use workaround with eget: download and put in pkg_files
		__download_pkg_urls
	fi

	pkg_urls=
}

92 93 94 95 96 97 98 99 100 101 102 103 104
__handle_pkg_urls_to_checking()
{
	#[ -n "$pkg_urls" ] || return

	# TODO: do it correctly
	to_remove_pkg_files=
	
	# use workaround with eget: download and put in pkg_files
	__download_pkg_urls

	pkg_urls=
}

105 106 107 108 109 110
#__clean_downloaded_pkg_files()
#{
#	[ -z "$to_remove_pkg_files" ] && return
#	rm -fv $to_remove_pkg_files
#}

111 112 113 114 115 116 117 118 119
__epm_get_altpkg_url()
{
	info "TODO: https://packages.altlinux.org/api/branches"
	load_helper epm-site
	local arch=$(paoapi packages/$1 | get_pao_var arch)
	# FIXME: arch can be list
	[ "$arch" = "noarch" ] || arch=$(arch)
	# HACK: filename can be list
	local filename=$(paoapi packages/$1 | get_pao_var filename | grep $arch)
120
	[ -n "$filename" ] || fatal "Can't get filename"
121 122 123 124 125
	# fixme: get from /branches
	local dv=$DISTRNAME/$DISTRVERSION/branch
	[ "$DISTRVERSION" = "Sisyphus" ] && dv=$DISTRNAME/$DISTRVERSION
	echo "http://ftp.basealt.ru/pub/distributions/$dv/$arch/RPMS.classic/$filename"
}
126

127 128 129 130
epm_download()
{
	local CMD

131 132 133 134 135 136 137 138 139 140 141 142
	case $DISTRNAME in
		ALTLinux)
			local pkg
			for pkg in $pkg_filenames ; do
				local url=$(__epm_get_altpkg_url $pkg)
				[ -n "$url" ] || warning "Can't get url for $pkg"
				docmd eget $url
			done
			return
			;;
	esac

143 144
	case $PMTYPE in
	dnf-rpm)
145 146 147 148
		sudocmd dnf download $pkg_filenames
		;;
	aptcyg)
		sudocmd apt-cyg download $pkg_filenames
149
		;;
150 151 152
	yum-rpm)
		# TODO: check yum install --downloadonly --downloaddir=/tmp <package-name>
		assure_exists yumdownloader yum-utils
153 154 155 156 157
		sudocmd yumdownloader $pkg_filenames
		;;
	dnf-rpm)
		sudocmd dnf download $pkg_filenames
		;;
158 159 160
	urpm-rpm)
		sudocmd urpmi --no-install $URPMOPTIONS $@
		;;
161 162
	tce)
		sudocmd tce-load -w $pkg_filenames
163
		;;
164 165 166 167 168
	*)
		fatal "Have no suitable command for $PMTYPE"
		;;
	esac
}