Pixiecore и Arch Netboot. Cборка пакета для AUR на примере pixiecore.

PIXIECORE

I. Применение pixiecore для загрузки Arch Netboot
II. Подготовка пакета для AUR, на примере pixiecore

I. Применение pixiecore для загрузки Arch Netboot
pixiecore позволяет передать на удалённую машину ядро и первичный корневой раздел используя технологию сетевой загрузки PXE.

Данную программу использовать довольно таки просто, например, для запуска Arch Netboot по сети, достаточно с оф. сайта Арча скачать iPXE (< 1M) , а затем одной командой отдать его другой системе в локальной сети которая ожидает сетевую загрузку. Пример для BIOS:
% curl -O https://www.archlinux.org/static/netboot/ipxe.lkrn
% sudo pixiecore boot ipxe.lkrn -d
[Init] Starting Pixiecore goroutines


Но есть одна проблема, данной программы нету (уже есть) в репозиториях Арча, не в официальном не в пользовательском(AUR/АУР).
Программа написана на языке программирования Go (golang), поэтому для тех кто использует данный язык установить её не составит труда:
% go get go.universe.tf/netboot/cmd/pixiecore
будет скачан репозиторий, а сама программа будет автоматически собрана из исходников и помещена по адресу $GOPATH/bin/pixiecore

Но как быть простым смертным ? Правильно, собрать пакет для АУРа и поделится им с сообществом. Так и поступим.
Ниже будет показана поэтапная подготовка пакета вплоть до заливки в репозиторий АУРа.
Нетерпеливые могут просто установить этот пакет:
% yaourt -S pixiecore

II. Подготовка пакета для AUR, на примере pixiecore
Информации по созданию пакетов для АУР хватает, но на мой взгляд она неполная, устаревшая, размазанная да и в основном не русскоязычная. Не хватает простого "Hello World" по созданию пакета для AUR в котором поэтапно расписаны необходимые действия.
Ну что же, в меру своих сил попробуем это исправить. Надеюсь мастера данного дела меня поправят если что не так.
И так, поехали.

  1. Первым делом в системе должны быть установлены необходимые пакеты для работы с AUR:
  2. % sudo pacman -S git base-devel namcap
    
    • git - система контроля версий
    • base-devel - группа базовых пакетов для разработки
    • namcap - для проверки пакетов на ошибки
  3. Регистрация на сайте
  4. Если ещё не зарегистрированы в AUR то регистрируемся, и добавляем к своей учётной записи публичный ключ (SSH Public Key). Если впервой то можно посмотреть здесь или здесь, процедура такая же как для github или bitbucket.
  5. Подготовка окружения
  6. Клонируем репозиторий:
    % git clone ssh://aur@aur.archlinux.org/pixiecore.git
    Клонирование в «pixiecore»…
    warning: Похоже, что вы клонировали пустой репозиторий.
    Проверка соединения… готово.
    
    репозиторий будет пустым если пакета с таким названием еще нету. Переходим в скачанный репозиторий и копируем в него шаблон рецепта сборки (PKGBUILD) :
    % cd pixiecore
    % cp /usr/share/pacman/PKGBUILD.proto PKGBUILD
    
    все дальнейшие действия будут происходить в этой папке.
  7. Редактируем файл PKGBUILD.
  8. Это самая трудная часть, написание 'правильного' рецепта для сборки пакета. PKGBUILD - это bash скрипт, цель которого предоставить команды для получения набора файлов, которые pacman сможет установить.
    • Первым делом оставим след в истории:
    • # Maintainer: Имя <Почта>
      
    • Имя пакета:
    • pkgname=pixiecore
      
    • Версия пакета:
    • pkgver=16.10.01.1420
      Можно прописывать версию вручную в переменную pkgver, или же вычислять её автоматически в функции pkgver(). Так как автор pixiecore не ведёт нумерации версий, то зададим свою которая будет соответствовать дате последнего коммита (вычисляется как $ git log -1 --format="%cd" --date=format:"%y.%m.%d.%H%M"). В АрчВики есть примеры версионирования пакетов для разных систем контроля версий.
    • Краткое описание пакета:
    • pkgdesc="An all-in-one tool for easy netbooting"
      
    • Архитектура:
    • arch=('i686' 'x86_64')
      
      для каких архитектур собирается пакет. Для скриптов обычно указывают 'any'.
    • Лицензия:
    • license=('GPL2')
      
      если не знаете то указываете 'unknown'.
    • Зависимости необходимые для сборки пакета:
    • makedepends=('go' 'git')
      
      эти пакеты установятся пользователям только на время сборки пакета.
    • Функция подготовки:
    • prepare() {
      	export GOPATH="$srcdir/go"
      	mkdir -p $GOPATH
      
      	export GOBIN="$GOPATH/bin"
      	mkdir -p $GOBIN
      
      	go env
      }
    • Функция сборки:
    • build() {
          go get -v go.universe.tf/netboot/cmd/pixiecore
      }
      
      в данной функции описываются компиляция программы.
    • Функция установки (обязательна):
    • package() {
      	install -Dm755 "$GOBIN/${pkgname}" "${pkgdir}/usr/bin/${pkgname}"
      }
      
      На данном этапе полученный бинарник перекочует в нашу систему.
    • PKGBUILD целиком:
    • # Maintainer: Имя <Почта>
      
      pkgname=pixiecore
      pkgver=16.10.01.1420
      pkgrel=1
      epoch=
      pkgdesc="An all-in-one tool for easy netbooting"
      arch=('i686' 'x86_64')
      url="https://github.com/google/netboot/tree/master/pixiecore"
      license=('GPL2')
      groups=()
      depends=()
      makedepends=('go' 'git')
      checkdepends=()
      optdepends=()
      provides=()
      conflicts=()
      replaces=()
      backup=()
      options=()
      install=
      changelog=
      source=()
      noextract=()
      md5sums=()
      #validpgpkeys=()
      prepare() {
      	export GOPATH="$srcdir/go"
      	mkdir -p $GOPATH
      
      	export GOBIN="$GOPATH/bin"
      	mkdir -p $GOBIN
      
      	go env
      }
      
      build() {
      	go get -v go.universe.tf/netboot/cmd/pixiecore
      }
      
      package() {
      	install -Dm755 "$GOBIN/${pkgname}" "${pkgdir}/usr/bin/${pkgname}"
      }
      • startdir - директория где лежит PKGBUILD, эту переменную использовать не рекомендуется.
      • srcdir = ${startdir}/src - сюда скачиваются исходники для сборки пакета
      • pkgdir = ${startdir}/pkg/${pkgname} - сюда компилируется программа, используется только в функции package()
      Более подробное описание всех переменных и функций можно посмотреть в man PKGBUILD или archWiki. Примерами же составления самого PKGBUILD-а могут служить рецепты пакетов из AUR, для этого достаточно зайти на страницу и выбрать подобный пакет или просто клонировать пакет с АУР-а как было показано в начале.
  9. Проверка PKGBUILD:
  10. % namcap PKGBUILD
    PKGBUILD (pixiecore) W: Non standard variable 'validpgpkeys' doesn't start with an underscore
    
    закомментируем в PKGBUILD переменную validpgpkeys и запускаем повторно, ошибка должна исчезнуть.
  11. Локальная сборка и установка пакета:
  12. % makepkg -csrfi
    
    • -c удалить директорию сборки
    • -s установить недостающие зависимости
    • -r удалить их(-s) после установки
    • -f пересобрать существующий пакет, если он есть
    • -i установите пакет после успешной сборки
    makepkg - утилита входящая в состав pacman для сборки пакетов.
    % sudo pacman -Rns pixiecore
    
    после успешной установки удаляем пакет, так как в скорости мы установим его через АУР.
  13. Проверка локального пакета:
  14. % namcap pixiecore-16.10.01.1420-1-x86_64.pkg.tar.xz
    pixiecore E: Dependency glibc detected and not included (libraries ['usr/lib/libc.so.6', 'usr/lib/libpthread.so.0'] needed in files ['usr/bin/pixiecore'])
    
    На всякий случай проверим собранный локальный пакет даже если при сборке не было ошибок, здесь говорится что в зависимости нужно включить пакет glibc, хотя это довольно таки странно в свете того что данный пакет входит в группу 'base'. В общем эту ошибку можно проигнорировать, возможно проблема в том что пакет namcap давно не обновляли. На заметку: пакеты и их зависимости входящие в группу base и base-devel включать в зависимости ненужно.
  15. Создание файла метаданных для AUR:
  16. % makepkg --printsrcinfo > .SRCINFO
    данная команда проанализирует PKGBUILD и создаст на его основе скрытый файл метаданных .SRCINFO
  17. Подготовка и отправка пакета в AUR:
  18. % git add PKGBUILD .SRCINFO
    % git commit -m 'Initial import'
    добавляем файлы PKGBUILD и .SRCINFO в наш репозиторий, а затем фиксируем его делая коммит. Далее отправляем пакет в AUR:
    % git push origin master
    Если пакета в репозитори AUR еще нету то он будет создан при первом push. Не забываем также добавить ключевые слова через выб интерфейс для нашего пакета.
  19. Установка пакета из AUR:
  20. % yaourt -S pixiecore
    
О. Полезное дело делаете!
По поводу контрольных сумм: на мой взгляд, удобнее пользовать updpkgsums
GitHub
Kycok
По поводу контрольных сумм: на мой взгляд, удобнее пользовать updpkgsums
да, действительно лучше использовать updpkgsums, изменил. Спасибо за подсказку.
Спасибо!
Теперь не только в теории но и на практике можно ознакомится со сборкой пакетов для AUR.
Русская команда переводчиков ArchWiki
скромный вклад
Как раз думал поиграться с pxe и как запилить cвой пакет в AUR. Added to Favorities.
This Must Be The Place I Waited Years To Leave
 
Зарегистрируйтесь или войдите что-бы оставить сообщение.