Обновление пакетов в РОСЕ
Репозитории РОСЫ содержат тысячи различных пакетов, которые необходимо обновлять по мере выхода новых версий соответствующих программ. Несмотря на различные средства автоматизации, для обновления многих пакетов требуется участие человека.
Оценить "свежесть" пакетной базы разных дистрибутивов можно, например, на сайте https://repology.org. Там же можно для каждого пакета определить самую последнюю версию и попробовать собрать ее на ABF.
Самый простой сценарий обновления заданного пакета описан в блоге "Точка РОСЫ". Однако он рассчитан на людей, которые не знакомы даже с Git и только могут кликать различные иконки в веб-браузере. От студентов, проходящих у нас практику, мы ожидаем несколько большего и даем им более сложные пакеты, для обновления которых могут потребоваться более серьезные усилия.
Если обновление по приведенной выше инструкции не проходит, то необходимо склонировать себе проект в машину с РОСОЙ:
$ abf get <your_abf_login>/<project_name> -b rosa2019.1
Переходим в директорию <project_name>, кладем в нее архив с исходным кодом новой версии и изменяем внутри файла <project_name>.spec значение тэга Version (если еще не сделали это в веб-интерфейсе).
Теперь получившийся пакет надо собрать. Для этого сначала надо установить пакеты, которые требуются для его сборки (прописаны в BuildRequires). Для этого внутри директории <project_name> выполняем команду:
$ urpmi <project_name>.spec
И запускаем саму сборку с помощью rpmbuild:
$ rpmbuild -bb <project_name>.spec
если повезет и все соберется сразу, то в этой же директории даем команду отправить все на ABF:
$ abf put -m «Updated to a new version»
После чего идем в веб-интерфейс на страничку проекта в своем репозитории и делаем Pull Request в соответствующий проект группы import. Не забывайте выбирать ветку «rosa2019.1»!
Также не забываем проверять работоспособность результата — для этого необходимо установить собранные пакеты в систему и убедиться, что они работают. Если вы собрали библиотеку/модуль, вам нужно проверить приложение, его использующее. Определить список всех пакетов, использующих данный, можно с помощью команды
$ urpmq --whatrequires <package_name>
Если есть сомнения в работоспособности пакета или непонятно, как его проверить, то все равно шлите Pull Request. Только отдельно сообщите нам, что функционал новой версии проверить не удалось.
Если в процессе сборки что-то пошло не так, то надо смотреть на ошибки — если идет ругань на то, что какие-то файлы не найдены (или наоборот, найдены неупакованные файлы), то надо править секцию %files в spec-файле. Могут быть жалобы на то, что не хватает каких-то программ для сборки; в этом случае надо постараться понять - каких именно, доустановить их в систему и прописать соответствующее поле BuildRequiers в spec-файле.
В целом, ошибки могут быть самые разные, и далеко не со всеми из них можно быстро разобраться. Поэтому если за разумное время пакет собрать не удалось, лучше сообщить о встреченной проблеме разработчикам РОСЫ и перейти к следующему пакету. В качестве результатов работы нам важны как Pull Request'ы на обновление пакетов, которые обновились успешно, так и перечень пакетов, которые собрать не удалось, с описанием ошибок сборки. В последнем случае можно просто прислать журнал сборки для каждого пакета либо попробовать собрать пакет в своем персональном репозитории на ABF и дать нам ссылку на сборку.
Поиск новых версий
Немаловажный аспект - определение того, какая версия программы является последней. Безусловно, можно просто обратиться к сайту разработчика, однако могут возникнуть нюансы:
- в пакете может быть указан неверный URL сайта разработчика (хоть мы и призываем поддерживать ссылки в актуальном состоянии, они все-таки иногда протухают
- самые свежие версии могут иметь проблемы со сборкой либо функционалом
В подобных случаях полезно посмотреть на версию этой же программы, собранной в других дистрибутивах. Для этого можно воспользоваться нашей утилитой mib-report (необходимо в РОСЕ установить соответствующий пакет и запустить утилиту) либо сервисами наподобие Pkgs.org или Repology.