#!/bin/sh # # Copyright (C) 2015-2016 Etersoft # Copyright (C) 2015-2016 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-query __repofix_check_vendor() { local i for i in /etc/apt/vendors.list.d/*.list; do [ -e "$i" ] || continue grep -q "^simple-key \"$1\"" $i && return done return 1 } # source-list vendor path # example: /etc/apt/source.list p7 ALTLinux\/Sisyphus __try_fix_apt_source_list() { local list="$1" local br="$2" local path="$3" if grep -q -e "^[^#].*$path" $list ; then if __repofix_check_vendor $br ; then regexp_subst "/$path/s/^rpm[[:space:]]*([fhr])/rpm [$br] \1/" $list else warning "Skip set $br vendor key (it misssed) for $list" regexp_subst "/$path/s/^rpm[[:space:]]*\[$br\][[:space:]]*([fhr])/rpm \1/" $list fi fi } __fix_apt_sources_list() { # for beauty spaces local SUBST_ALT_RULE='s!^(.*)[/ ](ALTLinux|LINUX\@Etersoft)[/ ](Sisyphus|p8[/ ]branch|p7[/ ]branch|t7[/ ]branch|c7[/ ]branch|p6[/ ]branch|t6[/ ]branch)[/ ](x86_64|i586|x86_64-i586|noarch) !\1 \2/\3/\4 !gi' local i assure_root for i in "$@" ; do [ -s "$i" ] || continue #perl -i.bak -pe "$SUBST_ALT_RULE" $i # TODO: only for uncommented strings #sed -i -r -e "$SUBST_ALT_RULE" $i regexp_subst "/^ *#/! $SUBST_ALT_RULE" $i # Sisyphus uses 'alt' vendor key __try_fix_apt_source_list $i alt "ALTLinux\/Sisyphus" __try_fix_apt_source_list $i etersoft "Etersoft\/Sisyphus" # skip branch replacement for ALT Linux Sisyphus [ "$DISTRVERSION" = "Sisyphus" ] && continue # add signs for branches __try_fix_apt_source_list $i $DISTRVERSION "ALTLinux\/$DISTRVERSION\/branch" __try_fix_apt_source_list $i etersoft "Etersoft\/$DISTRVERSION\/branch" done } epm_repofix() { [ -z "$pkg_filenames" ] || fatal "No arguments are allowed here" case $PMTYPE in apt-rpm) assure_exists apt-repo [ -n "$quiet" ] || docmd apt-repo list __fix_apt_sources_list /etc/apt/sources.list __fix_apt_sources_list /etc/apt/sources.list.d/*.list docmd apt-repo list # FIXME: what the best place? # rebuild rpm database #sudocmd rm -fv /var/lib/rpm/__db* #sudocmd rpm --rebuilddb ;; yum-rpm|dnf-rpm) # FIXME: what the best place? #sudocmd rm -fv /var/lib/rpm/__db* #sudocmd rpm --rebuilddb ;; xbps) sudocmd xbps-pkgdb -a ;; *) fatal "Have no suitable command for $PMTYPE" ;; esac }