[Solved] Запуск скрипта при обновлении пакета

Тут вопросец назрел. К *.install отсылать не надо, редактировать каждый раз его довольно печально.
В общем, идея. Есть скриптец, который обновляет дровишки из аура. Нужно, чтобы при обновлении ядра этот скрипт запускался. Ну или при обновлении ядра автоматически тянулись эти пакеты. Нет, ну можно конечно вручную собирать ядро и тогда дописать в секцию "post_upgrade" запуск скрипта, но это по понятным причинам неудобно. Как бы это так все оптимизировать-автоматизировать?
Есть мысля, что можно как то к mkinitcpio прицепиться, который запускается после каждого обновления, но как - я не знаю. Ман по пакману покурил, вроде ничего похожего не нашел, в йогурте как будто бы тоже
PGP 0x31361F01
arcanisrepo
Курить man mkinitcpio, искать по слову HOOKS.
Подсказка: есть возможность сделать свой хук, выполняющийся на этапе сборки.
Natrio
Курить man mkinitcpio, искать по слову HOOKS.
Подсказка: есть возможность сделать свой хук, выполняющийся на этапе сборки.
ага, спасибо. Действительно то что нужно. Есть только одно "но". Если просто запустить mkinitcpio -p linux, то все работает как надо. Если же в процессе обновления ядра, то выползет ошибка - нельзя будет установить пакеты, если уже запущена (а она есно запущена) копия пакмена. Посему еще один идиотский вопрос - как это ограничение обойти?) Указание альтернативного лог-файла не помогает.
PGP 0x31361F01
arcanisrepo
Да, проблема.
В принципе, можно сделать самофоркающийся скрипт, который будет активироваться из хука, ждать завершения пакмана и только потом делать своё чёрное дело.
А в зависимости к ядру эти дрова никак не получится прописать?
lampslave
А в зависимости к ядру эти дрова никак не получится прописать?
Ядро репозиторное, оно от них не зависит.

Речь идёт о сборке, а не установке пакетов.
Я понимаю, что репозиторное. Но может быть есть какой-то обработчик, который позволяет сопоставить заданному пакету дополнительную зависимость? Смотрит же pacman на список игнорированных пакетов, а ведь тут почти то же самое, только в обратном направлении.

А в конце концов можно просто алиас сделать и не мучиться:
alias upgrade="pacman -Syu дрова"
lampslave
Я понимаю, что репозиторное. Но может быть есть какой-то обработчик, который позволяет сопоставить заданному пакету дополнительную зависимость? Смотрит же pacman на список игнорированных пакетов, а ведь тут почти то же самое, только в обратном направлении.
фишка в том, что эти дрова либо вообще не обновляются (rts5229), либо обновляются ранее ядра (broadcom-wl, nvidia-bumblebee).
Natrio
Да, проблема.
В принципе, можно сделать самофоркающийся скрипт, который будет активироваться из хука, ждать завершения пакмана и только потом делать своё чёрное дело.
ну это мне и представлялось решением. Просто думал, мб как то можно, кхм, погуманнее :)
PGP 0x31361F01
arcanisrepo
ну я в общем то забил на эту проблему. Впрочем, немного по другой причине - когда выполняется генерация initrd отсутствует возможность нормального редактирования pkgbuild'а (совершаемые действия не показываются на экране, а какой нить нано и вовсе не покажется). Оставлю, как я делал, вдруг кому понадобится

1. Создаем собсна хук:
# touch /usr/lib/initcpio/install/drvupd
и пишем туда примерно следующее
#!/bin/bash
build() {
  yaourt -S package1 package2 ... --dbpath /var/lib/pacman/drv_upd --logfile /var/lib/pacman/drv_upd/drv_upd.log
}
help() {
  cat <<HELPEOF
  This hook updates some drivers from AUR when kernel is updated
HELPEOF
}
2. Создаем папочку с содержимым:
# mkdir /var/lib/pacman/drv_upd
# cd /var/lib/pacman/drv_upd
# ln -s ../local
# ln -s ../sync
Тут немного поясню. При запуске пакман проверяет наличие файла db.lck, мы его отправляем (флаг --dbpath) смотреть этот файл в другой директории. Заодно подсовываем ему свежую БД пакетов и список уже установленных пакетов в системе (иначе потянет все зависимости, что довольно больно). Сюда же будем писать и лог, дабы не засирать основной лог файл.
3. Добавляем в файл /etc/mkinitcpio.conf в строку хуки наш хук drvupd. Я добавлял в самом начале.
4. Редактируем файл /etc/mkinitcpio.d/linux.present. Ищем строку с fallback_options, дописываем туда -S drvupd (чтобы 2 раза наш хук не запускался, ибо оно не нужно). Т.е. должно получиться примерно следующее:
# cat /etc/mkinitcpio.d/linux.preset                                             3:16, 13-02-04
# mkinitcpio preset file for the 'linux' package
ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux"
PRESETS=('default' 'fallback')
#default_config="/etc/mkinitcpio.conf"
default_image="/boot/initramfs-linux.img"
#default_options=""
#fallback_config="/etc/mkinitcpio.conf"
fallback_image="/boot/initramfs-linux-fallback.img"
fallback_options="-S autodetect -S drvupd"

Как то так. Костыльно чуть более, чем полностью, но как будто бы работает нормально, багов обнаружено не было. "Решено".
PGP 0x31361F01
arcanisrepo
 
Зарегистрироваться или войдите чтобы оставить сообщение.