Собираем пакет yandex-disk-indicatorhttps://github.com/slytomcat/yandex-disk-indicatorПодразумевается, что git и сборка в hasher настроены.
1. Если есть git, скачиваем исходники:
$ git clone https://github.com/slytomcat/yandex-disk-indicator
2. Заходим в каталог и определяем последний тег:
$ cd yandex-disk-indicator
$ git describe --abbrev=0 --tags
1.8.16
Показывается последний тег 1.8.16 в бранче по умолчанию (master)
3. Очищаем исходники, чтобы сделать новый бранч для спека и правил .gear:
$ git rm -rf *
$ git commit -m 'Make empty branch'
4. Ищем, не собирал ли кто RPM для этого пакета. Заходим на
http://pkgs.org и ищем yandex-disk-indicator.
О! Найдено для ROSA, берём и помним, что в спеке должны поблагодарить за сборку. Нажимаем на имя пакета yandex-disk-indicator-1.8.16-1-rosa2014.1.noarch.rpm, затем на дискету в разделе «Download» и скачиваем yandex-disk-indicator-1.8.16-1.src.rpm:
$ wget http://mirror.rosalab.ru/rosa/rosa2014.1/repository/SRPMS/contrib/updates/yandex-disk-indicator-1.8.16-1.src.rpm
5. «Потрошим» src.rpm и убираем последний коммит:
$ gear-srpmimport --branch=master --no-unpack yandex-disk-indicator-1.8.16-1.src.rpm
$ git reset HEAD^
$ ls -a
. .. .gear .git yandex-disk-indicator-1.8.16-1.src.rpm yandex-disk-indicator-1.8.16.tar yandex-disk-indicator.spec
Очищаем исходники и src.rpm:
$ rm -rf *.src.rpm *.tar
Имеем спек и .gear/rules:
$ git status -s
?? .gear/
?? yandex-disk-indicator.spec
6. Проверяем .gear/rules. Собирать будем как взрослые, из тега, а не архива:
$ cat .gear/rules
gzip: *.tar
Плохо. Незачем дополнительно схимать исходники, ессли они и так будут сжаты в rpm.
Меняем на:
tar: @version@:.
(упаковать содержимое корневого каталога по тегу, совпадающему с версией в spec-файле)
7. Правим yandex-disk-indicator.spec:
а) проверяем номер версии. Он совпадает с последним тегом.
б) меняем Release на принятый в ALT Linux: alt1
в) проверяем Group на наличие в ALT Linux:
$ grep Communications /usr/lib/rpm/GROUPS
Communications
Есть такая группа.
г) правим Source0 на %name-%version.tar
д) проверяем зависимости и адаптируем имена для ALT Linux:
Requires: typelib(AppIndicator3)
Requires: python3-module-pyinotify
е) наводим красоту: убираем фигурные скобки { и } и %{_datadir}/applications/* меняем на %_desktopdir/*
ж) добавляем %changelog. Я это делаю в vim по \ac (должен быть установлен пакет vim-plugin-spec_alt-ftplugin):
%changelog
* Mon Jul 25 2016 Andrey Cherepanov <cas@altlinux.org> 1.8.16-alt1
- Initial build in Sisyphus (thanks ROSA for the spec)
8. Обновляем список тегов, используемых gear для сборки:
$ gear-update-tag -a
9. Коммитим всю красоту:
$ git add .
(если не хочется править в vim, то можете прописать mcedit или любой другой редактор):
$ EDITOR=mcedit gear-commit
(выход в mcedit по F10)
10. Собираем в hasher:
gear-hsh $TMP -v 2>&1 | tee $TMPDIR/build-$(date +%y%m%d-%H:%M).log
Журнал сборки можно посмотреть потом в $TMPDIR/build-<дата и время>.log
11. Правим баги:
11.1 Кривой путь
+ chmod 644 '/usr/src/tmp/yandex-disk-indicator-buildroot/usr/share/applications/*'
chmod: cannot access '/usr/src/tmp/yandex-disk-indicator-buildroot/usr/share/applications/*': No such file or directory
Для правильного копирования надо создать %buildroot:
перед cp -r ... добавляем
mkdir -p %buildroot
11.2 Проверяем анметы (неразрешаемые зависимости):
$ cd $TMPDIR/aptbox
$ ./apt-cache unmet
Пусто - хорошо. Сборочница сама убрала ненужное.
возвращаемся назад:
$ cd -
12. Добавляем правила gear/remotes для отслеживания новых версий:
$ git remote rename origin upstream
$ gear-remotes-save
$ git add .
13. Обновляем коммит, пушим и отправляем его на сборочницу:
$ EDITOR=mcedit gear-commit -a --amend --date="$(date -R)"