Umstellung von RIS auf WDS

Da auch nach mehreren aufwändigen Versuchen die Installation der Esprimo E5925-PCs mittels RIS nicht funktioniert (Bluescreen nach dem ersten Neustart, wahrscheinlich auf Grund fehlender SATA-Treiber, die ich allerdings ins Image integriert habe wie bei reckenpferd.de und zerbit.de beschrieben), habe ich mich heute dazu entschlossen, das Ganze mit den Windows Deployment Services (WDS) auszuprobieren. Diese sind seit Windows Server 2003 SP2 mit an Bord und können recht schnell installiert werden. Ich habe diese sehr gute Anleitung befolgt: Deploy XP Images in the Computer Lab with Windows Deployment Services on Server 2003.

Nach der Installation und dem Einbinden der ersten Images (und dem 1GB großen Download von Microsoft ;-) ) habe ich dann einfach mal einen Test gemacht, um zu schauen, ob das Booten über das Netzwerk klappt. Dazu musste ich die DHCP-Einstellungen ein wenig anpassen, da ich WDS nicht auf dem gleichen Server laufen lasse, wie vorher RIS. Aufgrund einiger Forenposts fand ich schließlich die richtigen Einstellungen für die DHCP-Optionen 066 und 067 heraus:

RIS WDS
066 Hostname des Startservers IP-Adresse des RIS-Servers Hostname (!) des WDS-Servers
067 Name der Startdatei OSChooser\I386\startrom.com boot\x86\pxeboot.com

Der erste Test lieferte dann folgende Fehlermeldung nach zunächst erfolgreichem Netzwerkboot:

Windows failed to start...

File: \Boot\BCD

Status: 0xc000000f

Info: An error occurred while attempting to read the boot configuration data.

Die Lösung fand ich im Technet Forum. Der Name der Startdatei muss auf boot\x86\wdsnbp.com geändert werden. Der folgende Screenshot zeigt nun die korrekten Einstellungen.

DHCP-Einstellungen für WDS

Nachdem der erste Bootvorgang mit dem Windows Vista PE-Image über WDS nun erfolgreich war, habe ich mit sysprep.exe mein System für das Erstellen eines Images vorbereitet, den PC neugestartet, mein eingerichtetes Capture-Image gebootet und den Capture Wizard durchlaufen. Als ich dann auf dem Bildschirm "Image Capture Destination" den Servernamen des WDS-Servers eingab und "Connect" anklickte, passierte mehrere Minuten gar nichts und irgendwann kam die Meldung The Network location cannot be reached. Wie ich mal wieder im Technet-Forum gelesen habe, kann man mit SHIFT-F10 eine Kommandozeile öffnen, in die ich dann auch gleich ipconfig /all eingab. Und schon wurde das nächste Problem offensichtlich: Es konnte keine Netzwerkkarte gefunden werden!

Die Lösung fand ich bei midteq.co.uk. Die fehlenden Netzwerkkartentreiber konnte ich wie folgt in das Image integrieren:

LAN-Treiber nach lan\ kopieren
mkdir build_install
imagex /apply "AufzeichnungsabbildXP.wim" 1 build_install
peimg /inf=lan\e1e5132.inf build_install\windows
peimg /inf=lan\e1e6032.inf build_install\windows
peimg /inf=lan\e1g6032.inf build_install\windows
peimg /inf=lan\e1q6032.inf build_install\windows
peimg /inf=lan\e1q5132.inf build_install\windows
peimg /inf=lan\e1000325.inf build_install\windows
imagex /capture build_install AufzeichnungsabbildXPInklLAN.wim "Aufzeichnungsabbild Windows XP inkl. LAN-Treiber" /boot /compress max

Nun konnte ich wie in obiger Anleitung beschrieben vom präparierten PC ein Image erstellen lassen und es auf dem WDS-Server speichern.

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Ant-Buildscript für Tomcat-Applikationen

Ich arbeite mich gerade ein wenig in die Entwicklung von Webapplikationen mit Java und JSP auf dem Apache Tomcat ein und habe mir mal schnell ein kleines Ant-Buildscript gebastelt, das Applikationen direkt auf einem (Remote-)Server installieren kann. Es basiert auf dem Beispielscript aus der Tomcat-Dokumentation und kompiliert/installiert die Anwendung Simplex, die ich zu Testzwecken entwickle, sowohl lokal als auch auf dem Tomcat-Server: build.xml

Die folgende Ordnerstruktur muss vorliegen:

Ordnerstruktur der Simplex-Applikation

Die verwendeten Properties werden in der build.properties definiert:

app.name=Simplex
app.version=0.1
app.path=/${app.name}
src.home=${basedir}/src
bin.home=${basedir}/bin
build.home=${basedir}/build
dist.home=${basedir}/dist
release.home=${basedir}/release
web.home=${basedir}/web
docs.home=${basedir}/docs
manager.url=http://tomcat-server:8080/manager
manager.username=administrator
manager.password=passwort
catalina.home=Z:\

Z:\ ist dabei ein Netzlaufwerk auf meinem Entwicklungsrechner, das mit dem Tomcat-Installationsverzeichnis auf dem Server verbunden ist.

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Active Directory mit der PowerShell auslesen

Für einige PowerShell-Scripte (die ich auch hier veröffentlichen werde, sobald sie fertig sind) brauche ich eine Liste aller Computer, die in unserem Active Directory bekannt sind. Nichts einfacher als das:

  1. # Returns a list of all computers (running Windows XP) in the local LDAP
  2. function GetComputersFromLDAP()
  3. {
  4.         trap
  5.         {
  6.                 write-host ("Error while retrieving computers from LDAP: " + $_.exception.message) -foregroundcolor "red";
  7.                 return $false;
  8.         }
  9.         $pcs = @();
  10.         $dir = "LDAP://DC=subdomain,DC=example,DC=com";
  11.         $ldapSearcher = new-object directoryservices.directorysearcher;
  12.         $ldapSearcher.filter = "(objectclass=computer)";
  13.         $computers = $ldapSearcher.findall();
  14.         foreach ($computer in $computers)
  15.         {
  16.                 if ($computer.properties["operatingsystem"] -eq "Windows XP Professional")
  17.                 {
  18.                         $pc = "" | select-object Name;
  19.                         $pc.Name = $computer.properties["name"];
  20.                         $pcs += $pc;
  21.                 }
  22.         }
  23.         return ($pcs | sort-object Name);
  24. }

Über das zurückgegebene Array kann man dann wie folgt iterieren:

  1. foreach ($pc in $pcs)
  2. {
  3.         write-host $pc.Name;
  4. }
Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

RIS-Installation eines ESPRIMO E5925 mit Intel 82562ET Netzwerkchips

Ich liebe RIS-Installationen! Insbesondere, wenn die zu installierenden PCs mit Netzwerkchips von Intel ausgestattet sind. Bislang gab es bei uns jedesmal Probleme mit den Intel-Chips. Aktuelles Beispiel ist der ESPRIMO E5925 von Fujitsu-Siemens, der einen Intel 82562ET-Chip verbaut hat. Wie erwartet schlug die RIS-Installation sowohl mit den Treibern von der FSC-CD als auch von der FSC-Website fehl. Ich verstehe nicht, warum die es nicht schaffen, ihren Business-PCs die korrekten RIS-Treiber beizulegen...

Nun denn. Nach einer ausgiebigen Suche im Netz und zahlreichen Versuchen mit unterschiedlichsten Treibern, entschloss ich mich, die FSC-Hotline zu bemühen. Dort erfuhr ich dann, das in unseren PCs nicht der Chip im Einsatz ist, den ich angenommen hatte (PHY 82566), sondern der erwähnte 82562ET. Mit den Treibern von hier klappte dann auch die Installation: Network Adapter Drivers 82562ET.

Ich musste nur noch das Standard-Vorgehen durchführen, das ich hier bereits beschrieben habe: RIS-Installation von Windows mit einer Marvell Yukon 88E8055 Netzwerkkarte.

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

SVN-Notify

Aufgrund des Kommentars von Markus zu meinem Beitrag "PHP-Script zum Versenden von Mails nach Subversion-Commits" habe ich heute mal SVN-Notify ausprobiert und ich muss sagen, dass ich mir die Arbeit beim Erstellen meines eigenen Post-Commit-Scripts umsonst gemacht habe (naja, nicht ganz: unsere Benutzer hätten halt gerne deutsche Texte etc.)

Durch folgende Befehle wird SVN-Notify installiert (ein installiertes Perl wird vorausgesetzt):

  1. cpan install SVN::Notify
  2. cpan install SVN::Notify::HTML
  3. cpan install SVN::Notify::HTML::ColorDiff
  4. cpan install Text::Trac
  5. cpan install SVN::Notify::Filter::Trac

Die letzten beiden Pakete sind nur interessant, wenn man Trac-Formatierungen in den Kommentaren verwendet (wie es bei uns der Fall ist). Alternativ kann man SVN-Notify auch manuell bauen und installieren (hier gibt es die Quellen: SVN-Notify):

  1. perl Build.pl
  2. ./Build
  3. ./Build test
  4. ./Build install

Nachdem svnnotify installiert und im Pfad erreichbar ist, kann durch folgende Zeile in der hooks/post-commit im SVN-Repository nach jedem Commit eine nett formatierte HTML-Mail inkl. "diff" verschickt werden:

  1. svnnotify --repos-path "$1" --revision "$2" --to mail@example.com --from svn@example.com --handler HTML::ColorDiff --filter Trac --trac-url http://trac.example.com/Sandbox --with-diff --subject-prefix [Sandbox]

Fertig! :-)

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Wegfindung mit dem A*-Algorithmus in Java

Für unser Studienprojekt "Fertigungsanlage" habe ich als Prototypen den A*-Algorithmus in Java umgesetzt. Mit der Implementierung kann auf der Beispielanlage, die im folgenden Bild zu sehen ist, eine Wegplanung durchgeführt werden, die den optimalen Weg zwischen zwei Punkten der Anlage ermittelt.

Beispiel einer Fertigungsanlage

Auf der linken Seite sieht man ein Hochregallager und rechts oben eine LKW-Laderampe. Die Kreise sollen Drehteller darstellen und die Striche sind Förderbänder unterschiedlicher Länge. A1, A2 und B1 sind Fertigungsstationen, die die angelieferten Produkte bearbeiten.

Den optimalen Weg zwischen Hochregallager und Rampe ermittelt der Algorithmus wie im folgenden Bild dargestellt. Selbstverständlich kann man Wege zwischen allen Punkten planen, indem man die Bezeichner als Parameter beim Programmstart übergibt (siehe ProductionPlant.java).

Beispiel einer Wegplanung auf der Fertigungsanlage

Wie gesagt handelt es sich nur um einen Prototypen. Die fertige Wegplanung umfasst dynamisches Planen von Wegen in der ausgelasteten Anlage, Kommunikation mit einer Oracle-Datenbank zur Auftragsbearbeitung, Einlesen der Anlagenkonfiguration aus XML-Dateien, Kommunikation zur Anlagensteuerung per CORBA usw. Ein richtig nettes Projekt, dem ich wohl noch viele Wochenenden widmen werde :D

Download des Quelltextes

Wegfindung mit dem A*-Algorithmus in Java

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Eine ausfüllbare PDF-Datei mittels Java mit Werten füllen

19. February 2008 um 16:24:51 - 318 Wörter - Beitrag Nr. 608

Um mittels Java PDF-Dateien erzeugen und bearbeiten zu können, benötigt man zunächst ein Framework, das die benötigten Funktionen bereitstellt. Listen mit möglichen Bibliotheken gibt es z.B. hier: Java libraries to read and write PDF files, Open Source PDF Libraries in Java.

Ich habe mich für iText entschieden. Nachdem man erstmal die Erzeugung der iText.jar mittels ant hinbekommen hat (siehe How I install my development environment for iText (ANT)) ist der Rest ein Kinderspiel. Das folgende Programm fügt dem ausfüllbaren PDF Antrag.pdf den Wert Berlin in das benannte Feld Wohnort ein und speichert die Datei als AntragAusgefuellt.pdf.

  1. package com.stefanmacke.test;
  2. import com.lowagie.text.*;
  3. import com.lowagie.text.pdf.*;
  4. import java.io.*;
  5. import java.util.*;
  6. public class PDFTest
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 try
  11.                 {
  12.                         PdfReader reader = new PdfReader("Antrag.pdf");
  13.                         ByteArrayOutputStream baos = new ByteArrayOutputStream();
  14.                         PdfStamper stamper = new PdfStamper(reader, baos);
  15.                         AcroFields form = stamper.getAcroFields();
  16.                         form.setField("Wohnort", "Berlin");
  17.                         stamper.close();
  18.                         FileOutputStream fos = new FileOutputStream("AntragAusgefuellt.pdf");
  19.                         baos.writeTo(fos);
  20.                         fos.flush();
  21.                         reader.close();
  22.                 }
  23.                 catch (Exception ex)
  24.                 {
  25.                         System.out.println(ex.getMessage());
  26.                 }
  27.         }
  28. }

Update 18:34 Uhr: Habe gerade noch einen Beitrag zum selben Thema im RubyPDF Blog gefunden. Allerdings verwendet der Autor dort iTextSharp, weshalb ich die Lösung natürlich ein wenig schöner finde ;)

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

AMR-Dateien mit dem PC abspielen

AMR-Dateien (z.B. Handy-Aufnahmen oder -Klingeltöne) auf dem PC abzuspielen ist gar nicht so einfach. Mein Schweizer Taschenmesser für alles, was mit Multimedia zu tun hat, der VLC Player, kommt leider nicht mit den Dateien klar. Der einzige Player, den ich nach langem Suchen gefunden habe, ist ein alter Nokia Multimedia Player, mit dem man die Dateien allerdings nicht vorspulen kann.

Schlussendlich bin ich nun beim Konvertierprogramm SUPER 2008 gelandet, mit dem ich mir die AMR-Dateien ins MP3-Format umgewandelt, und dann ganz normal mit Winamp abgespielt habe.

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

PHP-Script zum Versenden von Mails nach Subversion-Commits

Ich habe mir heute ein kleines PHP-Script geschrieben, dass nach Commits auf ein Subversion-Repository automatisch Mails an bestimmte Benutzer versendet, falls Pfade im Repository geändert wurden, die für diese Benutzer von Interesse sind. Es kann hier heruntergeladen werden: postCommitMails.php.

Das Script prüft, ob die eingetragenen Pfade geändert wurden und verschickt entsprechend Mails an die zugeordneten Benutzer (natürlich nur eine Mail per Benutzer, falls Benutzer für mehrere Pfade eingetragen sind).

Aktiviert wird das Script im post-commit-Hook von Subversion. Dazu muss lediglich eine Datei namens post-commit im hooks/-Ordner des gewünschten Repositorys erstellt werden (dort sollte bereits eine entsprechende Dateivorlage zu finden sein), die die folgende Zeile enthält: postCommitMail.php $REPOS $REV

Die Mails sehen so aus:

Es wurden Änderungen am Repository http://svn.intranet/Dokumente vorgenommen (Revision HEAD).

Benutzer macke hat am 12.02.2008 um 12:25 Uhr folgende Dateien geändert:

     D /KleinerTest.txt

Der folgende Kommentar wurde vergeben:

  Test der automatischen Mail-Benachrichtigung
Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

WinUpdRestore.exe (Download)

Die Suchanfragen häufen sich... daher hier nochmal der Link zur obigen Datei (siehe Windows Updates können nicht installiert werden). Enthalten ist lediglich eine Batch-Datei, die ihr hier herunterladen könnt:

WinUpdRestore.txt

Eine kleine Erklärung gibt es hier: Kommentar 15014 (zum oben genannten Beitrag).

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description