(update to opensuse 11.4) |
|||
| Line 2: | Line 2: | ||
for the latest setup instructions! | for the latest setup instructions! | ||
<p> | <p> | ||
| - | These steps | + | These steps show how to setup Open Build Service (OBS) on an openSuSE 11.4 installation. The OBS installation will consist of a main OBS server and an OBS worker. This document describes how to setup an evaluation/test setup and is not meant as production setup. |
</p> | </p> | ||
<p> | <p> | ||
| - | Most users won't need to install their own OBS and can just use an account on a publicly accessible OBS | + | Most users won't need to install their own OBS and can just use an account on a publicly accessible OBS. |
</p> | </p> | ||
<p> | <p> | ||
There are cases where vendors may rather have full control of their builds and keep source private due to licensing restrictions, etc. These instructions are for these special cases. | There are cases where vendors may rather have full control of their builds and keep source private due to licensing restrictions, etc. These instructions are for these special cases. | ||
| - | |||
| - | |||
| - | |||
</p> | </p> | ||
<h2>Add Repositories</h2> | <h2>Add Repositories</h2> | ||
| - | First, we have to add the openSUSE:Tools repository to | + | First, we have to add the openSUSE:Tools repository to both OBS server and OBS worker: |
<code> | <code> | ||
| - | + | # zypper addrepo http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_11.4/openSUSE:Tools.repo | |
| - | + | # zypper refresh | |
| - | zypper | + | |
</code> | </code> | ||
| - | + | When zypper asks, accept the trust key. | |
| + | <h2>Setup OBS Server</h2> | ||
| - | + | <h3>Install the Server packages</h3> | |
| - | <h3>Install the | + | |
| - | |||
<code> | <code> | ||
| - | zypper | + | # zypper install obs-server obs-signd obs-utils createrepo nfs-client obs-api memcached lighttpd |
</code> | </code> | ||
| - | + | If you installed a minimal openSUSE installation then python packages may conflict with the minimal configuration package patterns-openSUSE-minimal_base. This package can be safely removed if it causes dependency problems. | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | <h3> | + | <h3>MySQL Setup</h3> |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | Start daemon by default: | |
| - | |||
| - | |||
| - | |||
<code> | <code> | ||
| - | + | # chkconfig --add mysql | |
| + | # rcmysql start | ||
</code> | </code> | ||
| - | + | Secure the installation: | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | |||
<code> | <code> | ||
| - | /usr/bin/mysql_secure_installation | + | # /usr/bin/mysql_secure_installation |
</code> | </code> | ||
Create the databases: | Create the databases: | ||
| + | |||
<code> | <code> | ||
| - | + | # mysql -u root -p | |
| - | + | mysql> create database api_production; | |
| - | + | mysql> create database webui_production; | |
</code> | </code> | ||
| - | Add the obs user for these databases (substitute | + | Add the obs user for these databases (substitute ********** with your password): |
<code> | <code> | ||
| - | GRANT all privileges | + | mysql> GRANT all privileges |
| - | + | ON api_production.* | |
| - | + | TO 'obs'@'%', 'obs'@'localhost' IDENTIFIED BY '************'; | |
| - | GRANT all privileges | + | mysql> GRANT all privileges |
| - | + | ON webui_production.* | |
| - | + | TO 'obs'@'%', 'obs'@'localhost' IDENTIFIED BY '************'; | |
| - | FLUSH PRIVILEGES; | + | mysql> FLUSH PRIVILEGES; |
| + | mysql> quit | ||
</code> | </code> | ||
| - | Now, configure OBS to use MySQL | + | Now, configure OBS to use MySQL. First the API server: |
<code> | <code> | ||
| - | vi /srv/www/obs/api/config/database.yml | + | # vi /srv/www/obs/api/config/database.yml |
| - | + | ||
production: | production: | ||
adapter: mysql | adapter: mysql | ||
| Line 104: | Line 78: | ||
password: ************ | password: ************ | ||
</code> | </code> | ||
| - | And setup the webui to use MySQL | + | |
| + | And setup the webui to use MySQL: | ||
| + | |||
<code> | <code> | ||
| - | vi /srv/www/obs/webui/config/database.yml | + | # vi /srv/www/obs/webui/config/database.yml |
| - | + | ||
production: | production: | ||
adapter: mysql | adapter: mysql | ||
| Line 115: | Line 90: | ||
</code> | </code> | ||
| - | Populate the database | + | Populate the database: |
| + | |||
<code> | <code> | ||
| - | cd /srv/www/obs/api/ | + | # cd /srv/www/obs/api/ |
| - | RAILS_ENV="production" rake db:setup | + | # RAILS_ENV="production" rake db:setup |
| - | + | # cd /srv/www/obs/webui/ | |
| - | cd /srv/www/obs/webui/ | + | # RAILS_ENV="production" rake db:setup |
| - | RAILS_ENV="production" rake db:setup | + | |
</code> | </code> | ||
| + | |||
If this fails, check /srv/www/obs/api/config/environments/production.rb and /srv/www/obs/webui/config/environments/production.rb for configuration of the SOURCE_HOST and FRONTEND_HOST. | If this fails, check /srv/www/obs/api/config/environments/production.rb and /srv/www/obs/webui/config/environments/production.rb for configuration of the SOURCE_HOST and FRONTEND_HOST. | ||
<h3>Setup lighttpd for webui</h3> | <h3>Setup lighttpd for webui</h3> | ||
| + | |||
Make sure vhosts are enabled by uncommenting the following line: | Make sure vhosts are enabled by uncommenting the following line: | ||
| + | |||
<code> | <code> | ||
# vi /etc/lighttpd/lighttpd.conf | # vi /etc/lighttpd/lighttpd.conf | ||
include_shell "cat /etc/lighttpd/vhosts.d/*.conf" | include_shell "cat /etc/lighttpd/vhosts.d/*.conf" | ||
</code> | </code> | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | + | The installed /etc/lighttpd/vhosts.d/obs.conf should be usable for this setup but it can be changed later on. | |
| + | |||
<p> | <p> | ||
lighttpd requires some extra modules to be enabled: mod_access, mod_rewrite, mod_magnet, and mod_fastcgi. Do so by editing /etc/lighttpd/modules.conf: | lighttpd requires some extra modules to be enabled: mod_access, mod_rewrite, mod_magnet, and mod_fastcgi. Do so by editing /etc/lighttpd/modules.conf: | ||
| Line 190: | Line 142: | ||
You need also to configure /srv/www/obs/webui/config/environments/production.rb to point to correct server names: | You need also to configure /srv/www/obs/webui/config/environments/production.rb to point to correct server names: | ||
</p> | </p> | ||
| + | |||
<code> | <code> | ||
# vi /srv/www/obs/webui/config/environments/production.rb | # vi /srv/www/obs/webui/config/environments/production.rb | ||
| Line 213: | Line 166: | ||
</p> | </p> | ||
<code> | <code> | ||
| - | chkconfig --add memcached | + | # chkconfig --add memcached |
| - | chkconfig --add lighttpd | + | # chkconfig --add lighttpd |
| - | chkconfig --add obsapidelayed | + | # chkconfig --add obsapidelayed |
| - | chkconfig --add obswebuidelayed | + | # chkconfig --add obswebuidelayed |
</code> | </code> | ||
| Line 223: | Line 176: | ||
</p> | </p> | ||
<code> | <code> | ||
| - | chown -R lighttpd.lighttpd /srv/www/obs/{api,webui} | + | # chown -R lighttpd.lighttpd /srv/www/obs/{api,webui} |
</code> | </code> | ||
| Line 232: | Line 185: | ||
<code> | <code> | ||
| + | # vi /usr/lib/obs/server/BSConfig.pm | ||
my $hostname = '192.168.1.1'; | my $hostname = '192.168.1.1'; | ||
</code> | </code> | ||
| Line 240: | Line 194: | ||
<code> | <code> | ||
| + | # vi /usr/lib/obs/server/BSConfig.pm | ||
our $repodownload = "http://$hostname:82/"; | our $repodownload = "http://$hostname:82/"; | ||
| + | </code> | ||
| + | |||
| + | OBS API custom logger seems to need a small fix to get going: | ||
| + | |||
| + | <code> | ||
| + | --- /srv/www/obs/api/lib/custom_logger.rb-orig 2011-08-12 03:12:25.195998605 +0200 | ||
| + | +++ /srv/www/obs/api/lib/custom_logger.rb 2011-08-12 03:41:34.277000004 +0200 | ||
| + | @@ -4,9 +4,11 @@ class NiceLogger < Logger | ||
| + | |||
| + | def format_message(severity, timestamp, progname, msg) | ||
| + | out="" | ||
| + | - while msg[0] == 13 or msg[0] == 10 | ||
| + | - out = out.concat(msg[0]) | ||
| + | - msg = msg[1..-1] | ||
| + | + if msg.kind_of?(Array) | ||
| + | + while msg[0] == 13 or msg[0] == 10 | ||
| + | + out = out.concat(msg[0]) | ||
| + | + msg = msg[1..-1] | ||
| + | + end | ||
| + | end | ||
| + | |||
| + | out + "[%s|#%5d] %s\n" % [severity[0..0], $$, msg] | ||
</code> | </code> | ||
| Line 252: | Line 229: | ||
# rcobswebuidelayed start | # rcobswebuidelayed start | ||
</code> | </code> | ||
| + | |||
<p> | <p> | ||
At this point you should be able to open a browser and go to your server and login to OBS. Port 80 should be the webui, port 81 should be the api, and port 82 should be the repository directory. The default username/password is Admin/opensuse. | At this point you should be able to open a browser and go to your server and login to OBS. Port 80 should be the webui, port 81 should be the api, and port 82 should be the repository directory. The default username/password is Admin/opensuse. | ||
</p> | </p> | ||
| + | |||
<h3>Start By Default</h3> | <h3>Start By Default</h3> | ||
<p>The OBS should start automatically, so they should be added to chkconfig to do so:</p> | <p>The OBS should start automatically, so they should be added to chkconfig to do so:</p> | ||
<code> | <code> | ||
| - | + | # chkconfig --add obsrepserver obssrcserver obsscheduler obsdispatcher obspublisher obswarden obssigner | |
| + | </code> | ||
| + | |||
| + | <h2>Setup OBS Worker</h2> | ||
| + | |||
| + | <h3>Install the Worker Packages</h3> | ||
| + | |||
| + | <code> | ||
| + | # zypper install obs-worker | ||
| + | </code> | ||
| + | |||
| + | <h3>Configure OBS Worker</h3> | ||
| + | <p> | ||
| + | Edit the file /etc/sysconfig/obs-worker in order to point to correct repository server which is one of the main OBS server services. In this example the server is 192.168.1.1. | ||
| + | </p> | ||
| + | <code> | ||
| + | # vi /etc/sysconfig/obs-worker | ||
| + | OBS_SRC_SERVER="192.168.1.1:5352" | ||
| + | OBS_REPO_SERVERS="192.168.1.1:5252" | ||
| + | </code> | ||
| + | |||
| + | <h3>Start OBS Worker</h3> | ||
| + | <p>Start the worker service, did not start maybe main server needs to run first? | ||
| + | </p> | ||
| + | <code> | ||
| + | chkconfig --add obsworker | ||
| + | rcobsworker start | ||
</code> | </code> | ||
Please check http://gitorious.org/opensuse/build-service/blobs/master/dist/README.SETUP for the latest setup instructions!
These steps show how to setup Open Build Service (OBS) on an openSuSE 11.4 installation. The OBS installation will consist of a main OBS server and an OBS worker. This document describes how to setup an evaluation/test setup and is not meant as production setup.
Most users won't need to install their own OBS and can just use an account on a publicly accessible OBS.
There are cases where vendors may rather have full control of their builds and keep source private due to licensing restrictions, etc. These instructions are for these special cases.
Contents |
First, we have to add the openSUSE:Tools repository to both OBS server and OBS worker:
# zypper addrepo http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_11.4/openSUSE:Tools.repo # zypper refresh
When zypper asks, accept the trust key.
# zypper install obs-server obs-signd obs-utils createrepo nfs-client obs-api memcached lighttpd
If you installed a minimal openSUSE installation then python packages may conflict with the minimal configuration package patterns-openSUSE-minimal_base. This package can be safely removed if it causes dependency problems.
Start daemon by default:
# chkconfig --add mysql
# rcmysql start
Secure the installation:
# /usr/bin/mysql_secure_installation
Create the databases:
# mysql -u root -p
mysql> create database api_production;
mysql> create database webui_production;
Add the obs user for these databases (substitute ********** with your password):
mysql> GRANT all privileges
ON api_production.*
TO 'obs'@'%', 'obs'@'localhost' IDENTIFIED BY '************';
mysql> GRANT all privileges
ON webui_production.*
TO 'obs'@'%', 'obs'@'localhost' IDENTIFIED BY '************';
mysql> FLUSH PRIVILEGES;
mysql> quit
Now, configure OBS to use MySQL. First the API server:
# vi /srv/www/obs/api/config/database.yml
production:
adapter: mysql
database: api_production
username: obs
password: ************
And setup the webui to use MySQL:
# vi /srv/www/obs/webui/config/database.yml
production:
adapter: mysql
database: webui_production
username: obs
password: ************
Populate the database:
# cd /srv/www/obs/api/
# RAILS_ENV="production" rake db:setup
# cd /srv/www/obs/webui/
# RAILS_ENV="production" rake db:setup
If this fails, check /srv/www/obs/api/config/environments/production.rb and /srv/www/obs/webui/config/environments/production.rb for configuration of the SOURCE_HOST and FRONTEND_HOST.
Make sure vhosts are enabled by uncommenting the following line:
# vi /etc/lighttpd/lighttpd.conf
include_shell "cat /etc/lighttpd/vhosts.d/*.conf"
The installed /etc/lighttpd/vhosts.d/obs.conf should be usable for this setup but it can be changed later on.
lighttpd requires some extra modules to be enabled: mod_access, mod_rewrite, mod_magnet, and mod_fastcgi. Do so by editing /etc/lighttpd/modules.conf:
# vi /etc/lighttpd/modules.conf
server.modules = (
"mod_access",
# "mod_alias",
# "mod_auth",
# "mod_evasive",
# "mod_redirect",
"mod_rewrite",
# "mod_setenv",
# "mod_usertrack",
)
##
## mod_magnet
##
include "conf.d/magnet.conf"
##
## FastCGI (mod_fastcgi)
##
include "conf.d/fastcgi.conf"
You need also to configure /srv/www/obs/webui/config/environments/production.rb to point to correct server names:
# vi /srv/www/obs/webui/config/environments/production.rb
FRONTEND_HOST = "192.168.1.1"
FRONTEND_PORT = 81
FRONTEND_PROTOCOL = 'http'
BUGZILLA_HOST = nil
DOWNLOAD_URL = "http://192.168.1.1:82"
ICHAIN_MODE = "off"
BASE_NAMESPACE = nil
Do the same for /srv/www/obs/api/config/environments/production.rb. As soon your backend is not on the same machine as the api (frontend), change the following:
# vi /srv/www/obs/api/config/environments/production.rb
SOURCE_HOST = "192.168.1.1"
Add the server to start by default.
# chkconfig --add memcached
# chkconfig --add lighttpd
# chkconfig --add obsapidelayed
# chkconfig --add obswebuidelayed
ligthttpd user and group need to be the onwer of api and webui dirs (as well as log and tmp):
# chown -R lighttpd.lighttpd /srv/www/obs/{api,webui}
The file /usr/lib/obs/server/BSConfig.pm is used to configure several settings for the Build Service. One of the major components is setting up the $hostname variable to the correct value. Currently I have this set to the IP address of the server.
# vi /usr/lib/obs/server/BSConfig.pm
my $hostname = '192.168.1.1';
The list of directories in /srv/obs/repos/ is the repositories, so I changed the $repodownload:
# vi /usr/lib/obs/server/BSConfig.pm
our $repodownload = "http://$hostname:82/";
OBS API custom logger seems to need a small fix to get going:
--- /srv/www/obs/api/lib/custom_logger.rb-orig 2011-08-12 03:12:25.195998605 +0200
+++ /srv/www/obs/api/lib/custom_logger.rb 2011-08-12 03:41:34.277000004 +0200
@@ -4,9 +4,11 @@ class NiceLogger < Logger
def format_message(severity, timestamp, progname, msg)
out=""
- while msg[0] == 13 or msg[0] == 10
- out = out.concat(msg[0])
- msg = msg[1..-1]
+ if msg.kind_of?(Array)
+ while msg[0] == 13 or msg[0] == 10
+ out = out.concat(msg[0])
+ msg = msg[1..-1]
+ end
end
out + "[%s|#%5d] %s\n" % [severity[0..0], $$, msg]
Start the server.
# rcmemcached start # rclighttpd start # rcobsapidelayed start # rcobswebuidelayed start
At this point you should be able to open a browser and go to your server and login to OBS. Port 80 should be the webui, port 81 should be the api, and port 82 should be the repository directory. The default username/password is Admin/opensuse.
The OBS should start automatically, so they should be added to chkconfig to do so:
# chkconfig --add obsrepserver obssrcserver obsscheduler obsdispatcher obspublisher obswarden obssigner
# zypper install obs-worker
Edit the file /etc/sysconfig/obs-worker in order to point to correct repository server which is one of the main OBS server services. In this example the server is 192.168.1.1.
# vi /etc/sysconfig/obs-worker
OBS_SRC_SERVER="192.168.1.1:5352"
OBS_REPO_SERVERS="192.168.1.1:5252"
Start the worker service, did not start maybe main server needs to run first?
chkconfig --add obsworker
rcobsworker start
To setup cross compile, add the appropriate machine types to /etc/sysconfig/obs-server. For example, the following will enable ARM builds.
# vi /etc/sysconfig/obs-server
OBS_SCHEDULER_ARCHITECTURES="i586 armv5el armv7elโ
The project settings and the project config is an important part of the project and should be copied to the local project setup.
osc -A <remote API URL> meta prj <repository name> > prj.txt
osc -A <remote API URL> meta prjconf <repository name> > prjconf.txt
Modify the prj.txt file to name valid users in the userid fields. Once modified, the settings and configuration can be applied to the local project.
osc -A <local API URL> meta prj <repository name> -F prj.txt
osc -A <local API URL> meta prjconf <repository name> -F prjconf.txt
obs_mirror_project (/usr/sbin/obs_mirror_project) is used to copy an external OBS project. The script needed to be modified to use build.meego.com as apposed to the hard coded download.opensuse.org site. You need an login to build.meego.com to execute this script.
/usr/sbin/obs_mirror_project <repository name> <type> <arch>
Once the download of the project is complete, you have to rescan the local repository.
/usr/lib/obs/server/bs_admin --rescan-repository <repository name> <type> <arch>
Here are common issues that have been seen and how to resolve them.
Check /srv/www/obs/api/config/environments/production.rb and /srv/www/obs/webui/config/environments/production.rb for configuration of the SOURCE_HOST and FRONTEND_HOST.
Make sure you set the permissions on the api and webui directories.
chown -R lighttpd.lighttpd /srv/www/obs/{api,webui}
If this doesn't work then try to recreate the databases:
# mysql -u root -p
mysql> drop database api_production;
mysql> drop database webui_production;
Rerun the mysql database setup from above and re-run rake.