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