Auf der OpenRheinRuhr (Messe mit Kongress rund um das Thema “Freie Software”) habe ich meinen ersten öffentlichen Vortrag gehalten. Dazu habe ich das Thema “Open Source Workflow für Webentwickler” gewählt und mit dem doch sehr einprägsamen Titel “DO EPIC SHIT!” angekündigt.
Gegen alle Erwartungen bin ich pünklich angekommen, auch wenn die Bahn (GDL) gestreikt hat. Also hatte ich noch etwas Zeit, um noch einen `git commit` vorzubereiten, welcher dann live in dem Vortrag automatisch via Jenkins getestet und deployed werden konnte.
Und auch wenn ich den Vortrag nicht so beenden konnte wie ursprünglich geplant, da ich die Zeit irgendwie falsch eingeteilt hatte, hoffe ich trotzdem einiges nützliches gezeigt zu haben. Beim nächsten mal sollte ich dies wohl vor “echtem” Publikum testen, da die Zeit dann anscheinend anders verläuft. ;) Einige Erklärungen und Beispiele von der Demo-Webseite musste ich daher unterschlagen und reiche diese Infos im folgenden nach:
PS: Ich werde heute wieder auf der OpenRheinRuhr sein, da auch das heutige Programm sehr interessante Vorträge und Workshops biete. z.B.: Docker, SaltStack, ImageMagick. Gegebenenfalls sieht man sich dort :) wünsche allen Beteiligten viel Spaß!
Alle alten Version der Unix-Shell “bash” enthalten eine kritische Sicherheitslücke (CVE-2014-6271), so dass man Befehle z.B. über CGI-Skripte oder via DHCP ausführen kann. Ggf. benötigt nun dein Handy (z.B. CyanogenMod), dein Router oder deinen Mac / Linux / BSD und so weiter Software-Updates.
Teste dein System:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test
Nachdem man die aktuellen Updates eingespielt hat (z.B. via aptitude) dann sollte die Ausgabe folgendermaßen aussehen.
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
bash: warning: x: ignoring function definition attempt bash: error importing function definition for `x’ this is a test
Jede neue Bash-Instanz wird nun beim Start die Funktion “foo” registrieren, so dass man diese Ausführen kann. Wenn man nun jedoch eine Funktion exportiert, führt die Bash den nächsten Befehl ebenfalls aus, da der String der “() {” nicht korrekt geparst wird. Damit können wir nun Befehle ausführen, indem wir bestimmte Strings (Funktionsdefinitionen) an z.B. ein CGI-Skript übergeben.
Heute möchte ich ein Web-Tool zur Organisation von Projekten vorstellen: https://trello.com
Trello nutzt “Listen”, welche sich auf sogenannten “Boards” befinden, um verschiedene Kategorien in einem Projekt abzubilden. Diese Listen beinhalten “Cards”, welche wiederum verschiedene Elemente (Checklisten, Bilder, E-Mails, Kommentare, etc.) enthalten können. Dabei empfehle ich das Tool einfach mal auszuprobieren, bevor man sich diesen und weitere Texte durchliest.
Als Live-Beispiel möchte ich meinen Blog nutzen. Ich versuche meine Blog-Posts nun via Trello & Google-Docs zu organisieren. Dazu habe ich einige Kategorien (Blog-Ideen, Blog-Query, Blog-Artikel und Done) angelegt und bereits einige Themen-Vorschläge eingefügt.
Weitere Überlegungen
Momentan überlege ich, wie man dieses grandiose Tool auch in der täglichen Arbeit einsetzten kann. Dazu würde ich zunächst (ganz noch Projektgröße) verschiedene Trello-Boards anlegen. Dabei kann man “Boards” auch in bestimmten “Organisations” anlegen, was ggf. eine bessere Übersichtlichkeit liefert.
z.B. einige fiktive Organisation für meine private Webseite: http://moelleken.org
Dabei können die verschiedenen Tasks zur nächsten Projektphase weitergereicht werden.
Planung: erste Ideen
Planung: konkrete Beschreibungen und Vorstellungen (hier sollten nach externe Dokumente / Bilder etc zur Beschreibung beigefügt werden)
Development: Bugs, Refactoring-Maßnahmen und neue Features können z.B. in einem Team Meeting in diese Kategorie verschoben und Priorisiert werden.
Development: jeder im Team kann sehen, wer welches Feature, Bug etc. bearbeitet (dies Übersicht kann man mit farblichen “Labels” noch verbessern)
Am Ende der Woche kann man ein Fazit ziehen und ggf. im Team vorstellen, welche Tasks umgesetzt wurden, dies förder die Motivation, bringt Strukturen in das Projekt und verteilt das Wissen nebenbei noch auf verschiedene Mitarbeitet.
Fazit
Noch kann ich nicht sagen, ob diese Überlegungen auch im täglichen “Doing” einsetzbar oder von Vorteil sind. Daher folgt in den nächsten Tagen / Wochen ein weitere Blog-Post, welcher soeben unter “https://trello.com/b/SgOH9gbE/it-blog-suckup-de” geplant wird. ;)
Mein Virtueller Server von Strato hat diese Woche erhebliche Probleme. Angefangen hat dies bereites letzte Woche, daher habe ich am 22.06.2014 eine Support-Anfrage mit der Bitte um Prüfung geschrieben, jedoch bisher nur die Antwort erhalten, dass ein überlastetet Hostsystem ggf. zu den Problemen führt und dass dies momentan geprüft wird.
Daher kann es zwischenzeitlich auf dieser Webseite noch zu erheblichen Ladezeiten kommen, ich bitte dies zu entschuldigen. Wenn jemand einen guten Tipp für einen neuen Hoster hat oder andere Schlüsse aus den folgenden Screenshots ziehen kann, schreibt mir dies bitte per E-Mail “lars (at) moelleken.org” oder einfach direkt hier als Kommentar, vielen dank! Mfg Lars
Falls jemand ebenfalls Performance-Probleme mit seinem Linux-Server hat, sollte man sich einmal folgenden aktualisierten Blog-Post anschauen:
Sehr geehrter Herr Moelleken,
ich möchte Sie mit dieser E-Mail über den Bearbeitungsstand Ihres Troubleticket informieren.
Sie hatten von Beeinträchtigungen bezüglich der Performance Ihres STRATO Virtual Server Linux berichtet.
Vorab bitte ich die Ihnen dadurch entstandenen Unannehmlichkeiten zu entschuldigen.
Erfreulicherweise kann ich Ihnen nun mitteilen, dass die Einschränkungen an Ihrem Server mittlerweile vollständig behoben wurden. Ihr Server ist damit wieder in vollständigem Umfang und mit gewohnter Performance zu erreichen.
Ich wünsche Ihnen weiterhin viel Erfolg mit Ihrem STRATO Server und stehe auch weiterhin bei Rückfragen für Sie bereit.
Gist ist ein schneller Weg, um Code-Beispiele / Konfigurationen / etc. mit anderen zu teilen oder für sich selber aufzubewahren. Jedes “gist” wird dabei als eigenes git-Repository angelegt, so werden diese automatisch versioniert und andere können davon einen Fork erstellen.
Leider gibt es keine Tags für die erstellten “gists”, so dass man sich ein System überlegen muss, wie man die entsprechenden Code-Beispiele wiederfindet z.B.:
– entsprechend aussagekräftige Dateinamen verwenden
– den Type der Datei immer korrekt angeben
– Tags in der Beschreibung hinzufügen #Tag1, #Tag2
– Beschreibung kurz halten
1.) meine “gists”
gist.suckup.de: Diese Webseite habe ich erstellt, um einen schnellen Überblick über meine gists zu erhalten, außerdem habe ich einige Code-Playground und andere Infos hinzugefügt.
2.) Gists organisieren und sammeln
www.gistboxapp.com: Auf dieser Webseite kann man den gists richtige Tags zuordnen und diese somit besser organisieren. Jedoch kann man diese Tags nicht via github / api abrufen, so dass diese nicht in z.B. der IDE angezeigt werden. Außerdem bietet die Webseite eine Chome-Addon, mit welchem man sehr einfach Code-Beispiele von anderen Webseiten als “gist” abspeichern kann.
2.) IDE-Integration
Alle großen IDEs und Texteditoren haben git / gists bereits integriert oder bieten zumindest Plugins, um z.B. selektieren Quelltext direkt als gist abzuspeichern oder gists im Quelltext einzufügen.
– PhpStorm / IntelliJ (bereits integriert)
– Eclpise (Plugin: “EGit”)
– Sublime Text (Plugin: “gist”)
– vim (Plugin: “gist-vim”)
Vorwort: Ich arbeite in Düsseldorf bei der “menadwork GmbH” als Webentwickler und vor einigen Monaten habe ich mein Betriebssystem auf Linux (Debian) umgestellt, daher musste ich meine Toolchain / Programmierumgebung neu einrichten. Vorweg kann ich schon mal verraten, dass man sehr gut und effizient damit arbeiten kann. Nur drei, vier Programme (IE, Photoshop, Outlook, MS Office) musste ich per VIrtualBox (Win7) virtualisieren.
Im folgenden wird eine Toolchain / Programmierumgebung für Webprojekte (PHP, HTML, CSS, Sass, JavaScript) eingerichtet. Diese Anleitung werden ich im parallel für Windows und Linux beschreiben.
Als erstes Installieren / Konfigurieren wir “git” zur Versionskontrolle und um Quellcode von github.com laden zu können. Auch wenn du mit wenigen Leuten oder alleine an einem Projekt arbeitest ist der Einsatz von “git” sehr empfehlenswert. Da man so auch noch nach Wochen / Monaten nachvollziehen kann, warum man welche Änderung gemacht hat und diese zudem ganz einfach rückgängig machen kann.
Es wird wahrscheinlich zu Probleme (Änderung in jeder Zeile der gespeicherten Datei) bei der Zusammenarbeit von “git unter Windows” & “git unter Linux (Mac)” geben, da diese ein anderes “line ending” haben (\n bzw. \r\n). – http://git-scm.com/book/ch7-1.html#Formatting-and-Whitespace
# Windows – Diese wandelt “LF” (\n) in “CRLF” (\r\n) Endungen um, wenn der Befehl “git pull” ausgeführt wird und wandelt dies beim “git commit” wieder zurück
git config --global core.autocrlf true
# Linux (Mac) – Diese wandelt “CRLF” (\r\n) in “LF” (\n) Endungen um, wenn der Befehl “git commit” ausgeführt wird
git config --global core.autocrlf input
-> somit sind die Dateien auf dem Repository (z.B.: github oder gitlab) und in der lokalen git-history immer mit “LF” (\n) codiert.
1.2.2) “push”
git config --global push.default simple
-> der Befehl “git push” schiebt nur commits von der aktuellen “branch” zum Repository (branch mit dem selben Namen)
git config --global color.diff auto
git config --global color.ui auto
git config --global color.status auto
git config --global color.branch auto
2.) Webserver + PHP
Als Webserver installieren wir uns lokal den “Apache”-Webserver, da diese bei vielen Web-Projekten später auch im Live-System zum Einsatz kommt und wir bereits lokal Dinge wie “.htaccess“-Umleitungen etc. testen kann.
Wenn man unter Linux bzw. Mac arbeitet, sollte man den Webserver bzw. PHP so konfigurieren, dass die entsprechenden PHP-Skript-Prozesse mit dem User des Webs laufen. Dies kann man z.B. via suphp oder via php-fpm bewerkstelligen. (Quick & Dirty: die Skripte mit dem eigenen User laufen lassen und das htdocs-Verzeichnis in das eigene Home-Verzeichnis legen)
Unter Windows braucht man sich an dieser Stelle noch keine Gedanken über User-Rechte machen, jedoch spätestens wenn man das Projekte zum ersten mal auf dem Server deployed muss man diesen Schritt auf dem Server wiederholen.
Tipp: hier findet man viele Anleitungen für die Installation von Linux-Servern -> http://www.howtoforge.de/
Unter Windows (XAMPP) ist xDebug bereits vorinstalliert und muss nur noch in der “php.ini”-Datei aktiviert werden. Unter Linux befinden sich die Konfigurationen für PHP-Erweiterungen unter “/etc/php5/config.d/”.
z.B.: für Windows, wenn xampp unter “D:\xampp\” installiert ist
Als nächsten großen Schritt werden wir uns nun eine IDE installieren hier würde ich für größere PHP-Projekte “Netbeans” bzw. “PhpStorm” empfehlen, obwohl “Sublime Text” auch seine Stärken hat und jeder der das Programm noch nicht ausprobiert hat, sollte es einmal testen!!!
3.1) Konfiguration
3.1.1) Netbeans
3.1.1.1) PHPUnit
Unter den Tools -> Options -> PHP -> PHPUnit-> kann man automatisch nach dem bereits installiertem PHPUnit und dem Skeleton-Generator suchen lassen und anschließend aus jeder PHP-Klasse ein PHPUnit-Template erstellen lassen.
3.1.1.2) xDebug
Auch dieses Tool müssen wir einmal konfigurieren unter Tools -> Options -> PHP -> Debugging
Tipp: Wir können unser PHP-Projekt nun nicht nur Debuggen, sondern auch Profilen. Indem wir den Parameter “XDEBUG_PROFILE=1” per GET oder POST übermitteln und den Output anschließend z.B.: via KCachegrind visualisieren lassen.
Auf der Webseite Packagist.org findet man alle Projekte, welche man ohne weitere Anpassungen in seinem Projekt verwenden kann und man kann seine eigenen Projekte einstellen (oder auch eigene Repositories verwenden, falls man diese nicht öffentlich machen will). z.B.: mein Profil -> packagist.org/users/voku/
4.3) Konfiguration
Man lege eine Datei mit dem Namen “composer.json” an und sucht sich seine zu installieren Bibliotheken aus, anschließend ein “composer install –optimize-autoloader” bzw. “composer update” und schon kann man die Bibliotheken verwenden (include von “vendor/composer/autoload.php” nicht vergessen).
5.) Ruby && Node.js
Bower ist auch ein Manager für externe Bibliotheken, jedoch auf JavaScript, jQuery, SASS, LESS, CSS etc. (A package manager for the web) ausgerichtet. Für die Installation muss man auch Ruby und Node.js installieren, jedoch benötigen noch andere wichtige Tools in unserer Toolchain diese Programme, daher folgt nun zuerst die kurze Installation unter Linux und die etwas ausführlichere für Windows. :P
Nachdem wir Ruby Installiert haben müssen wir noch das “DevKit” für Ruby herunterladen und in das Verzeichnis in welchem du Ruby installiert hat in das Unterverzeichnis “\DevKit” entpacken. – z.B.: “D:\xampp\Ruby200-x64\DevKit” und dann folgenden Befehl auf der Kommandozeile (ggf. muss man ruby noch zum PATH hinzufügen oder Windows mal wieder neu-starten)
ruby dk.rb init
Anschließend müssen wir die Datei “dk.rb” noch wie folgt anpassen:
# This configuration file contains the absolute path locations of all
# installed Rubies to be enhanced to work with the DevKit. This config
# file is generated by the 'ruby dk.rb init' step and may be modified
# before running the 'ruby dk.rb install' step. To include any installed
# Rubies that were not automagically discovered, simply add a line below
# the triple hyphens with the absolute path to the Ruby root directory.
#
# Example:
#
# ---
# - C:/ruby19trunk
# - C:/ruby192dev
#
---
- D:/xampp/Ruby200-x64
… und können die Installation mit folgenden Befehlen abschließen:
ruby dk.rb review
ruby dk.rb install
6.) “Bower” – bower.io
Zurück zu Bower, nachdem wir nun Ruby && Node.js installiert haben, können wir nun weiter Tools sehe einfach über die Kommandozeile via npm installieren lassen.
Sass ist ein Preprocessor für CSS, so dass man Variablen, Schleifen, Funktionen etc. in CSS nutzten kann. Große Projekte wie z.B.: Bootstrap bieten Ihren Quellcode als scss-Version an. Der Code-Style unterscheidet sich nur minimal von “normalem” CSS, wobei hier normal in Anführungszeichen stehen, da man die verschiedenen CSS-Selektoren nicht zwingend verschachteln muss. Man kann auch einfach seine bestehende CSS-Datei in eine SCSS-Datei umbenennen und per “sass” kompilieren oder eine bestehen CSS-Datei (z.B.: test.css) per “sass-convert” Konvertieren.
compass ist ein Framework, welches auf sass aufbaut und dieses um CSS3-Funktionen und z.B. automatisches erstellen und aktualisieren von CSS-Sprites bietet.
8.1) Installation
gem install compass [--pre]
Tipp: wenn man noch Browser unterstützen muss, welche keine Transparenzen via CSS (opacity) können, dann sollte man sich mal “compass-rgbapng” anschauen. Damit werden automatisch Fallback-Bilder (png’s) in der entsprechenden Farbe / Transparenz erstellt und im CSS eingebaut.
8.2) Konfiguration
Wir starten indem wir folgende Datei anlegen -> “config.rb”
# Require any additional compass plugins here.
#require "rgbapng"
#add_import_path "vendor/bower/foundation/scss/"
#add_import_path "vendor/bower/normalize-scss/"
# Set this to the root of your project when deployed:
http_path = "/"
css_dir = "css"
sass_dir = "scss"
images_dir = "images"
javascripts_dir = "js"
# You can select your preferred output style here (can be overridden via the command line):
# output_style = :expanded or :nested or :compact or :compressed
output_style = :expanded
# To enable relative paths to assets via compass helper functions. Uncomment:
# relative_assets = true
# To disable debugging comments that display the original location of your selectors. Uncomment:
# line_comments = false
line_comments = true
# If you prefer the indented syntax, you might want to regenerate this
# project again passing --syntax sass, or you can uncomment this:
# preferred_syntax = :sass
# and then run:
# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
8.3) HowTo
Nachdem wir die Konfiguration angelegt und ggf. angepasst haben, wird mit dem folgendem Befehl automatisch (bei Änderungen) die entsprechende scss-Datei in eine css-Datei kompeliert.
Anstatt die entsprechenden CSS3-Funktionen von compass zu verwernden, erscheint es mir einfacher und Sinnvoller entsprechende Vendor-Prefixes automatisch zu erstellen und genau das macht dieses Tool! Man kann es entweder selber aufrufen, in compass oder via “grunt” (dazu kommen wir gleich) integrieren.
9.1) Installation
gem install autoprefixer-rails [--pre]
9.2.1) HowTo: Grunt + autoprefixer
(Auch wenn ich noch gar nicht zu grunt geschrieben habe, zeige ich schon mal wie, man dies nutzten kann.)
Als erstes wird das Plugin “grunt-autoprefixer” installiert und dann folgender Task in der Datei “Gruntfile.js” angelegt:
Folgendes in die compass-Konfiguration “config.rb” einfügen:
require 'autoprefixer-rails'
on_stylesheet_saved do |file|
css = File.read(file)
File.open(file, 'w') do |io|
io << AutoprefixerRails.process(css)
end
end
Grunt ist ein Task-Runner, dass heißt das Programme automatisch z.B. nach dem Speichern einer Datei ausgeführt werden können. Falls jemand das Tool noch nicht im Einsatz hat -> einfach mal Testen!!! Erst dieses Tool verknüpft alle hier vorgestellten Tools zu einer “Toolchain”. Und man ist nur noch einen Schritt davon entfernt automatisierte Tests im Browser, Live-Reload im Brower etc. zu nutzen.
Entweder man legt sich selber ein entsprechendes “Gruntfile.js” (Konfiguration) und “package.json”- Datei an oder man nutzt den Befehl:
grunt-init TEMPLATE_NAME
10.3) Video
Wie im Video erklärt wird, kann man gunt, nachdem man dies einstellt hat, mit dem Befehl “grunt watch” auf Änderungen von beliebigen Dateien, beliebige Tasks ausführen lasse. In meinem Fall lasse ich z.B. bei Änderungen von “*.scss”-Dateien diese via compass in CSS compilieren, anschließend per “autoprefixer” überarbeiten, minifizieren und zum Schluss wird automatisch ein reload von dem entsprechendem Brower-Tab durchgeführt. :)
Dann habe ich noch einige URLs aus meinen Twitter-Listen zusammenkopiert und schon hatte ich so viele Informationen, dass man Stunden benötigen würde, um die Webseiten einzeln zu besuchen und sich die neusten Infos zusammenzustellen.
Auch wenn die Doku von “Yahoo Pipes” gut ist und es sogar einige Video-HowTo’s gibt, ist das meiste selbsterklärend und man kann vieles einfach ausprobieren, da man zum einen eine Debug-Konsole erhält, wenn man auf ein Element kickt und zum anderen sich viele andere Beispiele finden lassen, wo man sich die Konfiguration anschauen & kopieren kann, um diese für seinen Zweck anzupassen. z.B.: http://pipes.yahoo.com/pipes/pipe.info?_id=f537df8f186dafe15ee88fa01ec110c2 -> View Source & Clone
Der Begriff „Bootvorgang“ bezeichnet das Starten des Rechners, das Auswählen eines Betriebssystems und das Starten desselben. Der Begriff „Booten“ geht auf das englische Wort „bootstrap – Stiefelanzieher“ zurück.
Der Bootvorgang wird durch Reset initiiert. Reset tritt Beispielsweise auf, wenn der Strom eingeschaltet wird, die damit zusammenhängenden Vorgänge werden in Kapitel 2 beschrieben. Im Laufe des Bootvorganges gibt es später drei verschiedene Möglichkeiten, das Betriebssystem zu finden und zu laden – abhängig davon, wo sich der Code des Betriebssystems befindet:
1.) Der Code befindet sich auf einer Diskette, auf die direkt zugegriffen werden kann.
2.) Der Code befindet sich auf einer Festplatte.
Und das darauf folgende starten des Betriebssystems.
2.) Start
2.1) Reset
Beim Einschalten des Stromes wird „Reset“ ausgelöst, dabei handelt es sich um einen Hardwareinterrupt. Interrupts treten dann auf, wenn ein korrekter Programmablauf nicht mehr möglich oder wünschenswert ist. Alle Interrupts haben eine Priorität. Treten also mehrere Interrupts gleichzeitig auf, so werden sie nach Priorität geordnet ausgeführt, es sei denn, der Interrupt mit der höheren Priorität stoppt die weitere Programmausführung.
„Reset“ ist der Interrupt mit der höchsten Priorität: Er wird in jedem Fall ausgeführt. Das Reset Signal kann auch ausgelöst werden, ohne dass die Stromzufuhr unterbrochen wird. Dieser Fall wird als Warmstart bezeichnet. Den durch den Beginn der Stromzufuhr initiierten Start nennt man Kaltstart.
2.2) ROM
ROM (Read Only Memory) dabei handelt es sich um einen Speicherbaustein, aus dem nur Daten gelesen, in den aber keine Daten geschrieben werden können. Die gespeicherten Daten werden
bereits bei der Produktion der Bausteine festgelegt und können im Nachhinein nicht mehr oder nur mit speziellen Geräten verändert werden. Das ROM verliert seine Daten nicht, wenn keine Stromzufuhr angeschlossen ist. Sobald Reset gegeben wurde, wird die Hardwareinterrupt gestartet, wodurch prozessorinterne Register auf prozessorspezifische Startwerte gesetzt werden und versetzt so den gesamten Prozessor in den Startzustand. In der Regel wird anschließend der Inhalt des ROM in den RAM (Arbeitsspeicher) gespiegelt, da der Zugriff auf Speicherinhalte dort schneller gewährt werden kann. Zuletzt wird der Befehlszähler (Program Counter) auf den Beginn dieses Codes gesetzt, dadurch wird gewährleistet, dass der im ROM befindliche Code als erstes und ohne Voreinstellungen ausgeführt wird.
2.3) BIOS
Im ROM steht der Code des Basic Input Output Systems (BIOS). Dies ist ein Programm, das die Hardware überprüft und einfachste Hardwareunterstützung zur Verfügung stellt. Außerdem hat das BIOS die Aufgabe, den Start eines Betriebssystems zu ermöglichen und zu initiieren. Das BIOS führt nach seinem Start zunächst Hardwaretests durch, diese Tests werden „Power On Self Tests“ (POST) genannt. Während dieser Tests wird nach Hardware gesucht und gefundene Hardware überprüft, außerdem sucht das BIOS nach passenden Treibern. Zudem können durch diese Tests Fehler (z.B. defekte Festplatte) schneller erkannt werden.
Der POST lässt sich in einzelne Schritte einteilen. Die folgenden Schritte sind Teil jedes POST:
1. Überprüfung der Funktionsfähigkeit der CPU (bei Multiprozessor-Systemen: der ersten CPU)
2. Überprüfung der CPU-nahen Bausteine
3. Überprüfung des CMOS-RAM (Prüfsummen-Bildung)
4. Überprüfung des CPU-nahen Cache-Speichers
5. Überprüfung der ersten 64 Kilobyte des Arbeitsspeichers
6. Überprüfung des Grafik-Speichers und der Grafik-Ausgabe-Hardware
Danach kann die Grafik in Betrieb genommen werden. Die weiteren Tests werden daher meist auf dem Bildschirm sichtbar gemacht:
– Überprüfung des restlichen Arbeitsspeichers – dieser Schritt kann bei manchen BIOS durch einen Tastendruck übersprungen werden
– Überprüfung der Tastatur
– Überprüfung von weiterer Peripherie, u.a. Diskettenlaufwerke und Festplatten.
Anschließend lädt das BIOS veränderbare Daten z.B. Datum und Uhrzeit in einen Speicher. Diese Daten befinden sich auf einem kleinen Speicherbaustein, der durch eine Batterie konstant mit Strom versorgt wird. So können auch während eines Spannungsabfalls im restlichen System keine Daten verloren gehen. In diesem Speicher sind auch die benutzerdefinierten BIOS-Optionen gespeichert. Während des Startvorgangs kann der Benutzer in das Konfigurationsmenü gelangen, so dass man diese Dateien teilweise selber anpassen kann. Zuletzt sucht das BIOS nach einem bootfähigen Speichermedium. Ein Speichermedium kann zum Beispiel eine Festplatte, eine USB-Stick oder eine Diskette sein.
Jede Diskette ist in mehrere Sektoren unterteilt, von denen jeder einzelne 512 Byte umfasst. Eine Diskette wird genau dann als bootfähig bezeichnet, wenn…
1.) …von ihr ein vollständiges Betriebssystem geladen werden kann.
2.) …durch den auf ihr gespeicherten Code ein Betriebssystem von einer anderen Quelle geladen werden kann.
Den ersten Sektor einer bootfähigen Diskette nennt man Bootsektor.
Bei der Suche nach bootfähigen Speichermedien geht das BIOS nach einer Reihenfolge vor, die in BIOS festgelegt werden kann.
3.) Speichermedien
3.1) Booten von Diskette
Disketten sind nur in Sektoren aufgeteilt (im Gegensatz zu Festplatten). Der erste Sektor einer bootfähigen Diskette ist der Bootsektor, er ist 512 Byte lang und endet mit den 2 Byte der Magic Number. In den übrigen 510 Byte des Bootsektors befindet sich nun ein Programm, das den Start des Betriebssystems initiiert. Das eigentliche Betriebssystem befindet sich in den restlichen Sektoren der Diskette.
Das BIOS lädt (wenn die Magic Number stimmt) die ersten 510 Byte der Diskette in den Arbeitsspeicher und daraufhin wird dieser Code ausgeführt.
3.2) Booten von Festplatten
Die Grundstruktur aller Festplatten ist gleich: Metallscheiben mit magnetisierbarer Oberfläche rotieren mit hoher Geschwindigkeit in einem hermetisch abgeschlossen Gehäuse. Die Bits sind als Wechsel in der Magnetisierung der Scheibenoberfläche gespeichert. Schreib-/Leseköpfe (Engl. Heads) bewegen sich dicht über der Oberfläche nach innen und außen. Die Daten sind auf kreisförmigen Spuren abgelegt, die man auch als Tracks bezeichnet. Diese Anordnung unterscheidet sich grundlegend von der bei Schallplatten und CDs verwendeten: Hier gibt es pro Seite nur eine lange Aufzeichnungsspur in Form einer Spirale. Jede Spur einer Festplatte ist wiederum in einzelne Abschnitte aufgeteilt, den Sektoren (Engl. Sectors). Jeder Sektor fasst 512 Byte. Die Ansteuerung eines Sektors erfolgt über die Elektronik der Festplatte, der steuernde PC hat mit der Aufteilung in Sektoren nichts zu tun. Die meisten Festplatten benutzen die Ober- und Unterseite der Scheiben und verfügen über mehrere Magnetscheiben. Die Schreib-/Leseköpfe für alle Oberflächen sind als Einheit montiert, sie können sich nicht unabhängig bewegen. Deshalb liegen die Spuren auf den Plattenoberflächen exakt übereinander. Ein Satz von übereinander liegenden Spuren trägt den Namen Zylinder (Engl. Cylinder). Wie bereits erwähnt sind Festplatten in Abschnitte unterteilt, die mit den Koordinaten [cylinder, head, sector] angesprochen werden können. Zusätzlich kann eine Festplatte in Partitionen unterteilt werden.
Die im BIOS enthaltenen Treiber sind jedoch sehr stark minimiert, daher kann das BIOS nur auf begrenzten Festplattenplatz zugreifen. Die BIOS-Treiber können nur die Zylinder 0 bis 1023 der Festplatte ansprechen (8-GByte), auslesen und erkennen nicht mehr als zwei Partitionen, auf jeder der Partitionen kann ein Betriebssystem installiert werden. Die folgenden Ausführungen gelten nur für IDE-Festplatten, bei SCSI-Festplatten mit ihrem eigenen BIOS gibt es derlei Probleme nicht. Partitionen, von denen ein Betriebssystem geladen werden kann, heißen bootfähige oder aktive Partitionen.
CHS-Modus:
Bis etwa 1997 wurde für die Adressierung der Festplatte das CylinderHeadSector-Verfahren genutzt. Dadurch kann jeder 512 Byte Sektor durch die Angabe des Zylinder, des Kopfes und des Sektors genau lokalisiert werden. Die Köpfe geben dabei die Magnetscheibe und deren Seite an und die Zählung wird wie bei den Zylindern mit 0 angefangen.
(Zylinder) x (Lese-Schreibköpfe) x (Sektoren) x (Sektoren Größe)
Da heutige Festplatten wesentlich größere Kapazitäten haben, verwendet man zur Adressierung die “Linear Block Address”. Diese Adresse ist vier Byte (32Bit) lang und numeriert alle Sektoren einer Festplatte der Reihe nach durch. Dadurch ergibt sich eine maximale Gesamtkapazität von:
(Sektoren) x (Sektoren Größe)
2^32 x 512 Byte
= 2048 GByte = 2 TeraByte
Für die Verwaltung der Partitionen liegt in dem äußersten Zylinder jeder Festplatte der Master Boot Record (MBR). Der Master Boot Record enthält alle Informationen, die für den Bootvorgang benötigt werden. Er ersetzt in den nun folgenden Vorgängen das BIOS. Beim Booten von einer Festplatte wird das BIOS nicht mehr benötigt, sobald der im MBR enthaltene Code
gestartet wurde.
Jede Partition funktioniert ähnlich wie eine Diskette: sie beginnt mit einem Bootsektor, in dem sich ein Programm befindet, das vom MBR gestartet wird. Die sogenannte Master-Boot-Routine wird nun durchlaufen, Standardmäßig prüft dieser Code zunächst die Einträge in der Partitionstabelle und sucht eine primäre Partition, die als aktiv (bootfähig) markiert ist. Dann lädt der Master-Boot-Code den physikalisch ersten Sektor der aktiven Partition, den Bootsektor.
Der Master Boot Record
Der MBR enthält von Fabrik aus einen Code, der das weitere Hochfahren steuert. Dieser Code wird Master Boot Code (MBC) genannt. Mit dem MBC kann von Festplatte gebootet werden, wenn nur eine aktive Partition existiert. Außerdem enthält der MBR eine Datei, in der alle Partitionen verzeichnet sind – diese wird Partitionstabelle genannt. Der MBR befindet sich übrigens im ersten Sektor der Festplatte, da ein Sektor jedoch nur 512 Bytes aufweist, müssen sich Bootcode und Partitionstabelle diesen Platz teilen: In den ersten 446 Bytes wird der Programmcode des Bootloaders ausgelagert, und in den nächsten 64 Bytes wird die Partitionstabelle untergebracht. Die letzten zwei Bytes enthalten den Code AA55h, der zur Identifizierung des MBRs selber dient.
Die Partitionstabelle enthält je Partition: (16 Byte lange Einträge)
– Boot-Flag (1 Byte) – Markiert die Partition als aktiv. Das könnte man auch mit einem Bit ausdrücken, in der Tabelle wird dennoch ein Byte freigehalten.
– Kopfnummer des Partitionsbeginns (1 Byte)
– Sektor und Zylindernummer des Boot-Sektors (2 Byte)
– Systemcode (1 Byte) – Bezeichnet den Typ der Partitionen: NTFS, unformatiert…
– Kopfnummer des Partitionsendes (1 Byte)
– Sektor und Zylindernummer des letzten Sektors der Partition (2 Byte)
– relative Sektornummer des Startsektors (4 Byte)
– Anzahl der Sektoren in der Partition (4 Byte) – Der MBC lädt die Partitionstabelle und wählt den aktiven Sektor aus. Anschließend lädt er den Inhalt des Bootsektors der ausgewählten Partition. Der dort gespeicherte Code wird gestartet und somit der Start des Betriebssystems initiiert.
Der Bootsektor
Innerhalb einer Partition gibt es einen weiteren Sektor, dessen Position immer gleich ist: der Bootsektor. Er liegt im ersten Sektor der Partition und ist damit leicht über die Einträge in der Partitionstabelle zu ermitteln.
Multiboot
Wenn die Festplatte mehrere verschiedene Betriebssysteme auf mehreren aktiven Partitionen enthält, ist der Master Boot Code (MBC) überfordert. In diesem Fall wird ein Bootmanager benötigt. Ein Bootmanager ist eine erweiterte Version des MBC. Er liest die Partitionstabelle ein und gibt über den Bildschirm eine Liste der als aktiv markierten Partitionen aus. Der Benutzer wählt eine dieser Partitionen aus. Der Bootmanager lädt den Bootsektor der ausgewählten Partition und startet den dort gespeicherten Code. Moderne Bootmanager enthalten eigene Treiber. Dadurch sind sie nicht auf die eingeschränkten BIOS Treiber angewiesen und können zum Beispiel auch Betriebssysteme starten, die sich auf der dritten oder vierten Partition befinden. Die 446 Bytes vom MBR welche für den Bootloader reserviert sind, reichen definitiv nicht aus, um eine vernünftigen Bootloader darin unterzubringen. Daher dient dieser Code in der Regel nur dazu, einen zweiten Code zu laden, der sich auf einer der Partitionen befindet. Diesen zweiten Bootloader bezeichnet man als Secondary Bootloader. Typische Bootloader für Linux-Systeme sind LILO und Grub.
Beispiel für einen Bootmanager: GRUB
GRUB (ein Akronym für GRand Unified Bootloader (engl. “Großer vereinheitlichter Bootloader”)) – GRUB ist der Linux Standard, dessen wichtigste Vorteil dieses Bootmanagers ist seine Flexibilität, verwendet, wie auch andere moderne Bootmanager, eigene Treiber, um nicht auf die Hardwareunterstützung durch das BIOS angewiesen zu sein. Dadurch sind nicht nur die BIOS Beschränkungen außer Kraft gesetzt. GRUB kann mit den eigenen Treibern die kernelspezifischen Formate des zu bootenden Betriebssystems verwenden. So können sehr viele Systeme geladen werden, auch ohne dass die physikalischen Adressen des Codes bekannt sind. Dadurch wird andererseits das Programm sehr groß und der Code passt nicht mehr im Ganzen in den MBR. Deshalb wurde GRUB in zwei Teile unterteilt ist:
GRUB Stages 1 & 2.
GRUB Stage 1 – hat dabei hauptsächlich die Aufgabe, Stage 2 zu laden und auszuführen.
GRUB Stage 2 – befindet sich auf der Festplatte. Da das Programm meist Teil einer Linux Distribution ist, befindet sich Stage 2 in der Regel auf der entsprechenden Linux Partition.
Beim Chainloading spricht GRUB die einzelnen Bootloader oder Bootsektoren der Betriebssysteme an und übergibt ihnen den Systemstart.
title=Windows Vista
rootnoverify (hd?,?)
chainloader +1
makeactive
Beispiel für einen Bootmanager: Vista
Für ältere Betriebssysteme greift der Windows Boot Manager auf die als Windows Legacy OS Loader gekennzeichneten Objekte zurück, hierbei handelt es sich im Grunde um den Verweis auf einen weiteren Bootsektor. An diesen Boot-Loader wird dann die Kontrolle des weiteren Startvorgangs übergeben. Windows 2000/XP/2003 werden so beispielsweise gestartet.
Und hier kommt dann wieder die altbekannte boot.ini ins Spiel. Denn für den Start der alten Windows-Versionen wird einfach der ntldr aktiviert, der wiederum die boot.ini ausliest.
Die bisher in der boot.ini abgelegten Informationen finden sich nun im so genannten Boot Configuration Data Store (BCD). Diese Binärdatei ist meist im Verzeichnis \boot der Startpartition. Änderungen an der Boot-Konfiguration lassen sich nur noch über das Kommandozeilen-Tool (als Administrator) bcdedit.exe durchführen.
Bevor wir nun irgendwelche Änderungen an der BCD vornehmen, sollte mittels bcdedit
/export sicherung – ein Backup angelegt werden und bei Bedarf mittels bcdedit
Will man zusätzlich Linux installieren und trotzdem dem Windows Boot-Manager verwenden (Tipp: es ist ggf. leichter dies mit GRUB zu realisieren, wie bereits zuvor gezeigt wurde) ist das auch nicht allzu schwer. Man sollte jedoch bei der Installation von Linux lediglich darauf achten, dass der Bootloader von Linux nicht in den MBR geschrieben wird sondern in die Linux-Partition.
Code:
dd if=/dev/xxx of=/bootloader.bin bs=512 count=1
Ersetze das xxx durch das Device, auf dem Linux installiert ist, also beispielsweise sda1. Die Datei bootloader.bin kopierst du z.B. auf einen USB-Stick. Das direkte Mounten und Beschreiben der NTFS-Partition von Vista ist nicht unbedingt empfehlenswert. Starte nun Windows und kopieren die bootloader.bin auf die Windows-Partition. Mit den folgenden Befehlen erzeugst du den Boot-Eintrag:
In diesem Kapitel wird das Programm beschrieben, das sich im Bootsektor eines bootfähigen Speichermediums befindet. Dieses Programm heißt Bootstrap Loader oder abgekürzt Bootloader. Es ist ein Teil des zu ladenden Betriebssystems; die folgenden Vorgänge sind also Betriebssystem-spezifisch. Die Aufgabe des Bootloaders besteht darin,die einzelnen Bestandteile des Betriebssystemkerns (Kernel) in vorherbestimmte Positionen im Arbeitsspeicher zu laden und ihren Start zu initiieren. Außerdem stellt er eine primitive Laufzeit-Umgebung bereit, so dass der Kernel, falls nötig, kompiliert werden kann. Der Bootloader ist meistens zu groß, um komplett in den ersten 510 Byte der Diskette/ Partition gespeichert werden zu können. Daher sind viele Bootloader in zwei Teile unterteilt, von denen einer im Bootblock und der andere auf dem Rest der Festplatte (oder Diskette) gespeichert ist. Hierbei übernimmt der zweite und größere Teil die Aufgabe des Bootloaders, während der erste Teil den zweiten Teil lädt. Besonders typisch ist diese Vorgehensweise für das Betriebssystem DOS. Bei DOS werden die beiden Teile des Bootloaders als Bootblock 1 und Bootblock 2 bezeichnet.
4.2) Bootstrap
Als Bootstrap (zu Deutsch Schnürsenkel) wird das Starten des Betriebssystems bezeichnet. Der Bootstrap Loader ist nach diesem Vorgang benannt worden, da er den Bootstrap initiiert. Der Bootstrap beginnt mit dem Start des Bootstrap Loaders und endet mit dem Start des ersten User Programms.
Heute wollte ich beschreiben, wie ich mich über IT-News informiere, denn jeder der sich mit dem Thema “IT” beschäftigt bemerke schnell das aktuelle Informationen sehr wichtig sind, wenn z.B. eine Sicherheitslücke bekannt wird, Updates für bestimmte Programme anstehen oder man sich “einfach” über neue Technologien / Programme / etc. informieren möchte.
[stextbox id=”info”]An alle IT-Blogger: Ich bin immer auf der Suche nach neuen IT-Blogs und interessanten IT-News, daher würde ich euch bitten, folgende Angaben als Kommentar zu hinterlassen, so dass ich euch folgen und eure Nachrichten lesen kann, thx.[/stextbox]
RSS-Feed
ggf. Twitter/Identi.ca – Account
ggf. Facebook-Fanpage
Google-Reader
Der Google Reader ist sehr praktisch, da man nicht die verschiedenen News-Seiten besuchen muss, man hat alle Informationen auf einem Blick zusammen. (Im RSS-Feed bitte immer ganze Artikel anzeigen lassen, anders macht RSS keinen Sinn!!!) Zudem kann man im Google-Reader auch bei anderen Google-Usern (Buzz) mitlesen, welche wiederum Infos/News weiterempfehlen können, so baut man sich schnell seine persönliche kleine News-Zentrale zusammen. Damit das ganze nicht unübersichtlich wird, sollte man die RSS-Feed in einzelne Ordner (Kategorien) speichern. Die Krönung ist ganzen ist dann, wenn du dir das Google-Reader App auf deinem Android-Smartphone installierst und immer alle aktuellen News abrufbereit in der Tasche hast.
Tipp: Per iGoogle (Google – Startseite) kannst du dir deine Google-Reader News auch anzeigen lassen und mehr viele weitere Infos wie z.B. das Wetter etc.
Auf speziellen Webseiten, werden auch RSS-Feed von Blogs zusammengefasst, so dass man diese nicht selber organisieren muss bzw. auch neue Blogs / News findet. Wer sich für das Thema (RSS-Sammlung -Planet) interessiert, kann sich eine solche Software ggf. auch selber installieren – www.planetplanet.org
Auch wenn die Technik vom Google-Reader schon sehr gut ist, wirklich ansprecht / übersichtlich sieht es nicht wirklich aus, daher nutze ich www.feedly.com. (verfügbar für Chrome, Firefox, Safari) Die einzelnen Kategorien vom Google-Reader kannst du dir nun übersichtlich in einer Art Zeitungsformat anzeigen lassen und bekommst viele weiter News Empfehlungen.
+ Ordner erleichtern die Verwaltung
+ komplette News auf einer Webseite
+ News werden gewichtet
+ Übersichtliche Darstellung
– nur im Browser verfügbar (App ist jedoch in Arbeit)
News für unterwegs
Wenn man aus welchem Grund auch immer unterwegs (offline) News lesen möchte, kann man sich auch mehrere RSS-Feed per E-Mail zuschicken lassen und zwar auf tabbloid.com. Außerdem nutze ich auch noch readitlaterlist.com, wir der Name (Read It Later) schon sagt, kann man hier bequem Webseiten abspeichern und später offline lesen.
Tipp: Für “Read It Later” gibt es auch Apps für dein Smartphone, falls du keine Internetflat hast. ;-)
Vor einiger Zeit habe ich mit mich darauf beschränkt (am Morgen) auf der Arbeit die IT-News des Tages per E-Mail zu lesen. Daher kann man meine Blog-Beiträge auch per E-Mail empfangen, dies lässt sich sehr einfach per RSS + FeedBurner realisieren.
Tipp: Unter Linux (Arch Linux & Ubuntu) nutzte ich “Claws Mail” als E-Mail Client. :-)
Wer ein wenig Zeit mitbringt, kann auf Twitter auch viele neue Leute kennen lernen und interessante News in der “Timeline” lesen, ich folge hier vielen IT-Bloggern und kann jedem der Twitter nutzt nur empfehlen Twitter-Listen anzulegen, um ein wenig Ordnung in die Informationsflut zu bekommen. z.B.: twitter.com/suckup_de/lists Indem andere diese Listen wiederum abonnieren, kann man auch ohne viel Zeitaufwand vielen News finden.
Tipp: Wer eine freie Alternative zu Twitter sucht sollte sich einmal identi.ca anschauen…
+ News in Echtzeit
+ Listen erleichtern die Verwaltung
– unübersichtlich Timeline, bei vielen Nachrichten
– spezielle News werden schnell überlesen
– doppelte News
Online-Zeitung (Twitter)
Als Ergänzung zu Twitter möchte ich an dieser Stelle kurz “Twittertim.es” und “paper.li” vorstellen. Bei Twittertim.es kann man aus seiner Timeline eine Zeitung generieren, die Reihenfolge der Beiträge ergeben sich daraus, wie viele Bekannte diese Nachricht ebenfalls erwählt haben. paper.li ist ebenfalls ein Online-Zeitungs-Dienst, welcher Twitter und ggf. Facebook Meldungen (News) verarbeitet. Der Vorteil von paper.li ist der, dass man auch die erwähnten Twitter-Listen als ansprechende Zeitung publizieren und abonnieren kann. z.B.: paper.li/suckup_de/it-nachrichten
+ News werden gewichtet
+ Übersichtliche Darstellung
– spezielle News werden ggf. nicht anzeigt
Social-News
Ergänzend zu den bisher Vorgestellen News-Quellen schaue ich teilweise auch in sogenannte Social-News, dort können User (du und ich) Nachrichten einreichen, diese können dann von anderen gepusht werden. Um so mehr Stimmen ein Beitrag erhält, desto weiter vorne (oben) wird dieser Angezeigt.
Sehr schön finde ich auch Padcasts, wo sehr liebe Menschen News zusammentragen, diese als eine Art Radiosendung verpacken und als Audio-File anbieten. Solch ein Podcast kannst man sich jedoch nur anhören, wenn man auch die Zeit mitbringt! z.B. auf dem Weg zur Arbeit / im Zug / oder einfach gemütlich zu Hause. ;-)