About Philosophisches und anderer Schmalz

This page contains an archive of all entries posted to /blog/wvk in the Philosophisches und anderer Schmalz category. They are listed from oldest to newest.

Modellierung is the previous category.

Ruby, Rails und 'drum und 'dran is the next category.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.31

Main

Philosophisches und anderer Schmalz Archives

September 7, 2007

Mein erstes Mal

class HelloSayer
  def scream
    3.times do 
      puts "hello world!".upcase
    end 
  end
end
h = HelloSayer.new
h.scream

Nun, wo dies gesagt ist: Willkommen zu meinem Diplomarbeits-Blog, wo in der nächsten Zeit das eine oder andere mehr oder minder Interessante zum Fortschritt meiner Arbeit zu finden sein wird. Pro Forma soll hier erst eine kleine Zusammenfassung dessen erfolgen, wie das Ziel dieser Arbeit (neben der Erlangung des akademischen Grades des "Diplom-Ingenieur (FH)", aussehen wird. Genaueres befindet sich in der ausführlichen Konzeptbeschreibung, die ich gleich mal versuchen werde als PDF hier anzuhängen.

Die Ausgangsituation: Ich habe momentan einen Hostingserver laufen, der von seiner Softwareauswahl her als typisches LAMP-System angesehen werden kann. Dafür gibt es zwar eine teilamputierte Hand voll webbasierter Administrationsoberflächen, jedoch keine die so wirklich meine Ansprüche abdeckt. Deswegen werde ich im Rahmen dieser Diplomarbeit eine eigene Server-Administrations- und Kundenverwaltungs-Applikation entwickeln, die
a) meinen Ansprüchen gerecht werden,
b) komplett in Ruby geschrieben und
c) sinnvollen Gebrauch von Web 2.0-Technologien machen soll.

Was meine Serverkonfiguration nicht ganz alltäglich macht, ist die Tatsache dass ein Großteil der Software ihre Informationen nicht aus Konfigurationsdateien wie /etc/passwd, /etc/aliases oder ~/.forward bezieht, sondern aus einer MySQL-Datenbank. Das schreit für mich förmlich nach einer Verwaltungsoberfläche in Ruby on Rails mit seinem ActiveRecord-Konzept.

Nundenn, soviel zur Einführung. Mehr Info dazu gibt's in dieser PDF-Datei.
Momentan beschäftige ich mich mit der Erstellung der Use-Case- und Klassen-Spezifikation. Diese liegt in ihrer jeweils aktuellsten Version unter http://chaos.hobby-astronomie.net/dipl/consolvix/consolvix.html. eine XMI-Datei befindet sich unter http://chaos.hobby-astronomie.net/dipl/consolvix.xmi. Ratschläge, Ideen und Wünsche sind jederzeit gern gesehen, auch wenn das alles noch weit von einer brauchbaren Spezifikation entfernt ist.

September 22, 2007

Prozess != Prozess

Den heutigen und gestrigen Tag habe ich etwas intensiver mit Klassendesign und Überlegungen zum Datenbankschema gemacht. Zwar ist es in Anbetracht der Tatsache, dass ich noch nicht einmal meine Use Case-Sammlung Fertig habe, etwas verfrüht um mir schon konkrete Gedanken zur genauen technischen Implementierung zu machen, aber ich denke mal dass diese Tätigkeit durchaus gerechtfertigt ist. Warum? Ich habe technische Vorgaben durch das System selbst, die ich verwalten möchte. Andererseits habe ich natürlich auch meine "Vorgaben", wie die Verwaltung im Endeffekt für den Benutzer aussehen soll, und diese sollten möglichst nicht durch technische vorgaben beeinflusst werden.
Momentan laufen also zwei Entwicklungsansätze Ansätze parallel, und das sorgte just heute für Verwirrung. Das gestern noch vorgeschlagene Klassendesign für die Benutzerverwaltung (insbesondere aus E-Mail-systemtechnischer Sicht) war heute wieder mehrfach zentrale Bestandteil meiner Überlegungen. Und siehe da, es wurde wieder mehrfach verändert.
Nun ist mir als Ursache dafür klar geworden, dass ich hier zwei Prozesse miteinander zu verquirksen versuche, die in erster Linie nichts miteinander zu tun habe: Der technische/systemverwalterische Prozess und der Geschäftsprozess. Mal modelliere ich etwas nach den Vorstellungen des einen, mal nach denen des anderen. Und das sollte hier und jetzt aufhören, denn sonst komme ich nie auf einen grünen Zweig.

Ein paar Dinge sollten mir klarer sein, und hier ist ein Versuch der Klärung:


Wer wird die Software am Ende einsetzen?

Ich selbst, meinen Server. Aber: es gibt andere Menschen, die bereits ihr Interesse bekundet haben.

Soll Consolvix eine möglichst flexible Softwarezusammenstellung unterstützen?

Nein. Consolvix soll, insbesondere zu Beginn, genau die vorgegebene Systemkonfiguration möglichst optimal, sprich vollständig, verwalten können. Für andere Softwarekonfigurationen sollen aber später Zusatzmodule geschrieben werden können. Was also an Consolvix flexibel und universell gestaltet werden soll, ist "lediglich" die Modul-API.

Soll die Software Geschäftsprozesse vorgeben oder soll sie möglichst Geschäftsmodell-unabhängig, also eher systemorientiert sein?

Das ist die schwierigste Frage. Ich tendiere zur Antwort, dass sie möglichst meine Vorstellungen des Hostinggeschäftsmodells vorgeben soll. Grundgedanke ist dieser: die rein technische Administration lässt sich auch sehr gut mit Software wie Webmin erledigen, außerdem ist durch die Verlagerung der Konfiguration in die Datenbank bereits eine gewisse Abstraktion zum System gegeben. Insofern ist es möglich, die Systemverwaltung zu einem Großteil über PHPMyAdmin zu erledigen (mache ich zur Zeit). Außerdem spielt der buchhalterische Aspekt eine elementare Rolle: zwar werde ich im Rahmen der Diplomarbeit vermutlich nicht die ganze Rechnungsverwaltung implementieren, aber letzten Endes sollte sich Consolvix doch auf genau diese Aufgabe ausrichten.

Nundenn, mal schauen was diese Antworten mir bringen werden.

October 2, 2007

Assoziation und Aggregation in Rails

Weil ich immer mal wieder eine Weile überlegen muss, wie nun genau die verschiedenenen Assoziationen wie has_one, has_one und has_and_belongs_to_many gebildet werden (im Sinne der Fremdschlüssel in der Datenbank), hab ich hier mal eine Grafik aus meiner Bachelorarbeit angefügt, die vielleicht auch dem einen oder anderen Rubyisten unter euch eine Hilfe sein wird.

Well, here goes:
RailsClassAssociations.png
Oben ist die Klassen-Assoziation angegeben, in der Mitte der verwendete Ruby-Code und unten die Tabellen mit den Fremdschlüsseln.

Ergänzung zu Philipps Kommentar: Wenn man 10 Aggregationen hat, kommen die einfach nacheinander, genau. Man kann sich auch über die Namenskonventionen hinwegsetzen und z.B. die Fremdschlüssel- und Tabellennamen explizit angeben. Allerdings wollte ich hier jetzt keine Einführung in ActiveRecord geben, da verweise ich gerne auf die Doku ;-). Hier aber mal eine Beispielklasse meines Systembenutzers (siehe Klassendiagramm für Details):

class SystemUser < ActiveRecord::Base
  belongs_to :client
  has_and_belongs_to_many :system_groups
  has_many :user_access_rights
  has_one :reseller_account, :foreign_key => 'reseller_id'
end

Oder hier die Assoziationen des AccessRights, hier sind die Zusammenhänge im Datenmodell etwas komplizierter. Die Vergknüpfung erfolgt über eine Tabelle, die mehr informationen als nur die Fremdschlüssel beeitstellt. Außerdem, um Daniels Kommentar zu würdigen, kann man so auch mit Verknüpfungstabellen arbeiten, deren Namen sich nicht aus der in alphabetisch richtiger Reihenfolge zusammengesetzten Namen der verknüpften Entitäten/Tabellen besteht:

class AccessRight < ActiveRecord::Base
  belongs_to :consolvix_module
  has_and_belongs_to_many :system_users,
                          :join_table => 'user_access_rights',
                          :foreign_key => 'access_right_id',
                          :association_foreign_key => 'user_id'
  has_and_belongs_to_many :system_groups,
                          :join_table => 'group_access_rights',
                          :association_foreign_key => 'access_right_id',
                          :foreign_key => 'group_id'
end
class UserAccessRight < ActiveRecord::Base
  belongs_to :system_user, :foreign_key => 'user_id'
  has_one :access_right
end
usw.

December 19, 2007

Faktensammelsurium

Der heutige Tag hatte es mal wieder in sich. Erst eine mühselige Reise aus .nl (familiäre Gründe...) zurück, die doppelt so lange dauerte als eigentlich nötig gewesen wäre, dann die Feststellung dass ich abgesehen von der Diplomarbeit auch noch andere Arbeitsberge zu bewältigen habe, dann ein Bug der sich einfach nicht lokalisieren geschweige denn beheben ließ, und dann noch ein durch ein fehlgeschlagendes glibc-Update unbrauchbar gewordenes Betriebssystem auf meinem Hostingserver. Während nun also das 4 Stunden alte Backup über die DSL-Leitung gequetscht wird, kann ich mir ja ein paar Minuten des Zusammenfassens meines Arbeitsfortschrittes widmen.

Erste Feststellung: Ich hatte gehofft, die während der letzten beiden Tage weiter zu kommen -- weiter, als ich jetzt gekommen bin. Aber das ist ja eh immer dasselbe...

Zweite Feststellung: Nach einem Gespräch mit Prof. Klingspor letzte Woche habe ich nun eine relativ kontrastreiche, wenn auch noch etwas unfokussierte Vorstellung davon, wie ich meine Arbeit strukturieren werde und was nicht reinkommen wird.

Dritte Feststellung: Ich werde voraussichtlich in drei Wochen so weit sein, dass ich nur noch an der Arbeit schreiben muss. Natürlich funktioniert noch nicht alles so wie es funktionieren soll, aber ich behaupte, die wichtigsten Aspekte der "Kern-Infrastruktur" mittlerweile berücksichtigt zu haben -- mindestens theoretisch, und eine Diplomarbeit ist nunmal auch eine Menge Theorie. Vom Umfang des produzierten Codes her bin ich schon lange weit genug, eigentlich.

Ich hoffe, in einem Monat eine Consolvix-Version zu haben, die sich zumindest für den Admin rudimentär produktiv einsetzen lässt -- und das gleich auf einem niegelnagelneuen Server, den zu bauen es allerdings auch noch gilt...

Doch nun geht's weiter mit dem Wiederherstellen des o.g. Servers, rsync hat seinen Job offensichtlich getan.

NACHTRAG: Lang lebe rsync, der Server geht wieder. Der rest bleibt beim alten.

December 31, 2007

Nichts Weltbewegendes...

Ein Jahr neigt sich dem Ende entgegen,
ein weiteres lässt nicht lange warten,
eine neue Chance, die Welt zu bewegen,
auf neue, noch nicht erprobte Arten ;-)

Allen Lesern dieser Zeile wünsche ich ein angenehmes Jahr 0x7D8, Gesundheit, Freude am Dasein, und dass ihr im neuen Jahr all das schafft, was ihr letztes Jahr nicht geschafft habt -- und noch ein Wenig mehr :)

Möge der Code mit euch sein!

neujahreskarte.png

January 14, 2008

Neue Hardware braucht der Mensch

Neues Jahr, neuer Rechner, so dachte ich mir. Endlich war es dann letzte Woche auch so weit, dass hier ein Paket nach dem anderen eintrudelte und sich im Laufe eines Nachmittags ein neuer Rechner zusammenfügte. Nach vielen Jahren erfüllte sich endlich mal wieder ein kleiner Traum, nämlich die von schneller Hardware und t<\epsilon Reaktionszeit für flüssiges Arbeiten. Man mag staunen, aber ein AMD Athlon mit 1200MHz und 1GB Speicher ist nicht mehr ausreichend, um mit KDE flott Webentwicklung betreiben zu können. Nun steht hier also ein schöner Core2Quad mit 6GB Speicher und der rennt mir sozusagen davon -- sogar mit transparenten Fenstern und Schatten und allem trallala :-). Der Bootvorgang dauert keine Minute und 4-6 Sekunden nach dem Login ist KDE vollständig geladen. WOW!

Aber es hat leider mehr als drei Tage gedauert, bis dieses System mal vernünftig lief (und einen Tag bis sich überhaupt erstmal ein Installationssystem booten ließ). Ich sage nur: 64Bit sind so viel Fluch wie Segen. Von allen Live-CDs die Philipp und ich durchprobiert haben (Debian, Knoppix, Ububntu, SuSE, Sidux) wollten gerade mal zwei starten und bei keinem funktionierten die Onboard-LAN-Ports -- Stichwort nVidia nForce. Das forcedeth-Modul was zum Betrieb der Ethernetports nötig ist, wurde zwar unter Sidux geladen, auch ließen sich beide Ports einrichten und ansteuern, aber tatsächlich wurde nichts über die Leitung geschickt. Ein Glück dass hier noch eine alte 3Com-Karte herumschwirrte, mit der bin ich jetzt online. Schließlich gelang es, über Philipps Mac eine 64-bit Debian-Netinst-CD zu laden (Hier der Hinweis an potentielle Nachahmer: ia64 ist NICHT, wie es der Name nahe legt und ich es erst vermutete, die Archikektur eines Intel Core2Duo/Quad -- es SOLLTE i386 gehen (ging dann auch, nachdem im BIOS gerumgedreht wurde, ganz komisch alles g), richtig ist aber amd64, auch wenn's ein Intel-Prozi ist. Damit lief jedenfalls der Rechner ziemlich bald und mit einem selbst kompilierten Kernel (t_compile < 30 min) ohne die ganzen optionalen Komponenten rennt er gar.

Irgendwie muss man aber die überschüssige Rechenleistung auch wieder los werden, und somit erachte ich es als selbstverständlich, die als RAID1 geschalteten Platten zu verschlüsseln. der neue Debian Sid-Installer macht es gar möglich, schon bei der Installation ein Software-RAID und Verschlüsselung mit allem drum und dran einzurichten. Das Problem ist nur: es funktioniert nicht so wie man erwartet. Der Installer ermöglichte es mir problemlos, /dev/sda1 und /dev/sdb1 zu einem RAID1-Verbund zusammenzufassen, das entstandene /dev/md0 zu verschlüsseln und darauf wiederum zwei Partitionen (/ und swap) anzulegen. Das System ließ sich absolut einwandfrei installieren. Nur leider konnte das System danach nicht booten, da der Device-Mapper, der für das mounten verschlüsselter Partitionen zuständig ist, noch nicht geladen sein kann, bevor der Kernel das RAID zusammengefügt hat, und das RAID nicht zusammengefügt werden kann, bevor / gemountet ist -- jedenfalls ist das ein bekannter und gemeldeter Bug und ich vermute stark, dass das nächste Release von Debian diese Möglichkeit nicht mehr im Installer eingebaut haben wird. Jedenfalls liegt / jetzt weiterhin unverschlüsselt auf der Platte, aber die restlichen Dateisysteme sind allesamt mittels dm-crypt verschlüsselt. Ich kann nicht behaupten, dass dadurch wie Performanz des System in irgendwelcher Weise beeinträchtigt wird.

So, doch nun: auf ins (endlich wieder) produktive Arbeiten! Nebenbei kann ja mal KDE 4 compilen, bin gespannt wie lange das dauert (Qt alleine brauchte 15 min mit 10 Threads)...

January 16, 2008

Neues Aussehen

Wie man sieht ist diese Nacht nicht ganz spurlos an diesem Blog vorbeigezogen. Ich hoffe das neue Layout gefällt dem einen oder anderen. Anregungen. Kritik und scharfe Munition nehme ich gerne entgegen, dafür gibt's ja die praktische Kommentierfunktion.

Und: huch, wer hätte das gesacht, auch ich kann kurze Posts schreiben! ;-)

March 24, 2008

Eine Sorge weniger! -- und die nächste folgt sogleich.

Die Zeit des Schweigens ist vorbei, die Diplomarbeit ist abgegeben und nun ist wieder viel Zeit für anderes. Natürlich wird die Entwicklung von Consolvix nicht stillstehen und genau genommen hat sich in der Hinsicht seit letzten Mittwoch auch wieder etwas getan. Dieses "etwas" hat hauptsächlich mit der Benutzeroberfläche zu tun, damit am Freitag im Kolloquium auch alle was Schönes zu sehen bekommen werden ;-)

Des Weiteren hab ich endlich mal Zeit gefunden, zusammen mit Philipp den endlich eingetroffenen Server aufzusetzen. Die Kiste ist handlich und fast schon schnuckelig:

Doch wehe, man schaltet das Gerät ein -- die dann aufheulenden Lüfter lassen ein gewisses Luftalarm-Ambiente aufkommen... Dafür ist die Kiste mit ihrem 1.8 GHz C2D und 4GB RAM ganz schön flott und mittlerweile laufen auch schon ein paar virtuelle Maschinen unter Xen darauf. Allerdings hat es die Kombination Xen + Netzwerk in sich, ich hoffe dass wir die auftretenden Probleme bald gelöst bekommen (dazu vielleicht später mehr).

Und ja, richtig geraten: Consolvix soll dereinst genau diesen Server administrierbar machen. Entsprechend wird eine der nächsten Erweiterungen von Consolvix eine Oberfläche für die ganzen xm-Scripte und Xen-Tools-Befehle sein, damit Kunden dann auch ihre eigenen VMs hochfahren, neu starten etc. können.

Stay tuned!

May 15, 2008

Daten vernichten: wenn, dann richtig!

Wie es sicht gehört, hatte die Festplatte meines alten Notebooks eine halbe Woche vor Ankunft des neuen ihren Geist aufgegeben. Glücklicherweise konnte ich die wichtigen Partitionen vollständig retten.

Vorgestern abend wollte ich dann doch noch einmal versuchen, durch anlegen einer neuen Partition und vorherigem Bad-Block-suchen die Platte doch noch als externes Laufwerk brauchbar zu machen. Erste Aktion ist bei sowas dann immer ein shred /dev/sdb. Als Shred nach 24 Stunden immer noch nicht fertig war, die Platte 25mal mit Zufallszahlen zu überschreiben, brach ich eben ab und legte eine neue Partition mit Ext3 an. Als erstes folgte sodann ein fsck.ext3 -cc -C 0 -f -p /dev/sdb1, was aber nach 10 Stunden Lauf noch immer nicht die mit -C 0 angeforderte Fortschrittsanzeige hergab. Ein Blick auf die Systemkonsole ergab dafür ein im Klack-Rhythmus der Platte ausgegebenes "reset high speed USB device using ehci_hcd and address 6". Mit anderen Worten: nicht nur die kaputten Sektoren waren ein Problem.

Wie entsorgt man also eine Platte? Shred schien auf Grund eines Hardwaredefektes nicht weiter zu kommen. Also musste die Datenhaltige Schicht der Platte auf anderem Wege zerstört werden. Aufschrauben und zerkratzen? Das wäre zu viel arbeit gewesen und hätte immer noch zu große Bereiche lesbar gelassen. Platten ausbauen und in die Mikrowelle legen? Was bei CDs sehr effektiv ist, möchte ich mit einer Festpatte lieber nicht probieren. Die ganze Platte einfach Schwefelsäure eintauchen? Leider nicht zur Hand.

Letzten Endes bliebt dann nur noch eines: der Hammer. Erstaunlicherweise ist dieses Instrument äußerst effektiv, denn die Platte besteht nicht wie bei Desktop-Platten aus Aluminium, sondern aus Glas. Also ein kräftiger Schlag und die Daten sind sicher :) -- Natürlich sollte man dann dennoch das Gehäuse aufschrauben um die Splitter über diverse Mülleimer zu verteilen, denn so lange die gesammelt in dem Gehäuse liegen, ist das für eventuelle Datenschschnüffler nichts weiter als ein tolles 1001-teiliges Puzzle :)

May 7, 2009

Buttons oder Links?

vs. Delete

Wenn wir alle vorgeben, das Prinzip von REST verstanden zu haben, warum taucht dann immer wieder die Frage auf, warum (besonders zu Zeiten von Javascript, Ajax und Web 2.0) Links als Verweise auf Aktionen ("lösche Blogeintrag", "sende Formular ab"...) so schlimm seien.

Dabei ist es doch nur eine Hilfe für den Benutzer UND den Entwickler:

  • Links kann man (noch!) ohne Gefahr zu laufen, unerwünschte Nebeneffekte zu erzeugen, folgen. In REST-Sprech: Links verweisen auf Repräsentationen von Ressourcen.
  • Buttons verweisen auf Aktionen, die per definitionem (?) Nebeneffekte aufweisen. In REST-Sprech: Ihre Betätigung leitet Veränderungen an Ressourcen ein.

Will ich einem Benutzer also zeigen, was er sich alles ansehen kann, so biete ich ihm eine Liste von Links an. Will ich ihm hingegen die Möglichkeiten zur Veränderung der dargestellten Ressource(n) anbieten, so biete ich ihm eine Sammlung an Buttons.

Dieses Prinzip konsequent angewendet nimmt dem Entwickler m.E. sowohl im UI-Design als auch bei der Umsetzung einer RESTful Webanwendung (Denk-)Arbeit ab. Dem Benutzer der Anwendung macht es die Interpretation der UI ebenfalls erheblich leichter.

Was die Implementierung selber angeht, also ob Buttons nun Formulare abschicken oder ob die Aktionen via JavaScript eingeleitet werden, ist bei dieser Betrachtung erst einmal unerheblich. Ersteres ist der Accessibility von Webanweniungen natürlich bedeutend zuträglicher, zweiteres ist für "flashy" Web 2.0-Anwendungen wohl das Mittel der Wahl. Den Königsweg zu beschreiten und die Formulare per "unobtrusive Javascript" nach dem Laden der HTML-Seite zu verändern, um sie durch Ajax-getriebenes Verhalten zu ersetzen, ist aber auch kein bedeutender Mehraufwand (der sich aber auszahlt).

Leider wird o.g. Verhalten durch gewisse Standardmethoden in Ruby on Rails nicht unbedingt gefördert: link_to_remote setzt per default einen POST-Request ab, link_to_function existiert und button_to_remote existiert erst seit Rails 2.0 oder 2.1.

Sieht das jemand anders? Was sind dafür die Gründe? Diskussionsbeiträge sind willkommen!

Anmerkungen zu Michaels Kommentar (Danke dafür!): Ich gebe dier zu 100% recht, dass einen die richtige technische Lösung nicht davon entbindet, das Interface-Design derart zu gestalten, dass der Benutzer klar sieht wo er ohne Nachzudenken hinklicken darf und wo Vorsicht angebracht ist. Jedoch führt meines Erachtens die o.g. Regel, konsequent umgesetzt, automatisch zu besserem Interfacedesign: einfach nur deswegen, weil man eine einfache Regel umsetzt, an die sich der Benutzer gewöhnen kann. Siehe dazu auch die immer wieder geführte Diskussion, ob in einem Dialog der mit einem [OK] und einem [Abbrechen]-Button [OK] links oder rechts von [Abbrechen] angebracht werden sollte: es spielt keine Rolle, Hauptsache man wendet ein einziges Schema konsequent an.

Ich behaupte jedenfalls, dass es keinem Entwickler weh tut, konsequent Buttons für Aktionen und Links für "Ansichten" zu verwenden. Spätestens seit CSS 2.0 lassen sich beide ohnehin beliebig stylen. Und dann gibt's ja noch die Textbrowser... (nein, die sind beileibe nicht tot ;-))

June 26, 2009

Good old Legacy Systems (tm)

Da will man einfach nur eine Wegbeschreibung ausdrucken. Doch da stellt man fest, dass der Drucker ja nur einen Parallelport hat, das Notebook aber nicht. Zu neu. Der Arbeitsrechner... dito, zu neu. Aber ganz unten im Schrank steht ja noch ein alter Rechner, der hat sowas. Ist ja auch eigentlich der Printserver. Aber dieser wiederum hat ein Netzwerkproblem, will heißen: Hänger und Segfaults bei Netzwerkoperationen, keine Ahnung warum. Kernelupdate? ohne Netzwerk schwierig. Live-CD? Gute Idee, hätte die Kiste denn ein Laufwerk eingebaut -- lang lebe LVM über 5 eingebaute Festplatten, einfach eine herausnehmen ist eher als Experiment anzusehen. USB-Stick + Live-System + .....? Ach vergiss es einfach.

Good old Legacy System (tm): Papier und Stift. Funktioniert immer. Wer braucht schon Mainframes, SOA und RoR ;)

March 6, 2010

Wenn MySQL mal gar nicht installieren will...

...oder Apache nicht auf localhost horchen möchte... ...oder Ejabberd sich nicht nach localhost connecten mag... ...oder Dienst XYZ nicht auf localhost ... will...

dann schau mal nach ob das loopback-device überhaupt "up" ist!

und wenn nicht: ifup lo

und dann mal nachsehen ob in /etc/network/interfaces vielleicht aus Versehen die Zeile mit auto lo auskommentiert ist.

Notitz an mich selbst: Netzwerkdienste setzen eine korrekte Netzwerkkonfiguration voraus. Wer diese Einstellungen zuerst überprüft, erspart sich womöglich einen Arbeitstag mit sinnloser Frustration.