Twitter Timeline
|
Sonntag, 24. März 2013Eigenen Git-Server ala Github aufsetzen
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.
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. 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. 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. Eine begrenzte Auswahl wären die folgenden Verwaltungssysteme:
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. 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). An den Stellen, wo zum bearbeiten der Konfigurationsdateien ,vim‘ genutzt wird kann der persönlich bevorzugte Editor genutzt werden (emacs, nano, etc.) 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. 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. Zuerst aktivieren wir das Backports Repository damit wir einen Redis-Server >v2.0 installieren können. Dieser wird benötigt, da Gitlab BRPOP nutzt, welches erst seit v2.0.0 in Redis implementiert ist. # Enable backports Als nächstes benötigen wir sudo und einige weitere Pakete um Ruby und dessen Gems entsprechend kompilieren zu können.
Soll Gitlab auch Mails versenden können (z.B. „Passwort vergessen“-Mails), so wird auch ein postfix benötigt.
Als nächstes intallieren wir Python, dies wird von Gitlab auch noch benötigt.
Als nächstes legen wir die Datenbank an.
Jetzt wechseln wir auf den Benutzer und installieren Gitlab in dessen HOME-Verzeichnis:
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.
Nun hat man 2 Möglichkeiten, einmal NGinx und einmal Apache2. NGinx:
Apache2:
git.domain.tld-VHost Konfiguration:
Danach kann man prüfen ob alles läuft und funktionsfähig ist:
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. Der initiale Administratoren Login lautet dann admin@local.host mit dem Passwort: 5iveL!fe Dieser Benutzer sollte nach dem anlegen des eigenen Admin-Benutzers am besten gelöscht werden. Bei Fragen oder Kritiken können gern die Kommentare genutzt werden Dienstag, 11. Dezember 2012Netzwerk-Konfiguration mit Proxmox VE
Mit Proxmox VE 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 virtuellen managed Servern von RobHost erfolgreich zum Einsatz. Selbst Hochverfügbarkeit wird unterstützt - dazu in einem späteren Blogpost mehr.
Leider ist die Netzwerk-Config nicht immer ganz trivial, im Netz finden man haufenweise Fragen und Howto's zu diesem Thema. Zwar beschreibt das Proxmox-Wiki auch einige Szenarien, in der Praxis sind aber oft Host-IP und das Subnetz für die VM's verschiedene Netzbereiche. 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. Dennoch gibt es das "Problem", 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 Also brauchen wir eine Point-to-Point Verbindung, so dass die VMs zum Gateway auch durchkommen und eine normal funktionierende Netzwerk-Config haben. So sieht das Ganze dann unter Proxmox/Debian auf dem Host aus: iface eth0 inet manualWichtig ist die Netzmaske von 255.255.255.255 sowie der pointopoint Eintrag (Achtung: nur mit einem "t"!). Mehr ist nicht nötig, d.h. es müssen keine expliziten Routen zu den VMs oder dem Subnetz gesetzt werden. Innerhalb der VMS sieht das dann so aus (Debian/Ubuntu): iface eth0 inet staticBzw. so unter CentOS: # File: /etc/sysconfig/network-scripts/ifcfg-eth0Das war es auch schon, damit sollten alle VMs problemlos an das Netz angebunden sein. In Kürze stellen wir hier unser Auto-Deployment Script für Proxmox vor. Bei Fragen einfach die Kommentare nutzen Sonntag, 19. August 2012Datenbankstrukturen visualisieren
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.
Auf der Suche nach einer automatisierteren Lösung sind wir an den ausgereiften Möglichkeiten der Graphviz community nicht vorbeigekommen. Eine einfache "DOT Language" ermöglicht es komplexe Grafiken und Strukturdiagramme mit unzähligen Einstellmöglichkeiten zu generieren. 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. Das erwähnte Script in PHP findet ihr hier. Daraus wird ein Dotfile erzeugt, welches die hier dargestellte Grafik erzeugt. Freitag, 13. Juli 2012Multiuser-GIT-Repos mit Gitolite (Debian Squeeze)
Git als Versionsverwaltung wird immer beliebter und die Dienste gitorious.org oder github.com 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.
InstallationGit und gitolite sind Bestandteil des Debian Squezze Repositories. Die Installation sollte also wieder ohne großen Aufwand erfolgen. #apt-get install git-core gitolite Falls noch nicht geschehen, genenrieren wir uns einen SSH-Key. #ssh-keygen Diesen Key benötigen wir für den initialen Zugang zur gitolite-Verwaltung. Wir kopieren ihn nach /tmp um ihn für unseren git-Systemuser verfügbar zu machen. #cp .ssh/id_rsa.pub /tmp/gitolite_init.pub Optional können wir noch ein paar globale git Konfigurationsvariablen setzen. git config --global user.name "Dein Name" Nun erstellen wir unser zentrales Repoverzeichniss und legen einen git-Systemuser an. #/var/git-repos 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 /tmp wird danach nicht mehr benötigt und kann gelöscht werden. #su git Dann können wir das administrative Repo auschecken und die Konfigurationen auf unsere Bedürfnisse anpassen. git clone git@127.0.0.1:gitolite-admin.git In ./gitolite-admin/conf/gitolite.conf werden die Repos und Berechtigungen verwaltet. im Verzeichniss ./gitolite-admin/keydir/ werden die public-ssh-keys der User abgelegt. Die Änderungen werden erst wirksam wenn wir das repo auf den Server pushen. #git add . Falls wir in ./gitolite-admin/conf/gitolite.conf ein neues Repo konfiguriert haben wird dies nach einem push auch automatisch angelegt und steht sofort bereit. FazitGitolite 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 hier. Wer ein schönes Web-Interface braucht sollte ein Blick auf gitlabhq.com werfen. Dies scheint ein interessantes Projekt zu sein und setzt direkt auf gitolite. Mittwoch, 11. Juli 2012Synergy - Cleveres Software KVM
Synergy ist interessant für jeden der 2 Monitore, 2 Rechner und nur 1 Set an HID`s besitzt.
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. Eine mittlerweile sehr gute Softwarelösung ist Synergy, 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. Dabei hat man die freie Wahl der Plattform, denn Synergy 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 Synergy schaltet seamless zwischen beiden Systemen um, sobald man den Konfigurierten Randbereich mit der Maus überschreitet. Konfiguration Vorab: Ich empfehle euch unbedingt die Beta zu benutzen, da hier die Benutzerschittstelle um einiges ausgereifter ist. Szenario: Rechner 1 ist ein Windows mit angeschlossenen Gerätschaften, Rechner 2 ist ein OSX Lion der diese Geräte nutzen möchte. 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 "Desktop" Level, bedeutet erst nachdem ich mich angemeldet habe. Nun kann man auf Seite des Servers entsprechend "Configure Server..." 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). 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 "Unnamed" Bildschirm erstellt. Durch einen Doppelklick auf diesen gelangt man entsprechend in den Konfigurationsdialog. Dort gibt man diesem Bildschirm den Netzwerknamen/Hostname des 2. Rechners als "Screen name" an. In meinem Fall ist das "Christophs-MacBook-Pro.local". Jetzt kann man noch diverse "Key-Modifier" umsetzen, was bei OSX z.B. Praktisch ist, da sonst Super(Apfel) und Alt vertauscht sind. Daher mappe ich in meinem Fall "Alt auf Super" und "Super auf Alt". Damit ist auf Seiten des Servers alles fertig konfiguriert. Starten wir nun also den Server über die "Start" Schaltfläche und kümmern wir uns um den Client. 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 "Start" drücken. Nun sollte bei beiden Rechnern in der Log von Synergy stehen, das eine Verbindung erfolgreich aufgebaut wurde. Samstag, 7. Juli 2012Git für Beginner - Teil 1
In aller Munde ist das Versionierungssystem Git, 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 Kernel Entwicklung waren, vor allem sobald es um das 'mergen' von einzelnen 'branches' ging.
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 'working directory' statt. Ist man z.B. gerade im Zug unterwegs, muss man daher nicht auf eine Versionsverwaltung für sein aktuell bearbeitetes Projekt verzichten. Die Basics sind dabei relativ einfach erlernbar und nach wenigen Nutzungen muss man auch nicht mehr groß darüber nachdenken Zuerst müssen wir die Versionierung für ein Projekt oder genauer für das aktuelle Verzeichnis erstellen: git initAb jetzt ist das Verzeichnis bereit, den Inhalt zu versionisieren. Welche Dateien oder Verzeichnisse man nun verwalten möchte, kann man über: git add <file|dir>festlegen, ziemlich analog zu SVN. Dennoch gibt es einen Unterschied, denn es werden nur die Änderungen zum 'Stage' hinzugefügt, welche bis zu diesem Zeitpunkt gemacht wurden. Bearbeitet man die Datei erneut, so müsste man diese Änderungen auch wieder mit einem 'add' 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). Doch was ist denn eine 'Stage'? Der Stage ist ähnlich wie eine Kiste. In dieser liegen alle Änderungen, die wir über den 'add' Befehl hinzufügen oder über den 'reset' 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. Möchte man die 'staged' Änderungen verwerfen, kann man Dies erreichen, indem man folgendes eingibt: git reset <file|dir>Möchte man die Änderungen nun endgültig versionisieren, so kann man diese nun commiten: git commitDabei werden sämtliche Änderungen in das lokale Git-Repository geschrieben. 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 'Amend'. Dabei kann auch die Commit-Message umgeschrieben werden. Hat man also weiter Änderungen über add hinzugefügt, dann kann man diese dem letzten Commit hinzufügen: git commit --amendDamit hat man - grob - die Basics von Git umrissen. Im nächstenTeil werde ich noch erklären, warum man immer auf einem Branch arbeiten sollte und die Änderungen entsprechend in den 'master' zurückfließen lassen sollte. In dem Zusammenhang werde ich auch noch erläutern, wie man sein lokales Repository auf github.com hochladen kann um eine 'globale' Version des Repositories zu haben. Freitag, 6. Juli 2012multitail - Ein Auge auf den Logs
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.
InstallationInstallation erfolgt in der Regel aus den Repos der Distribution. #apt-get install multitail Danach ist multitail schon vollständig einsatzbereit. HowToUm Logdatei gleichzeit anzuschauen verwendet man: #multitail datei01 datei02 datei03 ... Mit dem Parameter -I kann man Dateien zusammenführen. Im Beispiel werden die Dateien /var/log/mail.log und /var/log/auth.log in einen Fenster zusammengeführt dargestellt. multitail /var/log/apache2/access.log /var/log/mail.log -I /var/log/auth.log Der Parameter -l ermöglicht das Ausführen von Befehlen und Scripten. Mit -R wird der Refresh-Intervall bestimmt. Im Beispiel wird netstat -tupan aller 2 Sekunden in einen Fester ausgeführt. multitail /var/log/apache2/access.log /var/log/mail.log -I /var/log/auth.log -R 2 -l "netstat -tupan" Falls man die Fenster auch noch vertikal teilen möchte geht das natürlich auch. Der Parameter -s gibt an wieviele vertikal Fenster erstellt werden sollen. multitail -s 2 /var/log/apache2/access.log /var/log/mail.log -I /var/log/auth.log -R 2 -l "netstat -tupan" FazitMultitail 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 http://www.vanheusden.com/multitail/ oder in den Manpages. Dienstag, 3. Juli 2012Das Problem mit der Schaltsekunde
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 bekannt, so dass man zum Beispiel mit folgendem Befehl die Last wieder normalisieren kann:
date; date `date +"%m%d%H%M%C%y.%S"`; date;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. 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. Es lohnt also generell die Kontrolle des eigenen Servers. Sonntag, 1. Juli 2012Composer - Einfaches Dependency Management für PHP
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.
Hilfreich kann hierbei Composer werden. Das Projekt entspringt zum Teil der Entwicklung von Symfony2, wodurch auch so ziemlich alle Symfony2 Pakete dort gefunden werden können, sofern der Maintainer des Pakets sein Repository entsprechend Composer kompatibel gestaltet. Zudem kann der Maintainer entsprechende Abhängigkeiten angeben, welche dann von Composer aufgelöst, heruntergeladen und installiert werden. Die Nutzung von Composer wird sehr gut auf der Standard Repository Seite Packagist erklärt. Dort kann man dann auch entsprechend nach sämtlichen von Haus aus unterstützen, bzw. verwalteten Paketen suchen und sich deren Abhängigkeiten, etc. anschauen. Geliefert wird die Composer 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) suhosin.executor.include.whitelist = phar Hat man nun alle Einstellungen getätigt und sich seine composer.json erstellt, kann man sich nun die Abhängigkeiten bequem herunterladen via: php composer.phar update 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: php composer.phar installaus. Dies installiert dann genau die Versionen, welche beim Aufruf von "update" festgesetzt wurden, selbst wenn in der Versionsverwaltung neuere Versionen existieren sollten. Ein weiterer Vorteil ist die 'autoloader.php' im 'vendor' Verzeichnis, welches von Composer angelegt wird. Diese enthält das PSR-0 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. 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. Freitag, 29. Juni 2012owncloud - die eigene Wolke!
Die Cloud… Cloud… Cloud… kein Tag vergeht, keine Fachzeitschrift kann man aufschlagen, ohne über die "Cloud" zu stolpern. Da dachten wir uns "Wenn schon Cloud, dann wollen wir unsere eigene Cloud!".
In den nachfolgende Zeilen werde ich Euch durch die wirklich kinderleichte Installation der "owncloud" führen. Danach seid Ihr in der Lage Eure eigene "Cloud" zu betreiben. Für den Familien-Betrieb der owncloud reicht ein mittlerer VServer aus. Auf einem minimalen Debian-System installiert man die benötigen Pakete. apt-get install apache2 php5 php5-gd php5-sqlite curl libcurl3 libcurl3-dev php5-curl bzip2 Danach holen wir uns die aktuelle Version von der ownclound-Projektseite. Derzeit ist die 4.0.4 aktuell. wget http://download.owncloud.org/releases/owncloud-x.x.x.tar.bz2 Wir entpacken das Archiv und kopieren es in unser Documentroot des Webservers. tar -xjf owncloud-x.x.x.tar.bz2 Danach aktivieren wir noch ein paar Apache-module a2enmod rewrite und passen unsere Konfiguration an. (die einfachste Methode) vi /etc/apache2/sites-available/default 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. 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. FazitLeider ist in der Community Edition keine HA/Replikation möglich. Eine Übersicht der Unterschiede zu den Pro-Versionen findet ihr hier. 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? Dienstag, 26. Juni 2012Pakete vom Update aussschließen (Debian/Ubuntu)
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 hold verpassen.
Ausgangssittuation#apt-get upgradeWir wollen nun verhindern, dass libgcrypt11 zukünftig aktualisiert wird. Pakete auf hold setzendpkg (apt-get) #echo "libgcrypt11 hold"|dpkg --set-selections aptitude #aptitude hold libgcrypt11 Auflisten der Paket die auf hold gesetzt sindUm eine Übersicht zu erhalten, welche Pakete wir ausgeschlossen haben, verwenden wir: dpkg (apt-get) #dpkg --get-selections |awk '$2 == "hold" { print $1 }' aptitude #aptitude search ~ahold KontrolleNun sollte bei einem upgrade das Paket libgcrypt11 ausgeschlossen werden. #apt-get upgrade Paket auf unhold setzenUm das Paket wieder in das regelmäßige Update aufzunehmen setzen wir den Satus wieder in den Ausgangszustand. dpkg (apt-get) #echo "libgcrypt11 install"|dpkg --set-selections aptitude #aptitude unhold libgcrypt11 KontrolleNun sollte das Paket wieder in den Aktualisierungen vorhanden sein. #apt-get upgrade Dieses Verfahren ist eher die Ausnahme als die Regel. Bitte denkt daran, Eure Systeme stets aktuell zu halten. Montag, 25. Juni 2012Eine Domain komplett via RewriteRule weiterleiten
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:
RewriteEngine On RewriteRule (.*) http://www.neue-domain.de/$1 [R=301,L] 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. Mittwoch, 16. November 2011US-Proxy für YouTube und Co. bei Server4You - das war wohl nix
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.
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 lynx kommt der Fehler: Unfortunately, this video is not available in Germany because it mayDas 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. Hat ein Leser vielleicht einen Hinweis dazu? Dienstag, 15. November 2011Iphone 4S gestohlen, Telekom hilft nicht
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.
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. ![]() Gut, also mal den "Web 2.0 Support" der Telekom in Form des Twitter-Accounts @Telekom_Hilft bemüht. Dort wechseln sich anscheinend diverse Mitarbeiter ab und lesen die vorherigen Tweets zum Thema nicht, trotz dass ich extra immer brav "Reply" 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. 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 "Ersatz für mein entwendetes iPhone 4S" 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. 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? 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. Montag, 7. November 2011Schutz bei (D)DOS Angriffen mit Iptables
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.
Serverseitig kann man aber auch etwas tun, z.B. das kleine Shell-Script (D)DoS Deflate laufen lassen. Dieses kleine Script prüft ganz einfach per netstat, welche IP eine in der Config definierte Anzahl von Verbindungen überschreitet und sperrt diese wirksam direkt via iptables (diese Variante bevorzuge ich, es wird einfach DROP auf alle Pakete von der Quell-IP angewendet) oder via apf (Advanced Policy Firewall). 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. Zur "Installation", die im Wesentlichen aus ein paar Downloads via wget und der Einrichtung eines Cronjobs funktioniert, holt man sich einfach wie auf der Website angegeben das Script install.sh von einem Server. Alternativ habe ich das Ganze hier nochmals als Mirror hinterlegt: ddos.tar (20 KByte). Den Tarball einfach z.B. nach /usr/local/ entpacken und es kann losgehen. In der ddos.conf kann man via NO_OF_CONNECTIONS 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 "normale" User zu sperren. Mit BAN_PERIOD 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 ignore.ip.list whitelisten, 127.0.0.1 ist default auf der Whitelist Jetzt kann man direkt ./ddos.sh ausführen und sieht auch direkt den Output den im Script ausgeführten netstat, das konkret so aussieht: netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nAlle IPs mit einer Connection-Anzahl > NO_OF_CONNECTIONS werden nun also für BAN_PERIOD Sekunden gesperrt. Ein Cronjob, der am besten im Abstand läuft, wie auch BAN_PERIOD gesetzt ist, rundet die Config ab. Erfolge kann man dann ganz einfach z.B. via iptables -L -nv 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. Sollte der Angriff nur auf einzelne Dienste wie z.B. Apache durchgeführt werden, lohnt auch ein Blick auf Fail2Ban.
(Seite 1 von 22, insgesamt 322 Einträge)
» nächste Seite
|
SucheImpressumArchiveKategorien |
Kommentare