Автор Тема: Скрипт для работы с локальным репозитарием  (Прочитано 5420 раз)

kostyalamer

  • Гость
Дорогие друзья, решил немного поучаствовать в полезном деле  и написал скрипт для создания локального репозитария , скачивания пакетов в него из кеш-а Apt-а, создания образа диска и записи всего этого безобразия в k3b.
Все сделано при помощи меню (Select) и я надеюсь будет понятно новичкам. В какой то мере , надеюсь сможет заменить AptOnCD. Версия соответственно начальная и beta, если есть желание потестируйте, критикуйте ,предлагайте разные полезные идеи , буду благодарен !
Есть еще вопрос, кто-нибудь пользовался apt-get autoclean, насколько он полезен и стоит ли его вставлять в скрипт?
 ;) Заранее приношу извинения за ламерский стиль кодинга,
Меню и структуру записанного диска прилагаю, а код можно посмотреть ниже:


#!/bin/sh
# RPM_On_Disk v0.1 beta kostyalamer 08/2009
#------------------------------
function proverka ()
{
if [ `rpm -qa | grep -c $1` -eq 0 ]; then echo '<--- установите пакет ' $1 ' !!! --->'; read ; exit 1 ;
fi
}
#------------------------------
function create_dir ()
{
mkdir -p ~/Repa_Local/local/i586/ 2>/dev/null
mkdir ~/Repa_Local/local/.disk 2>/dev/null
 
cd ~/Repa_Local/local/i586/
mkdir base RPMS.local SRPMS.local 2>/dev/null
}
#------------------------------
function pause ()
{
echo "



"
echo -e "\033[1m   Нажмите Enter !!!   \033[0m"
read bred

}
#------------------------------
function statistic ()
{
a=`ls $HOME/Repa_Local/local/i586/RPMS.local/ *.rpm 2>/dev/null | wc -l`
b=`ls $HOME/Repa_Local/local/i586/SRPMS.local/ *.rpm 2>/dev/null | wc -l`
c=`expr $a + $b - 2`
cd $HOME/Repa_Local/local/i586/
echo " В вашем репозитарии " $c " RPM "
echo -n " Занимаемый объем на винте: ";du -s -h
echo ""
}
#------------------------------
function genbase ()
{
rm -f $HOME/Repa_Local/local/i586/base/*;
a=`ls $HOME/Repa_Local/local/i586/RPMS.local/ *.rpm 2>/dev/null | wc -l`
b=`ls $HOME/Repa_Local/local/i586/SRPMS.local/ *.rpm 2>/dev/null | wc -l`
c=`expr $a + $b`
if [ `expr $c` -gt 2 ]; then
echo "Alt Repa `date +%d/%m/%y_%H:%M`" >~/Repa_Local/local/.disk/info
echo '
<--- работает genbasedir --->

'
genbasedir --progress --label="Repa `date +%d/%m/%y_%H:%M`" --origin="ALT Linux" --topdir=$HOME/Repa_Local/local/ i586 local

echo $'\a'
echo '
Репозитарий с пакетами успешно создан и находится
в папке /Repa_Local вашего домашнего каталога,теперь
вам осталось записать этот каталог на диск !

'
sleep 2
fi;

}
#------------------------------
function rpm_to_repa ()
{
clear
echo -e "\033[1m


--- Копируем пакеты, введите пароль root-а ---


\033[0m"
su -c 'if [ `ls /var/cache/apt/archives/*.rpm | wc -l` -eq 1 ]; then echo " в кэш-е Apt-а нет скачанных rpm-ов !!! "; pause; exit;
fi;
cp -v /var/cache/apt/archives/*.rpm $HOME/Repa_Local/local/i586/RPMS.local;
cp -v /var/cache/apt/archives/*.src.rpm $HOME/Repa_Local/local/i586/SRPMS.local';
rm -f $HOME/Repa_Local/local/i586/RPMS.local/*.src.rpm;
sleep 1
}
function menu ()
{
clear

statistic
echo ""
echo -e "\033[1m ----- Введите нужную цифру ! ----- \033[0m"
echo ""
echo "1) Копировать rpm-ы из кеша Apt-а."
echo "2) Редактировать репу при помощи mc."
echo "3) Записать репу на диск."
echo "4) Удалить все пакеты из репы."
echo "5) Удалить пакеты из кеша Apt-а."
echo "6) Справка."
echo "7) Выход."
}

# ---------- Программа  ----------
clear
echo " Подождите, комп. думает ! "
proverka "apt-utils"
 if [ $? -eq 1 ]; then
  exit
 fi
 create_dir;
 genbase;
 clear
statistic
echo ""
echo -e "\033[1m ----- Введите нужную цифру ! ----- \033[0m"

echo ""
select punkt in "Копировать rpm-ы из кеша Apt-а." "Редактировать репу при помощи mc." "Записать репу на диск." "Удалить все пакеты из репы." "Удалить пакеты из кеша Apt-а." "Справка." "Выход."
do
case $punkt in
 "Копировать rpm-ы из кеша Apt-а.")
   clear
   rpm_to_repa
   genbase
   menu
;;
 "Редактировать репу при помощи mc.")
   clear
   proverka "mc"
   if [ $? -eq 0 ]; then
    echo "Редактирование репозитария в mc !"
    echo "Можно удалить лишние пакеты или
добавить пакеты вручную из других
источников "
    echo ""
    echo "Выход из mc по F10 "
    pause
    mc -U $HOME/Repa_Local/local/i586/
    genbase
   else echo " Установите пакет mc ! "; pause
   fi
   menu
;;
 "Записать репу на диск.")
   clear
   proverka "mkisofs"
   if [ $? -eq 0 ]; then
    echo "Записываем образ диска."
    sleep 1
    mkisofs -r -v -J -l -o ~/tmp/repa.iso ~/Repa_Local/local
     proverka "k3b"
     if [ $? -eq 0 ]; then
       k3b ~/tmp/repa.iso 2>/dev/null;
       sleep 10
       clear
       echo "После записи удаляем iso-образ диска !!! ";
       pause
       rm ~/tmp/repa.iso
     else clear
     echo -e "\033[1m Установите пакет k3b или запишите
образ диска в другой программе выйдя из скрипта
образ: " ~ "/tmp/repa.iso \033[0m"
     pause
     fi
   else echo -e "\033[1m Установите пакет mkisofs ! \033[0m"; pause
   fi
   menu
;;
 "Удалить все пакеты из репы.")
   clear
   echo "Удалить все пакеты из репы."

   cd $HOME/Repa_Local/local/i586/
   rm -f RPMS.local/* SRPMS.local/* base/*
   
   sleep 1
   menu
;;
 "Удалить пакеты из кеша Apt-а.")
  clear
  echo -e "\033[1m Если вы действительно хотите удалить
все скачанные пакеты введите Y, если нет
просто нажмите на Enter ! \033[0m"
  echo ""
  read l
  if [ $l = "Y" -o $l = "y" ]; then 
  echo -e "\033[1m Для удаления пакетов введите пароль root ! \033[0m"
  su -c 'apt-get clean'
  fi
  menu
;;

 "Справка.")
   clear
   echo "                Справка:"
   echo ""
   echo "           Rpm On Disk v0.1 beta"
   echo ""
   echo '  Эта прога. предназначена для создания локального
репозитария из скачанных пакетов и записи его на диск
и является надстройкой над программой genbasedir.
   Вы можете редактировать репу и добавлять пакеты из
других источников при помощи mc (2-ой пункт меню ) и
записать репу на диск при помощи k3b ( либо взять
образ диска и записать его внешней программой при
отсутствии k3b ). О всех замеченных багах, а так же
пожеланиях по работе программы просьба писать на
kostyalamer@yandex.ru или в гостевую книгу моего сайта
http://kostyalamer.narod.ru , на сайте же планирую
поместить более подробное описание работы с программой.
   Благодарности: автору genbasedir - а ,
Drool-у за его help о том как создавать локальную репу,
Александру за его замечательный скрипт на ту же тему
(скриптом не пользовался но кое-что стибрил )
   Лицензия: ДЧХ - делай что хочешь.
   P.S. Spectrum forever !              '
 
   pause
   menu
;;
 "Выход.")
   break
;;
 *)
  echo " Ошибка выбора !"
  sleep 3
  menu
;;
esac
done

PS Хотел и tar.gz сюда привесить но почему-то не вышло.

kostyalamer

  • Гость
Скрипт  , упакованный в tar.gz и описание к нему (статью только начал, думаю закончить в выходные) лежат у меня на сайте http://kostyalamer.narod.ru/rpmondisk/rpmondisk.html. Его можно скачать, распаковать и запустить.  ;)
PS кто-нибудь apt-get autoclean - ом пользовался ?

Оффлайн smaharbA

  • Завсегдатай
  • *
  • Сообщений: 121
  • Здесь лежит М.С. Паниковский, человек без паспорта
    • Email
а Вы уверены в нахождении кэша в /var/cache/apt/archives/ ?
Я конечно далек от мысли...(с)

kostyalamer

  • Гость
А Вы нет ? У меня сейчас стоят Alt-ы на разных компах 4,0 4,1 и 5,0beta, про более ранние версии ничего сказать не могу  ;)

Оффлайн Nafanja

  • Начинающий
  • *
  • Сообщений: 11
Дорогие друзья, решил немного поучаствовать в полезном деле  и написал скрипт для создания локального репозитария...
Посмотрите еще на apt-proxy, может быть для ваших нужд это больше подойдет?
Does your sysadmins have the answer to life, the universe and everything?
OK, maybe not, but they do know how to fix a server!

greyzy

  • Гость
насколько он полезен и стоит ли его вставлять в скрипт?
В линуксе пару недель, как раз задумал сделать локальный репозиторий, обещаю запустить скрипт, если расскажете как это делать :) , так понимаю это текстовый файл, в который копируется текст скрипта? чего делаем потом, куда его кладем, откуда и как запускаем?

kostyalamer

  • Гость
Ссылка была выше но приведу еще раз :http://kostyalamer.narod.ru/rpmondisk/rpmondisk.html
Проще всего скачать архив с моего сайта, распаковать и запустить кликом по файлу в mc, впрочем инструкция то же на сайте :)

greyzy

  • Гость
на виртуалке запустил, работает вроде, но на реальной все-таки сделал руками как тут www.altlinux.org/APT_в_ALT_Linux/CreateRepository, чтобы представлять, чего вообще происходит :)

kostyalamer

  • Гость
Наткнулся на новые "грабли". теперь в бранче p5. 5.1 и Сизифе нет пакета mkisofs. Соответственно пункт о создании iso и записи его на диск пока работать не будет. Временно создавайте структуру диска пальцами и записывайте на диск используя рисунок структуры диска в этой теме ( каталог ./disk с файлом info можете не создавать это не смертельно )
Если у кого есть мысли чем заменить отсутствующий пакет делитесь  :)

Оффлайн swordrex

  • Завсегдатай
  • *
  • Сообщений: 403
    • Pínus
genisoimage ??? ?
there is no truth outside of our own awareness

kostyalamer

  • Гость
Спасибо, посмотрел вроде похоже. В ближайшее время попробую прикосячить  ;)

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 253
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
rpm -qf $(whereis mkisofs)
genisoimage-1.1.9.832-alt4

kostyalamer

  • Гость
Спасибо !

Оффлайн swordrex

  • Завсегдатай
  • *
  • Сообщений: 403
    • Pínus
Прога по сабжу - ценная!
Когда её в официальные репы добавят?

это про что?  ???
если про genisoimage - так он и так в репах :)
there is no truth outside of our own awareness

kostyalamer

  • Гость
Товарищ, просто немного не врубился в суть проблемы, дело в том что проверку на установленные дополнительные пакеты я запихал внутрь скрипта, поэтому смысла делать из него пакет rpm не вижу.