Показаны сообщения с ярлыком obs. Показать все сообщения
Показаны сообщения с ярлыком obs. Показать все сообщения

OBS: локальная сборка под ARM

Когда требуется локально пересобрать пакет под одну из архитектур ARM, например для тестирования сборки, можно воспользоваться следующим медленным подходом.

osc build --clean --alternative-project openSUSE:Factory:ARM qemu armv7l name.spec

Здесь указывается, что используется альтернативный проект для сборки — openSUSE:Factory:ARM (версию подставить по желанию), используется репозиторий qemu, который есть в этом проекте. Поэтому и указывается этот альтернативный проект.

Несмотря на то, что в данном примере указана архитектура armv7l, технически, это x86_64. В среду сборки будет установлен бинарный транслятор qemu, работающий через подсистему ядра binfmt. При инициализации ядро настраивается таким образом, что при виде сигнатуры ELF для архитектуры ARM вызывает бинарик как qemu-arm /usr/bin/..., подобно тому, как при виде символов "#!" в начале исполняемого файла вызывается указанный интерпретатор. Работает поэтому достаточно медленно.

К сожалению, с пакетами kiwi такое не проходит.

quilt и rpm

quilt — это система контроля патчей, в каком-то смысле предыдущая ступень эволюции систем контроля версий.

Пусть есть rpm-пакет и нужно обновить его версию, используя новый архив исходных кодов. При этом патчи останутся старыми, и не гарантируется, что они наложатся на новую версию, или не потребуется вмешательство человека, из-за того, что какой-то патч устарел. После того, как новый архив получен и Version: исправлен, можно прибегнуть к помощи quilt:
quilt setup libdc1394.spec

Эта команда создаст новую директорию в которой будут лежать распакованные исходные коды, символическая ссылка на директорию patches (хранит сами файлы патчей) и файл series (хранит порядок в котором патчи нужно применять). quilt не всегда успешно справляется с патчами, которые завернуты в %if.

Идеологически происходит следующее, у нас есть команда quilt, что-то вроде аналога git или hg, дерево исходников и стек патчей. Стек патчей в чем-то аналогичен ревизиям в системах контроля версий. Используя стек можно переходить от текущего состояния к следующему (применяя патч, quilt push) или к предыдущему (откатывая, quilt pop). Первоначально, мы находимся в самом нижнем состоянии (не модифицированные исходные коды):
>quilt top
Нет применённых патчей
>quilt applied 
Нет применённых патчей
>quilt unapplied 
patches/libdc1394.no-x11.patch
patches/libdc1394.ac.patch
patches/libdc1394-swab_fix.patch
patches/libdc1394.raw1394_set_iso_handler.patch
patches/libdc1394-v4l-2.6.38.patch
patches/libdc1394-visibility.patch

Дальше попробуем наложить первый патч (здесь потребовалась предварительная обработка из-за хитрой структуры директорий в конкретном случае),
>quilt push
Наложение патча patches/libdc1394.no-x11.patch
patching file libdc1394-1.2.2/examples/Makefile.am
patching file libdc1394-2.2.1/configure.in

Текущий патч: patches/libdc1394.no-x11.patch
>quilt top
patches/libdc1394.no-x11.patch
>quilt applied
patches/libdc1394.no-x11.patch

И так далее, пока не закончится весь стек патчей, но скорее всего так просто он не закончится. Задача — обновляя патчи, устранить конфликты. После принудительного применения (quilt push -f) следует вручную просмотреть все конфликтные места и исправить их нужным образом. Каждый патч отслеживает только некоторое число файлов (quilt files), но если отредактирован файл не из списка, то его нужно добавить (quilt add). После того как все исправлено, нужно обновить текущий патч: quilt refresh (это такой аналог commit, который исправляет текущий наложенный патч, основываясь на рабочей директории и предыдущей спрятанной копии)
>quilt refresh
Патч patches/libdc1394-v4l-2.6.38.patch обновлён



OBS tar_scm: versionformat

Сервис для OBS под названием tar_scm позволяет автоматически создавать архивы из указанных репозиториев систем контроля версий исходных кодов. Естественно, имеет много параметров, описание которых не так просто найти. На головном web-интерфейсе взаимодействие с сервисами куда-то с недавних пор вообще пропало, там хоть какие-то подсказки содержались.

versionformat — один из самых любопытных параметров, позволяющих хоть как-то оформить название архива, для последующего действия сервиса set_version.

  • Для git в это поле можно указать:
    • @PARENT_TAG@ — bash любезно заменит на ближайший тег
    • поля из --pretty=format для последнего по времени коммита — полный список внизу, какой-то смысл в данной ситуации имеют %ct %cd %h (UNIX таймштамп, дата YYYYMMDD, короткий хэш коммита), причем дефисы будут любезно удалены по дороге sed'ом (даты будут получается в духе 20121221).
  • Для mercurial (hg):
    • поля из --template для последнего по времени коммита — полный список внизу. Огромное богатство для фантазии, есть встроенная опция для latesttag. Во время написания этого текста, не было способа выдать дату в виде YYYYMMDD, без дефисов. Сейчас все дефисы удаляются sed'ом, однако последняя версия tar_scm может быть еще не загружена на головной сервис.
  • svn понимает только %r — номер ревизии

  1. github: obs-service-tar_scm
  2. git show(1)
  3. hg templates

OBS submit request top

There was a discussion on submit requests. Adrian Schröter and Jos Poortvliet suggested to use OBS api to generate some kind of reports on pending times. Here is a test (I will publish this python script on github or something like that). I've filtered out all "home:" projects and built following table. To my surprise, there are only a little stalled requests.


Generated at: 2013-04-13 05:27:41.044818
RequestPending timeProjectPackage
1317 1680 dayssystem:managementpuppet
25359 1227 daysYaST:Web:STABLEwebyast-vendor_en
31953 1158 daysMoblin:Factorygnome-session
33643 1138 daysMoblin:Factorygnome-settings-daemon
33644 1138 daysMoblin:Factorydalston
33868 1136 daysMoblin:Factoryicon-theme-dmz-cursors
38905 1081 daysMoblin:2.0dalston
55428 855 dayssecurity:CASACASA-kwallet
55429 855 dayssecurity:CASACASA_auth_token_client
55431 855 dayssecurity:CASACASA_auth_token_server
69864 705 dayssystem:wicdwicd
72401 681 daysisv:dell:communitypython-ctypes-rhel
74258 661 daysnet-snmp
74259 661 daysnet-snmp
74260 661 daysnet-snmp
75895 644 daysnetwork:ifolder:server_stable
110363 387 daysMaemo:Mer:Extras:Importopengfx
123245 315 daysisv:microsoftRHEL6
131196 236 daysopenSUSE:11.0:Update:Test
134952 206 daysBanshee:Legacyipod-sharp
134958 206 daysBanshee:Legacypodsleuth
134959 206 daysBanshee:Legacyndesk-dbus-glib
134960 206 daysBanshee:Legacyndesk-dbus
136458 195 daysGNOME:Evolution:mapievolution-mapi
137714 184 daysMaemo:Mer:Extras:Import
138490 177 daysdevel:languages:lualuaexpat
145153 121 daysgames:WorldForgewfmath
145154 121 daysgames:WorldForgeskstream
145155 121 daysgames:WorldForgelibwfut
145156 121 daysgames:WorldForgelibdevil
145162 119 daysdevel:languages:luatolua++
145501 119 daysNovell:NTSsupportutils-plugin-susecloud
145520 119 daysisv:ownCloud:communitypatchinfo
147640 94 daysdevel:languages:lualua-lgi
147641 94 daysdevel:languages:lualua51-lgi
151409 66 daysArch:Extra
151535 65 daysArch:Core
153990 64 daysMono:Beta
154756 64 daysVirtualization:openSUSE11.4
154759 64 daysspins:open-pc:kde
155682 54 daysApache:Modulesapache2-mod_authz_unixgroup
155683 54 daysApache:Modulespwauth
158065 35 daysApache:Modulesapache2-mod_authn_sasl
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158089 34 daysopenSUSE:Evergreen:11.4drbd.64
158556 32 dayswindows:mingw:win32mingw32-cross-nsis
158558 32 dayswindows:mingw:win32mingw32-cross-nsis-plugin-zipdll
159540 28 daysJava:baseclojure
159797 25 dayssecurity:netfilterSuSEfirewall2
159894 25 daysdrivers:nicr8168
160430 22 daysnetwork:ha-clustering:Factorycorosync
160446 22 dayssecurity:passwordmanagementpassword-store
160510 22 daysnetwork:telephony:asterisk-11
160725 20 daysisv:ownCloud:community
160726 20 daysisv:ownCloud:communityowncloud
160727 20 daysisv:ownCloud:communityqtkeychain
160794 19 daysnetwork:storagebcache-tools
160846 19 daysX11:wxWidgetswxWidgets
160961 18 daysArchiving:Backuprsync
160962 18 daysArchiving:Backuplibrsync
161043 18 daysArchiving:Backupdkopp
160885 17 daysKDE:Qt50libqt5-qtwebkit
161474 16 daysX11:Cinnamon:Factorycinnamon-screensaver
161616 15 dayssecurity:passwordmanagement
162321 10 daysApache:Modulesapache2-mod_authn_otp
162491 9 daysutilitiesbyobu
162528 9 daysfilesystemslibvshadow
162537 9 daysopenSUSE:Toolsobs-service-verify_file
162581 8 daysvdr
162074 7 days, 22 hoursdevel:openSUSE:Factory:legal-queuewhich
162691 7 days, 21 hoursopenSUSE:12.3:Updatepesign-obs-integration.1510
162691 7 days, 21 hoursopenSUSE:12.3:Updatepesign-obs-integration.1510
162691 7 days, 21 hoursopenSUSE:12.3:Updatepesign-obs-integration.1510
162691 7 days, 21 hoursopenSUSE:12.3:Updatepesign-obs-integration.1510
158276 7 days, 16 hoursdevel:openSUSE:Factory:legal-queuesazanami-fonts
162931 7 days, 6 hoursfilesystemslibsmdev
162932 7 days, 6 hoursfilesystemslibsmraw
162933 7 days, 6 hoursfilesystemslibodraw
В openSUSE перерабатывают страницу software.opensuse.org и придумали полезную вещь, встраиваемый в веб-страницы виджет с информацией о пакетах; инструкция здесь.

Выглядит примерно так:

ESO Midas 11SEP1.2

Отправил собираться новую версию.

Заодно осилил source service для build service. Первый приз получает сервис под названием download_files (надо в файл _service в проекте воткнуть вот это):
<services>
  <service name="download_files">
  <param name="recompress">yes</param>
  </service>
</services>

Он не просто прочитает spec-файл и попытается скачать все файлы для которых там есть полный url в строчке Source, он к тому-же (это же чудо!) перепакует их сам в нужный формат и сам разберется что скачивать. Например, допустим, Source0 указан вот так: ftp://ftp.eso.org/pub/midaspub/11SEP/sources/%{version}.tar.bz2, при этом на самом сервере нет архива tar.bz2, там есть только tar.gz. Так вот, умный сервис скачает такой архив, который там физически есть, и перепакует его в такой, который нужен.

Документации (как и во всем opensuse) нет, поэтому предлагается смотреть в /usr/lib/obs/service и там можно прочитать в исходниках какие сервисы есть, какие у них параметры и что делают.

p.s. Вообще, считаю, следующий гениальный шаг будет когда build service научится сам автоматически отслеживать хранилища типа PyPi, CPAN, etc и автоматом собирать новые пакеты и пересобирать обновленные. Закоммитил ты свой модуль новый питонный в PyPi, а он через 15 минут уже есть для opensuse в виде пакета. Красота.

openSUSE Build Service: kvm с поддержкой virtio

Инструкция по созданию образа initrd с поддержкой virtio. В файле
/etc/sysconfig/obs-worker должно быть указано, где какие образы искать рабочим(а то сами они могут не то найти), кроме того, там указана файловая система, которую вы желаете использовать для виртуальных дисков (у меня по умолчанию был ext3). По идее, файловая система важна только чтобы initrd смог потом её смонтировать.

rootfstype="ext4" mkinitrd -d /dev/null -m "binfmt_misc virtio_pci virtio_blk" -k /boot/vmlinuz -i /boot/initrd-virtio -S

Создаст специальный initrd, который потом можно скормить сборщикам. Важно указать rootfstype, иначе mkinitrd начинает пытаться определить тип файловой системы у /dev/null и ругается.

upd: В скором времени восприятие /dev/null было окончательно починено (поломано). Несмотря на то, что скрипт build до сих пор содержит напоминание о ключе -d /dev/null, эта опция больше не работает. Самым простым способом оказалось копирование /lib/mkinitrd куда-нибудь в сторону и наглое исправление файла scripts/setup-storage.sh:
@@ -331,9 +331,10 @@
             fstype=nfs
             ;;
         /dev/*)
-            if [ ! -e "$dev" ]; then
-                error 1 "$name device ($dev) not found"
-            fi
+       fstype=$rootfstype
             ;;
         *://*) # URL type
             fstype=${dev%%://*}

После чего следует использовать команду:

rootfstype="ext4" mkinitrd -d /dev/vda -m "binfmt_misc virtio_pci virtio_blk" -k /boot/vmlinuz -i /boot/initrd-virtio -S -l /path/to/lib/mkinitrd

openSUSE Build Service 2.0.5

Наконец переехал у себя с OBS 1.7 на 2.0. OBS — это, пожалуй, единственное ПО, которое я ставлю из пакета, делаю как в инструкции, и... и все падает с какими-то не информативными странными ошибками.

Начать следует с того, что, насколько я понял, эта штука теперь научилась работать с gpg2, поэтому gpg 1.4.5 со специальным патчем "files_are_digests" можно выкинуть. Не забыв при этом подправить путь к gpg в /etc/sign.conf

Порадовало, что наконец в пакет добавили конфиги для logrotate, теперь логи не вырастают до невиданных размеров.

Теперь более интересное. В связи с тем, что рабочие научились самостоятельно создавать себе образы дисков, в /etc/sysconfig/obs-worker добавлено очень много новых опций. В нем же можно изменить рабочую директорию (теперь по умолчанию /var/cache/obs/worker), размеры образов, количество памяти для виртуальной машины и указать её тип. В нем же мне пришлось обратить пристальное внимание на OBS_VM_KERNEL и OBS_VM_INITRD, у меня ничего не заработало пока я их не исправил:
OBS_VM_KERNEL="/boot/vmlinuz"
OBS_VM_INITRD="/boot/initrd-virtio"
Дело в том, что я предпочитаю использовать build с KVM. И, к сожалению, build не смог самостоятельно найти нужные образы для загрузки без явного указания этих параметров. Кстати, файл /boot/initrd-virtio (initrd с поддержкой virtio) делает сам скрипт build, так что не надо удивляться откуда он взялся.

openSUSE Build Service 1.7

Недавно был выпущен новый релиз OBS 1.7:

http://news.opensuse.org/2010/02/09/opensuse-build-service-1-7-now-available.

Представляет из себя значительно усовершенствованный продукт по сравнению с 1.6. Описания нововведений тут не будет, их можно прочитать в анонсе и инструкции. Особенно важно, что из интерфейса выкинута все символика openSUSE, а страница Server Status стала такой вебдванольной с кучей графиков: теперь смогу наблюдать свои собирающиеся два пакета в день в виде дельта-функций на этих графиках. При обновлении OBS потянул за собой рельсы 2.3 и кто-то из них еще потянул memcached.

Далее идет подробный список граблей, заботливо разложенных разработчиками:

  • Как и во всех прошлых версиях, в пакете obs-signd бинарик /usr/bin/sign едет без SUID-бита. Верные права:

    -rwsr-x--- 1 root obsrun 45710 Фев 9 11:47 sign
  • В /etc/init.d/obssignd традиционно не прописан лог-файл.
  • Рабочие анонсируют себя по SLP, выключить это можно OBS_USE_SLP="no" в /etc/sysconfig/obs-worker.
  • Переменная relsync_pool в BSConfig.pm должна быть проверена и выставлена в соответствии с желанием:

    http://lists.opensuse.org/archive/opensuse-buildservice/2010-01/msg00149.html
  • В cron добавлены правила для отрисовки графиков, которые запускаются от lighttpd:

    cron: Permission denied
  • Подробную инструкцию по миграции можно прочитать в README.UPDATE и ReleaseNotes.
  • Задачи из крона запускаются раз в минуту, что оставляет сообщения в /var/log/messages
  • Если рабочие обнаруживают присутствие kvm в системе — они запускаются с ключем --kvm, повергая этим скрипт build в полнейшее неработоспособное состояние

openSUSE Build Service 1.5

Вышел новый релиз:

http://news.opensuse.org/2009/03/19/opensuse-build-service-15-announced

Проблем пока не обнаружено, в пакете obs-signd бинарик /usr/bin/sign едет без SUID-бита.

Верные права:
-rwsr-x--- 1 root obsrun 48003 Июн 25 17:25 /usr/bin/sign

openSUSE Build Service 1.0.0

Вышел долгожданный релиз, главное его достоинство в том, что он просто работает и просто настраивается.
Исправлены некоторые ошибки, в том числе та самая досадная со сменой паролей:
https://bugzilla.novell.com/show_bug.cgi?id=392057

openSUSE Build Service 0.9

Вчера вышел релиз openSUSE Build Service 0.9. Это пакет серверных приложений позволяющих собирать пакеты под различные архитектуры и дистрибутивы на удалённом сервере в практически автоматическом режиме.

От себя добавлю что версия 0.9 действительно работает и готова к установке и использованию. Пакет сопровождается свежей инструкцией по настройке и установке :). Очень важной особенностью является возможность взаимодействия с другими серверами. Теперь, например, чтобы собрать пакет под какую-то версию дистрибутива на своем сервисе не нужно держать копию всех пакетов на своём диске, ваш сервер может соединятся с build.opensuse.org и скачать от туда эти пакеты.

Установка и настройка заняла пять минут, в итоге получается нечто очень похожее на build.opensuse.org но на вашей машине. Пакеты действительно собираются. Необходимо так же особо отметить, что сборка может проводиться на нескольких машинах, объединённых в локальную сеть, что ускоряет её процесс, если в очереди много пакетов.

Написано это на ruby и использует lighttpd в качестве web-сервера. Особо хочу обратить внимания на дикие тормоза в работе всего этого.

ESO Midas 08FEBpl1.0

На FTP у европейцев давно валяется, анонса так и не было, терпение моё за сим лопнуло и я отправил собираться новую версию на openSUSE BuildService.

ftp://ftp.eso.org/pub/midaspub/08FEB

Репозитарии, которые добавлять:

http://download.opensuse.org/repositories/science/

Комментарии на любом известном мне языке приветствуются в почту или jabber.