Home Wiki > openSUSE:OSC
Sign up | Login

openSUSE:OSC

tagline: Материал из openSUSE

Этот документ описывает утилиту командной строки osc и API предоставляемый Open Build Service.

Вступление

osc — CLI написанный на языке Python, дополнительно предоставляется модуль для использования в других программах на этом языке программирования.

osc является клиентским приложением, подобным subversion. Она позволяет получить доступ к репозиторию исходных кодов пакета в службе сборки, а так же редактирования метаданных или получение информации о состоянии сборки пакетов.

Загрузка и установка

osc включен в состав последней версии дистрибутива openSUSE. Чтобы установить эту программу просто выполните команду

zypper in osc


Новейшие версии, если они действительно необходимы, можно найти в репозитории openSUSE:Tools для большинства крупных дистрибутивов (openSUSE, SLES, Fedora, Mandriva, Debian и других). Чтобы получить последнюю версию исходного кода воспользуйтесь Git:


Для корректной работы osc требуется python-xml (zypper установит его как зависимость).

Walk-through

Авторизация

При первом запуске osc запросит у вас некоторые сведения и сохранит их в файле ~/.oscrc. Пароль сохраняется в виде обычного, текста поэтому соответствующим образом отнеситесь к защите этого файла и всей файловой системы.

Начиная с версии 0.122 osc получил поддержку основных библиотек python-keyring (среди них KWallet, Gnome keyring, MacOS и Windows) и может хранить пароли в специальном хранилище вместо файла ~/.oscrc.
RPM пакет osc в OBS имеет необязательную зависимость от python-keyring, но эту библиотеку можно установить вручную (желательно это сделать перед запуском osc) или подключив соответствующий репозиторий.
Если вы хотите начать использовать keyring, and you are already an osc user, you will need to delete your credentials section from ~/.oscrc. Next time you run osc you will be asked for credentials again.
But, before that, you might have to uncomment the line #use_keyring = 1 in file .oscrc [general] section (depending from your osc version).

Было зафиксировано, что python-keyring и авторизация с помощью Gnome keyring не работает. Чтобы обойти эту проблему нужно удалить python-keyring и добавить строку gnome_keyring=1 вместо keyring=1 в секции описания сервера.

Примеры использования

Простые примеры по использованию osc приведены ниже. Более сложные примеры приводятся в статье Руководство по использованию службы сборки.

Получить справку об использовании команды можно так:

osc help
osc help <cmd>

Получить информацию о содержимом сервера:

osc ls                          # список проектов
osc ls Apache                   # список пакетов в конкретном проекте
osc ls Apache subversion        # список файлов конкретного пакета

Получить данные с сервера:

osc co Apache                   # весь проект
osc co Apache subversion        # пакет
osc co Apache subversion foo    # конкретный файл

Обновить рабочий каталог

osc up
osc up <директория>
osc up *                        # находясь внутри каталога проекта, обновить все пакеты
osc up                          # находясь внутри каталога проекта, обновить все пакеты и проверить наличие новых пакетов

Отправить измененные данные на сервер:

osc ci                            # в текущем каталоге
osc ci <файл1> <файл2>            # только для указанных файлов
osc ci <каталог1> <каталог2> ...  # для нескольких проектов
osc ci -m "обновлен foobar"       # указав комментарий

Просмотр истории фиксаций:

osc log 

Показать статус (какие файлы были изменены локально)

osc st
osc st <директория>

Если при обновлении нельзя автоматически объединить правки, то состояние таких файлов помечаются 'C' (конфликт), а место возникновения неоднозначности помечается строками <<<<<<< и >>>>>>>. После ручного разрешения проблемы используйте

osc resolved <проблемный_файл>

Добавить или удалить файлы при следующей фиксации:

osc add foo
osc rm foo

Добавить все новые и удалить несуществующие файлы в локальной копии:

osc addremove

Сформировать список изменений:

osc diff [файл]

Показать статус сборки пакета

osc results
osc results <платформа>

Показать журнал сборки (находясь в директории пакета)

osc buildlog <платформа> <архитектура>
Localize.png Эта статья содержит фрагменты на иностранном языке. Вы можете помочь переведя её до конца. (cм. руководство по переводу)

Show the URLs of .repo files which are packages sources for Yum/YaST/smart

osc repourls [dir]

Запустить пересборку пакетов для всех репозиториев/архитектур:

osc rebuildpac [каталог]

Собрать пакет локально для указанной платформы:

osc build <platform> <arch> <specfile> [--clean|--noinit|...]

Show the configured platforms/build targets.

osc platforms [project]

Показать доступные цели сборки для текущего проекта:

osc repos

Показать мета-информацию:

osc meta prj <проект>
osc meta pkg <проект> <пакет>
osc meta user <пользователь>
osc meta prjconf <проект>

Edit meta information. Creates new package/project if it doesn't exist. It will open an Editor with the raw XML metadata. If unsure about XML, you can use the web client instead.

osc meta prj -e <project>
osc meta pkg -e <project> <package>
osc meta prjconf -e <project>

(The project configuration (prjconf) may well be empty. It is needed in special cases only.)

Обновить метаданные пакеты используя данные из spec-файла:

osc updatepacmetafromspec <dir>

Отслеживание пакетов

C osc также можно управлять пакетами в стиле svn. Эта возможность называется отслеживание пакетов и должна быть включена в ~/.oscrc's [general] секции

# manage your packages in a svn like way
do_package_tracking = 1

Добавить новый пакет в проект

osc mkpac <package>

Добавить существующую директорию и её файлы в проект

osc add <directory>

Удалить пакет и его файлы из проекта

osc deletepac <package>

Все вышеприведенные команды изменяют только вашу локальную рабочую копию. Чтобы отправить изменения в buildservice, вам необходимо зафиксировать их (osc ci -m <message>).

Команда status также отображает состояние пакетов

osc st

Документация

Besides a manual page for osc, a cheat sheet is available as well.

How to fix a none factory package?

Check out the package of your choice:

osc -A https://api.suse.de bco SUSE:SLE-11-SP2:GA <package name>


Fix it and after you have verified that the package builds submit it:

osc commit <package name>


Расширения для osc (дополнения)

osc поддерживает расширения — можно изменить поведение или добавить собственную команду. Обратитесь к статье openSUSE:OSC plugins для получения дополнительной информации.

Configuration migration

Version 0.114 got some cleanups for the configfile handling and therefore some options are now deprecated, namely:

  • apisrv
  • scheme

One new option was added:

  • apiurl = <protocol>://<somehost> # use this as the default apiurl. If this option isn't specified the default (https://api.opensuse.org) is used.

So far osc still has some backward compatibility for these options but it might get removed in the future that's why it issues a deprecation warning in case one of those options is still in use. The new configuration scheme looks like the following:

# entry for an apiurl
[<protocol>://<apiurl>]
user = <username>
password = <password>
...

Before starting the migration please save your ~/.oscrc file!

If the migration doesn't work for whatever reason feel free to send me an email or ask on the opensuse-buildservice mailinglist or in the #opensuse-buildservice irc channel.

Migration case I (apisrv only)

The apisrv option is used to specify the default apihost. If apisrv isn't specified at all the default ("api.opensuse.org") is used. The current [general] section looks like this:

[general]
...
apisrv = <somehost>
# or
apisrv = <protocol>://<somehost>

apisrv got superseded by the new apiurl option which looks like this:

[general]
...
apiurl = <protocol>://<somehost>

If apisrv has no "<protocol>" https is used. Make sure all apiurl sections have the new format which is described above. Afterwards apisrv can be removed.

Migration case II (scheme only)

The current [general] section looks like this:

[general]
...
scheme = <protocol>

This means every apiurl section which don't have the new format which is described above for instance

[<somehost>]
user = <username>
password = <password>
...

has to be converted to

[<protocol>://<somehost>]
user = <username>
password = <password>
...

Afterwards the scheme option can be removed from the [general] section (it might be the case that some sections already have the correct format).

Migration case III (apisrv and scheme)

The current [general] section looks like this:

[general]
...
apisrv = <somehost>
scheme = <protocol>

Both options can be removed if all apiurl sections have the new format which is described above. So basically just adjust all apiurl sections (it might be the case that some sections already have the correct format).

osc build with xen

You'll need to have xen packages and xen kernel installed and booted to proceed. To activate local builds with xen, you'll have to add these lines to section [general] of your ~/.oscrc:

build-type=xen
build-device=/tmp/FILE.root
build-swap=/tmp/FILE.swap
build-memory=512

Then create the 2 files:

dd if=/dev/zero of=/tmp/FILE.root bs=1M count=4096  # 4GB partition for / . On big projects 8GB should be used.
mkfs.ext3 /tmp/FILE.root                            # Hit (y) if it complains about the file not being a device node.
dd if=/dev/zero of=/tmp/FILE.swap bs=1M count=512   # use other sizes as needed
mkswap /tmp/FILE.swap

При изменении размера или типа файловой системы также нужно обновить опцию build-vmdisk-*.

If you want to use the cross-compilation feature, you'll have to add to your /etc/sysconfig/kernel:

  • binfmt_misc to INITRD_MODULES
  • binfmt_misc to DOMU_INITRD_MODULES
  • binfmt_misc to MODULES_LOADED_ON_BOOT

Recreate the initrd's with mkinitrd.

Run osc build.

Шпаргалка по .oscrc

Секция [general]

Хранилище:

# Загруженные пакеты будут сохранены здесь (в кеше). Должен быть доступ для запись.
# по умолчанию:
packagecachedir = /var/tmp/osbuild-packagecache
# корневой каталог (rootdir) для создания chroot-окружения
# может содержать %(repo)s и/или %(arch)s для подмены
# /<path>/%(repo)s-%(arch)s-%(project)s-%(package)s
# по умолчанию:
build-root = /var/tmp/build-root/

Соединение с сервером предоставляющим API:

# использовать этот сервер (имя_хоста[:порт])
# (необходимо для секции [api.opensuse.org] вместе с данными для авторизации)
# по умолчанию:
apisrv = api.opensuse.org
# использовать этот протокол для доступа к серверу API (http или https)
# по умолчанию:
scheme = https

Имя хоста сервера предоставляющего API:

# Имя может быть задано псевдонимами (aliases), например, 'osc -A alias ...'
# Список псевдонимов для API хостов указывается в этом разделе.
# https://api.opensuse.org
# user=jdoe
# aliases=

Локальная сборка:

# Обертка для запуска сборки с правами пользователя root (sudo, su -, ...)
# по умолчанию: 
su-wrapper = su -c
# без запроса пароля, если использовать:
#su-wrapper = sudo
#и указать в файле sudoers:
# <username> ALL = NOPASSWD: /usr/bin/build
# Для удобства/отладки, osc устанавливает vim, gdb, strace в 
# chroot-окружение, если папаметр extra-pkgs не задан:
#extra-pkgs=
# Тип сборки — допустимые значения:
#  * empty -> chroot
#  * xen -> виртуальная машина (VM) xen
#  * kvm -> kvm VM (возможны недоработки) 
# по умолчанию: не задано/chroot
#build-type=xen
# build-device — корневая файловая система используемся VM
# по умолчанию: не задано
#build-device=/tmp/FILE.root
# build-swap — файл для создания swap-раздела используемого VM
# по умолчанию: не задано
#build-swap=/tmp/FILE.swap
# build-memory — количество выделяемой для VM памяти
# по умолчанию: не задано
#build-memory=512

Помощь: отправка сообщений об ошибках, разработка и так далее

Разработка ведется по адресу: https://github.com/openSUSE/osc

Файл для указания новых задач: https://github.com/openSUSE/osc/issues/new