Getting in contact with OpenStack

Till now, i was only able to deploy some vm’s on my MacMini Server with VMware Fusion on it. This worked oukay so far… Due to the mac mini is reaching its second birthday, it does not power vm’s very well. Also to keep the vm powered on, i need always stay logged in with the user and of course the management is only possible trough vnc directly on the server.

That was the reason for me to rent some virtual machines by rackspacecloud.com. Seriously, rackspacecloud is impressive! But keeping two or more vm’s up and running for more than a month is a really expensive playground! Moving to Amazon’s EC2 wasn’t an option too. So i decided to buy a extreme low-end cheap virutalisation capable server. After some research (Hardware should be compatible with ESXi in case of whatever) i’ve build the following server for me:

Case: Asus Vintage V8-P8H67E, Intel H67, Socket 1155, USB 3.0 (about 170$)

CPU: Intel Core i5 2500 BOX, 3.3GHz, LGA 1155, 4C/4T (about 200$)

RAM: Kingston ValueRAM, 3×4 GB, DDR3-1333, CL9 (about 60$)

Raid (optional): Adaptec RAID 2405, 4-Channel SAS/SATA, low profile (about 200$)

Additional Network: Intel PWLA8391GTBLK Pro 1000GT Gigabit Adapter PCI, Bulk (about 30$)

VLAN Gigabit Switch: HP ProCurve Switch V1810G-8 8 Port 10/100/1000 Mbps, SFP (about 110$)

Harddisk: got some at home

The Result is a Box with 100% Virtualisation Support (vPro, VT-x, VT-d, 64bit), 12GB RAM and small in form and silent too.

In the past i’ve landed several times on openstack.org during some research in automating virtualisation infrastructures. Openstack is a framework for building private clouds. Openstack promises an virtualisation ecosystem with all needed components to build a perfect world. The project looks very mature and there are a lot of partners supporting them. Openstack supports also a wide range of Hypervisors though they’r strongly recommending to use KVM for virtualistion. I will give the project a try…

 

Tagged: , , , , , ,

Enabling Redmine for Receiving Mails

Today i struggled around getting Redmine pulling Mails from a remote IMAP server and creating issues with its content. Finally i’v get it working… There are several rules you should keep in mind:

  • Be carful if you have defined any mandatory additional fields for your Issues
  • If you set unknown_user=create be sure the newly created user has access to the project automatically. If he has no access, the issue will not be created
  • If you just want to pipe Mails into a Redmine project use unknown_user=accept and o_permission_check=1 and issues are getting created with the anonymous User. Works well for a simple “one-way” posting

Finally i’ve created a small bash script to run the import process all 5 minutes:

SERVER=host.domain.tld
USER=jbauer
PASS=ILike24
 
rake -f /path/to/your/Redmine/installation/Rakefile redmine:email:receive_imap RAILS_ENV="production" \
host="$SERVER" \
username="$USER" \
password="$PASS" \
move_on_success=read \
project=sandbox \
allow_override=project,tracker,category,priority,status \
unknown_user=accept \
no_permission_check=1 \
status=New \
tracker=Bug \
priority=Low
exit $?

For mor detailed information visit the Redmine Wiki.

Tagged: , , , , ,

Redmine and GMail SMTP Server

It’s kind of tricky to configure redmine to send mails over GMail to project participants. The following configurations works very well for sourceTube.net. Tested with the actual Redmine Version 1.1.2 and ActionMailer 2.3.5.

Be careful editing the file. Do not use tabs, just spaces!

Just put the following in config/email.yml

production:
  delivery_method: :smtp
  smtp_settings:
    tls: true
    address: "smtp.gmail.com"
    port: 587
    domain: "domain.tld"
    authentication: :plain
    user_name: "MyEmailAddress@domain.tld"
    password: "ThisIs$ecret"
    enable_starttls_auto: true
Tagged: , , , ,

How to keep your Redmine uptodate

Usually its hard the server all the time the latest version of a software in a hosted environment like sourceTube.net. For example, sourceTube is a hosted Redmine solution. This piece of software is under heavy development with a tight roadmap. To server always the latest version of the code I handle two directories with all the data.

  • The first folder contains the productive data, which i’m using for my hosted environment
  • The second folder contains a checkout of the latest stable revision (gotten from the tag repository folder) of the trunk repository folder

After the successful setup of the folders the following short script does the whole magic for me:

#!/bin/bash
# Thomas Spycher - Zero-One - 05.11.2010
 
# Init
TAR=/bin/tar
SVN=/usr/bin/svn
SKELETON=/var/data/redmine/skeleton
 
#Create Backup of the current data
$TAR -czf $SKELETON/redmine_backup_before_update.tar.gz $SKELETON/redmine
$SVN update -r $1 $SKELETON/redmine_svn/
cp -r $SKELETON/redmine_svn/ $SKELETON/redmine/
# remove all .svn folders from the target
find $SKELETON/redmine/ -type d -name .svn | xargs rm -fr

The Script gets started with the revision number as argument:

./redmineBaseUpdate.sh 4786
Tagged: , ,

sourceTube.net ist geboren

Nach einigen Wochen Arbeiten am Abend und Wochenende ist nun endlich sourceTube.net zur Welt gekommen.

sourceTube ist eine cloud basierende Projekt Plattform. In sourceTube können, vorzugsweise IT/Software Projekte, von A-Z geplant, realisiert und gepflegt werden. Hier ein paar Stichworte:

  • Cloud Based
  • Redmine als Projektmanagement System
  • ITS System
  • Zeit erfassung
  • Subversion nahtlos integriert
  • Webbasiertes Management
  • Scrum Integriert

sourceTube ist im Moment noch Beta und somit offen für alle interessierten zum testen. Und das Beste am ganzen ist, dass während der Testphase 50mb gratis sind!

Tagged: , , , , , ,

Teil 1: Scrum… Management von Chaos?

Heute ist mein Buch über Scrum angekommen. Wie jedes neue Thema fällt der Startschuss mit dem Pöstler der, das Päckli mit einem neuen Buch bringt. Ich habe schon diverse Artikel über Scrum gelesen, aber effektiv etwas vorstellen kann ich mir nicht.

Was ist Scrum?
Scrum ist eine Projektmangement Methode für Projekte deren Weg das Ziel ist. Vorzugsweise in der Software Entwicklung.

Was erhoffe ich mir durch Scrum?
Mein Job als Engineer bei der Firma Genotec ist sehr hektisch. Ein Projekt zu managen ist mit herkömmlichen Methoden meist fast unmöglich. Einen Zeitplan einhalten ist Nervenraubend. Ebenfalls braucht ein Management eines Projekt’s unter diesen Umständen sehr viel Zeit! Mit Scrum erhoffe ich mir “Chaos zu managen” .

Tagged: ,

XCode und Objective-C 2.0

Ich denke es ist mal an der Zeit meine Eindrück, über die Welt der Entwicklung, aus Apples Auge, ein paar Worte zu verlieren. Im Rahmen meiner Weiterbildung beschäftige ich mich seit 1.5 Jahren mit C/C++. Java habe ich in den letzten Jahren auch programmiert, jedoch sehr wenig. Die meisten Zeilen Code habe ich in PHP und Perl geschrieben – bis jetzt.

Seit nun etwas mehr als 6 Monaten programmiere ich immer wieder etwas in Objective-C. Das Resultat sind zahlreiche Codeschnippsel welche in einem Verzeichnis “Experimente” in meinem Subversion Repository liegen. Effektiv ist eine iPhone App einen kurzen Schritt vor seiner Vollendung.
Der Anfang in Objective-C war steinig, verwirrend und meine Kopfhaut war anfänglich ziemlich wund vom vielen Kratzen. Der Syntax und Aufbau des Codes lässt sich schwer mit dem von C++ vergleichen. Nach langem schwertun wurde mir auch bewusst, dass es komplett falsch ist, diese beiden Sprach miteinander zu vergleichen! Objective-C hat seinen Ursprung schliesslich auch nicht in C++ sondern in C. Alles bereits vorhandene Programmierwissen ausgeblendet, startete ich einen zweiten Versuch mit der Sprache klar zu kommen. Es funktionierte!

Objective-C ist eine “menschenfreundliche” Programmiersprache. Sich ständig wiederholende Methoden, wie z.b. Setter/Getter Methoden wurden komplett vereinfacht. Hier sei angemerkt, dass ich nur von Objective-C 2 spreche!
Was ein C++ oder Java Programmierer unter Interfaces verstehen würde sind bei Apples Sprache Protokolle. Diese sind als Vertrag mit dem Programmierer zu verstehen. Ein Protokoll definiert Methoden die zwingend und solche die optional implementiert werden müssen resp. können. Hält sich der Entwickler nicht daran wird er sich mit dem Compiler in die Haare kriegen.
Wesentlich anderst ist der Aufruf von Methoden einer Klasse. Diese werden übrigens nicht mehr strikt in public, private,protected, virtual kategorisiert. Vielmehr unterscheidet man unter Instanz- und Statischen Methoden. Die Parameter einer Methode werden zwingend beschrieben. Dies macht den Code für den Menschen lesbar, als würde er einen Satz lesen.

[APIObjekt sendeAnfrage:anfrage anUrl:url];

Wobei “sendeAnfrage” und “anUrl” keinen Einfluss auf den Code haben. Sie beschreiben ausschliesslich den Methodenaufruf resp. dessen Parameter.

Bemerkenswert ist auch die gewonnene Dynamik dank den Selektoren. Mit diesen können Nachrichten, so werden Methodenaufrufe genannt, an Klassen verschickt werden. Sprich, eine Methode dynamisch aufgerufen werden. Wobei auch erst überprüft werden kann ob die entsprechende Klasse überhaupt auf diese Nachricht antworten kann.
Ebenfalls möchte ich an diesem Punkt noch die Kategorien erwähnen. Angenommen der String Klasse von Cocoa fehlt eine tolle Funktion die ich meinem Programm nutzen möchte, musste ich bis jetzt diese Klasse spezifizieren und dann diese in meinem Code verwenden. Im schlimmsten Fall würde dies bedeuten, dass ich tausende von Codezeilen durchsuchen und meine Klasse anstelle der alten einsetzen müsste. Mit Kategorien kann ich neue Methoden zu bestehenden Klassen anghängen. Somit sind diese Methoden ohne erbrechtliche Geschichten überall in meinem Code vorhanden. Cool, nicht?

Programmieren in Objective-C bedeutet Spass! Schönen Code zu schreiben wird somit einiges einfacher. Nun zur Schattenseite… Ja, es gibt tatsächlich eine!
Speichermanagement wird GROSS geschrieben in Objective-C. Es gibt drei Möglichkeiten seinen Arbeitsspeicher sauber zu halten.

  • Manuelles aufräumen des Speichers
  • Autoreleasepools, welche die Objekte anhand ihres internen Zählers eliminieren.
  • Garbage-Collection

Letzteres wird von den eingefleischten Apple Entwicklern verteufelt zudem gibt es in den iOS Geräten kein GC! Wird beim programmieren nicht äusserst sorgfältig auf den Speicher aufgepasst, beisst einem sein eigenes Programm ganz sicher bald in den Allerwertesten! Ist es soweit, und bei jedem wird dies der Fall sein, greift man gerne auf die Analyse Tools von XCode zurück!

Fazit: Objective-C 2.0 hat einiges vom Zauberstaub der Zukunftsfee abgekriegt! Aber einfach so mal Objective-C lernen ist nicht… Dafür ist die Sprache zu komplex! Hat man sich mit der Sprache angefreundet findet man schnell gefallen an Apples Cocoa Framework. Dieses bietet für – fast – alle Situation einen schnuckelige Klasse bereit. Leider sind diese wirklich zum teil nur schnuckelig. Fehlende Methoden für z.b. Base64 Encoding, HMAC Verschlüsselung und fehlende API Klassen für XML-RPC und REST-API, verhindern eine innige, heisse Beziehung mit Cocoa!
Glücklicherweise findet man im Internet viele fertige Klassen, die dieses Defizit irgendwie, mit viel Klebeband, aufheben.
Noch ein letztes Wort zur Entwicklungsumgebung XCode. Jeder, der mit der Version 3.x gearbeitet hat und die Version 4 gesehen hat, wird mir recht geben, dass die Aktuelle Version (3.irgendwas) mit einem Sportwagen mit Slicks im Regen zu vergleichen ist. Das Teil schleudert und man verliert schnell den überblick und streift mal eine Leitplanke! XCode 4 hingegen, fühlt sich eher wie ein britischer Sportwagen mit einer angemessenen Bereifung an! Die nahtlos integrierten Versionierungs Hilfsmittel lassen jeden Entwickler entspannt arbeiten!

Tagged: , ,

Basic Cisco Steps

tecstuff

IP setzen

Switch#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#interface vlan 1
Switch(config-if)#ip address 10.123.1.254 255.255.255.0
Switch(config-if)#exit
Switch(config)#exit
Switch#wr

Port Mirroring

Switch(config)#monitor session 1 source interface fastEthernet 0/1
Switch(config)#monitor session 1 destination interface fastEthernet 0/24
! If VLAN tags are needed
Switch(config)#monitor session 1 destination interface fastEthernet 0/24 encapsulation dot1q
Switch(config)#no monitor session 1

MAC Address Security

Switch(config)#interface fastEthernet 0/1
--->Switch(config-if)#switchport port-security mac-address sticky
Switch(config-if)#switchport mode access
Switch(config-if)#switchport port-security
Switch#show port-security

Port wieder aktivieren

Switch(config-if)#shutdown
Switch(config-if)#exit
Switch(config-if)#no shutdown

Spanning Tree

Switch(config-if)#spanning-tree portfast
Switch(config)#no spanning-tree vlan 1

CDP

Switch(config)#no cdp run

Telnet anschalten

Switch(config)#line vty 0 15
Switch(config-line)#password ktsi
Switch(config-line)#login
Switch(config-line)#transport input telnet
Switch(config-line)#transport output telnet

Webbrowser Access

Switch(config)#ip http server

Chaning IP on an AIX System

tecstuff

A friend of mine asked for how to change the IP on an IBM AIX System without Smitty or smit. It took some minutes playing around on the system, but finally i figured out how to change basic network settings.

First of all you should query the system for possible attributes. After that you can change these settings and make them permanent.

bash# lsattr -El en0
alias4                      IPv4 Alias including Subnet Mask           True
alias6                      IPv6 Alias including Prefix Length         True
arp           on            Address Resolution Protocol (ARP)          True
authority                   Authorized Users                           True
broadcast                   Broadcast Address                          True
mtu           1500          Maximum IP Packet Size for This Device     True
netaddr       192.168.1.99   Internet Address                           True
netaddr6                    IPv6 Internet Address                      True
netmask       255.255.255.0 Subnet Mask                                True
prefixlen                   Prefix Length for IPv6 Internet Address    True
remmtu        576           Maximum IP Packet Size for REMOTE Networks True
rfc1323                     Enable/Disable TCP RFC 1323 Window Scaling True
security      none          Security Level                             True
state         up            Current Interface Status                   True
tcp_mssdflt                 Set TCP Maximum Segment Size               True
tcp_nodelay                 Enable/Disable TCP_NODELAY Option          True
tcp_recvspace               Set Socket Buffer Space for Receiving      True
tcp_sendspace               Set Socket Buffer Space for Sending        True
bash# chdev -l en0 -a netaddr=192.168.1.100 
 
bash# lsattr -El inet0
authm         65536                       Authentication Methods              True
bootup_option no                          Use BSD-style Network Configuration True
gateway                                   Gateway                             True
hostname      thisismyname                      Host Name                           True
rout6                                     IPv6 Route                          True
route         net,-hopcount,0,,0,192.168.1.254 Route                               True
bash# chdev -l inet0 -a route=0,192.168.1.1

iBank::Finanzapplikation für OSX/iPhone

Es gibt tonnenweise Finanzapplikationen auf dem Markt. Viele sind kompliziert, bieten keine Möglichkeit für die Synchronisation mit dem iPhone etc. Es ist schwer diesbezüglich eine Entscheidung zu treffen. iBank kostet zwar etwas, aber es deckt alle Needs ab…

Tagged: , , , ,
Page 1 of 212