Шлях да прасвятлення, альбо скрыпт для абнаўлення з выкарыстаннем dzen2

Jun 12, 2010 23:45


У чарговы раз падумалі з Аленай над пытаннем скрыпта для аўтаматызацыі абнаўлення сістэмы. У гэты раз пісалі на Ruby. Апроч гэтага для паведамлення карыстальніку што ідзе абнаўленне, а не проста сама сабою хуткасць інтэрнэта падае, выкарысталі dzen2. Гэта мацёрая штука для вываду паведамленняў у графічным асяроддзі з якіх-заўгодна скрыптоў ці каманадаў. Выглядае гэта як акенца, якое узнікае паверх іншых вокнаў і на якім выводзіцца тэкст, які ты задаеш. Апроч таго можна адпаведным чынам ствараць меню, мяняць колер тэксту і шрыфт тэксту, колер фону і, нават, выводзіць невялічкія лінейныя індыкатыра прагрэсу. Ніжэй малюнак, на якім паказана паведамленне аб памылцы на першым этапе абнаўлення.




Скрыпцік прызначаны для запуска з дапамогай Cron'у, альбо Anacron'у ад рута. Пасля запуску праводзіць абнаўленне ўстяляваных у сістэме пакетаў з запісам журналу працэсу у тэчку /var/log/Update/ і вывадам паведамленняў пра тое што ён усё яшчэ працуе у невялічкім чорным вакенцы ў верхнім правым куту экрана.

Для працы патрабуюцца Ruby і dzen2. Скрыпт разлічаны на выкарыстанне aptitude і apt-get, але змяніць тры каманды нецяжка, пасля чаго ён можа працаваць з іншымі мэнэджэрамі пакетаў. Такім чынам, вось ён скрыпт, як ёсць:

#!/usr/bin/ruby
#определяем текущую дату для формирования имени файла
time = Time.now
filename = time.strftime("%Y-%m-%d")

#Запускаем Дзэн і ствараем іменаваны канал да яго
begin
     dzen = IO.popen("dzen2 -p 5 -ta c -x 25 -w 400\n","r+")
rescue
     puts "Ошибка dzen2"
     exit(137)
end

#Працэдура вываду выніку выканання бягучага этапа
def res_out(num, result, dzen)
     error = "^fg(#ff0000)"
     case num
          when 1
               error += "Ошибка обновления базы пакетов"
               message = "База пакетов обновлена"
          when 2
               error += "Ошибка обновления"
               message = "Успешно обновились"
          when 3
               error += "Ошибка удаления старых версий"
               message = "Файлы старых версий удалены"
     end
     if result.include? "Result:0" then
          dzen.puts message
     else
          dzen.puts error
          exit(num)
     end
end

#создаем новый файл для чтения\записи или если он существует - переходим в конец файла

logfile = File.new("#{filename}.log","a+")

#выполнить команду update && upgrade и записать результат выполения в файл

#Абнаўляем базу дадзеных аб пакетах
dzen.puts "Обновляем базу данных пакетов"
result_update = `aptitude update 2>&1\; echo Result:$?`
#Пішам вынік ў файл і выводзім паведамленне
logfile.print result_update
res_out(1, result_update, dzen)

#Пампуем абнаўленні і абнаўляемся
dzen.puts "Начинаем скачивание файлов и обновление"
result_upgrade = `aptitude upgrade -y 2>&1\; echo Result:$?`
#Пішам вынік ў файл і выводзім паведамленне
logfile.print result_upgrade
res_out(2, result_upgrade, dzen)

#Выдаляем старыя версіі файлаў устаноўкі пакетаў
dzen.puts "Удаляем старые файлы установки"
result_clean = `apt-get autoclean 2>&1\; echo Result:$?`
#Пішам вынік ў файл і выводзім паведамленне
logfile.print result_clean
res_out(3, result_clean, dzen)

logfile.close
dzen.close_write

ruby, debian, linux

Previous post Next post
Up