<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Administrator's Blog</title>
    <link>http://www.robhost.de/adminblog/</link>
    <description>Das Leben eines Administrators</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 1.6.2 - http://www.s9y.org/</generator>
    
    

<item>
    <title>Eigenen Git-Server ala Github aufsetzen</title>
    <link>http://www.robhost.de/adminblog/archives/377-Eigenen-Git-Server-ala-Github-aufsetzen.html</link>
            <category>Linux</category>
    
    <comments>http://www.robhost.de/adminblog/archives/377-Eigenen-Git-Server-ala-Github-aufsetzen.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=377</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=377</wfw:commentRss>
    

    <author>nospam@example.com (Christoph Kretzschmar)</author>
    <content:encoded>
    Eine Versionsverwaltung bestimmt den Alltag in größeren Projekten. Wo bisher SVN oder Merurical herhalten durfte, hat sich ein neuer Platzhirsch durchgesetzt, der aufgrund seiner Simplizität und Mächtigkeit überzeugt. Viele dürften es erraten haben, es handelt sich um Git.&lt;br /&gt;
&lt;br /&gt;
Es gibt vielerlei Möglichkeiten mit Git eine Versionierung zu erreichen, sei es lokal oder auf github, bitbucket oder anderen Git-Repository Providern. Spätestens wenn es aber um Firmeninterne Projekte geht oder aber um allgemein nicht der Öffentlichkeit zugängliche Projekte muss man meist in die Tasche greifen und den Providern einen kleinen Obolus zahlen, damit diese die privaten Projekte Hosten und mehreren Teammitgleider ggf. Zugriff darauf gewähren.&lt;br /&gt;
 &lt;br /&gt;
Kostengünstiger wäre es da einen eigenen Git-Server zu haben, welcher die internen Projekte angemessen verwaltet. Theoretisch ist auch dies schnell von statten gegangen, kann man doch über SSH auf ein zentrales Bare-Repository tunneln und Änderungen pushen und pullen.&lt;br /&gt;
 &lt;br /&gt;
Wenn man jedoch auch gleichzeitig eine schöne Übersicht sämtlicher Commits haben möchte, samt Administration für Repoverwaltung, Benutzerverwaltung, etc. dann kommt man nicht umher sich diverse Webinterfaces anzuschauen, die einem diese Arbeit abnehmen können.&lt;br /&gt;
 &lt;br /&gt;
Eine begrenzte Auswahl wären die folgenden Verwaltungssysteme:&lt;br /&gt;
&lt;ul&gt; &lt;br /&gt;
&lt;li&gt;http://www.gitalist.com/ (Seit Mai 2012 scheinbar keine Entwicklung mehr?)&lt;/li&gt; &lt;br /&gt;
&lt;li&gt;http://www.gitblit.com/ (Basiert auf Java und benötigt entsprechend einen Jetty o.ä.)&lt;/li&gt; &lt;br /&gt;
&lt;li&gt;http://www.gitlabhq.com/ (Basiert auf Ruby und hat als Komplementärprojekt auch ein eigenen CI-Server mit Gitlab integration)&lt;/li&gt; &lt;br /&gt;
&lt;/ul&gt;Für den Blogeintrag betrachten wir letzteres (Gitlab) genauer.&lt;br /&gt;
&lt;br /&gt;
Gitlab bring viele Funktionen mit, wie man sie auch von öffentlichen Git-Repository Servern wie z.B. GitHub kennt. Man hat eine pro Benutzer Projektverwaltung, ein Wiki, Issuetracker mit Redmine Integrationsmöglichkeiten, einfache Möglichkeiten POST-Hooks bei einem push in das Repo auszulösen und das mitunter beste ist, dass das Gitlab Webinterface fast ausschließlich über die Gitlab eigene API aufbaut. Das bedeutet man kann alles was man im Webinterface klicken kann auch über automatisierte Skripte auslösen, abfragen und verarbeiten.&lt;br /&gt;
 &lt;br /&gt;
Die Installation die hier vorgestellt wird, nutzt abseits von dem empfohlenen Weg ein RVM (Ruby Virtual Environment), da man sich nicht unbedingt mit dem Betriebssystem über die installierte Rubyversion oder verschiedener Gems streiten möchte. Jedoch verlangt dies einige nachträgliche Anpassungen, welche aber so minimal gehalten sind, dass diese nicht ins Gewicht fallen. Zudem werden wir statt nginx den Apache2 nutzen um Gitlab auszuliefern. Die Schritte für nginx stehen auch im vorgestellten Skript, sind jedoch auskommentiert. (Es sei darauf hingewiesen das es kein richtiges Bash-Skript ist sondern mehr eine Anleitung was wann zu tun ist).&lt;br /&gt;
 &lt;br /&gt;
An den Stellen, wo zum bearbeiten der Konfigurationsdateien ,vim genutzt wird kann der persönlich bevorzugte Editor genutzt werden (emacs, nano, etc.)&lt;br /&gt;
&lt;br /&gt;
Bevor es nun los geht weise ich noch darauf hin, dass wir hier Gitlab @master nutzen, bedeutet die aktuelle Entwickler Version. Dies wird entsprechend so gemacht, da ab der Version 5.0 (Zum Zeitpunkt dieses Posts @master) gitolite durch eine eigene Loginshell ersetzt wird. Da gitolite als Repositoryverwaltung im Zusammenspiel mit Gitlab sehr verbuggt war. Sollte es also irgendwann einmal ein 5-x-stable branch geben so wäre dieser zu bevorzugen. Das kann man enstprechend prüfen, indem man nach dem clone des gitlab repos ,git branch -a aufruft. Sollte da ein remotes/origin/5-x-stable existieren so kann man dies mit ,git checkout 5-x-stable auschecken und fortan nutzen. (x steht für eine beliebige Zahl) Die Loginshell wird nach einem Erfolgreichen authentifizieren gegenüber SSH für den Benutzer git gerufen. Das ganze kann man sich anschauen, wenn man sich die Datei ,/home/git/.ssh/authorized_keys anschaut. Hat man für einen Benutzer einen Key im Frontend importiert, so wird dieser in diese Datei geschrieben (zusammen mit dem command auf die gitlab-shell) und regelt den SSH Zugriff auf das Repository über die git-checkout URL eines Projekts.&lt;br /&gt;
&lt;br /&gt;
Die genutzte Distribution, bei der die folgenden Anweisungen genutzt wurden, ist Debian 6 Squeeze. Der Benutzer mit dem installiert wird ist ,root aber keine Angst, Gitlab wird später unter dem Benutzer ,git in das System installiert, für die ersten Schritte wie apt-get ist root jedoch vorrausgesetzt. Der Name des Benutzers sollte nicht verändert werden, da sonst viele der Standard Skripte angepasst werden müssten, da diese ,git als Benutzer für sämtliche ,sudo Befehle hard-coded haben.&lt;br /&gt;
 &lt;br /&gt;
Zuerst aktivieren wir das Backports Repository damit wir einen Redis-Server &amp;gt;v2.0 installieren können. Dieser wird benötigt, da Gitlab BRPOP nutzt, welches erst seit v2.0.0 in Redis implementiert ist.&lt;br /&gt;
&lt;blockquote&gt;# Enable backports&lt;br /&gt;
echo &quot;deb http://backports.debian.org/debian-backports squeeze-backports main&quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
# System up-to-date&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get dist-upgrade&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
Als nächstes benötigen wir sudo und einige weitere Pakete um Ruby und dessen Gems entsprechend kompilieren zu können.&lt;br /&gt;
 &lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
&gt;# Install all packages we need&lt;br /&gt;
apt-get install -y \&lt;br /&gt;
                sudo \&lt;br /&gt;
                vim \&lt;br /&gt;
                build-essential \&lt;br /&gt;
                checkinstall \&lt;br /&gt;
                gcc \&lt;br /&gt;
                make \&lt;br /&gt;
                automake \&lt;br /&gt;
                wget \&lt;br /&gt;
                curl \&lt;br /&gt;
                openssh-server \&lt;br /&gt;
                git-core \&lt;br /&gt;
                mysql-server \&lt;br /&gt;
                mysql-client \&lt;br /&gt;
                sqlite3 \&lt;br /&gt;
                libsqlite3-dev \&lt;br /&gt;
                zlib1g-dev \&lt;br /&gt;
                libyaml-dev \&lt;br /&gt;
                libssl-dev \&lt;br /&gt;
                libgdbm-dev \&lt;br /&gt;
                libreadline-dev \&lt;br /&gt;
                libncurses5-dev \&lt;br /&gt;
                libffi-dev \&lt;br /&gt;
                libxml2-dev \&lt;br /&gt;
                libxslt-dev \&lt;br /&gt;
                libcurl4-openssl-dev \&lt;br /&gt;
                libicu-dev \&lt;br /&gt;
                libxml2-dev \&lt;br /&gt;
                libxslt-dev \&lt;br /&gt;
                libcurl4-openssl-dev \&lt;br /&gt;
                libreadline6-dev \&lt;br /&gt;
                libc6-dev \&lt;br /&gt;
                libssl-dev \&lt;br /&gt;
                libmysql++-dev \&lt;br /&gt;
                zlib1g-dev \&lt;br /&gt;
                libyaml-dev \&lt;br /&gt;
                libpq-dev \&lt;br /&gt;
                libmysqlclient-dev&lt;br /&gt;
&lt;br /&gt;
# Redis from backports 2.x +&lt;br /&gt;
apt-get install -y -t squeeze-backports redis-server&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
&lt;br /&gt;
Soll Gitlab auch Mails versenden können (z.B. Passwort vergessen-Mails), so wird auch ein postfix benötigt.&lt;br /&gt;
 &lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
# Install Postfix for mail sending (optional)&lt;br /&gt;
apt-get install postfix&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
&lt;br /&gt;
Als nächstes intallieren wir Python, dies wird von Gitlab auch noch benötigt.&lt;br /&gt;
 &lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
# Install python (2.x preferable, if python --version is 3.x+ use python27)&lt;br /&gt;
apt-get install python&lt;br /&gt;
&lt;br /&gt;
# Ensure python2 exists (needed by gitlab)&lt;br /&gt;
which python2 || ln -s /usr/bin/python /usr/bin/python2&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
&lt;br /&gt;
Als nächstes legen wir die Datenbank an.&lt;br /&gt;
 &lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
# Create Database&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
&lt;br /&gt;
CREATE USER &#039;gitlab&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;YOUR GITLAB PASSWORD&#039;;&lt;br /&gt;
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;&lt;br /&gt;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.** TO &#039;gitlab&#039;@&#039;localhost&#039;;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
# Test SQL (need to enter YOUR GITLAB PASSWORD)&lt;br /&gt;
mysql -u gitlab -p -D gitlabhq_production&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
&lt;br /&gt;
Jetzt wechseln wir auf den Benutzer und installieren Gitlab in dessen HOME-Verzeichnis:&lt;br /&gt;
 &lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
su git&lt;br /&gt;
    # Set git username and email&lt;br /&gt;
    git config --global user.name  &quot;GitLab&quot; &lt;br /&gt;
    git config --global user.email &quot;gitlab@localhost&quot; &lt;br /&gt;
&lt;br /&gt;
    # Install Ruby RVM with ruby1.9.3&lt;br /&gt;
    \curl -L https://get.rvm.io | bash -s stable&lt;br /&gt;
&lt;br /&gt;
    echo &quot;source /home/git/.rvm/scripts/rvm&quot; &amp;gt;&amp;gt; .bashrc&lt;br /&gt;
&lt;br /&gt;
    source /home/git/.rvm/scripts/rvm&lt;br /&gt;
    source ~/.profile&lt;br /&gt;
&lt;br /&gt;
    rvm get head&lt;br /&gt;
    rvm reload&lt;br /&gt;
    rvm install 1.9.3&lt;br /&gt;
    rvm --default use 1.9.3&lt;br /&gt;
    echo &quot;source /home/git/.rvm/scripts/rvm&quot; &amp;gt;&amp;gt; .bashrc&lt;br /&gt;
    source /home/git/.rvm/scripts/rvm&lt;br /&gt;
&lt;br /&gt;
    # Install bundler&lt;br /&gt;
    gem install bundler&lt;br /&gt;
&lt;br /&gt;
    # Clone &amp;amp; Install GitlabShell&lt;br /&gt;
    git clone https://github.com/gitlabhq/gitlab-shell.git&lt;br /&gt;
    cd gitlab-shell&lt;br /&gt;
    cp config.yml.example config.yml&lt;br /&gt;
    vim config.yml&lt;br /&gt;
    ./bin/install&lt;br /&gt;
&lt;br /&gt;
    # Adjust the shebang for RVM&lt;br /&gt;
    # Nach einem frischen clone steht da: #!/usr/bin/env ruby&lt;br /&gt;
    # Das muss geändert werden in: #!/usr/bin/env /home/git/.rvm/bin/ruby&lt;br /&gt;
    vim bin/gitlab-shell&lt;br /&gt;
&lt;br /&gt;
    cd /home/git&lt;br /&gt;
&lt;br /&gt;
    # Clone gitlab&lt;br /&gt;
    git clone https://github.com/gitlabhq/gitlabhq.git gitlab&lt;br /&gt;
    cd /home/git/gitlab&lt;br /&gt;
    cp config/gitlab.yml.example config/gitlab.yml&lt;br /&gt;
    vim config/gitlab.yml&lt;br /&gt;
&lt;br /&gt;
    chmod -R u+rwX  log/&lt;br /&gt;
    chmod -R u+rwX  tmp/&lt;br /&gt;
&lt;br /&gt;
    # Create directory for satellites&lt;br /&gt;
    mkdir /home/git/gitlab-satellites&lt;br /&gt;
&lt;br /&gt;
    # Create temp and make sure its wirtable&lt;br /&gt;
    mkdir tmp/pids/&lt;br /&gt;
    chmod -R u+rwX  tmp/pids/&lt;br /&gt;
&lt;br /&gt;
    # Copy config templates&lt;br /&gt;
    cp config/unicorn.rb.example config/unicorn.rb&lt;br /&gt;
    cp config/database.yml.mysql config/database.yml&lt;br /&gt;
&lt;br /&gt;
    # Enable TCP instead of socket listening as we use apache&lt;br /&gt;
    # Use port 46660 on 127.0.0.1 and comment the socket, as we don&#039;t need it&lt;br /&gt;
    # die # vor listen 127.0.0.1:8080 entfernen und 8080 in 46660 ändern.&lt;br /&gt;
    # eine # vor listen &quot;#{app_dir}/tmp/sockets/gitlab.socket&quot; setzen.&lt;br /&gt;
    # !Dieser Schritt fällt weg, wenn man Gitlab auf einem nginx laufen lassen möchte, da dieser mit UNIX-Sockets reden kann.&lt;br /&gt;
    vim config/unicorn.rb&lt;br /&gt;
&lt;br /&gt;
    # Configure database&lt;br /&gt;
    vim config/database.yml&lt;br /&gt;
&lt;br /&gt;
    # Setup gitlab dependencies and database&lt;br /&gt;
    gem install charlock_holmes --version &#039;0.6.9&#039;&lt;br /&gt;
    bundle install --deployment --without development test postgres&lt;br /&gt;
&lt;br /&gt;
    bundle exec rake db:setup RAILS_ENV=production&lt;br /&gt;
    bundle exec rake db:seed_fu RAILS_ENV=production&lt;br /&gt;
    bundle exec rake gitlab:setup RAILS_ENV=production&lt;br /&gt;
&lt;br /&gt;
    # Check configuration&lt;br /&gt;
    bundle exec rake gitlab:env:info RAILS_ENV=production&lt;br /&gt;
&lt;br /&gt;
    exit&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
&lt;br /&gt;
Nun haben wir Gitlab erfolgreich auf dem System installiert und müssen dies nur noch starten. Dazu kann man das vom Entwickler bereitgestellte init.d Skript nutzen.&lt;br /&gt;
 &lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
# Install init.d-script and run gitlab&#039;s sidekiq and unicorn&lt;br /&gt;
curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab&lt;br /&gt;
chmod +x /etc/init.d/gitlab&lt;br /&gt;
update-rc.d gitlab defaults 21&lt;br /&gt;
/etc/init.d/gitlab start&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
&lt;br /&gt;
Nun hat man 2 Möglichkeiten, einmal NGinx und einmal Apache2.&lt;br /&gt;
&lt;br /&gt;
NGinx:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
# Install nginx and install gitlab site-config&lt;br /&gt;
apt-get install nginx&lt;br /&gt;
curl --output /etc/nginx/sites-available/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/nginx/gitlab&lt;br /&gt;
ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab&lt;br /&gt;
vim /etc/nginx/sites-available/gitlab&lt;br /&gt;
service nginx restart&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
&lt;br /&gt;
Apache2:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
apt-get install apache2 libapache2-mod-ssl libapache2-mod-proxy-html&lt;br /&gt;
vim /etc/apache2/sites-available/git.domain.tld&lt;br /&gt;
a2enmod ssl&lt;br /&gt;
a2enmod proxy_http&lt;br /&gt;
a2ensite git.domain.tld&lt;br /&gt;
/etc/init.d/apache2 restart&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
&lt;br /&gt;
git.domain.tld-VHost Konfiguration:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
# require apache module mod_proxy and mod_proxy_http&lt;br /&gt;
&amp;lt;IfModule mod_proxy_http.c&amp;gt;&lt;br /&gt;
    &amp;lt;VirtualHost &lt;ip&gt;:80&amp;gt;&lt;br /&gt;
        ServerName   git.domain.tld&lt;br /&gt;
        ServerAdmin  support@domain.tld&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
            RewriteEngine   on&lt;br /&gt;
            RewriteCond     %{SERVER_PORT} ^80$&lt;br /&gt;
            RewriteRule     ^(.*)$ https://%{SERVER_NAME}$1 [L,R]&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        # Server Gitlab over http as we don&#039;t have https/ssl&lt;br /&gt;
        &amp;lt;IfModule !mod_ssl.c&amp;gt;&lt;br /&gt;
            ProxyPass          /   http://127.0.0.1:46660/&lt;br /&gt;
            ProxyPassReverse   /   http://127.0.0.1:46660/&lt;br /&gt;
            ProxyPreserveHost On&lt;br /&gt;
&lt;br /&gt;
            # Entsprechend anpassen!&lt;br /&gt;
            # Deny from all, but allow BasicAuth and skip BasicAuth for 192.168.0.30&lt;br /&gt;
            # Satisfy Any will make sure that all paths are tested, before deny all will get triggered&lt;br /&gt;
            &amp;lt;Location /&amp;gt;&lt;br /&gt;
                Order deny,allow&lt;br /&gt;
                Deny from all&lt;br /&gt;
&lt;br /&gt;
                AuthType Basic&lt;br /&gt;
                AuthName &quot;Git Repository&quot; &lt;br /&gt;
                Require valid-user&lt;br /&gt;
                AuthUserFile /etc/apache2/git_auth.passwd&lt;br /&gt;
&lt;br /&gt;
                #Allow from 192.168.0.30&lt;br /&gt;
                Satisfy Any&lt;br /&gt;
            &amp;lt;/Location&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            CustomLog /var/log/apache2/gitlab_access.log combined&lt;br /&gt;
            ErrorLog  /var/log/apache2/gitlab_error.log&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
        &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
            ServerName   git.domain.tld&lt;br /&gt;
            ServerAdmin  support@domain.tld&lt;br /&gt;
&lt;br /&gt;
            # Sollte man noch auf seine eigenen Zertifikate anpassen!&lt;br /&gt;
            SSLEngine On&lt;br /&gt;
            SSLCertificateFile    /etc/ssl/domain/domain.crt&lt;br /&gt;
            SSLCertificateKeyFile /etc/ssl/domain/domain.key&lt;br /&gt;
            SSLCACertificateFile  /etc/ssl/domain/root.pem&lt;br /&gt;
&lt;br /&gt;
            ProxyPass          /   http://127.0.0.1:46660/&lt;br /&gt;
            ProxyPassReverse   /   http://127.0.0.1:46660/&lt;br /&gt;
            ProxyPreserveHost On&lt;br /&gt;
            RequestHeader set X-Forwarded-Ssl on&lt;br /&gt;
&lt;br /&gt;
            # Entsprechend anpassen!&lt;br /&gt;
            # Deny from all, but allow BasicAuth and skip BasicAuth for 192.168.0.30&lt;br /&gt;
            # Satisfy Any will make sure that all paths are tested, before deny all will get triggered&lt;br /&gt;
            &amp;lt;Location /&amp;gt;&lt;br /&gt;
                Order deny,allow&lt;br /&gt;
                Deny from all&lt;br /&gt;
&lt;br /&gt;
                AuthType Basic&lt;br /&gt;
                AuthName &quot;Git Repository&quot; &lt;br /&gt;
                Require valid-user&lt;br /&gt;
                AuthUserFile /etc/apache2/git_auth.passwd&lt;br /&gt;
&lt;br /&gt;
                #Allow from 192.168.0.30&lt;br /&gt;
                Satisfy Any&lt;br /&gt;
            &amp;lt;/Location&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            CustomLog /var/log/apache2/gitlab_access.log combined&lt;br /&gt;
            ErrorLog  /var/log/apache2/gitlab_error.log&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
Danach kann man prüfen ob alles läuft und funktionsfähig ist:&lt;br /&gt;
 &lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
# Check if everything works&lt;br /&gt;
su git&lt;br /&gt;
    cd /home/git/gitlab&lt;br /&gt;
    bundle exec rake gitlab:check RAILS_ENV=production&lt;br /&gt;
&lt;/blockquote&gt; &lt;br /&gt;
&lt;br /&gt;
Schon hat man seinen eigenen Git-Repository Server am laufen, welcher zudem große Ähnlichkeiten mit Github hat. Viele Entwickler im eigenen Team die schon einmal mit Github gearbeitet haben, werden sich da schnell zurechtfinden.&lt;br /&gt;
&lt;br /&gt;
Der initiale Administratoren Login lautet dann admin@local.host mit dem Passwort: 5iveL!fe  &lt;br /&gt;
&lt;br /&gt;
Dieser Benutzer sollte nach dem anlegen des eigenen Admin-Benutzers am besten gelöscht werden.&lt;br /&gt;
&lt;br /&gt;
Bei Fragen oder Kritiken können gern die Kommentare genutzt werden &lt;img src=&quot;http://www.robhost.de/adminblog/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sun, 24 Mar 2013 11:13:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/377-guid.html</guid>
    
</item>
<item>
    <title>Netzwerk-Konfiguration mit Proxmox VE</title>
    <link>http://www.robhost.de/adminblog/archives/376-Netzwerk-Konfiguration-mit-Proxmox-VE.html</link>
            <category>Linux</category>
    
    <comments>http://www.robhost.de/adminblog/archives/376-Netzwerk-Konfiguration-mit-Proxmox-VE.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=376</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=376</wfw:commentRss>
    

    <author>nospam@example.com (Robert Klikics)</author>
    <content:encoded>
    Mit &lt;a href=&quot;http://pve.proxmox.com/wiki/Main_Page&quot;&gt;Proxmox VE&lt;/a&gt; kann man hervorragend virtualisieren und bekommt ein nettes Webinterface dazu, um die Konfiguration vorzunehmen. Deshalb kommt diese Lösung, vor Allem mit KVM, seit einiger Zeit auch bei den &lt;a href=&quot;http://www.robhost.de/virtuelle-managed-server.html&quot;&gt;virtuellen managed Servern von RobHost&lt;/a&gt; erfolgreich zum Einsatz. Selbst Hochverfügbarkeit wird unterstützt - dazu in einem späteren Blogpost mehr.&lt;br /&gt;
&lt;br /&gt;
Leider ist die Netzwerk-Config nicht immer ganz trivial, im Netz finden man haufenweise Fragen und Howto&#039;s zu diesem Thema. Zwar &lt;a href=&quot;http://pve.proxmox.com/wiki/Network_Model&quot;&gt;beschreibt&lt;/a&gt; das Proxmox-Wiki auch einige Szenarien, in der Praxis sind aber oft Host-IP und das Subnetz für die VM&#039;s verschiedene Netzbereiche.&lt;br /&gt;
&lt;br /&gt;
Ein Problem bei vielen Rootservern ist, dass die Anbieter i.d.R. aus Sicherheitsgründen nicht zulassen, dass Netzwerk-Traffic über ein Interface von mehreren MAC-Adressen kommt. Dies hat zur Folge, das oft die normale Bridged-Lösung nicht funktioniert und eine etwas unschöne Routed-Konfiguration herhalten muss. Wir haben das Problem im Rechenzentrum zum Glück nicht, daher wird hier die Bridged-Variante vorgestellt.&lt;br /&gt;
&lt;br /&gt;
Dennoch gibt es das &quot;Problem&quot;, dass die IP des Proxmox-Host in einem anderen Netz liegt als das Subnetz für die virtuellen Maschinen. Daher klappt die ganz einfache Bridged-Konfiguration hier nicht, da wir ja keine IP verlieren wollen. Ansonsten könnte man natürlich dem Host die erste IP des Subnetzes geben. In Zeiten chronischer IPv4-Knappheit ist das aber wohl nicht im Sinne des Erfinders bzw. der RIPE &lt;img src=&quot;http://www.robhost.de/adminblog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Also brauchen wir eine Point-to-Point Verbindung, so dass die VMs zum Gateway auch durchkommen und eine normal funktionierende Netzwerk-Config haben.&lt;br /&gt;
&lt;br /&gt;
So sieht das Ganze dann unter Proxmox/Debian auf dem Host aus:&lt;blockquote&gt;iface eth0 inet manual&lt;br /&gt;
&lt;br /&gt;
auto vmbr0&lt;br /&gt;
iface vmbr0 inet static&lt;br /&gt;
        address 62.xxx.xxx.43&lt;br /&gt;
        netmask 255.255.255.255&lt;br /&gt;
        gateway 62.xxx.xxx.1&lt;br /&gt;
       	pointopoint 62.xxx.xxx.1&lt;br /&gt;
        bridge_ports eth0&lt;br /&gt;
        bridge_stp off&lt;br /&gt;
        bridge_fd 0&lt;br /&gt;
	bridge_maxwait 0&lt;/blockquote&gt;Wichtig ist die Netzmaske von  255.255.255.255 sowie der &lt;strong&gt;pointopoint&lt;/strong&gt; Eintrag (Achtung: nur mit einem &quot;t&quot;!). Mehr ist nicht nötig, d.h. es müssen keine expliziten Routen zu den VMs oder dem Subnetz gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Innerhalb der VMS sieht das dann so aus (Debian/Ubuntu):&lt;blockquote&gt;iface eth0 inet static&lt;br /&gt;
  address 5.xxx.xxx.111&lt;br /&gt;
  netmask 255.255.255.255&lt;br /&gt;
  gateway 62.xxx.xxx.43        # VM Host&lt;br /&gt;
  pointopoint 62.xxx.xxx.43   # VM Host&lt;/blockquote&gt;Bzw. so unter CentOS:&lt;blockquote&gt;# File: /etc/sysconfig/network-scripts/ifcfg-eth0&lt;br /&gt;
&lt;br /&gt;
DEVICE=&quot;eth0&quot; &lt;br /&gt;
BOOTPROTO=&quot;static&quot; &lt;br /&gt;
IPADDR=&quot;5.xxx.xxx.111&quot; &lt;br /&gt;
NETMASK=&quot;255.255.255.255&quot; &lt;br /&gt;
GATEWAY=&quot;62.xxx.xxx.43&quot; &lt;br /&gt;
HWADDR=&quot;D6:68:xx:xx:93:0B&quot; &lt;br /&gt;
ONBOOT=&quot;yes&quot; &lt;br /&gt;
&lt;br /&gt;
# File: /etc/sysconfig/network-scripts/route-eth0&lt;br /&gt;
&lt;br /&gt;
62.xxx.xxx.43 dev eth0 scope link&lt;br /&gt;
default via 62.xxx.xxx.43&lt;br /&gt;
&lt;/blockquote&gt;Das war es auch schon, damit sollten alle VMs problemlos an das Netz angebunden sein.&lt;br /&gt;
&lt;br /&gt;
In Kürze stellen wir hier unser Auto-Deployment Script für Proxmox vor. Bei Fragen einfach die Kommentare nutzen &lt;img src=&quot;http://www.robhost.de/adminblog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; 
    </content:encoded>

    <pubDate>Tue, 11 Dec 2012 08:39:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/376-guid.html</guid>
    
</item>
<item>
    <title>Datenbankstrukturen visualisieren </title>
    <link>http://www.robhost.de/adminblog/archives/375-Datenbankstrukturen-visualisieren.html</link>
            <category>Coding</category>
    
    <comments>http://www.robhost.de/adminblog/archives/375-Datenbankstrukturen-visualisieren.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=375</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=375</wfw:commentRss>
    

    <author>nospam@example.com (Robert Klikics)</author>
    <content:encoded>
    Beim Entwickeln und Dokumentieren von Software mit Datenbankanbindung ist es unumgänglich, die Struktur der Daten zu visualisieren. Die Aktualisierung der Dokumentation erfordert allerdings viel Disziplin und Aufmerksamkeit. Im Termindruck kurz vor der Abgabe kommt es ab und zu vor, dass die Dokumentation auf die TODO-Liste gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
Auf der Suche nach einer automatisierteren Lösung sind wir an den ausgereiften Möglichkeiten der &lt;a href=&quot;http://www.graphviz.org/&quot; rel=&quot;nofollow&quot;&gt;Graphviz&lt;/a&gt; community nicht vorbeigekommen. Eine einfache &quot;DOT Language&quot; ermöglicht es komplexe Grafiken und Strukturdiagramme mit unzähligen Einstellmöglichkeiten zu generieren.&lt;a class=&quot;serendipity_image_link&quot;  href=&#039;http://www.robhost.de/adminblog/uploads/screenshots/Bildschirmfoto2012-08-19um12.00.01.png&#039; onclick=&quot;F1 = window.open(&#039;/adminblog/uploads/screenshots/Bildschirmfoto2012-08-19um12.00.01.png&#039;,&#039;Zoom&#039;,&#039;height=488,width=806,top=213.5,left=324.5,toolbar=no,menubar=no,location=no,resize=1,resizable=1,scrollbars=yes&#039;); return false;&quot;&gt;&lt;!-- s9ymdb:240 --&gt;&lt;img class=&quot;serendipity_image_right&quot; width=&quot;200&quot; height=&quot;120&quot; src=&quot;http://www.robhost.de/adminblog/uploads/screenshots/Bildschirmfoto2012-08-19um12.00.01.serendipityThumb.png&quot; alt=&quot;&quot;  /&gt;&lt;/a&gt;&lt;br /&gt;
 &lt;br /&gt;
In einem aktuellen Beispiel benutzen wir den dot-compiler um eine Datenbankstruktur als Anlage für ein Pflichtenheft zu visualisieren. Ein lediglich mit der Datenbankverbindung konfigurierbares Script erzeugt die DOT Datei. Tabellen, Spalten, Fremdschlüssel und Datentypen können ganz nach belieben in der einfach zu verstehenden DOT Language ausgezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Das erwähnte Script in PHP findet ihr &lt;a href=&quot;http://klikics.de/paste/1345371303.html&quot;&gt;hier&lt;/a&gt;. Daraus wird ein Dotfile erzeugt, welches die hier dargestellte Grafik erzeugt.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sun, 19 Aug 2012 12:17:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/375-guid.html</guid>
    
</item>
<item>
    <title>Multiuser-GIT-Repos mit Gitolite (Debian Squeeze)</title>
    <link>http://www.robhost.de/adminblog/archives/374-Multiuser-GIT-Repos-mit-Gitolite-Debian-Squeeze.html</link>
            <category>Linux</category>
    
    <comments>http://www.robhost.de/adminblog/archives/374-Multiuser-GIT-Repos-mit-Gitolite-Debian-Squeeze.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=374</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=374</wfw:commentRss>
    

    <author>nospam@example.com (Uwe Gerdts)</author>
    <content:encoded>
    Git als Versionsverwaltung wird immer beliebter und die Dienste &lt;a href=&quot;http://gitorious.org/&quot; rel=&quot;nofollow&quot;&gt;gitorious.org&lt;/a&gt; oder &lt;a href=&quot;https://github.com/&quot; rel=&quot;nofollow&quot;&gt;github.com&lt;/a&gt; boomen. Wer dennoch Herr seiner Daten bleiben will oder wer die Kosten für einen Pro-Account bei diesen Diensten scheut kann sich leicht mit einer eigenen Repo-Verwaltung behelfen. Gitolite ist ein tolles Tool um genau dies zu ermöglichen. &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Installation&lt;/h3&gt;&lt;br /&gt;
Git und gitolite sind Bestandteil des Debian Squezze Repositories. Die Installation sollte also wieder ohne großen Aufwand erfolgen.&lt;br /&gt;
&lt;blockquote&gt;#apt-get install git-core gitolite&lt;/blockquote&gt;&lt;br /&gt;
Falls noch nicht geschehen, genenrieren wir uns einen SSH-Key.&lt;br /&gt;
&lt;blockquote&gt;#ssh-keygen&lt;/blockquote&gt;&lt;br /&gt;
Diesen Key benötigen wir für den initialen Zugang zur gitolite-Verwaltung. Wir kopieren ihn nach &lt;em&gt;/tmp&lt;/em&gt; um ihn für unseren git-Systemuser verfügbar zu machen.&lt;br /&gt;
&lt;blockquote&gt;#cp .ssh/id_rsa.pub /tmp/gitolite_init.pub&lt;/blockquote&gt;&lt;br /&gt;
Optional können wir noch ein paar globale git Konfigurationsvariablen setzen.&lt;br /&gt;
&lt;blockquote&gt;git config --global user.name &quot;Dein Name&quot;&lt;br /&gt;
git config --global user.email deine@email.de&lt;/blockquote&gt;&lt;br /&gt;
Nun erstellen wir unser zentrales Repoverzeichniss und legen einen git-Systemuser an.&lt;br /&gt;
&lt;blockquote&gt;#/var/git-repos&lt;br /&gt;
#useradd -d /var/git-repos/ -s /bin/bash git&lt;br /&gt;
#chown git:git /var/git-repos/&lt;/blockquote&gt;&lt;br /&gt;
Nun wechseln wir zu unserem git-Systemuser und starten das Setup von gitolite in seinem home-Verzeichniss. Wichtig ist die Übergabe des inititalen SSH-Keys den wir in /tmp abgelegt haben. Der Key in &lt;em&gt;/tmp&lt;/em&gt; wird danach nicht mehr benötigt und kann gelöscht werden.&lt;br /&gt;
&lt;blockquote&gt;#su git&lt;br /&gt;
$cd /home/git-repos&lt;br /&gt;
$gl-setup /tmp/gitolite_init.pub&lt;br /&gt;
$exit&lt;br /&gt;
#rm  /tmp/gitolite_init.pub&lt;/blockquote&gt;&lt;br /&gt;
Dann können wir das administrative Repo auschecken und die Konfigurationen auf unsere Bedürfnisse anpassen.&lt;br /&gt;
&lt;blockquote&gt;git clone git@127.0.0.1:gitolite-admin.git&lt;/blockquote&gt;&lt;br /&gt;
In &lt;em&gt;./gitolite-admin/conf/gitolite.conf&lt;/em&gt; werden die Repos und Berechtigungen verwaltet. im Verzeichniss &lt;em&gt;./gitolite-admin/keydir/&lt;/em&gt; werden die public-ssh-keys der User abgelegt.&lt;br /&gt;
Die Änderungen werden erst wirksam wenn wir das repo auf den Server pushen.&lt;br /&gt;
&lt;blockquote&gt;#git add .&lt;br /&gt;
#git commit .&lt;br /&gt;
#git push&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
Falls wir in &lt;em&gt;./gitolite-admin/conf/gitolite.conf&lt;/em&gt; ein neues Repo konfiguriert haben wird dies nach einem push auch automatisch angelegt und steht sofort bereit.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Fazit&lt;/h3&gt;&lt;br /&gt;
Gitolite bietet die Möglichkeit mehrere git-Repos für mehrere User komfortabel zu verwalten ohne dem User weitere Rechte auf dem System ermöglichen zu müssen. Gitolite setzt für die Authentifizierung von Benutzern ausschließlich auf SSH-Keys. Eine Authentifizierung via Passwort ist nicht möglich. Es sind sehr komplexe Berechtigungsstrukturen möglich die Dokumentation dazu findet man &lt;a href=&quot;http://sitaramc.github.com/gitolite/&quot; rel=&quot;nofollow&quot;&gt;hier&lt;/a&gt;.&lt;br /&gt;
Wer ein schönes Web-Interface braucht sollte ein Blick auf &lt;a href=&quot;http://gitlabhq.com/&quot; rel=&quot;nofollow&quot;&gt;gitlabhq.com&lt;/a&gt; werfen. Dies scheint ein interessantes Projekt zu sein und setzt direkt auf gitolite.&lt;br /&gt;
  
    </content:encoded>

    <pubDate>Fri, 13 Jul 2012 13:06:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/374-guid.html</guid>
    
</item>
<item>
    <title>Synergy - Cleveres Software KVM</title>
    <link>http://www.robhost.de/adminblog/archives/373-Synergy-Cleveres-Software-KVM.html</link>
            <category>Work</category>
    
    <comments>http://www.robhost.de/adminblog/archives/373-Synergy-Cleveres-Software-KVM.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=373</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=373</wfw:commentRss>
    

    <author>nospam@example.com (Christoph Kretzschmar)</author>
    <content:encoded>
    &lt;a href=&quot;http://synergy-foss.org/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Synergy&lt;/a&gt; ist&amp;#160;interessant&amp;#160;für jeden der 2 Monitore, 2 Rechner und nur 1 Set an HID`s besitzt.&lt;br /&gt;
&lt;br /&gt;
Man könnte jetzt Maus und Tastatur über ein KVM Hardware Switch ständig zwischen beiden Rechnern hin-und-her wechseln. Jedoch besitzt nicht jeder ein solches Gerät, noch lohnt sich die Anschaffung des selbigen Aufgrund der doch sehr hohen Kosten von USB KVM Switches.&lt;br /&gt;
&lt;br /&gt;
Eine&amp;#160;mittlerweile&amp;#160;sehr gute Softwarelösung ist&amp;#160;&lt;a href=&quot;http://synergy-foss.org/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Synergy&lt;/a&gt;, welches Maus und Tastatur über das Netzwerk mit beiden Rechnern verbindet. Dabei fungiert der Rechner mit angeschlossenen Geräten als Server und der Rechner, welche keine Maus und Tastatur angeschlossen hat als Client.&lt;br /&gt;
&lt;br /&gt;
Dabei hat man die freie Wahl der Plattform, denn&amp;#160;&lt;a href=&quot;http://synergy-foss.org/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Synergy&lt;/a&gt;&amp;#160;ist Plattformunabhängig. Ein weiterer Vorteil ist die synchronisierte Zwischenablage. Zuletzt sei erwähnt dass man durch die Software Lösung auch gerne schnell vergisst, dass man 2 verschiedene Rechner bedient, denn&amp;#160;&lt;a href=&quot;http://synergy-foss.org/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Synergy&lt;/a&gt;&amp;#160;schaltet seamless zwischen beiden Systemen um, sobald man den Konfigurierten Randbereich mit der Maus überschreitet.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;strong&gt;Konfiguration&lt;/strong&gt;&lt;/u&gt;&lt;br /&gt;Vorab: Ich empfehle euch&amp;#160;unbedingt&amp;#160;die Beta zu benutzen, da hier die Benutzerschittstelle um einiges ausgereifter ist.&lt;br /&gt;Szenario: Rechner 1 ist ein Windows mit angeschlossenen Gerätschaften, Rechner 2 ist ein OSX Lion der diese Geräte nutzen möchte.&lt;br /&gt;
&lt;br /&gt;
Zuerst installiert man auf beiden Systemen die Software. Dabei wählt man in der Installation für Rechner 1, Server aus und für Rechner 2 wählen wir Client. Die Frage nach dem Automatischen Start kann jeder so beantworten wie er es gerne mag, bei mir starten beide Rechner die Software im &amp;quot;Desktop&amp;quot; Level, bedeutet erst nachdem ich mich angemeldet habe.&lt;br /&gt;
&lt;br /&gt;
Nun kann man auf Seite des Servers entsprechend &amp;quot;Configure Server...&amp;quot; wählen. Nun hat man eine Übersicht aller konfigurierten Rechner (im unkonfigurierten Fall entsprechend ein Monitor in der Mitte mit dem Netzwerknamen des eigenen Rechners).&lt;br /&gt;
&lt;br /&gt;
&lt;!-- s9ymdb:237 --&gt;&lt;a href=&quot;http://www.robhost.de/adminblog/uploads/screenshots/Synergy_Server1.PNG&quot;&gt;&lt;img class=&quot;serendipity_image_center&quot; width=&quot;200&quot; height=&quot;146&quot; src=&quot;http://www.robhost.de/adminblog/uploads/screenshots/Synergy_Server1.serendipityThumb.PNG&quot; alt=&quot;&quot;  /&gt;&lt;/a&gt; &lt;br /&gt;
Nun kann man von oben Rechts einen Monitor, via drag-and-drop an die Position ziehen, die der zweite physische Monitor hat, welcher an den 2. Rechner angeschlossen ist. Dadurch wird ein &amp;quot;Unnamed&amp;quot; Bildschirm erstellt.&lt;br /&gt;
&lt;br /&gt;
&lt;!-- s9ymdb:238 --&gt;&lt;a href=&quot;http://www.robhost.de/adminblog/uploads/screenshots/Synergy_Server2.PNG&quot;&gt;&lt;img class=&quot;serendipity_image_center&quot; width=&quot;200&quot; height=&quot;146&quot; src=&quot;http://www.robhost.de/adminblog/uploads/screenshots/Synergy_Server2.serendipityThumb.PNG&quot; alt=&quot;&quot;  /&gt;&lt;/a&gt;&lt;br /&gt;
Durch einen Doppelklick auf diesen gelangt man entsprechend in den Konfigurationsdialog. Dort gibt man diesem Bildschirm den Netzwerknamen/Hostname des 2. Rechners als &amp;quot;Screen name&amp;quot; an. In meinem Fall ist das &amp;quot;Christophs-MacBook-Pro.local&amp;quot;. Jetzt kann man noch diverse &amp;quot;Key-Modifier&amp;quot; umsetzen, was bei OSX z.B. Praktisch ist, da sonst Super(Apfel) und Alt vertauscht sind. Daher mappe ich in meinem Fall &amp;quot;Alt auf Super&amp;quot; und &amp;quot;Super auf Alt&amp;quot;. Damit ist auf Seiten des Servers alles fertig konfiguriert.&amp;#160;Starten wir nun also den Server über die &amp;quot;Start&amp;quot; Schaltfläche und kümmern wir uns um den Client.&lt;br /&gt;
&lt;br /&gt;
&lt;!-- s9ymdb:239 --&gt;&lt;a href=&quot;http://www.robhost.de/adminblog/uploads/screenshots/Synergy_Server3.PNG&quot;&gt;&lt;img class=&quot;serendipity_image_center&quot; width=&quot;189&quot; height=&quot;200&quot; src=&quot;http://www.robhost.de/adminblog/uploads/screenshots/Synergy_Server3.serendipityThumb.PNG&quot; alt=&quot;&quot;  /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;p&gt;Beim Client muss man nun einfach nur den Namen des Servers eintragen. Dabei kann man den NetBios/DNS Namen oder aber die IP Adresse benutzen. Danach kann man auch hier auf &amp;quot;Start&amp;quot; drücken. Nun sollte bei beiden Rechnern in der Log von&amp;#160;&lt;a href=&quot;http://synergy-foss.org/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Synergy&lt;/a&gt;&amp;#160;stehen, das eine Verbindung erfolgreich aufgebaut wurde. &lt;br /&gt;
&lt;br /&gt;
&lt;!-- s9ymdb:236 --&gt;&lt;a href=&quot;http://www.robhost.de/adminblog/uploads/screenshots/Synergy_Client1.png&quot;&gt;&lt;img class=&quot;serendipity_image_center&quot; width=&quot;200&quot; height=&quot;174&quot; src=&quot;http://www.robhost.de/adminblog/uploads/screenshots/Synergy_Client1.serendipityThumb.png&quot; alt=&quot;&quot;  /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Ab jetzt kann man den anderen Rechner von seinem Hauptsystem aus wie einen 2. Bildschirm verwenden. Einfach über den Randbereich hinweg gehen, je nachdem wie man den Monitor eingestellt hat links oder rechts, schon hat man Maus und Tastatur nutzbar auf dem 2. Rechner. Im selben Moment wird dann auch die Zwischenablage synchronisiert. Thats it.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;strong&gt;Fazit&lt;/strong&gt;&lt;/u&gt; &lt;br /&gt;Der einzige Nachteil des ganzen ist, dass man den Monitor händisch an den 2. Rechner anschließen muss. Zudem werden auch Audiosignale nicht übertragen. Jedoch ist dies für den Office gebrauch nicht weiter tragisch. Für Audio könnte man die Software &lt;a href=&quot;http://rogueamoeba.com/airfoil/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Airfoil&lt;/a&gt; nehmen, diese ist jedoch entsprechend kostenpflichtig und beim Monitor müsste man zwangsweise einen Hardware KVM Switch für Monitore besitzen.&lt;br /&gt;
&lt;br /&gt;
Vorteil ist die ständige Weiterentwicklung dieses Projekts und dass es Open Source ist. Zudem sind, trotz Beta, während meiner Benutzung keinerlei Fehler aufgetreten. Einzig das Mapping von AltGr auf Command+Alt ist für OSX ziemlich nervig. Ein &lt;a href=&quot;http://synergy-foss.org/spit/issues/details/3042/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Patch&lt;/a&gt; scheint dafür schon in das Projekt eingeflossen zu sein, jedoch bietet die GUI noch keine&amp;#160;Möglichkeit diese Einstellung vorzunehmen. 
    </content:encoded>

    <pubDate>Wed, 11 Jul 2012 16:17:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/373-guid.html</guid>
    
</item>
<item>
    <title>Git für Beginner - Teil 1</title>
    <link>http://www.robhost.de/adminblog/archives/372-Git-fuer-Beginner-Teil-1.html</link>
            <category>Coding</category>
    
    <comments>http://www.robhost.de/adminblog/archives/372-Git-fuer-Beginner-Teil-1.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=372</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=372</wfw:commentRss>
    

    <author>nospam@example.com (Christoph Kretzschmar)</author>
    <content:encoded>
    In aller Munde ist das Versionierungssystem &lt;a href=&quot;http://git-scm.com/&quot;&gt;Git&lt;/a&gt;, da es unter Anderem von großen Projekten zur Versionsverwaltung genutzt wird. Entwickelt wurde es von Linus Torvalds, da alle anderen Versionierungssystem nicht dynamisch genug für die &lt;a href=&quot;http://git.kernel.org/&quot;&gt;Kernel Entwicklung&lt;/a&gt; waren, vor allem sobald es um das &#039;mergen&#039; von einzelnen &#039;branches&#039; ging.&lt;br /&gt;
&lt;br /&gt;
Doch wie funktioniert Git nun eigentlich? Zuerst sei die Architektur von Git erwähnenswert, da diese nicht zentralisiert, sondern eher verteilt ist. Das bedeutet, dass Jeder, der mit einer Kopie eines Git-Clones arbeitet, im Endeffekt das gesamte Repository mit allen Änderungen auf seinem Rechner lokal vorliegen hat. Daraus resultiert auch ein gewaltiger Vorteil von Git z.B. gegenüber SVN oder CVS. Die Verwaltung sämtlicher Änderungen findet komplett Offline im &#039;working directory&#039; statt. Ist man z.B. gerade im Zug unterwegs, muss man daher nicht auf eine Versionsverwaltung für sein aktuell bearbeitetes Projekt verzichten.&lt;br /&gt;
&lt;br /&gt;
Die Basics sind dabei relativ einfach erlernbar und nach wenigen Nutzungen muss man auch nicht mehr groß darüber nachdenken &lt;img src=&quot;http://www.robhost.de/adminblog/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; Anbei eine kleine Einführung:&lt;br /&gt;
&lt;br /&gt;
Zuerst müssen wir die Versionierung für ein Projekt oder genauer für das aktuelle Verzeichnis erstellen:&lt;br /&gt;
&lt;pre&gt; git init &lt;/pre&gt;Ab jetzt ist das Verzeichnis bereit, den Inhalt zu versionisieren. Welche Dateien oder Verzeichnisse man nun verwalten möchte, kann man über:&lt;br /&gt;
&lt;pre&gt; git add &amp;lt;file|dir&amp;gt; &lt;/pre&gt;festlegen, ziemlich analog zu SVN. Dennoch gibt es einen Unterschied, denn es werden nur die Änderungen zum &#039;Stage&#039; hinzugefügt, welche bis zu diesem Zeitpunkt gemacht wurden. Bearbeitet man die Datei erneut, so müsste man diese Änderungen auch wieder mit einem &#039;add&#039; erneut hinzufügen (auch wenn man in der Datei die bereits versionisierten Änderungen gelöscht hat, so muss man diese erneut hinzufügen, damit diese gelöschten Änderungen hinzugefügt werden).&lt;br /&gt;
&lt;br /&gt;
Doch was ist denn eine &#039;Stage&#039;? Der Stage ist ähnlich wie eine Kiste. In dieser liegen alle Änderungen, die wir über den &#039;add&#039; Befehl hinzufügen oder über den &#039;reset&#039; Befehl löschen. Zusätzlich gibt es auch noch eine temporäre Kiste in der man Änderungen zwischenspeichern kann um z.B. externe Patches auf einen Quelltext anzuwenden und dann die eigenen Änderungen wieder anwenden zu lassen. Letzteres geht jedoch für Beginner erstmal zu weit, es sei aber am Rande erwähnt.&lt;br /&gt;
&lt;br /&gt;
Möchte man die &#039;staged&#039; Änderungen verwerfen, kann man Dies erreichen, indem man folgendes eingibt:&lt;br /&gt;
&lt;pre&gt; git reset &amp;lt;file|dir&amp;gt; &lt;/pre&gt;Möchte man die Änderungen nun endgültig versionisieren, so kann man diese nun commiten:&lt;br /&gt;
&lt;pre&gt; git commit &lt;/pre&gt;Dabei werden sämtliche Änderungen in das lokale Git-Repository geschrieben.&lt;br /&gt;
&lt;br /&gt;
Was jedoch machen, wenn man dennoch etwas vergessen hat dem aktuellen Commit hinzuzufügen oder aber man noch einen Fehler gefunden hat, der direkt auf den Commit bezogen ist? Git ermöglicht es dem letzten Commit weitere Änderungen anzuhängen. im Jargon nennt man dies entsprechen &#039;Amend&#039;. Dabei kann auch die Commit-Message umgeschrieben werden.&lt;br /&gt;
&lt;br /&gt;
Hat man also weiter Änderungen über add hinzugefügt, dann kann man diese dem letzten Commit hinzufügen:&lt;br /&gt;
&lt;pre&gt; git commit --amend &lt;/pre&gt; Damit hat man - grob - die Basics von Git umrissen. &lt;br /&gt;
Im nächstenTeil werde ich noch erklären, warum man immer auf einem Branch arbeiten sollte und die Änderungen entsprechend in den &#039;master&#039; zurückfließen lassen sollte. In dem Zusammenhang werde ich auch noch erläutern, wie man sein lokales Repository auf &lt;a href=&quot;https://github.com/&quot;&gt;github.com&lt;/a&gt; hochladen kann um eine &#039;globale&#039; Version des Repositories zu haben. 
    </content:encoded>

    <pubDate>Sat, 07 Jul 2012 13:24:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/372-guid.html</guid>
    
</item>
<item>
    <title>multitail - Ein Auge auf den Logs</title>
    <link>http://www.robhost.de/adminblog/archives/371-multitail-Ein-Auge-auf-den-Logs.html</link>
            <category>Linux</category>
    
    <comments>http://www.robhost.de/adminblog/archives/371-multitail-Ein-Auge-auf-den-Logs.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=371</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=371</wfw:commentRss>
    

    <author>nospam@example.com (Uwe Gerdts)</author>
    <content:encoded>
    Wer gleichzeitig mehr als ein Log-Datei im Auge behalten will kommt um das Tool multitail nicht herrum. Multitail erlaubt das gleichzeitige Betrachen mehrerer Log-Dateien.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Installation&lt;/h3&gt;&lt;br /&gt;
&lt;br /&gt;
Installation erfolgt in der Regel aus den Repos der Distribution.&lt;br /&gt;
&lt;blockquote&gt;#apt-get install multitail&lt;/blockquote&gt;&lt;br /&gt;
Danach ist multitail schon vollständig einsatzbereit.&lt;br /&gt;
&lt;a class=&quot;serendipity_image_link&quot;  href=&#039;http://www.robhost.de/adminblog/uploads/screenshots/multitail_screen.png&#039; onclick=&quot;F1 = window.open(&#039;/adminblog/uploads/screenshots/multitail_screen.png&#039;,&#039;Zoom&#039;,&#039;height=835,width=1565,top=310,left=505,toolbar=no,menubar=no,location=no,resize=1,resizable=1,scrollbars=yes&#039;); return false;&quot;&gt;&lt;!-- s9ymdb:235 --&gt;&lt;img class=&quot;serendipity_image_right&quot; width=&quot;200&quot; height=&quot;106&quot; src=&quot;http://www.robhost.de/adminblog/uploads/screenshots/multitail_screen.serendipityThumb.png&quot; alt=&quot;&quot;  /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3&gt;HowTo&lt;/h3&gt;&lt;br /&gt;
&lt;br /&gt;
Um Logdatei gleichzeit anzuschauen verwendet man:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;#multitail datei01 datei02 datei03 ...&lt;br /&gt;
&lt;br /&gt;
#multitail /var/log/syslog /var/log/messages&lt;/blockquote&gt;&lt;br /&gt;
Mit dem Parameter &lt;strong&gt;-I&lt;/strong&gt; kann man Dateien zusammenführen. &lt;br /&gt;
Im Beispiel werden die Dateien &lt;em&gt;/var/log/mail.log&lt;/em&gt; und &lt;em&gt;/var/log/auth.log&lt;/em&gt; in einen Fenster zusammengeführt dargestellt.&lt;br /&gt;
&lt;blockquote&gt;multitail /var/log/apache2/access.log /var/log/mail.log -I /var/log/auth.log&lt;/blockquote&gt;&lt;br /&gt;
Der Parameter &lt;strong&gt;-l&lt;/strong&gt; ermöglicht das Ausführen von Befehlen und Scripten. Mit &lt;strong&gt;-R&lt;/strong&gt; wird der Refresh-Intervall bestimmt.&lt;br /&gt;
Im Beispiel wird &lt;em&gt;netstat -tupan&lt;/em&gt; aller 2 Sekunden in einen Fester ausgeführt.&lt;br /&gt;
&lt;blockquote&gt;multitail /var/log/apache2/access.log /var/log/mail.log -I /var/log/auth.log -R 2 -l &quot;netstat -tupan&quot; &lt;/blockquote&gt;&lt;br /&gt;
Falls man die Fenster auch noch vertikal teilen möchte geht das natürlich auch. Der Parameter &lt;strong&gt;-s&lt;/strong&gt; gibt an wieviele vertikal Fenster erstellt werden sollen.&lt;br /&gt;
&lt;blockquote&gt;multitail -s 2 /var/log/apache2/access.log /var/log/mail.log -I /var/log/auth.log -R 2 -l &quot;netstat -tupan&quot;&lt;/blockquote&gt;&lt;br /&gt;
&lt;h3&gt;Fazit&lt;/h3&gt;&lt;br /&gt;
Multitail ist für mich eine bessere und komfortablere Variante mehrere Logfile zu betrachten. Multitail ist sehr gut an die persönlichen Bedürfnisse und Vorlieben anpassbar. Einstellungen können global in /etc/multitail.conf oder für jeden User in der .multitailrc angepasst werden. Eine sehr umfangreiche Dokumentation findet man auf der Projektseite von Multitail &lt;a href=&quot;http://www.vanheusden.com/multitail/&quot; rel=&quot;nofollow&quot;&gt;http://www.vanheusden.com/multitail/&lt;/a&gt; oder in den Manpages. 
    </content:encoded>

    <pubDate>Fri, 06 Jul 2012 11:46:15 +0200</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/371-guid.html</guid>
    
</item>
<item>
    <title>Das Problem mit der Schaltsekunde</title>
    <link>http://www.robhost.de/adminblog/archives/370-Das-Problem-mit-der-Schaltsekunde.html</link>
            <category>Linux</category>
    
    <comments>http://www.robhost.de/adminblog/archives/370-Das-Problem-mit-der-Schaltsekunde.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=370</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=370</wfw:commentRss>
    

    <author>nospam@example.com (Robert Klikics)</author>
    <content:encoded>
    Durch eine am Wochenden eingefügte Schaltsekunde gab es auf vielen Linux-Servern ein Problem mit der CPU-Load. Das ging von 100% CPU-Usage auf einem oder mehreren Cores bis zum kompletten Absturz. In der Verzweiflung haben viele Admins (so wie ich auch erstmal, bevor das Problem langsam klar wurde) mit Reboots die Rettung erzwungen. Inzwischen ist das Problem aber &lt;a rel=&quot;nofollow&quot; href=&quot;http://www.heise.de/open/meldung/Schaltsekunde-Linux-kann-einfrieren-1629683.html&quot;&gt;bekannt&lt;/a&gt;, so dass man zum Beispiel mit folgendem Befehl die Last wieder normalisieren kann: &lt;blockquote&gt;date; date `date +&quot;%m%d%H%M%C%y.%S&quot;`; date; &lt;/blockquote&gt;Vor Allem betroffen waren Systeme mit MySQL und auf Java basierenden Applikationen (Tomcat etc.). Hoffen wir also, dass bis zur nächsten Schaltsekunde ein Fix direkt im Kernel integriert wird.&lt;br /&gt;
&lt;br /&gt;
Der Webhoster Hetzner informierte seine Kunden sogar per Mail darüber, dass diese doch bitte mal ihre Server prüfen sollen. Durch den Anstieg der CPU-Load auf tausenden Servern ist dort der Stromverbrauch angeblich im 1 Megawatt (!) gestiegen. &lt;br /&gt;
&lt;br /&gt;
Es lohnt also generell die Kontrolle des eigenen Servers. 
    </content:encoded>

    <pubDate>Tue, 03 Jul 2012 14:13:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/370-guid.html</guid>
    
</item>
<item>
    <title>Composer - Einfaches Dependency Management für PHP</title>
    <link>http://www.robhost.de/adminblog/archives/367-Composer-Einfaches-Dependency-Management-fuer-PHP.html</link>
            <category>Coding</category>
    
    <comments>http://www.robhost.de/adminblog/archives/367-Composer-Einfaches-Dependency-Management-fuer-PHP.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=367</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=367</wfw:commentRss>
    

    <author>nospam@example.com (Christoph Kretzschmar)</author>
    <content:encoded>
    Dependency Management ist auch in PHP ein wichtiger Teil der Entwicklung, da man sich vor allem beim Ausrollen der Anwendung sicher sein muss, dass alles auf den - meist stabilen - Versionen läuft, für welche die Anwendung entwickelt wurde.&lt;br /&gt;
&lt;br /&gt;
Hilfreich kann hierbei &lt;a href=&quot;http://getcomposer.org/&quot; target=&quot;_blank&quot; title=&quot;Composer&quot;&gt;Composer&lt;/a&gt; werden. Das Projekt entspringt zum Teil der Entwicklung von Symfony2, wodurch auch so ziemlich alle &lt;a href=&quot;http://www.robhost.de/programmierung-webdesign-seo.html&quot;&gt;Symfony2&lt;/a&gt; Pakete dort gefunden werden können, sofern der Maintainer des Pakets sein&amp;#160;Repository&amp;#160;entsprechend&amp;#160;&lt;a href=&quot;http://getcomposer.org/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Composer&quot;&gt;Composer&lt;/a&gt;&amp;#160;kompatibel gestaltet.&amp;#160;&lt;br /&gt;
&lt;br /&gt;
Zudem kann der Maintainer entsprechende Abhängigkeiten angeben, welche dann von&amp;#160;&lt;a href=&quot;http://getcomposer.org/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Composer&quot;&gt;Composer&lt;/a&gt;&amp;#160;aufgelöst, heruntergeladen und installiert werden.&lt;br /&gt;
&lt;br /&gt;
Die Nutzung von&amp;#160;&lt;a href=&quot;http://getcomposer.org/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Composer&quot;&gt;Composer&lt;/a&gt;&amp;#160;wird sehr gut auf der Standard Repository Seite &lt;a href=&quot;http://packagist.org/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Packagist&quot;&gt;Packagist&lt;/a&gt;&amp;#160;erklärt. Dort kann man dann auch entsprechend nach sämtlichen von Haus aus&amp;#160;unterstützen, bzw. verwalteten Paketen suchen und sich deren Abhängigkeiten, etc. anschauen.&lt;br /&gt;
&lt;br /&gt;
Geliefert wird die&amp;#160;&lt;a href=&quot;http://getcomposer.org/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Composer&quot;&gt;Composer&lt;/a&gt;&amp;#160;im .phar Format, wodurch es ggf. nötig ist, die suhosin.ini für php-cli entsprechend anzupassen, falls Suhosin für PHP aktiviert ist (wie z.B. default unter Debian) &lt;br /&gt;
&lt;blockquote&gt;suhosin.executor.include.whitelist = phar&lt;/blockquote&gt; &lt;br /&gt;
Hat man nun alle Einstellungen getätigt und sich seine composer.json erstellt, kann man sich nun die Abhängigkeiten bequem herunterladen via: &lt;blockquote&gt;php composer.phar update&lt;/blockquote&gt; &lt;br /&gt;
Dies erstellt zudem eine composer.lock Datei, welche die soeben heruntergeladenen Versionen dokumentiert. Rollt man die Anwendung nach der Entwicklung auf dem Produktivsystem aus, führt man einfach ein:&lt;blockquote&gt;php composer.phar install&lt;/blockquote&gt;aus.&lt;br /&gt;
&lt;br /&gt;
Dies installiert dann genau die Versionen, welche beim Aufruf von &quot;update&quot; festgesetzt wurden, selbst wenn in der Versionsverwaltung neuere Versionen existieren sollten.&lt;br /&gt;
 &lt;br /&gt;
Ein weiterer Vorteil ist die &#039;autoloader.php&#039; im &#039;vendor&#039; Verzeichnis, welches von&amp;#160;&lt;a href=&quot;http://getcomposer.org/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Composer&quot;&gt;Composer&lt;/a&gt; angelegt wird.&amp;#160;Diese enthält das &lt;a href=&quot;https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;PSR-0&lt;/a&gt; kompatible, automatische Laden von unbekannten PHP-Klassen anhand des Klassennamens und aktuellem Namespaces. Fügt man diese Datei in seinem Skript hinzu, kann man die Abhängigkeiten (bzw. deren Klassen) nutzen, ohne 100 Dateien inkludieren zu müssen.&lt;br /&gt;
&lt;br /&gt;
Der initiale Konfigurationsaufwand scheint dabei groß zu sein, jedoch profitiert man umso mehr davon, je mehr Abhängigkeiten die Anwendung hat und je öfter man die Anwendung auf einem Produktivsystem ausrollen möchte. 
    </content:encoded>

    <pubDate>Sun, 01 Jul 2012 19:25:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/367-guid.html</guid>
    
</item>
<item>
    <title>owncloud - die eigene Wolke!</title>
    <link>http://www.robhost.de/adminblog/archives/366-owncloud-die-eigene-Wolke!.html</link>
            <category>Linux</category>
    
    <comments>http://www.robhost.de/adminblog/archives/366-owncloud-die-eigene-Wolke!.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=366</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=366</wfw:commentRss>
    

    <author>nospam@example.com (Uwe Gerdts)</author>
    <content:encoded>
    Die Cloud Cloud Cloud kein Tag vergeht, keine Fachzeitschrift kann man aufschlagen, ohne über die &quot;Cloud&quot; zu stolpern. Da dachten wir uns &quot;Wenn schon Cloud, dann wollen wir unsere eigene Cloud!&quot;.&lt;br /&gt;
&lt;br /&gt;
In den nachfolgende Zeilen werde ich Euch durch die wirklich kinderleichte Installation der &quot;owncloud&quot; führen. Danach seid Ihr in der Lage Eure eigene &quot;Cloud&quot; zu betreiben.&lt;br /&gt;
&lt;br /&gt;
Für den Familien-Betrieb der owncloud reicht ein mittlerer &lt;a href=&quot;http://www.robhost.de/virtuelle-root-server.html&quot; title=&quot;VServer&quot;&gt;VServer&lt;/a&gt; aus. Auf einem minimalen Debian-System installiert man die benötigen Pakete.  &lt;br /&gt;
&lt;blockquote&gt;apt-get install apache2 php5 php5-gd php5-sqlite curl libcurl3 libcurl3-dev php5-curl bzip2&lt;/blockquote&gt;&lt;br /&gt;
Danach holen wir uns die aktuelle Version von der &lt;a href=&quot;http://owncloud.org/&quot; rel=&quot;nofollow&quot;&gt;ownclound-Projektseite&lt;/a&gt;. Derzeit ist die 4.0.4 aktuell.&lt;br /&gt;
&lt;blockquote&gt;wget http://download.owncloud.org/releases/owncloud-x.x.x.tar.bz2&lt;/blockquote&gt;&lt;br /&gt;
Wir entpacken das Archiv und kopieren es in unser Documentroot des Webservers.&lt;br /&gt;
&lt;blockquote&gt;tar -xjf owncloud-x.x.x.tar.bz2&lt;br /&gt;
cp -r owncloud /var/www/owncloud&lt;br /&gt;
chown -R www-data:www-data /var/www/owncloud/&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
Danach aktivieren wir noch ein paar Apache-module  &lt;br /&gt;
&lt;blockquote&gt;a2enmod rewrite&lt;br /&gt;
a2enmod headers&lt;/blockquote&gt;&lt;br /&gt;
und passen unsere Konfiguration an. (die einfachste Methode)&lt;br /&gt;
&lt;blockquote&gt;vi /etc/apache2/sites-available/default&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;Directory /var/www/&amp;gt;&lt;br /&gt;
                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;
                AllowOverride All&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                allow from all&lt;br /&gt;
&amp;lt/Directory&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
Dann steht unsere owncloud unter http://unser.server/owncloud/ bereit. Beim Erstaufruf der Seite vergeben wir Name und Passwort des administrativen Benutzers. Nun können wir im Backend weitere Einstellungen tätigen und die Cloud für weitere User freigeben.&lt;br /&gt;
&lt;br /&gt;
Derzeit läuft die Datenbank mit SQLite, falls ihr MySQL bevorzugt installiert Ihr einfach den MySQL-Server und könnt beim Erstaufruf von http://unser.server/owncloud/ unter dem Punkt erweitert auch die Zugangsdaten für den MySQL-server eingeben.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Fazit&lt;/h3&gt;&lt;br /&gt;
Leider ist in der Community Edition keine HA/Replikation möglich. Eine Übersicht der Unterschiede zu den Pro-Versionen findet ihr &lt;a href=&quot;https://owncloud.com/de/overview&quot; rel=&quot;nofollow&quot;&gt;hier&lt;/a&gt;. Die Community-Version der owncloud hat mich persönlich enttäuscht. Der gebotene Funktionsumfang ist sehr rudimentär und die fehlende Replikation konnten meine Erwartungen nicht erfüllen. Im Bereich Hobby/Familie dennoch ein interessantes Projekt. Was habt ihr für Erfahrungen mit der Owncloud?&lt;br /&gt;
&lt;br /&gt;
     
    </content:encoded>

    <pubDate>Fri, 29 Jun 2012 11:07:01 +0200</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/366-guid.html</guid>
    
</item>
<item>
    <title>Pakete vom Update aussschließen (Debian/Ubuntu)</title>
    <link>http://www.robhost.de/adminblog/archives/362-Pakete-vom-Update-aussschliessen-DebianUbuntu.html</link>
            <category>Linux</category>
    
    <comments>http://www.robhost.de/adminblog/archives/362-Pakete-vom-Update-aussschliessen-DebianUbuntu.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=362</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=362</wfw:commentRss>
    

    <author>nospam@example.com (Uwe Gerdts)</author>
    <content:encoded>
    Oft ist es sinnvoll die Aktualisierung eines Paketes zu verhindern oder etwas zu verzögern. Um Trotzdem wie gewohnt den Paketmanager zu nutzen, müssen wir die Paket von der Aktualisierung ausschliessen. Das funktioniert, indem wir ihm den Status &lt;em&gt;hold&lt;/em&gt; verpassen.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Ausgangssittuation&lt;/h3&gt;&lt;br /&gt;
&lt;blockquote&gt;#apt-get upgrade&lt;br /&gt;
Paketlisten werden gelesen... Fertig&lt;br /&gt;
Abhängigkeitsbaum wird aufgebaut       &lt;br /&gt;
Status-Informationen einlesen... Fertig&lt;br /&gt;
Die folgenden Pakete werden aktualisiert:&lt;br /&gt;
&amp;#160;&amp;#160;libgcrypt11&lt;br /&gt;
1 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.&lt;br /&gt;
Es müssen 271kB an Archiven heruntergeladen werden.&lt;br /&gt;
Nach dieser Operation werden 4.096B Plattenplatz freigegeben.&lt;br /&gt;
Möchten Sie fortfahren [J/n]? n&lt;/blockquote&gt;Wir wollen nun verhindern, dass libgcrypt11 zukünftig aktualisiert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Pakete auf hold setzen&lt;/h3&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;dpkg (apt-get)&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;#echo &quot;libgcrypt11 hold&quot;|dpkg --set-selections&lt;/blockquote&gt;&lt;br /&gt;
&lt;strong&gt;aptitude&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;#aptitude hold libgcrypt11&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Auflisten der Paket die auf hold gesetzt sind&lt;/h3&gt;&lt;br /&gt;
Um eine Übersicht zu erhalten, welche Pakete wir ausgeschlossen haben, verwenden wir:&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;dpkg (apt-get)&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;#dpkg --get-selections |awk &#039;$2 == &quot;hold&quot; { print $1 }&#039;&lt;/blockquote&gt;&lt;br /&gt;
&lt;strong&gt;aptitude&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;#aptitude search ~ahold&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Kontrolle&lt;/h3&gt;&lt;br /&gt;
Nun sollte bei einem upgrade das Paket libgcrypt11 ausgeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;#apt-get upgrade&lt;br /&gt;
Paketlisten werden gelesen... Fertig&lt;br /&gt;
Abhängigkeitsbaum wird aufgebaut       &lt;br /&gt;
Status-Informationen einlesen... Fertig&lt;br /&gt;
Die folgenden Pakete sind zurückgehalten worden:&lt;br /&gt;
&amp;#160;&amp;#160;libgcrypt11&lt;br /&gt;
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 1 nicht aktualisiert.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Paket auf unhold setzen&lt;/h3&gt;&lt;br /&gt;
Um das Paket wieder in das regelmäßige Update aufzunehmen setzen wir den Satus wieder in den Ausgangszustand.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;dpkg (apt-get)&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;#echo &quot;libgcrypt11 install&quot;|dpkg --set-selections&lt;/blockquote&gt;&lt;br /&gt;
&lt;strong&gt;aptitude&lt;/strong&gt;&lt;br /&gt;
&lt;blockquote&gt;#aptitude unhold libgcrypt11&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Kontrolle&lt;/h3&gt;&lt;br /&gt;
Nun sollte das Paket wieder in den Aktualisierungen vorhanden sein.&lt;br /&gt;
&lt;blockquote&gt;#apt-get upgrade&lt;br /&gt;
Paketlisten werden gelesen... Fertig&lt;br /&gt;
Abhängigkeitsbaum wird aufgebaut       &lt;br /&gt;
Status-Informationen einlesen... Fertig&lt;br /&gt;
Die folgenden Pakete werden aktualisiert:&lt;br /&gt;
&amp;#160;&amp;#160;libgcrypt11&lt;br /&gt;
1 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.&lt;br /&gt;
Es müssen 271kB an Archiven heruntergeladen werden.&lt;br /&gt;
Nach dieser Operation werden 4.096B Plattenplatz freigegeben.&lt;br /&gt;
Möchten Sie fortfahren [J/n]? j&lt;br /&gt;
...&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren ist eher die Ausnahme als die Regel. Bitte denkt daran, Eure Systeme stets aktuell zu halten.  
    </content:encoded>

    <pubDate>Tue, 26 Jun 2012 09:26:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/362-guid.html</guid>
    
</item>
<item>
    <title>Eine Domain komplett via RewriteRule weiterleiten</title>
    <link>http://www.robhost.de/adminblog/archives/360-Eine-Domain-komplett-via-RewriteRule-weiterleiten.html</link>
            <category>WWW</category>
    
    <comments>http://www.robhost.de/adminblog/archives/360-Eine-Domain-komplett-via-RewriteRule-weiterleiten.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=360</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=360</wfw:commentRss>
    

    <author>nospam@example.com (Robert Klikics)</author>
    <content:encoded>
    Aus aktuellem Anlass hier ein Rewrite-Rule zur Google-freundlichen 301-Weiterleitung einer bestehenden Domain auf eine neue Domain via .htaccess oder direkt im Apache vHost:&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;RewriteEngine On&lt;br /&gt;
RewriteRule (.*) http://www.neue-domain.de/$1 [R=301,L]&lt;br /&gt;
&lt;/em&gt;&lt;br /&gt;
Das Admin-Blog.com ist seit heute unterhalb von RobHost.de zu Hause - am Inhalt ändert sich aber natürlich nichts. Allerdings soll das Blog wieder mit mehr Leben befüllt werden, wobei die Mitarbeiter von RobHost helfen sollen (und auch wollen, so wurde mir versichert..). Denn täglich testen wir neue Tools oder beheben Fehler, die für die Nachwelt interessant sein könnten - sowohl aus dem Linux-Umfeld aus der Serveradministration bei unseren Kunden als auch in der Programmierung. 
    </content:encoded>

    <pubDate>Mon, 25 Jun 2012 12:06:49 +0200</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/360-guid.html</guid>
    
</item>
<item>
    <title>US-Proxy für YouTube und Co. bei Server4You - das war wohl nix</title>
    <link>http://www.robhost.de/adminblog/archives/358-US-Proxy-fuer-YouTube-und-Co.-bei-Server4You-das-war-wohl-nix.html</link>
            <category>WWW</category>
    
    <comments>http://www.robhost.de/adminblog/archives/358-US-Proxy-fuer-YouTube-und-Co.-bei-Server4You-das-war-wohl-nix.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=358</wfw:comment>

    <slash:comments>11</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=358</wfw:commentRss>
    

    <author>nospam@example.com (Robert Klikics)</author>
    <content:encoded>
    Die Idee schien einfach und gut zu sein. Einen vServer bei Server4You für weniger Euro im Monat mieten und dabei Serverstandort USA wählen. Dann über Squid (Proxy) entspannt Youtube und Hulu schauen. Soweit die Theorie.&lt;br /&gt;
&lt;br /&gt;
In der Praxis stellt es sich allerdings so dar, dass offenbar die IP-Range (50.30.32.0 - 50.30.47.255) von Server4You bei YouTube auf Blacklist ist. Ich habe es nicht geschafft, ein hier gesperrtes Video über den Proxy zu schauen, stets werde ich als aus Deutschland kommend erkannt. Zuerst hatte ich die Browserkennung in Verdacht, aber selbst auf Konsole mit &lt;i&gt;lynx&lt;/i&gt; kommt der Fehler:   &lt;blockquote&gt;Unfortunately, this video is not available in Germany because it may&lt;br /&gt;
   contain music for which GEMA has not granted the respective music&lt;br /&gt;
   rights.&lt;br /&gt;
   Sorry about that.&lt;/blockquote&gt;Das Reverse-Lookup war der nächste Verdacht, denn das lautetet xxx.vserver.de - also wurde das auch fix auf eine .com Domain gelenkt - ebenfalls ohne Erfolg. Leider habe ich nirgends eine Info gefunden, warum das so ist. Bei einem anderen Anbieter, der direkt in den USA sitze, geht das Ganze problemlos. &lt;br /&gt;
&lt;br /&gt;
Hat ein Leser vielleicht einen Hinweis dazu? 
    </content:encoded>

    <pubDate>Wed, 16 Nov 2011 16:52:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/358-guid.html</guid>
    
</item>
<item>
    <title>Iphone 4S gestohlen, Telekom hilft nicht </title>
    <link>http://www.robhost.de/adminblog/archives/357-Iphone-4S-gestohlen,-Telekom-hilft-nicht.html</link>
            <category>Diverses</category>
    
    <comments>http://www.robhost.de/adminblog/archives/357-Iphone-4S-gestohlen,-Telekom-hilft-nicht.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=357</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=357</wfw:commentRss>
    

    <author>nospam@example.com (Robert Klikics)</author>
    <content:encoded>
    Nachdem kürzlich leider mein nagelneues iPhone 4S 32GB bei einem Einbruch gestohlen wurde (Kripo ermittelt und hat auch die IMEI, womit sie die Täter orten will bzw. es vielleicht sogar bereits getan hat), musste schnellstens Ersatz her. Natürlich war die erste Idee, bei der Telekom nachzufragen, denn dort habe ich schließlich mehrere Verträge und auch das 4S bezogen.&lt;br /&gt;
&lt;br /&gt;
Nachdem meine Mail an die Kundenbetreuung nach einer knappen Woche nicht beantwortet wurde und die Hotline wie so oft durch Unwissenheit, was in solch einem Spezialfall zu tun sei, auffiel, war guter Rat teuer. Der heisse Tipp des Hotline-Menschen war, ich solle doch eine Mail an die Kundenbetreuung schreiben mit Diebstahlanzeige etc. Das hatte ich ja aber vor einer Woche bereits getan, sogar der Polizeibericht hing als Scan dran.&lt;br /&gt;
&lt;!-- s9ymdb:234 --&gt;&lt;img class=&quot;serendipity_image_right&quot; width=&quot;300&quot; height=&quot;&quot; src=&quot;/uploads/screenshots/Bildschirmfoto2011-11-01um12.39.56.png&quot; alt=&quot;&quot;  /&gt;&lt;br /&gt;
Gut, also mal den &quot;Web 2.0 Support&quot; der Telekom in Form des Twitter-Accounts &lt;a href=&quot;http://twitter.com/#!/telekom_hilft&quot; rel=&quot;nofollow&quot;&gt;@Telekom_Hilft&lt;/a&gt;  bemüht. Dort wechseln sich anscheinend diverse Mitarbeiter ab und lesen die vorherigen Tweets zum Thema nicht, trotz dass ich extra immer brav &quot;Reply&quot; genutzt habe. Erst wurde mir ein weiterer neuer Vertrag, dann ein plötzlich ein Netlocked-iPhone 4 (ohne S) angeboten. So richtige Infos zu Preisen etc. bekam ich aber über Twitter nicht. Einen Vertrag habe ich ja aber schon, ich will einfach nur ein neues iPhone 4S und bin natürlich auch bereit, dafür zu zahlen. Die Versicherung kommt ja immerhin für den Neupreis des entwendeten Gerätes auf.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Woche später - ein neues 4S war längst bei Apple bestellt - kam dann noch ein Brief von der Telekom. Darin wurde mir allen Ernstes als &quot;Ersatz für mein entwendetes iPhone 4S&quot; ein netlocked iPhone 4 mit 32 GB für 729 EUR angeboten. Hallo? Ich zahle doch nicht den vollen Originalpreis eines veralteten  iPhone 4, welches auch noch netlocked ist, obwohl mir ein 4S geklaut wurde. Irgendwie ziemlich sinnlos, dieses Angebot. Das iPhone 4S ist aber, warum auch immer, als Ersatz bei Diebstählen nicht verfügbar.&lt;br /&gt;
&lt;br /&gt;
Inzwischen ist mein 4S von Apple bereits eingetroffen und die Telekom kann mich mal gerne haben, vermutlich am Ende der Vertragslaufzeit auch als Kunden. Ein wenig mehr Entgegenkommen bei einem Diebstahl sollte bei einem langjährigen Kunden doch drin sein, oder? &lt;br /&gt;
&lt;br /&gt;
Ob das natürlich jetzt bei Vodafone oder O2 besser gelaufen wäre, kann ich nicht sagen. Der Ablauf bei der Telekom war zumindest eine herbe Enttäuschung. 
    </content:encoded>

    <pubDate>Tue, 15 Nov 2011 23:00:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/357-guid.html</guid>
    
</item>
<item>
    <title>Schutz bei (D)DOS Angriffen mit Iptables</title>
    <link>http://www.robhost.de/adminblog/archives/356-Schutz-bei-DDOS-Angriffen-mit-Iptables.html</link>
            <category>Linux</category>
    
    <comments>http://www.robhost.de/adminblog/archives/356-Schutz-bei-DDOS-Angriffen-mit-Iptables.html#comments</comments>
    <wfw:comment>http://www.robhost.de/adminblog/wfwcomment.php?cid=356</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.robhost.de/adminblog/rss.php?version=2.0&amp;type=comments&amp;cid=356</wfw:commentRss>
    

    <author>nospam@example.com (Robert Klikics)</author>
    <content:encoded>
    Es soll ja vorkommen, dass ein Server von extern z.B. mit sehr vielen HTTP-Anfragen lahmgelegt werden soll. In so einem Fall ist guter Rat teuer, um Schaden vom Server und der darauf laufenden Websites bzw. Applikationen abzuwenden. Oft hilft einem auch der ISP dabei, verlassen kann man sich darauf freilich nicht. So wurde kürzlich bei einem Fall der Kunde zwar sogar von Hetzner über die DDOS-Attacke informiert Gegenmaßnahmen wurden aber nicht getroffen. Im schlimmsten Fall droht sogar die Sperrung der IP seitens Hetzner, was natürlich zum Teil auch nachvollziehbar ist. &lt;br /&gt;
&lt;br /&gt;
Serverseitig kann man aber auch etwas tun, z.B. das kleine Shell-Script &lt;a href=&quot;http://deflate.medialayer.com/&quot;&gt;(D)DoS Deflate&lt;/a&gt; laufen lassen. Dieses kleine Script prüft ganz einfach per &lt;i&gt;netstat&lt;/i&gt;, welche IP eine in der Config definierte Anzahl von Verbindungen überschreitet und sperrt diese wirksam direkt via &lt;i&gt;iptables&lt;/i&gt; (diese Variante bevorzuge ich, es wird einfach DROP auf alle Pakete von der Quell-IP angewendet) oder via &lt;i&gt;apf&lt;/i&gt; (&lt;a href=&quot;http://www.rfxn.com/projects/advanced-policy-firewall/&quot;&gt;Advanced Policy Firewall&lt;/a&gt;). Das Script hilft natürlich nur, wenn der Server noch erreichbar ist und arbeitet, d.h. wenn die Attacke nicht die die komplette Bandbreite verbraucht oder zu extrem ist.&lt;br /&gt;
&lt;br /&gt;
Zur &quot;Installation&quot;, die im Wesentlichen aus ein paar Downloads via &lt;i&gt;wget&lt;/i&gt; und der Einrichtung eines Cronjobs funktioniert, holt man sich einfach wie auf der Website angegeben das Script &lt;i&gt;install.sh&lt;/i&gt; von einem Server. Alternativ habe ich das Ganze hier nochmals als Mirror hinterlegt: &lt;a href=&quot;/uploads/ddos.tar&quot; title=&quot;ddos.tar&quot;&gt;ddos.tar&lt;/a&gt; (20 KByte). Den Tarball einfach z.B. nach &lt;i&gt;/usr/local/&lt;/i&gt; entpacken und es kann losgehen.&lt;br /&gt;
&lt;br /&gt;
In der &lt;i&gt;ddos.conf&lt;/i&gt; kann man via &lt;i&gt;NO_OF_CONNECTIONS&lt;/i&gt; angeben, ab wievielen Verbindungen eine IP gesperrt wird. Das muss man einfach testen bzw. es kommt sehr darauf an, was auf dem Server normalerweise los ist. Bei zu niedrigen Werten läuft man natürlich Gefahr, auch &quot;normale&quot; User zu sperren. Mit &lt;i&gt;BAN_PERIOD&lt;/i&gt; legt man dann fest, wie lange die IP gesperrt werden soll. Die eigene IP kann man übrigens mit einem Eintrag (neue Zeile) in der Datei &lt;i&gt;ignore.ip.list&lt;/i&gt; whitelisten, 127.0.0.1 ist default auf der Whitelist &lt;img src=&quot;http://www.robhost.de/adminblog/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man direkt &lt;i&gt;./ddos.sh&lt;/i&gt; ausführen und sieht auch direkt den Output den im Script ausgeführten &lt;i&gt;netstat&lt;/i&gt;, das konkret so aussieht:&lt;blockquote&gt;netstat -ntu | awk &#039;{print $5}&#039; | cut -d: -f1 | sort | uniq -c | sort -n&lt;/blockquote&gt;Alle IPs mit einer Connection-Anzahl &gt; &lt;i&gt;NO_OF_CONNECTIONS&lt;/i&gt; werden nun also für &lt;i&gt;BAN_PERIOD&lt;/i&gt; Sekunden gesperrt. Ein Cronjob, der am besten im Abstand läuft, wie auch &lt;i&gt;BAN_PERIOD&lt;/i&gt; gesetzt ist, rundet die Config ab.&lt;br /&gt;
&lt;br /&gt;
Erfolge kann man dann ganz einfach z.B. via &lt;i&gt;iptables -L -nv&lt;/i&gt; sehen. Diese recht rudimentäre Lösung kann bei kleineren Angriffen durchaus nützlich sein und hat sich schon mehrfach im Einsatz bewährt. Hilfreich sind übrigens auch weitere IP-Adressen und kurze TTL im DNS, um schnell reagieren zu können. &lt;br /&gt;
&lt;br /&gt;
Sollte der Angriff nur auf einzelne Dienste wie z.B. Apache durchgeführt werden, lohnt auch ein Blick auf &lt;a href=&quot;http://www.fail2ban.org/wiki/index.php/FAQ_german&quot;&gt;Fail2Ban&lt;/a&gt;. 
    </content:encoded>

    <pubDate>Mon, 07 Nov 2011 21:41:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.robhost.de/adminblog/archives/356-guid.html</guid>
    
</item>

</channel>
</rss>