Build Service/Installationsanleitung/CentOS
aus openSUSE, der freien Wissensdatenbank
Inhaltsverzeichnis |
CentOS
Einführung
Wir versuchen zur Zeit, den Build Service auf CentOS 4.2 zu installieren, indem wir RPMs von Fedora Core 6 verwenden. Dieses Dokument beschreibt kurz, wie sich ein openSUSE Build Service (OBS) mit den RPM-Pakten vom openSUSE-Projekt aufsetzen lässt. Standardmäßig laufen alle Dienste auf dem gleichen System, sie können aber auch mehrere Systeme verteilt werden, um die Zuverlässigkeit zu erhöhen und um Lastverteilung zu ermöglichen. Es handelt sich hierbei um eine Übersetzung aus dem englischen Wiki.
Bauen von OBS-RPMs
Zum Zeitpunkt der Entstehung dieses Artikels funktionierte ein Bau des obs-server-Pakets auf der Fedora Core 6 Plattform nicht. Wenn Sie die obs-server-RPMs selber bauen wollen, laden Sie sich allen Kode aus dem openSUSE:tools-Projekt nach /usr/src/redhat/SOURCES herunter. Platzieren Sie ihre obs-server.spec-Datei dann in /usr/src/redhat/SPECS.
Die üblich genutzten Makros %insserv_prereq und %fillup_prereq werden auf der FC6-Plattform nicht unterstützt, weshalb ich diese Zeilen einfach auskommentiert habe.
Verwenden Sie die folgende spec-Datei.
#
# spec file for package obs-server (Version 0.1)
#
# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
# package are under the same license as the package itself.
#
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
Name: obs-server
Requires: perl-Socket-MsgHdr perl-XML-Parser perl-Compress-Zlib createrepo
#PreReq: %fillup_prereq %insserv_prereq
License: GPL
Group: Productivity/Networking/Web/Utilities
Autoreqprov: on
Version: 0.1.1
Release: 0
Url: http://en.opensuse.org/Build_Service
Summary: The openSUSE Build Service -- Server Component
# svn export https://forgesvn1.novell.com/svn/opensuse/trunk/buildservice
Source: %{name}-%{version}.tar.bz2
Source1: obsworker
Source3: BSConfig.pm
Source4: obsrepserver
Source5: obssrcserver
Source6: obsscheduler
Source7: obs.conf
Source8: cleanurl-v5.lua
Source9: rails.include
Source10: README.SETUP
Source11: sysconfig.obs-worker
Source12: sysconfig.obs-server
Patch: HOTFIX.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildArchitectures: noarch
%description
Authors:
--------
The openSUSE Team <opensuse-buildservice@opensuse.org>
%package -n obs-worker
Requires: perl-Socket-MsgHdr perl-TimeDate screen curl perl-XML-Parser per l-Compress-Zlib
#PreReq: %fillup_prereq %insserv_prereq
Group: Productivity/Networking/Web/Utilities
Summary: The openSUSE Build Service -- Build Host Component
%description -n obs-worker
%package -n obs-api
#PreReq: %fillup_prereq %insserv_prereq
Requires: lighttpd rubygem-fcgi mysql rubygem-mysql rubygem-rake rubygem-r ails
Group: Productivity/Networking/Web/Utilities
Summary: The openSUSE Build Service -- The Frontend part
%description -n obs-api
%prep
%setup -q -n buildservice/src/
#%patch0
cp %SOURCE10 .
%build
echo empty build section
%install
#
# Install all web and frontend parts.
#
for i in common frontend webclient; do
mkdir -p $RPM_BUILD_ROOT/srv/www/obs/
cp -a $i $RPM_BUILD_ROOT/srv/www/obs/$i
done
# configure lighttpd web service
mkdir -p $RPM_BUILD_ROOT/etc/lighttpd/vhosts.d/
install -m 0644 %SOURCE7 $RPM_BUILD_ROOT/etc/lighttpd/vhosts.d/
install -m 0644 %SOURCE9 $RPM_BUILD_ROOT/etc/lighttpd/vhosts.d/rails.inc
install -m 0644 %SOURCE8 $RPM_BUILD_ROOT/etc/lighttpd/
rm $RPM_BUILD_ROOT/srv/www/obs/frontend/README_LOGIN
rm $RPM_BUILD_ROOT/srv/www/obs/frontend/files/specfiletemplate
# fix path
for i in $RPM_BUILD_ROOT/srv/www/obs/*/config/environment.rb; do
sed "s,/srv/www/opensuse/common/current/lib,/srv/www/obs/common/lib," \
"$i" > "$i"_ && mv "$i"_ "$i"
done
#set default api on localhost for the webclient
sed 's,FRONTEND_HOST.*,FRONTEND_HOST = "127.0.42.2",' \
$RPM_BUILD_ROOT/srv/www/obs/webclient/config/environments/development.rb > tmp -file \
&& mv tmp-file "$RPM_BUILD_ROOT/srv/www/obs/webclient/config/environments/deve lopment.rb"
sed 's,FRONTEND_PORT.*,FRONTEND_PORT = 80,' \
$RPM_BUILD_ROOT/srv/www/obs/webclient/config/environments/development.rb > tmp -file \
&& mv tmp-file "$RPM_BUILD_ROOT/srv/www/obs/webclient/config/environments/deve lopment.rb"
mkdir -p $RPM_BUILD_ROOT/srv/www/docs/api/
cp -a ../docs/api/frontend $RPM_BUILD_ROOT/srv/www/docs/api/
#
# Install all backend parts.
#
cd backend/
install -d -m 755 $RPM_BUILD_ROOT/usr/lib/obs/server/
install -d -m 755 $RPM_BUILD_ROOT/usr/sbin/
install -d -m 755 $RPM_BUILD_ROOT/etc/init.d/
install -d -m 755 $RPM_BUILD_ROOT/srv/obs/projects
install -d -m 755 $RPM_BUILD_ROOT/srv/obs/log
install -d -m 755 $RPM_BUILD_ROOT/srv/obs/run
# install executables and code
cp -a * $RPM_BUILD_ROOT/usr/lib/obs/server/
# install runlevel scripts
install -m 0755 %SOURCE1 %SOURCE4 %SOURCE5 %SOURCE6 \
$RPM_BUILD_ROOT/etc/init.d/
for i in obssrcserver obsrepserver obsscheduler obsworker ; do
ln -sf /etc/init.d/$i $RPM_BUILD_ROOT/usr/sbin/rc$i
done
install -m 0644 %SOURCE3 $RPM_BUILD_ROOT/usr/lib/obs/server/
# Ship latest version of build to be always in sync. do not use the symlink.
rm -rf $RPM_BUILD_ROOT/usr/lib/obs/server/build
cp -a ../build $RPM_BUILD_ROOT/usr/lib/obs/server/build
# install fillups
FILLUP_DIR=$RPM_BUILD_ROOT/var/adm/fillup-templates
mkdir -p $FILLUP_DIR
cp -a %SOURCE11 %SOURCE12 $FILLUP_DIR/
%pre
/usr/sbin/groupadd -r obsrun 2> /dev/null || :
/usr/sbin/useradd -r -o -s /bin/false -c "User for build service backend" -d /us r/lib/obs -g obsrun obsrun 2> /dev/null || :
%post -n obs-server
%{fillup_and_insserv -n obs-server}
%post -n obs-worker
%{fillup_and_insserv -n obs-worker}
%post -n obs-api
touch /srv/www/obs/{webclient,frontend}/log/development.log
chown lighttpd:lighttpd /srv/www/obs/{webclient,frontend}/log/development.log
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%dir /usr/lib/obs
/etc/init.d/obssrcserver
/etc/init.d/obsrepserver
/etc/init.d/obsscheduler
/usr/sbin/rcobssrcserver
/usr/sbin/rcobsrepserver
/usr/sbin/rcobsscheduler
/usr/lib/obs/server
%attr(-,obsrun,obsrun) /srv/obs
/var/adm/fillup-templates/sysconfig.obs-server
%files -n obs-worker
%defattr(-,root,root)
/var/adm/fillup-templates/sysconfig.obs-worker
/etc/init.d/obsworker
/usr/sbin/rcobsworker
%files -n obs-api
%defattr(-,root,root)
%doc README.SETUP
%dir /srv/www/obs
/srv/www/docs
/srv/www/obs/common
/srv/www/obs/frontend/app
/srv/www/obs/frontend/Changelog
/srv/www/obs/frontend/components
/srv/www/obs/frontend/db
/srv/www/obs/frontend/doc
/srv/www/obs/frontend/lib
/srv/www/obs/frontend/public
/srv/www/obs/frontend/Rakefile
/srv/www/obs/frontend/README
/srv/www/obs/frontend/script
/srv/www/obs/frontend/test
/srv/www/obs/frontend/vendor
/srv/www/obs/webclient/app
/srv/www/obs/webclient/Changelog
/srv/www/obs/webclient/components
/srv/www/obs/webclient/db
/srv/www/obs/webclient/doc
/srv/www/obs/webclient/lib
/srv/www/obs/webclient/public
/srv/www/obs/webclient/Rakefile
/srv/www/obs/webclient/README
/srv/www/obs/webclient/script
/srv/www/obs/webclient/test
/srv/www/obs/webclient/vendor
%config(noreplace) /srv/www/obs/frontend/config
%config(noreplace) /srv/www/obs/webclient/config
%attr(-,lighttpd,lighttpd) /srv/www/obs/frontend/log
%attr(-,lighttpd,lighttpd) /srv/www/obs/frontend/tmp
%attr(-,lighttpd,lighttpd) /srv/www/obs/webclient/log
%attr(-,lighttpd,lighttpd) /srv/www/obs/webclient/tmp
%config(noreplace) /etc/lighttpd/vhosts.d/obs.conf
%config /etc/lighttpd/cleanurl-v5.lua
%config /etc/lighttpd/vhosts.d/rails.inc
%changelog -n obs-server
* Fri Jan 26 2007 - poeml@suse.de
- implement status/restart in the init scripts
* Fri Jan 26 2007 - poeml@suse.de
- added dependency on createrepo
* Fri Jan 26 2007 - poeml@suse.de
- update to r1110
- revert last change, and do it the ruby way, by creating a new
migration for it... so existing installations are upgraded
- fix truncated line in sorting algorithm
- add missing mkdir
- add url to package metadata
- fix build / install sysconfig files
- fix copyright headers in init script
- fix path in README where to copy packages to
* Thu Jan 25 2007 - poeml@suse.de
- update to r1108
create a few more architectures, when initializing the database
Bauen Sie ihre RPMs mit
rpmbuild -ba /usr/src/redhat/SPECS/obs-server.spec
Hinweis: Im der spec-Datei wurden einige Dinge geändert. Lesen Sie weiter für mehr Informationen!
Installation des Backend
Das Backend beherbergt alle Quellen und Pakete für den Bau und kalkuliert die Aufgabenverteilung. Hierfür müssen Sie das Paket "obs-server" installieren. Fügen Sie auch den Nutzer obsrun hinzu, da er für die Installation des Pakets "obs-server" notwendig ist.
# useradd obsrun # rpm -ivh obs-server-0.1-17.1.i386.rpm
Hinweis: obs-server-0.1-17.1.i386.rpm hat die folgenden Abhängigkeiten
- perl-Socket-MsgHdr => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-Compress-Zlib => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-XML-Parser => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-libwww-perl => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-HTML-Parser => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-URI => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-HTML-Tagset => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-Compress-Zlib => laden Sie es aus dem CentOS-Extra-Depot herunter
Konfiguration des Backend
WARNUNG: Sie folgenden Befehle starten Dienste, welche von außen erreichbar sind. Achten Sie bei Systemen die mit nicht vertrauenswürdigen Netzwerken verbunden sind darauf, dass die Ports durch eine Firewall blockiert werden.
# rcobsrepserver start # rcobssrcserver start # rcobsscheduler start
Die Daten werden standardmäßig unterhalb von /srv/obs directory abgelegt.
Das Problem ist, dass die Skripte /etc/rc.status verwenden, was für openSUSE typisch ist, nicht aber auf CentOS-Systemen. Deshalb mussten die Skripte umgeschrieben werden
rcobsrepserver
#! /bin/sh
# Copyright (c) 1995-1998 SuSE GmbH Nuernberg, Germany.
#
# Author: adrian@suse.de
#
# /etc/init.d/bsworker
# and its symbolic link
# /usr/sbin/rcbsworker
#
### BEGIN INIT INFO
# Provides: obsreserver
# Required-Start: $time $syslog
# Required-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 4 6
# Description: openSUSE build service repository server
### END INIT INFO
. /etc/rc.d/init.d/functions
function rc_reset ()
{
_rc_status=0
_rc_status_all=0
rc_check
return 0
}
function rc_check ()
{
_rc_status_ret=$?
test $_rc_status_ret -eq 0 || _rc_status=$_rc_status_ret
test $_rc_status -eq 0 || _rc_status_all=$_rc_status
return $_rc_check_ret
}
function rc_exit ()
{
exit $_rc_status_all
}
# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}
obsdir=/usr/lib/obs/server/
rc_reset
case "$1" in
start)
cd "$obsdir"
# FIXME: not nice, this should receive a proper daemon handling,
# including real logging, pid file and startproc
./bs_repserver >& /srv/obs/log/rep_server.log &
status bs_repserver
;;
stop)
killall bs_repserver
status bs_repserver
;;
restart)
echo -n "NOT IMPLEMENTED "
## If first returns OK call the second, if first or
## second command fails, set echo return value.
#$0 stop && $0 start
status bs_repserver
;;
try-restart)
$0 status
if test $? = 0; then
$0 restart
else
rc_reset # Not running is not a failure.
fi
# Remember status and be quiet
status bs_repserver
;;
reload)
;;
status)
echo "NOT IMPLEMENTED"
#rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|reload}"
exit 1
;;
esac
rc_exit
rcobssrcserver
#! /bin/sh
# Copyright (c) 1995-1998 SuSE GmbH Nuernberg, Germany.
#
# Author: adrian@suse.de
#
# /etc/init.d/bsworker
# and its symbolic link
# /usr/sbin/rcbsworker
#
### BEGIN INIT INFO
# Provides: obssrcserver
# Required-Start: $time $syslog
# Required-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 4 6
# Description: openSUSE build service source repository server
### END INIT INFO
. /etc/rc.d/init.d/functions
function rc_reset ()
{
_rc_status=0
_rc_status_all=0
rc_check
return 0
}
function rc_check ()
{
_rc_status_ret=$?
test $_rc_status_ret -eq 0 || _rc_status=$_rc_status_ret
test $_rc_status -eq 0 || _rc_status_all=$_rc_status
return $_rc_check_ret
}
function rc_exit ()
{
exit $_rc_status_all
}
# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}
obsdir=/usr/lib/obs/server/
rc_reset
case "$1" in
start)
cd "$obsdir"
# FIXME: not nice, this should receive a proper daemon handling,
# including real logging, pid file and startproc
./bs_srcserver >& /srv/obs/log/src_server.log &
status bs_srcserver
;;
stop)
killall bs_srcserver
status bs_srcserver
;;
restart)
echo -n "NOT IMPLEMENTED "
## If first returns OK call the second, if first or
## second command fails, set echo return value.
#$0 stop && $0 start
status bs_srcserver
;;
try-restart)
$0 status
if test $? = 0; then
$0 restart
else
rc_reset # Not running is not a failure.
fi
# Remember status and be quiet
status bs_srcserver
;;
reload)
;;
status)
echo "NOT IMPLEMENTED"
#rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|reload}"
exit 1
;;
esac
rc_exit
rcobsscheduler
#! /bin/sh
# Copyright (c) 1995-1998 SuSE GmbH Nuernberg, Germany.
#
# Author: adrian@suse.de
#
# /etc/init.d/bsworker
# and its symbolic link
# /usr/sbin/rcbsworker
#
### BEGIN INIT INFO
# Provides: obsscheduler
# Required-Start: $time $syslog obssrcserver obsrepserver
# Required-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 4 6
# Description: openSUSE build service scheduler
### END INIT INFO
. /etc/rc.d/init.d/functions
function rc_reset ()
{
_rc_status=0
_rc_status_all=0
rc_check
return 0
}
function rc_check ()
{
_rc_status_ret=$?
test $_rc_status_ret -eq 0 || _rc_status=$_rc_status_ret
test $_rc_status -eq 0 || _rc_status_all=$_rc_status
return $_rc_check_ret
}
function rc_exit ()
{
exit $_rc_status_all
}
# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}
obsdir=/usr/lib/obs/server/
rc_reset
case "$1" in
start)
cd "$obsdir"
# FIXME: not nice, this should receive a proper daemon handling,
# including real logging, pid file and startproc
./bs_sched >& /srv/obs/log/scheduler.log &
status bs_sched
;;
stop)
killall bs_sched
status bs_sched
;;
restart)
echo -n "NOT IMPLEMENTED "
## If first returns OK call the second, if first or
## second command fails, set echo return value.
#$0 stop && $0 start
status bs_sched
;;
try-restart)
$0 status
if test $? = 0; then
$0 restart
else
rc_reset # Not running is not a failure.
fi
# Remember status and be quiet
status bs_sched
;;
reload)
;;
status)
echo "NOT IMPLEMENTED"
#rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|reload}"
exit 1
;;
esac
rc_exit
Installation der Worker
Die Arbeiter (worker) erkundigen sich beim Backend nach offenen Bauaufträgen und führen diese aus. Sie müssen dafür das Paket "obs-worker" installiert haben.
# rpm -ivh obs-worker-0.1-17.1.i386.rpm
Hinweis: obs-worker-0.1-17.1.i386.rpm hat die folgenden Abhängigkeiten
- curl => laden Sie es aus dem offiziellen CentOS-Depot herunter
- libidn => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-Compress-Zlib => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-XML-Parser => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-libwww-perl => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-URI => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-TimeDate => laden Sie es von http://rpmforge.net/user/packages/perl-TimeDate/ herunter
- utempter => laden Sie es aus dem offiziellen CentOS-Depot herunter
- screen => laden Sie es aus dem offiziellen CentOS-Depot herunter
- perl-TimeDate
Konfiguration der Worker
Ein Arbeiter (worker) kann auf dem lokalen Host durch den folgenden Aufruf gestartet werden:
# rcobsworker start
Installation des Frontend
Hierfür müssen Sie das Paket "obs-api" sowie einen MySQL-Server installiert haben, wobei sich letzerer auch auf einem entfernten Rechner befinden kann.
# rpm -ivh obs-api-0.1-17.1.i386
Hinweis: obs-api-0.1-17.1.i386 hat die folgenden Abhängigkeiten
- ruby-1.8.5-1.el4.centos
=> laden Sie es aus dem offiziellen CentOS-Depot herunter
- lighttpd
=> Dies war so ziemlich der Stachel im Arsch ;-). Wir haben lighttpd als Quellkode heruntergeladen (lighttpd-1.4.13.tar.gz) und daraus ein RPM erstellt, wofür wir dieses Skript benutzt haben. => Stellen Sie auch sicher, dass Sie auf der Maschine, auf welcher Sie lighttpd bauen wollen, die Pakete pcre und pcre-devel installiert haben, da es sonst nicht möglich sein wird, ihren lighttpd zu starten!
#!/bin/bash rm -rf build mkdir -p build/RPMS build/SRPMS build/SOURCES build/BUILD build/tmp build/SPECS rpmbuild -ta lighttpd-1.4.13.tar.gz --buildroot=`pwd`/build/tmp --define "_topdir `pwd`/build" --with lua
Sie sollten diese Dateien haben:
$ find . . ./vhosts.d ./vhosts.d/obs.conf ./vhosts.d/rails.inc ./vhosts.d/CVS ./vhosts.d/CVS/Root ./vhosts.d/CVS/Repository ./vhosts.d/CVS/Entries ./cleanurl-v5.lua ./conf-available ./conf-available/CVS ./conf-available/CVS/Root ./conf-available/CVS/Repository ./conf-available/CVS/Entries ./conf-available/10-auth.conf ./conf-available/10-cgi.conf ./conf-available/10-cml.conf ./conf-available/10-fastcgi.conf ./conf-available/10-proxy.conf ./conf-available/10-simple-vhost.conf ./conf-available/10-ssi.conf ./conf-available/10-ssl.conf ./conf-available/10-trigger-b4-dl.conf ./conf-available/10-userdir.conf ./conf-available/README ./conf-enabled ./conf-enabled/CVS ./conf-enabled/CVS/Root ./conf-enabled/CVS/Repository ./conf-enabled/CVS/Entries ./conf-enabled/.dummy ./modules.conf ./conf.d ./conf.d/access_log.conf ./conf.d/auth.conf ./conf.d/cgi.conf ./conf.d/compress.conf ./conf.d/debug.conf ./conf.d/dirlisting.conf ./conf.d/evhost.conf ./conf.d/expire.conf ./conf.d/fastcgi.conf ./conf.d/mime.conf ./conf.d/mod.template ./conf.d/proxy.conf ./conf.d/scgi.conf ./conf.d/secdownload.conf ./conf.d/simplev_host.conf ./conf.d/ssi.conf ./conf.d/status.conf ./conf.d/userdir.conf ./conf.d/CVS ./conf.d/CVS/Root ./conf.d/CVS/Repository ./conf.d/CVS/Entries ./lighttpd.conf.opensuse ./CVS ./CVS/Root ./CVS/Repository ./CVS/Entries ./lighttpd.conf
Stellen Sie auch sicher, dass Sie diese Skriptdateien in /usr/sbin/ haben.
- lighty-disable-mod
#!/usr/bin/perl -w
#
# Copyright (c) 2006 Krzysztof Krzyzaniak
#
# Contains changes from:
# - Tobias Gruetzmacher <tobias@portfolio16.de>
#
# You may distribute under the terms of either the GNU General Public
# License[1] or the Artistic License[2].
#
# [1] http://www.gnu.org/licenses/gpl.html
# [2] http://www.perl.com/pub/a/language/misc/Artistic.html
#
use strict;
use Term::ReadLine;
use File::Basename;
use File::Glob ':glob';
use File::stat;
#--- some initializations
my $confdir = "/etc/lighttpd/";
my %available = ();
my %enabled = ();
my @todo = ();
my %moduledeps = ();
my $enabling = 1;
#--- first check if we enabling or disabling
if ($0 =~ /disable-mod$/) {
#--- disabling mode
$enabling = 0;
}
#--- list of available modules
my @files = bsd_glob($confdir.'conf-available/*.conf');
print "Available modules: ";
foreach my $file (@files) {
if (basename($file) =~ /^\d+\-([\w\-]+)\.conf$/) {
$available{$1} = $file;
print qq{$1 };
}
}
print "\n";
#--- list of already enabled modules
@files = bsd_glob($confdir.'conf-enabled/*.conf');
print "Already enabled modules: ";
foreach my $file (@files) {
if (basename($file) =~ /^\d+\-([\w\-]+)\.conf$/) {
$enabled{$1} = $file;
print qq{$1 };
}
}
print "\n";
unless (defined($ARGV[0])) {
my $prompt = $enabling ? 'Enable module: ' : 'Disable module: ';
my $term = new Term::ReadLine $prompt;
my $OUT = $term->OUT || \*STDOUT;
my $var = lc($term->readline($prompt));
@todo = split(/ /, $var);
}
else {
@todo = @ARGV;
}
#--- activate (link) or deactivate (remove) module
foreach my $do (@todo) {
my $target = sprintf("%s/conf-enabled/%s", $confdir,basename($available{$do}));
if ($enabling) {
print qq{Enabling $do: };
my $st = stat($target);
unless ( -f $target ) {
if (symlink($available{$do}, $target)) {
print "ok\n";
}
else {
print "failure: $!\n";
}
}
else {
print "already enabled\n";
}
#--- check dependencies
for my $module (@{$moduledeps{$do}})
{
unless ( -f $target && -l $target )
{
print qq{Module $do depends on module $module which is not activated.\n};
}
}
}
else {
print qq{Disabling $do\n};
unlink($target);
}
}
print "Run /etc/init.d/lighttpd force-reload to enable changes\n";
- lighty-enable-mod
#!/usr/bin/perl -w
#
# Copyright (c) 2006 Krzysztof Krzyzaniak
#
# Contains changes from:
# - Tobias Gruetzmacher <tobias@portfolio16.de>
#
# You may distribute under the terms of either the GNU General Public
# License[1] or the Artistic License[2].
#
# [1] http://www.gnu.org/licenses/gpl.html
# [2] http://www.perl.com/pub/a/language/misc/Artistic.html
#
use strict;
use Term::ReadLine;
use File::Basename;
use File::Glob ':glob';
use File::stat;
#--- some initializations
my $confdir = "/etc/lighttpd/";
my %available = ();
my %enabled = ();
my @todo = ();
my %moduledeps = ();
my $enabling = 1;
#--- first check if we enabling or disabling
if ($0 =~ /disable-mod$/) {
#--- disabling mode
$enabling = 0;
}
#--- list of available modules
my @files = bsd_glob($confdir.'conf-available/*.conf');
print "Available modules: ";
foreach my $file (@files) {
if (basename($file) =~ /^\d+\-([\w\-]+)\.conf$/) {
$available{$1} = $file;
print qq{$1 };
}
}
print "\n";
#--- list of already enabled modules
@files = bsd_glob($confdir.'conf-enabled/*.conf');
print "Already enabled modules: ";
foreach my $file (@files) {
if (basename($file) =~ /^\d+\-([\w\-]+)\.conf$/) {
$enabled{$1} = $file;
print qq{$1 };
}
}
print "\n";
unless (defined($ARGV[0])) {
my $prompt = $enabling ? 'Enable module: ' : 'Disable module: ';
my $term = new Term::ReadLine $prompt;
my $OUT = $term->OUT || \*STDOUT;
my $var = lc($term->readline($prompt));
@todo = split(/ /, $var);
}
else {
@todo = @ARGV;
}
#--- activate (link) or deactivate (remove) module
foreach my $do (@todo) {
my $target = sprintf("%s/conf-enabled/%s", $confdir,basename($available{$do}));
if ($enabling) {
print qq{Enabling $do: };
my $st = stat($target);
unless ( -f $target ) {
if (symlink($available{$do}, $target)) {
print "ok\n";
}
else {
print "failure: $!\n";
}
}
else {
print "already enabled\n";
}
#--- check dependencies
for my $module (@{$moduledeps{$do}})
{
unless ( -f $target && -l $target )
{
print qq{Module $do depends on module $module which is not activated.\n};
}
}
}
else {
print qq{Disabling $do\n};
unlink($target);
}
}
print "Run /etc/init.d/lighttpd force-reload to enable changes\n";
- lua >= 5.1
=> Herunterladen von http://rpmfind.net//linux/RPM/fedora/extras/5/i386/lua-5.1-6.fc5.i386.html => Neubau auf der CentOS-Maschine und installieren des RPMs
- MySQL-server-5.1.14-0.glibc23
=> herunterladen aus dem offiziellen CentOS-Depot
- rubygem-fcgi
=> gem 2 rpm verwendet ein Skript
- rubygem-mysql
=> gem 2 rpm verwendet ein Skript
- rubygem-rails
=> gem 2 rpm verwendet ein Skript
- rubygem-rake
=> gem 2 rpm verwendet ein Skript
Wie Sie sehen, fehlt lighttpd_mod_magnet unter den Abhängigkeiten. Wir haben dieses RPM weder, noch brauchen wir es, da sich die mod_magnet.c und die mod_magnet.so schon in unserem Quellkode befinden. Deshalb müssen wir das obs-server-Paket neu bauen, was sich mit der am Anfang der Seite vorgestellten spec-Datei bewerkstelligen lässt. Die Abhängigkeiten zu mod_magnet wurden dort entfernt, darüber hinaus wurden die Namen eingier gem-RPMs geändert.
Einrichtung und Konfiguration der MySQL-Datenbank
- Starten Sie ihre MySQL-Datenbank
/etc/init.d/mysql start
- Erstellen Sie das root-Konto
/usr/bin/mysqladmin -u root password 'your-password'
- Konfigurieren Sie ihren verwendeten MySQL-Nutzer in den "development:"-Abschnitten.
/srv/www/obs/frontend/config/database.yml /srv/www/obs/webclient/config/database.yml
- Erstellen Sie die Datenbank
mysql -u root -p mysql> create database frontend_development; mysql> quit
- Wechseln Sie in den Frontend-Ordner
cd /srv/www/obs/frontend/
- Füllen Sie die Datenbank
rake migrate
Einrichten und Konfigurieren von Frontend und Web-Client
Nach der Konfiguration von Frontend (und Web-Client) wird eine Schnittstellenschiene benötigt. Eine Konfiguration zum Zugriff via http://127.0.42.1 und http://127.0.42.2 wird automatisch in /etc/lighttpd/vhosts.d/obs.conf installiert.
Wir verwenden einen anderen lighttpd, unsere Konfigurationsdateien sehen wie folgt aus:
- /etc/lighttpd/lighttpd.conf
############ Options you really have to take care of ####################
## modules to load
# mod_access, mod_accesslog and mod_alias are loaded by default
# all other module should only be loaded if neccesary
# - saves some time
# - saves memory
server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_rewrite",
"mod_redirect",
"mod_magnet",
"mod_fastcgi",
# "mod_status",
# "mod_evhost",
"mod_compress",
# "mod_usertrack",
# "mod_rrdtool",
# "mod_webdav",
# "mod_expire",
# "mod_flv_streaming",
# "mod_evasive",
"mod_setenv"
)
## a static document-root, for virtual-hosting take look at the
## server.virtual-* options
server.document-root = "/srv/www/docs/api"
## where to send error-messages to
server.errorlog = "/var/log/lighttpd/error.log"
## files to check for if .../ is requested
index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm" )
## Use the "Content-Type" extended attribute to obtain mime type if possible
# mimetype.use-xattr = "enable"
#### accesslog module
accesslog.filename = "/var/log/lighttpd/access.log"
## deny access the file-extensions
#
# ~ is for backupfiles from vi, emacs, joe, ...
# .inc is often used for code includes which should in general not be part
# of the document-root
url.access-deny = ( "~", ".inc" )
######### Options that are good to be but not neccesary to be changed #######
## bind to port (default: 80)
#server.port = 81
## bind to localhost only (default: all interfaces)
#server.bind = "localhost"
## error-handler for status 404
#server.error-handler-404 = "/error-handler.html"
#server.error-handler-404 = "/error-handler.php"
server.error-handler-404 = "/dispatch.fcgi"
## to help the rc.scripts
server.pid-file = "/var/run/lighttpd.pid"
##
## Format: <errorfile-prefix><status>.html
## -> ..../status-404.html for 'File not found'
#server.errorfile-prefix = "/var/www/"
## virtual directory listings
dir-listing.encoding = "utf-8"
server.dir-listing = "disable"
## send unhandled HTTP-header headers to error-log
#debug.dump-unknown-headers = "enable"
### only root can use these options
#
# chroot() to directory (default: no chroot() )
#server.chroot = "/"
## change uid to <uid> (default: don't care)
#server.username = "www-data"
server.username = "lighttpd"
## change uid to <uid> (default: don't care)
#server.groupname = "www-data"
server.groupname = "lighttpd"
#### compress module
#compress.cache-dir = "/var/tmp/lighttpd/cache/compress/"
#compress.filetype = ("text/plain", "text/html")
#### status module
# status.status-url = "/server-status"
# status.config-url = "/server-config"
#### url handling modules (rewrite, redirect, access)
# url.rewrite = ( "^/$" => "/server-status" )
# url.redirect = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )
# url.rewrite = ( "^/$" => "index.html", "^([^.]+)$" => "$1.html" )
#
# define a pattern for the host url finding
# %% => % sign
# %0 => domain name + tld
# %1 => tld
# %2 => domain name without tld
# %3 => subdomain 1 name
# %4 => subdomain 2 name
#
# evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/"
#### expire module
# expire.url = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
#### rrdtool
# rrdtool.binary = "/usr/bin/rrdtool"
# rrdtool.db-name = "/var/www/lighttpd.rrd"
## this is a hack
alias.url = ("___invalid___" => "___invalid___")
#### handle Debian Policy Manual, Section 11.5. urls
#### and by default allow them only from localhost
$HTTP["host"] == "localhost" {
dir-listing.activate = "disable"
}
#### variable usage:
## variable name without "." is auto prefixed by "var." and becomes "var.bar"
#bar = 1
#var.mystring = "foo"
## integer add
#bar += 1
## string concat, with integer cast as string, result: "www.foo1.com"
#server.name = "www." + mystring + var.bar + ".com"
## array merge
#index-file.names = (foo + ".php") + index-file.names
#index-file.names += (foo + ".php")
#### external configuration files
## mimetype mapping
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
## load enabled configuration files,
## read /etc/lighttpd/conf-available/README first
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
## files needed for OBS
setenv.add-environment = ("LUA_INIT" => "@/usr/share/lua/5.1/compat-5.1.lua")
var.conf_dir = "/etc/lighttpd"
var.log_root = "/srv/obs/log"
include "vhosts.d/obs.conf"
- start your lighttpd server
# lighttpd -f /etc/lighttpd/lighttpd.conf
Einrichten der Anfangsdistributionen
( I've never reached to this part :p )
Zugriff
Standardmäßig können Sie mit jedem Browser unter der folgenden Adresse auf die API zugreifen:
http://127.0.42.2
Die Web-Schnittstelle ist unter der folgenden Adresse erreichbar:
http://127.0.42.1
Der Standardnutzer ist "Admin", sein Passwort ist "opensuse".
Lösungen
127.0.42.2 nicht für das Frontend verwenden
Wenn Sie eine andere IP für ihr Frontend verwenden, wird ihr Build Service nicht korrekt laufen. Um das zu beheben, bearbeiten Sie die Datei /srv/www/obs/webclient/config/environments/development.rb und ändern Sie den Wert bei FRONTEND_HOST in ihre IP.
Abspann
Die englische Vorlage dieses Dokuments stammt von Jochen Hebbrecht. Er schrieb die Anleitung, da er ein Projekt für die Schule (Stufe) macht und dort geplant wird, das openSUSE Bauwerkzeug zu verwenden. Geben Sie ihm nicht die Schuld für Fehler, sondern beheben Sie sie. Er weiß, das diese Anlaeitung noch nicht vollständig ist, er versuchte, alles zu notieren, was er durchgeführt hat, aber wie Sie wissen, ist niemand perfekt. Wenn Sie weitere Fragen an ihn haben, können Sie ihn jederzeit über Jabber unter der Adresse jochenhebbrecht [AT] gmail [DOT] com erreichen (oder auf irc.freenode.net => Spitzname: jochus).

