C-Programm – neueste Datei eines Verzeichnisses (Linux)

Unter Linux kann man mit dem folgendem Befehl anzeigen lassen, welche die neuste Datei ist…

ls -1tr --group-directories-first /path/to/dir/ | tail -n 1

… habe gerade versucht dies mit C zu Programmieren, ggf. findest man noch Fehler im Skript!!! :-)

PS: weitere Infos zum arbeiten mit Dateien und Verzeichnissen findest du hier -> openbook.galileocomputing.de/c_von_a_bis_z/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>

time_t st_mTime(char *dir_name) {
    struct stat attribut;

    // printf("%s\n", dir_name); /* Test Ausgabe */
    if (stat(dir_name, &attribut) == -1) {
        fprintf(stderr, "... stat-Fehler\n");
        exit(1);
    }
    if (attribut.st_mode & S_IFREG) {
        return attribut.st_mtime;
    } else {
        return 0;
    }
}

int main(int argc, char *argv[]) {
    int length;
    char dir_name[1000];
    char dir_name_1[1000];
    char dir_name_2[1000];
    DIR *dir;
    time_t t1, t2;
    struct dirent *dir_info;

    if (argc>2) {
        fprintf(stderr, "Es ist nur ein Argument (Verzeichnis) erlaubt!!!\n");
        exit(1);
    }
    if (argc==2) {
        strcpy(dir_name, argv[1]);
    } else {
        strcpy(dir_name, ".");
    }

    if ((dir = opendir(dir_name)) == NULL) {
        fprintf(stderr, "kann %s nicht öffnen", dir_name);
        exit(2);
    }

    length=strlen(dir_name);
    if ((dir_name[length]) != "/") {
        strcat(dir_name, "/");
    }

    while ((dir_info = readdir(dir)) != NULL) {
        strcpy(dir_name_1, dir_name);
        strcat(dir_name_1, (char*)dir_info->d_name );

        while ((dir_info = readdir(dir)) != NULL) {
            strcpy(dir_name_2, dir_name);
            strcat(dir_name_2, (char*)dir_info->d_name );

            t1=st_mTime(dir_name_1);
            t2=st_mTime(dir_name_2);
             if(t1!=t2) {
                if(t1>t2) {
                    strcpy(dir_name_1, dir_name_1);
                } else if (t1

Erste Schritte in der Shell

Ich habe schon einige kleine Blog-Beiträge zum Thema “Shell / Bash” geschrieben und werde versuchen diese Blog-Beiträge zu einer hoffentlich umfassenden Einführung in das Thema Shell zusammenfassen…  :-)

Was ist eine Shell?

Die Shell ist die Eingabe-Schnittstelle zwischen Computer und Benutzer, welche bei normaler Systemkonfiguration nach dem erfolgreichem Login eines Benutzers gestartet wird, so dass man auf dieser Kommandozeile die Möglichkeit hat weitere Programme zu starten. Die Shell könnte man somit aus Arbeitsumgebung bezeichnen, von wo aus der PC gesteuert werden kann bzw. Dateien bearbeitet werden können. Es gibt unterschiedliche Arten von Shell’s, wer ein modernes Linux-Betriebssystem (Debian, Ubuntu…) installiert, landet meistens in der sogenannten “bash“, darauf gehe ich jedoch gleich genauer ein. Die eingegebenen Texteingaben werden von der Shell interpretiert und ausgeführt, daher spricht man bei der Shell auch von einem Kommandozeileninterpreter (command-line interpreter, CLI).

 

Begrifflichkeiten!?

In Verbindung mit dem Begriff Shell hört man auch immer wieder folgendes …

 

  • Konsole: In ihrem ursprünglicher Definition war die Konsole ein Terminal, mit dem der Systemoperator die Systemfunktionen steuern konnte… heute wird der Begriff jedoch ebenfalls für “Terminalemulation” verwendet, zudem heißt die grafischen Terminalemulationen unter KDE “Konsole“.
  • Virtuelle Konsole: Die meisten Linux-Systeme kommen standardmäßig mit einigen virtuellen Konsolen daher, welche man über <Strg> + <Alt> + <F1> bis <F6> erreichen kann. Mittels <Strg> + <Alt> + <F7> wird der Desktop und somit die graphischen Oberfläche wieder angezeigt.
  • Terminal: Ein Terminal ist ein Computer, der den Zugriff auf einen entfernten Rechner erhält und die meisten Rechenoperationen somit nicht selber durchführt. (Terminal-PCs) Der Begriff “Terminal” wird heute jedoch auch als Abkürzung für “Terminalemulation” verwendet.
  • Terminalemulation: Mit einer Terminalemulation wird eine textorientierte Ein- und Ausgabeschnittstelle, ein Terminal emuliert, so dass man mehrer Instanzen eines Terminals auf dem Desktop zur Verfügung hat.
shell <---> Terminalemulation <---> grafische Oberfläche
bash  <--->       xterm       <--->         X11

 

Wie komme ich in die Shell?

Wie bereits erwähnt kann man zum einen die virtuelle Konsolen, die mit tty bezeichnet werden per Tastenkombination erreichen. Die Abkürzung tty stammt von dem englischen Wort Teletype und wurde historisch bedingt von Unix übernommen. Mittels …

<Strg> + <Alt> + <F1>

… gelangt man in die erste der tty-Konsolen, in diesem Fall tty1.

Hinweis: Hat man eine  grafische Oberfläche (Desktop) installiert, so befindet sich dieser standardmäßig auf tty7. Dieser Wert ist jedoch Variabel und kann umverlegt werden. Wer die Maus in einer solchen virtuellen Konsole verwenden will, sollte sich das Programm “gpm” anschauen / installieren.

 

Hat man sich einmal an die Desktop-Oberfläche gewöhnt, erscheinen einem diese virtuelle Konsolen meist wenig komfortabel, daher gibt es einige Programme (Terminalemulation) welche den Funktionsumfang erheblich erweitern.

KDE – Konsole

KDE-Nutzern steht das bereits erwähnte Programm “Konsole” zur Verfügung, wobei sich der Kreis der Begrifflichkeiten hier schließt und die Verwirrung bei so manchen gerade erst einsetzt. ;-) Lässt man dies außer Acht ist dieses Terminal(emulation) sehr gut. Das Programm unterstützt Tabs, Transparenz, verschiedenste Farbschema, unterschiedliche Schriften und man kann Profile anlegen.

konsole
konsole

Gnome – Terminal

Gnome-Nutzer verfügen von Haus aus über ein Programm mit dem Namen “Gnome-Terminal”. Ich persönlich bevorzuge dieses Programm, wobei dies wahrscheinlich eine Übungssache ist…

TASTENKÜRZEL BEDEUTUNG
<Strg> + <Umschalttaste> + t öffnet einen neuen Tab
<Strg> + d schließt einen Tab
<Strg> + Bild rauf öffnet nächsten Tab (rechts) bzw. den ersten
<Strg> + Bild runter öffnet vorherigen Tab (links) bzw. den letzen
<Strg> + <Umschalttaste> + Bild rauf verschiebt einen Tab nach rechts
<Strg> + <Umschalttaste> + Bild unter verschiebt einen Tab nach links
Hinweis: Wer das Terminal immer Griffbereit haben möchte, sollte sich einmal “guake” anschauen … ;-)

 

gnome_terminal
gnome_terminal

 

Xterm

Xterm ist Bestandteil des X.org Projekts und war lange Zeit das Standardterminal für Linuxsysteme mit grafischer Oberfläche.

CLI Companion

Wer die Linux-Befehle noch lernen möchte oder sich einige komplizierte Behle öfter benötigt, kann sich auch dieses Terminal anschauen. -> cli-companion-die-gui-in-der-konsole

CLICompanion
CLICompanion

Terminator

“Terminator ist ein in Python geschriebener Terminal-Emulator für die Desktop-Umgebung GNOME, der es ermöglicht mehrere Terminals innerhalb eines Fensters bzw. einzelner Tabs zu benutzen und mittels Tastatur-Kürzeln zwischen diesen zu wechseln. So kann man ohne Tabs und ohne weitere Terminalfenster mehrere Shells zur selben Zeit offen haben.” – http://wiki.ubuntuusers.de/Terminator

 

terminator_split_example
terminator_split_example

 

Wenn man seine Standard-Terminal ändern möchte, kann man dies mit dem Alternativen-System bewerkstelligen…

sudo update-alternatives --config x-terminal-emulator

 

Was für Shells gibt es?

Wenn man sich ein wenig näher mit dem Thema beschäftigt, stellt man schnell fest, dass es eine Menge Alternative Shells gibt. Ich beschränke mich einfach mal auf die (heutige) Standard-Shell die bash und einer Alternative der zsh (Z-Shell)

 

Bourne Again Shell (bash)

Die Bourne Again Shell ist die Standard-Shell der meisten Linux-Distributionen. Die Shell beherrscht die Features der Borune- Korn- und C-Shell. Redet jemand von einer Shell, spricht man meistens von Bash. Um das volle Potenzial der Bash zu nutzen sollte man sich “.bashrc“-Datei anschauen und an seine Bedürfnisse anpassen, für den Anfang sollte meine Datei als Vorlage genügen. -> bashrc

 

Z-Shell (zsh)

Die Zsh kann man als eine Zusammenstellung aller Verbesserungen und Features aus der bash, der csh und der tcsh betrachten.

Zu einigen ihrer Features zählen:

  • eine frei programmierbare Wortvervollständigung (TAB-Completion)
  • die Möglichkeit, die History aus anderen – gleichzeitig laufenden – Shells zu nutzen
  • Rechtschreibüberprüfung
  • nahezu vollständige Kompatibilität zur bash, ksh und tcsh

-> Quelle: http://de.wikipedia.org/wiki/Unix-Shell#Die_Z-Shell

Bei der Z-Shell kann hat man noch viel mehr Einstellungsmöglichkeiten, welche einem Anfangs ggf. überfordern können, daher auch hier meine “.zshrc“-Datei als Vorlage. -> zshrc

 

Z-Shell installieren:

sudo aptitude install zsh

Z-Shell ausprobieren:

zsh

Standardmäßig die Z-Shell verwenden:

sudo chsh -s /usr/bin/zsh `whoami`

 

Probieren geht über studieren…

… was ist damit sagen will, wer einmal die Vorteile der Shell erkannt hat und einige Befehle kennt, wird die Shell lieben lernen!

 

Linux-Dateipfade einigermaßen kennen

Auch wenn in der Shell meist angezeigt wird in welchem Verzeichnis man sich gerade befindet, kann es seht hilfreich sein, wenn man ungefähr weiß wo sich was bei Linux befindet! -> http://wiki.ubuntuusers.de/Verzeichnisstruktur

Verzeichnis Bedeutung ~ Windows
/
Wurzelverzeichnis
C:\
/boot
Bootloader
C:\
/etc
Systemkonfiguration registry,

C:\WINDOWS\*.ini
/bin
Systemprogramme für Benutzer
C:\WINDOWS\,C:\WINDOWS\COMMAND\
/sbin
Systemprogramme und -dienste für Admins
/lib
Systembibliotheken und Treiber
C:\WINDOWS\SYSTEM32\
/tmp
Temporäre Dateien
C:\WINDOWS\TEMP\
/usr
(“Unix System Resources”)
/usr/bin
Programme für Benutzer
C:\Programme\*\
/usr/sbin
Programme und Dienste für Admins
/usr/lib
Bibliotheken
/home
Heimatverzeichnisse
C:\Dokumente und Einstellungen\
/home/user
Heimatverzeichnis des Benutzers user
/root
Heimatverzeichnis des Benutzers root
/var
Daten von Diensten
/var/log
Systemprotokolle
/media
Wechseldatenträger, z.B. USB-Stick
/media/cdrom
CD-ROM
A:\, D:\, E:\,...

 

Beim Login in die Shell, landet man meistens in seinem eigenen home-Verzeichnis (z.B.: /home/lars/). Im “Prompt” (dem Text vor der Eingabeaufforderung, in der Shell) könnte nun so etwas angezeigt werden “lars@ubuntu:~$“.

lars ist hier der User-Name, ubuntu der Name des PCs und das ~ (Tilde-Zeichen) steht als Abkürzung und Synonym für das Homeverzeichnis, in welchem wir uns gerade befinden, dies kannst du gleich durch die Eingabe des Befehl “pwd” (print working directory) überprüfen. ;-)

 

Groß- und Kleinschreibung beachten

Anders als bei Windows unterscheidet Linux Groß- und Kleinschreibung, hier einige Beispiele zur Verdeutlichung …

mkdir lall

(mkdir – make directories)

mkdir Lall
touch lall

(touch – erstellt eine leere Datei)

touch Lall

 

Nun können wir uns mittels “ls” (ls – list directory contents) bzw. …

ls -latrF --color=auto

… anzeigen lassen, welche Dateien / Verzeichnisse im aktuellen Verzeichnis erstellt wurden. Mittels “rm” bzw. “rmdir” kannst du diese Dateien wieder löschen. Falls du versehentlich z.B.: “touch ./–help” ausführst und somit eine leere Datei mit dem Namen-“–help” erstellt hast, kannst du diese mittels “rm ./–help” wieder entfernen.

 

Der Befehl “man” (z.B.: man mkdir) zeigt eine ausführliche Hilfe zum angegebenen Befehl an und “apropos” (z.B.: apropos mkdir) zeigt dessen Funktion schnell an… zudem kann man hinter den Befehlen auch “–help” (mkdir –help) schreiben

 

Achtung
Achtung: Vorsicht der Befehl “rm -r” löscht rekursiv, am Anfang sollte man diesen Parameter ggf. mit -i kombinieren, so dass vor dem löschen einer Datei noch einmal nachgefragt wird, ob diese wirklich gelöscht werden soll. (z.B.: rm -ri lall/) -> safe-rm can save your life

 

Die Navigation

Ebenfalls ein sehr großes Themenfeld ist die Navigation in der Shell, angefangen von der Navigation durch die Verzeichnisse / Dateien … über die Verwendung der History (bereits eingegebene Befehle in der Shell) … bis hin zur Navigation innerhalb der Shell.

Navigation in Verzeichnissen

Befehl BEDEUTUNG
cd ..
wechselt ein Verzeichnis nach oben
cd ../..
wechselt zwei Verzeichnise nach oben
cd ~
wechselt in dein home-Verzeichnis
TAB
durch das drücken der Tabulator-Taste, wird deine Eingabe vervollständigt -> ggf. 2x hintereinander TAB drücken !!!
».«
jedes Verzeichnis enthält eine Referenz auf sich selbst, diesen Punkt benötigt man vor allem,wenn man eine ausführbare Datei starten möchte… (z.b: cd /bin/; ./bash;)
pwd
zeigt an wo du dich befindest

 

Durch das drücken der TAB-Taste kann man sich viel Tipparbeit ersparen… :-)

Navigation in der Shell

BEFEHL / Tastenkürzel BEDEUTUNG
<Strg> + d
Logout aus der Shell (logout bzw. exit)
<Strg> + c
laufender Prozesse (im Vordergrund) wird beendet
<Strg> + l
räumt die Ausgabe auf (clear)
fc -l
zeigt die letzten Befehle in einer Liste an
Pfeiltasten (noch oben / unten)
letzte Befehle durchblättern
Pfeiltasten (noch rechts / links)
Cursor auf der Konsole (rechts / links) bewegen
<Strg> + r
sucht einen Befehl in der Bash-History (mehrmaliges drücken von Strg+r geht weiter in der History zurück)
Alt + .
schreibt den letzten Parameter des letzen Befehls auf die Konsole
!$
schreibt den letzten Parameter des letzen Befehls auf die Konsole (Alt + .)
!!
führt den letzten Befehl noch einmal aus
!string
startet den letzten Befehl, der mit sting anfängt
!?string
startet den letzten Befehl, der string enthält
^sting1^string2
wiederholt den letzten Befehl, wobei sting1 doch string2 ersetzt wird
<Strg> + a
Cursor am Anfang der Zeile
<Strg> + e
Cursor am Ende der Zeile
<Strg> + w
schneidet das letzte Wort aus
<Strg> + u
scheidet alles vor dem Cursor aus
<Strg> + k
scheidet alles hinter dem Cursor aus
<Strg> + y
fügt die zuletzt ausgeschnittenen Daten ein

 

PS: wie bereits erwähnt entfaltet die Shell ihr volles Potenzial erst, wenn man diese ein wenig an seine Wünsche anpasst, daher hier noch einmal der Verweiß auf die .bashrc und .zshrc

 

Kommandos hintereinander ausführen

Wie bereits kurz zuvor gezeigt, kann man Befehle auch hintereinander ausführen… z.B.:

cd /bin/; ./bash;

Hier werden die Befehle “cd /bin/” und “./bash” einfach nacheinander ausgeführt. Wenn man den zweiten Befehl jedoch nur ausführen möchte, wenn der erste Befehl ohne Probleme funktioniert hat, kann man && zwischen den beiden Befehlen verwenden… z.B.:

cd /bin_lall/ && ./bash;

Und wenn man den zweiten Befehl nur ausführen möchte, wenn der erste Befehl nicht funktioniert hat, nimmt man “||“… z.B.:

cd /bin_lall/ || echo "ggf. existiert /bin_lall nicht";

PS: Natürlich muss man nicht jedesmal in das Verzeichnis /bin wechseln, wenn man ein Programm aus diesem Verzeichnis öffnen möchte, dazu wird in der Shell die Variable “$PATH” verwendet. z.B.:

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11

 

Mehrzeilige Kommandos

Wenn man ein Kommando / Befehl über mehrere Zeilen aufteilen möchte, kann man dies mithilfe von “\” machen… z.B.:

find /etc/ \
-iname "pass*"
Hier gibt es weitere Infos zum “find”-Befehl und hier noch eine Befehlsübersicht für alle die gerade Ihre ersten Schritte auf der Shell wagen…

 

Syntax Name Beschreibung ~ Windows
pwd
present working directory Anzeige des aktuellen Arbeitsverz.
cd Zielverzeichnis
change directory Verzeichniswechsel
CD
ls Verzeichnis
list Verzeichnisinhalt anzeigen
DIR
file Datei
% Dateiformat oder -typ
echo Zeichenkette
% Zeichenkette ausgeben
cat Datei
concatenate Dateiinhalt ausgeben
TYPE
more Datei
% dito, seitenweise
MORE
less Datei
% dito, blättern und suchen
touch Datei
% Leere Datei anlegen
cp Quelle Ziel
copy kopieren
COPY
mv Quelle Ziel
move verschieben, umbenennen
MOVE, REN
rm Datei
remove löscht eine Datei
DEL, ERASE
mkdir Verzeichnis
make directory neues Verzeichnis anlegen
MD
rmdir Verzeichnis
remove directory (leeres) Verzeichnis löschen
RD

-> linux-kommandos-als-hintergrundbild ;-)

 

Dateien bearbeiten

Wer direkt in der Shell Dateien verändern möchte, sollte sich den “vim”-Editor anschauen, wie die Shell ist dieser Editor gewöhnungsbedürftig aber man gewinnt Ihn mit der Zeit lieb… ;-) In diesem HowTo habe ich versucht die wichtigsten Funktionen von vim zusammenzufassen. Und hier noch eine Schnellübersicht:

 

BEFEHL / TASTENKÜRZEL BEDEUTUNG
i Text einfügen, vor dem Cursor
R Text ab Cursor-Position überschreiben
<Strg> + v Bereich markieren
<ESC> Bearbeitungsmodus beenden
y kopieren
p einfügen
:q vi/vim beenden
:w Datei speichern

 

 

vi-vim-cheat-sheet_de_layout
vi-vim-cheat-sheet_de_layout

 

Es gibt unter Linux noch etliche Programme, welche einem beim bearbeiten von Dateien hilfreich sein können z.B.: sed

sed -i 's/Ubuntu/Windows/g' test.txt

Dieser Befehl ersetzt das Wort “Ubuntu” durch “Windows” in der ganzen Datei “test.txt” im aktuellen Verzeichnis. Weitere Infos zu sed findest du hier -> streameditor-sed und hier noch ein alter Beitrag zum Thema -> Dateien-in-der-shell-bearbeiten

 

Programme im Hintergrund verschieben

Man kann Programme und Befehle auch im Hintergrund ausführen bzw. diese in den Hintergrund verschieben…

lars@ubuntu ~$ kommando1 & 
[1] 5520
lars@ubuntu ~$ kommando2 & 
[2] 5521
lars@ubuntu ~$ fg %2 
kommando2

 

kommando1 und kommando2 wurden beide im Hintergrund ausgeführt, dann wurde kommando2 mittels dem Befehl “fg” wieder in den Vordergrund geholt. Wenn man kommando2 wieder in den Hintergrund verschieben möchte drücken wir: <Strg> + z

[2]+  Stopped kommando2
lars@ubuntu ~$ bg 
[2]+ kommando2 &

Mit Hilfe des Befehls ”

bg"

wird eine angehaltener Job der Shell in den Hintergrund verschoben und wieder gestartet:

Hier gibt es diesbezüglich weitere Infos: Prozess-anhalten

 

StdIn & StdOut

Sehr hilfreich sind folgende kleine Helfer in der Shell -> Pipezeichen (|) Größer-als-Zeichen (>) und Kleiner-als-Zeichen (<)

mithilfe dieser Zeichen kann man Programm bzw. dessen Ausgaben umleiten. z.B.:

ls -l /usr/bin > /tmp/Alle_Benutzerprogramme.txt

-> schreibt die Ausgabe von “ls” des Verzeichnisses /usr/bin/ in die Textdatei /tmp/Alle_Benutzerprogramme.txt

grep http /etc/services | wc -l

-> zählt alle Zeilen in der Textdatei /etc/services, die die Zeichenkette http enthalten

 

Der Befehl “grep” kann Verzeichnisse, Dateien oder Ausgaben durchsuchen bzw. filtern, daher solle man sich diesen Befehl noch mal genauer ansehen!!!

 

Zum Schluss verlinke ich noch einige alte Blog-Post welche weitere Informationen zur Shell beinhalten, viel Spaß beim testen… :D

– Dateien verschieben in der Shell -> http://suckup.de/blog/2010/01/31/mv-linux/

reguläre Ausdrücke (wildcards) in der Shell -> http://suckup.de/blog/2010/02/09/wildcards-in-der-shell/

– Shell-Programmierung: Schleifen -> http://suckup.de/blog/2010/02/09/nice-try/http://suckup.de/blog/2010/01/31/bash-programmierung-schleifen/

– Bedingungen in der Shell -> http://suckup.de/blog/2010/01/31/bedingungen-in-der-shell-linux/

– crontab -> http://suckup.de/blog/2010/02/08/crontab/

– ps – prozessstatus -> http://suckup.de/blog/2010/09/14/shell-ps-prozessstatus/

– Rechnen in der Shell -> http://suckup.de/blog/2010/01/31/rechnen-in-der-shell/

– HTML-Umlaute in der Shell korrigieren -> http://suckup.de/blog/2010/02/13/html-umlaute-korrigieren/

– cdrecord – ISO erstellen und CD brennen -> http://suckup.de/blog/2010/01/31/cdrecord-iso-erstellen-und-brennen/

– aptitude & dpkg -> http://suckup.de/blog/2010/02/13/aptitude-dpkg/

Unix-Dateiattribute (Zugriffsrechte) verändern -> http://suckup.de/blog/2010/01/31/chmod-howto/

– su & sudo & Setuid-Bit -> http://suckup.de/blog/2010/02/08/su-sudo-setuid-bit/

– Systeminfos anzeigen -> http://suckup.de/blog/2010/02/08/systeminfos-anzeigen-lassen/

– Speicherverbrauch anzeigen -> http://suckup.de/blog/2010/02/08/speicherverbrauch-anzeigen-lassen/

– mount über SSH -> http://suckup.de/blog/2010/02/07/mount-ueber-ssh/

– Ports via ssh weiterleiten –http://suckup.de/blog/2010/03/29/ports-via-ssh-weiterleiten/

– SSH – Hostnamen vervollständigen -> http://suckup.de/blog/2010/09/14/ssh-hostnamen-vervollstaendigen/

– Desktop Firewall – iptables -> http://suckup.de/blog/2010/01/31/desktop-firewall-iptables/

– deine öffentliche IP-Adresse in der Shell -> http://suckup.de/blog/2010/01/31/deine-oeffentliche-ip-adresse/

– offene Ports analysieren -> http://suckup.de/blog/2010/03/28/offene-ports-analysieren/

– TCPdump – HowTo -> http://suckup.de/blog/2010/08/02/tcpdump-howto/

– netstat + ss + lsof -> http://suckup.de/blog/2010/01/31/netstat-ss-lsof/

– nethogs und iftop – Traffic analysieren -> http://suckup.de/blog/2010/01/31/nethogs-und-iftop-traffic-analysieren/

– lsof – list open files -> http://suckup.de/blog/2010/02/22/lsof-list-open-files/

Android 2.2.3 Froyo (Mod+X => SpicagenMod RC1) – Samsung GALAXY SPICA I5700

I will publish my work (files) here because different forums all over the world use it and I have to update all the posts so that everybody find out that there is a new version of “Mod + X” (SpicagenMod) | here you can get more infos & help from the “Samdroid.Net”-Commuity -> [Dev] SpicagenMod BETA3 & HELPDESK + FAQs + HOW-TO GUIDES

 

Current version: Mod+X => SpicagenMod RC1

 

[stextbox id=”alert” caption=”Warning”]Even if this update should have worked for me without problems, I can not guarantee that this will work for you, so you maybe create a backup of your files before the installation![/stextbox]

 

 

INSTALLATION
If you are updating from any other Android-Version than Froyo (2.2) do wipe data/cache BEFORE installing SGM.
1. Push it to your SDcard, go to recovery and apply pushed file.
2. After complete boot make reboot one more time!

This update won’t wipe your data!

 

—————————————–

 

Download:

->SpicagenMod RC1 (~ 85M, md5: ec0ad09b51595b974020d882f8323a4f)

 

Kitchen:
->kitchen.voku-online.de (offline for the moment) 

 

Sources:

->github.com/voku

 

—————————————–

 

HowTo

If you have already installed Android 2.2 Froyo -> appy the “Mod + X” via Recovery :) otherwise or if you will have a “clean install” …

1.) Odin + spica_jc3“I570EXXJH6.tar” 

Windows: 
1.1) install driver 
1.2) start Odin, select new files + “spica_jc3.ops” 

1.3) do not connect Spica with you pc -> press “quieter+camera+hang” to boot in the download-mode 


1.4) connect Spica with your pc -> start odin-update

2.) Odin + spica_jc3“i5700_LK2-08_PDA.tar” 

3.) press “quieter+call+hang” -> “Wipe” -> “Wipe data/cache”

4.) Recovery: apply zip-file

 

PS: here you can find a detailed HowTo but it is only in German language > Android 2.2 Froyo (CyanogenMod) – Samsung GALAXY SPICA I5700

 

—————————————–

 

Changelog: SpicagenMod

SpicagenMod Froyo, based on CyanogenMod 6.1.1 & Android 2.2.3
========

RC1
* added "VOKU"-kernel v3.4 (24bpp) as default
* edit sound -> louder [need testing] (asound.conf)
* updated DalvikVM (github.com/voku/android_dalvik)
* updated Bionic-lib (github.com/voku/android_bionic)
* updated WebKit (github.com/voku/android_external_webkit)
* updated png-lib v1.2.47 (github.com/AOKP/external_libpng)
* updated some Apps (Contacts, LatinIME, Browser, ES File Explore, Nemus Launcher,
* .... MediaProvider [gingerbread], Google Maps, YouTube, GoogleVoice,
* .... GooglePlayStore [Market], Music)
* removed some Apps (DSPManager, VpnServices, OpenVPN, QQPlayer)
* fixed SQLite problems - revert last changes (github.com/voku/android_external_sqlite)
* fixed Contakt problem - revert to SM-version (github.com/voku/android_packages_apps_Contacts)
* updated framework -> added "app.keeping for services" (github.com/voku/sm_android_frameworks_base)
* updated framework -> revert "User-to-User signaling Info" (github.com/voku/sm_android_frameworks_base)
* revert orientation-backport from CM9 (github.com/voku/sm_android_frameworks_base)
* added some framework-fixes from CyanogenMod [isc] (github.com/voku/sm_android_frameworks_base)
* added ICS theme (madoreq)
* added new instal-scripts (mpjoe2000)
* default build flags (github.com/voku/sm_android_build)
* updated "SpicaTweak Lite" v1.7.5 (github.com/voku/Android-Tweak) (thx @kiryl)
  - added "fix_permissions"
  - 3G/Edge Tweaks
  - SQLite Tweaks
  - added zipalign-Tweaks

BETA6
* added "VOKU"-kernel v3.2 (24bpp) as default
* updated some Apps (ES File Explore, k-9 Mail, Gallery3D, DSPManager, Terminal Emulator, Music,
* .... Barcode Scanner v4, QQPlayer, Google Maps, Browser, Phone, DownloadProvider,
* .... UserDictionaryProvider, ApplicationsProvider)
* updated Bionic-lib (github.com/voku/android_bionic)
* updated Busybox (github.com/voku/android_external_busybox)
* updated "Skia Graphics Engine" (github.com/voku/android_external_skia)
* updated WebKit (github.com/voku/android_external_webkit)
* updated "libFLAC" (github.com/voku/android_external_flac)
* updated zoneinfo - 2012b
* updated SQLite (github.com/voku/android_external_sqlite)
* updated DalvikVM (github.com/voku/android_dalvik)
* fixed "su"-problem
* fixed "GPS"-problem
* fixed longgg... boot time
* added new default settings (keep apps [Launcher, MMS, ... ] in memory by default)
* revert framework -> tweak SQLite-settings [need testing] (github.com/voku/sm_android_frameworks_base)
* added framework-features from milaq [froyo] (github.com/milaq/android_frameworks_base)
  - keep apps in memory (e.g.: echo "sys.keep_app_2=com.whatsapp" >> /system/build.prop;)
  - don't start gmaps network location service, if gmaps main isn't running
* added some framework-fixes from CyanogenMod [isc] (github.com/voku/sm_android_frameworks_base)
  - improved widget scrolling speed
* added framework-fixes from codeaurora.org [froyo]
  (https://www.codeaurora.org/gitweb/quic/la/?p=platform/frameworks/base.git;a=shortlog;h=refs/heads/froyo)
* added framework-fixes from peteralfonso [gingerbread] (github.com/peteralfonso/platform_frameworks_base)
* updated "SpicaTweak Lite" v1.7.1 (voku1987)
  - removed SQLite-Settings
  - edit TCP read/write
  - cleaned up the script
  - more I/O-Tweaks
  - removed zipalign-Tweaks
  - removed extra CPU-settings for Apps
  - Firewall-Tweaks [need testing]

BETA5
* added "VOKU"-kernel v1.7C [with Qbanin's touch driver] (24bpp) as default
* increased default audio-volume [/system/etc/asound_default.conf]
* updated install-script from SpicagenMod
* updated Android 2.2.2 -> Android 2.2.3 (voku1987)
* updated APN-config [apns-conf.xml] (voku1987)
* updated "block advertising" [hosts] (voku1987)
* updated "SpicaTweak Lite" v1.4.1 (voku1987)
* updated DalvikVM (github.com/voku/android_dalvik)
* updated "Skia Graphics Engine" (github.com/voku/android_external_skia)
* updated Bionic-lib (github.com/voku/android_bionic)
* updated SQLite v3.7.9 (with sync off) (github.com/voku/android_external_sqlite)
* updated su-binary [v3.0.3]
* updated some Apps (Google Maps 6.0.3, Market 3.4.4, k-9 Mail 4.103, Camera, Settings, SMParts,
* .... Phone, LatinIME, RealCalc, Browser, Gallery3D, Superuser 3.0.7, QQPlayer, Google Voice,
* .... ES File Explorer, YouTube, MediaProvider)
* added all default Apps (OpenVPN, "LiveWallpapers"-Apps, DSPManager, ...)
* added "QuickSearchBox"-App => removed "Google QuickSearch"-App
* removed "ApplicationsProvider"-App (mpjoe2000)
* removed Roboto-Font -> added CyanogenMod-Font (voku1987)
* removed auto "zipalign"-script (voku1987)
* updated "Music"-App (github.com/voku/android_packages_apps_Music)
* updated "Gallery3D"-App (github.com/voku/android_packages_apps_Gallery3D)
* fixed safe factory reset [need testing] (mpjoe2000)
* fixed force close -> menu-settings (voku1987)
* fixed DeskClock-App (voku1987)
* updated framework -> tweak SQLite-settings [need testing] (github.com/voku/sm_android_frameworks_base)
* added framework-fixes from CyanogenMod [gingerbread] (github.com/voku/sm_android_frameworks_base)
* added framework-fixes from Android [master] (github.com/voku/sm_android_frameworks_base)
  - but again no theme-compatibility to SGM BETA2.1 !!

BETA4
* added "FrozenLake v3 with default touch driver" as default (darth_llamah)
* added modified Transpa-Theme (eksajlee & voku1987)
* added Roboto-Font from Android 4.0 (voku1987)
* updated APN-config [apns-conf.xml] (voku1987)
* added boot-sound [off by default] (voku1987)
* added new SGM boot_logo/boot_animation (samdroid.net community)
* added optimized "Gallery3D"-App => removed "QuickPic"-App
* added "Music"-App => removed "MIUI-Music"-App
* added keyboard with multi-language => removed default keyboard (github.com/voku/android_packages_inputmethods_LatinIME)
* added "k-9 Mail"-app v3.800 => removed "Email"-App (code.google.com/p/k9mail/downloads/)
* updated some Apps (Browser, DownloadProvider, Gallery3D, RealCalc, Google Maps, Superuser, ES File Explorer, ...)
* removed some Apps (Facebook, DSPManager, VPN) | if you need it, you can add it by yourself
* updated su-binary [v3]
* updated DalvikVM (github.com/voku/android_dalvik)
* updated Bionic-lib (github.com/voku/android_bionic)
* updated jpeg-lib optimized (github.com/voku/android_external_jpeg)
* updated WebKit (github.com/voku/android_external_webkit)
* update Opencore [optimized mp3] (github.com/voku/sm_android_external_opencore)
* fixed Gallery3D [zoom by pictures from camera] (voku/android_packages_apps_Gallery3D)
* fixed Bluetooth-CarKit-problem
* fixed wifi-dns (LordManta)
* code fixes (voku1987)
  - fixed GPS-Bug
  - fixed YouTube-Bug
  - theme-compatibility to SGM BETA2.1
* added "SpicaTweak Lite" v1.1 -> removed "SSSwitch" (voku1987)
  - some default tweaks without config via ssscfg
* added & updated translations (voku1987)
* added gingerbread backport native power manager service module
* added many framework-fixes via "Fork Queue" from froyo (github.com/voku/sm_android_frameworks_base)
* added framework-fixes from kernelzilla [froyo] (github.com/kernelzilla/android_frameworks_base)
* added framework-fixes from CyanogenMod [gingerbread] (github.com/voku/sm_android_frameworks_base)
* added framework-fixes from LiquidSmoothROMs (gingerbread) (github.com/LiquidSmoothROMs/android_frameworks_base)

BETA3
* added "VOKU"-kernel v1.7A [with Qbanin's touch driver] (24bpp) as default
* converting to ALL2EXT2 only if it's at EXT2 (luismaf, voku1987)
* updated GPS-config / NTP-config  [gps.conf] (voku1987)
* updated APN-config [apns-conf.xml] (voku1987)
* SGM boot_logo/boot_animation [without yellow color ;)] (samdroid.net community)
* updated / added install-script (voku1987)
* code fixes & clean-up (voku1987)
* optimized build flags (voku1987)
* added Intercept 3D drivers
* added 640x480 Camera with 30FPS to MP4 (maciek4323)
* added "RealCalc"-App => removed "Calculator"-App
* added "LauncherPro"-App => removed "ADWLauncher"-App
* added "MIUI-Music"-App => removed default "Music"-App (jankomuz)
* added "Email"-App with policies fix for Exchange => removed default "Email"-App
* added "QQPlayer"-App => removed "RockPlayer"-App
* added "ES File Explorer"-App => removed default FileManager
* added "QuickPic"-App => removed "Gallery3D"-App
* added default keyboard (android.git.kernel.org/?p=platform/packages/inputmethods/LatinIME.git)
* removed "Genkiller"-App
* updated some Apps (Google Maps, Superuser, Mms, Phone, Contacts, SM-Settings, Settings, Terminal Emulator, Browser...)
* updated "block advertising" (voku1987)
* updated png-lib v1.2.46 (github.com/CyanogenMod/android_external_libpng)
* updated jpeg-lib optimized for armv6 (github.com/mansr/android_external_jpeg)
* updated zlib v1.2.5 (github.com/CyanogenMod/android_external_zlib)
* updated SQLite v3.7+ (with sync off) (voku1987)
* updated libcamera (without sources?!)
* updated dropbear [ssh-daemon] (github.com/tpruvot/android_external_dropbear)
* updated Memory-Cache for webkit (github.com/voku/android_external_webkit)
* updated Sound-Control / Sound-Mixer (github.com/voku/android_hardware_alsa_sound)
* updated default theme-images & animation (voku1987)
* fixed Bluetooth-bug (criminal)
* fixed Market-install-bug (voku1987)
  - download cache will be stored now on your SD-card (/sdcard/.cache/)
* fixed earphone without mic bug
  - hear your caller through the headphones and talking via Mobile
* added faster boot-animation (surV)
* added configurable Bluetooth timeout (voku1987)
* added Norwegian translation (AreEdw)
* added "About ROM" in "Settings"-App (github.com/DroidConcepts/android_packages_apps_DroidConceptsSettings)
* added quieter camera-click-sound (voku1987)
* added "vim" (github.com/CyanogenMod/android_external_vim)
* added "SSSwitch" v1.3.4 (voku1987)
  - I/O Scheduler = BFQ
  - optimized net-settings
  - optimized I/O-settings
  - "low-memory task killer" settings configurable via "ssscfg" in the "Terminal Emulator"-App
  - CPU-settings are disabled by default
  - "keep App in memory"-settings are disabled by default
* added framework-fixes from peteralfonso [gingerbread] (github.com/peteralfonso/platform_frameworks_base)
* added framework-fixes from CyanogenMod [gingerbread] (github.com/CyanogenMod/android_frameworks_base)
* added framework-fixes from android [gingerbread] (github.com/android/platform_frameworks_base)
* added framework-fixes from pcfighter [froyo] (github.com/pcfighter/platform_frameworks_base)

BETA2
* Android 2.2.2 (AOSP)
* big code clean-up (darth-llamah)
* Bluetooth discoverability configurable (CyanogenMod, nebkat)
* clock text color fixes (nebkat)
* CM FileManager enabled (cadavre)
* DownloadManager and Browser from Gingerbread (nebkat)
* Email policies fix for Exchange (cadavre)
* extended SMS/MMS writing area to 6 lines in portrait (cadavre)
* framework cleanups (nebkat)
* locking in memory fix for Phone, Contacts and Superuser (cadavre)
* modified build flags and scripts (CyanogenMod, LeshaK, guybrusht)
* power button disabled in lockscreen (cadavre)
* PowerWidget - more long-press options (cadavre)
* rotary answer for calls (nebkat)
> RTL for framework and webkit (Y6b, cadavre) [available as additional package]
* SGM logo/anim (samdroid.net community)
* SMParts cleanup (nebkat)
* SMS send to wrong recipient fix (cadavre)
* some build fixes (Piskor)
* status bar PowerWidget new options (nebkat)
* sync off for sqlite databases improves in speed (XDA, cadavre)
* xml importing from CM and SGM fixed (cadavre)
* lockscreen improvements: (CyanogenMod, nebkat)
  - rotary lockscreen unlock drag down
  - music addons
  - battery % info
  - tab vibration on/off
  - mms/phone tab custom apps
* Android fixes: (submitted by Piskor)
  - DNS fix for wifi
  - Change default DNS server for Tethering
  - Introduce a list of all the audio files
  - Telephony: Fix radio state printing
  - Telephony: Process MT SMS with MTI set to 3
  - Fixing counting the number of days in call log screen
  - Change in media scanner to set correct date
  - frameworks/base/telephony: Release wakelock on RIL request send error
  - Changing connect and response timeout
  - Bluetooth OBEX timeout problem
  - Avoid leaking sockets
  - Launcher is missing anti-aliasing
  - java.lang.RuntimeException:Unable to pause activity (com.android.settings.applications.StorageUse)

BETA1
* new kernel WLAN module to avoid SoDs (Lukiqq)
* final DPad music controls (cadavre)
* final framework theme text colors (cadavre)
* possibility of locking Phone and Contacts in memory so phone can be more like phone (cadavre)
* integrated Intercept3D drivers (cadavre)
* smooth YouTube HQ playing (cadavre thanks to Intercept)
* you can use CM and SM .xml theme files now (cadavre)
* Finnish localization (FI translation team) [fi-rFI]
* GB green clock text color (Freedom)
* Parrot autopairing fix (cadavre)
* latest ADWLauncher (nebkat)
* looping ringtone (criminal)
* avoid immediate turning on/off wifi freeze (cadavre)
* lockscreen overlap fix (cadavre)
* Live Wallpapers enabled (cadavre)
* using OpenVPN-android-settings app (cadavre)
* minor changes (nebkat, piskor, cadavre)

pre-beta-2 (alpha_b2)
* [source] vendor & device trees cleaning and fixing (LeshaK)
* DPad music controls fixes (cadavre)
* SMParts bug fixes (cadavre)
* YouTube hq play fix (cadavre)
* new gapps 20110301 (piskor)
* new Superuser and su lib (cadavre/criminal)
* fix for default statusbar text colors (cadavre)
* OpenVPN fixes (cadavre)
* HU translation (HU translation team)
* SMParts translations (Samdroid.net community)
* "Launcher settings" bug fix (cadavre)
* 3 secs long-press BACK to kill (cadavre)
* minor changes (SM team)

pre-beta-1 (alpha_b1)
* initial build of SM (cadavre)
* added SM-froyo specific prop settings (guybrusht)
* included official Gingerbread theme (cadavre)
* hi-res png for GB theme (Kyojin)
* Ubuntu fonts (cadavre)
* Statusbar music controls (cadavre)
* settings for HOLD button (cadavre)
* keep SU in memory to avoid non-granting su access (cadavre)
* volume button orientation mapping (cadavre)
* orientation listener changes (cadavre)
* wake screen on new notification (f.e. sms, reminder, usb...) (cadavre)
* new CMParts adapted from Gingerbread (cadavre)
* created SMParts based on new CMParts (nebkat)
* framework removals: (cadavre)
- Bluetooth HID
- mouse pointer

 

—————————————–

 

Battery Calibration

1.1) Battery Calibration? -> “Calibration needs to be done after flashing a new ROM, but you can calibrate any time you think your battery is miscalibrated. This program does it by removing the batterystats.bin system file. The OS generates a new clean batterystats file soon, thus any fake information from the previous ROM is removed.
It’s suggested, but not necessary, to let the phone fully discharge after calibration, then charged to 100% without break.” 

1.2) Battery Calibration! -> “If anyone has a battery drain after an update/kernel change, wipe batterystats via recovery. At first, charge your phone to 100% when it’s on. turn it off and connect the charger again. Wait till the battery on the screen says “battery fully charged”. Disconnect the charger & reboot directly into the recovery and wipe the batterystats.” 

PS: maybe you can also try this App for calibrate your battery -> Easiest way i found to calibrate my battery

2.) More Battery Life Out of Your Android
What do you do when your battery is about to die …??

2.1) Use the Power Widget to Easily Toggle GPS, Bluetooth, Wireless, and Screen Brightness

2.2) 3G – requires a lot of power, so you can choose “2G Only” 

2.3) Backlight – adjust the backlight to be less bright (Settings –> Display –> Brightness)

2.4) Wi-Fi – disable Wi-Fi when you don’t need it

2.5) Bluetooth – disable Bluetooth when you don’t need it

2.6) GPS – disable GPS when you don’t need it

2.7) Disable Apps that Sync Constantly

For example you can use the “k-9”-Email App instead of the built-in Email application and activate the Push technology from “k-9” to get you mails. 

2.8) Background-Apps

Try the OS Monitor-App to see how much resources your running Apps consume!!!

But also other background-apps like twitter, facebook etc. can reduce the battery-time, so you can change the Update-Interval (Settings –> Background Updates) or try e.g. “MinFreeManager”-app or “SSSwitch” and configure the kernel settings to kill background-apps without installing a app for killing apps BUT this will reducing the multitasking features from your phone! 

2.9) More general Information

-> Complete Guide to Maximizing Your Android Phone’s Battery Life – How-To Geek

3) Battery Manager Apps

Maybe you can also try a Battery Manager App, but I don’t need/use it and if you try the above tips I think you will also not need it 
– “SuperPower
– “JuiceDefender

 

—————————————–

 

You can download more Apps for Spica here -> APKitchen  Files for Spica  (sugarsync.com is free (5 GB)) & here you can find some -> Wallpapers for Android 

Ostereier obwohl es nicht Ostern ist

Die folgenden “Eastereggs” lassen sich im Linux-Alltag finden und falls du auch noch ein paar Eastereggs kennst, würde ich die gerne hören… :-)


YouTube:

Snake auf Youtube spielen ->

1.) Video bei 0:00 anhalten

2.) Pfeiltaste nach Links drücken

3.) danach zusätzlich Pfeiltaste kurz nach Oben drücken

4.) Vorsicht, das Spiel geht sofort los… :-)


Telnet:

… ich verrate mal nichts ;-)

telnet towel.blinkenlights.nl
telnet towel.blinkenlights.nl 666


Google:

In meiner “Feature-Liste” von Google fehlt noch einiges… ;-)

– suche nach ASCII-Art und dann achte auf das Google-Logo -> http://www.google.com/search?q=ascii+art

– auch wenn ich das schon einmal erwähnt habe -> www.google.com/bsdwww.google.com/linuxwww.google.com/microsoft

– einfach einmal auf “Insert Coin” klicken und spielen -> http://www.google.com/pacman/

– folgendes bei Google eingeben :-) -> answer to life, the universe and everything


aptitude:

Ich habe vor einiger Zeit bereits über “aptitude” berichtet, hier noch ein paar Features…

aptitude moo
aptitude -v moo
aptitude -vv moo
aptitude -vvv moo
aptitude -vvvv moo
aptitude -vvvvv moo

Die Ausgabe der Befehle spare ich mir, will dir ja nicht den Spaß verderben… :-)


Zudem ist unter der aptitude-Hilfe noch ein Osterei zu finden:

aptitude -h | tail -n 1


Außerdem ist noch ein Feature in aptitude eingebaut -> Minesweeper

aptitude 
<Strg>+t
linux_aptitude_minesweeper


Vim:

Auch in meiner umfangreichen “vim“-Sammlung fehlt ein entscheidender Befehl:

:help 42 
:Ni!


wget:

wget -S http://wordpress.com -O- 2>&1 | grep hacker 


Gnome:

Unter GNOME-Desktop -> Eingabeaufforderung (Alt + F2) -> und folgendes eingeben ->

“free the fish” -> kleiner schwimmender Fisch auf dem Desktop (klick auf den Fisch und versuche ihn zu verscheuchen…) :D
“gegls from outer space” -> GEGLs from Outer Space


Firefox:

Folgendes bei Firefox in der Adresszeile eingeben. :-)

about:robots
about:mozilla


Debian / Ubuntu etc.:

… um das “Fake-Release” anzuzeigen, muss man in der Konsole den folgenden Befehl eingeben, klappt auch bei Ubuntu! :-)

zgrep "The.*Release" /usr/share/doc/dpkg/changelog.Debian.gz

zcat /usr/share/doc/linux-image-`uname -r`/changelog.Debian.gz | egrep -e "Release"

… und hier noch ein Befehl der generell unter Linux funktionieren sollte. ->

ddate


Arch Linux: (pacman)

In der Datei /etc/pacman.conf im Bereich unter [options] fügen wir ILoveCandy ein… und schon haben wir eine neue Folgschrittsanzeigt bei pacman… :-)

Cross-Compiling Android Kernel – Samsung GALAXY SPICA I5700

Hier möchte ich kurz erklären wie du mit Ubuntu (oder wie in meinem Fall Lubuntu) den Kernel von deinem Spica neu kompilieren kannst.

 

CAP2011012613141
CAP2011012613141

 

1.) Pakete nachinstallieren
aptitude install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev gawk texi2html texinfo automake libtool cvs gcj git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev texinfo gcj

 

2.) crosstool-ng installieren
cd ~
wget http://ymorin.is-a-geek.org/download/crosstool-ng/crosstool-ng-1.9.2.tar.bz2
tar -xjf crosstool-ng-1.9.2.tar.bz2
cd crosstool-ng-1.9.2/
./configure --prefix=${HOME}/ctng
make
make install

 

3.) Cross-Compiling installieren
export PATH=${PATH}:${HOME}/ctng/bin
cd ~
mkdir toolchain-build
cd toolchain-build

wget http://suckup.de/uClibc-0.9.31.config
wget http://suckup.de/toolchain-build.config
mv toolchain-build.config .config

ct-ng menuconfig
"C-library"  ---> (${HOME}/toolchain-build/uClibc-0.9.31.config) Configuration file 
ct-ng build
Abwarten… und hoffen ;-)

 

———-
ggf. muss man vorher noch die Quellen ändern, falls der Server auf der Gegenseite mal gerade nicht antwortet, in diesem (meinen) Fall war dies “mpfr” …
cd ~/ctng
grep -Ri mpfr * | grep get
vim lib/ct-ng-1.9.2/scripts/build/companion_libs/mpfr.sh
… nun habe ich in der Funktion “do_mpfr_get” die URL zu der angegebenen Datei ersetzt, fertig! Alternativ kann man die Dateien auch per Hand herunterladen und in das Verzeichnis ~/toolchain-build/targets/tarballs/ kopieren… ;-)
———-

 

4.) Kernel-Quellen per git herunterladen und anpassen
cd ~
mkdir i5700.2
cd i5700.2
git clone git://github.com/ch33kybutt/i5700-initramfs-froyo-2.6.29.6
mkdir kernel
cd kernel
git clone git://github.com/ch33kybutt/i5700-kernel
cd i5700-kernel
Nun den Pfad zum initramfs anpassen …
vim config.0.1
z.B.: (lars durch deinen User-Namen ersetzen)
[...]
CONFIG_INITRAMFS_SOURCE="/home/lars/i5700.2/i5700-initramfs-froyo-2.6.29.6/"
[...]
cp config.0.1 .config
… und auch die nächste Datei müssen wir ein wenig anpassen … (wobei ich dies per vim erledigt habe! :wq zum speicher)
vim /home/lars/i5700.2/i5700-initramfs-froyo-2.6.29.6/initrd.arm.initramfs_list
:%s/\/home\/ch33kybutt\/kernel\/i5700-initramfs-froyo-2.6.29.6\//\/home\/lars\/i5700.2\/i5700-initramfs-froyo-2.6.29.6\//g
vim Makefile
[...]
CROSS_COMPILE  := /home/lars/ownapps/arm-spica-linux-uclibcgnueabi/bin/arm-spica-linux-uclibcgnueabi-
[...]

 

5.) Cross-Compiling konfigurieren

make menuconfig
"General setup" -> Initramfs source file ("/home/lars/i5700.2/i5700-initramfs-froyo-2.6.29.6/initrd.arm.initramfs_list")
ggf. Versionsnummer etc. anpassen:
vim ~/i5700.2/i5700-initramfs-froyo-2.6.29.6/init.rc

 

6.) Cross-Compiling durchführen
Habe meinen Kernel mit folgenden FLAGS kompiliert… wenn jemand eine bessere Lösung hat würde ich dieser gerne hören…
make
cd ~/i5700.2/kernel/i5700-kernel/arch/arm/boot/
tar -cvf new_kernel_PDA.tar zImage

 

7.) neuen Kernel auf dem Android installieren
oder man versucht dies per ADB, habe dies jedoch noch nicht getestet…
adb push zImage /sdcard
adb shell
/xbin/bml_flash boot /sdcard/zImage

 

weitere Infos:

Arch Linux – Installation

Warum sollte man Arch Linux verwenden?

Als erstes sei gesagt, dass diese Distribution nichts für Anfänger ist, ABER wenn man als Linux-User schon einige Erfahrungen mit der Kommandozeile gesammelt hat und z.B. Debian bereits ohne grafische Oberfläche installiert hat, kann man viel von diesem Linux-System lernen. Das “lernen” möchte ich an dieser Stelle noch einmal betonen, denn wer nichts über Linux lernen möchte und das System nur zum arbeiten nutzen möchte, der ist hier falsch. Das fängt bereits bei der Installation an, die ohne grafische Oberfläche daherkommt und das aus gutem Grund, denn wer an dieser Hürde bereits scheitert, sollte das System auch nicht nutzen. Momentan habe ich “Arch Linux” auf meinem normalen PC installiert (+ Windows7), auf meinem Netbook habe ich jedoch “Ubuntu 11.04” installiert, da es einfach out-of-the-box funktioniert und ich somit bisher noch keine großen Probleme damit hatte.

Die Philosophie von Arch Linux -> https://wiki.archlinux.org/index.php/The_Arch_Way -> Simplicity is the ultimate sophistication. (~ Höchste Verfeinerung mündet im Einfachen.) — Leonardo Da Vinci


Hier noch einige hilfreiche Links zur Installation:
https://wiki.archlinux.de/title/Anleitung_f%C3%BCr_Einsteiger
https://wiki.archlinux.de/title/Offizielle_Arch_Linux_Installations-Anleitung


Einleitung

In diesem HowTo beschreibe ich wie man Archlinux installiert und ggf. wenn dies gewünscht ist optimiert. Am Ende haben wir ein schnelles Linux-System, welches wir ganz nach unseren Wünschen anpassen können, mit der neusten Software ausgestattet ist und eine grafische Oberfläche hat. “Arch Linux” hat ein wunderschönes Wiki, welches sehr umfangreich ist und auch bei Problemen mit anderen Distributinen weiterhilft, jedoch kann man am Anfang ein wenig von den ganzen Infos erschlagen werden, daher schreibe ich auch gerade dieses HowTo. :-) (Ggf. kann man die Installatin auch im Vorfeld mithilfe von VirtualBox – http://www.virtualbox.org/ ausprobieren.)

Zu aller erst muss man sich das aktuelle Image von Arch Linux runterladen. -> http://ftp.hosteurope.de/mirror/ftp.archlinux.org/iso/latest/ <- anschließend die ISO auf eine CD brennen und es kann losgehen!


1.) Boot

Beim start der CD wählen wir folgenden Eintrag im Boot-Menü -> “Boot Arch Linux” …


arch_linux_grub
arch_linux_grub


2.) die Shell

… dann kommen wir zum nächsten Bildschirm und landen direkt in der Shell, hier führen wir folgenden Befehl aus, um das deutsche Tastaturlayout zu laden, nachdem wir uns per root eingeloggt haben. PS: die meisten Befehle funktionieren nicht nur unter Arch Linux ;-)


loadkeys de

[stextbox id=”info”]Tipp: y = z[/stextbox]

arch_linux_install_1
arch_linux_install_1

3.) Start der Installation

Als nächstes möchten wir die Installation starten …

/arch/setup

… und installieren das Grundsystem.

arch_linux_install_2
arch_linux_install_2


4.) Installationsquelle Auswählen

“Select Source”: Nun müssen wir auswähen, on wir die Daten von der CD-ROM oder Dateien aus dem Internet nutzen möchten, falls du die Net-Install-ISO heruntergeladen hast, wählst du “net” aus, ansonsten “cd”.


arch_linux_install_3
arch_linux_install_3

(mit “Cancel” kommt du immer einen Menü-Punkt zurück)


5.) Time

“Set clock”: Danach stellen wir das Datum und die Zeit ein.


6.) Festplatte vorbereiten

“Prepare Hard Drive(s)”: Nun müssen wir Partitione erstellen und festlegen, wo diese genutzt werden sollen (mountpoints) ggf. kann man zum erstellen der Partitionen auch im Vorfeld z.B. http://gparted.sourceforge.net/livecd.php verwenden.


arch_linux_install_4
arch_linux_install_4


6.1) “Auto-Prepare” : Wähle diese Option nur aus, wenn du allein “Arch Linux” auf einer Festplatte instllieren möchtest, da die automatische Partitionierung die vollständige Festplatte benutzt.


arch_linux_install_5
arch_linux_install_5


6.2) “Manually Partition Hard Drives”: Wähle diese Option, wenn du die Partitionen entweder bereits im Vorfeld angelegt bzw. diese nun anlegen möchtest. Es folgt meine akuelle Konfiguration


Windows_and_Linux
Windows_and_Linux


7.) Grundsystem auswählen

“Select Packages”: Hier wählen wir das Grundsystem (base) aus und unter dem Punnkt “base-devel” -> “wireless_tools”, falls du W-Lan nutzen möchtest.


arch_linux_install_11
arch_linux_install_11


8.) Grundsystem installieren

“Install Packages”: Nachdem wir diesen Punkt ausgewählt haben, wird das Grundsystem nun installiert.


9.) Grundsystem konfigurieren

“Configure System”: Kommen wir nun zur Konfiguration…


/etc/rc.conf:

Hier werden die meisten Grundeinstellungen vorgenommen, z.B. die Sprache und der Name des neuen Systems …

[...]
LOCALE="de_DE.UTF-8"
HARDWARECLOCK="localtime"
TIMEZONE="Europe/Berlin"
KEYMAP="de-latin1-nodeadkeys"
loadkeys de
[...]
HOSTNAME="ArchLinux"
[...]

Ggf. muss man noch andere Dinge im Netwerk-Bereich anpassen, z.B. falls “eth0” nicht das genutzte Netzwerk-Interface ist.

[stextbox id=”info”]Tipp: [strg] + [alt] + [f2] -> ifconfig[/stextbox]


/etc/fstab:

“In der Datei /etc/fstab sind alle Datenträger bzw. Partitionen eingetragen, die beim Systemstart automatisch eingehängt werden sollen [3]. Zusätzlich enthält fstab noch einige vom System/Kernel benötigte Dateisysteme. Außerdem kann man durch entsprechende Einträge in fstab das temporäre Einbinden von Datenträgern vorbereiten (siehe mount) und entfernte Dateisysteme oder Netzwerk-Freigaben statisch ins lokale Dateisystem einbinden (z.B. mit sshfs oder cifs).” – http://wiki.ubuntuusers.de/FSTAB


In dieser Datei musst du wahrscheinlich momentan nichts ändern, da “Arch Linux” die entsprechenden Einträge bereits gesetzt hat.


arch_linux_install_12
arch_linux_install_12


/etc/mkinitcpio.conf:

Diese Datei konfiguriert “initramfs” (http://de.wikipedia.org/wiki/Initramfs) und auch hier musst du nichts ändern.


/etc/resolv.conf:

Falls du statische IP-Adressen in deinem Netzwerk einsetzt und keinen DHCP-Server aktiv hast, musst du hier den zu nutzenden DNS-Server eintragen, falls dies nicht der Fall ist brauchst du auch diese Datei nicht ändern.


/etc/hosts:

Hier sollte “Arch Linux” bereits den Hostnamen, welcher unter “/etc/rc.conf” angegeben wurde automatisch eingetragern haben, falls dies nicht der Fall sein sollte, muss man dies wie folgt anpassen.


arch_linux_install_13
arch_linux_install_13

(ArchLinux durch deinen eigenen Hostnamen ersetzen)


/etc/hosts.deny & /etc/hosts.allow:

Diese Dateien sind nur hilfreich, wenn du einen SSH-Server auf dem PC installieren möchtest, denn hiermit kannst du bestimmte IP-Adressen ausspeere bzw. erlauben.


/etc/locale.gen:

In dieser Datei musst du einen Zeichensatz, am besten den deutschen freischalten, indem du das “#” am Anfang der Zeile entfernst…

[...]
de_DE.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
[...]


/etc/pacman.conf:

Pacman ist der Paket-Manager von “Arch Linux”, vergleichbar mit apt-get von Debian/Ubuntu und mithilfe dieser Datei kann man das Programm Konfigurieren, z.B. welche Quellen zur Verfügung stehen: [core], [extra], and [community]. Wenn du gerade ein 64-Bit System installierst, solltest du auch noch [multilib] freischalten, indem du diese einkommentierst. Ggf. kann man auch noch [testing] hinzufügen, aber wie der Name schon sagt, sind diese Quellen zum testen und nicht zum arbeiten gedacht.

[...]
SyncFirst = pacman kernel26-headers
Architecture = auto
[...]
#[testing]
#Include = /etc/pacman.d/mirrorlist
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
[community]
Include = /etc/pacman.d/mirrorlist
#[community-testing]
#Include = /etc/pacman.d/mirrorlist
[multilib]
Include = /etc/pacman.d/mirrorlist
[...]

weiter Infos zu “pacman.con” findest du unter: http://www.archlinux.org/pacman/pacman.conf.5.html


/etc/pacman.d/mirrorlist:

In dieser Datei gibt man an, von welchem Spiegel-Server Pacman die Daten nun wirklich laden soll. Da wir aus Deutschland die Server in Deutschland wahrscheinlich schneller erreichen als im Ausland, schalten wir einige der Server unter “Germany” frei, indem wir diese einkommentieren. Später können wir mithilfe des Scripts “rankmirrors” (https://wiki.archlinux.org/index.php/Beginners’_Guide#.2Fetc.2Fpacman.d.2Fmirrorlist) die Server herausfinden, welche wirklich für uns am schnellsten sind oder ggf. auch die Quellen hier generieren lassen: http://www.archlinux.org/mirrorlist/


Sobald du die Konfiguration abgeschlossen hast, musst du unten in diesem Menü das Root-Passwort und deine Änderungen mit “Done” bestätigen.


arch_linux_install_14
arch_linux_install_14


10.) der Bootlaoder (GRUB)

“Install Bootloader”: Es kommt natürlich darauf an, was du zuvor konfiguriert hast, jedoch will man meistens den aktuellen Bootloader ersetzen. Standard: /dev/sda (sda wäre hier die Festplatte auf die Arch installiert ist) ggf. Hilfe der folgede kleie Text um zu verstehen, wohin man den Bootloader installieren muss. -> http://suckup.de/blog/2011/01/25/der-bootvorgang-wie-faehrt-ein-pc-hoch/


11.) Installation beenden

“exit”: Nachdem der Bootloader erfolgreich installiert wurde, beenden wir die Installation und starten das System neu (reboot)


arch_linux_install_15
arch_linux_install_15


12.) Start & Update

Nun starten wir unser Arch Linux und laden in der Kommandozeile, da wir bisher noch nichts weiter installiert haben. :-) Als nächstes führen wir ein Update mithilfe des folgeden Befehls aus.

pacman -Syu


arch_linux_install_16
arch_linux_install_16


13.) User anlegen + sudo-Rechte gewähren

useradd -m -g users -G audio,lp,optical,storage,video,wheel,games,power -s /bin/bash USERNAME

… und “USERNAME” durch deinen eigentlichen User-Namen ersetzten. Hier folgen weiter Infos zu den Gruppen (audio,lp,optical…) : https://wiki.archlinux.org/index.php/Groups


arch_linux_install_17
arch_linux_install_17

Als nächstes vergeben wir ein passwort für den neuen User…

passwd USERNAME

… und installieren nun “sudo”, so dass man als normaler User Programme mit Root-Rechten ausführen kann, wenn dies gefordert ist.

pacman -S sudo

[stextbox id=”info”]Tipp: pacman -Ss sudo -> sucht nach dem Paket sudo[/stextbox]


Nun müssen wir noch z.B. einer der angegebenen Gruppen sudo-Rechte erteilen…

chmod o+w /etc/sudoers
vi /etc/sudoers
chmod o-w /etc/sudoers
su USERNAME
sudo su


sudoers
sudoers


[stextbox id=”info”]Tipp: man kann auch z.B. nano anstatt vi verwenden oder vim nachinstallieren (pacman -S vim)[/stextbox]


14.) Sound: installiere ALSA

Bevor wir wir jedoch ALSA installieren benötigen wir folgedne Info …

cat /proc/asound/modules

(Ausgabe: z.B. 0 snd_intel8x0)


… und editieren anschließend folgende Datei, um unsere Sound-Karte hinzuzufügen.

vim /etc/modprobe.d/modprobe.conf

(z.B. options snd slots=snd-intel8x0,snd-pcsp)


Nun können wir Alsa installieren …

pacman -S alsa-utils alsa-oss

… danach starten wir “alsamixer” als normaler User (nicht root) …

su USERNAME
alsamixer


arch_linux_install_18
arch_linux_install_18


… mit [ESC] beenden wir alsamixer und werden wieder root [Strg + D] (logout USERNAME -> zurück zu root) und speichern diese Einstellungen mit dem folgendem Befehl ab.

alsactl store


Nun müssen wir den Dienst noch in der Konfig eintragen, so dass Alsa auch gestartet wird.

vim /etc/rc.conf
[...]
DAEMONS=(syslog-ng network netfs crond alsa)
[...]


weitere Infos zu ALSA: https://wiki.archlinux.org/index.php/ALSA


15.) Desktop installieren: Xorg

Hier müssen wir als erstes Xorg per pacman installieren …

pacman -S xorg

[stextbox id=”info”]Tipp: das Paket “mesa” wird ebenfalls benötig, falls du 3D-Effekte nutzen willst[/stextbox]


… und wir müssen die Grafikkarten-Treiber installiern – ich habe dies per “Yaourt” installiert, da dieses Programm auch auf die “Arch User Repository” (https://wiki.archlinux.org/index.php/AUR) zurückgreifen kann. Wir schauen mit “lspci” nach welche Grafikkarte wir haben.

z.B.:

lspci | grep VGA

01:05.0 VGA compatible controller: ATI Technologies Inc RS880 [Radeon HD 4250]

Und installieren demensprechend den gewünschten Treiber, doch zuvor installieren wir noch “Yaourt” (http://archlinux.fr/yaourt-en#get_it) – die bereits erwähnten AUR-Pakete haben keinen Support, installation auf eigene Gefahr!

pacman -S base-devel
vim /etc/pacman.conf
[...]
[archlinuxfr]
Server = http://repo.archlinux.fr/x86_64
#Server = http://repo.archlinux.fr/i686
[...]
pacman -Sy yaourt
sudo yaourt ati amd | grep install

13 aur/catalyst-hook 10.12-1 [installed] (37)
23 aur/catalyst-utils 10.12-1 [installed] (147)

z.B.: suche Pakete für ATI:

yaourt -Ss ati amd

[stextbox id=”info”]Tipp: yaourt – es wird zudem angezeigt, wie viele Leute das jeweillige Paket nutzen und welche Pakete nicht mehr aktuell sind[/stextbox]

z.B.: installere Pakete für ATI:

yaourt -Sa catalyst-hook catalyst-utils
pacman -S kernel26 kernel26-headers
aticonfig --initial --input=/etc/X11/xorg.conf
vim /etc/X11/xorg.conf
[...]
Section "Device"
Identifier "aticonfig-Device[0]-0"
Driver "fglrx"
BusID "PCI:1:5:0"
Option "DRI" "true"
EndSection
[...]

weitere Infos zu Xorg: https://wiki.archlinux.de/title/Xorg

weitere Infos zu Nvidia: https://wiki.archlinux.de/title/Nvidia

weitere Infos zu ATI/AMD:https://wiki.archlinux.de/title/ATI


16.) Desktop installieren: Input

pacman -S xf86-input-keyboard xf86-input-mouse

ggf. muss bei Laptops noch folgendes Paket installiert werden …

pacman -S xf86-input-synaptics


17.) Desktop installieren: Gnome

pacman -S ttf-dejavu
yaourt -Sa ttf-ms-fonts

ggf. kann man auch noch die 3D-Effekte für Gnome installieren … (https://wiki.archlinux.org/index.php/Compiz)

pacman -S gnome gnome-extra gnome-system-tools
pacman -S compiz-fusion-gtk

Und noch ein neuer Dienst wird beim Boot gestartet…

[stextbox id=”info”]Tipp: mit @ werden die Dienste im hintergrund ausgeführt[/stextbox]

vim /etc/rc.conf
DAEMONS=(syslog-ng dbus hal network netfs crond alsa gdm)

Nun einmal neustarten und …

reboot

… zu guter letzt Compiz noch im autostart von Gnome unterbringen.

cd ~/.config/autostart/
vim compiz.real.desktop
[Desktop Entry]
Comment=
Name=compiz - 3D Desktop
Exec=/usr/bin/compiz --ignore-desktop-hints --replace move resize place decorati
Name[de_DE]=compiz - 3D Desktop
Comment[de_DE]=
Hidden=false
Type=Application
X-GNOME-Autostart-enabled=true


Nun sollte dein neues Linux-System “gdm” -> “Gnome” -> “Compiz” -> “Emerald” starten… und die Installation wäre somit geschafft. ;-)


18.) Optimierungen

Hier möchte ich kurz einige Dinge zeigen, welche nicht mehr zur Installation gehören! Wer weitere Hilfe benötig, sollte sich einmal das ArchLinux-Wiki genauer anschauen: https://wiki.archlinux.de/


neuer Kernel: (http://liquorix.net/)

sudo yaourt -Sa kernel26-lqx


NTFS-Unterstützung:

sudo yaourt -S ntfs-3g


Schlanke E-Mail Client + gute Plugins: (http://suckup.de/blog/2010/02/13/fast-mail-client-claws-mail/)

sudo yaourt -S claws-mail claws-mail-extra-plugins


Schneller Browser: (portiert von Ubuntu [ppa] zu ArchLinux)

sudo yaourt -Sa chromium-browser-ppa
sudo yaourt -Sa chromium-browser-l10n-ppa chromium-browser-inspector-ppa chromium-codecs-ffmpeg-extra-ppa


Eine neue Shell – alternative zu Bash: (http://suckup.de/blog/2010/09/17/zshrc/)

pacman -S zsh
chsh -s /bin/zsh `whoami`


Recompile Archlinux: (+CFlags)

sudo yaourt -Sa pacbuilder-svn


Nun müssen wir einige Prozessorspezifische Infos suchen, dazu müssen wir jedoch erst einmal wissen, welchen Prozessor wir genau haben…

cat /proc/cpuinfo

oder

sudo yaourt -Sa cpu-g

und hier findest du die Infos. :-)

http://en.gentoo-wiki.com/wiki/Safe_Cflags & http://www.gentoo.org/doc/en/gcc-optimization.xml


Mit dem nächsten Befehl, können wir schaue, welche FLAGS bisher gesetzt sind…

sudo grep -R CFLAGS /etc/

… und tragen die neuen FLAGS in der folgenden Datei ein.

vim /etc/pacbuilder.conf

z.B.:

[...]

CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=amdfam10 -O2 -pipe"
CXXFLAGS="${CFLAGS}"
LDFLAGS="-Wl,--hash-style=gnu -Wl,--as-needed"
#-- Make Flags: change this for DistCC/SMP systems
MAKEFLAGS="-j4"


Der nächste Befehl baut (compiliert) nun alle Pakete angepasst für dein System neu.

sudo pacbuilder -v --world

Jabber – XMPP + StudiVZ – Facebook

Was ist Jabber?

XMPP (früher Jabber) ist ein Nachrichten-Protokoll (Instant Messaging), so dass heute eigentlich niemand mehr auf ICQ, MSN etc. angewiesen ist. Es gibt viele Servern (z.B. jabber.ccc.de oder jabber.org) welche Jabber nutzen, bei diesen Servern kann man sich kostenlos einen Account erstellen und damit auch Kontakten auf anderen Jabber-Servern kontaktieren. Es gibt viele Vorteile gegenüber proprietären Lösungen, z.B. kann man die Kommunikation verschlüsseln, man kann seinen eigenen Jabber-Server installieren, man kann Chat-räume (mit Passwortschutz) anlegen, sich mehrfach anmelden und fast jeder hat bereits einen Jabber-Account (auch wenn es die wenigsten wissen). Ich will an dieser Stelle gar nicht weiter auf die Vor- und Nachteile eingehen, dass haben andere bereits getan. -> blog.jbbr.net/against-icq/ & de.wikipedia.org/wiki/ICQ#Kritik


Wer sich noch gar nicht nach einer Alternative zu ICQ umgesehen hat, sollte einmal auf der folgenden Webseite schauen, wie man ein Jabber kompatibles Chat-Programm installiert. -> einfachjabber.de/oslist

Und wer direkt im Browser chatten möchte, kann sich z.B. folgende Webseite anschauen www.meebo.com oder einen Jabber-Server nutzen, welcher einen Web-Chat anbietet. z.B.: -> www.ubuntu-jabber.de


Bei den Programmen muss man zwischen Programmen unterscheiden, welche voll auf Jabber ausgelegt sind (z.B. psi) und denen, wo man zusätzliche andere Protokolle nutzen kann (Multi-Protokoll-Clients). In Kombination mit einem dafür ausgelegtem Jabber-Server, welcher sogenannte Transports (Gateways) anbiete (leider tun dies aus rechtlichen Gründen nicht alle) kann man dann auch ICQ, AIM, Yahoo Messenger, MSN uvm. direkt über Jabber erreichen. Dabei sollte man jedoch beachten, dass eventuelle Änderungen z.B. von ICQ die Verbindung zwischen “PC” -> “Transport” -> “ICQ” behindern können. -> www.swissjabber.ch/index.php/Transports & de.wikipedia.org/wiki/XMPP-Transport



Jabber-Transport
Jabber-Transport



Hier noch eine Übersicht über einige Jabber-Server + Transports. So sieht man z.B. schnell, dass gmx-Server Transports anbietet. -> www.jabberes.org/servers/servers_by_times_online.html


Wer nutzt Jabber?

Wer bereits über eine Gmail (Google-Mail), GMX oder Web.de E-Mail Adresse verfügt kann diese Adresse als Jabber Account benutzen. Jeder der bei GMX oder Web.de angemeldet ist hat daher bereits einen Jabber-Account, Benutzername und Passwort sind identisch. Zudem benötigt man (normalerweise) nur eine Adresse, um mit allen anderen Jabber-Usern zu kommunizieren, somit ist man nicht mehr auf einen zentralen Server (Dienst) angewiesen. Normalerweise habe ich in Klammern geschrieben, da z.B. “Facebook” oder auch “StudiVZ / SchülerVZ / MeinVZ” Jabber anbieten, dies jedoch nicht nach dem Standard betreiben, so dass man zwar mit seinen Kontakten z.B. seinen Facebook-Freunden chatten kann,  jedoch nicht zu anderen Servern kommunizieren kann.



Jabber-Network
Jabber-Network


Wie nutze ich Jabber?

1.) Entscheidung

Wie bereits in der Einführung beschrieben, benötigen wir als erstes einen Client (Chat-Programm), daher müssen wir uns entscheiden, ob wir voll auf den Jabber-Dienst setzen und ICQ etc. über Transports erreichen oder ICQ etc. parallel im Client einrichten möchten. Positiv an den Transports ist, dass man (normalerweise) nur noch einen Account benötigt, die Verbindung zu anderen Accounts wie ICQ oder MSN erledigt dann der Jabber Server automatisch, nachdem man dies einmal eingestellt hat. Wie bereits beschrieben bieten dies jedoch nicht alle Jabber-Server bzw. Clients an. Falls du auf dieses Feature verzichtest, solltest du dir auch einmal den Client (Instant Messenger) “Pidgin” anschauen -> auf der folgenden Seite findest du eine Liste mit den unterstützten Protokollen und viele weitere Tipps zur Konfiguration, so kann man z.B. Twitter, Identi.ca oder auch Skype in Pidgin einbinden. -> wiki.ubuntuusers.de/pidgin


2.) Account anlegen

Um einen Account auf einem Server anzulegen, braucht man meistens nur den soeben erwähnten Client. Dann musst du dir einen Benutzernamen und eine Domain auf dem Server aussuchen, wobei die Domain meist vorgegeben ist. Die Kombination aus Benutzernamen und Domain wird dann deine persönliche Jabber ID (JID), mit der dich andere im Netzwerk anschreiben können. Aufgebaut ist eine JID ähnlich einer E-Mail Adresse, beispielsweise “voku@jabber.ccc.de”. Eine gute Anleitung findet man z.B. hier -> www.ubuntu-jabber.de/Konto-erstellen


3.) Account nutzen

Natürlich kann man auch andere Anbieter nutzen, welche Jabber-Dienste anbieten. Hier eine kleine Übersicht + Konfiguration.


GoogleTalk per Jabber:

Entweder man verwendet den Client von Google: GogleTalk (Windows XP oder höher erforderlich) oder einfach einen alternativen Client. (z.B.: Username@gmail.com)

  • Benutzer: Username
  • Domain: gmail.com bzw. googlemail.com
  • Jabber ID: Username@gmail.de
  • Passwort: “dein normales Google-Passwort”
  • Port: 5222 (Standard – muss ggf. nicht angegeben werden)


GMX per Jabber:

Wie bereits erwähnt bietet GMX, Transports (Gateways) in folgende Netze an z.B.: ICQ, Aim, MSN, Yahoo dies muss jedoch auch die Client-Software mitmachen.

Auch hier kann man wieder den hauseigenen Messenger nutzen: GMX-Messenger (Windows XP oder höher erforderlich) “einfach” installieren und loslegen, für andere Clients: (z.B.: Username@gmx.de)

  • Benutzer: Username
  • Domain: gmx.de bzw. gmx.net
  • Jabber ID: Username@gmx.de
  • Passwort: “dein normales GMX-Passwort”
  • Verbindungsserver: xmpp-gmx.gmx.net
  • Port: 5222 (Standard – muss ggf. nicht angegeben werden)


Web.de per Jabber:

Und auch hier kann man einen Windows-Client direkt von Web.de nutzen: WEB.DE-Messenger (Windows XP oder höher erforderlich) oder einen anderen Client nutzen. (z.B.: Username@web.de)

  • Benutzer: Username
  • Domain: web.de
  • Jabber ID: Username@web.de
  • Passwort: “dein normales Web.de-Passwort”
  • Verbindungsserver: xmpp-webde.gmx.net
  • Port: 5222 (Standard – muss ggf. nicht angegeben werden)


studiVZ & meinVZ per Jabber:

Der sogenannte “Plauderkasten” kann nun auch per Jabber direkt vom Desktop genutzt werden. :-) Aber wie gesagt, nicht zu anderen Jabber-Servern. -> developer.studivz.net/2010/06/30/xmpp-chat-beta/ (z.B.: test@test.de)

  • Benutzer: test\40test.de
  • Domain: vz.net
  • Jabber ID: test\40test.de@vz.net
  • Passwort: “dein normales vz-Passwort”
  • Verbindungsserver: jabber.vz.net
  • Port: 5222 (Standard – muss ggf. nicht angegeben werden)


schülerVZ per Jabber:

Der sogenannte “Plauderkasten” kann nun auch per Jabber direkt vom Desktop genutzt werden. :-) Aber wie gesagt, nicht zu anderen Jabber-Servern. -> developer.studivz.net/2010/06/30/xmpp-chat-beta/ (z.B.: test@test.de)

  • Benutzer: test\40test.de
  • Domain: schuelervz.net
  • Jabber ID: test\40test.de@schuelervz.net
  • Passwort: “dein normales vz-Passwort”
  • Verbindungsserver: jabber.schuelervz.net
  • Port: 5222 (Standard – muss ggf. nicht angegeben werden)


Facebook per Jabber:

Der “Facebook-Chat” kann ebenfalls per Jabber direkt vom Desktop genutzt werden, aber vorher muss man sich einen Nutzernamen aussuchen http://www.facebook.com/username/ (z.B.: lars.moelleken)

  • Benutzer: lars.moelleken
  • Domain: chat.facebook.com
  • Jabber ID: lars.moelleken@chat.facebook.com
  • Passwort: “dein normales facebook-Passwort”
  • Port: 5222 (Standard – muss ggf. nicht angegeben werden)


4.) Fertig

Chatten und hinzufügen von Kontakten funktioniert wie man dies bei ICQ etc. gewohnt ist, mit dem kleinen Unterschied, dass man die Nutzer Jabber IDs benutzt, also nutzer@server. An dieser Stelle möchte ich noch einmal darauf hinweisen, dass Facebook & VZ-Netzwerk einen geschlossenen Jabber-Dienst anbieten, so dass man nicht zu anderen Jabber-Servern kommunizieren kann.

transparenten Proxy per SSH umgehen

Ich hatte bereits einmal über das Thema “Ports via ssh weiterleiten” geschrieben, um z.B. pop3 oder smtp verschlüsselt zu nutzen. Heute zeige ich aus aktuellem Anlass, wie man mithilfe SSH einen transparenten Proxy im Netzwerk umgehen kann. Im Studentenwohnheim (Krefeld) ist jemand auf die glorreiche Idee gekommen alle Webseiten auf denen Filesharing betrieben werden kann, zu sperren.

z.B.: www.dropbox.com


Internet-Beschwerdestelle
Internet-Beschwerdestelle

(Tipp: mit “Alt” + “Druck” bekommt man einen Screenshot vom gewählten Fenster)


1.) Tunnel auf dem Client zum Server erstellen

Der folgende Befehl erstellt einen Socks kompatiblen Proxy per SSH-Tunnel. Wie im anderen Blog-Post beschrieben, kann man z.B. mit dem Parameter “-L” eine Verbindung zu einem anderen Proxy per SSH aufbauen.


ssh -D 3128 -fN user@server

(ssh -L 3128:proxyserver:3128 -fN user@proxyserver)


2.) SSH-Tunnel verwenden


Nun können wir einen neuen Proxy einstellen, unter Gnome …

System > Einstellungen > Netzwerk-Proxy

… als Socks-Rechner tragen wir nun “localhost” und den Port “3128” ein.


Bildschirmfoto-Netzwerk
Bildschirmfoto-Netzwerk


C-Programm – Dateien kopieren unter Linux

In dem Buch “Linux-Programmierung” habe ich einige interessante Beispiele zum kopieren von Dateien unter Linux gefunden.

#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

int main() {
	char c;
	int in, out;

	// open - mit dem Systemaufruf open kann ein neuer Dateideskriptor erstellt werden
	// ---------------------
	// Modus -> Beschreibung
	// ---------------------
	// O_RDONLY -> nur zum lesen oeffnen
	// O_WONLY	-> nur zum schreiben oeffnen
	// O_RDWR	-> zum lesen und schreiben oeffnen
	// ---------------------
	// optionaler Modus -> Beschreibung
	// ---------------------
	// O_APPEND	-> am Ende der Datei schreiben
	// O_TRUNC	-> Inhalt der vorhandenen Datei wird geloescht
	// O_CREAT	-> erstellt die Datei mit Berechtigungen 
	// O_EXCL	-> stellt sicher, dass nicht zwei Programme
	//				die selbe Datei, zur gleichen Zeit erstellen 
	// ---------------------
	// Berechtigung -> Beschreibung
	// ---------------------
	// S_IRUSR 	-> Lesen, Eigentuemer (owner)
	// S_IWUSR	-> Schreiben, Eigentuemer (owner)
	// S_IXUSR	-> Ausfuehren, Eigentuemer (owner)
	// S_IRGRP	-> Lesen, Gruppe (group)
	// S_IWGRP	-> Schreiben, Gruppe (group)
	// S_IXGRP	-> Ausfuehren, Gruppe (group)
	// S_IROTH	-> Lesen, Andere (others)
	// S_IWOTH	-> Schreiben, Andere (others)
	// S_IXOTH	-> Ausfuehren, Andere (others)
	//
	// weitere Infos unter: man 2 open 
	//
	// 1 MB Datei erstellen -> dd if=/dev/zero of=file.in bs=1024 count=10240
	// 
	// Datei "file.in" zum lesen oeffnen
	in = open("file.in", O_RDONLY);
	// Datei "file.out" erstellen (Eigentuemer -> Lesen + Schreiben) 
	out = open("file.out", O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);
	// Zeichen fuer Zeichen einlesen ...
	while(read(in,&c,1) == 1) {
		// ... und jedes Zeichen in die neue Datei schreiben
		write(out,&c,1);
	}
	exit(0);
}

Wir gehen in diesem Beispiel davon aus, dass die Datei “file.in” (10 MB) bereits vorhanden ist.

Test:

dd if=/dev/zero of=file.in bs=1024 count=10240
time ./copy_system

Ausgabe:

./copy_system  7,54s user 88,56s system 99% cpu 1:36,23 total

Wie wir sehen, dauerte der Kopiervorgang insgesamt ~ 1 1/2 Minuten, da wir die Datei Zeichen für Zeichen kopiert haben, im nächsten Beispiel werden jeweills 1024 Byte eingelesen und in die neue Datei geschrieben.

#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

int main() {
	char block[1024];
	int in, out, nread;

	// open - mit dem Systemaufruf open kann ein neuer Dateideskriptor erstellt werden
	// ---------------------
	// Modus -> Beschreibung
	// ---------------------
	// O_RDONLY -> nur zum lesen oeffnen
	// O_WONLY	-> nur zum schreiben oeffnen
	// O_RDWR	-> zum lesen und schreiben oeffnen
	// ---------------------
	// optionaler Modus -> Beschreibung
	// ---------------------
	// O_APPEND	-> am Ende der Datei schreiben
	// O_TRUNC	-> Inhalt der vorhandenen Datei wird geloescht
	// O_CREAT	-> erstellt die Datei mit Berechtigungen 
	// O_EXCL	-> stellt sicher, dass nicht zwei Programme
	//				die selbe Datei, zur gleichen Zeit erstellen 
	// ---------------------
	// Berechtigung -> Beschreibung
	// ---------------------
	// S_IRUSR 	-> Lesen, Eigentuemer (owner)
	// S_IWUSR	-> Schreiben, Eigentuemer (owner)
	// S_IXUSR	-> Ausfuehren, Eigentuemer (owner)
	// S_IRGRP	-> Lesen, Gruppe (group)
	// S_IWGRP	-> Schreiben, Gruppe (group)
	// S_IXGRP	-> Ausfuehren, Gruppe (group)
	// S_IROTH	-> Lesen, Andere (others)
	// S_IWOTH	-> Schreiben, Andere (others)
	// S_IXOTH	-> Ausfuehren, Andere (others)
	//
	// weitere Infos unter: man 2 open 
	//
	// 1 MB Datei erstellen -> dd if=/dev/zero of=file.in bs=1024 count=10240
	// 
	// Datei "file.in" zum lesen oeffnen
	in = open("file.in", O_RDONLY);
	// Datei "file.out" erstellen (Eigentuemer -> Lesen + Schreiben) 
	out = open("file.out", O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);
	// 1024 Byte werden eingelesen ...
	while((nread = read(in,block,sizeof(block))) > 0) {
		// ... und in die neue Datei geschrieben
		write(out,block,nread);
	}
	exit(0);
}

Test:

rm file.out
time ./copy_block 

Ausgabe:

./copy_block  0,01s user 0,15s system 98% cpu 0,158 total

Hier dauerte der gleiche Vorgang nur noch ~ 0,16 Sekunden. Daher nutzt man zum kopieren von ganzen Festplatten auch gerne “dd”! :-) Zum Schluss noch ein Beispiel, wo die Bibliothek (stdio.h) von C genutzt wurden.

#include <stdio.h>
#include <stdlib.h>

int main() {
	char c;
	FILE *in, *out;

	// fopen - oeffnet eine Datei 
	// ---------------------
	// Modus -> Beschreibung
	// ---------------------
	// r	-> nur zum lesen oeffnen
	// w	-> nur zum schreiben oeffnen
	// a	-> am Ende der Datei anhaengen
	// r+	-> zum Aktualisieren oeffnen (schreiben + lesen)
	// w+	-> zum Aktualisieren oeffnen, auf Null-Laenge abschneiden
	// a+	-> zum Aktualisieren oeffnen, am Ende der Datei anhaengen
	//
	// weitere Infos unter: man fopen 
	//
	// fgetc - liefert das naechste Byte als Zeichen aus einem Datei-Stream zurueck,
	// 			die Funktion liefert EOF (End of File) beim Ende der Datei bzw.
	//			bei einem Fehler zurück
	//
	// weitere Infos unter: man fgetc
	//
	// fputc - schreibt ein Zeichen in einen Ausgabe-Datei-Stream
	//
	// weitere Infos unter: man fputc
	//
	// 1 MB Datei erstellen -> dd if=/dev/zero of=file.in bs=1024 count=10240
	// 
	// Datei "file.in" zum lesen oeffnen
	in = fopen("file.in", "r");
	// Datei "file.out" erstellen (Eigentuemer -> Lesen + Schreiben) 
	out = fopen("file.out", "w");
	// Zeichen fuer Zeichen einlesen (+ interner Puffer in der Struktur FILE) ...
	while((c = fgetc(in)) != EOF) {
		// ... und jedes Zeichen in die neue Datei schreiben
		fputc(c,out);
	}
	exit(0);
}

Test:

rm file.out
time ./copy_system_2

Ausgabe:

./copy_system_2  1,10s user 0,09s system 99% cpu 1,196 total

Hier brauchen wir für 10 MB zirka 1,2 Sekunden, was um einiges schneller ist als das erste Beispiel, wo die Zeichen einzeln kopiert wurden.

C-Programm – Umgebungsvariablen unter Linux

In dem Buch “Linux Programmierung” habe ich ein schönes Beispiel für Umgebungsvariablen unter Linux gefunden, welches ich gerade ein wenig Kommentiert habe… :-)

“Beachten Sie, dass sich die Umgebung nur lokal zum Programm verhält. Änderungen, die innerhalb des Programmes durchgeführt werden, werden nicht nach außen reflektiert, da Variablenwerte nicht vom untergeordneten Prozess (unser Programm) an den übergeordneten Prozess (die Shell) propagiert werden.” – Seite 166

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/* argc -> Anzahl Kommandozeilenparameter + Programmnamen (1), somit ist der Wert min. 1 */
 
/* argv -> ist ein Zeiger auf das Feld (Array) mit der in argc angegebene Anzahl von Elementen...
	... und die Elemente (z.B.: argc[0] sind Zeiger auf eine Zeichenkette...
 
	arg[0] -> Programmname
	arg[1] -> 1. Parameter 
	arg[2] -> 2. Parameter
	[...]
	arg[n] -> letzter Parameter
	0L    -> das letzte Element von argv[] einthaelt eine Null
*/
int main(int argc, char *argv[]) {
	char *var, *value;

	// wenn kein oder mehr als 3 Parameter uebergeben wurden, dann ...
	if (argc == 1 || argc > 3) {
			// Fehlermeldung ausgeben und Programm beenden
			fprintf(stderr,"usage: environ var [value]\n");
			exit(1);
	}

	// 1. Parameter in die Variable "var" schreiben
	var = argv[1];
	// mit getenv den Wert der Umgebungsvariablen abrufen 
	// und in die Variable "value" schreiben
	value = getenv(var);
	// wenn value wahr bzw. vorhanden ist, dann ...
	if (value) {
			printf("Variable %s has value %s\n", var, value);
	// ... ansonsten ...
	} else {
			printf("Variable %s has no value\n", var);
	}

	// wenn 2. Parameter uebergeben wurden, dann ...
	if (argc == 3) {
		char *string;
		// 2. Parameter in die Variable "value" schreiben
		value = argv[2];
		// Speicherbereich fuer die Umgebungsvariablen + Wert anlegen
		string = malloc(strlen(var)+strlen(value)+2);
		// wenn string nicht wahr bzw. nicht vorhanden ist, dann ...
		if(!string) {
				// Fehlermeldung ausgeben und Programm beenden
				fprintf(stderr,"out of memory\n");
				exit(1);
		}
		// strcpy - Stringfunktion zum kopieren einer Zeichenkette (string <- var)
		strcpy(string,var);
		// strcat - Stringfunktion zum verketten von Strings (string=) 
		strcat(string,"=");
		// strcat - Stringfunktion zum verketten von Strings (string=value)
		strcat(string,value);
		printf("Calling putenv with: %s\n", string);
		//
		// putenv - Aendert oder setzt eine Umgebungsvariable, gibt -1 bei einem Fehler 
		// und 0 bei keinem Fehler aus 
		//
		// wenn nicht gleich 0 -> wenn ein Fehler aufgetreten ist , dann ...
		if (putenv(string) != 0) {
				// Fehlermeldung ausgeben, Speicher wieder freigeben und Programm beenden
				fprintf(stderr,"putenv failed\n");
				free(string);
				exit(1);
		}

		// den Wert der Umgebungsvariablen in der Variablen "var"
		// in die Variable "value" schreiben
		value = getenv(var);
		// wenn value gleich wahr bzw. gesetzt, dann ...
		if (value) {
				// Umgebungsvariablen + neuen Wert ausgeben
				printf("New value of %s is %s\n", var, value);
		// ... ansonsten ...
		} else {
				// Umgebungsvariablen + ? ausgeben
				printf("New value of %s is null??\n", var);
		}
	}
exit(0);
}