#!/bin/bash
#
#
# Скрипт для создания локального зеркала дистрибутива
# Mandriva GNU\Linux
# BDag 2008 г. [email protected]
# 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 [email protected]
.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 "Требуется установить программу РСУНС.\нВыполните от имени суперпользователя следующую команду: 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]}\" не доступно.\нПопробуйте позже, либо укажите другие параметры.${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]}\" не доступно.\нПопробуйте позже, либо укажите другие параметры.${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[1мСоздаем корневую структуру Зеркала пакетов с исходным кодом\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[1мСоздаем корневую структуру Зеркала пакетов программ\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[1мОбновление основного репозитория\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\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].[01]}" == "" ]; 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