sergtat 05.06.2011 05:12

Gentoo LinuxАвтоматизация обновления мира

Написал такой вот скрипт:


 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/sh
# myupdate-world
# Скрипт обновления мира по утрам

LOG="/var/log/myupdate-world.log"
# log-файл
date >> $LOG
MIRROR=$(sed -n 's/^GENTOO_MIRRORS="\(.*\) .*/\1/p' /etc/make.conf)
# Задаем зеркало обновления
while ! $(wget --spider $MIRROR/snapshots/portage-$(date -d yesterday +%Y%m%d).tar.bz2.md5sum &>/dev/null); do sleep 300; done
# Проверяем наличие обновления, если не найдено, ждем 5 минут
EIX_CACHEFILE=/var/cache/eix.remote eix-remote update
# делаем снимок дерева удаленных layman-overlays
eix-sync -Wq
# синхронизируем наше дерево PORTAGE
echo "============ eix-diff ==============" >> $LOG
eix-diff /var/cache/eix.previous >> $LOG
# смотрим изменения в дереве
echo "============ emerge world =============" >> $LOG
emerge @world -pvquDN >> $LOG
emerge @world -uDNq
# смотрим что обновляем и зупускаем обновление мира
echo "============ emerge --depclean =============" >> $LOG
emerge --depclean -pq >> $LOG
emerge --depclean -q
# удаляем лишние пакеты
echo "=========== revdep-rebuild ===============" >> $LOG
revdep-rebuild -p >> $LOG
revdep-rebuild
# проверяем зависимости
echo "============ glsa-chech =============" >> $LOG
glsa-check --test affected >> $LOG
glsa-check --fix affected
# проверяем пакеты на безопасность
echo "========= eix-test-obsolete =========" >> $LOG
eix-test-obsolete -cd | grep -v "^No" >> $LOG
# проверяем корректность записей в /etc/portage/*
echo "========= perl-cleaner =========" >> $LOG
perl-cleaner --all -- -q
echo "============ End ============= " >> $LOG
export DISPLAY=":0.0"
export XAUTHORITY="/var/run/slim.auth"
# у меня slim, как в [gkx]dm не знаю, можно еще проверять $HOME/.Xauthority
/sbin/shutdown -h +5 "Achtung!" "Shutdown system after 5m\nFor canceled enter\n'sudo shutdown -c'" &
# выводим сообщение через zenity, что комьютер выключится через 5 минут, если нужно отменяем
echo "============ Halt ============= " >> $LOG
if ! $(/usr/bin/zenity --question --text="System shutdown after 5 minutes.\nNow $(date)."); then `sudo /sbin/shutdown -c`; fi
# если не отменили выключаем



Далее вставляем в cron от root:
1
2
# crontab -e
0 6 * * * /usr/local/sbin/myupdate-world


Включаем в BIOS авоматическое включение на 5.55 ежедневно.

Теперь можно не беспокоиться об обновлении уходя на работу. Осталось посмотреть вечером лог и поправить, если что-то пошло не так (маскировки, конфликты), что бывает редко. Это занимает времени совсем немного (можно раз в неделю). Таким образом избегаем упреков домашних, бережем нервы, спасаем семью.

P.S. строчка
1
# EIX_CACHEFILE=/var/cache/eix.remote eix-remote update


сохраняет снимок дерева layman-overlays в /var/cache/eix.remote .
Теперь делаем алиас:
1
# alias eix-cache='EIX_CACHEFILE=/var/cache/eix.remote eix'


Смотрим наличие пакетов в оверлеях по команде eix-cache.


Тэги: Gentoo скрипты
+ 1 -
Похожие Поделиться

snowemo 05.06.2011 09:00 #
Мне кажется, что автоматическое обновление системы — это зло. Да и скрипт никогда не разрулит etc-update.
sergtat 05.06.2011 09:09 #
etc-update, dispatch-conf разумеется вручную.
shisoid 05.06.2011 13:16 #
авто-обновы - зло!
а чем домашним мешает обновление? о_О
kstep 06.06.2011 13:06 #
Крадёт время. Жена/дети ведь хотят мужа/папу видеть, а не его спину, когда он пересобирает мир («Сейчас-сейчас, милая, мир обновлю...»).
cppmm 06.06.2011 16:07 #
У меня жена даже не знает, что системы системы обновлять надо и разумеется, не догадывается, что когда я сижу за компом и читаю книжку или смотрю фильм(или добавить что-нибудь от себя) на самом деле я обновляю мир.
Anrock 06.06.2011 17:37 #
>на самом деле я обновляю мир.
Все вмешательство пользователя же заключается в eix-sync && emerge -avuDN world && etc-update, нэ?
Или вы часами втыкаете в выхлоп компилятора?
cppmm 06.06.2011 18:29 #
Все вмешательство пользователя же заключается в eix-sync && emerge -avuDN world && etc-update, нэ?

Совершенно верно. Именно об этом я и говорю.
Anrock 06.06.2011 19:22 #
Не туда ответил, извините >_>
В прочем неважно.
kstep 06.06.2011 13:07 #
Зло. Но не всегда. Если скрипт, например, корректно будет откатывать провалившиеся изменения, то может и нормально.
shisoid 07.06.2011 00:40 #
напомнить историю про glibc-2.13 + prelink?
то-то же
автомат далеко не везде хорош
kstep 07.06.2011 01:11 #
Да я и не говорю что всегда и везде хорош. Но если есть возможность автоматизировать, скажем, 90% действий, то почему бы и нет?
thebeetlebum 05.06.2011 13:49 #
Из буханки хлеба можно сделать троллейбус. Но зачем? Тем более что не факт, что такой троллейбус который вы сделали всегда будет ездить. Ну не собралось у вас что-то и что, потом бегать смотреть логи и пытаться понять как разрешить? Вручную все это проще.
shisoid 07.06.2011 00:42 #
особенно забавно читать логи неудавшейся сборки, когда оная происходит в tmpfs :3
thebeetlebum 07.06.2011 12:07 #
При автоматизации скорость уже не так важна. Тем более что не понятно сколько в целом будет оно собираться. Вдруг там какой-то libreoffice. Можно и на диске собирать. Только проще будет анализировать. Но всеравно костыль.
kstep 07.06.2011 13:52 #
Либреофис самому собирать... Ну, даж не знаю. Я даже когда на фрюхе сидел забил на ручную сборку OOo и ставил его с бинарного пакета.
Shtsh 07.06.2011 13:11 #
Ну, можно же сделать tmpfs в 6 гигов 8 гигов :3

Хотя, у меня максимум 4 на компах, а на сервере нефиг
shisoid 07.06.2011 22:29 #
и?
после сборки оставлять примонтированной?
no way!
thebeetlebum 07.06.2011 22:55 #
Просто Shtsh забыл упомянуть о обязательном наличии UPS)
Shtsh 08.06.2011 11:09 #
Естественно, а также о 24 Gb RAM, последнем i7 и десятом рейде на SLC SSD дисках.

При такой конфигурации 6 гигов tmpfs будет непряжно :)