Привет, Голос!
Сегодня у меня был интересный опыт по сборке ПО и обновлению его в AUR (Archlinux). И я решил написать инструкцию, как отсылать собственные пакеты в AUR, а также как вообще с ними работать.
С одной стороны, мне надоела "стандартная" версия телеграма, где "из коробки" снабжается какой-то неудачный шрифт, а сообщения отображаются урезанные по горизонтали (не на всю ширину окна). Waste of space and it looks really bad!
Вначале у меня был просто посыл собрать recent telegram (2.5.1) на основе обновлённого pkgbuild файла, но потом я решил, что если у меня получится, то надо бы это и в AUR отправить!
Проведу вас вктарце по процессу редактирования пакета, а также расскажу, как стать коммитером и обновить пакет в репозиториях AUR, тем самым вы поможите всему сообществу!
Для тех, кто в танках...
Кто не знает, что такое AUR или PKGBUILD, но дочитал досюда...
- AUR - это пользовательские репозитории в ArchLinux, куда люди выкладывают готовые "рецепты" по сборке определённых программ из исходного кода (или по адаптации готовых бинарников, такое тоже бывает).
- PKGBUILD - это основной файл с инструкциями сборки, которому следует ОС при выполнении команды сборки пакета "makepkg".
- Здесь я не буду затрагивать написание PKGBUILD с нуля - вместо этого я просто объединю рабочий PKGBUILD с другим, нужным мне, но устаревшем и нерабочим PKGBUILD.
- Любой зарегистрированный на сайте Archlinux может добавлять свои AUR-пакеты, а также "усыновлять" брошенные другими пакеты.
- Для следования инструкциям и пониманию всего процесса, вам желательны базовые знания по следующим пунктам: работа с файловой системой, сетью, git, ssh-ключами, будет также полезно если вы уже собирали ПО из исходного кода и/или были package maintainer'ом в каком-то другом дистрибутиве.
Готовы испачкать руки? :) Приступаем прямо сейчас!
Шаг 1. Найдите PKGBUILD к пакету, который захотите обновить
Для меня, как уже рассказал выше, это будет телеграм. Итак, есть два интересных пакета:
- https://aur.archlinux.org/packages/tdesktop-x64/ - текущая версия телеграма. Собирается из исходников без ошибок, но имеет стандартные шрифты и ограниченную ширину текстового поля, что меня не устраивает.
- https://aur.archlinux.org/packages/telegram-desktop-wide/ - классная (на всю ширину и со своими шрифтами) версия телеграма, но устаревшая - 2.2.0 (сейчас уже по этому адресу мною обновлённая версия, но 30 минут назад была другая).
Мы будем делать некий гибрид из этих двух пакетов. Важно отметить, что для успешного продолжения желательно, чтобы у вас на входе была хотя бы какая-то версия ПО (PKGBUILD'а), которая компилируется, иначе придётся действовать наобум. Это не страшно для маленьких программ, но total nightmare для больших проектов, как например телеграм.
В идеале, чтобы не ждать, пока вас сделают мэйнтейнером, нужно найти пакет, который требует внимания ("усыновления"). Зайдите в ваш аккаунт на сайте ArchLinux и поищите пакет, у которого справа в Package Actions будет кнопка "Adopt Package":
Кликните на эту кнопку и давайте продолжим.
Шаг 2. Скачайте себе репозиторий AUR-скрипта
Я "усныловил" для себя пакет telegram-desktop-wide, который был помечен как "old version", т.е. устаревший. Сразу после этого для вас появится на странице пакета подобного вида ссылка:
ssh://[email protected]/telegram-desktop-wide.git (click to copy)
Однако, вы не сможете склонировать репозиторий по данному адресу, если ещё не добавили свой ключ в ваш аккаунт на странице Archlinux. Сделать это можно в самом конце вот тут: https://aur.archlinux.org/account/ВАШНИК/edit/ (подставьте ваш ник вместо ВАШНИК!). Внизу вставьте собственный SSH-ключ, подтвердите это действие паролем от учётки и нажмите "Update". Готово.
Теперь мы можем клонировать себе "усыновлённый" пакет. Сделайте это именно через SSH ссылку, тогда вам не придётся ничего дополнительно настраивать для гита, что удобно!
git clone ssh://[email protected]/telegram-desktop-wide.git
Второй пакет нам нужен только для того, чтобы подсмотреть в нём некоторые нюансы, поэтому не обязательно качать весь его репозиторий. Можно просто открыть PKGBUILD в браузере (кнопка View PKGBUILD, когда вы на AUR-странице нужного пакета), например, вот актуальная рабочая версия обычного "текущего" 2.5.1-го телеграма: https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=tdesktop-x64
Шаг 3. Делаем Version Bump
Итак, всё что нужно, это сделать "version bump", а затем попытаться собрать ПО и посмотреть, есть ли баги при сборке (и исправить их, если есть).
Или, иначе говоря, "подтягиваем" версию в устаревшем пакете до текущей. Для этого:
3.1. Открываем любым редактором файл PKGBUILD в склонированной папке "telegram-desktop-wide".
Я не буду цитировать тут целиком файлы PKGBUILD - вы при желании сможете их открыть и сами посмотреть, что там и как. Но вот строчки, которые вам надо исправить:
- версия пакета - изменил строку pkgver на актуальную:
pkgver=2.5.1
- массив sha512sums - у меня там осталось 2 файла для исправления "полной ширины" и "сборки qt" - я их не трогал, но версия файла с исходным кодом поменялась, поэтому 1 из 3 переменных внутри массива sha512sums нужно обновить. А если конкретно - первую переменную. Новую контрольную сумму получаем, скачав .tar.gz телеграма версии 2.5.1. с гитхаба и выполнив команду:
sha512sum tdesktop-2.5.1-full.tar.gz
. Итоговую длинную контрольную сумму вставляем вместо первого числа в кавычках. - следующий шаг я нашёл не сразу. Вначале сборка у меня проваливалась - так что я открыл тот самый PKGBUILD из успешно-собираемого 2.5.1 (tdesktop-x64) и посмотрел, что там отличается от моего файла. Сразу приметилась функция prepare, а точней, в ней были такие строчки:
cd cmake
echo "target_link_libraries(external_webrtc INTERFACE jpeg)" | tee -a external/webrtc/CMakeLists.txt
Моя ошибка при сборке была как-раз что-то про libjpeg. Так что, я подумал, ВОТ ОНО! Не долго думая, я скопировал эти строки в свой PKGBUILD. Функции build() и package() я не трогал, остальное, - тоже.
Сохраняем файл. Теперь надо проверить, что всё работает, собрав, установив и протестировав телеграм. Делаем это, находясь в папке репозитория telegram-desktop-wide:
makepkg
Да, вот так просто. Без всяких аргументов и условий. =) Налейте себе кофе, сборка займёт несколько минут, в зависимости от мощности вашего железа.
После сборки, если всё прошло успешно, установите себе свежесобранный пакет:
sudo pacman -U ./telegram-desktop-wide-2.5.1-1-x86_64.pkg.tar.zst
Теперь запустите телеграм:
telegram-desktop
Проверьте, что всё работает. Если всё хорошо, можем переходить к финальному, не менее важному этапу - коммит нашей классной работы в репозиторий Arch Linux User Repository, AUR!
Шаг 4. Коммитим изменения в AUR
Для начала, надо сообщить скрытому инфо-файлу ".SRCINFO" о том, что мы успешно обновили пакет. Откройте его любимым текстовым редактором, и исправьте там несколько строк:
- строку pkgver - точно как в прошлый раз - я сделал тут
pkgver = 2.5.1
- строку source - замените на URL файла с телегой - я сделал так
source = https://github.com/telegramdesktop/tdesktop/releases/download/v2.5.1/tdesktop-2.5.1-full.tar.gz
- sha512sums - по аналогии с предыдущим файлом - вставьте корректную контрольную сумму от файла с исходным кодом телеги
Готово, сохраните и закройте файл .SRCINFO. Наконец-то мы можем закоммитить нашу работу, а именно, в данном примере, четыре файла - исправленный PKGBUILD и .SRCINFO, а также неизменившиеся файлы "wide-messages.patch" и "fix-qt-build.patch" обратно в AUR. Для этого в директории проекта делаем:
git add .
# Это добавит все файлы в листинг
git commit -am "Bumping telegram version to 2.5.1"
# Делаем коммит и указываем сообщение о том, что мы сделали
git push
Ждём несколько секунд. Теперь открываем страничку https://aur.archlinux.org/packages/telegram-desktop-wide чтобы убедиться, что ваша обновлённая версия телеги доступна любому желающему!
Теперь вы, как и любой другой человек в мире, может установить telegram-desktop-wide как через графический менеджер пакетов в пару-тройку кликов, так и одной командой, через yay, yaourt, pikaur и прочие AUR-helper'ы, например вот так:
pikaur -S telegram-desktop-wide
, ну а пакет больше не помечен, как устаревший!
Вот так (фрагмент) выглядит результат:
Отмечу напоследок, что у меня ранее не получалось успешно собрать telegram-desktop-wide на основе последнего кода телеграма, и я раньше никогда не коммитил в AUR. Это мой первый AUR-PKGBUILD-скрипт, и я разобрался как это сделать без всяких мануалов. На сборку телеги и все разбирательства ушло ~40 минут. На то, чтобы разобраться, как отправить обновлённый пакет в AUR, ~15 минут. На мой взгляд, неплохой результат, всего за час.
Пойду посмотрю, есть ли какие-то другие классные пакеты, в которых я смог бы стать мэйнтейнером! Чего и вам желаю.
Ура-ура! :)
С вами был ночной @sxiii aka Den,
из Oslo
CYA!
@sxiii, вот бы еще научиться самой писать PKGBUILD.
Если софт есть в AUR то его можно и автоматически установить, есть специальные установщики которые сами всё подтягивают из сети и собирают.
А вот как собрать пакет из исходника, скачанного к примеру с гитхаба к которому нет никаких PKGBUILD? Или собрать пакет для Арча/Манжаро из кода который я вытащила с файла .deb или .rpm?
Хотя на удивление, Манжаро запускает много программ прямо в виде исходников без всякой упаковки и установки, к примеру тот же Файрфокс. Как он так научился я не знаю, но это удобно.
@lindsay, PKGBUILD'ы кстати писать на удивление несложно. Их создали люди для людей =) И синтаксис можно изучить как на примере компиляционного скрипта телеграма, так и на примере любого другого приложения из AUR'а, либо же просто обратиться к референсу назначения переменных вот тут. (если русская версия вдруг будет не полная, есть английская).
По сути, весь PKGBUILD - это просто несколько переменных и несколько функций. С переменными всё понятно (название пакета, версия, зависимости, ссылка на исходный код, sha256/sha512 сумма исходного кода, и т. д.), а функции служат для, соответвественно, для (по-очереди) 1. подготовки к сборке 2. сборке 3. очистке мусора 4. упаковке собранных файлов в итоговый архивный файл, пригодный для установки в Arch посредством pacman'а (арчевский аналог deb/rpm пакетов).
@lindsay, по поводу "запуска из исходников" (без компиляции), - это невозможно =) (Ну только если это Python-скрипты или Javascript или Bash или что-то такое). Скорее всего здесь речь о браузере "Тор" или аналогичных поставках, - так вот, это Pre-Compiled версия. Некоторые поставщики ПО так делают - например, поставляют исходный код в комплекте с пре-компилированным бинарником. Вообще-то, любой Linux, это, в теории, ELF64 платформа/архитектура бинарников, т.е. при условии отсутствия каких-либо внешних зависимостей или нестандартных выкрутасов, любой ELF64 бинарник будет работать на любом линуксе (в реальности, конечно, библиотеки и зависимости и прочее вызывает некоторые несовместимости). Скорее всего, @lindsay, попался именно такой дистрибутив Firefox.
Ну и, насчёт того, как тут (Arch/Manjaro) запускать DEB - надо установить программу debtap из AUR, а затем можно превращать .deb в подходящие для установки pacman'ом файлы "pacman -U file" при помощи debtap file.deb.
Для RPM необходимо использовать alien_package_converter
Будут вопросы - пиши. =)
@sxiii,
Да, я разобралась именно такой и есть.
@sxiii, А телега у меня вообще консольная 😂 😂 😂
https://github.com/vtr0n/TelegramTUI
@lindsay, с консольной меньше мороки, конечно, чем с графической, в плане шрифтов и настроек. Но меня уже затянули все эти фоточки-мемчики-стикеры и всё вот это вот 😂 😂 Я вообще, если честно, по прежнему предпочитаю IRC. Однако, в IRC есть разработчики, но мало просто друзей не-технарей, к сожалению
@sxiii, я ничего не понял, но очень интересно)
@eldar-adov, ))) это не для нас, радость моя. тут бы с ключами разобраться))
@eldar-adov, ну, при желании когда-нибудь погрузиться в мир ArchLinux или Manjaro, перед тобой будет всецелая мощнейшная ArchWiki и если что ты знаешь, к кому можно обратиться :😎
@sxiii, то есть, эти все манипуляции только для того, чтобы изменить шрифт и увеличить ширину окна сообщения?
@ladyzarulem, что бы поставить шрифт который нравится!
Это сродни диайвайщикам, которые мастерят всё, что и так уже существует, но с персональными прибамбахами :)
@virt, я бы не сравнивал компиляцию с DIY. DIY - это когда из существующих материалов делается что-то своё. В какой-то степени можно сравнить DIY с рефакторингом кода, либо с самим по себе программированием. А компиляция - это считай мы строго 1-в-1 бит следуем "рецепту", то есть это скорее ближе к "приготовлению блюда по рецепту", и там отсебятины нет никакой. То что я патчи добавил для ширины, это теоритически да, отсебятина, но на практике это был уже рабочий (и не мой) пакет, с лайками, и пользователями, т.е. это нужно не мне одному. И основное здесь - именно мануал по обновлению пакетов в AUR, а компиляция телеграма просто стала успешным небольшим примером.
@virt, а вот еще интересно. работает ли эта метла. и как долго)))
@ladyzarulem, процесс важнее результата :)
@virt, да, есть же люди-процессы и люди-результаты)) редко когда удачно сочетается)) но если ты получаешь кайф в самом процессе, то это и можно считать результатом, правда же?
@ladyzarulem, есть не мало людей, для которых путь важнее цели.
@virt, ну, есть такие ребята, которые любят, чтобы все было вот именно так как они хотят, ну что сделаешь)))
@ladyzarulem, и да и нет. Да, потому что в результате собранная версия телеграма со своими шрифтами и на полную ширину. Нет, потому что теперь телеграм находится в репозиториях AUR, и любой пользователь может через графический менеджер пакетов или через консольный, его установить! В общем, компилировать телеграм для самого себя - это трата времени, по сути, и полезно только для опыта. А писать компиляционный скрипт для текущей версии для всей планеты, - совсем другое дело!
@sxiii, точно. про репозитории я забыла!