Da mein Server unter SuExec läuft, werden CGI-Scripts nur ausgefährt, wenn diese unterhalb des Webverzeichnis liegen.
Leider werden bei einer normalen Installation von Nagios die CGI-Scripte aber im Ordner /usr/ abgelegt und somit können diese nicht von Apache ausgeführt werden (HTTP 500)
Damit Nagios auch in so einer Umgebung läuft, muss Nagios selbst konfiguriert werden.
Zuerst müssen die plugins installiert werden, diese können getrost von der distribution installiert werden:
apt-get install nagios-plugins
Danach muss Nagios herunter gelden und entpackt werden:
mkdir /root/download
cd /root/download
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.3.1.tar.gz
tar xvfz nagios-3.3.1.tar.gz
Als nächstes muss ein vhost angelegt werden mit dem Benutzer "nagios". Danach kann Nagios konfiguriert werden und die Installation vorgenommen werden:
cd /root/download/nagios
./configure --prefix=/var/www/nagios/libs/nagios --with-cgiurl=/nagios/cgi-bin --with-nagios-user=nagios --with-nagios-grp=nagios
sed -i 's:for file in includes/rss/\*;:for file in includes/rss/\*.\*;:g' ./html/Makefile
sed -i 's:for file in includes/rss/extlib/\*;:for file in includes/rss/extlib/\*.\*;:g' ./html/Makefile
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf
Jetzt müssen die Rechte angepasst werden, da wir die Installation mit dem Benutzer root gemacht haben:
chown -R nagios:nagios /var/www/nagios/libs
find /var/www/nagios/libs -type d -exec chmod 750 {} +
find /var/www/nagios/libs -type f -exec chmod 640 {} +
chmod 700 /var/www/nagios/libs/nagios/sbin/*
chmod 700 /var/www/nagios/libs/nagios/bin/*
Und zu guter Letzt müssen die Verknüpfungen erstellt werden:
cd /var/www/nagios/htdocs/public/
ln -s ../../libs/nagios/share/ nagios
rmdir /var/www/nagios/libs/nagios/libexec
ln -s /usr/lib/nagios/plugins/ libexec
Nun bleibt nichts mehr zu tun, als Nagios zu konfigurieren und Nagios neu zu starten:
/etc/init.d/nagios restart
Wer schon mal eine iPhone-App programmieren wollte kennt das Problem bestimmt:
Der View UILabel hat keine Methode oder ein property um den Text vertikal auszurichten. Das ist gerade beim TableView ein Problem, da teilweise das Label zweizeilig ist und teilweise einzeilig, das ist dann nicht wirklich schön anzusehen.
Nach langem suchen habe ich dann endlich die Lösung gefunden, ein Plugin für UILabel
Zuerst erstellt man eine neu Klasse mit dem Namen VerticalAlign in XCODE (Ergibt zwei Dateien)
VerticalAlign.h und VerticalAlign.m
Und kopiert folgenden Code in die Klasse:
// VerticalAlign.h
#pragma mark VerticalAlign
@interface UILabel (VerticalAlign)
- (void)alignTop;
- (void)alignBottom;
@end
// VerticalAlign.m
@implementation UILabel (VerticalAlign)
- (void)alignTop {
CGSize fontSize = [self.text sizeWithFont:self.font];
double finalHeight = fontSize.height * self.numberOfLines;
double finalWidth = self.frame.size.width; //expected width of label
CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];
int newLinesToPad = (finalHeight - theStringSize.height) / fontSize.height;
for(int i=0; i<newLinesToPad; i++) {
self.text = [self.text stringByAppendingString:@"\n "];
}
}
- (void)alignBottom {
CGSize fontSize = [self.text sizeWithFont:self.font];
double finalHeight = fontSize.height * self.numberOfLines;
double finalWidth = self.frame.size.width; //expected width of label
CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];
int newLinesToPad = (finalHeight - theStringSize.height) / fontSize.height;
for(int i=0; i<newLinesToPad; i++) {
self.text = [NSString stringWithFormat:@" \n%@",self.text];
}
}
@end
Nachdem man die neue Klasse in seinem Projekt eingebunden hat:
#import "VerticalAlign.h"
kann man sein Label mit den neuen Methoden vertikal ausrichten:
UILabel *customerLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 1, 150, 50)];
customerLabel.text = @"to short for 2 lines";
customerLabel.numberOfLines = 2;
customerLabel.lineBreakMode = UILineBreakModeWordWrap;
[customerLabel alignTop];

