FreeBSD, порты и portsnap

Собственно началось все давно, но как-то так руки не доходили поправить ситуацию. А что же нужно поправлять: есть порты, есть их обновление на кроне, есть даже отчеты на мыльник, которые приходят об обновленных портах, но достало все идти и ставить руками. Может способ уже и придумали какой, только вот я о нем не знаю 🙂 а потому было принято решение ваять скрипт.

Вот с чего я начал:

[cc lang=»bash»]

#!/usr/local/bin/bash

# Это массив портов, которые мы бум обновлять

ports=(«shells/bash» «misc/mc» «www/apache22″)

portsnap=»/usr/sbin/portsnap »

log()
{
date=date "+%d-%m-%Y %H:%M:%S"
echo «[${date}] ${1}» >> ${logf}
echo «[${date}] ${1}»
}

# ===============================
# Исполняемая часть
# ===============================

log «Началось обновление портов»
${portsnap} fetch update
log «Завершено обновление портов»

for port in ${ports[@]} ; do
log «Обновление порта ${port}»
cd /usr/ports/${port}
make && make deinstall && make install clean
log «Завершено»
done

[/cc]

Но! Это все равно немного не то, надо ж и перезапускать то, что надо перезапускать 🙂

немного думаем и добавляем еще один массив и цикл:

[cc lang=»bash»]

restart=(«» «» «apache22 restart»)

for scr in ${restart[@]} ; do
if [ «x${scr}» != «x» ] ; then
log «Перезапуск демона ${scr}»
/usr/local/etc/rc.d/${scr} restart
log «Завершено»
fi
done
[/cc]

Вот собственно и все 🙂 результат мы получили вот такой:

[cc lang=»bash»]

#!/usr/local/bin/bash

ports=(«shells/bash» «misc/mc» «www/apache22»)
restart=(«» «» «apache22″)

portsnap=»/usr/sbin/portsnap »
logf=»/var/log/ports-upgrade.log»

# ===============================
# Исполняемая часть
# ===============================

log()
{
date=date "+%d-%m-%Y %H:%M:%S"
echo «[${date}] ${1}» >> ${logf}
echo «[${date}] ${1}»
}

log «Началось обновление портов»
${portsnap} fetch update
log «Завершено»

for port in ${ports[@]} ; do
log «Обновление порта ${port}»
cd /usr/ports/${port}
make && make deinstall && make install clean
log «Завершено»
done

for scr in ${restart[@]} ; do
if [ «x${scr}» != «x» ] ; then
log «Перезапуск демона ${scr}»
/usr/local/etc/rc.d/${scr} restart
log «Завершено»
fi
done
[/cc]

Все работает, исправно обновляет нужные порты, а вот так выглядит лог:

[31-07-2010 10:39:11] Началось обновление портов
[31-07-2010 10:39:11] Завершено
[31-07-2010 10:39:11] Обновление порта shells/bash
[31-07-2010 10:39:57] Завершено
[31-07-2010 10:39:57] Обновление порта misc/mc
[31-07-2010 10:41:07] Завершено
[31-07-2010 10:41:07] Обновление порта www/apache22
[31-07-2010 10:44:51] Завершено
[31-07-2010 10:44:51] Перезапуск демона apache22

Помогла заметка - поделись с другом:
  1. Комментов пока нет

  1. Трэкбэков пока нет.

Оставьте эти два поля как есть:

 
Яндекс.Метрика