Dienstag, 28. Mai 2013

Eigenen IRC Server aufsetzen

In kleineren Softwareentwickler-Teams ist ein schneller Austausch von Informationen, Code-Snippets oder auch Passwörtern wichtig.
Möchte man diese Kommunikation nicht über einen externen Anbieter wie z.B. Skype oder ICQ laufen lassen, bietet sich als schlanke und schnelle Lösung ein eigener IRC (Internet Relay Chat) Server an.

Die Beschreibung der Installation erfolgt als Beispiel auf einem Ubuntu Linux System incl. SSL Verschlüsselung. Als IRC-Server wird UnrealIRCd (http://unrealircd.com) verwendet.

Aktuelle Version herunterladen und anschließend entpacken
wget http://www.unrealircd.com/downloads/Unreal3.2.10.1.tar.gz  
tar xfz Unreal3.2.10.1.tar.gz  

Die Dateien befinden sich jetzt unter ~/Unreal3.2.10.1

Starten der Konfiguration und kompilieren des Quellcodes von UnrealIRCd
./Config


Anschließend startet ein wirklicher Konfigurations-Marathon :-)

Jeder Wert muss durch bestätigen mit der ENTER-Taste bestätigt werden.






Hier muss jetzt der Pfad zu den eben entpackten Dateien noch mal angegeben werden. Stimmt das angezeigte Verzeichnis, dann einfach mit bestätigen.
What directory are all the server configuration files in?
[/home/shemel/Unreal3.2.10.1] ->

What is the path to the ircd binary including the name of the binary?
[/home/shemel/Unreal3.2.10.1/src/ircd] ->

Diesen default-Wert bestätigen!
What should the default permissions for your configuration files be? (Set this to 0 to disable)
It is strongly recommended that you use 0600 to prevent unwanted reading of the file
[0600] ->

Für den SSL-Support des IRC-Server hier bitte YES eintragen!
Do you want to support SSL (Secure Sockets Layer) connections?
[No] -> YES
Leer lassen, wenn man nicht weiß wo OpenSSL auf dem System liegt!
If you know the path to OpenSSL on your system, enter it here. If not
leave this blank (in most cases it will be detected automatically).
[] ->
Die restlichen Abfragen können bestätigt werden.
Do you want to enable IPv6 support?
[No] ->

Do you want to enable ziplinks support?
[No] ->

Do you want to enable remote includes?
This allows stuff like this in your configuration file:
include "http://www.somesite.org/files/opers.conf";
[No] ->

Do you want to enable prefixes for chanadmin and chanowner?
This will give +a the & prefix and ~ for +q (just like +o is @)
Supported by the major clients (mIRC, xchat, epic, eggdrop, Klient,
PJIRC, irssi, CGI:IRC, etc.)
This feature should be enabled/disabled network-wide.
[Yes] ->

What listen() backlog value do you wish to use?  Some older servers
have problems with more than 5, others work fine with many more.
[5] ->

What listen() backlog value do you wish to use?  Some older servers
have problems with more than 5, others work fine with many more.
[5] ->

How far back do you want to keep the nickname history?
[2000] ->


What is the maximum sendq length you wish to have?
[3000000] ->

How many buffer pools would you like?
This number will be multiplied by MAXSENDQLENGTH.
[18] ->

How many file descriptors (or sockets) can the IRCd use?
[1024] ->

Would you like to pass any custom parameters to configure?
See  `./configure --help' and write them here:
[] ->

Ist kein Openssl installiert, erscheint folgende Meldung:
checking for openssl... not found

Apparently you do not have both the openssl binary and openssl development libraries installed.
You have two options:
a) Install the needed binaries and libraries
   and run ./Config
OR
b) If you don't need SSL...
   Run ./Config and say 'no' when asked about SSL
   (or pass --disable-ssl to ./configure)
Eine Anleitung zum Installieren von SSL finden Sie z.B. hier: http://www.postfix-howto.de/installation/openssl.htm

Wurden die Einstellungen wie gewünscht vorgenommen, erfolgt anschließend die Kompilierung des UnrealIRCd. Mit dem Befehlt "make".
Sollten bei der Kompilierung Fehler auftreten, dann muss gegebenenfalls die ./Config noch mal angepasst werden.
 __________________________________________________
| Compile is now complete.                         |
| You should now read the documentation and learn  |
| how to configure your IRCd.                      |
|                                                  |
| If you really like UnrealIRCd, and would like to |
| make a donation, please read the Donation file in|
| this archive. :)                                 |
|                                                  |
| Thanks for using Unreal IRCd! If you are in need |
| for any kind of help regarding the IRCd please   |
| read the Unreal.nfo file.                        |
|__________________________________________________|
Die Kompilierung wurde erfolgreich beendet.

Vor dem Starten des Servers, müssen an der Einstellungsdatei unrealircd.conf noch einige wichtige Einstellungen vorgenommen werden!!! Für den Einstieg ist die Beispieldatei von irc-guide.de sehr gut: http://irc-guide.de/wiki/Main/UnrealIRCdBeispielkonfigurationsdatei

Folgende Anpassungen habe ich an der Beispieldatei vorgenommen:

me {
        name "www.deinserver.de";
        info "IRC - Server von DEINNAME";
        numeric 1;
};

admin {
        "Sebastian Hemel";
        "BENUTZERNAME";
        "deine@mail.de";
};

/* Passworded allow line 
 * Nur Benutzer von einer bestimmten IP-Range und Hostnamen zulassen
 * zusätzlich muss ein Passwort eingegeben werden.
*/
allow {
        ip             *@130.83.*.*;            # Besucher von dieser IP ...
        hostname       *@*.t-online.de;         # ... bzw diesem Host  ...
        class           clients;
        password "xxxxxxxxxxxxxxx";             # ... brauchen ein Passwort zum Verbinden ...
        maxperip 2;                             # ... und dürfen im Gegensatz zu allen anderen ...
                                                # ... nur einmal pro IP/Host verbinden!
};

allow channel {
        channel "#team-chat";
        channel "#raum1";
        channel "#raum2";
};

set {
        auto-join "#team-chat";
};

oper shemel {
 ...
};

/* Server linken. Wenn das nicht gewünscht ist, dann diese Zeilen
 * auskommentieren oder löschen! */
/*
 * listen               123.45.67.8:7001        // Auf Port 7001...
 * {
 *      options
 *      {
 *              serversonly;            // Nur Server, keine Clients.
 *      };
 * };
 */

 /*
  * link hub.mynet.com {
  * ...
  */

 /*
  * tld {
  * ..
  */ 

deny channel {
   channel "*";
   reason "Wir unterstützen keine frei waehlbaren Channels";
}

/* Network configuration */
set {
        network-name            "IRC";
        default-server          "deinserver.de";
        services-server         "deinserver.de";
        stats-server            "deinserver.de";
        help-channel            "#help";
        hiddenhost-prefix       "hrz";
        /* prefix-quit          "no"; */
  
...

        /* Richtiges SSL-Zertifikat hinterlegen!*/
  ssl {
                /* certificate server.crt.pem; */
                certificate server_cert-xyz.pem;
                /* key server.key.pem; */
                key server.priv;
                /* trusted-ca-file class3.crt; */
                trusted-ca-file rootcert.crt;
        };
};


Folgende "Welcome" Dateien können noch erstellt werden:
vi motd.conf
vi rules.conf
Mit den beiden Dateien kann man angeben welche Regeln auf dem IRC-Server gelten und verbindlich sind. Bekannt ist dies auch als "Message of the Day". Ein Generator für schöne Logos im ASCII Format findet sich hier: http://patorjk.com/software/taag

Jetzt lässt sich der IRC Server mit dem folgenden Befehl starten
./unreal start

Starting UnrealIRCd
 _   _                      _ ___________  _____     _
| | | |                    | |_   _| ___ \/  __ \   | |
| | | |_ __  _ __ ___  __ _| | | | | |_/ /| /  \/ __| |
| | | | '_ \| '__/ _ \/ _` | | | | |    / | |    / _` |
| |_| | | | | | |  __/ (_| | |_| |_| |\ \ | \__/\ (_| |
 \___/|_| |_|_|  \___|\__,_|_|\___/\_| \_| \____/\__,_|
                           v3.2.10.1
                     using TRE 0.8.0 (BSD)
                     using OpenSSL 1.0.1e
                     using zlib 1.2.3.3

* Loading IRCd configuration ..
* Configuration loaded without any problems ..
* Loading tunefile..
* Initializing SSL.
* Dynamic configuration initialized .. booting IRCd.
---------------------------------------------------------------------


Glückwunsch zum eigenen IRC Server!
Passende Clients sind z.B. Mirand IM oder auch der Opera Browser.

Programmier-Beispiele in Python um IRC-Services anzusprechen, findet man hier:
Raspberry Pi: Einstieg und User Guide (mitp Professional)

Dienstag, 14. Mai 2013

MS-SQL Tricks

Eine kleine Auflistung von MS-SQL Tricks, die fast täglich zur Anwendung kommen.

Alle Tabellen einer Datenbank löschen:
 Exec sp_MSforeachtable  
  @command1 = "DROP TABLE ? PRINT '? dropped'",  
  @whereand = "and uid = (SELECT schema_id FROM sys.schemas WHERE name = 'dbo') ";  

Informationen über eine Tabelle ausgeben:
 sp_spaceused [TABELLENNAME]  
Gibt die Anzahl der Zeilen sowie den zugeordneten und verwendeten Speicherplatz für eine bestimmte Tabelle, eine indizierte Sicht oder eine Service Broker-Warteschlange in der aktuellen Datenbank bzw. den zugeordneten und verwendeten Speicherplatz für die gesamte Datenbank an.  

Überprüfen ob man Zugang zu der DB hat, kann man recht schnell mit einer Telnet-Verbindung:
 telnet sqlserver.name.de [PORT]  

Backup/Dump der Datenbank erstellen:
Hierfür muss das SQL Server Management Studio geöffnet werden.
  • "DB_name" DB auswählen und im Kontext-Menü TASKS --> SKRIPTS GENERIEREN auswählen. 
  • Anschließend auf "Weiter" klicken. Die Datenbank auswählen "DB_name".
  • Damit auch die INSERT-Befehle gesichert werden, unter Tabellen-/Sichtoptionen --> "Skript für Daten erstellen" auf TRUE setzen. Als Objekttyp "Tabellen" auswählen. 
  • Im nächsten Fenster sollten alle Tabellen (Alles auswählen) markiert werden. 
  • Jetzt können die CREATE und INSERT Befehle in einer Datei oder in einem Abfragefenster gespeichert werden. 
  •  Einspielen: Um die Befehle für die richtige DB auszuführen, muss direkt in der ersten Zeile nach USE die richtige DB angegeben werden. In unserem Fall "USE [DB_name]"

Montag, 13. Mai 2013

Gehen Sie effizient mit E-Mails um!

Wie können Sie Ihren Büro-Tag effizient gestalten und sich nicht unnütz durch E-Mails ablenken lassen?

Hier meine Regeln, welche sich in der Praxis gut anwenden lassen:
  • Sendepause. Stellen Sie sämtliche Benachrichtigung für den Posteingang ab.
  • Entspannen. Wie wichtig ist es, sekundengenau über neue Post informiert zu sein? Reicht es nicht auch diese erst in 3 Stunden zu beantworten?
  • E‐Mails nur viermal am Tag lesen. Legen Sie für sich feste Mail-Abholzeiten fest und einen Antwortzeitraum. Zum Beispiel: Morgens, vor der Mittagspause, nach der Mittagspause und kurz vor dem Feierabend
  • Verbieten Sie CC‐Mails. CC-Mails sind ein sehr größter Zeitfresser. Ist die Information überhaupt wichtig für mich? Antworten alle auf eine CC-Mail, kann es schnell in SPAM ausarten.
  • Arbeiten mit Ordnern, Filtern oder Ticket-System. Verlagern Sie zum Beispiel E-Mails die einzelne Produkte oder Systeme angeht direkt in ein Ticket-System.
  • Halten Sie Ihre E-Mails kurz. Investieren jeweils nur zwei Minuten für eine Antwort. Sie können zum Beispiel auch nur die Betreffzeile für eine kurz Info verwenden und mit EOM (end of message) beenden.
  • Rufen Sie bei komplexen Themen an. Um Ideen zu entwickeln oder auch Konflikte zu lösen, sind E-Mails eher nicht geeignet.

Ich wünsche viel Spaß beim Ausprobieren :-)


Übung: Versuchen Sie doch einen E-Mail freien Tag die Woche einzurichten.


Weitere nützliche Tipps finden Sie in dem Buch: Büro-Effizienz von Rositta Beck-Rappen

Sonntag, 5. Mai 2013

Rund um Linux - Einige nützliche Befehle für die Shell I

Anbei eine Auflistung einiger nützlichen Linux Befehle (ich verwendet vorwiegend Ubuntu), die ich von Woche zu Woche, mal mehr oder weniger verwende.

Vielleicht ist ja auch für euch was nützliches dabei :-)


Datei(en) finden
 find /var/www/* | grep index*.*  

Belegter Platzen-Platz checken
 du -h --exclude=/proc --exclude=/sys --exclude=/media --exclude=/dev --max-depth=1 /  

Datei mit scp auf einen anderen Server kopieren
 scp -P 222 tomcat.sh user@test.server.de:/etc/init.d  

Duplikate von Dateien finden
Dafür kann man das Programm fdupes verwenden, siehe auch http://www.tuxfutter.de/wiki/Fdupes
 fdupes -r /opt/olw/nfs/elc_roh/archive > /home/ubuntu/xdupes.txt  

PermitRootLogin
Mit der Option "PermitRootLogin" gibt man an ob sich der User root direkt per SSH anmelden darf oder ob man sich erst mit einem normalen User authentifizieren muss und dann per "su -" zu root wird.
 /etc/ssh$ sudo vi sshd_config  
PermitRootLogin auf "no" setzen oder auskommentieren!
Anschließend neustart von sshd (/etc/init.d/ssh restart)

ll: command not found
 alias ll='ls -l'  

Dateigröße in MB/GB anzeigen
 du -hs catalina.out  

Verzeichnis packen und entpacken mit tar.gz
Um ein Verzeichnis mit tar.gz zu packen:
 tar cfvz irgendeinname.tar.gz verzeichnisname/  
Um ein Verzeichnis mit tar.gz zu entpacken:
 tar xfvz test.tar.gz  

Eine Datei auf 0 byte setzen
 >catalina.out  
Dies ist z.B. sinnvoll, wenn man im laufenden Betrieb die Datei nicht löschen oder leeren kann.

Mit grep innerhalb von Dateien suchen 
 grep -r 'JkWorkersFile' /etc/*  

Aktuell offene Ports anzeigen
 sudo netstat -tulpen | grep -v '127.0.0.1' | grep -v '::1:'  

Portscanner von einem anderen Rechner aus starten
 sudo nmap 130.80.47.XXX  

Repositories von Ubuntu anzeigen
 less /etc/apt/sources.list  

wget - failed: Connection refused
Evtl. muss ein Proxy Server eingetragen werden!
 http_proxy=http://proxy.uni.de:80; export http_proxy  
 https_proxy=http://proxy.uni.de:443; export https_proxy  
Falls dies bei dem sudo Befehl vorkommt:
 sudo visudo
 Defaults !env_reset  
Siehe auch:  https://bbs.archlinux.org/viewtopic.php?id=94273

Falsche Server Zeit aktulisieren
1. Die Hardware-Uhr umstellen
 sudo hwclock --set --date="12/28/2011 12:26:10"  
2. Die Systemzeit nach der Hardware-Uhr stellen
 sudo hwclock --hctosys  
3. Zeitzone einstellen
 sudo tzselect  

Su/Sudo Script ohne nachfragen des Passworts 
 sudo visudo  
 ubuntu ALL = (ALL) NOPASSWD: /etc/init.d/tomcat6  

Cron-Job für den Neustart von Tomcats in der Nacht um 03:00 UHr 
sudo vi /etc/crontab oder crontab aufrufen -e aufrufen
 0 3   * * *  ubuntu /etc/init.d/tomcat6 restart  

Samstag, 4. Mai 2013

Für Apache Tomcat HTTP Range Support aktivieren

Per default kann der Apache Tomcat keinen HTTP Range Support (Partial file download - Status-Code 206), dies ist aber eine zentrale Komponente für das Abspielen von z.B. HTML5 Videos.

Nachrüsten kann man dies z.B. über ein Servlet:

http://balusc.blogspot.de/2009/02/fileservlet-supporting-resume-and.html

Alternativ könnte man auch z.B. Miltion verwenden, welche eine "Java Webdav Server Library"ist. Weitere Informationen gibt es unter: http://milton.io