Administrator Guide Obs Admin
User Manual:
Open the PDF directly: View PDF .
Page Count: 118
Administrator Guide
Administrator Guide: Open Build Service
by Karsten Keil
Publication Date: 01/02/2019
SUSE LLC
10 Canal Park Drive
Suite 200
Cambridge MA 02141
USA
https://www.suse.com/documentation
Copyright © 2016
Copyright © 2006– 2019 SUSE LLC and contributors. All rights reserved.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free
Documentation License, Version 1.2 or (at your option) version 1.3; with the Invariant Section being this
copyright notice and license. A copy of the license version 1.2 is included in the section entitled “GNU
Free Documentation License”.
For SUSE trademarks, see http://www.suse.com/company/legal/ . All other third-party trademarks are the
property of their respective owners. Trademark symbols (®, ™ etc.) denote trademarks of SUSE and its
aliates. Asterisks (*) denote third-party trademarks.
All information found in this book has been compiled with utmost attention to detail. However, this does
not guarantee complete accuracy. Neither SUSE LLC, its aliates, the authors nor the translators shall be
held liable for possible errors or the consequences thereof.
Contents
About this Guide vi
1
1.1
Installation and Configuration 1
Planning 1
Resource Planning 1
1.2
Simple Installation 2
Back-end Installation 2 • Front-end Installation 6 • Online
Configuration 9
1.3
Worker Farm 12
1.4
Distributed Setup 13
1.5
Monitoring 16
Endpoint Checks 16 • Common Checks 17 • Other Checks 18
2
2.1
File System Overview 20
Configuration Files 20
Front-end Configuration 20 • Back-end Configuration 29
2.2
Log Files 50
Front-end 50 • Back-end 50
2.3
/srv/obs Tree 51
build Directory 51 • cloudupload Directory 52 • db
Directory 52 • diffcache Directory 52 • events
Directory 52 • info Directory 53 • jobs Directory 53 • log
Directory 53 • projects Directory 53 • remotecache
Directory 53 • repos Directory 53 • repos_sync
Directory 53 • run Directory 54 • sources Directory 54 • trees
Directory 54 • upload Directory 54 • workers Directory 54
iii
Administrator Guide
2.4
Metadata 55
OBS Revision Control 55 • Project Metadata 56 • Package
Metadata 58 • Attribute Metadata 58 • Job Files 59
3
3.1
Administration 61
Tools 61
obs_admin 61 • osc 64
3.2
Managing Build Targets 67
Interconnect 67 • Importing Distributions 68
3.3
Source Services 71
Using Services for Validation 72 • Dierent Modes When Using
Services 72 • Storage of Source Service Definitions 73 • Dropping a
Source Service Again 74
3.4
Dispatch Priorities 74
The /build/_dispatchprios API Call 75 • dispatch_adjust Array 76
3.5
Publisher Hooks 77
Configuring Publisher Hooks 77 • Example Publisher Scripts 79
3.6
Unpublisher Hooks 80
Configuring Unpublisher Hooks 81 • Example Unpublisher Scripts 82
3.7
Managing Users and Groups 84
User and Group Roles 84 • Standalone User and Group
Database 84 • Proxy Mode 85 • LDAP/Active
Directory 86 • Authentication Methods 92
3.8
Message Bus for Event Notifications 94
RabbitMQ 94
3.9
3.10
4
iv
Backup 100
Spider Identification 100
Troubleshooting 102
4.1
General Hints 102
4.2
Debugging Front-end Problems 103
Administrator Guide
A
v
GNU Licenses 104
A.1
GNU General Public License 104
A.2
GNU Free Documentation License 106
Administrator Guide
About this Guide
This guide is part of the Open Build Service documentation. These books are considered to
contain only reviewed content, establishing the reference documentation of OBS.
This guide does not focus on a specic OBS version. It is also not a replacement of the
documentation inside of the openSUSE Wiki (https://en.opensuse.org/Portal:Build_Service) .
However, content from the wiki may be included in these books in a consolidated form.
1 Available Documentation
The following documentation is available for OBS:
Administrator Guide
This guide oers information about the initial setup and maintenance for running Open
Build Service instances.
Article “Beginnerʼs Guide”
This guide describes basic workows for working with packages on Open Build Service.
This includes checking out a package from an upstream project, creating patches,
branching a repository, and more.
Book “Best Practice Guide”
This guide oers step-by-step instructions for the most common features of the Open Build
Service and the openSUSE Build Service.
Book “Reference Guide”
This guide covers ideas and motivations, concepts and processes of the Open Build Service
and also covers administration topics.
Book “User Guide”
This guide is intended for users and developers who want to dig deeper into Open Build
Service. It contains information on backgrounds, setting up your computer for working
with OBS, and usage scenarios.
vi
Available Documentation
2 Feedback
Several feedback channels are available:
Bugs and Enhancement Requests
Help for openSUSE is provided by the community. Refer to https://en.opensuse.org/
Portal:Support
for more information.
Bug Reports
To report bugs for Open Build Service, go to https://bugzilla.opensuse.org/ , log in, and
click New.
Mail
For feedback on the documentation of this product, you can also send a mail to doc-
team@suse.com . Make sure to include the document title, the product version and the
publication date of the documentation. To report errors or suggest enhancements, provide
a concise description of the problem and refer to the respective section number and page
(or URL).
3 Documentation Conventions
The following notices and typographical conventions are used in this documentation:
/etc/passwd : directory names and le names
PLACEHOLDER : replace PLACEHOLDER with the actual value
PATH : the environment variable PATH
ls , --help : commands, options, and parameters
user : users or groups
package name : name of a package
Alt
,
Alt
– F1 : a key to press or a key combination; keys are shown in uppercase as on
a keyboard
File, File Save As: menu items, buttons
Dancing Penguins (Chapter Penguins, ↑Another Manual): This is a reference to a chapter in
another manual.
vii
Feedback
Commands that must be run with root privileges. Often you can also prex these
commands with the sudo command to run them as non-privileged user.
root # command
geeko > sudo command
Commands that can be run by non-privileged users.
geeko > command
Notices
Warning: Warning Notice
Vital information you must be aware of before proceeding. Warns you about security
issues, potential loss of data, damage to hardware, or physical hazards.
Important: Important Notice
Important information you should be aware of before proceeding.
Note: Note Notice
Additional information, for example about dierences in software versions.
Tip: Tip Notice
Helpful information, like a guideline or a piece of practical advice.
4 Contributing to the Documentation
The OBS documentation is written by the community. And you can help too!
Especially as an advanced user or an administrator of OBS, there will be many topics where
you can pitch in even if your English is not the most polished. Conversely, if you are not very
experienced with OBS but your English is good: We rely on community editors to improve the
language.
viii
Contributing to the Documentation
This guide is written in DocBook XML which can be converted to HTML or PDF documentation.
To clone the source of this guide, use Git:
git clone https://github.com/openSUSE/obs-docu.git
To learn how to validate and generate the OBS documentation, see the le README .
To submit changes, use GitHub pull requests:
1. Fork your own copy of the repository.
2. Commit your changes into the forked repository.
3. Create a pull request. This can be done at https://github.com/openSUSE/obs-docu
.
It is even possible to host instance-specic content in the ocial Git repository, but it
needs to be tagged correctly. For example, parts of this documentation are tagged as . In this case, the paragraph will only become visible when creating the
openSUSE version of a guide.
ix
Contributing to the Documentation
1 Installation and Configuration
1.1 Planning
For testing an own OBS instance and for small setups like only packaging some scripts from
your administrators into RPMS and creating proper installation sources from them, the ready
to use obs-server appliance images are the easiest way. You can download them from http://
openbuildservice.org/download/
.
To use the OBS for your Linux software development with many packages, projects and users,
consider setting up an own installation. Depending on the number of users, projects, and
architectures, you can split up the back-end (called partitioning) and have separate hosts for
the front-end and the database.
But for most installations it is still OK to run everything but workers one host with enough
resources.
For exibility and if you want some kind of high availability it is recommended to use
virtualization for the dierent components.
1.1.1
Resource Planning
Normally for a small to middle installation a setup with everything except workers on one host
is sucient. You should have separate /srv volume for the back-end data, XFS as le system
is best choice.
For each scheduler architecture you should add 4 GB RAM and one CPU core. For each build
distribution you should add at least 50GB disk space per architecture.
A medium instance with about 50 users can easily run on a machine with 16GB RAM 4 cores
and 1 TB storage. The storage of course depend on the size of your projects and how often you
have new versions.
For bigger installations you can use separate networks for back-end communication, workers
and front-end.
1
Planning
The reference installation on build.opensuse.org with lot of users, distributions runs on a
partitioned setup with:
a mysql cluster as database
api-server: 16GB RAM 4 cores 50GB disk
separate binary back-ends (scheduler, dispatcher, reposerver, publisher, warden)
source server 11 GB RAM, 4 cores, 3 TB disk (RAM used mainly for caching)
main back-end: 62 GB RAM (oversized), 16TB disk
lot of workers (see - https://build.opensuse.org/monitor )
For build time and performance the count and performance of available worker hosts more
important as the remaining parts.
1.2 Simple Installation
Simple installation means, all OBS services running on the same machine.
Important
It is very important that you read the README.SETUP le coming with your OBS version
and follow the instructions there, because here maybe changes to this version.
Before you start the installation of the OBS, you should make sure that your hosts have the
correct fully qualied hostname and DNS is working and can resolve all names.
1.2.1
Back-end Installation
The back-end hosts all sources and built packages. It also schedules the jobs. You need to install
the "obs-server" package for this. You need to check the /usr/lib/obs/server/BSCong.pm le,
but the defaults should be good enough for the simple case.
You can control the dierent back-end components via systemctl. Basically you can enable/
disable the service during booting the system and start/stop/restart it in a running system. For
more information, have a look at the systemctl man page (https://www.freedesktop.org/software/
systemd/man/systemctl.html#Commands)
2
. For example, to restart the repository server use
Simple Installation
systemctl restart obsrepserver.service
TABLE 1.1: SERVICE NAMES
Component
Service Name
Source Server
obssrcserver.service
Repository
Server obsrepserver.service
Source
Services obsservice.service
Download
obsdodup.service
since 2.7
Delta Storage
obsdeltastore.service
since 2.7
Scheduler
obsscheduler.service
Dispatcher
obsdispatcher.service
Publisher
obspublisher.service
Signer
obssigner.service
Warden
obswarden.service
Cloud upload
obsclouduploadworker.service
worker
Cloud upload
server
Remarks
Only needed
for cloud
upload feature
obsclouduploadserve.service
Only needed
for cloud
upload feature
The sequence in the table reects the start sequence, you need to enable the services with
systemctl start
rst and then you can start them:
systemctl start obssrcserver.service
systemctl start obsrepserver.service
systemctl start obsservice.service
3
Back-end Installation
systemctl start obsdodup.service
systemctl start obsdeltastore.service
systemctl start obsscheduler.service
systemctl start obsdispatcher.service
systemctl start obspublisher.service
systemctl start obssigner.service
systemctl start obswarden.service
systemctl start obsclouduploadworker.service
systemctl start obsclouduploadserver.service
Warning
The commands start services which are accessible from the outside. Do not do this on a
system connected to an untrusted network or make sure to block the ports with a rewall.
1.2.1.1
Cloud Upload Setup
In order to setup the Cloud Upload feature you will need to congure the tools required per each
cloud provider. Right now we only support the AWS Amazon Cloud (https://aws.amazon.com )
and Microsoft Azure (https://portal.azure.com ) as providers.
1.2.1.1.1
Server setup
Before you can start uploading images to the Amazon Web Services (AWS) you have to:
1. Install the obs-cloud-uploader package
zypper in obs-cloud-uploader
2. Start the cloud upload services
rcobsclouduploadworker start
rcobsclouduploadserver start
At last you have to register the cloud uploader service in /usr/lib/obs/server/BSCong.pm, eg.
by adding following line:
our $clouduploadserver = "http://$hostname:5452";
Read more about conguring the backend in Section 1.4, “Distributed Setup”.
4
Back-end Installation
Warning
Ensure that the system time of your cloud uploader instance is correct. AWS is relying
on the timestamps of the requests it receives. Having an incorrect system time will cause
cloud uploads to fail.
1.2.1.1.2
1.2.1.1.2.1
AWS Amazon Cloud
Authentication Workflow
We are going to use the role based authentication provided by Amazon to enable the OBS
instance to upload images to other user's accounts.
The users will obtain an external ID (automatically created and unique) and the OBS account
ID to create an Identity and Access Management (IAM) role. After the user created the role, he
needs to provide the Amazon Resource Name (ARN) of the role to OBS. OBS will use this ARN
to obtain temporary credentials, therefore an uploader account is necessary which we need to
congure (see AWS authentication credentials setup). OBS will use the ARN to obtain temporary
credentials for the users account to upload the appliance. The ARN and the external ID are not
considered as a secret.
The whole workow is described in the AWS documentation (https://docs.aws.amazon.com/IAM/
latest/UserGuide/id_roles_create_for-user_externalid.html)
1.2.1.1.2.2
.
Credentials Setup
For uploading images to AWS, OBS is using the AWS CLI (https://aws.amazon.com/cli)
tool.
Before you can start uploading your images, you have to enter the AWS credentials to the
/etc/obs/cloudupload/.aws/credentials conguration le. These credentials will then be
used by OBS to retrieve the temporary credentials from the ARN provided by users. More
information about IAM role base authorization can be found in the Amazon documentation
(https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html)
5
).
Back-end Installation
1.2.1.1.3
Microsoft Azure
1.2.1.1.3.1
Authentication Workflow
The authentication is done via Microsoft's Active Directory. The user has to create a new
application and needs to provide those two credentials to OBS:
1. Application ID
The Application ID is a unique ID that represents an Active Directory Application.
2. Application Key
The Application Key can be generated for every application and is the password.
OBS communicates with the REST API of Microsoft Azure to authenticate and upload images.
1.2.1.1.3.2
Configuration
The Application ID and the Application Key will be stored encrypted in the database. As for
that, it's required to generate an SSL secret and public key that has to be stored on the server
where the obs-cloud-uploader package has been installed.
To generate that SSL certicate, execute the following commands:
cd /etc/obs/cloudupload
openssl genrsa -out secret.pem
openssl rsa -in secret.pem -out _pubkey -outform PEM -pubout
1.2.1.1.3.3
Credentials setup
It's important that the public key is named _pubkey and the secret key is named secret.pem
and are kept in /etc/obs/cloudupload.
1.2.2
Front-end Installation
You need to install the "obs-api" package for this and a MySQL server.
6
Front-end Installation
1.2.2.1
MySQL Setup
Make sure that the mysql server is started on every system reboot (use "insserv mysql" for
permanent start). You should run mysql_secure_installation and follow the instructions.
Create the empty production databases:
# mysql -u root -p
mysql> create database api_production;
mysql> quit
Use a separate MySQL user (for example, obs ) for the OBS access:
# mysql -u root -p
mysql> create user 'obs'@'%' identified by 'TopSecretPassword';
mysql> create user 'obs'@'localhost' identified by 'TopSecretPassword';
mysql> GRANT all privileges ON api_production.*
TO 'obs'@'%', 'obs'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit
Congure your MySQL user and password in the "production" section of the api cong: /srv/
www/obs/api/cong/database.yml
Example:
# MySQL (default setup).
Versions 4.1 and 5.0 are recommended.
#
# Get the fast C bindings:
#
gem install mysql
#
(on OS X: gem install mysql -- --include=/usr/local/lib)
# And be sure to use new-style password hashing:
#
http://dev.mysql.com/doc/refman/5.0/en/old-client.html
production:
adapter: mysql2
database: api_production
username: obs
password: TopSecretPassword
encoding: utf8
timeout: 15
pool: 30
Now populate the database
cd /srv/www/obs/api/
7
Front-end Installation
sudo RAILS_ENV="production" rake db:setup
sudo RAILS_ENV="production" rake writeconfiguration
sudo chown -R wwwrun.www log tmp
Now you are done with the database setup.
1.2.2.2
Apache Setup
Now we need to congure the Web server. By default, you can reach the familiar web user
interface and also api both on port 443 speaking https. Repositories can be accessed via http
on port 82 (once some packages are built). An overview page about your OBS instance can be
found behind 'http://localhost'.
The obs-api package comes with an Apache vhost le, which does not need to get modied
when you stay with these defaults: /etc/apache2/vhosts.d/obs.conf
Install the required packages via
zypper in obs-api apache2 apache2-mod_xforward rubygem-passenger-apache2 memcached
Add the following Apache modules in /etc/sysconfig/apache2 :
APACHE_MODULES="... passenger rewrite proxy proxy_http xforward headers socache_shmcb"
Enable SSL in /etc/syscong/apache2 via
APACHE_SERVER_FLAGS="SSL"
For production systems you should order ocial SSL certicates. For testing follow the
instructions to create a self signed SSL certicate:
mkdir /srv/obs/certs
openssl genrsa -out /srv/obs/certs/server.key 1024
openssl req -new -key /srv/obs/certs/server.key \
-out /srv/obs/certs/server.csr
openssl x509 -req -days 365 -in /srv/obs/certs/server.csr \
-signkey /srv/obs/certs/server.key -out /srv/obs/certs/server.crt
cat /srv/obs/certs/server.key /srv/obs/certs/server.crt \
> /srv/obs/certs/server.pem
To allow the usage of https API in Web UI code you need to trust your certicate as well:
cp /srv/obs/certs/server.pem /etc/ssl/certs/
8
Front-end Installation
c_rehash /etc/ssl/certs/
1.2.2.3
API Configuration
Check and edit /srv/www/obs/api/cong/options.yml
If you change the hostnames/ips of the api, you need to adjust frontend_host accordingly. If
you want to use LDAP, you need to change the LDAP settings as well. Look at the Section 3.7,
“Managing Users and Groups” for details. You will nd examples and more details in the Section 2.1,
“Configuration Files”.
It is recommended to enable
use_xforward: true
as well here.
Afterwards you can start the OBS web api and make it permanent via
systemctl enable apache2
systemctl start apache2
systemctl enable obsapidelayed.service
systemctl start obsapidelayed.service
systemctl enable memcached.service
systemctl start memcached.service
Now you have you own empty instance running and you can do some online conguration steps.
1.2.3
Online Configuration
To customize the OBS instance you may need to congure some settings via the OBS API and
Web user interface.
First you should change the password of the Admin account, for this you need rst login as user
Admin in the Web UI with the default password "opensuse". Click on the Admin link (right top
of the page), here you can change the password.
After changing the Admin password, set up osc to use the Admin account for more changes.
Here an example:
osc -c ~/.obsadmin_osc.rc -A https://api.testobs.org
Follow the instructions on the terminal.
9
Online Configuration
Warning
The password is stored in clear text in this le by default, so you need to give this le
restrictive access rights, only read/write access for your user should be allowed. osc
allows to store the password in other ways (in keyrings for example), refer to the osc
documentation for this.
Now you can check out the main conguration of the OBS:
osc -c ~/.obsadmin_osc.rc api /configuration >/tmp/obs.config
cat /tmp/obs.config
Open Build Service
<p class="description">
The <a href="http://openbuildservice.org"> Open Build Service (OBS)</a>
is an open and complete distribution development platform that provides a
transparent
infrastructure for development of Linux distributions, used by openSUSE, MeeGo
and other distributions.
Supporting also Fedora, Debian, Ubuntu, RedHat and other Linux distributions.
</p>
<p class="description">
The OBS is developed under the umbrella of the <a href="http://
www.opensuse.org">openSUSE project<
/a>. Please find further informations on the <
a href="http://wiki.opensuse.org/openSUSE:Build_Service">openSUSE Project wiki
pages</a>.
</p>
<p class="description">
The Open Build Service developer team is greeting you. In case you use your OBS
productive
in your facility, please do us a favor and add yourself at <
a href="http://wiki.opensuse.org/openSUSE:Build_Service_installations">
this wiki page</a>. Have fun and fast build times!
</p>
private
on
off
on
allow
off
on
10
Online Configuration
off
on
off
on
on
on
unconfigured@openbuildservice.org
^home:.+
home projects
unlisted_projects_filter_description>
armv7l
i586
x86_64
Important
unlisted_projects_lter only admit Regular Expression (see RLIKE specications of
MySQL/MariaDB for more information) and unlisted_projects_lter_description is part
of the link shown in the project list for ltering
You should edit this le according to your preferences, then sent it back to the server:
osc -c ~/.obsadmin_osc.rc api /configuration -T /tmp/obs.config
If you want to use an interconnect to another OBS instance to reuse the build targets you can
do this as Admin via the Web UI or create a project with a remoteurl tag (see Section 2.4.2,
“Project Metadata”)
openSUSE.org Project
This project refers to projects hosted on the Build Service
[...]
Use openSUSE.org:openSUSE:12.3 for example to build against the
openSUSE:12.3 project as specified on the opensuse.org Build Service.
https://api.opensuse.org/public
11
Online Configuration
You can create the project using a le with the above content with osc like this:
osc -c ~/.obsadmin_osc.rc meta prj openSUSE.org -F /tmp/openSUSE.org.meta
You also can import binary distribution, see Section 3.2.2, “Importing Distributions” for this.
The OBS has a list of available distributions used for build. This list is displayed to user, if they
are adding repositories to their projects. This list can be managed via the API path /distributions
osc -c ~/.obsadmin_osc.rc api /distributions > /tmp/distributions.xml
Example distributions.xml le:
SLE-12-SP1
SUSE:SLE-12-SP1
SLE-12-SP1
standard
http://www.suse.com/
x86_64
You can add your own distributions here and update the list on the server:
osc -c ~/.obsadmin_osc.rc api /distributions -T /tmp/distributions.xml
1.3 Worker Farm
To not burden your OBS back-end daemons with the unpredictable load package builds can
produce (think someone builds a monstrous package like LibreOce) you should not run OBS
workers on the same host as the rest of the back-end daemons.
12
Worker Farm
Important
You back-end need to be congured to use the correct hostnames for the repo and source
server and the ports need to be reachable by the workers. Also, the IP addresses of the
workers need to be allowed to connect the services. (look at the /usr/lib/obs/server/
BSCong.pm::ipaccess array).
You can deploy workers quite simply using the worker appliance. Or install a minimum system
plus the obs-worker package on the hardware.
Edit the /etc/syscong/obs-server le, at least OBS_SRC_SERVER, OBS_REPO_SERVERS and
OBS_WORKER_INSTANCES need to be set. More details in the Section 2.1, “Configuration Files”.
start the worker:
systemctl enable obsworker
systemctl start obsworker
1.4 Distributed Setup
All OBS back-end daemons can also be started on individual machines in your network. Also,
the front-end Web server and the MySQL server can run on dierent machines. Especially for
large scale OBS installations this is the recommended setup.
A setup with partitioning is very similar to the steps of the simple setup. Here we are only
mention the dierences to the simple setup.
Note
You need to make sure that the dierent machines can communicate via the network, it
is very recommended to use a separate network for this to isolate it from the public part.
On all back-end hosts you need to install the obs-server package. On the front-end host you need
to install the obs-api package.
Important
Only one source server instance can be exist on a single OBS installation.
13
Distributed Setup
The binary back-end can be split on project level, this is called partitioning.
On one partition following services needs to be congured and run:
1. repserver
2. schedulers
3. dispatcher
4. warden
5. publisher
You do not need to share any directories on File System level between the partitions.
Here some example for partitioning:
1. A main partition for everything not in the others (host mainbackend)
2. A home partition for all home projects of the users (host homebackend)
3. A release partition for released software projects (host releasebackend)
The conguration is done in the back-end cong le /usr/lib/obs/server/BSCong.pm. Most
parts of the le can be shared between the back-ends.
Here the important parts of the mainbackend of out testobs.org installation:
[...]
my $hostname = Net::Domain::hostfqdn() || 'localhost';
# IP corresponding to hostname (only used for $ipaccess); fallback to localhost since
inet_aton may fail to resolve at shutdown.
my $ip = quotemeta inet_ntoa(inet_aton($hostname) || inet_aton("localhost"));
my $frontend = 'api.testobs.org'; # FQDN of the Web UI/API server if it's not $hostname
# If defined, restrict access to the backend servers (bs_repserver, bs_srcserver,
bs_service)
our $ipaccess = {
'127\..*' => 'rw', # only the localhost can write to the backend
"^$ip" => 'rw',
# Permit IP of FQDN
"10.20.1.100" => 'rw',
# Permit IP of srcsrv.testobs.org
"10.20.1.101" => 'rw',
# Permit IP of mainbackend.testobs.org
"10.20.1.102" => 'rw',
# Permit IP of homebackend.testobs.org
"10.20.1.103" => 'rw',
# Permit IP of releasebackend.testobs.org
'10.20.2.*' => 'worker',
# build results can be delivered from any client in the
network
};
14
Distributed Setup
# IP of the Web UI/API Server (only used for $ipaccess)
if ($frontend) {
my $frontendip = quotemeta inet_ntoa(inet_aton($frontend) || inet_aton("localhost"));
$ipaccess->{$frontendip} = 'rw' ; # in dotted.quad format
}
# also change the SLP reg files in /etc/slp.reg.d/ when you touch hostname or port
our $srcserver = "http://srcsrv.testobs.org:5352";
our $reposerver = "http://mainbackend.testobs.org:5252";
our $serviceserver = "http://service.testobs.org:5152";
# Needed if you want to use the cloud upload feature
our $clouduploadserver = "http://$hostname:5452";
#
our @reposervers = ("
http://mainbackend.testobs.org:5252,
http://homebackend.testobs.org:5252,
http://releasebackend.testobs.org:5252
");
# you can use different ports for worker connections
our $workersrcserver = "http://w-srcsrv.testobs.org:5353";
our $workerreposerver = "http://w-mainbackend.testobs.org:5253";
[...]
our $partition = 'main';
#
# this defines how the projects are split. All home: projects are hosted
# on an own server in this example. Order is important.
our $partitioning = [
'home:' => 'home',
'release' => 'release'
'.*'
=> 'main',
];
our $partitionservers = {
'home' => 'http://homebackend.testobs.org:5252',
'release' => 'http://releasebackend.testobs.org:5252',
'main' => 'http://mainbackend.testobs.org:5252',
};
[...]
On the other partition server you need to change "our $reposerver", "our $workerreposerver"
and "our $partition".
On all partition servers you need to start:
systemctl start obsrepserver.service
15
Distributed Setup
systemctl start obsscheduler.service
systemctl start obsdispatcher.service
systemctl start obspublisher.service
systemctl start obswarden.service
On the worker machines you should set of repo servers in the OBS_REPO_SERVERS variable.
You can also dene workers with a subset of the repo servers to prioritize partitions.
1.5 Monitoring
In this chapter you will nd some general monitoring instructions for the Open Build Service. All
examples are based on Nagios plugins, but the information provided should be easily adaptable
for other monitoring solutions.
1.5.1
1.5.1.1
Endpoint Checks
HTTP Checks: Checking Whether the HTTP Server Responds
This check will output a critical if the HTTP server with ip address 172.19.19.19 (-I
172.19.19.19) listening on port 80 (-p 80) does not answer and output a warning if the HTTP
return code is not 200. The server name that will be used is server (-H server) which is important
if dierent virtual hosts are listening on the same port.
check_http -H server -I 172.19.19.19 -p 80 -u http://server
The same check, but this time it will check a ssl enabled HTTP server.
check_http -S -H server -I 172.19.19.19 -p 443 -u https://server
It is also possible to check the presence of a certain string in the HTTP response. In this case it
will check for the string Source Service Server.
check_http -s "Source Service Server" -S -H server -I 172.19.19.19 -p 5152
Open Build Service HTTP endpoints that should be checked:
1. Web Interface / API: port 443
2. Repository Server: port 82
16
Monitoring
3. Package Repository Server: port 5252
4. Source Repository Server: port 5352
5. Source Service Server: port 5152
6. Cloud Upload Server: port 5452
1.5.2
Common Checks
This is a list of common checks that should be run on each individual server.
1.5.2.1
Disk Space: Checking Available Disk Space
This check will output a warning if less than 10 percent disk space is available (-w 10) and
output a critical if less than 5 percent disk space are available (-c 5). It will check all le systems
except le systems with type none (-x none).
check_disk -w 10 -c 5 -x none
1.5.2.2
Memory Usage: Checking Available Memory
This check will output a warning if less than 10 percent memory is available (-w 10) and output
a critical if less than 5 percent memory is available (-c 5). OS caches will be counted as free
memory (-C) and it will check the available memory (-f). check_mem.pl is not a standard Nagios
plugin and can be downloaded at https://exchange.nagios.org/ .
check_mem.pl -f -C -w 10 -c 5
1.5.2.3
NTP: Checking Date and Time
This check will compare the local time with the time provided by the NTP server pool.ntp.org
(-H pool.ntp.org). It will output a warning if the time diers by 0.5 seconds (-w 0.5) and output
a critical if the time diers by 1 seconds (-c 1).
check_ntp_time -H pool.ntp.org -w 0.5 -c 1
17
Common Checks
1.5.2.4
Ping: Checking That the Server Is Alive
This plugin checks if the server responds to a ping request and it will output a warning if the
respond time exceeds 200ms or 30 percent package loss (-w 200.0,30%) and output a critical if
the respond time exceeds 500ms or 60 percent package loss.
check_icmp -H server -w 200.0,30% -c 500.0,60%
1.5.2.5
Load: Checking the Load on the Server
This check will output a warning if the load value exceeded 7.0 in the last minute, 6.0 in the
last 5 minutes or 5.0 in the last 15 minutes (-w 7.0,6.0,5.0). It will output a critical if the load
value exceeded 12.0 in the last minute, 8.0 in the last 5 minutes or 6.0 in the last 15 minutes
(-c 12.0,8.0,6.0).
check_load -w 7.0,6.0,5.0 -c 12.0,8.0,6.0
1.5.2.6
Disk Health: Checking the Health of Local Hard Disks
This check is only relevant on physical systems with local storage attached to it. It will check the
disk status utilizing the S.M.A.R.T interface and it will output a critical if any of the S.M.A.R.T
values exceeds critical limits. check_smartmon is not a standard Nagios plugin and can be
downloaded at https://exchange.nagios.org/ .
check_smartmon --drive /dev/sda --drive /dev/sdb
1.5.3
1.5.3.1
Other Checks
MySQL: Checking That the MySQL Database Is Responding
This check will check that the MySQL database server is running and that the database
api_production is available.
check_mysql -H localhost -u nagios -p xxxxxx -d api_production
18
Other Checks
MySQL Databases to check:
1. api_production
2. mysql
1.5.3.2
Backup Status: Checking That a Valid Backup Is Available
It is always advisable to check that the last backup run was successful and a recent backup is
available. The check itself depends on the Backup solution that is used.
19
Other Checks
2 File System Overview
2.1 Configuration Files
2.1.1
Front-end Configuration
The front-end is congured with 4 les:
/srv/www/obs/api/cong/database.yml
/srv/www/obs/api/cong/options.yml
/srv/www/obs/api/cong/feature.yml
/etc/apache2/vhosts.d/obs.conf
2.1.1.1
database.yml
This le has the information needed to access the database. It contain credentials for the database
access and should be only readable by root and the group running the Web server (www).
The le has settings for the production, development and test ruby environment, for production
systems only the production section is important.
Example production section
production:
adapter: mysql2
database: api_production
username: obsapiuser
password: topsecret
encoding: utf8
timeout: 15
pool: 30
TABLE 2.1: DATABASE CONFIGURATION KEYWORDS
keyword
Description
Remarks
adapter
Database driver
only mysql databases are supported
database
Database name
do not change !
20
Configuration Files
keyword
Description
Remarks
username
mysql user name
database user, not a system user
password
password for this user
clear text
encoding
codetable
timeout
wait time in milliseconds
pool
number of open connections
socket
path to the mysql socket
host
IP address or hostname of the for remote servers
port
port number of the mysql
per thread
same host only
mysql server
server
2.1.1.2
for remote servers
options.yml
The conguration le /srv/www/obs/api/cong/options.yml is the default conguration le
for the Open Build Service Web UI and API. It contains conguration parameters for example
for back-end connections and connection to the API. Important are the congurations for source
and front-end hosts. The conguration for LDAP authentication is also located in this le.
Conguration options can be set per Rails environment (https://guides.rubyonrails.org/
configuring.html#rails-environment-settings)
default.
or as generic conguration option dened in
Note
We've updated the format of the options.yml after the release of OBS 2.9. Old conguration
les can be converted via
(cd /srv/www/obs/api/; rake migrate_options_yml)
21
Front-end Configuration
Note
More and more congurations will be moved to the database and do not longer exist in
this le. The database conguration can be accessed via the API /conguration path.
TABLE 2.2: options.yml CONFIGURATION ITEMS
Cong item
Description
Values default
Remarks
use_xforward
Use mod_xforward
true false
Apache only, should
use_nginx_redirect
Use X-Accel-Redirect
/
Nginx only
module
be true
internal_redirect
min_votes_for_rating
Minimum votes for a
rating
response_schema_validationSet to true to verify
XML responses
integer 3
true false
test/debug option
comply to the schema
source_host
back-end source
localhost
source_port
back-end source
integer 5352
source_protocol
back-end source
http , https
front end_host
Front-end host
localhost
frontend_port
Front-end port
integer 443
frontend_protocol
Front-end protocol
http https
22
server host
server port
server protocol
Front-end Configuration
Cong item
Description
external_frontend_host
External Front-end
Values default
Remarks
if your users access
host
the hosts through a
proxy or dierent
name
external_frontend_port
External Front-end
integer 443
external_frontend_protocol External Front-end
http https
extended_backend_log
Extended back-end
true false
test/debug option
proxy_auth_mode:
turn proxy mode on/
:off :on
see LDAP section
proxy_auth_test_user
Test user
coolguy
test/debug option
proxy_auth_test_email
Email of Test user
coolguy@
test/debug option
port
protocol
log
o
example.com
global_write_through
if set to false, the API
will only fake writes
true false
test/debug option
30
moved to /
to back-end
auto_cleanup_after_days
not longer used
errbit_api_key
API key of the
test/debug option
errbit_host
installation of
test/debug option
application
errbit.com a Ruby
conguration API
error catcher
23
Front-end Configuration
Cong item
Description
errbit_api_key
API key of the
ldap_mode:
OBS LDAP mode on/
Values default
test/debug option
application
o
Remarks
:off :on
see LDAP section
Example options.yml
#
# This file contains the default configuration of the Open Build Service
# API.
#
default: &default
# Make use of mod_xforward module in apache
use_xforward: true
# Make use of X-Accel-Redirect for Nginx.
# http://kovyrin.net/2010/07/24/nginx-fu-x-accel-redirect-remote
#use_nginx_redirect: /internal_redirect
# Minimum count of rating votes a project/package needs to # be taken in
# account
# for global statistics:
min_votes_for_rating: 3
# Set to true to verify XML reponses comply to the schema
response_schema_validation: false
# backend source server
source_host: localhost
source_port: 5352
#source_protocol: https
# api access to this instance
frontend_host: localhost
frontend_port: 443
frontend_protocol: https
# if your users access the hosts through a proxy (or just a different name,
# use this to
# overwrite the settings for users)
#external_frontend_host: api.opensuse.org
#external_frontend_port: 443
#external_frontend_protocol: https
24
Front-end Configuration
extended_backend_log: true
# proxy_auth_mode can be :off, :on or :simulate
proxy_auth_mode: :off
# ATTENTION: If proxy_auth_mode'is :on, the frontend takes the user
# name that is coming as headervalue X-username as a
# valid user does no further authentication. So take care...
proxy_auth_test_user: coolguy
proxy_auth_test_email: coolguy@example.com
# set this to enable auto cleanup requests after the given days
auto_cleanup_after_days: 30
#schema_location
#version
# if set to false, the API will only fake writes to backend (useful in
# testing)
# global_write_through: true
# see
# http://colszowka.heroku.com/2011/02/22/setting-up-your-custom-hoptoad-notifierendpoint-for-free-using-errbit-on-heroku
#errbit_api_key: api_key_of_your_app
#errbit_host: installation.of.errbit.com
production:
<<: *default
test:
<<: *default
source_host: backend
memcached_host: cache
development:
<<: *default
source_host: backend
memcached_host: cache
25
Front-end Configuration
2.1.1.3
feature.yml
The conguration le /srv/www/obs/api/cong/feature.yml contains the default conguration
about features that can be enabled or disabled in Open Build Service.
TABLE 2.3: feature.yml CONFIGURATION ITEMS
Cong item
Description
Values default
Remarks
image_templates
enable/disable image
true false
see Reference Guide
kiwi_image_editor
enable/disable Kiwi
true false
cloud_upload
enable/disable Cloud
true false
template feature
Image Editor
Upload setup
for more information
Example feature.yml
production:
features: &default
image_templates: true
kiwi_image_editor: false
cloud_upload: false
development:
features:
<<: *default
kiwi_image_editor: true
cloud_upload: true
test:
features:
<<: *default
kiwi_image_editor: true
cloud_upload: true
2.1.1.4
Apache Virtual Host obs.conf
The Apache conguration depends on the Apache version and which extra options are used, so
use the documentation of the Apache version you are using.
26
Front-end Configuration
Here, as an example, the standard conguration used by the appliance: Apache vhost example
Listen 82
# May needed on old distributions or after an update from them.
#Listen 443
# Passenger defaults
PassengerSpawnMethod "smart"
PassengerMaxPoolSize 20
#RailsEnv "development"
# allow long request urls and being part of headers
LimitRequestLine 20000
LimitRequestFieldsize 20000
# Just the overview page
# just give an overview about this OBS instance via static web page
DocumentRoot
"/srv/www/obs/overview"
Options Indexes
Require all granted
# Build Results
# The resulting repositories
DocumentRoot
"/srv/obs/repos"
Options Indexes FollowSymLinks
Require all granted
# OBS WEB UI & API
ServerName api
#
General setup for the virtual host
DocumentRoot
"/srv/www/obs/api/public"
ErrorLog /srv/www/obs/api/log/apache_error.log
TransferLog /srv/www/obs/api/log/apache_access.log
27
Front-end Configuration
PassengerMinInstances 2
PassengerPreStart https://api
SSLEngine on
#
SSL protocols
#
Supporting TLS only is adequate nowadays
SSLProtocol all -SSLv2 -SSLv3
#
SSL Cipher Suite:
#
List the ciphers that the client is permitted to negotiate.
#
We disable weak ciphers by default.
#
See the mod_ssl documentation or "openssl ciphers -v" for a
#
complete list.
SSLCipherSuite ALL:!aNULL:!eNULL:!SSLv2:!LOW:!EXP:!MD5:@STRENGTH
SSLCertificateFile /srv/obs/certs/server.crt
SSLCertificateKeyFile /srv/obs/certs/server.key
AllowOverride all
Options -MultiViews
# This requires mod_xforward loaded in apache
# Enable the usage via options.yml
# This will decrease the load due to long running requests a lot (unloading
from rails stack)
XForward on
Require all granted
SetEnvIf User-Agent ".*MSIE [1-5].*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog /var/log/apache2/ssl_request_log
ssl_combined
# from http://guides.rubyonrails.org/asset_pipeline.html
Header unset ETag
FileETag None
# RFC says only cache for 1 year
ExpiresActive On
ExpiresDefault "access plus 1 year"
28
Front-end Configuration
SetEnvIf User-Agent ".*MSIE [1-5].*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
## Older firefox versions needs this, otherwise it wont cache anything over SSL.
Header append Cache-Control "public"
2.1.2
Back-end Configuration
The Back-end is congured with 2 les:
/etc/syscong/obs-server - a shell script used for workers and the OBS start scripts
/usr/lib/obs/server/BSCong.pm - a perl script dening some global variables
2.1.2.1
/etc/sysconfig/obs-server
This script is used to set up the basic paths and the worker. the most important settings are the
OBS_SRC_SERVER and OBS_REPO_SERVERS and the OBS_WORKER_INSTANCES.
TABLE 2.4: obs-server VARIABLES
Variable
Description
Values default
OBS_BACKENDCODE_DIR
Path to the back-
/usr/lib/obs/
OBS_RUN_DIR
communication
/srv/obs/run
OBS_LOG_DIR
logging directory
/srv/obs/log
OBS_BASE_DIR
base directory
/srv/obs
OBS_API_AUTOSETUP
Automatically
yes no
end scripts
directory base
setup API and Web
UI
29
Remarks
server/
appliance only,
will overwrite
cong les
Back-end Configuration
Variable
Description
Values default
Remarks
OBS_SRC_SERVER
source server host
localhost:5352
only one
OBS_REPO_SERVERS
repository server
localhost:5252
maybe a list
OBS_WORKER_INSTANCES
number of build
integer 0
OBS_WORKER_INSTANCE
names of the
OBS_WORKER_DIRECTORY
worker base
OBS_WORKER_PORTBASE
The base for port
_NAMES
host
instances
space-separated
workers
list
directory
numbers used by
integer 0
worker
OBS_WORKER_JOBS
Number of parallel
integer 1
OBS_WORKER_TEST_MODE
Run in test mode
yes no
OBS_WORKER_HOST
one or more labels
OBS_USE_SLP
Register in SLP
OBS_CACHE_DIR
cache directory
LABELS
compile jobs
number
may used by
for the build host
server
0 OS assign
constraints
yes no
for downloaded
packages
OBS_CACHE_SIZE
package cache size
OBS_WORKER_NICE _LEVEL
nice level of
30
running workers
in MB
18
Back-end Configuration
Variable
Description
Values default
OBS_VM_TYPE
VM type
auto xen kvm lxc
Remarks
zvm emulator:
$arch none
OBS_VM_KERNEL
Set kernel used by
worker
none (/boot/
vmlinuz)
KVM option
OBS_VM_INITRD
initrd used by
worker
none (/boot/
vmlinuz)
KVM option
OBS_VM_DISK_AUTOSETUP
Autosetup disk size
4096
in MB
OBS_VM_DISK_AUTOSETUP
Autosetup swap
1024
on MB
OBS_VM_DISK_AUTOSETUP
File System used
ext3
OBS_VM_DISK_AUTOSETUP
Special mount
OBS_VM_USE_TMPFS
Enable build in
yes no
OBS_INSTANCE_MEMORY
Memory allocated
512
OBS_STORAGE_AUTOSETUP
storage auto
yes no
may destroy disk
OBS_SETUP_WORKER
LVM via
take_all
may destroy disk
OBS_WORKER_CACHE_SIZE
LVM partition for
_ROOT_FILESIZE
_SWAP_FILESIZE
_FILESYSTEM
_MOUNT_OPTIONS
_PARTITIONS
31
size
with autosetup
options
memory
for a VM
conguration
obsstoragesetup
use_obs_vg none
requires much
memory
content
content
cache size
Back-end Configuration
Variable
Description
OBS_WORKER_ROOT_SIZE
LVM partition for
OBS_WORKER_SWAP_SIZE
LVM partition for
OBS_WORKER_BINARIES
proxy service for
OBS_ROOT_SSHD_KEY_URL
ssh pub key to
_PROXY
Values default
root size
swap size
caching binaries
allow root user
login
OBS_WORKER_SCRIPT_URL
Remarks
for mass
deployment
URL to the initial
script
For workers the settings could be declared in the /etc/buildhost.cong le as well.
#
# NOTE: all these options can be also declared in /etc/buildhost.config on each worker
differently.
#
## Path:
Applications/OBS
## Description: The OBS backend code directory
## Type:
string
## Default:
""
## Config:
OBS
#
# An empty dir will lead to the fall back directory, typically /usr/lib/obs/server/
#
OBS_BACKENDCODE_DIR=""
## Path:
Applications/OBS
## Description: The base for OBS communication directory
## Type:
string
## Default:
""
## Config:
OBS
#
# An empty dir will lead to the fall back directory, typically /srv/obs/run
#
OBS_RUN_DIR="/srv/obs/run"
32
Back-end Configuration
## Path:
Applications/OBS
## Description: The base for OBS logging directory
## Type:
string
## Default:
""
## Config:
OBS
#
# An empty dir will lead to the fall back directory, typically /srv/obs/log
#
OBS_LOG_DIR="/srv/obs/log"
## Path:
Applications/OBS
## Description: The base directory for OBS
## Type:
string
## Default:
""
## Config:
OBS
#
# An empty dir will lead to the fall back directory, typically /srv/obs
#
OBS_BASE_DIR=""
## Path:
Applications/OBS
## Description: Automatically set up API and Web UI for OBS server, be warned, this will
replace config files!
## Type:
("yes" | "no")
## Default:
"no"
## Config:
OBS
#
# This is usally only enabled on the OBS Appliance
#
OBS_API_AUTOSETUP="yes"
#
# NOTE: all these options can be also declared in /etc/buildhost.config on each worker
differently.
#
## Path:
Applications/OBS
## Description: define source server host to be used
## Type:
string
## Default:
""
## Config:
OBS
#
# An empty setting will point to localhost:5352 by default
#
OBS_SRC_SERVER=""
## Path:
33
Applications/OBS
Back-end Configuration
## Description: define repository server host to be used
## Type:
string
## Default:
""
## Config:
OBS
#
# An empty setting will point to localhost:5252 by default
#
OBS_REPO_SERVERS=""
## Path:
Applications/OBS
## Description: define number of build instances
## Type:
integer
## Default:
0
## Config:
OBS
#
# 0 instances will automatically use the number of CPU's
#
OBS_WORKER_INSTANCES="0"
## Path:
Applications/OBS
## Description: define names of build instances for z/VM
## Type:
string
## Default:
""
## Config:
OBS
#
# The names of the workers as defined in z/VM. These must have two minidisks
# assigned, and have a secondary console configured to the local machine:
# 0150 is the root device
# 0250 is the swap device
#
#OBS_WORKER_INSTANCE_NAMES="LINUX075 LINUX076 LINUX077"
OBS_WORKER_INSTANCE_NAMES=""
## Path:
Applications/OBS
## Description: The base directory, where sub directories for each worker will get
created
## Type:
string
## Default:
""
## Config:
OBS
#
#
OBS_WORKER_DIRECTORY=""
## Path:
Applications/OBS
## Description: The base for port numbers used by worker instances
## Type:
integer
## Default:
"0"
34
Back-end Configuration
## Config:
OBS
#
# 0 means let the operating system assign a port number
#
OBS_WORKER_PORTBASE="0"
## Path:
Applications/OBS
## Description: Number of parallel compile jobs per worker
## Type:
integer
## Default:
"1"
## Config:
OBS
#
# this maps usually to "make -j1" during build
#
OBS_WORKER_JOBS="1"
## Path:
Applications/OBS
## Description: Run in test mode (build results will be ignore, no job blocking)
## Type:
("yes" | "")
## Default:
""
## Config:
OBS
#
OBS_WORKER_TEST_MODE=""
## Path:
Applications/OBS
## Description: define one or more labels for the build host.
## Type:
string
## Default:
""
## Config:
OBS
#
# A label can be used to build specific packages only on dedicated hosts.
# For example for benchmarking.
#
OBS_WORKER_HOSTLABELS=""
## Path:
Applications/OBS
## Description: Register in SLP server
## Type:
("yes" | "no")
## Default:
"yes"
## Config:
OBS
#
#
OBS_USE_SLP="yes"
## Path:
Applications/OBS
## Description: Use a common cache directory for downloaded packages
## Type:
35
string
Back-end Configuration
## Default:
""
## Config:
OBS
#
# Enable caching requires a given directory here. Be warned, content will be
# removed there !
#
OBS_CACHE_DIR=""
## Path:
Applications/OBS
## Description: Defines the package cache size
## Type:
size in MB
## Default:
""
## Config:
OBS
#
# Set the size to 50% of the maximum usable size of this partition
#
OBS_CACHE_SIZE=""
## Path:
Applications/OBS
## Description: Defines the nice level of running workers
## Type:
integer
## Default:
18
## Config:
OBS
#
# Nicenesses range from -20 (most favorable
scheduling) to 19 (least
# favorable).
# Default to 18 as some testsuites depend on being able to switch to
# one priority below (19) _and_ having changed the numeric level
# (so going from 19->19 makes them fail).
#
OBS_WORKER_NICE_LEVEL=18
## Path:
Applications/OBS
## Description: Set used VM type by worker
## Type:
("auto" | "xen" | "kvm" | "lxc" | "zvm" | "emulator:$arch" | "emulator:
$arch:$script" | "none")
## Default:
"auto"
## Config:
OBS
#
#
OBS_VM_TYPE="auto"
## Path:
Applications/OBS
## Description: Set kernel used by worker (kvm)
## Type:
("none" | "/boot/vmlinuz" | "/foo/bar/vmlinuz)
## Default:
"none"
## Config:
OBS
36
Back-end Configuration
#
# For z/VM this is normally /boot/image
#
OBS_VM_KERNEL="none"
## Path:
Applications/OBS
## Description: Set initrd used by worker (kvm)
## Type:
("none" | "/boot/initrd" | "/foo/bar/initrd-foo)
## Default:
"none"
## Config:
OBS
#
# for KVM, you have to create with (example for openSUSE 11.2):
#
# export rootfstype="ext4"
# mkinitrd -d /dev/null -m "ext4 binfmt_misc virtio_pci virtio_blk" -k
vmlinuz-2.6.31.12-0.2-default -i initrd-2.6.31.12-0.2-default-obs_worker
#
# a working initrd file which includes virtio and binfmt_misc for OBS in order to work
fine
#
# for z/VM, the build script will create a initrd at the given location if
# it does not yet exist.
#
OBS_VM_INITRD="none"
## Path:
Applications/OBS
## Description: Autosetup for XEN/KVM/TMPFS disk (root) - Filesize in MB
## Type:
integer
## Default:
"4096"
## Config:
OBS
#
#
OBS_VM_DISK_AUTOSETUP_ROOT_FILESIZE="4096"
## Path:
Applications/OBS
## Description: Autosetup for XEN/KVM disk (swap) - Filesize in MB
## Type:
integer
## Default:
"1024"
## Config:
OBS
#
#
OBS_VM_DISK_AUTOSETUP_SWAP_FILESIZE="1024"
## Path:
Applications/OBS
## Description: Filesystem to use for autosetup {none,ext4}=ext4, ext3=ext3
## Type:
string
## Default:
"ext3"
37
Back-end Configuration
## Config:
OBS
#
#
OBS_VM_DISK_AUTOSETUP_FILESYSTEM="ext3"
## Path:
Applications/OBS
## Description: Filesystem mount options to use for autosetup
## Type:
string
## Default:
""
## Config:
OBS
#
#
OBS_VM_DISK_AUTOSETUP_MOUNT_OPTIONS=""
## Path:
Applications/OBS
## Description: Enable build in memory
## Type:
("yes" | "")
## Default:
""
## Config:
OBS
#
# WARNING: this requires much memory!
#
OBS_VM_USE_TMPFS=""
## Path:
Applications/OBS
## Description: Memory allocated for each VM (512) if not set
## Type:
integer
## Default:
""
## Config:
OBS
#
#
OBS_INSTANCE_MEMORY=""
## Path:
Applications/OBS
## Description: Enable storage auto configuration
## Type:
("yes" | "")
## Default:
""
## Config:
OBS
#
# WARNING: this may destroy data on your hard disk !
# This is usually only used on mass deployed worker instances
#
OBS_STORAGE_AUTOSETUP="yes"
## Path:
Applications/OBS
## Description: Setup LVM via obsstoragesetup
## Type:
38
("take_all" | "use_obs_vg" | "none")
Back-end Configuration
## Default:
"use_obs_vg"
## Config:
OBS
#
# take_all: WARNING: all LVM partitions will be used and all data erased !
# use_obs_vg:
A lvm volume group named "OBS" will be re-setup for the workers.
#
OBS_SETUP_WORKER_PARTITIONS="use_obs_vg"
## Path:
Applications/OBS
## Description: Size in MB when creating LVM partition for cache partition
## Type:
integer
## Default:
""
## Config:
OBS
#
#
OBS_WORKER_CACHE_SIZE=""
## Path:
Applications/OBS
## Description: Size in MB when creating LVM partition for each worker root partition
## Type:
integer
## Default:
""
## Config:
OBS
#
#
OBS_WORKER_ROOT_SIZE=""
## Path:
Applications/OBS
## Description: Size in MB when creating LVM partition for each worker swap partition
## Type:
integer
## Default:
""
## Config:
OBS
#
#
OBS_WORKER_SWAP_SIZE=""
## Path:
Applications/OBS
## Description: URL to a proxy service for caching binaries used by worker
## Type:
string
## Default:
""
## Config:
OBS
#
#
OBS_WORKER_BINARIES_PROXY=""
## Path:
Applications/OBS
## Description: URL to a ssh pub key to allow root user login
## Type:
39
string
Back-end Configuration
## Default:
""
## Config:
OBS
#
# This is usually used on mass (PXE) deployed workers)
#
OBS_ROOT_SSHD_KEY_URL=""
## Path:
Applications/OBS
## Description: URL to a script to be downloaded and executed
## Type:
string
## Default:
""
## Config:
OBS
#
# This is a hook for doing special things in your setup at boot time
#
OBS_WORKER_SCRIPT_URL=""
2.1.2.2
BSConfig.pm
This le is a perl module used by most back-end scripts, it mainly denes global variables. Since
it is a perl module, after changes the back-end servers need to be restarted to become aware
of the changes.
Warning
If there is a Perl syntax error in this le, the services will not start. Most likely you forgot
the semicolon on the end of a statement.
TABLE 2.5: BSConfig.pm VARIABLES
Variable
Description
$hostname
FQDN of the back-
leave as it is
$ip
IP address of the
leave as it is
$frontend
FQDN of the front-
40
Values default
end host
back-end host
end host
undef
Remarks
set only if the front-
end runs on another
host
Back-end Configuration
Variable
Description
$ipaccess
Map of IP access
$srcserver
URL of the source
$reposerver
$serviceserver
Values default
Add all hosts if
rules
partition are used
'http://
server
$hostname: 5352'
URL of the repo
'http://
server
$hostname: 5252'
URL of the service
'http://
server
Remarks
partition specic
$hostname: 5152'
$workersrcserver
URL of the source
optional for worker
$workerreposerver
URL of the repo
optional for worker
$clouduploadserver
URL of the cloud
$servicedir
server
access
server
access
'http://
upload server
$hostname: 5452'
Path to the service
/usr/lib/obs/
scripts
service/
$servicetempdir
Path to service temp
/var/tmp/
$serviceroot
Prex to servicedir
$service_maxchild
Maximum number of
dir
concurrent jobs for
optional
optional
integer
unlimited if not set
source service
$gpg_standard_key
Path to the standard
$hermesserver
URL of the
41
sign key
notication server
optional
Back-end Configuration
Variable
Description
Values default
$hermesnamespace
Namespace for the
optional
$notication _plugin
notication plugins
optional
@reposervers
List of reposervers
notications
Remarks
("http://
$hostname: 5252")
$bsdir
Path to the back-end
/srv/obs
$bsuser
OS user running the
obsrun
$bsgroup
OS group running the
obsrun
$bsquotale
Package quota for
optional
$sched_asyncmode
Use asynchronous
Avoid issues with
directory
back-end
back-end
projects
scheduler
remote projects on
slow networks
$sched_startupmode
Cold start mode
$disable_data_sync
fdatasync
$rundir
back-end
$bsdir/run
$logdir
log directory
$bsdir/log
$nosharedtrees
Shared trees
01 2
communication
0=shared 1=not
shared 2=not shared
with fallback
42
0 12
may cause data
corruption
optional for non-ACL
systems, should be
set for access control
Back-end Configuration
Variable
Description
Values default
$packtrack
enable binary release
[]
$limit_projects
limit visibility of
tracking
Remarks
optional
projects for some
architectures
$relsync_pool
allow separation
of releasenumber
syncing per
architecture
$stageserver
stage server
rsync URI
$stageserver_sync
Extra stage sync
rsync URI
$sign
Path to sign script
$sign_project
call sign with --
$keyle
Global sign key
$localarch
Local architecture for
$buildlog_maxsize
worker max buildlog
'500 * 1000000'
in bytes
$buildlog_maxidle
Time with no
'8 * 3600'
in sec
'20 * 1000000'
current XEN has no
server
project
0 1
product building
size
changes in the
buildlog will kill the
job
$xenstore_maxsize
43
xenstore size
xenstore anymore
Back-end Configuration
Variable
Description
Values default
Remarks
$gettimeout
Max timeout for get
'1 * 3600'
in sec
$workerhostcheck
check script for
$powerhosts
Worker with more
obsolete use
$powerpkgs
packages which need
obsolete use
worker
resources
constraints
workers with more
constraints
resources
$norootexceptions
List of packages need
$old_style_services
Use old style source
$partition
Current partition
to build as root
service handling
0 1
see Section 1.4,
“Distributed Setup”
$partitioning
$partitionservers
$dispatch_adjust
Partition project
see Section 1.4,
mapping
“Distributed Setup”
Partition server
see Section 1.4,
mapping
“Distributed Setup”
Adjust dispatch
see Section 3.4.2,
priority
“dispatch_adjust
Array”
$publishedhook_use
_regex
$publishedhook
Use regular
expressions in
0 1
see Section 3.5,
“Publisher Hooks”
publish hook map
Publish hook map
see Section 3.5,
“Publisher Hooks”
44
Back-end Configuration
Variable
Description
Values default
Remarks
0 1
see Section 3.6,
$unpublishedhook_use Use regular
_regex
expressions in
$unpublishedhook
Unpublish hook map
“Unpublisher Hooks”
unpublish hook map
see Section 3.6,
“Unpublisher Hooks”
Example BSCong.pm
#
# Copyright (c) 2006, 2007 Michael Schroeder, Novell Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program (see the file COPYING); if not, write to the
# Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
################################################################
#
# Open Build Service Configuration
#
package BSConfig;
use Net::Domain;
use Socket;
my $hostname = Net::Domain::hostfqdn() || 'localhost';
# IP corresponding to hostname (only used for $ipaccess); fallback to localhost since
inet_aton may fail to resolve at shutdown.
my $ip = quotemeta inet_ntoa(inet_aton($hostname) || inet_aton("localhost"));
my $frontend = undef; # FQDN of the Web UI/API server if it's not $hostname
45
Back-end Configuration
# If defined, restrict access to the backend servers (bs_repserver, bs_srcserver,
bs_service)
our $ipaccess = {
'127\..*' => 'rw', # only the localhost can write to the backend
"^$ip" => 'rw',
# Permit IP of FQDN
'.*' => 'worker',
# build results can be delivered from any client in the network
};
# IP of the Web UI/API Server (only used for $ipaccess)
if ($frontend) {
my $frontendip = quotemeta inet_ntoa(inet_aton($frontend) || inet_aton("localhost"));
$ipaccess->{$frontendip} = 'rw' ; # in dotted.quad format
}
# Also change the SLP reg files in /etc/slp.reg.d/ when you touch hostname or port
our $srcserver = "http://$hostname:5352";
our $reposerver = "http://$hostname:5252";
our $serviceserver = "http://$hostname:5152";
# you can use different ports for worker connections
#our $workersrcserver = "http://$hostname:5353";
#our $workerreposerver = "http://$hostname:5253";
our $servicedir = "/usr/lib/obs/service/";
#our $servicetempdir = "/var/temp/";
#our $serviceroot = "/opt/obs/MyServiceSystem";
# Maximum number of concurrent jobs for source service
#our $service_maxchild = 20;
our $gpg_standard_key = "/srv/obs/obs-default-gpg.asc";
# optional notification service:
#our $hermesserver = "http://$hostname/hermes";
#our $hermesnamespace = "OBS";
#
# Notification Plugin, multiple plugins supported, separated by space
#our $notification_plugin = "notify_hermes notify_rabbitmq";
#
# For the workers only, it is possible to define multiple repository servers here.
# But only one source server is possible yet.
our @reposervers = ("http://$hostname:5252");
# Package defaults
our $bsdir = '/srv/obs';
our $bsuser = 'obsrun';
our $bsgroup = 'obsrun';
46
Back-end Configuration
#our $bsquotafile = '/srv/obs/quota.xml';
# Use asynchronus scheduler. This avoids hanging schedulers on remote projects,
# when the network is slow or broken. This will become the default in future
# our $sched_asyncmode = 1;
# Define how the scheduler does a cold start. The default (0) is to request the
# data for all packages, (1) means that only the non-remote packages are fetched,
# (2) means that all of the package data fetches get delayed.
# our $sched_startupmode = 0;
# Disable fdatasync calls, increases the speed, but may lead to data
# corruption on system crash when the filesystem does not guarantees
# data write before rename.
# It is esp. required on XFS filesystem.
# It is safe to be disabled on ext4 and btrfs filesystems.
#our $disable_data_sync = 1;
# Package rc script / backend communication + log files
our $rundir = "$bsdir/run";
our $logdir = "$bsdir/log";
# optional for non-acl systems, should be set for access control
# 0: trees are shared between projects (built-in default)
# 1: trees are not shared (only usable for new installations)
# 2: new trees are not shared, in case of a missing tree the shared
#
location is also tried (package default)
our $nosharedtrees = 2;
# enable binary release tracking by default for release projects
our $packtrack = [];
# optional: limit visibility of projects for some architectures
#our $limit_projects = {
# "ppc" => [ "openSUSE:Factory", "FATE" ],
# "ppc64" => [ "openSUSE:Factory", "FATE" ],
#};
# optional: allow seperation of releasnumber syncing per architecture
# one counter pool for all ppc architectures, one for i586/x86_64,
# arm archs are separated and one for the rest in this example
our $relsync_pool = {
"local" => "local",
"i586" => "i586",
"x86_64" => "i586",
"ppc" => "ppc",
"ppc64" => "ppc",
47
Back-end Configuration
"ppc64le" => "ppc",
"mips" => "mips",
"mips64" => "mips",
"mipsel" => "mipsel",
"mips64el" => "mipsel",
"aarch64"
=> "arm",
"aarch64_ilp32"
=> "arm",
"armv4l"
=> "arm",
"armv5l"
=> "arm",
"armv6l"
=> "arm",
"armv6hl" => "arm",
"armv7l"
=> "arm",
"armv7hl" => "arm",
"armv5el" => "armv5el", # they do not exist
"armv6el" => "armv6el",
"armv7el" => "armv7el",
"armv8el" => "armv8el",
"sparcv9" => "sparcv9",
"sparc64" => "sparcv9",
};
#No extra stage server sync
#our $stageserver = 'rsync://127.0.0.1/put-repos-main';
#our $stageserver_sync = 'rsync://127.0.0.1/trigger-repos-sync';
#No package signing server
our $sign = "/usr/bin/sign";
#Extend sign call with project name as argument "--project $NAME"
#our $sign_project = 1;
#Global sign key
our $keyfile = "/srv/obs/obs-default-gpg.asc";
# Use a special local arch for product building
# our $localarch = "x86_64";
# config options for the bs_worker
#
#our buildlog_maxsize = 500 * 1000000;
#our buildlog_maxidle =
#our xenstore_maxsize =
#our gettimeout =
8 * 3600;
20 * 1000000;
1 * 3600;
#
# run a script to check if the worker is good enough for the job
#our workerhostcheck = 'my_check_script';
#
# Allow to build as root, exceptions per package
# the keys are actually anchored regexes
48
Back-end Configuration
# our $norootexceptions = { "my_project/my_package" => 1, "openSUSE:Factory.*/
installation-images" => 1 };
# Use old style source service handling
# our $old_style_services = 1;
###
# Optional support to split the binary backend. This can be used on large servers
# to separate projects for better scalability.
# There is still just one source server, but there can be multiple servers which
# run each repserver, schedulers, dispatcher, warden and publisher
#
# This repo service is the 'home' server for all home:* projects. This and the
# $reposerver setting must be different on the binary backend servers.
# our $partition = 'home';
#
# this defines how the projects are split. All home: projects are hosted
# on an own server in this example. Order is important.
# our $partitioning = [ 'home:' => 'home',
#
'.*'
#
=> 'main',
];
#
# our $partitionservers = { 'home' => 'http://home-backend-server:5252',
#
'main' => 'http://main-backend-server:5252',
#
};
# Publish hooks
our $publishedhook_use_regex = 1;
our $publishedhook = {
"Product\/SLES12"
=> "/usr/local/bin/script2run_sles12",
"Product\/SLES11.*"
=> "/usr/local/bin/script2run_sles11",
};
# host specific configs
my $hostconfig = __FILE__;
$hostconfig =~ s/[^\/]*$/bsconfig.$hostname/;
if (-r $hostconfig) {
print STDERR "reading $hostconfig...\n";
require $hostconfig;
}
1;
49
Back-end Configuration
2.2 Log Files
2.2.1
Front-end
The front-end log les are found under /srv/www/obs/api/log.
The following front-end log les exist:
apache_access.log - apache requests
apache_error.log - errors from apache
backend_access.log - API → backend requests
clockworkd.clock.output → timer event log
delayed_job.log → delayed job log
production.log→ main ruby log
production.searchd.log - search daemon log
production.searchd.query.log - search request logs
2.2.2
Back-end
The back-end log les are found by default under /srv/obs/log/.
The following back-end log les exist:
dispatcher.log - dispatcher log
dodup.log - download on demand log (since 2.7)
publisher.log - publisher log
rep_server.log - repo server log
scheduler_.log - scheduler log for each architecture
signer.log - sign service log
50
Log Files
src_server.log - source server log
src_service.log - source service daemon log
warden.log - warden log
clouduploadserver.log - cloud upload server log
clouduploadworker.log - cloud upload worker log
The following log les for the upload jobs exist inside the /srv/obs/cloudupload directory (also
linked in /bs/cloudupload):
.log - log les for undone upload jobs
done/.log - log les for already nished upload jobs
2.3 /srv/obs Tree
The default back-end data directory is located under /srv/obs/. Here are a bunch of
subdirectories used for communication between the dierent server, to store data, status
information and logs. Here is one le conguration.xml in the top directory, which stores the
global OBS conguration for the back-end. You should not modify this le directly, but use
the API /conguration interface instead, since this information needs to kept in sync with the
front-end.
2.3.1
build Directory
In this subdirectory managed by the repo server daemon, all repository data, metadata and build
results are stored in a hierarchical tree.
Example build directory tree of a binary imported distribution (OpenSUSE:13.2) and a small
test project with 3 packages:
├── openSUSE:13.2
│
└── standard
│
├── i586
│
│
│
└── x86_64
│
51
└── :full
└── :full
/srv/obs Tree
├── Test1
│
└── os13.2
│
├── i586
│
│
├── :full
│
│
├── :logfiles.fail
│
│
├── :logfiles.success
│
│
├── :meta
│
│
├── :repo
│
│
├── rsync
│
│
├── srtp
│
│
└── wget
│
└── x86_64
│
├── :full
│
├── :logfiles.fail
│
├── :logfiles.success
│
├── :meta
│
├── :repo
│
├── rsync
│
├── srtp
│
└── wget
2.3.2
cloudupload Directory
Info for cloud upload jobs is stored here, it has a subdir named done for storing the already
nished jobs.
2.3.3
db Directory
Back-end database root directory use by the source server, repo server scheduler and publisher.
Nobody should touch this.
2.3.4
diffcache Directory
Cache for source server compare operations.
2.3.5
events Directory
Communication between services.
52
cloudupload Directory
2.3.6
info Directory
Scheduler information managed by the scheduler and used by the repo server.
2.3.7
jobs Directory
The build jobs are stored in the /srv/obs/jobs directory. They are organized bybuild architecture:
jobs
├── armv7l
├── i586
├── load
└── x86_64
└── Release:Stable::SLE-12_GA::CI-demo-36db80552b735e193dced13f058f866f
The jobs/load le contains statistical data about the build jobs.
2.3.8
log Directory
Contains the log les of the back-end daemons.
2.3.9
projects Directory
Contains the project hierarchy and metadata under revision control.
2.3.10
remotecache Directory
Cache for remote repository information.
2.3.11
repos Directory
Directory managed by the publisher to collect build results, also used by the repo server and
scheduler to nd build results.
2.3.12
repos_sync Directory
Directory with les pointing to the project root directories, helper for publisher rsync.
53
info Directory
2.3.13
run Directory
State and lock information for the back-end daemons
2.3.14
sources Directory
All package sources under revision control in one directory per package, managed by the source
server. Package sources are by default deduplicated across all projects, as long a source le has
the same MD5 sum, it is only stored once. A pseudo '_project' package exist in the directory
containing the project metadata revisions. ':service' and ':upload' are temporary directories used
by the source server.
Example sources directory structure:
sources/
├── CI-demo
[...]
├── srtp
├── test1
├── _project
├── :service
└── :upload
2.3.15
trees Directory
Revision control data for project and packages, managed by the source server.
2.3.16
upload Directory
Temporary directory for uploading les for other back-end components.
2.3.17
workers Directory
Worker information
54
run Directory
2.4 Metadata
2.4.1
OBS Revision Control
This section gives a short generic overview how the revision information are stored in the OBS
back-end for packages and projects. The OBS back-end stores all les in a light weight content
based hierarchical tree. Each le is hashed (with MD5) and stored with the hash as part of
the lename under the /srv/obs/tree or /srv/obs/sources directories. The revision information is
stored in separate les by the Source Server in the /srv/obs/projects directory.
2.4.1.1
OBS revision control files
The revision information is stored in simple CSV like le format with a bar (|) as delimiter
between the 8 columns. The les do have the extension .rev for package/project revision data
and .mref for meta revision data. The hash then points to a -MD5SUMS le in the /srv/
obs/tree/ directories which have the le list with MD5 hashes of this revision. The hashes in this
le list are pointing to the source les in the /srv/obs/sources tree.
An example revision le:
1|1|56cdd3adb778089d1fcc49b92bb93e5b|0.9|1464005086|user4|initial version|
2|2|fe7aa1ade5c9d005de738c234c90bc90|0.9|1464005304|user4|fix spec file|
3|1|72c7986e694f45ab1a62779e64e92a8f|1.0|1464005339|user4|new version|
4|2|699e9931e6f167d78e65bbe5853f592f|1.0|1464006221|user4|add patch file|
5|1|0cfc3a2297f38d2aa9d8d0e98fc22a38|1.1|1464007797|user4|new version|
TABLE 2.6: THE 8 COLUMNS
Column
1
2
Content
revision number
version revision
number
XML tag
may empty
ref
no
vref
yes
3
hash
srcmd5
no
4
version
version
yes
5
time stamp
time
no
55
Metadata
Column
Content
XML tag
may empty
6
user
user
no
7
commit message
comment
yes
8
request id
requestid
yes
Depending on the target (package, project or metadata) used, elds can be empty or have special
values, for example, unknown for the version.
Example MD5SUMS le
/srv/obs # cat trees/Test1/package1/56cdd3adb778089d1fcc49b92bb93e5b-MD5SUMS
0a17daaa913df9e50ee65e83a1898363
package1.spec
1f810b3521242a98333b7bbf6b2b7ef7
test1.sh
2.4.1.2
OBS Revision API
The revision info can be retrieved via API calls for the specic package, for example, using /
source///_history .
Specic revisions of les can be retrieved with the optional "rev=N" parameter, for example, /
source///<le>?rev=N.
On PUT and POST methods for les the optional "comment=some+comment" can be used to
set a commit message.
2.4.2
Project Metadata
Project metadata are XML les containing the meta project information, such as title,
description, related user and groups with roles, build settings, repository settings, publish
settings, debug settings and more.
TABLE 2.7: PROJECT META XML
XML tag
Attributes
Content
project
name
project name
title
56
Short description
Project Metadata
XML tag
Attributes
description
Content
Developer information
person
userid
login name
person
role
role (maintainer, bugowner, …)
group
groupid
group name
group
role
role (maintainer, bugowner, …)
devel
An optional devel project
build
optional build ags
publish
optional publish ags
useforbuild
optional useforbuild ags
debuginfo
optional debuginfo ags
binarydownload
optional binarydownload ags
repository
name
name of the repository for build results
repository path
project
name of the source project for remaining
repository path
repository
name of repository in the source project
build requires
repository arch
architecture name
remoteurl
path to a remote OBS API for interconnect
Example project metadata:
Test project 11
Project for demo
57
Project Metadata
x86_64
2.4.3
Package Metadata
XML le about package meta information, like Title, description, related user and groups with
roles, build settings, publish settings, debug settings and more. Most XML tags are the same as
for projects.
Example package metadata:
A test package for learning
An example test package for learning.
2.4.4
Attribute Metadata
Attributes can be used to add special information to packages. Attributes can be used to trigger
special actions.
Example attribute data:
2016-06-30 00:00:00
58
Package Metadata
2.4.5
Job Files
Jobs are stored by the scheduler in the /srv/obs/jobs directory and contain the build
setup information for the package, for example, a reference to the exact source version, build
dependencies, build repository information, timestamps.
Sample job le:
Release:Stable::SLE-12_GA::
CI-demo-36db80552b735e193dced13f058f866f
x86_64
36db80552b735e193dced13f058f866f
36db80552b735e193dced13f058f866f
2
obs://b1-systems.de/Release:Stable/SLE-12_GA/
36db80552b735e193dced13f058f866f-CI-demo
new build
0
1461077600
1461077708
CI-demo.spec
0.1.9-2
1
2.1
1
linux:version:min 3.0.0
59
Job Files
[...]
60
Job Files
3 Administration
3.1 Tools
3.1.1
obs_admin
obs_admin is a command-line tool used on the back-end server(s) to manage running services,
submit maintenance tasks, and debug problems. It should be only used by experienced admins.
It has built-in help which you can display with obs_admin --help.
Options to control the running services:
Job Controlling
===============
--shutdown-scheduler
Stops the scheduler nicely with dumping out its current state
for fast startup.
--check-project
--check-project
--check-all-projects
Check status of a project and its repositories again
--deep-check-project
--deep-check-project
Check status of a project and its repositories again
This deep check also includes the sources, in case of lost events.
--check-package
Check status of a package in all repositories
--publish-repository
Creates an event for the publisher. The scheduler is NOT scanning for new packages.
The publisher may skip the event, if nothing has changed.
Use --republish-repository when you want to enforce a publish.
--unpublish-repository
Removes the prepared :repo collection and let the publisher remove the result. This
is also updating the search database.
WARNING: this works also for locked projects!
61
Tools
--prefer-publish-event
prefers a publish event to be next. is the file name inside of the publish
event directory.
--republish-repository
enforce to publish a repository
--rebuild-full-tree
rebuild the content of :full/ directory
--clone-repository
Source Exif Data:
File Type : PDF
File Type Extension : pdf
MIME Type : application/pdf
Linearized : No
Page Count : 118
Profile CMM Type : Little CMS
Profile Version : 2.1.0
Profile Class : Display Device Profile
Color Space Data : RGB
Profile Connection Space : XYZ
Profile Date Time : 1998:02:09 06:49:00
Profile File Signature : acsp
Primary Platform : Apple Computer Inc.
CMM Flags : Not Embedded, Independent
Device Manufacturer : Hewlett-Packard
Device Model : sRGB
Device Attributes : Reflective, Glossy, Positive, Color
Rendering Intent : Perceptual
Connection Space Illuminant : 0.9642 1 0.82491
Profile Creator : Little CMS
Profile ID : 0
Profile Copyright : Copyright (c) 1998 Hewlett-Packard Company
Profile Description : sRGB IEC61966-2.1
Media White Point : 0.95045 1 1.08905
Media Black Point : 0 0 0
Red Matrix Column : 0.43607 0.22249 0.01392
Green Matrix Column : 0.38515 0.71687 0.09708
Blue Matrix Column : 0.14307 0.06061 0.7141
Device Mfg Desc : IEC http://www.iec.ch
Device Model Desc : IEC 61966-2.1 Default RGB colour space - sRGB
Viewing Cond Desc : Reference Viewing Condition in IEC61966-2.1
Viewing Cond Illuminant : 19.6445 20.3718 16.8089
Viewing Cond Surround : 3.92889 4.07439 3.36179
Viewing Cond Illuminant Type : D50
Luminance : 76.03647 80 87.12462
Measurement Observer : CIE 1931
Measurement Backing : 0 0 0
Measurement Geometry : Unknown
Measurement Flare : 0.999%
Measurement Illuminant : D65
Technology : Cathode Ray Tube Display
Red Tone Reproduction Curve : (Binary data 2060 bytes, use -b option to extract)
Green Tone Reproduction Curve : (Binary data 2060 bytes, use -b option to extract)
Blue Tone Reproduction Curve : (Binary data 2060 bytes, use -b option to extract)
Creator : Karsten Keil
Format : application/pdf
Title : Administrator Guide
Language : en
Date : 2019:01:02 13:11:07+01:00
Producer : Apache FOP Version 2.1
PDF Version : 1.4
Creator Tool : DAPS 3.0.0 (https://opensuse.github.io/daps) using SUSE XSL Stylesheets 2.0.13 (based on DocBook XSL Stylesheets snapshot)
Metadata Date : 2019:01:02 13:11:07+01:00
Create Date : 2019:01:02 13:11:07+01:00
Page Mode : UseOutlines
Author : Karsten Keil
EXIF Metadata provided by EXIF.tools