mein Samba mit SuSE 11.0

Inhaltsverzeichnis



Samba Server einrichten


Samba Server installieren

Auf der SuSE DVD sind alle notwendigen Daten vorhanden um einen Samba Server komplett zu installieren. Es ist darauf zu achten dass bei der installation die automatische konfiguration abgeschalten wird und auch root ein seperates passwort erhällt.

Bei der auswahl der Software wir eine rein textbasierendes Server System gewählt. Folgende Pakete sollten im Bereich Software zusätzlich ausgewählt werden:

Samba User einrichten

Linux User anlegen:

Damit ein Samba User eingerichtet werden kann muss dieser als Linux User angelegt sein.

kommando:

Jetzt braucht der user noch ein Passwort:

Danach wird man zur zweimaligen eingabe eines Passwortes aufgefordert.

Verzeichniss Berechtigung anpassen:

Je nach anforderung sollten die Berechtigungen für das homeverzeichniss angepasst werden. Soll z.B. nur der user selbst sein Verzeichniss öffnen dürfen so muss die Berechtigung 700 gesetzt werden:

Verzeichniss im Netz freigeben

Damit das Verzeichniss im Netz "sichtbar" ist muss es entsprechend freigegeben werden. Dies wird am einfachsten im YaST Kontrollzentrum gemacht. Als root in der Konsole "yast" eingeben.

Unter dem Menüpunkt "Netzwerkdienste" finde man "Samba-Server"

Hier das entsprechende Verzeichniss anlegen und aktivieren.

Samba Passwort vergeben

Damit ein User sich einloggen kann muss ein Samba Passwort vergeben werden:

Danach wird man zur zweimaligen eingabe eines Passwortes aufgefordert.

Nützliches

Im Verzeichnis /etc/samba/ befinden sich einige Dateien, u.a. eine smb.conf. Hier kann man diverse funktionalitäten einstellen. Sehr nützlich sind vor allem die Rechte die vergeben werden sollen wenn Verzeichnisse oder Dateien die auf dem Server abgelegt werden. So sorgt follgendes kommando dafür das alle Verzeichnisse die angelegt werden die Berechtigung 700 haben:

In dieser Datei werden die globalen Einstellung sowie die für jeden User gemacht.

Disk quota

Die maximale grösse des Homeverzeichnisses kann durch Disk quota geregelt werden. Mit dem kommand "quota" können diese ausgelesen werden. mit edquota (edit quota) werden diese eingestellt. Sollte das kommando und die man pages nicht verfügbar sein, so muss quota erst installiert werden. Dies geschieht am besten mit YaST.

Samba Server einrichten

mein Samba mit SuSE 11.0


Das Datei System und seine Berechtigungen


Das Datei System und seine Berechtigungen

Mit den Komando ls (list) wird der Inhalt des Verzeichnisses in dem man sich befindet angezeigt.

Vor jeder Datei oder Verzeichniss sind 10 bits die eine aussage über die Berechtigung machen. Danach wird der eigentümer und gruppe angezeigt gefolgt von der grösse und dem datum sowie den namen der Datei oder des Verzeichnisses.

drwxr-xr-x 2 matthias matthias 4096 2010-05-08 20:31 Vorlagen/

-rw------- 1 root root 2616 2010-05-08 22:22 dead.letter

Die Berechtigungsbits

lrwxrwxrwx 1 root root 14 2010-05-08 20:58 live -> /home/matthias/

Das erste bit von links zeigt an um was für einen Dateityp es sich handelt.

die Bits 2 - 4 von links stehen für die Berechtigungen die der Inhaber hat

die Bits 5 - 7 von links stehen für die Berechtigungen die die Gruppe hat

die Bits 8-10 von links stehen für die Berechtigungen die alle anderen haben, vorausgesetzt diese haben überhaupt die Berechtigung dieses Verzeichniss zu öffnen.

Ändern der Rechte

Der inhaber der datei sowie root haben das recht die rechte zu verändern. Dies geschied mit dem kommando chmod - change permissions of a file. Das komando:

chmod 600

ändert die Berechtigung zu -rw-------

chmod 755

würde die Berechtigung zu -rwxr-xr-x ändern.

Mit chown (change owner) wird der Eigentümer, mit chgrp (change Group) die Gruppe geändert.

Das Datei System und seine Berechtigungen

mein Samba mit SuSE 11.0


das kopier kommando cp


Das kommando cp

cp - steht für copy und kopiert dateien oder verzeichnisse.

Das komando

[matthias@localhost Vorlagen]$ cp mh1 mh1-$(date "+%d-%m-%Y-%H-%M-%S")

hat zur folge das die datei

-rwxrwxrwx 1 matthias matthias 0 2010-05-09 00:19 mh1*

zur datei

-rwxr-xr-x 1 matthias matthias 0 2010-05-09 00:21 mh1-09-05-2010-00-21-21*

kopiert wird.

In diesem Fall wird das aktuelle Datum in der Form Tag,Monat,Jahr sowie die Uhrzeit Stunde,Minute,Sekunde angefügt. Dies ist vor allem bei wiederkehrenden kommandos in Skripten wertvoll. Bei einer Datensicherung wüsste man sofort von wann diese ist, ausserdem verhindert der anhang das es nicht zum ersetzen der datei, sondern eine weitere angelegt wird.

das kopier kommando cp

mein Samba mit SuSE 11.0


vga-Parameter


VGA - Parameter

Diese VGA Parameter sind wichtig als bootoption in der GRUB konfiguration. Das konfigurationsfile befindet sich normalerweise in /boot/grub/

-rw-r--r-- 1 root root 1228 2010-05-08 22:26 menu.lst

title linux

kernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux root=UUID=c765f8b4-1208-4853-b265-f4def80d6bf5 resume=UUID=151dc408-c27f-43db-b9c0-187f189bbc26 splash=silent vga=788

initrd (hd0,0)/boot/initrd.img

Folgende Paramter sind zulässig:

Farbtiefe

640x480

800x600

1024x768

1280x1024

1440x900

1600x1200

8 bit
256 farben

769
(0x0301)

771
(0x0303)

773
(0x0305)

775
(0x0307)

864
(0x0360)

796
(0x031C)

16 bit
65.536 farben

785
(0x0311)

788
(0x0314)

791
(0x0317)

794
(0x031A)

866
(0x0362)

798
(0x031E)

24 bit
16,7Mio farben

786
(0x0312)

789
(0x0315)

792
(0x0318)

795
(0x031B)

867
(0x0363)

799
(0x031F)

es können die dezimal oder die hex werte genommen werden, das macht keinen Unterschied.

auch möglich ist: vga=ask

4:3

16:10

800x600

1280x800

1024x768

1440x900

1400x1050

1680x1050

1600x1200

1920x1200

2048x1536


vga-Parameter

mein Samba mit SuSE 11.0


farbdarstellung in der Konsole


Farbiger Terminal. Prompts für user:~$ und root:# :

manuelle eingabe in der Konsole zur temporären farbänderung (geht auch als user, muss kein root sein):

echo -e "\033[0;1;32m"

Das -e ist notwendig um die Escape Sequenz für die farbige Ausgabe \033[ zu erkennen. Lässt man das -e weg wird einfach der Text \033[0;1;32m ausgegeben.

Wobei das m als ende notwendig ist.

Den aktuellen Parameter von PS1 kann man wie folgt auslesen:

[matthias@localhost ~]$ echo $PS1

[\u@\h \W]\$

[matthias@localhost ~]$

eine dauerhafte

bash: PS1="\[\033[34m\]\u@\h \w \$\\033[39m\] "

sorgt dafür das der Prombt blau ist, der text nach dem Prombt aber weiss

ich hatte versehentlich das kommando so eingegeben:

bash: PS1="\[\033[34m\]\u@\h \033[39m\] "

das hat auch funktioniert. aus irgendeinem grund erschien der Prompt dann ohne dem "ende Prombt"

matthias@mh-server _

wenn man also in der letzten Sequenz \033[39m\] " ein \033[39m\ M] " eingibt erscheint der Prombt so:

matthias@mh-server M _ allerdings war das M weiss!

schreibt man das M dagegen hier rein bash: PS1="\[\033[34m\]\u@\h M\033[39m\] " Das ergebniss ist dann das gleiche allerdings ist das M dann blau.

matthias@mh-server M _

nach der ersten Sequenz wird der Prombt festgelegt, \u zeigt den user an, dann kommt ein @, dann \h für host, zusammen kommt damit die ausgabe matthias@mh-server zustande. Hängt man ein \d mit rein erscheint auch das Datum im prombt :-)

\l stehrt für Terminal (tty1)

\s zeigt die bash an

\t zeigt die Zeit

\v zeigt die Version

\w zeigt ein "~" ?!?

Das funktioniert nicht als bootoption :-(

Um die einstellung permanent für einen User einzustellen muss das obige kommando in die .bashrc eingetragen werden. Diese befindet sich bei SuSE im Pfad /home/matthias. Ist anzunehmen dass jeder user eine eigene hat.

Das betrfft die tcsh nicht!

Farbige Prompts am Terminal können einen vor unangenehmen oder katastrophalen Fehlern bewahren, falls man als root # eine Aufgabe durchführt, die man als user~$ machen wollte. Sie können auch eingesetzt werden, um als Lesezeichen für alle 100 Zeilen zu fungieren.

In den Grundeinstellungen besitzen die Prompts für user~$ und root# den gleichen Farbton, aber es ist einfach die Farben zu ändern.

Die Grundfarben sind:

(die Syntax ist 00;XX)

[00;30] Schwarz

[00;31] Rot

[00;32] Grün

[00;33] Gelb

[00;34] Blau

[00;35] Magenta

[00;36] Cyan

[00;37] Weiß

[Man ersetzt [00;XX] mit [01;XX] um eine Farbvariation zu erhalten].

Änderung der Farbe für den Prompt des User ~$:

Als $user mit einem Texteditor:

$ <editor> ~/.bashrc

gilt auch für Mandriva

In der Zeile 39 wird das Kommentarzeichen entfernt und sie sieht so aus:

force_color_prompt=yes

In der Zeile 53 wird dort, wo zum Beispiel 01;32m steht auf den gewünschten Farbwert gesetzt.

Im Beispiel wird der farbige Prompt für user~:$ auf Cyan [01;36m\] gesetzt. Dies muss an drei Stellen mit dieser Syntax erfolgen:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;36m\]\u@\h\[\033[01;36m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '

Die neue Farbe existiert nach Öffnen eines neuen Terminals.

Änderung der Farbe für den Prompt von root#:

sux

<editor> /root/.bashrc

In der Zeile 39 wird das Kommentarzeichen entfernt und sie sieht so aus:

force_color_prompt=yes

In der Zeile 53 wird dort, wo zum Beispiel 01;32m steht auf den gewünschten Farbwert gesetzt.

Im Beispiel wird der farbige Prompt für root:# auf Rot [01;31m\] gesetzt. Dies muss an drei Stellen mit dieser Syntax erfolgen:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[01:31m\]:\[\033[01;31m\]\w\[\033[00m\]\$ '

Die neue Farbe existiert nach Öffnen eines neuen Terminals.

Hintergrundfarben des Terminals

Um die Hintergrundfarbe und die Fonts in einem Terminal zu ändern, finden sich die Optionen im Menü des Terminal.

Es gibt eine Unmenge an Einstellungsmöglichkeiten für Hintergrundfarben. Wir empfehlen eine eher schlichte Einstellung.

Die ANSI Escape Sequence für Attribut- und Farbdarstellung

das Prinzip der Escape-Sequenzen für farbige Ausgabe

ist folgendes Format \033[, gefolgt von einer beliebigen Anzahl von Codes, die durch ; getrennt sind, und das letzte mit m abgeschlossen ist, z.B. \033[1;37;41m.

dabei gilt im Einzelnen

"Standard" bezieht sich auf die Voreinstellung des Terminals bzw. des Konsolenprogramms, und kann - insbesondere bei grafischen Terminalemulatoren - von allen (40 bis 47) in der Farbe abweichen.


in Verbindung mit dem Attribut 0 oder 1 ergeben sich folgende Textfarben

Black 0;30 Dark Gray 1;30

Blue 0;34 Light Blue 1;34

Green 0;32 Light Green 1;32

Cyan 0;36 Light Cyan 1;36

Red 0;31 Light Red 1;31

Purple 0;35 Light Purple 1;35

Brown 0;33 Yellow 1;33

Light Gray 0;37 White 1;37


Beispiel für farbige Ausgaben

echo -e "\033[46;1;31m TESTAUSGABE \033[43;4;34m KUNTER \033[45;1;32m BUNT \033[44;1;33m ANGESTRICHEN \033[0m"

Am Ende sollte möglichst immer \033[0m anbinden, damit die nachfolgende Ausgabe dann wieder "normal" ist.


Script um eine Farbübersicht zu erhalten

Eine Übersicht welche Farben wie auf welcher Hintergrundfarbe wirkt, kann man mit diesem kleinem Script hier erzeugen [Fundort]

#!/bin/bash

#

# This file echoes a bunch of color codes to the

# terminal to demonstrate what's available. Each

# line is the color code of one forground color,

# out of 17 (default + 16 escapes), followed by a

# test use of that color on all nine background

# colors (default + 8 escapes).

#

T='gYw' # The test text

echo -e "\n 40m 41m 42m 43m\

44m 45m 46m 47m";

for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \

'1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \

' 36m' '1;36m' ' 37m' '1;37m';

do FG=${FGs// /}

echo -en " $FGs \033[$FG $T "

for BG in 40m 41m 42m 43m 44m 45m 46m 47m;

do echo -en "$EINS \033[$FG\033[$BG $T \033[0m";

done

echo;

done

echo


der Befehl tput

Wie wir es gewohnt sind, gibt es unter LINUX immer mehrere Möglichkeiten um ein und das selbe zu erreichen. mit dem Befehl tput läßt sich ebenfalls Farbe auf die Konsole zaubern. Das ist aber nur ein Teilbereich dieses Befehls. Für genauere Informationen bitte in die Manpages von tput und terminfo schauen. Einen kleinen Vorgeschmack über die Möglichkeiten mittels tput die Farben innerhalb des Terminals zu beeinflussen bekommt man auch hier

Neben der Wahl von Textfarbe, Hintergrundfarbe, Textattribute wie Fett und Unterstrichen (um nur mal einige der Wichtigsten zu nennen), kann man mit tput auch den Cursor innerhalb des Terminals frei positionieren, einzelne Zeichen oder Zeilen löschen, oder neue Zeichen und Zeilen dazwischenschieben, den Bildschirm leer machen, oder das Terminal auf seine Einstellungen zurücksetzen, wenn man mal nur noch Sonderzeichen auf dem Bildschirm hat, die Eigenschaften des aktuellen Terminals abfragen und vieles mehr. Aber auch hier ist zu bemerken, dass die Möglichkeiten dieses Befehles schon durch die jeweiligen Terminaleinstellungen beschränkt werden. Man sollte also daran denken, wenn man innerhalb eines Scriptes mit tput arbeitet, dass es auf einem anderem Rechner oder den Einstellungen eines anderen Users durchaus auch ein furchtbares unansehnliches Bild ergeben kann. Auch sollte man unbedingt prüfen ob sich am Ende wirklich ein Terminal ( besser sogar noch welcher Terminaltype ) befindet, oder die Ausgabe eventuell in eine Datei oder in eine Pipe geleitet ist. Anstelle von Erklärungen der einzelnen Funktionen und Optionen von tput hier ein kleines Script in dem einige Funktionen von tput eingebaut sind, zum Ausprobieren.

#!/bin/bash

if [ -t 1 ]

then

typeset -i ZEILE

tput clear

for HINTERGRUND in 0 1 2 3 4 5 6 7 8

do

tput sgr0

tput setaf $HINTERGRUND

ZEILE=5+$HINTERGRUND

for POSITION in 5 30 55

do

tput cup $ZEILE $POSITION

if [ $POSITION -eq 30 ]

then tput smul

fi

if [ $POSITION -eq 55 ]

then tput bold; tput rmul;

fi

for FARBE in 0 1 2 3 4 5 6 7 8

do

tput setab $FARBE

echo -n "X-"

done

done

done

tput sgr0

tput home

for i in 1 2 3

do

tput bel

sleep 1

tput flash

done

else

echo "Ausgabe geht nicht an ein Terminal"

fi

Anwendung von tput innerhalb eines Scriptes

oftmals wird man Farb- oder Testattribute öfter innerhalb eines Scriptes verwenden wollen. Es ist deshalb oftmals von Vorteil, wenn man diese Attribute in Variable ablegt, und dann an Ort und Stelle in die Ausgaben einbaut. Ein kleines Beispiel soll das verdeutlichen.

BLACK=`tput setaf 0`

ROT=`tput setaf 1`

BLAU=`tput setaf 4`

GELB=`tput setaf 3`

echo "Das hier ist ein Text der durch ${ROT}rote${BLACK} durch ${BLAU}blaue ${BLACK}"

echo "und ${GELB}gelbe ${BLACK} Worte ${ROT}unterbrochen ${BLACK}ist."



Anwendung im Shell Prompt

farbiges Prompt

Die Shellvariable PS1 steuert das Verhalten des Prompts. Du kannst folgendes in deine .bashrc (in deinem Homeverzeichnis) schreiben:

if test \( "$TERM" = "xterm" -o "${TERM#screen}" != "$TERM" \) -a -z "$EMACS"

then

export PS1="\[\033[31m\]\[\e]2;\u@\h:\w\007\e]1;\h\007\]\u@\h:\w> \[\033[0m\]"

else

export PS1="\[\033[31m\]\u@\h:\w> \[\033[0m\]"

fi

Dann die Datei neu einlesen oder eine neue Bash eröffnen damit die Änderung wirkt
es genügt .bashrc im Homeverzeichnis abzusetzen

Danach solltest du einen roten Prompt haben.


Farbiger Errorlevel im Prompt

Errorlevel in rot anzeigen Folgenden Code in der aktuellen Bash ausführen oder für dauerhaften Gebrauch in der ~/.bashrc ablegen

PROMPT_COMMAND='LASTERROR="[$?]" ; test "$LASTERROR" = "[0]" || echo -ne "\033[93;41m${LASTERROR}\033[0m"'

export PROMPT_COMMAND

Jetzt wird der Rückgabe Wert eines Befehles oder Scriptes insofern er nicht 0 ist, innerhalb des folgenden Prompt farbig angezeigt, das kann sehr hilfreich sein, z. B. für das Schreiben und Testen von Befehlsketten oder Scripte.

Links zum Thema Prompt

Anwendungen innerhalb des ls Befehles

Der ls Befehl kann Dateientypen an Dateiattributen und Prefixen erkenne und farbig darstellen.


Siehe dazu auch man ls
Verantwortlich für das Einschalten dieser Funktion ist die Option --color

Zuordnung der Farben zu den Dateitypen

Die Zuordnung der Farben zu den Dateitypen wird global für alle in der /etc/DIR_COLORS vorgenommen. Jedem User sollte es aber möglich sein diese Datei in sein Homeverzeichnis unter dem Namen .dir_colors zu kopieren, dann kann er seinen Bedürfnissen und Vorlieben entsprechend, selbst seine persönlichen Einstellungen durch änderen dieser Datei vornehmen.

cp /etc/DIR_COLORS ~/.dir_colors

Danach einfach die bash neu starten, damit die Änderungen wirken.

Mehr Infos mit man DIR_COLORS

Links zum Thema ls und Color


Syntax Highlighting im vi

Der Texteditor vi auf der Konsole, der in keinem LINUX/UNIX fehlt, ist in den modernen Linuxsystemen auf einen wesentlich leistungsfähigeren Nachfolger vim oder einen Klon davon, gelinkt. Dieser Editor kann unter Anderem auch Syntax Highlighting" für eine Vielzahl von Dateitypen.

Im Verzeichnis /usr/share/vim/current/syntax/ stehen die Syntaxkonfigurationsfiles. Anhand der Endung (prefix) der zu editierenden Datei erkennt vim welche Syntax für diesen Dateitype zu benutzen ist. Selbstverständlich kann man auch seine eigenen Syntax-Konfigurationsfiles entwerfen und einsetzen und auch die Farben anpassen. Siehe dazu http://vimdoc.sourceforge.net/htmldoc/usr_44.html


Ein- Ausschalten des Syntax highlighting im vim

permanet durch Eintrag in der Vim-Konfigurationsdatei ~/.vimrc 

anlegen der Datei bzw. erweitern dieser Datei und folgenden Eintrag vornehmen

syntax on

bei Bedarf durch Zeilenoption beim Start von vi 

# vi +"syn on" file.prefix

bei Bedarf während der Sitzung im Kommandomodus 

hier kann während der Sitzung dieser Modus nach Belieben Ein- und Ausgeschaltet werden

:syntax on

Analog Ausschalten

:syntax off

How do I modify or change the prompt?

Modifying the prompt is easy task. Just assign a new value to PS1 and hit enter key:
My old prompt --> [vivek@105r2 ~]$
PS1="touch me : "
Output: My new prompt

touch me :

So when executing interactively, bash displays the primary prompt PS1 when it is ready to read a command, and the secondary prompt PS2 when it needs more input to complete a command. Bash allows these prompt strings to be customized by inserting a number of backslash-escaped special characters that are decoded as follows:

Let us try to set the prompt so that it can display today’d date and hostname:
PS1="\d \h $ "
Output:

Sat Jun 02 server $

Now setup prompt to display date/time, hostname and current directory:
$ PS1="[\d \t \u@\h:\w ] $ "
Output:

[Sat Jun 02 14:24:12 vivek@server:~ ] $

How do I add colors to my prompt?

You can change the color of your shell prompt to impress your friend or to make your own life quite easy while working at command prompt.

Putting it all together

Let us say when you login as root/superuser, you want to get visual confirmation using red color prompt. To distinguish between superuser and normal user you use last character in the prompt, if it changes from $ to #, you have superuser privileges. So let us set your prompt color to RED when you login as root, otherwise display normal prompt.

Open /etc/bashrc (Redhat and friends) / or /etc/bash.bashrc (Debian/Ubuntu) or /etc/bash.bashrc.local (Suse and others) file and append following code:
# vi /etc/bashrc
or
$ sudo gedit /etc/bashrc
Append the code as follows

# If id command returns zero, you’ve root access.

if [ $(id -u) -eq 0 ];

then # you are root, set red colour prompt

PS1="\\[$(tput setaf 1)\\]\\u@\\h:\\w #\\[$(tput sgr0)\\]"

else # normal

PS1="[\\u@\\h:\\w] $"

fi

Close and save the file.

farbdarstellung in der Konsole

mein Samba mit SuSE 11.0


Hardwareinformationen auslesen


Hardwareinformationen auslesen

Es gibt verschiedene Dateien in denen Systeminformationen enthalten sind. Diese sind vor allem in Verzeichiss /proc. Die Datei /proc/cpuinfo enthällt informationan über die CPU(s)

processor : 0

vendor_id : GenuineIntel

cpu family : 6

model : 23

model name : Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz

stepping : 6

cpu MHz : 1998.000

cache size : 6144 KB

physical id : 0

siblings : 2

core id : 0

cpu cores : 2

apicid : 0

initial apicid : 0

fdiv_bug : no

hlt_bug : no

f00f_bug : no

coma_bug : no

fpu : yes

fpu_exception : yes

cpuid level : 10

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm tpr_shadow vnmi flexpriority

bogomips : 5984.49

clflush size : 64

power management :

Freier Speicherplatz des RAMs

free

mit free wird die RAM speicher belegung angezeigt

total used free s hared buffers cached

Mem: 2072036 2009540 62496 0 15468 1582420

-/+ buffers/cache: 411652 1660384

Swap: 4088500 17364 4071136

mit den optionen -k -m -g werden die zahlen in kB, MB oder GB angezeigt.

Festplattenbelegung

df

Die Festplattenbelegung kann man durch das komando df -h anzeigen lassen. h für human readable, was bedeutet das die Zahlen in vernünftigen Zahlen angezeigt werden.

Dateisystem Größe Benut Verf Ben% Eingehängt auf

/dev/sda1 12G 2,5G 8,8G 23% /

/dev/sda6 278G 18G 261G 7% /home

uptime, zeigt

01:33:52 up 3:41, 3 users, load average: 0.03, 0.05, 0.01

mit who kann man sehen wer eingelogged ist

[matthias@localhost ~]$ who -a

2010-05-08 20:52 66 id=si term=0 exit=0

Systemstart 2010-05-08 20:52

Runlevel 5 2010-05-08 20:52 last=S

2010-05-08 20:52 794 id=l5 term=0 exit=0

2010-05-08 20:52 2336 id=1

LOGIN tty2 2010-05-08 20:52 2337 id=2

LOGIN tty3 2010-05-08 20:52 2338 id=3

2010-05-08 20:52 2339 id=4

LOGIN tty5 2010-05-08 20:52 2340 id=5

LOGIN tty6 2010-05-08 20:52 2341 id=6

matthias ? :0 2010-05-08 21:05 ? 5811

matthias + pts/0 2010-05-08 21:06 04:28 5985

matthias - pts/1 2010-05-09 01:22 . 10862

pts/2 2010-05-08 23:00 0 id=/2 term=0 exit=0

pts/3 2010-05-08 23:00 0 id=/3 term=0 exit=0

pts/4 2010-05-08 23:00 0 id=/4 term=0 exit=0

pts/5 2010-05-08 23:00 0 id=/5 term=0 exit=0

bei SuSE gibt es auch einen finger kommando

mit smbstatus wird der status sowie die eingeloggedten benutzer angezeigt.

Hardwareinformationen auslesen

mein Samba mit SuSE 11.0


interessante kommandos


Interessante Kommandos

(SUSE)

lspci|grep VGA --> zeigt die Grafikkarte an.

kernelversion --> zeigt die aktuelle Kernelversion an.

hwinfo --> zeigt die komplette Hardwareinfo an. Da das nicht auf den bildschirm passt, sollte die ausgabe in eine Datei gemacht werden. Z.B. [hwinfo > hwinfo.txt] schreibt alles in die Datei hwinfo.txt

bc --> konsole taschenrechner. mit "quit" beenden

interessante kommandos

mein Samba mit SuSE 11.0


"info" Dateien


"Info" Dateien

Es gibt auf dem System diverse Dateien die informationen enthalten und vom System angezeigt werden.

Das berühmte "Have a lot of fun ....." nach dem einloggen steht in der /etc/motd. motd bedeutet hierbei "Message of the day".

Schon nach dem hochfahren kommt als letze Meldung "Welcome to openSUSE 11.0 ...." Dies steht in der /etc/issue

"info" Dateien

mein Samba mit SuSE 11.0


motd skript


motd – Informative Begrüßung mit allen Lebenszeichen auf einen Blick

Wer schon einmal auf einen Linux/Unix/BSD Server eingeloggt hat, der kennt die kurze Begrüßung, die einem zuteil wird.
motd, das ‘motto of the day’ kann aber mit wenigen Handgriffen dazu gebracht werden, einem beim Login alle Lebenszeichen des Systems auf einen Blick hin übersichtlich zu präsentieren.

Normalerweise begrüßt uns ein default Server etwa so:


Linux main 2.6.24.7-20080507a #1 SMP Wed May 7 10:10:41 CEST 2008 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

Die Date /etc/motd, die diesen Text enthält kann aber mit minimalem Aufwand so verändert werden, dass alle Lebenszeichen und dringlichen Probleme des Systems beim Einloggen auf einen Blick zur Verfügung stehen:

- Speicherzustand RAM
- Zustand der eingebundenen Dateisysteme
- Zustand evtl. RAID Geräte

Damit sind die drei wichtigsten Ausfall-Ursachen bzw. deren Vorboten oder Signale schnell auf einen Blick erfasst.

Schreiben Sie dazu bitte einfach ein kleines Skript, beispielsweise in den Ordner /opt – öffnen Sie also eine neue Datei mit einem Editor Ihrer Wahl:

joe /opt/motd_aktuell.sh

Hier sorgen wir nun dafür, dass die o.g. Daten in /etc/motd eingetragen werden, zuerst den aktuellen Hostnamen:


cat /etc/hostname > /etc/motd

Beachten Sie bitte das ‘>’ – es führt dazu, dass die alte motd Nachricht überschrieben wird.

Nun lassen wir uns den Speicherzustand lesbar in die motd kopieren:


free -m >> /etc/motd

Beachten Sie bitte hier das ‘>>’ – es wird nicht mehr überschrieben, sondern angefügt.

Nun noch die Übersicht über die eingebundenen Datenträger:


df -h >> /etc/motd

Bei der Information über den Zustand der RAID Geräte stellt sich natürlich die Frage, was installiert ist. Für ein Software RAID verwenden Sie bitte:


cat /proc/mdstat >> /etc/motd

Um Beispielsweise den Status eines 3Ware Systems zu erfragen, muss ein command line tool wie tw_cli installiert sein (mehr dazu in den 3ware/AMCC Artikeln)

(Nur ein Beispiel, hier kommt es sehr darauf an, was installiert ist, welche Zuordnung der Controller hat usw…)


tw_cli info c4 >> /etc/motd

Dieser Code würde eine Kurzübersicht über Controller “4″ ergeben.

Sinnvoll ist es, sich zum Schluß noch schnell die aktuelle Last mitsamt Uptime anzeigen zu lassen:


uptime >> /etc/motd

Alles zusammen würde dann für ein Software Raid System folgendes ergeben:


cat /etc/hostname > /etc/motd
free -m >> /etc/motd
df -h >> /etc/motd
cat /proc/mdstat >> /etc/motd
uptime >> /etc/motd

Speichern Sie nun diese Datei (/opt/motd_aktuell.sh) und geben Sie ihr ausführbare Rechte:


chmod 700 /opt/motd_aktuell.sh

Falls Sie nun mit “root” Rechten eingeben:


/opt/motd_aktuell.sh

…wird Ihre motd verändert, zu prüfen mit einem anschließenden:


cat /etc/motd

athos.somewherebehindtherainbow.cc
total used free shared buffers cached
Mem: 1992 1460 532 0 15 1054
-/+ buffers/cache: 389 1602
Swap: 3827 0 3827
Filesystem Size Used Avail Use% Mounted on
/dev/md1 950M 537M 365M 60% /
tmpfs 997M 0 997M 0% /lib/init/rw
tmpfs 997M 0 997M 0% /dev/shm
/dev/md5 4.7G 1.4G 3.4G 29% /usr
/dev/md6 4.7G 1.8G 3.0G 37% /var
/dev/md7 221G 89G 133G 40% /home
none 997M 8.0K 997M 1% /tmp
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [faulty]
md1 : active raid1 sdb1[1] sda1[0]
987840 blocks [2/2] [UU]

md5 : active raid1 sdb5[1] sda5[0]
4891648 blocks [2/2] [UU]

md6 : active raid1 sdb6[1] sda6[0]
4891648 blocks [2/2] [UU]

md7 : active raid1 sdb7[1] sda7[0]
231464384 blocks [2/2] [UU]

unused devices:
20:57:24 up 58 days, 2:16, 1 user, load average: 0.14, 0.11, 0.09

Um diese Information nicht jedes Mal von Hand aktualisieren lassen zu müssen – das wäre wenig sinnvoll, wir wollen diese ja bei jedem Einloggen direkt zur Hand haben, legen wir einen Cronjob an, der alle 5 Minuten eine neue motd erzeugt. Die Last hierbei für den Rechner ist minimal, der Nutzen vielfältig!

Als Root:


crontab -e

Und hier einen zusätzlichen Eintrag in folgender Form einfügen:


*/5 * * * * /opt/motd_aktuell.sh &

Dies sorgt dafür, dass alle fünf Minuten (*/5), in jeder Stunde (*), an jedem Tag des Monats (*), in jedem Monat (*), an jedem Tag der Woche (*) das Kommando für die Aktualisierung ausgeführt wird.

Viel Spaß damit!

motd skript

mein Samba mit SuSE 11.0


Shell Variablen


Eine frei verwendbare Unix-Grundlagenschulung mit muLinux

Shell-Variablen

Was ist eine Shell?

Shell ist der Kommandointerpreter unter Unix. Das klingt erst mal kompliziert. Wir haben aber schon die ganze Zeit mit der Shell gearbeitet. Wir haben Befehle, wie z. B. ls oder date, eingegeben und uns an den Reaktionen von Unix erfreut. Dieser Dialog wird durch den Kommandointerpreter realisiert. Dieser liegt wie eine Schale (engl. Shell) über dem Betriebsystem und sorgt für die Kommunikation mit dem Nutzer.

Genaugenommen gibt es unter Unix mehrere Shells (C, Korn, Bash, ...). Jeder Nutzer kann sich für seine Lieblingsshell entscheiden. muLinux verwendet aber nur eine Shell. Die Unterschiede der Shells sind (für normale Nutzer) gering und sollten uns daher vorerst nicht interessieren.

Was ist eine Variable?

Eine Variable ist lediglich ein Name, dem ein Wert zugewiesen wurde. Es gibt drei Variablentypen:

Systemvariablen bestimmen die Eigenschaften des System dem Nutzer gegenüber und können vom Nutzer angepaßt werden. Systemvariablen werden mit Großbuchstaben geschrieben.

Auf die speziellen Variablen kann nur lesend zugegriffen werden. Sie bestimmen allgemeine Systemeigenschaften.

Benutzerdefinierte Variablen können vom Nutzer erzeugt, geändert und gelöscht werden. Sie können z. B. für Shell-Skripte eingesetzt werden. Das sind kleine Programme, die sich wiederholende Arbeiten vereinfachen können.

Anzeigen vorhandener Variablen

Zur Anzeige aller Variablen dient der Befehl set.

/# set

Es werden die Systemvariablen mit Inhalt angezeigt. Links stehen die Variablennamen, dann kommt ein Gleichheitszeichen und danach der Inhalt der Variablen. Um alle Variablen zu sehen, müssen wir den Bildschirminhalt scrollen ([Shift] [Bild auf], [Shift] [Bild ab]). Dafür sind es doch sehr viele, wie uns folgender Befehl anzeigt:

/# set | wc

Wir wollen hier nur einige Systemvariablen besprechen. Zu Beginn schauen wir uns mal die Systemvariable PS1 an. Wer den Bildschirm nicht scrollen will, kann mit grep nur die Zeile mit PS1 anzeigen lassen:

/# set | grep "PS1"

PS1=/#

/# _

Die Variable PS1 beinhaltet also die zwei Zeichen /#. Was ist das? Das kommt uns doch irgendwie bekannt vor. Ja, das ist unser Prompt! Mal sehen ob wir diesen ändern können.

Zuweisen eines Inhaltes

Eine Variable wird mit folgender Syntax definiert, wobei keine Leerzeichen vor oder nach dem Gleichheitszeichen stehen dürfen:

Variable=Wert

Wir wollen den Prompt so ändern, daß "Befehl?" als Prompt erscheint:

/# PS1=Befehl?

Befehl?_

Schöner wäre es aber mit einem Leerzeichen nach "Befehl?". Wenn wir Leerzeichen haben wollen, müssen wir den Wert in Anführungsstrichen einschließen:

/# PS1="Befehl? "

Befehl? _

Dies ist auch notwendig, wenn wir mehrere Wörter als Wert zuweisen wollen:

/# PS1="Gebe bitte einen Befehl ein: "

Gebe bitte einen Befehl ein: _

Wer will kann auch einen DOS-Prompt mit PS1="C:\> " vorgaukeln.

Anzeigen einer Variablen

Zum Anzeigen einer Variablen kann der Befehl echo verwendet werden. echo gibt Text aus. Dieser Befehl ist notwendig bei Shell-Skripten.

Gebe bitte einen Befehl ein: echo PS1

PS1

Gebe bitte einen Befehl ein: _

So wird leider nur der Text "PS1" angezeigt und nicht der Inhalt von PS1. Dazu muß Dollarzeichen $ vor der Variablen stehen:

Gebe bitte einen Befehl ein: echo $PS1

Gebe bitte einen Befehl ein:

Gebe bitte einen Befehl ein: _

Wir können auch Text und Variablen mischen:

Gebe bitte einen Befehl ein: echo "Das ist der Inhalt von PS1: $PS1"

Das ist der Inhalt von PS1: Gebe bitte einen Befehl ein:

Gebe bitte einen Befehl ein: _

Leeren von Variablen

Um eine Variable zu leeren, gibt man den Variablennamen nur gefolgt von einem Gleichheitszeichen ein:

/# PS1=

_

Die Variable bleibt dabei aber bestehen. Sie ist nur leer.

/# set | grep "PS1"

PS1=

/# _

Wenn wir PS1 leeren, haben wir kein Prompt mehr. Was passiert eigentlich beim Wechseln in ein anderes Verzeichnis?

cd /home

/home# _

Die Variable PS1 wird hier also vom System überschrieben.

Schreibschutz für Variablen

Mit dem Befehl readonly (engl. nur lesen) können Variablen gegen eine mögliche Änderung geschützt werden.

/# readonly PS1

Jeder Versuch PS1 zu ändern, wird mit einer Fehlermeldung quittiert. Der Schreibschutz bleibt bis zum Verlassen der Shell erhalten. Ruft man den Befehl readonly ohne Parameter auf, werden alle schreibgeschützten Variablen angezeigt.

/# readonly

PS1

Benutzerdefinierte Variablen

Um eigene Variablen zu definieren, muß bei der Benennung folgendes beachtet werden:

Variablen können zur Vereinfachung bzw. bei Wiederholung von Befehlen eingesetzt werden. So zum Beispiel als Befehlsoption:

/# a=/usr/bin

/# cd $a

/usr/bin# _

Oder als Befehl:

/# b="ls -l"

/# $b

Lange Ausgabe de Verzeichnisinhaltes

Wir können auch die Ausgaben von Programmen in eine Variable speichern. Dazu müssen wir den Programmaufruf in zwei rückwertige Hochkomma (franz. Accent grave) ` einklammern.

/# heute="Heute ist `date`"

/# echo $heute

Heute ist Tue Nov 16 15:54:16 1999

/# _

Erweitern des Variableninhaltes

/# toll=abend

/# toll=Feier$toll

/# echo $toll

Feierabend

/# _

Löschen von Variablen

Zum Löschen einer Variable dient der Befehl unset:

/# unset a

/# _

Shell Variablen

mein Samba mit SuSE 11.0


extrahieren und installieren


tar Kommando

Haben Sie Software als tar.gz- oder tar.bz2Dateien heruntergeladen, müssen Sie diese komprimierten Archive zunächst entpacken. Die Befehlszeile

tar -xzvf .tar.gz

beispielsweise entpackt ein tar.gz-Archiv. Wenn das Archiv dagegen im bzip2-Format vorliegt, so trägt dieses die Datei-Endung ".tar. bz2". Die Befehlszeile lautet in dem Fall:

tar -xjvf .tar.bz2

Bei Paketen im tar.gz/bz2-Format handelt es sich meist um Quellcode. Bevor Sie die Software nutzen können, müssen Sie den von einem Programmierer geschriebenen Quellcode in Maschinensprache übersetzen, ihn also kompilieren.

Um Software zu kompilieren, benötigen Sie einige Entwicklerwerkzeuge. Unter Suse Linux installieren Sie die Werkzeuge etwa mit dem Yast-Modul "Software installieren oder löschen" von Ihren Distributionsmedien nach. Wählen Sie dazu "Selektionen", und markieren Sie die Rubrik "C/C++ Compiler und Werkzeuge".

Alternativ laden Sie passende Pakete aus dem Internet herunter. Je nach ver-
wendetem System müssen Sie auf den Distributions-CDs, der Website Ihres Distributors oder unter www. rpmfind.com nach passenden Paketen suchen. Unter Debian GNU/Linux können Sie sich mit apt oder Synaptic auf die Suche machen. Hauptwerkzeug fürs Kompilieren ist ein Compiler, etwa gcc (Gnu C Com piler, http://gcc.gnu. org, Version 4.1.0; 37,7 MB), der fast jeder Distribution beiliegt.

Ebenfalls unerlässlich ist make (www.gnu.org/software/make/make.html, Version 3.80; 1,2 MB), das Makros für gcc ausliest und deren Befehle an den Compiler übergibt. Die Programmsammlung binutils (www. gnu.org/software/binutils/, Version 2.16.1; 12 MB) enthält wichtige Dienstprogramme für den Compiler.

Schließlich benötigen Sie noch pkgconfig (www.freedesktop.org/software/pkgconfig/releases/, Version 0.20; 947 KB), das sämtliche installierte Bibliotheken eines Systems in einer Datenbank zusammen-
fasst, damit configure und make sie beim Kompilieren finden. In der Regel brauchen Sie noch weitere Pakete. Welche das sind, hängt jedoch stark vom zu kompilierenden Programm ab, so dass sich nicht alle auflisten lassen. Meist sind es Systembibliotheken mit einem "devel" im Namen.

Der Installations-Dreisatz

Die den Quellcode-Paketen beiliegenden Readme- oder Install-Dateien geben Hinweise auf besondere Vorgehensweisen bei der Installation - etwa wenn der Aufruf von "configure" entfällt - und weisen meist auch auf benötigte "devel"-Pakete hin.

Um ein Programm aus dem Quellcode zu installieren und für Ihr System zu optimieren, benutzen Sie in einem Terminal Fenster die drei Befehle "./configure", "make" und "make install". Mehr erfahren Sie im Nachfolgenden.

Die meisten Probleme bereiten fehlende oder scheinbar fehlende "devel"-Pakete.

1.Fall: "configure" bemängelt ein fehlendes Paket; Sie stellen allerdings fest, dass das Paket schon vorhanden ist. Das Script vermutet dann das Paket an einer anderen Stelle im System und findet es deshalb nicht.

Ein Beispiel: Erhalten Sie etwa von configure die Fehlermeldung "gtkconfig not found", so liegt das daran, dass unter Suse Linux die Datei im Ordner /opt/gnome/bin liegt und nicht im Verzeichnis /usr/bin. Generell hilft der Aufruf von "./configure -help". Damit erhalten Sie alle Parameter, die Sie "configure" selbst mitgeben können. Unter "Optional Packages" sehen Sie nun in diesem Beispiel den Parameter " - - w i t h - g t k prefix=PFX", den Sie "configure" dann mit folgender Befehlszeile mit auf den Weg geben können:

./configure --with-gtk-prefix=/ opt/gnome/bin

Anschließend weiß "configure", wo sich die gesuchte Datei befindet, und Sie können mit dem Befehl "make" fortfahren.

2. Fall: "configure" beendet die Suche nach den benötigten Paketen erfolgreich, der Kompiliervorgang bricht aber während der Ausführung von make mit der Fehler-
meldung "error: file not found" ab. Der Grund: Der Programmierer des "configure"-Scripts hat vergessen, das Vorhandensein des einen oder anderen Pakets überprüfen zu lassen.

Hinter "error: file not found" steht dann, welche Datei fehlt, etwa "-lz". Das "l" am Ende der Zeile steht für "library" beziehungsweise "lib" und verrät Ihnen, dass eine Bibliothek fehlt. Dem folgenden "z" können Sie in diesem Fall entnehmen, dass es sich um das "devel"-Paket der "z"-Bibliothek handelt.

Um es nachzurüsten, verwenden Sie das Installations-Tool Ihrer Distribution, unter Suse etwa Yast. Geben Sie dann erneut den Befehl "make" ein, und setzen Sie damit den Kompiliervorgang fort. Taucht der Fehler noch auf, tippen Sie "make clean" und starten erneut mit "make".

configure
Ein Script mit dem Namen "configure" überprüft zunächst Ihr System und sammelt die dabei gewonnenen Informationen - beispielsweise über Ihren Prozessor - in einem Makro "Makefile". configure prüft außerdem, ob alle notwendigen "devel"-Pakete auf Ihrem System vorhanden sind. Fehlt eines, bricht das Script ab und teilt Ihnen in einer Fehlermeldung mit, um welches es sich handelt.

Falls das Kompilat spezielle Optionen erfordert, erfahren Sie diese mit dem Befehl "./ configure --help". Läuft configure ohne Fehler durch, ist der wichtigste Schritt schon getan. Bitte beachten Sie, dass jedes Programm sein eigenes configure-Script mitbringt, das speziell auf die jeweiligen Anwendung abgestimmt ist. Starten Sie es deshalb unbedingt aus dem Verzeichnis heraus, in dem der Quellcode des Programms liegt.

make
Als Nächstes rufen Sie "make" auf. Dieser Befehl liest das Makro "Makefile" aus, das configure erstellt hat, und veranlasst den Compiler, die speziellen Informationen beim Kompilieren des Quellcodes zu berücksichtigen. Damit beginnt das eigentliche Kompilieren des Programms, was je nach Rech-
nergeschwindigkeit und Quellcode-Umfang einige Minuten bis mehrere Stunden in Anspruch nehmen kann.

Sie können die Arbeit des Compilers auf Ihrem Bildschirm beobachten. Die kompilierten Dateien landen dann zunächst im Verzeichnis, in dem der Quellcode liegt. In seltenen Fällen bricht dieser Vorgang ab, etwa wenn das configure-Script die eine oder andere fehlende Bibliothek nicht berücksichtigt hat und der Compiler diese nicht findet. Wie Sie in diesem Fall vorgehen, erfahren Sie unter der Teilüberschrift: Probleme beim Komplieren unter Fall 2.

make install
Hat der Compiler seine Arbeit abgeschlossen, installiert der Befehl "make install", den Sie als root ein-
geben, das neue Programm und konfiguriert es. "make install" ruft dabei wiederum make auf, welches diesmal aber den Installationsteil des von configure erstellten Makros "Makefile" ausliest.

Etwaige Bibliotheken und Konfi-
gurationsdateien platziert make ebenfalls an der richtigen Stelle Ihres Systems. Programme landen meist im Verzeichnis /usr/bin, Bibliotheksdateien in /usr/ lib und Konfigurationsdateien in /etc.

Zusätzlich installiert das Programm Hilfe-Dateien (Manpages), denen Sie weitere Informationen zu Ihrem neuen Programm mit dem Befehl "man <Programmname>" entnehmen. Um das frisch kompilierte Programm aufzurufen, tippen Sie in einem Terminal-Fenster die Befehlszeile "<Programmname>&".


extrahieren und installieren

mein Samba mit SuSE 11.0


kompilieren


http://start.mandriva.com/?r=Mandriva%20Linux%20release%202010.0%20%28Official%29%20for%20i586&p=desktopWiki

Programme kompilieren

Überall Forum Wiki Ikhaya Planet

Programme kompilieren

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Installation von Paketen

Freischalten der Universe-Sektion

Ein Terminal öffnen

Archive entpacken

Ein einzelnes Paket manuell installieren

Arbeiten als Superuser

Grundlagen zum Homeverzeichnis

Grundlagen zu den Paketquellen

Grundlagen zur Paketverwaltung

Starten von Programmen

Im Terminal das Verzeichnis wechseln

Inhaltsverzeichnis [-]

  1. Grundlegendes
  2. Kurzfassung
  3. Vorbereitung [-]
    1. Quelltextarchive
    2. Dokumentation
    3. Terminal
  4. Abhängigkeiten auflösen [-]
    1. Abhängigkeiten für eine neue Paketversion
    2. Abhängigkeiten für ein neues Programm
    3. Fehlende Pakete oder falsche Paketversion
  5. Allgemeines Vorgehen [-]
    1. Konfigurieren [-]
      1. Fehlermeldungen
      2. Weitere Optionen
    2. Kompilieren [-]
      1. Fehlermeldungen
    3. Installieren [-]
    1. Fehlermeldungen
  6. Die Standard-Methode [-]
    1. Deinstallieren
    2. Quelltextverzeichnis säubern
  7. Alternativen
  8. Weiterführende Links

Die Paketquellen von Ubuntu bieten einem Anwender eine große Vielzahl von Programmen. Manchmal kommt es aber vor, dass bestimmte Programme oder neuere Programmversionen nicht in diesen Paketquellen enthalten sind. Benötigt man ein solches Programm oder z.B. eine Funktion einer neueren Programmversion, dann bleibt einem oftmals nur der Weg über Fremdquellen wie einem PPA oder direkt über den Quelltext.

Dieser Artikel soll einen grundlegenden Überblick verschaffen, wie man den Quelltext für Linux-Programme unter Ubuntu kompiliert und installiert.

Experten-Info:

Auf die Erstellung von validen Debian-Paketen (.deb) wird in diesem Artikel nicht eingegangen, weil der richtige Paketbau sich wesentlich komplizierter gestaltet und in einem eigenen Artikel abgehandelt wird.

Grundlegendes

Es gibt verschiedene Möglichkeiten unter Linux, einen Quelltext zu kompilieren, und noch mehr Möglichkeiten, das kompilierte Programm anschließend zu installieren. Abhängig ist das davon, um was für ein Programm es sich handelt, in welcher Programmiersprache es geschrieben wurde und welchen Compiler der Autor des Programms für sein Projekt bevorzugt. Für die eigentliche Installation ist dann die vom Betriebssystem verwendete Paketverwaltung[9] noch zusätzlich interessant.

Dieser Artikel befasst sich vorwiegend mit dem Kompilieren und Installieren von Programmen, die in der Programmiersprache C/C++ (unter Linux und anderen Betriebssystemen die am häufigsten verwendete Programmiersprache) geschrieben wurden, sowie einigen Hinweisen zu Programmen, die in einer Skriptsprache wie z.B. Python, Perl oder Ruby umgesetzt wurden. Die angesprochenen Methoden u.a. zur Installation beziehen sich dabei auf Debian-basierende Distributionen mit dem Advanced Packaging Tool (apt) als Paketverwaltung[9] - also auch Ubuntu. Als Compiler kommt dabei die sog. GNU_Compiler_Collection (GCC) zum Einsatz, mit dem als Quasi-Standard unter Linux u.a. auch Ubuntu erstellt wird.

Kurzfassung

Für die Ungeduldigen hier zunächst eine Kurzfassung des später im Detail beschriebenen Kompilationsprozesses. Sollte es zu Problemen kommen oder möchte man etwas mehr darüber wissen, was man hier tut, so sollte man auf jeden Fall die ausführlichen Beschreibungen der einzelnen Schritte oder am besten gleich den ganzen Artikel lesen. Wichtig ist, dass im Falle von Fehlermeldungen auf jeden Fall der Fehler beseitigt werden muss, bevor man zum nächsten Schritt übergeht.

Zunächst sind die für die nächsten Schritte nötigen Pakete build-essential und checkinstall und gegebenenfalls weitere Abhängigkeiten des zu kompilierenden Programmes zu installieren[1].

Dann wechselt man im Terminal[3] ins Quelltextverzeichnis[11] und führt folgende Befehle aus:

./configure

ausführliche Beschreibung

make

ausführliche Beschreibung

sudo checkinstall

ausführliche Beschreibung

In vielen Fällen reicht dies zur Installation eines Programmes aus.

Vorbereitung

Quelltextarchive

Quelltexte werden entweder in einem Archiv (meist tar) zum Download angeboten, oder können direkt über eine Versionsverwaltung bezogen werden. Nach dem Download muss das Archiv im Homeverzeichnis[7] entpackt werden[4]. Dazu bietet es sich an, dort ein Arbeitsverzeichnis wie ~/source oder ~/src anzulegen. Entpackt man das Archiv dorthin, dann wird normalerweise ein weiteres Unterverzeichnis mit dem Programmnamen und oftmals auch der Versionsnummer angelegt - z.B. programmname-0.1.0. Dieses Verzeichnis ist der Ort, an dem die gesamten hier erklärten Methoden ausgeführt werden und wird von hier an als "Quelltextverzeichnis" bezeichnet.

Dokumentation

Alle nötigen Informationen für das Kompilieren und Installieren lassen sich direkt im Quelltextverzeichnis finden, oder aber auf der Entwicklerseite des jeweiligen Programms. Im Quelltextverzeichnis befinden sich Textdateien wie README, INSTALL, BUILD o.ä., die weiterführende Informationen zu den Abhängigkeiten und Konfigurationsoptionen, sowie Installationsanweisungen enthalten.

Hinweis:

In den meisten Installationsanleitungen, die nicht für Ubuntu geschrieben sind, fehlt oft die Angabe des Befehls "sudo", ist durch "su" ersetzt, oder die Befehlszeile ist statt dessen mit einem "#" für "root" gekennzeichnet. Bei Ubuntu muss für systemweit gültige Operationen stets "sudo"[6] verwendet werden.

Terminal

Auch wenn das Terminal[3] sehr ausführlich in seinem eigenen Artikel behandelt wird, sei an dieser Stelle noch einmal auf einen Umstand hingewiesen, der sich gerade für Anfänger beim Kompilieren als unerwartete Fallgrube erwiesen hat. Startet man das Terminal, so wird in der Befehlszeile das Homeverzeichnis[7] als Arbeitsverzeichnis gesetzt. Bevor man also einen Quelltext kompilieren kann, muss man erst in das Quelltextverzeichnis wechseln und von dort arbeiten.

Abhängigkeiten auflösen

Jedes Programm hängt von Bibliotheken (Libraries) und/oder anderen Programmen ab. Bei der Installation eines Paketes werden diese Abhängigkeiten automatisch von der Paketverwaltung[9] mitinstalliert. Für das Kompilieren eines Programms aus dem Quelltext müssen Abhängigkeiten allerdings manuell installiert werden. Dieser Vorgang stellt die erste Hürde dar, die man auf dem Weg zu einem selbstkompilierten Programm nehmen muss.

Die erste, grundlegende Abhängigkeit fehlt bereits, weil Ubuntu im Gegensatz zu anderen Linux-Distributionen von Haus aus keinen entsprechenden Compiler für C/C++ bei der Standardinstallation mitinstalliert. Die "GNU Compiler Collection" (GCC) sowie andere Werkzeuge sind in einem Metapaket enthalten, das über die Paketverwaltung nachinstalliert werden muss[1]:

Abhängigkeiten für eine neue Paketversion

Möchte man kein neues Programm, sondern nur eine neuere Version eines bereits in den Paketquellen[8] vorhandenen Pakets kompilieren, dann lässt sich diese Hürde mit einem einfachen Befehl im Terminal[3] nehmen, der automatisch die nötigen Abhängigkeiten installiert:

sudo apt-get build-dep <Programmname>

Das geht z.B. auch mit aptitude:

sudo aptitude build-dep <Programmname>

Hinweis:

Für neueren Programmversionen können sich die Abhängigkeiten geändert haben und um weitere Bibliotheken oder Programme erweitert worden sein. Ein Blick in die Dokumentation sollte man also auch in diesem Fall noch werfen.

Abhängigkeiten für ein neues Programm

Beim Kompilieren eines Programms, das nicht in den Paketquellen[8] vorhanden ist, gestaltet sich dieser Schritt etwas schwieriger. Die Auflistung der Abhängigkeiten in der Dokumentation ist oftmals sehr allgemein gehalten, was das Auflösen der Abhängigkeiten dann zu einem Ratespiel werden lässt.

Prinzipiell kann man zwischen fünf verschiedenen Arten von Abhängigkeiten unterscheiden:

  1. Programme für das Kompilieren und Installieren wie der Compiler oder Make
  2. Entwicklerdateien (Development Files) von Bibliotheken für das Kompilieren. Solche Bibliotheken sind in der Regel durch das Präfix lib für "Library" und das Suffix -dev für "Development" gekennzeichnet.
  3. Entwicklerdateien (Development Files) von Programmen für das Kompilieren. Entsprechende Pakete für diese Programme sind mit dem Suffix -dev gekennzeichnet.
  4. Programme, auf denen das zu kompilierende Programm aufbaut und ohne die bestimmte Funktionen nicht ausführbar wären
  5. Bibliotheken, auf denen das zu kompilierende Programm aufbaut. Entsprechende Pakete lassen sich am Präfix lib erkennen und werden bei der Installation der Entwicklerdateien (#2) automatisch als Abhängigkeit mitinstalliert.

Ein Beispiel:

In der Dokumentation steht die Abhängigkeit "GTK+ >= 2.10", dann ist gemeint, dass für das Ausführen des Programms libgtk2.0 größer oder gleich der Version 2.10 benötigt wird und für das Kompilieren libgtk2.0-dev. Die Installation von libgtk2.0-dev würde als Abhängigkeit dann die Installation von libgtk2.0 mit sich ziehen.

Hinweis:

Verwirrung kommt oft dadurch zustande, dass bestimmte Abhängigkeiten einfach als Komplettpaket aufgelistet sein können, aber in den Paketquellen der Linux-Distribution auf mehrere Pakete verteilt sind. Ein gutes Beispiel ist Boost, das in den Paketquellen von Ubuntu so aufgeteilt ist, dass man mit der Installation des Pakets libboost-dev nichts erreicht, weil die Abhängigkeiten eigentlich libboost-regex-dev vorsehen.

Fehlende Pakete oder falsche Paketversion

Sollte ein Paket der Abhängigkeiten nicht in den Paketquellen[8] vorhanden sein, dann wird man sich zum Quelltext des eigentlichen Programms noch zusätzlich den Quelltext des fehlenden Pakets herunterladen, kompilieren und installieren müssen.

Bei einem Paket in den Abhängigkeiten, welches in den Paketquellen in einer falschen Programmversion vorliegt (also einer zu alten oder zu neuen), bewegt man sich langsam auf einen kritischen Punkt zu. Da auch andere Pakete von diesem Paket abhängen können, würde das Installieren der nötigen Version möglicherweise zu Beeinträchtigungen bei anderen Programmen und somit auch zu Beeinträchtigungen der Systemstabilität führen können.

Jeder wird hier für sich selber sehr sorgfältig abwägen müssen, inwieweit Aufwand und Risiko durch den Nutzen des Programms wett gemacht werden.

Hinweis:

Sollte man sich unsicher sein, ob man abschließend alle Abhängigkeiten korrekt auflösen konnte, dann stellt das meist kein Problem dar, weil fehlende Abhängigkeiten keine katastrophalen Folgen haben. Im folgenden Abschnitt zur Konfiguration im Vorfeld des eigentlichen Kompilierens wird darauf näher eingegangen.

Allgemeines Vorgehen

Diese Methode, deren ersten Schritte man als gängigen Standard unter Linux bezeichnen kann, beschreibt allgemeingültig das Kompilieren. Vorausgesetzt wird, dass der Anwender sich mit seinem Terminal[3] im Quelltextverzeichnis befindet.

Konfigurieren

Der folgende Befehl startet ein Skript, das überprüft, ob das Programm mit der aktuellen Systemumgebung kompatibel ist, alle Abhängigkeiten aufgelöst wurden und übergibt gegebenenfalls systemspezifische Optionen an den Compiler. Weitere Optionen für das configure-Skript werden am Ende des Abschnitts behandelt.

./configure

Dieses configure-Skript ist nicht unbedingt immer vorhanden. So kommt es bei weniger umfangreichem Quelltext wie bei Plugins häufiger vor, dass sie unkonfiguriert kompiliert werden können und die Installation dann lediglich darin besteht, das kompilierte Plugin in das richtige Verzeichnis zu kopieren. configure-Skripte werden meist mit dem GNU_Build_System erstellt. Es gibt jedoch auch andere Build-Systeme, bei denen die Konfiguration eventuell anders erfolgt. Diese werden in Programme_kompilieren/Alternativen: Abweichende Methoden behandelt.

Fehlermeldungen

In diesem Abschnitt werden einige häufig auftretende Fehler durch fehlende Abhängigkeiten beim Ausführen des configure-Skripts und mögliche Lösungen beschrieben.

Beispiel 1:

checking for C compiler default output file name...

configure: error: C compiler cannot create executables

Dieser Fehler sollte sehr frühzeitig auftauchen und weist darauf hin, dass kein passender Compiler gefunden werden konnte. Er bedeutet also, dass das Paket build-essential nicht oder nicht korrekt installiert wurde[1].

Beispiel 2:

checking for ALSA... configure: WARNING: Package alsa was not found in the pkg-config search path.

Perhaps you should add the directory containing `alsa.pc'

to the PKG_CONFIG_PATH environment variable

No package 'alsa' found

Das Skript verweist in der Ausgabe sehr genau auf die fehlende Datei alsa.pc. Mit dieser Information kann man jetzt in der Ubuntu Paketsuche unter "Search contents of packages" direkt nach dieser Datei in einem Paket suchen, und wird als Ergebnis libasound2-dev erhalten. Dieses Paket muss jetzt nachinstalliert werden.

Anstelle der Ubuntu-Paketsuche kann man diese Suche auch über die Befehlszeile mit dem Utility apt-file lösen, wofür das gleichnamige Paket installiert werden muss.[1]

Zuerst muss ein Zwischenspeicher (Cache) für Pakete erstellt werden:

apt-file update

Anschließend wird die Suche durchgeführt (ob mit "find" oder "search", spielt dabei keine Rolle):

apt-file find Dateiname

Oder:

apt-file search Dateiname

Beispiel 3:

configure: error: Library requirements (gtk+-2.0 >= 2.4.0 glib-2.0 >= 2.4.0 atk >= 1.0 pango >= 1.0 libglade-2.0 >= 2.4.0) not met;

consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.

Hier verweist die Ausgabe auf eine fehlende Bibliothek. Unter Berücksichtigung der Konventionen für die Benennung solcher Pakete lässt sich jetzt aus dem Namen der Bibliothek in der Ausgabe in Kombination mit Präfix und Suffix ein sinnvoller Suchbegriff generieren. In diesem Fall ist die Suche am effektivsten über den Begriff "libgtk".

Die Suche kann entweder über ein Frontend für die Paketverwaltung wie Synaptic durchgeführt werden, oder aber mit "apt-file" über Befehlszeile, bei dem die Suchergebnisse mit der Option -l auf Pakete beschränkt und mit grep noch weiter eingegrenzt werden können.

apt-file -l find libgtk | grep dev

Die Suchergebnisse enthalten u.a. das Paket libgtk2.0-dev, welches hier am wahrscheinlichsten vermisst wird und nachinstalliert werden muss.

Beispiel 4:

checking for xmms-config... no

checking for XMMS - version >= 1.2.4... no

configure: WARNING: *** XMMS >= 1.2.4 not installed - please install first ***

Diesmal fehlt ein Programm, auf das aufgebaut wird. XMMS sollte sich als Paket recht leicht ausfindig machen und nachinstallieren lassen - allerdings nicht unter Ubuntu, da XMMS mit Ubuntu 8.04 Hardy Heron aus allen Paketquellen komplett entfernt wurde. Speziell in diesem Fall wäre also jedes weitere Vorgehen zum Scheitern verurteilt...

Weitere Optionen

Außer der Überprüfung der Abhängigkeiten können mit dem configure-Skript weitere systemspezifische Optionen an den Compiler übergeben werden. Selbstkompilierte Programme sollten grundsätzlich in den Ordner /usr/local installiert werden, was auch meist der Standardeinstellung des Skripts entspricht. Sollte das nicht so sein oder vom Anwender ein anderer Installationspfad gewünscht werden, kann man den mit der Option --prefix=Pfad übergeben. Folgender Befehl stellt sicher, dass die Dateien auf jeden Fall nach /usr/local installiert werden:

./configure --prefix=/usr/local

Weitere Optionen können in der Regel mit --enable-xyz ein- und mit --disable-xyz ausgeschaltet werden. Die vollständige Auflistung der Optionen erhält man entweder aus der Dokumentation oder mit dem Befehl:

./configure --help

Kompilieren

Ist das configure-Skript fehlerfrei durchgelaufen, startet der eigentliche Kompiliervorgang mit folgendem Befehl:

make

Je nach Programmgröße und Rechenleistung kann der Kompiliervorgang etwas länger dauern.

Hinweis:

Auf Computern mit mehreren CPU-Kernen kann man das Kompilieren oft erheblich beschleunigen, indem man "make -j" statt "make" ausführt.

Fehlermeldungen

Auch beim eigentlich Kompilieren können wieder Fehler auftreten. Diese sind allerdings eher auf Probleme mit einer Paketversion oder dem Verschulden des Autor des jeweiligen Programms zurückzuführen. Das configure-Skript sollte im Vorfeld sicherstellen, dass alle Abhängigkeiten korrekt aufgelöst sind, was aber in seltenen Fällen nicht passiert sein kann.

So kann die Abhängigkeit von einer Bibliothek größer oder gleich einer bestimmten Version zwar aufgelöst sein, eine neuere Version dieser Bibliothek unglücklicherweise aber kleine Änderungen enthalten, die das Kompilieren empfindlich stören. Das wurde dann vom Autor vielleicht einfach noch nicht bemerkt. Vielleicht hat der Autor aber auch eine ganze Abhängigkeit vergessen.

Der erste Schritt ist wieder die Analyse der Ausgabe. Diesmal kommt es aber nicht auf die letzten Zeilen an, weil diese meist nur Folgefehler enthalten.

Beispiel 1:

Hier sollte man auf eine spezielle Zeile achten, die auf eine fehlende Datei mit der Endung .h hinweist. Hat man eine solche gefunden, ist das Problem schon so gut wie gelöst, und der größte Aufwand ist die Erstellung einer Fehlermeldung an den Programmautor wegen eines unvollständigen configure-Skriptes, das die fehlende Komponente nicht bemerkt hat.

Man muss nun herausbekommen, welches Paket die fehlende Datei enthält. Am Besten geht man so vor, wie oben bei Fehlermeldungen während des Konfigurierens in Beispiel 2 oder 3 erklärt, mit der Suche über die Ubuntu Paketsuche oder dem Utility apt-file. Ist das Paket gefunden und installiert, kann "make" abermals ausgeführt werden und setzt dann glücklicherweise wieder da an, wo der Fehler aufgetreten ist. Bereits kompilierte Teile des Programms werden also nicht neu kompiliert.

Beispiel 2:

/usr/bin/ld: cannot find -lXtst

Das Programm "ld" ist der "Linker", der beim Kompilieren alle Bibliotheken und Programmteile zusammenfügt. Mit "-l..." sind immer spezielle Bibliotheken (Libraries) gemeint. In diesem Fall geht man, wie oben beim Konfigurieren in Beispiel 2 oder 3 erklärt, vor:

apt-file -l find libxtst | grep dev

Als Ausgabe erhält man das Paket libxtst-dev, welches dann zusätzlich installiert werden muss.[1]

Installieren

Nachdem "make" fehlerfrei durchgelaufen ist, erfolgt die Installation hier mit "checkinstall". Dazu muss das gleichnamige Paket installiert[1] werden:

Hinweis:

Das Programm checkinstall liegt in den Paketquellen in "universe"[2]. Wer nur Programme aus "main" benutzen möchte, sollte sich die Debian-Methode anschauen.

Der Vorteil dieser Methode liegt darin, dass ein Programm nicht an der Paketverwaltung[1] vorbei installiert wird, sondern ein (primitives) Paket im Quelltextverzeichnis erstellt und automatisch installiert wird. Ein solches Paket eignet sich nicht für die Weitergabe, vereinfacht aber deutlich das De- bzw. Neuinstallieren[5] eines selbstkompilierten Programmes auf dem eigenen Rechner.

Nachteil dieser Methode ist, dass mit "checkinstall" Dateien in das System kopiert werden, ohne darauf Einfluss nehmen zu können. So können Dateien überschrieben werden, ohne dass man es merkt. Im Prinzip hat "checkinstall" die gleichen Schwächen wie ein "make install", der Vorteil der Registrierung des selbstkompilierten Programms in der Paketverwaltung überwiegt dabei aber.

Hinweis:

Technisch betrachtet gilt die Verwendung von checkinstall als "quick & dirty". Allerdings überwiegen - in Ermangelung einer Alternative - die Vorteile dieses Programms gegenüber Schwächen und seine Verwendung ist damit absolut legitim. Ausdrücklich sei noch einmal darauf hingewiesen, dass die mit checkinstall erstellen Pakete sich nicht für die Weitergabe, sondern nur für den Eigenbedarf eignen.

Hinweis:

Für das Kompilieren von Kernelmodulen (Treibern) ist "checkinstall" nicht geeignet. Hierbei muss auf die Installation über "make install" aus der Standard-Methode zurückgegriffen werden. Ferner sei hier auch nochmal erwähnt, dass Kernelmodule bei Kernel-Updates, also der Installation eines neuen Kernels, immer neu kompiliert und installiert werden müssen.

Zum Aufruf von "checkinstall" folgenden Befehl ausführen:

sudo checkinstall

Das Programm bietet jetzt einige Einstellungsmöglichkeite für die Paketinformationen:

"checkinstall" wird nach dem Durchlauf ausgeben, ob die Installation erfolgreich war und wo das neu erstelle Paket abgelegt wurde.

Möchte man auf eine automatische Installation des neu erstellten Pakets verzichten, muss der folgende Befehl ausgeführt werden:

sudo checkinstall --install=no

Alternativ hilft auch der folgende Aufruf:

checkinstall

Zwangsläufig wird "checkinstall" einen Fehler ausgeben, weil das Programm ohne Root-Rechte ein Paket nicht installieren kann. Das Paket wird aber trotzdem erstellt und kann anschließend manuell installiert[1] werden.

Fehlermeldungen

Bricht "checkinstall" die Installtion mit obskuren Fehlern ab, dann liegt das meist daran, dass es neue Dateien nicht anlegen kann. Das Problem liegt dann im "file translation code" von "installwatch" (einem Teil des Programms), dass hierfür ein Art virtuelles Dateisystem bereitstellt, damit das eigentliche nicht angerührt wird. Die Installationsroutine kann manchmal neu erstellte Dateien nicht finden und bricht deswegen ab. Mit der Option --fstrans=no beim Aufruf von "checkinstall" wird diese Funktion deaktiviert. Oft ist eine Installation auch erfolgreich, wenn zunächst "make install" ausgeführt wird, und danach ein "checkinstall" erfolgt.

Problematisch ist in diesem Zusammenhang, dass mit Root-Rechten erstellte Dateien im eigenen Homeverzeichnis nicht vom eigentlichen Benutzer gelöscht werden können. Zum Löschen der mit sudo... selbst erstellten Pakete sind grundsätzlich Root-Rechte erforderlich.

Die Standard-Methode

Diese Methode unterscheidet sich lediglich beim Installieren von der Ubuntu-Methode. Die Abschnitte für die Schritte vorher können einfach übernommen werden:

  1. Konfigurieren
  2. Kompilieren

Achtung!

Diese Art der Installation von Programmen wird so nicht für Debian-basierende Systeme empfohlen, weil so die installierten Dateien nicht von der Paketverwaltung[1] registriert werden und diese stören können. Auch ist eine (vollständige) Deinstallation des Programms häufig sehr schwierig.

Eine bessere Lösung findet man unter Allgemeines Vorgehen sowie im Unterartikel Alternativen, Die Debian-Methode.

Nachdem "make" fehlerfrei durchgelaufen ist, kann man das Programm jetzt mit folgendem Befehl im Verzeichnis, das mit "./configure --prefix=Pfad" festgelegt wurde, installieren:

sudo make install

Bei manchen Programmen besteht die Möglichkeit, andere Installationsvarianten über "make" zu wählen bzw. auf "make install" kann noch ein weiterer Befehl folgen. Der Zusatz für "install" sieht von Programm zu Programm meist unterschiedlich aus und ist ggf. der Dokumentation zu entnehmen.

Als Beispiel die lokale Installation des Programms Xournal im Homeverzeichnis:[1]

./configure --prefix=$HOME

make

make install

make home-desktop-install

Deinstallieren

Hinweis:

Dieser Schritt entfällt, wenn das Programm mit der Ubuntu- oder Debian-Methode installiert wurde.

Das Deinstallieren eines Programms, das mit "make install" installiert wurde, ist prinzipiell nicht kompliziert. Man muss sich dazu wieder im Quelltextverzeichnis befinden und außerdem müssen die Entwickler im Makefile eine "uninstall"-Regel erstellt haben - was nicht immer der Fall ist. Der Befehl für das Deinstallieren ist:

sudo make uninstall

Sollte man das für die Installation verwendete Quelltextverzeichnis bereits gelöscht haben, muss zuerst der Quelltext neu heruntergeladen, entpackt und anschließend noch einmal das configure-Skript für den selben Installationspfad, der mit --prefix=Pfad für die Installation gesetzt wurde, durchgelaufen sein.

Im Notfall hilft dann nur das eigene Interpretieren des Makefile oder das Forum, um zu erfahren, welche Dateien wo installiert wurden, um diese manuell mit Root-Rechten[6] wieder entfernen zu können.

Quelltextverzeichnis säubern

Ein Grund, das Quelltextverzeichnis von allen kompilierten Programmteilen zu bereinigen, wäre z.B., wenn dem configure-Skript die falschen Optionen übergeben wurden. Oder man hat das Quelltextverzeichnis zwecks Weiterverarbeitung (z.B. Paketbau) nicht gelöscht und muss nach einem Distributionsupgrade alle Programme erneut kompilieren.

Das Bereinigen ist notwendig, weil "make" bereits kompilierte Programmteile erkennt und nicht neu kompilieren würde. Der Befehl, um ein Quelltextverzeichnis zu säubern, lautet:

make clean

Um alle durch den "configure"- und "make"-Vorgang erstellten Dateien wieder zu entfernen, kann der Befehl

sudo make distclean

verwendet werden.

Alternativen

Weitere Methoden werden in Programme kompilieren/Alternativen beschrieben.

Weiterführende Links


Diese Revision wurde am 12. September 2010 um 22:52 Uhr von BigMc erstellt.
Dieser Seite wurden folgende Begriffe zugeordnet: Ubuntu, Paketverwaltung, Installation, System, Programmierung

Benutzername Passwort dauerhaft? Passwort vergessen?

kompilieren

mein Samba mit SuSE 11.0


SSH Zugang / iptables


iptables

Einige versuchen mit Hilfe von Software durch verschiedene einlogversuche benutzer und passwörter zu knacken. Benutzernamen sollten deshalb nicht so einfach sein (Also keine Namen, Geburtsdaten o.ä.). Auf jedem Linux/Unix Rechner gibt es den "root". Den kann man nicht umbenennen, deshalb ist dieser "user" in der grossen Welt bekannt und sollte von aussen nicht direkt funktionieren. In der Datei /eth/ssh/sshd_config gibt es einen Parameter der da heisst : PermitRootLogin YES . Auf deutsch: erlaube root login JA. Das sollte man auf "NO" ändern, die Datei speichern und den SSH Server mit Hilfe des komandos : /etc/ssh/sshd restart neu starten.

Jetzt ist zumindest der root von draussen geschützt. Das heist nicht das nich versucht wird andere benutzer zu versuchen und dass binne sekunden mittels Hacker Software:

Jun 2 06:14:10 asbacher sshd[7484]: Invalid user qwe123 from 125.152.96.154

Jun 2 06:14:12 asbacher sshd[7486]: Invalid user 123qwe from 125.152.96.154

Jun 2 06:14:14 asbacher sshd[7488]: Invalid user q1w2e3 from 125.152.96.154

Jun 2 06:14:17 asbacher sshd[7490]: Invalid user 1q2w3e from 125.152.96.154

Jun 2 06:14:19 asbacher sshd[7492]: Invalid user pass1234 from 125.152.96.154

Jun 2 06:14:21 asbacher sshd[7494]: Invalid user 1111 from 125.152.96.154

Jun 2 06:14:24 asbacher sshd[7496]: Invalid user 111111 from 125.152.96.154

Jun 2 06:14:26 asbacher sshd[7498]: Invalid user 11111 from 125.152.96.154

Jun 2 06:14:29 asbacher sshd[7500]: Invalid user aaa from 125.152.96.154

Jun 2 06:14:31 asbacher sshd[7502]: Invalid user rootabc from 125.152.96.154

Jun 2 06:14:33 asbacher sshd[7504]: Invalid user 123root123 from 125.152.96.154

Jun 2 06:14:36 asbacher sshd[7506]: Invalid user 123qwe from 125.152.96.154

Jun 2 06:14:38 asbacher sshd[7508]: Invalid user 123qwe from 125.152.96.154

Jun 2 06:14:41 asbacher sshd[7510]: Invalid user root# from 125.152.96.154

Jun 2 06:14:43 asbacher sshd[7512]: Invalid user !@#$% from 125.152.96.154

Jun 2 06:14:45 asbacher sshd[7514]: Invalid user !@#$%^ from 125.152.96.154

Jun 2 06:14:48 asbacher sshd[7516]: Invalid user pass123 from 125.152.96.154

Jun 2 06:14:50 asbacher sshd[7518]: Invalid user abc from 125.152.96.154

Jun 2 06:14:53 asbacher sshd[7520]: Invalid user abcde from 125.152.96.154

Jun 2 06:14:55 asbacher sshd[7522]: Invalid user abcdef from 125.152.96.154

Jun 2 06:14:57 asbacher sshd[7524]: Invalid user abcdefg from 125.152.96.154

man sieht das hier binnen sekunden die verschiedensten user versucht werden. Hier nur ein kleiner Ausschnitt, das kann über stunden so gehen. Verhindern kann man das mit iptables. Hier kann man eintragen das nach x versuchen die IP abdresse für y sekunden blockiert wird, so dass diese Hacker Software ausgehebelt wird.

die entsprechenden komandos müssen so eingegeben werden:

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 120 --hitcount 3 --rttl --name SSH -j DROP

der eth Port sollte natürlich stimmen!

man kann auch geziehlt einzelne IP Adressen blockieren. wie man oben sieht kommt hier einer mit der IP 125.152.96.154 und versucht einzubrechen.

Durch das komando:

iptables -I INPUT -s 125.152.96.154 -j DROP wird auf diese IP nicht mehr geantwortet

mit

iptables -D INPUT -s 125.152.96.154 -j DROP wird das komando aufgehoben

man kann auch ganze netzwerke sperren:

iptables -I INPUT --src range 192.168.0.5-192.168.0.10 -j DROP sperrt den Bereich von xx.xx.xx.5 bis xx.xx.xx.10

SSH Zugang / iptables

mein Samba mit SuSE 11.0