Дорогие друзья, решил немного поучаствовать в полезном деле и написал скрипт для создания локального репозитария , скачивания пакетов в него из кеш-а 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 сюда привесить но почему-то не вышло.