Участник:Alexandr/repocreate: различия между версиями

Материал из ALT Linux Wiki
(Новая: === Создание локального репозитория с помощью скрипта create-repo.sh === Мне достаточно часто приодиться соз...)
 
 
(не показаны 3 промежуточные версии 2 участников)
Строка 11: Строка 11:
4. Скрипт умеет создавать в папке с репозиторями скрипт, запустив который пропишет репозитории из папки в систему.
4. Скрипт умеет создавать в папке с репозиторями скрипт, запустив который пропишет репозитории из папки в систему.


Примесание: Пока скрипт работает только с пакетами i586 и noarch архитектуры.
5. Перегенерирывать репозиторий(пересоздавать папку base).
 
6. Удалять информацию о прописанных в систему скриптом, репозиториях.
 
Примечание: Пока скрипт работает только с пакетами i586 и noarch архитектуры.


Для создания репозитория, необходимо иметь установленным пакет apt-utils. Если он у вас еще не установлен, скрипт попытается установить его сам. Поискав его у прописанных в системе репозиториях и в одном произвольном репозитории, который вы можете указать в теле скрипта.
Для создания репозитория, необходимо иметь установленным пакет apt-utils. Если он у вас еще не установлен, скрипт попытается установить его сам. Поискав его у прописанных в системе репозиториях и в одном произвольном репозитории, который вы можете указать в теле скрипта.
Строка 65: Строка 69:
echo "Пример запуска скрипта, для создания репозитория с удалением пакетов из кэша Synaptic-а:"
echo "Пример запуска скрипта, для создания репозитория с удалением пакетов из кэша Synaptic-а:"
echo "./имя_скрипта -cr /папка/для/нового/репозитория /папка/в_корне/которой/лежат/пакеты  - в качестве пакетов используется альтернативный источник"
echo "./имя_скрипта -cr /папка/для/нового/репозитория /папка/в_корне/которой/лежат/пакеты  - в качестве пакетов используется альтернативный источник"
echo ""
echo "Пересоздать уже имеющийся репозиторий, можно так:"
echo "./имя_скрипта -g /папка/где/находятся/репозитории      - пересоздает папки base, в указанном репозитории"
echo ""
echo ""
echo "Если у вас есть репозитории и вы хотите прописать их в системе - это можно сделать так:"
echo "Если у вас есть репозитории и вы хотите прописать их в системе - это можно сделать так:"
Строка 82: Строка 89:
function _Unset ()
function _Unset ()
{
{
unset UseRepo;unset Remove;unset NewRepo;unset Sourc;unset UseALL;unset UseNewScript;unset RepoFile
echo "";unset UseRepo;unset Remove;unset NewRepo;unset Sourc;unset UseALL;unset UseNewScript;unset RepoFile
}
}


Строка 91: Строка 98:
function _Autoinstalrpm ()
function _Autoinstalrpm ()
{
{
if rpm -qa | grep "apt-utils" >/dev/null 2>&1;then echo >/dev/null;else
echo "";echo -n "  > Поиск и установка необходимых пакетов..."
apt-get update && apt-get install -y apt-utils
rpm -qa | grep "apt-utils" &> /dev/null || (apt-get update && apt-get install -y apt-utils &> /dev/null)
if rpm -qa | grep "apt-utils" >/dev/null 2>&1;then echo >/dev/null;else echo $UseRepo > /etc/apt/sources.list.d/A-create-repo.list
rpm -qa | grep "apt-utils" &> /dev/null || (echo $UseRepo > /etc/apt/sources.list.d/A-create-repo.list;apt-get update &> /dev/null && apt-get install -y apt-utils &> /dev/null);rm -f /etc/apt/sources.list.d/A-create-repo.list &> /dev/null
apt-get update && apt-get install -y apt-utils;rm -f /etc/apt/sources.list.d/A-create-repo.list;fi
sleep 1s;rpm -qa | grep "apt-utils" &> /dev/null && echo " Выполнено." || echo " Неудача" || echo "   ! Пакет для создания репозиториев - apt-utils не найден, дальнейшая работа невозможна" || exit
if rpm -qa | grep "apt-utils" >/dev/null 2>&1;then echo >/dev/null;else echo "Пакет для создания репозиториев - apt-utils не найден, дальнейшая работа невозможна";exit;fi;fi
}
}




Строка 103: Строка 110:
function _Instal ()
function _Instal ()
{
{
[[ $NewRepo == "" ]] && NewRepo=`echo ~+/`;NewRepo=`echo $NewRepo | sed 's/\/$//'`
echo "";echo "=> Выполняется добавление записи о репозиториях в систему.";echo ""
echo $NewRepo;sleep 10s
[[ -e $NewRepo ]] || NewRepo=`echo ~+/`;NewRepo=`echo $NewRepo | sed 's/\/$//'`
RepoFile=/etc/apt/sources.list.d/A_create_repo_`date +%d%m%y.%H%M%S`.list
RepoFile=/etc/apt/sources.list.d/A_create_repo_`date +%d%m%y.%H%M%S`.list
[[ -e ${NewRepo}/i586/RPMS.classic ]] && if ls ${NewRepo}/i586/RPMS.classic | grep i586 |grep rpm &> /dev/null;then
echo rpm\ file\:\/\/${NewRepo}\/" i586 classic" > $RepoFile;echo "  > Запись о репозитории i586 добавлена."
else echo "  ! Репозиторий с архитектурой i586 не найден в указанной папке.";fi
[[ -e ${NewRepo}/noarch/RPMS.classic ]] && if ls ${NewRepo}/noarch/RPMS.classic | grep noarch |grep rpm &> /dev/null;then
[[ -f $RepoFile ]] || echo > $RepoFile
echo rpm\ file\:\/\/${NewRepo}\/" noarch classic" >> $RepoFile;echo "  > Запись о репозитории noarch добавлена."
else echo "  ! Репозиторий с архитектурой noarch не найден в указанной папке.";fi
[[ -f $RepoFile ]] && (echo -n "  > Обноляется список пакетов...";apt-get update &> /dev/null && echo " Выполнено." || echo " Неудача" || echo "  ! Не удалось обновить список пакетов") || echo "  ! Не удалось найти репозитории в указанном каталоге."
}


if ls ${NewRepo}/i586/RPMS.classic | grep i586 |grep rpm >/dev/null 2>&1;then
echo rpm\ file\:\/\/${NewRepo}\/" i586 classic" > $RepoFile
else echo " Репозиторий с архитектурой i586 не найден в указанной папке либо в папке скрипта";fi


if ls ${NewRepo}/noarch/RPMS.classic | grep i586 |grep rpm >/dev/null 2>&1;then
# Функция пересоздания репозитория
ls -f $RepoFile || echo > $RepoFile
function _Generate ()
echo rpm\ file\:\/\/${NewRepo}\/" i586 classic" >> $RepoFile
{
else echo " Репозиторий с архитектурой noarch не найден в указанной папке либо в папке скрипта";fi
echo "";echo "=> Выполняется пересоздание репозиториев.";echo ""
# Проверяем наличие указанной папки с репозиториями. В случае ее отсутствия, прекращаем работу скрипта.
NewRepo=`echo $NewRepo | sed 's/\/$//'`
if [[ -e ${NewRepo} ]];then echo >/dev/null;else echo "  ! Каталог с репозиториями не найден.";exit;fi
 
# Создаем репозиторий для i586 архитектуры
[[ -e ${NewRepo}/i586/RPMS.classic ]] && if ls ${NewRepo}/i586/RPMS.classic | grep i586 |grep rpm &> /dev/null;then
find ${NewRepo}/i586/ -maxdepth 1 -name "base" -exec rm -fR {} \; &> /dev/null
echo -n "  > Создание i586 репозитория...";genbasedir --progress --create --topdir=${NewRepo} i586 classic >/dev/null;echo " Выполнено.";else echo " Неудача.";echo "  ! Репозиторий i586 не найден.";fi


ls -f $RepoFile && apt-get update
# Создаем репозиторий для noarch архитектуры
[[ -e ${NewRepo}/noarch/RPMS.classic ]] && if ls ${NewRepo}/noarch/RPMS.classic | grep noarch |grep rpm  &> /dev/null;then
find ${NewRepo}/noarch/ -maxdepth 1 -name "base" -exec rm -fR {} \; &> /dev/null
echo -n "  > Создание noarch репозитория...";genbasedir --progress --create --topdir=${NewRepo} noarch classic &> /dev/null;echo " Выполнено.";else echo " Неудача.";echo "  ! Репозиторий noarch не найден.";fi
}
}


Строка 125: Строка 151:
function _Create ()
function _Create ()
{
{
echo "";echo "=> Выполняется создание репозиториев.";echo ""
# Проверяем наличие указанного каталога для репозитория и папки источника. В случае отсутствия каталога для репозитория, пытаемся его создать. Иначе прекращаем работу скрипта.
# Проверяем наличие указанного каталога для репозитория и папки источника. В случае отсутствия каталога для репозитория, пытаемся его создать. Иначе прекращаем работу скрипта.
NewRepo=`echo $NewRepo | sed 's/\/$//'`
NewRepo=`echo $NewRepo | sed 's/\/$//'`
Sourc=`echo $Sourc | sed 's/\/$//'`;[[ $Sourc == "" ]] && Sourc=/var/cache/apt/archives;mkdir $NewRepo >/dev/null
Sourc=`echo $Sourc | sed 's/\/$//'`;[[ $Sourc == "" ]] && Sourc=/var/cache/apt/archives;mkdir $NewRepo &> /dev/null
if ls -d $NewRepo >/dev/null 2>&1;then echo >/dev/null;else echo "Невозможно найти либо создать каталог под репозиторий";exit;fi
[[ -d $NewRepo ]] || echo "   ! Невозможно найти либо создать каталог под репозиторий" || exit


# Создаем репозиторий для i586 архитектуры
# Создаем репозиторий для i586 архитектуры
if find $Sourc/ -name "*i586*.rpm" | grep i586 | grep rpm >/dev/null 2>&1;then mkdir -p ${NewRepo}/i586/RPMS.classic
echo -n "  > Создание i586 репозитория..."
if find $Sourc/ -name "*i586*.rpm" | grep i586 | grep rpm &> /dev/null;then mkdir -p ${NewRepo}/i586/RPMS.classic &> /dev/null
if [[ $Remove == 1 ]];then
if [[ $Remove == 1 ]];then
find $Sourc/ -name "*i586*.rpm" -exec mv -f {} ${NewRepo}/i586/RPMS.classic \;
find $Sourc/ -name "*i586*.rpm" -exec mv -f {} ${NewRepo}/i586/RPMS.classic \; &> /dev/null
find ${NewRepo}/i586/ -maxdepth 1 -name "base" -exec rm -fR {} \;
find ${NewRepo}/i586/ -maxdepth 1 -name "base" -exec rm -fR {} \; &> /dev/null
genbasedir --progress --create --topdir=${NewRepo} i586 classic;fi
genbasedir --progress --create --topdir=${NewRepo} i586 classic &> /dev/null;fi
if [[ $Remove != 1 ]];then
if [[ $Remove != 1 ]];then
find $Sourc/ -name "*i586*.rpm" -exec cp -fR {} ${NewRepo}/i586/RPMS.classic \;
find $Sourc/ -name "*i586*.rpm" -exec cp -fR {} ${NewRepo}/i586/RPMS.classic \; &> /dev/null
find ${NewRepo}/i586/ -maxdepth 1 -name "base" -exec rm -fR {} \;
find ${NewRepo}/i586/ -maxdepth 1 -name "base" -exec rm -fR {} \; &> /dev/null
genbasedir --progress --create --topdir=${NewRepo} i586 classic;fi;else echo "Пакеты для архитектуры i586 не найдены в указанном источнике.";fi
genbasedir --progress --create --topdir=${NewRepo} i586 classic &> /dev/null;fi;echo " Выполнено.";else echo " Неудача.";echo "  ! Пакеты для архитектуры i586 не найдены в указанном источнике.";fi


# Создаем репозиторий для noarch архитектуры
# Создаем репозиторий для noarch архитектуры
if find $Sourc/ -name "*noarch*.rpm" | grep noarch | grep rpm >/dev/null 2>&1;then mkdir -p ${NewRepo}/noarch/RPMS.classic
echo -n "  > Создание noarch репозитория..."
if find $Sourc/ -name "*noarch*.rpm" | grep noarch | grep rpm &> /dev/null;then mkdir -p ${NewRepo}/noarch/RPMS.classic &> /dev/null
if [[ $Remove == 1 ]];then
if [[ $Remove == 1 ]];then
find $Sourc/ -name "*noarch*.rpm" -exec mv -f {} ${NewRepo}/noarch/RPMS.classic \;
find $Sourc/ -name "*noarch*.rpm" -exec mv -f {} ${NewRepo}/noarch/RPMS.classic \; &> /dev/null
find ${NewRepo}/noarch/ -maxdepth 1 -name "base" -exec rm -fR {} \;
find ${NewRepo}/noarch/ -maxdepth 1 -name "base" -exec rm -fR {} \; &> /dev/null
genbasedir --progress --create --topdir=${NewRepo} noarch classic;fi
genbasedir --progress --create --topdir=${NewRepo} noarch classic &> /dev/null;fi
if [[ $Remove != 1 ]];then
if [[ $Remove != 1 ]];then
find $Sourc/ -name "*noarch*.rpm" -exec cp -fR {} ${NewRepo}/noarch/RPMS.classic \;
find $Sourc/ -name "*noarch*.rpm" -exec cp -fR {} ${NewRepo}/noarch/RPMS.classic \; &> /dev/null
find ${NewRepo}/noarch/ -maxdepth 1 -name "base" -exec rm -fR {} \;
find ${NewRepo}/noarch/ -maxdepth 1 -name "base" -exec rm -fR {} \; &> /dev/null
genbasedir --progress --create --topdir=${NewRepo} noarch classic;fi;else echo "Пакеты для архитектуры noarch не найдены в указанном источнике.";fi
genbasedir --progress --create --topdir=${NewRepo} noarch classic &> /dev/null;fi;echo " Выполнено.";else echo " Неудача.";echo "  ! Пакеты для архитектуры noarch не найдены в указанном источнике.";fi


# Проверяем факт создания репозитория(ев), в противном случае удаляем заданный каталог для новых репозиториев и завершаем работу скрипта.
# Проверяем факт создания репозитория(ев), в противном случае удаляем заданный каталог для новых репозиториев и завершаем работу скрипта.
if find ${NewRepo} -name "*.rpm" | grep -E "i586|noarch" | grep rpm >/dev/null 2>&1;then echo /dev/null;else echo "Не удалось создать репозиторий, т.к. в указанном источнике. Скрипт завершает работу.";rm -fR ${NewRepo};exit;fi
find ${NewRepo} -name "*.rpm" | grep -E "i586|noarch" | grep rpm &> /dev/null || echo "   ! Не удалось создать репозиторий, т.к. в указанном источнике. Скрипт завершает работу." || rm -fR ${NewRepo} &> /dev/null || exit
}
 
 
 


function _Clean ()
{
echo ""; echo -n "  > Удаление информации о репозиториях..."
find /etc/apt/sources.list.d/ -name "A_create_repo*.list" -exec rm -f {} \; &> /dev/null && echo " Выполнено." && (echo -n "  > Обноляется список пакетов...";apt-get update &> /dev/null && echo " Выполнено." || echo " Неудача.") || echo " Неудача." || echo "  ! Информация о сгенерированый скриптом репозиториях не найдена."
}
# Применяем дополнительные возможности
function _Final ()
{
# Меняем разрешения, если задана такая опция
# Меняем разрешения, если задана такая опция
if [[ $UseALL=yes ]];then
if [[ $UseALL == yes ]];then
if ls -d ${NewRepo}/i586 >/dev/null 2>&1;then chmod 0777 ${NewRepo};chmod -f 0777 ${NewRepo}/i586;chmod -f 0777 ${NewRepo}/i586/base;chmod -f 0777 ${NewRepo}/i586/RPMS.classic
echo -n "  > Установка прав доступа к репозиториям..."
chmod -fR 0666 ${NewRepo}/i586/base/*;chmod -fR 0666 ${NewRepo}/i586/RPMS.classic/*;fi
[[ -e ${NewRepo}/i586/RPMS.classic ]] && if ls ${NewRepo}/i586/RPMS.classic | grep i586 |grep rpm &> /dev/null;then chmod -f 0777 ${NewRepo} &> /dev/null;chmod -f 0777 ${NewRepo}/i586 &> /dev/null;chmod -f 0777 ${NewRepo}/i586/base &> /dev/null;chmod -f 0777 ${NewRepo}/i586/RPMS.classic &> /dev/null
if ls -d ${NewRepo}/noarch >/dev/null 2>&1;then chmod -f 0777 ${NewRepo}/noarch;chmod -f 0777 ${NewRepo}/noarch/base;chmod -f 0777 ${NewRepo}/noarch/RPMS.classic
chmod -fR 0666 ${NewRepo}/i586/base/* &> /dev/null;chmod -fR 0666 ${NewRepo}/i586/RPMS.classic/* &> /dev/null;fi
chmod -fR 0666 ${NewRepo}/noarch/base/*;chmod -fR 0666 ${NewRepo}/noarch/RPMS.classic/*;fi
[[ -e ${NewRepo}/noarch/RPMS.classic ]] && if ls ${NewRepo}/noarch/RPMS.classic | grep noarch |grep rpm &> /dev/null;then chmod -f 0777 ${NewRepo} &> /dev/null;chmod -f 0777 ${NewRepo}/noarch &> /dev/null;chmod -f 0777 ${NewRepo}/noarch/base &> /dev/null;chmod -f 0777 ${NewRepo}/noarch/RPMS.classic &> /dev/null
chmod -fR 0666 ${NewRepo}/noarch/base/* &> /dev/null;chmod -fR 0666 ${NewRepo}/noarch/RPMS.classic/* &> /dev/null;fi
echo " Выполнено."
fi
fi


# Создаем скрипт установки репозитория
# Создаем скрипт установки репозитория
if [[ $UseNewScript=yes ]];then
if [[ $UseNewScript == yes ]];then
if ls -d ${NewRepo}/i586/RPMS.classic >/dev/null 2>&1;then
echo -n "  > Создание скрипта установки..."
[[ -e ${NewRepo}/i586/RPMS.classic ]] && if ls ${NewRepo}/i586/RPMS.classic | grep i586 |grep rpm &> /dev/null;then
echo \#\!\/bin\/sh > ${NewRepo}/install-repo.sh
echo \#\!\/bin\/sh > ${NewRepo}/install-repo.sh
echo RepoFile\=\/etc\/apt\/sources\.list\.d\/A\_create\_repo\_\`date\ \+\%d\%m\%y\.\%H\%M\%S\`\.list >> ${NewRepo}/install-repo.sh
echo rep586\=\~\+ >> ${NewRepo}/install-repo.sh
echo rep586\=\~\+ >> ${NewRepo}/install-repo.sh
echo rep586\=rpm\\ file\:\/\/\$\{rep586\} >> ${NewRepo}/install-repo.sh
echo rep586\=rpm\\ file\:\/\/\$\{rep586\} >> ${NewRepo}/install-repo.sh
echo rep586\=\$\{rep586\}\/\"\ i586\ classic\" >> ${NewRepo}/install-repo.sh
echo rep586\=\$\{rep586\}\/\"\ i586\ classic\" >> ${NewRepo}/install-repo.sh
echo "echo "\$rep586\ \>\ \/etc\/apt\/sources\.list\.d\/A\-create\-repo\.list >> ${NewRepo}/install-repo.sh;fi
echo "echo "\$rep586\ \>\ \$RepoFile >> ${NewRepo}/install-repo.sh;fi
if ls -d ${NewRepo}/noarch/RPMS.classic >/dev/null 2>&1;then
[[ -e ${NewRepo}/noarch/RPMS.classic ]] && if ls ${NewRepo}/noarch/RPMS.classic | grep noarch |grep rpm &> /dev/null;then
echo repNOAR\=\~\+ >> ${NewRepo}/install-repo.sh
echo repNOAR\=\~\+ >> ${NewRepo}/install-repo.sh
echo repNOAR\=rpm\\ file\:\/\/\$\{repNOAR\} >> ${NewRepo}/install-repo.sh
echo repNOAR\=rpm\\ file\:\/\/\$\{repNOAR\} >> ${NewRepo}/install-repo.sh
echo repNOAR\=\$\{repNOAR\}\/\"\ noarch\ classic\" >> ${NewRepo}/install-repo.sh
echo repNOAR\=\$\{repNOAR\}\/\"\ noarch\ classic\" >> ${NewRepo}/install-repo.sh
echo "echo "\$repNOAR\ \>\>\ \/etc\/apt\/sources\.list\.d\/A\-create\-repo\.list >> ${NewRepo}/install-repo.sh;fi
echo "echo "\$repNOAR\ \>\>\ \$RepoFile >> ${NewRepo}/install-repo.sh;fi
ls -d ${NewRepo}/install-repo.sh && (echo apt\-get\ update >> ${NewRepo}/install-repo.sh;chmod 0777 ${NewRepo}/install-repo.sh)
echo unset\ RepoFile\;unset\ NewRepo >> ${NewRepo}/install-repo.sh
[[ -f ${NewRepo}/install-repo.sh ]] && (echo apt\-get\ update >> ${NewRepo}/install-repo.sh;chmod 0777 ${NewRepo}/install-repo.sh &> /dev/null) && echo " Выполнено."
fi
fi
}
}
Строка 187: Строка 237:
case $1 in
case $1 in
   -i) NewRepo=$2;_Instal;_Unset;exit;;
   -i) NewRepo=$2;_Instal;_Unset;exit;;
   -c) NewRepo=$2;Sourc=$3;_Autoinstalrpm;_Create;_Unset;exit;;
   -c) NewRepo=$2;Sourc=$3;_Autoinstalrpm;_Create;_Final;_Unset;exit;;
   -cr) Remove=1;NewRepo=$2;Sourc=$3;_Create;_Unset;exit;;
   -cr) Remove=1;NewRepo=$2;Sourc=$3;_Create;_Final;_Unset;exit;;
   -rc) Remove=1;NewRepo=$2;Sourc=$3;_Create;_Unset;exit;;
   -rc) Remove=1;NewRepo=$2;Sourc=$3;_Create;_Final;_Unset;exit;;
   --clean) find /var/cache/apt/archives/ -name "A_create_repo*.list" -exec rm -f {} \; && apt-get update;exit
  -g) NewRepo=$2;_Autoinstalrpm;_Generate;_Final;_Unset;exit;;
   --clean) _Clean;_Unset;exit;;
   "") _Help;_Unset;exit;;
   "") _Help;_Unset;exit;;
     *) _Help;_Unset;exit;;
     *) _Help;_Unset;exit;;

Текущая версия от 09:57, 11 марта 2009

Создание локального репозитория с помощью скрипта create-repo.sh

Мне достаточно часто приодиться создавать репозитории из уже закаченных синаптиком пакетов, ими очень удобно пользоваться, если нужно поставить какой-нибудь пакет или пакеты. Просто подключил репозиторий и ставь нужные пакеты всего лишь одной командой. Плюс к этому, их(репозитории) удобно переносить и ставить пакеты уже на других компьютерах. И чтобы свести свой труд к минимуму, я написал один скрипт, которым я хочу поделиться:) Вот собственно, что он умеет:

1. Создавать репозитории из закаченных Synaptic-ом пакетов.

2. Создавать репозитории указав в качестве источника произвольную папку.

3. Прописать существующий репозиторий в Synaptic.

4. Скрипт умеет создавать в папке с репозиторями скрипт, запустив который пропишет репозитории из папки в систему.

5. Перегенерирывать репозиторий(пересоздавать папку base).

6. Удалять информацию о прописанных в систему скриптом, репозиториях.

Примечание: Пока скрипт работает только с пакетами i586 и noarch архитектуры.

Для создания репозитория, необходимо иметь установленным пакет apt-utils. Если он у вас еще не установлен, скрипт попытается установить его сам. Поискав его у прописанных в системе репозиториях и в одном произвольном репозитории, который вы можете указать в теле скрипта.

А вот и сам скрипт:

#!/bin/sh

# ------------------------------------ Настройки скрипта ---------------------------------------------------------------------------------------------------------------------

# Укажите репозиторий, из которого можно будет установить пакет apt-utils, если пакет не будет найден в системе и/или указанных на текущим момент репозиториях
UseRepo="rpm ftp://ftp.altlinux.org/pub/distributions/ALTLinux/4.1/branch/ i586 classic"

# Вы можете сменить разрешения файловой системы для новых репозиториев. Иначе доступ к файлам репозитория будет иметь только пользователь root. Укажите yes чтобы разрешить доступ всем.
UseALL=yes

# Скрипт может создавать для новых репозиториев скрипты, запуск которых будет автоматически прописывать репозиторий в системе. Укажите yes чтобы использовать эту возможность.
UseNewScript=yes

# ------------------------------------ Настройки скрипта ---------------------------------------------------------------------------------------------------------------------







# Функция вывода справки
function _Help ()
{
echo ""
echo "Скрипт для создания репозиториев из пакетов, взятых из кэша Synaptic-а либо из указанной папки."
echo ""
echo "Скрипт поддерживает пакеты арихитектуры i586 и noarch. После успешного использования скрипта,"
echo "в указанной папке(если такой не существует, она создается автоматически) появляются две папки."
echo "Одна папка будет называться i586 - репозиторий для пакетов архитектуры i586, другая папка будет"
echo "называться noarch - для пакетов noarch. Если в источнике, который вы указали, не будет пакетов"
echo "какой либо архитектуры, соответствующий репозиторий не появиться. После создания репозитория(ев)"
echo "их так-же можно будет прописать в систему. Если у вас уже есть репозиторий(ии), то их тоже можно"
echo "прописать в систему, указав в качестве папки с репозиториями - папку в которой лежит(ат) папка(и)"
echo "i586 и/или noarch."
echo ""
echo ""
echo "Пример запуска скрипта, для создания репозитория:"
echo "./имя_скрипта -c /папка/для/нового/репозитория   - в качестве пакетов используется кэш Synaptic-а"
echo ""
echo "Пример запуска скрипта, для создания репозитория c указанием альтернативного источника пакетов:"
echo "./имя_скрипта -c /папка/для/нового/репозитория /папка/в_корне/которой/лежат/пакеты   - в качестве пакетов используется альтернативный источник"
echo ""
echo "Пример запуска скрипта, для создания репозитория с удалением пакетов из кэша Synaptic-а:"
echo "./имя_скрипта -cr /папка/для/нового/репозитория   - в качестве пакетов используется кэш Synaptic-а"
echo ""
echo "Пример запуска скрипта, для создания репозитория с удалением пакетов из кэша Synaptic-а:"
echo "./имя_скрипта -cr /папка/для/нового/репозитория /папка/в_корне/которой/лежат/пакеты   - в качестве пакетов используется альтернативный источник"
echo ""
echo "Пересоздать уже имеющийся репозиторий, можно так:"
echo "./имя_скрипта -g /папка/где/находятся/репозитории      - пересоздает папки base, в указанном репозитории"
echo ""
echo "Если у вас есть репозитории и вы хотите прописать их в системе - это можно сделать так:"
echo "./имя_скрипта -i /папка/где/находятся/репозитории      - прописывает из этой папки репозитории в систему"
echo ""
echo "Чтобы удалить из системы все записи о репозиториях, прописанных данным скриптом:"
echo "./имя_скрипта --clean      - удалит за каталога /var/cache/apt/archives/ все файлы вида A_create_repo*.list"
echo ""
echo ""
echo ""
}




# Убераем переменные
function _Unset ()
{
echo "";unset UseRepo;unset Remove;unset NewRepo;unset Sourc;unset UseALL;unset UseNewScript;unset RepoFile
}




# Проверяем наличие необходимого пакета и в случае неудачи пытаемся его поставить. Иначе прекращаем работу скрипта.
function _Autoinstalrpm ()
{
echo "";echo -n "   > Поиск и установка необходимых пакетов..."
rpm -qa | grep "apt-utils" &> /dev/null || (apt-get update && apt-get install -y apt-utils &> /dev/null)
rpm -qa | grep "apt-utils" &> /dev/null || (echo $UseRepo > /etc/apt/sources.list.d/A-create-repo.list;apt-get update &> /dev/null && apt-get install -y apt-utils &> /dev/null);rm -f /etc/apt/sources.list.d/A-create-repo.list &> /dev/null
sleep 1s;rpm -qa | grep "apt-utils" &> /dev/null && echo " Выполнено." || echo " Неудача" || echo "   ! Пакет для создания репозиториев - apt-utils не найден, дальнейшая работа невозможна" || exit
}




# Прописываем указанные репозитории в системе
function _Instal ()
{
echo "";echo "=> Выполняется добавление записи о репозиториях в систему.";echo ""
[[ -e $NewRepo ]] || NewRepo=`echo ~+/`;NewRepo=`echo $NewRepo | sed 's/\/$//'`
RepoFile=/etc/apt/sources.list.d/A_create_repo_`date +%d%m%y.%H%M%S`.list
[[ -e ${NewRepo}/i586/RPMS.classic ]] && if ls ${NewRepo}/i586/RPMS.classic | grep i586 |grep rpm &> /dev/null;then
echo rpm\ file\:\/\/${NewRepo}\/" i586 classic" > $RepoFile;echo "   > Запись о репозитории i586 добавлена."
else echo "   ! Репозиторий с архитектурой i586 не найден в указанной папке.";fi
[[ -e ${NewRepo}/noarch/RPMS.classic ]] && if ls ${NewRepo}/noarch/RPMS.classic | grep noarch |grep rpm &> /dev/null;then
[[ -f $RepoFile ]] || echo > $RepoFile
echo rpm\ file\:\/\/${NewRepo}\/" noarch classic" >> $RepoFile;echo "   > Запись о репозитории noarch добавлена."
else echo "   ! Репозиторий с архитектурой noarch не найден в указанной папке.";fi
[[ -f $RepoFile ]] && (echo -n "   > Обноляется список пакетов...";apt-get update &> /dev/null && echo " Выполнено." || echo " Неудача" || echo "   ! Не удалось обновить список пакетов") || echo "   ! Не удалось найти репозитории в указанном каталоге."
}




# Функция пересоздания репозитория
function _Generate ()
{
echo "";echo "=> Выполняется пересоздание репозиториев.";echo ""
# Проверяем наличие указанной папки с репозиториями. В случае ее отсутствия, прекращаем работу скрипта.
NewRepo=`echo $NewRepo | sed 's/\/$//'`
if [[ -e ${NewRepo} ]];then echo >/dev/null;else echo "   ! Каталог с репозиториями не найден.";exit;fi

# Создаем репозиторий для i586 архитектуры
[[ -e ${NewRepo}/i586/RPMS.classic ]] && if ls ${NewRepo}/i586/RPMS.classic | grep i586 |grep rpm &> /dev/null;then
find ${NewRepo}/i586/ -maxdepth 1 -name "base" -exec rm -fR {} \; &> /dev/null
echo -n "   > Создание i586 репозитория...";genbasedir --progress --create --topdir=${NewRepo} i586 classic >/dev/null;echo " Выполнено.";else echo " Неудача.";echo "   ! Репозиторий i586 не найден.";fi

# Создаем репозиторий для noarch архитектуры
[[ -e ${NewRepo}/noarch/RPMS.classic ]] && if ls ${NewRepo}/noarch/RPMS.classic | grep noarch |grep rpm  &> /dev/null;then
find ${NewRepo}/noarch/ -maxdepth 1 -name "base" -exec rm -fR {} \; &> /dev/null
echo -n "   > Создание noarch репозитория...";genbasedir --progress --create --topdir=${NewRepo} noarch classic &> /dev/null;echo " Выполнено.";else echo " Неудача.";echo "   ! Репозиторий noarch не найден.";fi
}




# Создаем репозиторий
function _Create ()
{
echo "";echo "=> Выполняется создание репозиториев.";echo ""
# Проверяем наличие указанного каталога для репозитория и папки источника. В случае отсутствия каталога для репозитория, пытаемся его создать. Иначе прекращаем работу скрипта.
NewRepo=`echo $NewRepo | sed 's/\/$//'`
Sourc=`echo $Sourc | sed 's/\/$//'`;[[ $Sourc == "" ]] && Sourc=/var/cache/apt/archives;mkdir $NewRepo &> /dev/null
[[ -d $NewRepo ]] || echo "   ! Невозможно найти либо создать каталог под репозиторий" || exit

# Создаем репозиторий для i586 архитектуры
echo -n "   > Создание i586 репозитория..."
if find $Sourc/ -name "*i586*.rpm" | grep i586 | grep rpm &> /dev/null;then mkdir -p ${NewRepo}/i586/RPMS.classic &> /dev/null
if [[ $Remove == 1 ]];then
find $Sourc/ -name "*i586*.rpm" -exec mv -f {} ${NewRepo}/i586/RPMS.classic \; &> /dev/null
find ${NewRepo}/i586/ -maxdepth 1 -name "base" -exec rm -fR {} \; &> /dev/null
genbasedir --progress --create --topdir=${NewRepo} i586 classic &> /dev/null;fi
if [[ $Remove != 1 ]];then
find $Sourc/ -name "*i586*.rpm" -exec cp -fR {} ${NewRepo}/i586/RPMS.classic \; &> /dev/null
find ${NewRepo}/i586/ -maxdepth 1 -name "base" -exec rm -fR {} \; &> /dev/null
genbasedir --progress --create --topdir=${NewRepo} i586 classic &> /dev/null;fi;echo " Выполнено.";else echo " Неудача.";echo "   ! Пакеты для архитектуры i586 не найдены в указанном источнике.";fi

# Создаем репозиторий для noarch архитектуры
echo -n "   > Создание noarch репозитория..."
if find $Sourc/ -name "*noarch*.rpm" | grep noarch | grep rpm &> /dev/null;then mkdir -p ${NewRepo}/noarch/RPMS.classic &> /dev/null
if [[ $Remove == 1 ]];then
find $Sourc/ -name "*noarch*.rpm" -exec mv -f {} ${NewRepo}/noarch/RPMS.classic \; &> /dev/null
find ${NewRepo}/noarch/ -maxdepth 1 -name "base" -exec rm -fR {} \; &> /dev/null
genbasedir --progress --create --topdir=${NewRepo} noarch classic &> /dev/null;fi
if [[ $Remove != 1 ]];then
find $Sourc/ -name "*noarch*.rpm" -exec cp -fR {} ${NewRepo}/noarch/RPMS.classic \; &> /dev/null
find ${NewRepo}/noarch/ -maxdepth 1 -name "base" -exec rm -fR {} \; &> /dev/null
genbasedir --progress --create --topdir=${NewRepo} noarch classic &> /dev/null;fi;echo " Выполнено.";else echo " Неудача.";echo "   ! Пакеты для архитектуры noarch не найдены в указанном источнике.";fi

# Проверяем факт создания репозитория(ев), в противном случае удаляем заданный каталог для новых репозиториев и завершаем работу скрипта.
find ${NewRepo} -name "*.rpm" | grep -E "i586|noarch" | grep rpm &> /dev/null || echo "   ! Не удалось создать репозиторий, т.к. в указанном источнике. Скрипт завершает работу." || rm -fR ${NewRepo} &> /dev/null || exit
}




function _Clean ()
{
echo ""; echo -n "   > Удаление информации о репозиториях..."
find /etc/apt/sources.list.d/ -name "A_create_repo*.list" -exec rm -f {} \; &> /dev/null && echo " Выполнено." && (echo -n "   > Обноляется список пакетов...";apt-get update &> /dev/null && echo " Выполнено." || echo " Неудача.") || echo " Неудача." || echo "   ! Информация о сгенерированый скриптом репозиториях не найдена."
}




# Применяем дополнительные возможности
function _Final ()
{
# Меняем разрешения, если задана такая опция
if [[ $UseALL == yes ]];then
echo -n "   > Установка прав доступа к репозиториям..."
[[ -e ${NewRepo}/i586/RPMS.classic ]] && if ls ${NewRepo}/i586/RPMS.classic | grep i586 |grep rpm &> /dev/null;then chmod -f 0777 ${NewRepo} &> /dev/null;chmod -f 0777 ${NewRepo}/i586 &> /dev/null;chmod -f 0777 ${NewRepo}/i586/base &> /dev/null;chmod -f 0777 ${NewRepo}/i586/RPMS.classic &> /dev/null
chmod -fR 0666 ${NewRepo}/i586/base/* &> /dev/null;chmod -fR 0666 ${NewRepo}/i586/RPMS.classic/* &> /dev/null;fi
[[ -e ${NewRepo}/noarch/RPMS.classic ]] && if ls ${NewRepo}/noarch/RPMS.classic | grep noarch |grep rpm &> /dev/null;then chmod -f 0777 ${NewRepo} &> /dev/null;chmod -f 0777 ${NewRepo}/noarch &> /dev/null;chmod -f 0777 ${NewRepo}/noarch/base &> /dev/null;chmod -f 0777 ${NewRepo}/noarch/RPMS.classic &> /dev/null
chmod -fR 0666 ${NewRepo}/noarch/base/* &> /dev/null;chmod -fR 0666 ${NewRepo}/noarch/RPMS.classic/* &> /dev/null;fi
echo " Выполнено."
fi

# Создаем скрипт установки репозитория
if [[ $UseNewScript == yes ]];then
echo -n "   > Создание скрипта установки..."
[[ -e ${NewRepo}/i586/RPMS.classic ]] && if ls ${NewRepo}/i586/RPMS.classic | grep i586 |grep rpm &> /dev/null;then
echo \#\!\/bin\/sh > ${NewRepo}/install-repo.sh
echo RepoFile\=\/etc\/apt\/sources\.list\.d\/A\_create\_repo\_\`date\ \+\%d\%m\%y\.\%H\%M\%S\`\.list >> ${NewRepo}/install-repo.sh
echo rep586\=\~\+ >> ${NewRepo}/install-repo.sh
echo rep586\=rpm\\ file\:\/\/\$\{rep586\} >> ${NewRepo}/install-repo.sh
echo rep586\=\$\{rep586\}\/\"\ i586\ classic\" >> ${NewRepo}/install-repo.sh
echo "echo "\$rep586\ \>\ \$RepoFile >> ${NewRepo}/install-repo.sh;fi
[[ -e ${NewRepo}/noarch/RPMS.classic ]] && if ls ${NewRepo}/noarch/RPMS.classic | grep noarch |grep rpm &> /dev/null;then
echo repNOAR\=\~\+ >> ${NewRepo}/install-repo.sh
echo repNOAR\=rpm\\ file\:\/\/\$\{repNOAR\} >> ${NewRepo}/install-repo.sh
echo repNOAR\=\$\{repNOAR\}\/\"\ noarch\ classic\" >> ${NewRepo}/install-repo.sh
echo "echo "\$repNOAR\ \>\>\ \$RepoFile >> ${NewRepo}/install-repo.sh;fi
echo unset\ RepoFile\;unset\ NewRepo >> ${NewRepo}/install-repo.sh  
[[ -f ${NewRepo}/install-repo.sh ]] && (echo apt\-get\ update >> ${NewRepo}/install-repo.sh;chmod 0777 ${NewRepo}/install-repo.sh &> /dev/null) && echo " Выполнено."
fi
}




if [[ $UID != "0" ]];then echo "Необходимо запускать скрипт с привелегиями пользователя root. либо установить на скрипт SUID-бит.";exit;fi

case $1 in
   -i) NewRepo=$2;_Instal;_Unset;exit;;
   -c) NewRepo=$2;Sourc=$3;_Autoinstalrpm;_Create;_Final;_Unset;exit;;
   -cr) Remove=1;NewRepo=$2;Sourc=$3;_Create;_Final;_Unset;exit;;
   -rc) Remove=1;NewRepo=$2;Sourc=$3;_Create;_Final;_Unset;exit;;
   -g) NewRepo=$2;_Autoinstalrpm;_Generate;_Final;_Unset;exit;;
   --clean) _Clean;_Unset;exit;;
   "") _Help;_Unset;exit;;
    *) _Help;_Unset;exit;;
esac
exit

Чтобы вы могли им воспользоваться, сохраните его в текстовый файл и сделайте исполняемым. Запустите скрипт без параметров чтобы прочитать инструкцию по его использованию.

Если так можно сказать, он еще находиться в бэта-тестировании, поэтому если я буду находить в нем какие-либо ошибки, то буду его исправлять и выкладывать исправленный вариант здесь.