#!/bin/bash
#
#
# Скрипт для создания локального зеркала дистрибутива
# Mandriva GNU\Linux
# BDag 2008 г. sizovsv@gmail.com
# VERSION:  0.5
#

tput sgr0

TBold=("[0m" "[1m"); #Выделение жирным цветом
TGreen=("[0m" "[32m"); #Выделение Зеленым цветом
TRed=("[0m" "[31m"); #Выделение Красным цветом
TBlue=("[0m" "[36m"); #Выделение Голубым цветом
TUnd=("[0m" "[4m"); #Выделение Подчеркнутый цветом

err=0
RSYNC_OPT='-lhptgoDP --no-motd --force --delete --delete-before  --cvs-exclude --no-p --no-g --chmod=ugo=rwX '
RPMSlist=''

function get_config()
{
    [ -d $HOME/.config ] || mkdir -p $HOME/.config
    [ -e $HOME/.config/$(basename $0).conf ] && . $HOME/.config/$(basename $0).conf
    DefaultSource=${CFGSource:-"false"}
    DefaultSourceOnly=${CFGSourceOnly:-"false"}
    DefaultPLF=${CFGPLF:-"false"}
    DefaultPLFOnly=${CFGPLFOnly:-"false"}
    DefaultGetDebug=${CFGGetDebug:-"false"}
    DefaultGetUpdate=${CFGGetUpdate:-"true"}
    DefaultGetUpdateOnly=${CFGGetUpdateOnly:-"false"}
    DefaultGetTesting=${CFGGetTesting:-"false"}
    DefaultGetTestingOnly=${CFGGetTestingOnly:-"false"}
    DefaultGetBackports=${CFGGetBackports:-"false"}
    DefaultGetBackportsOnly=${CFGGetBackportsOnly:-"false"}
    DefaultRoot=${CFGRoot:-"$HOME/mirror"}
    DefaultHost=${CFGHost:-"ftp.mandriva.ru"}
    DefaultModule=${CFGModule:-"mandriva/mandriva"}
    DefaultRelease=${CFGRelease:-"current"}
    DefaultVersion=${CFGVersion:-"official"}
    DefaultArch=${CFGArch:-"i586"}

    }

function save_config()
    {
	[ -d $HOME/.config ] || mkdir -p $HOME/.config
	echo -e  "CFGSource=\"$Sources\"" > $HOME/.config/$(basename $0).conf
	echo -e  "CFGSourceOnly=\"$SourcesOnly\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGPLF=\"$PLF\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGPLFOnly=\"$PLFOnly\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGGetDebug=\"$GetDebug\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGGetUpdate=\"$GetUpdate\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGGetUpdateOnly=\"$GetUpdateOnly\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGGetTesting=\"$GetTesting\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGGetBackports=\"$GetBackports\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGGetTestingOnly=\"$GetTestingOnly\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGGetBackportsOnly=\"$GetBackportsOnly\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGRoot=\"$Root_Local_Mirror\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGHost=\"$RSYNC_HOST\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGModule=\"$RPM_Ferm_Module\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGRelease=\"$RPM_Ferm_Release\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGVersion=\"$RPM_Ferm_Version\"" >> $HOME/.config/$(basename $0).conf
	echo -e  "CFGArch=\"$RPM_Ferm_Arch\"" >> $HOME/.config/$(basename $0).conf
	exit 0
	}

function help ()
{
cat << MANEOF > $TMP/$(basename $0).1
.\"  Документация по использованию скрипта mandriva_mirror.sh
.\"  создана Sergey V. Sizov aka BDag sizovsv@gmail.com

.TH "$(basename $0)" 1 2009-12-30 "Mandriva/GNU Linux" "Команды, доступные пользователю"
.SH ИМЯ
.B "$(basename $0)"
-- скрипт для создания зеркала дистрибутива Mandriva/GNU Linux, а также отдельных его компонентов
.SH ОПИСАНИЕ
скрипт 
.BI "$(basename $0)"
предназначен для создания локального зеркала дистрибутива Mandriva/GNU Linux, а так же отдельных его компонентов.
Для реализации функционала используются следующие компоненты:
.IR  rsync ", " urpmi ", " urpmi.addmedia ", " chroot 
Данный скрипт позволит произвести загрузку, как всего дистрибутива разных редакций с
.IR "rsync://"
ресурсов, так и отдельных его компонентов: 
.IR release ", " updates ", "  backports ", " testing ", " debug ", " sources ",
.IR plf ". "
.PP
Помимо этого, данный скрипт позволяет произвести выборучную загрузку требуемых пакетов с учетом абсолютно всех зависимостей, 
т.е. загруженные пакеты являются самодостоточными. Так, например, при загрузки пакета
.B task-kde4
, скрипт произведет загрузку более 1000 пакетов, необходимых для полноценной установки данного мета-пакета.

.SH ПАРАМЕТРЫ
При запуске скрипта без параметров, скрипт приступает к работе с параметрами по-умолчанию. 
Ниже приведены используемые параметры и их значения по-умолчанию.
.TP
.B -e
Редакция дистрибутива: 
.IR devel ", " official " (По-умолчанию: " official " )"
.TP
.B -r
Версия дистрибутива: 
.IR current ", " 2009.0 ", " 2008.1 ", " 2008.0 " и т.д. (По-умолчанию: " current " для редакции official и " cooker " для редакции devel)"
.TP
.B -a
Архитектура дистрибутива:
.IR  i586 ", " x86_64 " (По-умолчанию: " i586 " )"
.TP
.B -H
Сервер зеркала (По-умолчанию: 
.IR ftp.mandriva.ru " )"
.TP
.B -M
Rsync-модуль сервера (По-умолчанию: для ftp.mandriva.ru -- 
.IR  mandriva/mandriva " )"
.TP
.B --root
Корень локального дистрибутива (По-умолчанию: 
.IR $HOME/mirror " )"
.TP
.B --no-debug
Исключить из списка зеркалирования debug-пакеты (По-умолчанию: 
.IR не\ скачиваются " )"
.TP
.B --sources
Создать зеркало пакетов с исходными кодами (По-умолчанию:
.IR не\ скачиваются " )"
.TP
.B --sources-only
Создать только зеркало пакетов с исходными кодами (По-умолчанию: 
.IR не\ скачиваются " )"
.TP
.B --update
Создать зеркало пакетов обновлений (По-умолчанию: 
.IR скачиваются " )"
.TP
.B --update-only
Создать только зеркало пакетов обновлений (По-умолчанию: 
.IR не\ скачиваются " )"
.TP
.B --testing
Создать зеркало пакетов для тестирования (По-умолчанию: 
.IR не\ скачиваются " )"
.TP
.B --testing-only
Создать только зеркало пакетов для тестирования (По-умолчанию: 
.IR не\ скачиваются " )"
.TP
.B --backports
Создать зеркало пакетов обратного портирования (По-умолчанию: 
.IR не\ скачиваются " )"
.TP
.B --backports-only
Создать только зеркало пакетов обратного портирования (По-умолчанию: 
.IR не\ скачиваются " )"
.TP
.B --plf
Создать зеркало пакетов защищенных патентами (По-умолчанию: 
.IR не\ скачиваются " )"
.TP
.B --plf-only
Создать только зеркало пакетов защищенных патентами(По-умолчанию: 
.IR не\ скачиваются " )"
.TP
.B --save
Сохранить параметры запуска приложения, параметры сохраняются для текущего имени приложения (По-умолчанию: 
.IR не\ выполняется " )"
.TP
.B --show-config
Показать параметры запуска приложения (По-умолчанию: 
.IR не\ выполняется " )"
.TP
.B --rpms
Скачать только затребованные пакеты со всеми зависимостям (По-умолчанию: 
.IR не\ выполняется " )"
.TP
.B --auto-rpms
Скачать только затребованные пакеты со всеми зависимостям в автоматическом режиме (По-умолчанию: 
.IR не\ выполняется " )"
.TP
.B --srpms
Скачать только затребованные пакеты с исходным кодом со всеми зависимостям (По-умолчанию: 
.IR не\ выполняется " )"
.TP
.B --auto-srpms
Скачать только затребованные пакеты с исходным кодом со всеми зависимостям в автоматическом режиме (По-умолчанию: 
.IR не\ выполняется " )"
.TP
.B -h (--help)
Показать эту справку и выйти
.P
При добавлении в конец параметра знак "-" (минус) - это приведет к инверсии параметра, т.е. сменит значание параметра на противоположное.
Данному свойству подвержены следующие параметры:
.I "--no-debug" "--sources" "--sources-only" "--update" "--update-only" "--testing" "--testing-only" "--plf" "--plf-only" "--backports" "--backports-only"

.SH ДОСТУПНОСТЬ
Функционал данного скрипта будет полностью доступен в Mandriva/GNU Linux 2010.0.
На более ранних версиях корректная работа скрипта не гарантируется. 
Так же, при использовании данного скрипта на других дистрибутивах, функционирование скрипта не гарантируется.

.SH ОКРУЖЕНИЕ
Скрипт в своей работе может использовать переменные окружения, относящиеся к программам rsync, urpmi, urpmi.addmedia, chroot
.TP
.B RSYNC_PROXY
Значение этой переменной имеет вид "
.IR имя_хоста:порт 
", где имя хоста - это хост прокси сервера, а порт соответственно порт прокси сервера. \ 
Т.к. rsync не поддерживает авторизацию на прокси сервере, то для нормальной работы rsync
через прокси сервер, последний должен пропускать трафик, проходящий через порт 873 без авторизации.
.TP
.B HOME
Определяет домашню директорию пользователя, от имени которого запускается скрипт

.SH ФАЙЛЫ
При работе скрипта используются следующие файлы:
.TP
.IR "$HOME/.config/$(basename $0).conf"
Файл с настройками скрипта

.SH ЗАМЕЧАНИЯ
Для использования различных кофигураций, создайте симолическую ссылку на данный скрипт и сохраните параметры.
При использовании параметров
.I "--auto-rpms" "--rpms"
пакеты сохраняются в директорию RPMS корня зеркала пакетов.

Не используйте 
.I current 
для ftp.mandriva.ru, в противном случае скрипт закончит свое выполнение с ошибкой. На сайте ftp.mandriva.ru отсутствует симоличнская ссылка 
.I current
\.

.SH ПРИМЕРЫ
.B Создание зеркала с сайта ftp.mandriva.ru релиз 2010.0 архитектуры x86_64 в директорию mandriva пользователя $USER
      $(basename $0) -H ftp.mandriva.ru -M mandriva/mandriva -r 2010.0 -a x86_64 --root $HOME/mandriva
.P
.B Сохранение параметров для создание зеркала с сайта ftp.mandriva.ru релиз 2010.0 архитектуры x86_64 в директорию mandriva пользователя $USER
      $(basename $0) -H ftp.mandriva.ru -M mandriva/mandriva -r 2010.0 -a x86_64 --root $HOME/mandriva --save
.P
.B Посмотреть сохраненные параметры 
      $(basename $0) --show-config
.P
.B Создание зеркала с сайта ftp.mandriva.ru релиз 2010.0 архитектуры i586 в директорию mandriva пользователя $USER. 
.B Все параметры за исключенеим архитектуры берутся из ранее сохраненных параметров
      $(basename $0) -a i586
.P
.B Создание зеркала с сайта ftp.mandriva.ru релиз 2010.0 архитектуры x86_64 в директорию mandriva пользователя $USER. 
.B В данном запуске скрипта дополнительно скачиваем пакеты отладки. Все параметры за исключенеим пакетов отладки берутся из ранее сохраненных параметров
      $(basename $0) --no-debug-
.P
.B Загрузить пакет task-kde4 со всеми зависимостями, необходимыми для установки требуемого пакета. 
      $(basename $0) --rpms-auto task-kde4


.SH "СМОТРИ ТАКЖЕ"
.BR rsync (1),
.BR urpmi (8),
.BR chroot (1),
.BR urpmi.addmedia (8)

MANEOF
man $TMP/$(basename $0).1
rm -f $TMP/$(basename $0).1
}

function rsync_err()
# Вывод сообщения об ошибке RSYNC и установки метки ошибки ERR
{
	echo -en ' \E[31;3m ('
	case $@ in
	0)      echo -n "Success";;
	1)      echo -n  "Syntax or usage error";;
	2)      echo -n  "Protocol incompatibility";;
	3)      echo -n  "Errors selecting input/output files, dirs";;
	4)      echo -n  "Requested action not supported: an attempt was made to manipulate 64-bit files on a platform that cannot support  them;  or  an option was specified that is supported by the client and not by the server.";;
	5)      echo -n  "Error starting client-server protocol";;
	6)      echo -n  "Daemon unable to append to log-file";;
	10)     echo -n  "Error in socket I/O";;
	11)     echo -n  "Error in file I/O";;
	12)     echo -n  "Error in rsync protocol data stream";;
	13)     echo -n  "Errors with program diagnostics";;
	14)     echo -n  "Error in IPC code";;
	20)     echo -n  "Received SIGUSR1 or SIGINT";;
	21)     echo -n  "Some error returned by waitpid()";;
	22)     echo -n  "Error allocating core memory buffers";;
	23)     echo -n  "Partial transfer due to error";;
	24)     echo -n  'Partial transfer due to vanished source files';;
	25)     echo -n  'The --max-delete limit stopped deletions';;
	30)     echo -n  'Timeout in data send/receive';;
	35)     echo -n  'Timeout waiting for daemon connection';;
	esac
	echo " )"
	tput sgr0
	return 1
}


function get_args()
{
    get_config
    echo -e "${TBold[1]}Проверка параметров программы...${TBold[0]}"
    ShowCFG=${PShowCFG:-"false"}
    Sources=${PSources:-$DefaultSource}
    SourcesOnly=${PSourcesOnly:-$DefaultSourceOnly}
    PLF=${PPLF:-$DefaultPLF}
    PLFOnly=${PPLFOnly:-$DefaultPLFOnly}
    GetDebug=${PGetDebug:-$DefaultGetDebug}
    GetUpdate=${PGetUpdate:-$DefaultGetUpdate}
    GetUpdateOnly=${PGetUpdateOnly:-$DefaultGetUpdateOnly}
    GetTesting=${PGetTesting:-$DefaultGetTesting}
    GetTestingOnly=${PGetTestingOnly:-$DefaultGetTestingOnly}
    GetBackports=${PGetBackports:-$DefaultGetBackports}
    GetBackportsOnly=${PGetBackportsOnly:-$DefaultGetBackportsOnly}
    Root_Local_Mirror=${Root:-$DefaultRoot}
    RSYNC_HOST=${Host:-$DefaultHost}
    RPM_Ferm_Module=${Module:-$DefaultModule}
    RPM_Ferm_Release=${Release:-$DefaultRelease}
    [[ "$RPM_Ferm_Release"  == 'cooker' ]] && RPM_Ferm_Version=${Version:-"devel"} 
    [[ "$RPM_Ferm_Release"  != 'cooker' ]] && RPM_Ferm_Version=${Version:-"official"} 
    [[ $Version == "devel" ]] && RPM_Ferm_Version=${Version:-"devel"} 
    RPM_Ferm_Arch=${Arch:-$DefaultArch}
    RSYNC_DIRECTORY="$RPM_Ferm_Module/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch"
    SRPMS="${RSYNC_DIRECTORY%$RPM_Ferm_Arch}SRPMS"
    case $ShowCFG in
	"true")
		echo -e   "Используемые параметры:"
		echo -en  "Получение исходных кодов: ";  [[ "$Sources" == 'true'  ]] && echo -e "${TBold[1]}Включено${TBold[0]}" || echo -e "${TBold[1]}Отключено${TBold[0]}"
		echo -en  "Получить только исходные коды: "; [[ "$SourcesOnly" == 'true'  ]] && echo -e "${TBold[1]}Включено${TBold[0]}" || echo -e "${TBold[1]}Отключено${TBold[0]}"
		echo -en  "Получить пакеты, защищенные патентами: "; [[ "$PLF" == 'true'  ]] && echo -e "${TBold[1]}Включено${TBold[0]}" || echo -e "${TBold[1]}Отключено${TBold[0]}"
		echo -en  "Получить только пакеты, защищенные патентами: "; [[ "$PLFOnly" == 'true'  ]] && echo -e "${TBold[1]}Включено${TBold[0]}" || echo -e "${TBold[1]}Отключено${TBold[0]}"
		echo -en  "Получение пакетов для отладки: " ; [[ "$GetDebug" == 'true' ]] && echo -e "${TBold[1]}Включено${TBold[0]}" || echo -e "${TBold[1]}Отключено${TBold[0]}"
		echo -en  "Получение пакетов обнолений: " ; [[ "$GetUpdate" == 'true' ]] && echo -e "${TBold[1]}Включено${TBold[0]}" || echo -e "${TBold[1]}Отключено${TBold[0]}"
		echo -en  "Получение только пакетов обнолений: " ; [[ "$GetUpdateOnly" == 'true' ]] && echo -e "${TBold[1]}Включено${TBold[0]}" || echo -e "${TBold[1]}Отключено${TBold[0]}"
		echo -en  "Получение пакетов для тестирования: " ; [[ "$GetTesting" == 'true' ]] && echo -e "${TBold[1]}Включено${TBold[0]}" || echo -e "${TBold[1]}Отключено${TBold[0]}"
		echo -en  "Получение только пакетов для тестирования: " ; [[ "$GetTestingOnly" == 'true' ]] && echo -e "${TBold[1]}Включено${TBold[0]}" || echo -e "${TBold[1]}Отключено${TBold[0]}"
		echo -en  "Получение пакетов обратного портирования: " ; [[ "$GetBackports" == 'true' ]] && echo -e "${TBold[1]}Включено${TBold[0]}" || echo -e "${TBold[1]}Отключено${TBold[0]}"
		echo -en  "Получение только пакетов обратного портирования: " ; [[ "$GetBackportsOnly" == 'true' ]] && echo -e "${TBold[1]}Включено${TBold[0]}" || echo -e "${TBold[1]}Отключено${TBold[0]}"
		echo -e   "Корень локального дистрибутива: ${TBold[1]} $Root_Local_Mirror ${TBold[0]}";
		echo -e   "Сервер зеркала: ${TBold[1]}$RSYNC_HOST${TBold[0]}"
		echo -e   "Rsync-модуль сервера: ${TBold[1]}$RPM_Ferm_Module${TBold[0]}"
		echo -e   "Версия дистрибутива: ${TBold[1]}$RPM_Ferm_Release${TBold[0]}"
		echo -e   "Редакция дистрибутива: ${TBold[1]}$RPM_Ferm_Version${TBold[0]}"
		echo -e   "Архитектура дистрибутива: ${TBold[1]}$RPM_Ferm_Arch${TBold[0]}"
		exit 0
	      ;;
	"false")
		RSYNC_CMD=$(which rsync 2> /dev/null )
		  if [ -e "$RSYNC_CMD" ]; then :
		      else
		      echo -e "${TRed[1]}Программа загрузки дистрибутива RSYNC не найдена.${TRed[0]}"
		      echo -e "Требуется установить программу RSYNC.\nВыполните от имени суперпользователя следующую команду: urpmi rsync"
		      exit 1
		      fi
		  if [ -d $Root_Local_Mirror ]; then :
		      else
		      echo -e "${TRed[1]}Отсутствует каталог корня локального зеркала: $Root_Local_Mirror.${TRed[0]}"
		      answer=; read -p "Создать каталог?(Y\\N):" answer;
		      [[ $answer == [Yy] ]] && mkdir -m 777 -pv "$Root_Local_Mirror"  || {
			  echo -e "Для корректной работы программы требуется наличие каталога локального зеркала."
				  exit 1
			  }
		      fi
		echo -en "Проверка соединения с сервером "
		rsync -nq rsync://$RSYNC_HOST 2> /dev/null
		if [ "$?" != "0" ] ; then
		    echo
		    echo -e "${TRed[1]}Сервер ${TBold[1]}$RSYNC_HOST${TBold[0]} ${TRed[1]}не доступен, попробуйте позже, либо укажите в параметрах другой сервер${TRed[0]}"
		    exit 1
			else
			    echo -e "[Ok]"
			    fi
		echo -en "Проверка существования модуля подключения "
		rsync -nq rsync://$RSYNC_HOST/$RPM_Ferm_Module 2> /dev/null
		if [ "$?" != "0" ] ; then
		    echo
		    echo -e "${TRed[1]}Используемый модуль \"${TBold[1]}$RPM_Ferm_Module${TBold[0]}${TRed[1]}\" не доступен, попробуйте позже, либо укажите в параметрах другой модуль${TRed[0]}"
		    echo -e "На текущий момент на сервере доступны следующие модули:"
		    rsync -n rsync://$RSYNC_HOST/ | awk '{print $1}'
		    echo
		    exit 1
			else
			    echo -e "[Ok]"
			    fi
		if [ "$SourcesOnly" == "true" -o "$Sources" = "true" ]; then :
		echo -en "Проверка существования требуемого зеркала пакетов с исходными кодами "
		    rsync -nq rsync://$RSYNC_HOST/$SRPMS 2> /dev/null
		    if [ "$?" != "0" ] ; then
			echo
			echo -e "${TRed[1]}Используемое зеркало \"${TBold[1]}$SRPMS${TBold[0]}${TRed[1]}\" не доступно.\nПопробуйте позже, либо укажите другие параметры.${TRed[0]}"
			echo
			exit 1
			    else
				echo -e "[Ok]"
				fi
		    fi
		echo -en "Проверка существования требуемого зеркала с пакетами программ "
		rsync -nq rsync://$RSYNC_HOST/$RSYNC_DIRECTORY 2> /dev/null
		if [ "$?" != "0" ] ; then
		    echo
		    echo -e "${TRed[1]}Используемое зеркало \"${TBold[1]}$RSYNC_DIRECTORY${TBold[0]}${TRed[1]}\" не доступно.\nПопробуйте позже, либо укажите другие параметры.${TRed[0]}"
		    echo
		    exit 1
			else
			    echo -e "[Ok]"
			    fi
		;;
    esac
    return 0
}


function put_err() {
ret=$1
if [ $ret == "0" ]; then
    echo -en "\E[32;3m Готово \E[0m\n"; else
	echo -en "\E[31;3m Ошибка \E[0m"
	rsync_err $ret
fi
}



function make_repository_source_mirror() {
    printf "\033[1mСоздаем корневую структуру Зеркала пакетов с исходным кодом\033[0m - "
    mkdir -p $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/SRPMS
    $RSYNC_CMD -d $RSYNC_OPT rsync://$RSYNC_HOST/$SRPMS/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/SRPMS/ 2> /dev/null
    err=$?; put_err $err
    for i in `ls -1 $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/SRPMS/* -Ad`; do
	    item=`basename "$i"`
	    $RSYNC_CMD -d $RSYNC_OPT rsync://$RSYNC_HOST/$SRPMS/$item/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/SRPMS/$item/ 2> /dev/null
	    err=$?; put_err $err
	    for x in `ls -1 $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/SRPMS/$item/* -Ad`; do
		item2=`basename "$x"`
		 
		[[ -d $x ]] && case $item2 in
		    updates)
				[[ ("$GetUpdate" == "true" || "$GetUpdateOnly" == "true") && "$GetTestingOnly" != "true" && "$GetBackportsOnly" != "true" ]] && (
				echo -en "Загрузка директории \033[1m<$item/"; echo -en "$item2>\033[0m - " 
				$RSYNC_CMD -r $RSYNC_OPT rsync://$RSYNC_HOST/$SRPMS/$item/$item2/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/SRPMS/$item/$item2/ 2> /dev/null
				err=$?; put_err $err )
				[[ "$GetUpdateOnly" == "true"  ]] && break
			    ;;
		    testing)
				[[ ("$GetTesting" == "true" || "$GetTestingOnly" == "true") && "$GetUpdateOnly" != "true"  && "$GetBackportsOnly" != "true" ]] && (
				echo -en "Загрузка директории \033[1m<$item/"; echo -en "$item2>\033[0m - " 
				$RSYNC_CMD -r $RSYNC_OPT rsync://$RSYNC_HOST/$SRPMS/$item/$item2/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/SRPMS/$item/$item2/ 2> /dev/null
				err=$?; put_err $err )
				[[ "$GetTestingOnly" == "true"  ]] && break
			    ;;
		    backports)
				[[ ("$GetBackports" == "true"  || "$GetBackportsOnly" == "true") && "$GetUpdateOnly" != "true" && "$GetTestingOnly" != "true" ]] && (
				echo -en "Загрузка директории \033[1m<$item/"; echo -en "$item2>\033[0m - " 
				$RSYNC_CMD -r $RSYNC_OPT rsync://$RSYNC_HOST/$SRPMS/$item/$item2/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/SRPMS/$item/$item2/ 2> /dev/null
				err=$?; put_err $err )
				[[ "$GetBackportsOnly" == "true"  ]] && break
			    ;;
		    *)
				[[ "$GetUpdateOnly" != "true" && "$GetTestingOnly" != "true" && "$GetBackportsOnly" != "true" ]] && (
				echo -en "Загрузка директории \033[1m<$item/"; echo -en "$item2>\033[0m - " 
				$RSYNC_CMD -r $RSYNC_OPT rsync://$RSYNC_HOST/$SRPMS/$item/$item2/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/SRPMS/$item/$item2/ 2> /dev/null
				err=$?; put_err $err )
			    ;;
		esac
		done
    done
}

function make_repository_mirror() {
    printf "\033[1mСоздаем корневую структуру Зеркала пакетов программ\033[0m - "
    mkdir -p $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch
    $RSYNC_CMD -d $RSYNC_OPT rsync://$RSYNC_HOST/$RSYNC_DIRECTORY/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch/ 2> /dev/null
    err=$?; put_err $err
    for i in `ls -1 $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch/* -Ad`; do
	    item=`basename "$i"`
	    if [ "$item" != "media" -a -d "$i" ]; then
		    printf "Загрузка директории \033[1m<$item>\033[0m - "
		    $RSYNC_CMD -r $RSYNC_OPT rsync://$RSYNC_HOST/$RSYNC_DIRECTORY/$item/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch/$item/ 2> /dev/null
		    err=$?; put_err $err
	    fi
    done
    printf "Обновление структуры \033[1mMEDIA\033[0m - "
    item='media'
    $RSYNC_CMD -d $RSYNC_OPT rsync://$RSYNC_HOST/$RSYNC_DIRECTORY/$item/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch/$item/ 2> /dev/null
    err=$?; put_err $err
    printf "\033[1mОбновление основного репозитория\033[0m:\n"
    [[ $GetDebug == 'true' ]] && media="media/main media/contrib media/non-free media/debug_contrib media/debug_main media/debug_non-free" || media="media/main media/contrib media/non-free"
	for i in $media; do
	    $RSYNC_CMD -d $RSYNC_OPT rsync://$RSYNC_HOST/$RSYNC_DIRECTORY/$i/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch/$i/  2> /dev/null
	    err=$?; put_err $err
	    for x in `ls -1 $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch/$i/* -Ad`; do
		item2=`basename "$x"`
		[[ -d $x ]] && case $item2 in
		    updates)
				[[ ("$GetUpdate" == "true" || "$GetUpdateOnly" == "true") && "$GetTestingOnly" != "true" && "$GetBackportsOnly" != "true" ]] && (
				echo -en "Загрузка директории \033[1m<$i/"; echo -en "$item2>\033[0m - " 
				$RSYNC_CMD -r $RSYNC_OPT rsync://$RSYNC_HOST/$RSYNC_DIRECTORY/$i/$item2/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch/$i/$item2/ 2> /dev/null
				err=$?; put_err $err )
				[[ "$GetUpdateOnly" == "true"  ]] && break
			    ;;
		    testing)
				[[ ("$GetTesting" == "true" || "$GetTestingOnly" == "true") && "$GetUpdateOnly" != "true"  && "$GetBackportsOnly" != "true" ]] && (
				echo -en "Загрузка директории \033[1m<$i/"; echo -en "$item2>\033[0m - " 
				$RSYNC_CMD -r $RSYNC_OPT rsync://$RSYNC_HOST/$RSYNC_DIRECTORY/$i/$item2/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch/$i/$item2/ 2> /dev/null
				err=$?; put_err $err )
				[[ "$GetTestingOnly" == "true"  ]] && break
			    ;;
		    backports)
				[[ ("$GetBackports" == "true"  || "$GetBackportsOnly" == "true") && "$GetUpdateOnly" != "true" && "$GetTestingOnly" != "true" ]] && (
				echo -en "Загрузка директории \033[1m<$i/"; echo -en "$item2>\033[0m - " 
				$RSYNC_CMD -r $RSYNC_OPT rsync://$RSYNC_HOST/$RSYNC_DIRECTORY/$i//$item2/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch/$i/$item2/ 2> /dev/null
				err=$?; put_err $err )
				[[ "$GetBackportsOnly" == "true"  ]] && break
			    ;;
		    *)
				[[ "$GetUpdateOnly" != "true" && "$GetTestingOnly" != "true" && "$GetBackportsOnly" != "true" ]] && (
				echo -en "Загрузка директории \033[1m<$i/"; echo -en "$item2>\033[0m - " 
				$RSYNC_CMD -r $RSYNC_OPT rsync://$RSYNC_HOST/$RSYNC_DIRECTORY/$i/$item2/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch/$i/$item2/ 2> /dev/null
				err=$?; put_err $err )
			    ;;
		esac
		done
	done
    printf "Синхронизация \033[1m<media/media_info>\033[0m\n"
    item='media/media_info'
    $RSYNC_CMD -r $RSYNC_OPT rsync://$RSYNC_HOST/$RSYNC_DIRECTORY/$item/ $Root_Local_Mirror/$RPM_Ferm_Version/$RPM_Ferm_Release/$RPM_Ferm_Arch/$item/ 2> /dev/null
    err=$?; put_err $err
    if [ $err != "0" ]; then
		printf "\033[1m\E[31;3mСинхронизация завершена с ошибками.\033[0m\n";
	    else
		printf "\033[1m\E[32;3mСинхронизация завершена.\033[0m\n";
	    fi
}

function make_plf_repository_mirror() {
    printf "\033[1mСоздаем корневую структуру Зеркала пакетов защищеных патентами\033[0m\n"
    if [ "$RSYNC_HOST" == "distrib-coffee.ipsl.jussieu.fr" ]; then
    
	PLFCFG="plf/mandriva/cfg/$RPM_Ferm_Release"
	PLF="plf/mandriva/$RPM_Ferm_Release"
        else
	PLFCFG="mandriva/plf/cfg/$RPM_Ferm_Release"
	PLF="mandriva/plf/$RPM_Ferm_Release"
    fi
    items="binary/$RPM_Ferm_Arch"
    [[ $GetDebug == 'true' ]] && items="$items debug/$RPM_Ferm_Arch"
    [[ "$Sources" == "true" ]] && items="$items source"
    [[ "$SourcesOnly" == "true" ]] && items="source"

    if [ "$RPM_Ferm_Release" == "cooker" ]; then
    mkdir -p $Root_Local_Mirror/plf/{$RPM_Ferm_Release/{free,non-free}/{{binary,debug}/$RPM_Ferm_Arch,source},cfg/$RPM_Ferm_Release/$RPM_Ferm_Arch}
    echo -e "Синхронизация конфигурации пакетов, защищеных патентами"
    $RSYNC_CMD -rq $RSYNC_OPT rsync://$RSYNC_HOST/$PLFCFG/$RPM_Ferm_Arch/ $Root_Local_Mirror/plf/cfg/$RPM_Ferm_Release/$RPM_Ferm_Arch/ 2>/dev/null
    err=$?; put_err $err
    echo -e "Синхронизация пакетов, защищеных патентами"
    for y in "free" "non-free"; do
	for i in $items; do
	    $RSYNC_CMD -r $RSYNC_OPT rsync://$RSYNC_HOST/$PLF/$y/$i/ $Root_Local_Mirror/plf/$RPM_Ferm_Release/$y/$i/ 2>/dev/null
	    err=$?; put_err $err
	done;
    done;
    else
    mkdir -p $Root_Local_Mirror/plf/{$RPM_Ferm_Release/{free,non-free}/{backports,release}/{{binary,debug}/$RPM_Ferm_Arch,source},cfg/$RPM_Ferm_Release/$RPM_Ferm_Arch}
    echo -e "Синхронизация конфигурации пакетов, защищеных патентами"
    $RSYNC_CMD -rq $RSYNC_OPT rsync://$RSYNC_HOST/$PLFCFG/$RPM_Ferm_Arch/ $Root_Local_Mirror/plf/cfg/$RPM_Ferm_Release/$RPM_Ferm_Arch/ 2>/dev/null
    err=$?; put_err $err
    echo -e "Синхронизация пакетов, защищеных патентами"
    [[ "$GetBackports" == "true"  ]] && x="backports release" || x="release"
    [[ "$GetBackportsOnly" == "true"  ]] && x="backports"
    for y in "free" "non-free"; do
	for z in $x; do
	for i in $items; do
	    $RSYNC_CMD -r $RSYNC_OPT rsync://$RSYNC_HOST/$PLF/$y/$z/$i/ $Root_Local_Mirror/plf/$RPM_Ferm_Release/$y/$z/$i/ 2>/dev/null
	    err=$?; put_err $err
	done
	done
    done
    
    fi
}

function get_singl_rpms()
{
TEMPROOT=$TMP/rpmgetroot
localFerm=$Root_Local_Mirror/RPMS
echo Создаем временную директорию для скичивания файлов
[ -d $TEMPROOT ] || mkdir -p $TEMPROOT/{files/rpms,root}
[ -d $localFerm ] || mkdir -p $localFerm


cat << OEF > $TEMPROOT/rpmscript.sh 
	  #!/bin/bash
	  trap 'umount $localFerm
	  rm -rf $TEMPROOT
	  ' EXIT
	  i=0
	  urpmiaddmedia ()
	  {
	  if [ "\$1" == true ]; then
	    REPOSITORY="rsync://$RSYNC_HOST/\$PLFCFG/$RPM_Ferm_Arch/media/"
	    else
	      REPOSITORY="rsync://$RSYNC_HOST/$RSYNC_DIRECTORY/media/"
	    fi
	  shift
	  for x in \$*; do
		if [[ "$GetDebug" == 'true' ]] ; then
		    echo \${x:1:\${#x}-2} | grep -q debug && urpmi.addmedia --urpmi-root $TEMPROOT/root virtualmedia\$((i++)) \$REPOSITORY\${x:1:\${#x}-2}
		fi

		if [[ "$Sources" == 'true' ||  "$SourcesOnly" == 'true' ]]; then
		  echo \${x:1:\${#x}-2} | grep -q SRPMS && urpmi.addmedia --urpmi-root $TEMPROOT/root virtualmedia\$((i++)) \$REPOSITORY\${x:1:\${#x}-2}
		      echo \${x:1:\${#x}-2} | grep -q source && urpmi.addmedia --urpmi-root $TEMPROOT/root virtualmedia\$((i++)) \$REPOSITORY\${x:1:\${#x}-2}
		    [[ "$SourcesOnly" == 'true' ]] && continue
		fi

# 		if [[ ("$GetUpdate" == "true" || "$GetUpdateOnly" == "true") && "$Sources" != 'true' && "$GetDebug" != 'true'  && "$GetTestingOnly" != "true" && "$GetBackportsOnly" != "true" && "$SourcesOnly" != 'true' ]] ; then
		if [[ ("$GetUpdate" == "true" || "$GetUpdateOnly" == "true")  && "$GetDebug" != 'true'  && "$GetTestingOnly" != "true" && "$GetBackportsOnly" != "true"  ]] ; then
		      echo \${x:1:\${#x}-2} | grep -v source | grep -v SRPMS | grep -v debug| grep -q update && urpmi.addmedia --urpmi-root $TEMPROOT/root virtualmedia\$((i++)) \$REPOSITORY\${x:1:\${#x}-2}
		    [[ "$GetUpdateOnly" == 'true' ]] && continue
		fi

# 		if [[ ("$GetTesting" == "true" || "$GetTestingOnly" == "true") && "$Sources" != 'true' && "$GetDebug" != 'true'  && "$GetUpdateOnly" != "true"  && "$GetBackportsOnly" != "true" && "$SourcesOnly" != 'true' ]] ; then
		if [[ ("$GetTesting" == "true" || "$GetTestingOnly" == "true")  && "$GetDebug" != 'true'  && "$GetUpdateOnly" != "true"  && "$GetBackportsOnly" != "true"  ]] ; then
		      echo \${x:1:\${#x}-2} | grep -v source | grep -v SRPMS | grep -v debug| grep -q testing && urpmi.addmedia --urpmi-root $TEMPROOT/root virtualmedia\$((i++)) \$REPOSITORY\${x:1:\${#x}-2}
		    [[ "$GetTestingOnly" == 'true' ]] && continue
		fi

# 		if [[ ("$GetBackports" == "true"  || "$GetBackportsOnly" == "true")  && "$Sources" != 'true' && "$GetDebug" != 'true'  && "$GetUpdateOnly" != "true" && "$GetTestingOnly" != "true" && "$SourcesOnly" != 'true' ]] ; then
		if [[ ("$GetBackports" == "true"  || "$GetBackportsOnly" == "true") && "$GetDebug" != 'true'  && "$GetUpdateOnly" != "true" && "$GetTestingOnly" != "true" ]] ; then
		    echo \${x:1:\${#x}-2} | grep -v source| grep -v SRPMS | grep -v debug| grep -q backports && urpmi.addmedia --urpmi-root $TEMPROOT/root virtualmedia\$((i++)) \$REPOSITORY\${x:1:\${#x}-2}
		fi
		
# 		if [[ "$Sources" != 'true' &&  "$SourcesOnly" != 'true' && "$GetDebug" != 'true' ]] ; then
  		if [[  "$GetDebug" != 'true' ]] ; then
		  echo \${x:1:\${#x}-2} | grep -v source | grep -v SRPMS | grep -v debug|  grep -q release && urpmi.addmedia --urpmi-root $TEMPROOT/root virtualmedia\$((i++)) \$REPOSITORY\${x:1:\${#x}-2}
		fi
	  done

	  }
	  mount $localFerm $TEMPROOT/files/rpms -o bind
	  genhdlist2 --allow-empty-media --clean --xml-info --quiet $TEMPROOT/files/rpms
	  urpmi.addmedia --urpmi-root $TEMPROOT/root localferm $localFerm
	  echo Добавление источников в виртуальную директорию
	  if [ "$RSYNC_HOST" == "distrib-coffee.ipsl.jussieu.fr" ]; then
	  
	      PLFCFG="plf/mandriva/cfg/$RPM_Ferm_Release"
	      RPLF="plf/mandriva/$RPM_Ferm_Release"
	      else
	      PLFCFG="mandriva/plf/cfg/$RPM_Ferm_Release"
	      RPLF="mandriva/plf/$RPM_Ferm_Release"
	  fi

	  rsync -q rsync://$RSYNC_HOST/\$PLFCFG/$RPM_Ferm_Arch/media/media_info/media.cfg $TEMPROOT/
	  PLFfile=\`cat $TEMPROOT/media.cfg | grep "^\[" | grep -v media_info\`
	  rsync -q rsync://$RSYNC_HOST/$RSYNC_DIRECTORY/media/media_info/media.cfg $TEMPROOT/
	  Fermfile=\`cat $TEMPROOT/media.cfg | grep "^\[" | grep -v media_info\`

	  [[ "$PLFOnly" != "true" ]] && urpmiaddmedia false \$Fermfile
	  [[ "$PLFOnly" == "true" || "$PLF" == "true"  ]] && urpmiaddmedia true \$PLFfile
	  
	  echo Скачивание затребованного пакета со всеми его зависимостями
	  chown -R root.root $TEMPROOT/files
	  chmod -R ugo+rwX $TEMPROOT/files
	  if [ ${GSRPMS:-false} == true ]; then
	  if [ "$autoRPMS" == true ]; then
	  urpmi --noclean --buildrequires --resume --urpmi-root $TEMPROOT/root --no-install --no-verify-rpm --download-all $TEMPROOT/files --auto $@
	  else
	  urpmi --noclean  --buildrequires --resume --urpmi-root $TEMPROOT/root --no-install --no-verify-rpm --download-all $TEMPROOT/files $@
	  fi
	  else
	  if [ "$autoRPMS" == true ]; then
	  urpmi --noclean --resume --urpmi-root $TEMPROOT/root --no-install --no-verify-rpm --download-all $TEMPROOT/files --auto $@
	  else
	  urpmi --noclean --resume --urpmi-root $TEMPROOT/root --no-install --no-verify-rpm --download-all $TEMPROOT/files $@
	  fi
	  fi
	  [[ $? != 0 ]] && (echo Скичивание пакетов прошло не удачно, повторите попытку позднее...)
	  echo Формирование hdlist списка
	  genhdlist2 --allow-empty-media --clean --xml-info  $TEMPROOT/files/rpms
	  chmod -R ugo+rwX $TEMPROOT/files

OEF

chmod +x $TEMPROOT/rpmscript.sh 
echo Введите пароль пользователя root
if [[ "$UID" != "0" ]]; then
    su root  -lc $TEMPROOT/rpmscript.sh $@
  else $TEMPROOT/rpmscript.sh $@
  fi
}



if [ "$#" == "0" ]; then
    get_args
    [[ $? != "0" ]] &&  exit
else
if [ "$1" == "${*##*-}" ]; then
    help
    exit 1
    else
	while [ "$1" != "${*##*-}" ]; do
		case $1 in
		-e)	if [ "$2" == "devel" -o "$2" == "official" ]; then
			    Version=$2
			    shift 2
			    else echo -e "${TRed[1]}Не верно указана редация дистрибутива - значение параметра${TRed[0]} \"${TBold[1]}-e${TBold[0]}\".\nЗа помощью по работе с данной программой обратитесь к справке ${TBold[1]}$(basename $0) --help ${TBold[0]}.";
			    exit
			    fi
			;;
		-r)	if [ "$2" == "current" -o "$2" == "cooker" -o "${2##20[0-9][0-9].[012]}" == "" -o "${2##20[0-9][0-9]}" == "" ]; then
			    Release=$2
			    shift 2
			    else echo -e "${TRed[1]}Не верно указана версия дистрибутива - значение параметра${TRed[0]} \"${TBold[1]}-r${TBold[0]}\".\nЗа помощью по работе с данной программой обратитесь к справке ${TBold[1]}$(basename $0) --help ${TBold[0]}.";
			    exit
			    fi
			;;
		-a)	if [ "$2" == "i586" -o "$2" == "x86_64" ]; then
			    Arch=$2
			    shift 2
			    else echo -e "${TRed[1]}Не верно указана архитектура дистрибутива - значение параметра${TRed[0]} \"${TBold[1]}-a${TBold[0]}\".\nЗа помощью по работе с данной программой обратитесь к справке ${TBold[1]}$(basename $0) --help ${TBold[0]}.";
			    exit
			    fi
			;;
		--root)if [ "$2" != "" ]; then
			    Root=$2
			    shift 2
			    else echo -e "${TRed[1]}Не верно указан корень дистрибутива - значение параметра${TRed[0]} \"${TBold[1]}--root${TBold[0]}\".\nЗа помощью по работе с данной программой обратитесь к справке ${TBold[1]}$(basename $0) --help ${TBold[0]}.";
			    exit
			    fi
			;;
		-H)if [ "$2" != "" ]; then
			    Host=$2
			    shift 2
			    else echo -e "${TRed[1]}Не верно указан хост сервера - значение параметра${TRed[0]} \"${TBold[1]}-H${TBold[0]}\".\nЗа помощью по работе с данной программой обратитесь к справке ${TBold[1]}$(basename $0) --help ${TBold[0]}.";
			    exit
			    fi
			;;
		"--plf"|"--plf-")  [[ "${1: -1}" == "-"  ]] && PPLF=false || PPLF=true
			    shift
			;;
		"--plf-only"|"--plf-only-")  [[ "${1: -1}" == "-"  ]] && PPLFOnly=false || PPLFOnly=true
			    shift
			;;
		"--sources"|"--sources-")  [[ "${1: -1}" == "-"  ]] && PSources=false || PSources=true
			    shift
			;;
		"--sources-only"|"--sources-only-") [[ "${1: -1}" == "-"  ]] &&  PSourcesOnly=false || PSourcesOnly=true
			    shift
			;;
		"--update"|"--update-")  [[ "${1: -1}" == "-"  ]] && PGetUpdate=false || PGetUpdate=true
			    shift
			;;
		"--update-only"|"--update-only-")  [[ "${1: -1}" == "-"  ]] &&  PGetUpdateOnly=false || PGetUpdateOnly=true
			    shift
			;;
		"--testing"|"--testing-")   [[ "${1: -1}" == "-"  ]] &&   PGetTesting=false || PGetTesting=true
			    shift
			;;
		"--testing-only"|"--testing-only-")  [[ "${1: -1}" == "-"  ]] &&  PGetTestOnly=false || PGetTestOnly=true
			    shift
			;;
		"--backports"|"--backports-")   [[ "${1: -1}" == "-"  ]] &&   PGetBackports=false || PGetBackports=true
			    shift
			;;
		"--backports-only"|"--backports-only-")  [[ "${1: -1}" == "-"  ]] &&  PGetBackportsOnly=false || PGetBackportsOnly=true
			    shift
			;;
		"--no-debug"|"--no-debug-") [[ "${1: -1}" == "-"  ]] && PGetDebug=true || PGetDebug=false
			    shift
			;;
		--save) PSave=true
			shift
			;;
		--show-config) PShowCFG=true
			shift
			;;

		-M)if [ "$2" != "" ]; then
			    Module=$2
			    shift 2
			    else echo -e "${TRed[1]}Не верн rsync-модуль сервера - значение параметра${TRed[0]} \"${TBold[1]}-M${TBold[0]}\".\nЗа помощью по работе с данной программой обратитесь к справке ${TBold[1]}$(basename $0) --help ${TBold[0]}.";
			    exit
			    fi
			;;
		--rpms)if [ "$2" != "" ]; then
			    while [ "$2" != '' -a "${2:0:1}" != "-" ]; do
			    shift
			    RPMSlist="$RPMSlist $1"
			    done
			    shift
			    else echo -e "${TRed[1]}Не указаны пакеты для загрузки в значении параметра${TRed[0]} \"${TBold[1]}--rpms${TBold[0]}\".\nЗа помощью по работе с данной программой обратитесь к справке ${TBold[1]}$(basename $0) --help ${TBold[0]}.";
			    exit
			    fi
			;;
		--auto-rpms)if [ "$2" != "" ]; then
			    while [ "$2" != '' -a "${2:0:1}" != "-" ]; do
			    shift
			    RPMSlist="$RPMSlist $1"
			    done
			    shift
			    autoRPMS=true
			    else echo -e "${TRed[1]}Не указаны пакеты для загрузки в значении параметра${TRed[0]} \"${TBold[1]}--rpms${TBold[0]}\".\nЗа помощью по работе с данной программой обратитесь к справке ${TBold[1]}$(basename $0) --help ${TBold[0]}.";
			    exit
			    fi
			;;
		--srpms)if [ "$2" != "" ]; then
			    while [ "$2" != '' -a "${2:0:1}" != "-" ]; do
			    shift
			    RPMSlist="$RPMSlist $1"
			    done
			    GSRPMS=true
			    PSources=true
			    shift
			    else echo -e "${TRed[1]}Не указаны пакеты для загрузки в значении параметра${TRed[0]} \"${TBold[1]}--rpms${TBold[0]}\".\nЗа помощью по работе с данной программой обратитесь к справке ${TBold[1]}$(basename $0) --help ${TBold[0]}.";
			    exit
			    fi
			;;
		--auto-srpms)if [ "$2" != "" ]; then
			    while [ "$2" != '' -a "${2:0:1}" != "-" ]; do
			    shift
			    RPMSlist="$RPMSlist $1"
			    done
			    shift
			    GSRPMS=true
			    autoRPMS=true
			    PSources=true
			    else echo -e "${TRed[1]}Не указаны пакеты для загрузки в значении параметра${TRed[0]} \"${TBold[1]}--rpms${TBold[0]}\".\nЗа помощью по работе с данной программой обратитесь к справке ${TBold[1]}$(basename $0) --help ${TBold[0]}.";
			    exit
			    fi
			;;
		-h|--help)	help
			exit
			;;
		*)     help
			exit 1;;
		esac
	done
    get_args
    [[ $? != "0" ]] &&  exit
    fi
fi

if [ "$PSave" = "true" ]; then
    echo -e "Сохраняем параметры в файл конфигурации"
    save_config
    fi

if [ "$RPMSlist" != "" ]; then
    get_singl_rpms $RPMSlist
    exit 0
    fi


if [ "$SourcesOnly" == "true" -a "$PLF" == "true" ]; then
    echo -e "Будет произведена синхронизация репозиториев с исходными текстами пакетов программ,\nвключая пакеты с исходными кодами программ, защищенных патентами."
    make_repository_source_mirror
    make_plf_repository_mirror
    exit
    fi

if [ "$SourcesOnly" == "true" ]; then
    echo -e "Будет произведена синхронизация репозиториев с исходными текстами пакетов программ"
    make_repository_source_mirror
    exit
    fi

if [ "$PLFOnly" == "true" ]; then
    echo -e "Будет произведена синхронизация репозитория пакетов программ, защищенных патентами"
    make_plf_repository_mirror
    exit
    fi

echo -e "Будет произведена синхронизация репозитория пакетов программ"
make_repository_mirror

if [ "$Sources" == "true" ]; then
    echo -e "Будет произведена синхронизация репозиториев с исходными текстами пакетов программ"
    make_repository_source_mirror
    fi

if [ "$PLF" == "true" ]; then
    echo -e "Будет произведена синхронизация репозитория пакетов программ, защищенных патентами"
    make_plf_repository_mirror
    fi

