Schlagwort-Archive: Linux

Pimp my shell – Eine vernünftige Arbeitsumgebung für Linux

Immer, wenn ich ein neues Linux aufsetze, führe ich bestimmte Kommandos durch bzw. konfiguriere ich mein System so, dass ich vernünftig damit arbeiten kann. Jeder hat seine Eigenheiten und Bedürfnisse – hier skizziere ich mal die meinen.

Zunächst installieren wir uns sudo, um als normaler Nutzer auch wie ein Supernutzer (=root) agieren zu können, ohne uns als root anmelden zu müssen. Natürlich müssen wir diese eine Installation selbst noch als root vornehmen. Danach müssen wir uns nie wieder als root anmelden – außer ins Notfällen.

apt-get install sudo

Nun fügen wir den während der Installation angelegten Nutzer der Gruppe „sudo“ hinzu: adduser sudo. In meinem Falle also den Nutzer „juergen“

adduser juergen sudo

Mit dem Befehl groups <username> kann man prüfen, ob das Hinzufügen tatsächlich geklappt hat.

groups juergen

Das war es schon. Jetzt bitte mit exit wieder aus der Shell ausloggen und als normaler Nutzer wieder einloggen. Jetzt kann man mit einem vorangestellten sudo Befehle wie root ausführen.

Testen wir unsere neuen Fähigkeiten, indem wir gleich einmal einen vernünftigen Editor installieren.

sudo apt-get install nano

Mit diesem Editor nehmen wir unsere erste Anpassung vor. Wir sorgen dafür, dass ab jetzt jeder neue Nutzer mit der bin/bash Shell verbunden wird.

sudo cp /etc/adduser.conf /etc/adduser.conf.bak # Kopie schadet nie
sudo nano /etc/adduser.conf

Im Editor suchen wir jetzt folgende Zeile (oder fügen sie, falls nicht vorhanden, hinzu):

DSHELL=/bin/bash

Als Nächstes sorgen wir dafür, dass unser System gleich mit den wichtigsten Alias-Befehlen versorgt wird. Mit einem alias kann man mehrere Linux-Kommandos, oder ein Linux-Kommando mit mehreren Optionen durch einen neuen Befehl ersetzen. Es wird benutzt, um Zeit zu sparen und weniger zu tippen.

Das bekannteste alias dürfte wohl die Abkürzung dir für den Befehl „ls -l“ sein.

Wir bearbeiten wieder eine Konfigurationsdatei.

sudo cp /etc/bash.bashrc /etc/bash.bashrc.bak #  Kopie schadet nie
sudo nano /etc/bash.bashrc

Und fügen ans Ende folgende Zeilen hinzu:

alias +='pushd .'
alias ..='cd ..'
alias ...='cd ../..'
alias dir='ls -la  --color=auto'
alias gzcat='gunzip -c'
alias l='ls -alF'
alias la='ls -la'
alias ll='ls -la'
alias ls='/bin/ls $LS_OPTIONS'
alias ls-l='ls -l'
alias md='mkdir -p'
alias o='less'
alias rd='rmdir'
alias rehash='hash -r'
alias rm='rm -i'
alias unzip='tar xfvz'
alias which='type -p'
alias zip='tar cfvz'

Und schon sieht unsere Shell (nach einer Neueinwahl) sehr viel bunter, schöner, übersichtlicher aus.

Connecting to security.debian.org dauert ewig?

sudo apt-get update

dauert ewig in der Ausführung und es hängt bei

Connecting to security.debian.org

Gut möglich, dass Debian versucht, sich mit IPv6 zu verbinden und ihr Netzwerk nur IPv4 bietet.

Versuchen Sie, Debian das penetrante IPv6 auszutreiben.

sudo nano /etc/default/grub

Suchen Sie die Zeile

GRUB_CMDLINE_LINUX_DEFAULT=“quiet“

und ersetzen Sie sie durch

GRUB_CMDLINE_LINUX_DEFAULT=“quiet ipv6.disable=1″

sudo update-grub
sudo reboot

Sie werden sehen, dass es jetzt bei

sudo apt-get update

nicht mehr hängt.

Und es geht doch: Linux, Skript ausführen beim Herunterfahren

Geradezu abenteuerlich sind die Aussagen einiger selbsternannter Experten beim Thema „Skripte ausführen beim Herunterfahren“. Von „Linux fährt man nicht herunter“ bis zu „ist überhaupt nicht möglich“ habe ich alles schon lesen dürfen.

Dabei ist es ganz einfach. Ich benutze diese Methode auf meiner virtuellen Entwicklungsmaschine, um Dateien und Datenbanken nach einem Arbeitstag auf dem Host zu sichern.

Hier also meine schnelle: „Klicken-und-vergessen“-Methode für

  • Oracle VM VirtualBox Manager
  • Host: Windows 7 64 Bit
  • Gast: Ubuntu Linux 14.04.1 – 64 Bit (Hostname: minlux)
  • Netzwerk: AVM FRITZ!Box 7390, Host über WLAN verbunden

Die auszuführenden Dateien befinden sich in /etc/init.d/.

Wir legen ein Skript an, das nichts anderes macht, als eine leere Datei namens goodbye.txt ins Home-Verzeichnis des Users zu schreiben. Das Skript, das das erledigen soll, erhält den Namen custom-shutdown.sh.

echo -e '#!/bin/sh\ntouch /home/'$USER'/goodbye.txt' | sudo tee /etc/init.d/custom-shutdown.sh

Wir machen die Datei ausführbar:

sudo chmod +x /etc/init.d/custom-shutdown.sh

Prüfen, ob alles geklappt hat:

ls -l /etc/init.d/custom-shutdown.sh
cat /etc/init.d/custom-shutdown.sh

Nun legen wir in /etc/rc0.d/ einen Link zum Skript. Beachte: das Präfix K04 vor dem Dateinamen, ohne das geht es nicht.

sudo ln -s /etc/init.d/custom-shutdown.sh /etc/rc0.d/K04custom-shutdown.sh

Fertig. Nun starten wir die Maschine neu

sudo reboot

Test, ob goodbye.txt auch wirklich angelegt wurde:

ls -l ~

Man beachte, dass die Datei für den Nutzer root angelegt worden ist, falls man noch irgendetwas damit plant.

Skript beim Hochfahren ausführen

Wer möchte, kann Skripte auch ausführen lassen beim Hochfahren des Rechners. Dann muss der Link aber nicht in rc0.d sondern in rc6.d platziert werden.

echo -e '#!/bin/sh\ntouch /home/'$USER'/hello.txt' | sudo tee /etc/init.d/custom-start.sh
sudo chmod +x /etc/init.d/custom-start.sh
sudo ln -s /etc/init.d/custom-start.sh /etc/rc6.d/K04custom-start.sh

WICHTIG: Server neu starten

Wenn man Datenbanksicherungen beim Herunterfahren anlegen möchte, so muss man natürlich beachten, dass die Datenbank schon längst selbst heruntergefahren ist. Also muss man diese kurz wieder starten:

#!/bin/sh
date >> /media/sf_share/shutdown.log # das ist mein geteiltes Verzeichnis mit dem Host
sudo /etc/init.d/mysql start # hier wird MySQL wieder gestartet
exec /etc/webmin/mysql/backup.pl --all >> /media/sf_share/shutdown.log # mit Hilfe eines Webmin-Skriptes wird das Backup angestoßen
sudo /etc/init.d/mysql stop # und hier müssen wir MySQL natürlich wieder sauber beenden

Mein Dank geht an http://ubuntu.flowconsult.at/linux/ubuntu-14-10-shutdown-script-with-rc0-d-rc6-rcd/ und https://unix.stackexchange.com/questions/34963/running-script-before-shutdown-seemingly-not-working. Mehr Informationen zum Runlevel: https://en.wikipedia.org/wiki/Runlevel#Ubuntu

Oracle VM VirtualBox Manager – Zugriff auf gemeinsame Ordner und Dateien über Gasterweiterungen

Ein Thema, zu dem ich auch keine simple Lösung finden konnte: wie tauschen Host und Gast Dateien aus? Normalerweise funktioniert das über die sogenannten Gasterweiterungen. Aber diese zu installieren, ist so umständlich und schlecht erklärt, dass es schon an Körperverletzung grenzt.

Hier also meine schnelle: „Klicken-und-vergessen“-Methode für

  • Oracle VM VirtualBox Manager
  • Host: Windows 7 64 Bit
  • Gast: Ubuntu Linux 14.04.1 – 64 Bit (Hostname: minlux) – funktioniert aber auch mit Debian 7, 8 und 9 und wohl mit den meisten anderen Linuxen
  • Netzwerk: AVM FRITZ!Box 7390, Host über WLAN verbunden
sudo apt-get install dkms -y

Ohne dem geht es nicht. Warum? Keine Ahnung. Oracle versucht es hier zu erklären.

Jetzt heißt es, die richtige ISO-Datei zu finden, auf der sich die Erweiterungen befinden, die installiert werden müssen, damit Debian/Linux „weiß“, dass es nur eine virtuelle Maschine ist und nach draußen, mit dem Host kommunizieren muss. Orientieren Sie sich an der Versionsnummer von Oracle Virtual Box Manager. Im Zweifelsfall wird es die höchste Nummer sein. Bei mir bspw. 5.1.26. Die Datei im Ordner heißt passenderweise: VBoxGuestAdditions_5.1.26.iso.

Diese Datei an einen sicheren Ort (kein Temp-Order oder ähnliches) herunterladen und über den VirtualBox Manager einlegen:  Geräte->CD/DVD-Laufwerke->Datei für virtuelles CD/DVD-Medium auswählen…

Die ISO-Datei auswählen

Die ISO-Datei auswählen

Im Manager den gemeinsamen Order (hier: C:\Users\juergen\share) angeben. Dazu noch die Optionen: „automatisch einbinden“ und „permanent erzeugen“ aktivieren. Fragen Sie mich nicht, worin der Unterschied zwischen beiden besteht.

Gemeinsamen Ordner auswählen

Gemeinsamen Ordner auswählen

sudo mount /dev/cdrom /media/cdrom

Es genügt nicht, die ISO-Datei wie oben einfach nur auszuwählen; man muss sie auch mit mount einbinden. Keine Angst wegen der Read-Only-Nachricht, denn schließlich ist die ISO-Datei ja als CD-Abbild schreibgeschützt.

cd /media/cdrom/
sudo sh ./VBoxLinuxAdditions.run

Jetzt werden die Gasterweiterungen installiert. Schon diese zweite Befehlszeile lässt sich nirgends bei Oracle finden. Wie soll da jemand von selbst darauf kommen? Die Fehlermeldungen können ignoriert werden, da sie sich meist nur auf nicht installierte Desktop-Erweiterungen beziehen.

mount -l | grep vboxsf

Ein kleiner Test. Jetzt sollte in etwa folgendes ausgegeben werden:

share on /media/sf_share type vboxsf (rw,nodev,relatime)

Wenn nicht, dann fahren Sie bitte die virtuelle Maschine komplett herunter (nicht bloß ausschalten) und starten zur Sicherheit auch noch einmal den Oracle Virtual Box Manager komplett neu und starten noch einmal mit sudo mount … wie weiter oben beschrieben.

dir /media/

Kann man schon das Verzeichnis sehen? Es sollte automatisch das Prefix „sf_“ erhalten haben; hier also „sf_share“.

sudo usermod -aG vboxsf $(whoami)

Jetzt fügen wir den aktuellen Nutzer noch der passenden Gruppe zu, sonst gibt es als kastrierter Nutzer, der man ist, wieder Probleme.

Wenn man noch zusätzliche über PHP bzw. Apache in das geteilte Verzeichnis schreiben möchte, muss der richtige Nutzer auch noch in die Gruppe gepackt werden.

sudo usermod -aG vboxsf www-data

Und wie immer: reboot nicht vergessen, denn Oracle „weiß“ nicht, was auf dem Gästesystem abläuft.

sudo reboot

Erst durch Neustart jetzt werden die Änderungen wirksam.

cd /media/sf_share
touch testfile.txt

Wir wechseln in das Verzeichnis und legen ein erstes Testfile ein, das auf beiden Maschinen zu sehen sein sollte.

Der gemeinsame Ordner auf dem Gastsystem.

Der gemeinsame Ordner auf dem Gastsystem.

Noch ein letzter Test: Jetzt sollte auch in der Windows-Maschine die Datei zu sehen sein.

Der gemeinsame Ordner auf dem Hostsystem

Der gemeinsame Ordner auf dem Hostsystem

Das war’s, q.e.d, hat doch gar nicht weh getan.

Oracle VM VirtualBox Manager: Zugriff von Host auf Gast über Hostname statt IP

Wer eine virtuelle Maschine aufsetzt, möchte sich

a) die IP des Gastsystems nicht merken und

b) nicht ständig in irgendwelchen /etc/hosts Einträge pflegen müssen.

Daher schien es mir kein großes Unterfangen, das zu erledigen, wie falsch lag ich doch. Einen ganzen Tag habe ich damit vergeudet die Posts von Linux-Trollen zu lesen, die immer nur das gleiche aussagten: „Ach, irgendwie weiß ich auch nicht, wie das geht, aber ich schicke dich auf eine lange sudo-apt-get-install-Reise mit ein wenig Du-musst-dich-erstmal-einarbeiten-Kauderwelsch und Linux-ist-nur-für-Profis-Gebetsmühlenwiederkäuerei.

Also, hier ein 1-Minuten-Tutorial für:

  • Oracle VM VirtualBox Manager
  • Host: Windows 7 64 Bit
  • Gast: Ubuntu Linux 64 Bit (Hostname: minlux)
  • Netzwerk: AVM FRITZ!Box 7390, Host über WLAN verbunden

Ausgangssituation

Versucht man per

ping minlux

über die Windows-Konsole zuzugreifen, klappt es nicht.

Kennt man, sonst wären Sie nicht auf dieser Seite. Kein Zugriff auf die Gastmaschine über den Namen. Scheiße, oder?

Kennt man, sonst wären Sie nicht auf dieser Seite. Kein Zugriff auf die Gastmaschine über den Namen. Scheiße, oder?

 

Lösung

Wir öffnen Oracle VM VirtualBox Manager und passen die Netzwerkeinstellungen an. Man muss als Anschlusspunkt „Netzwerkbrücke“ auswählen und das Gerät mit dem der Host (also die Windows-Maschine) ins Internet geht . Zu den anderen Einstellung und deren Bedeutung kann ich nichts sagen.

Einfach die richtigen Haken setzen. Kein "NAT" sondern "Netzwerkbrücke" - das ist der Kniff

Einfach die richtigen Haken setzen. Kein „NAT“ sondern „Netzwerkbrücke“ – das ist der Kniff

Ergebnis

ping ok

ping ok

Einstellungen für PuTTY

Einstellungen für PuTTY

SSH ok

SSH ok

Browser ok

Browser ok

Na, war doch gar nicht so schwer. Und wieder einmal geht ein Stück exklusives Herrschaftswissen von den Linux-Jüngern verloren. Man muss nicht das Kernel neu kompilieren, nicht mit vi und grep irgendwelche Zeilen filtern und auskommentieren und auch nicht bei Vollmond nackt im Garten auf einem Bein stehen.

Ein Haken im schmutzigen Windows setzen, fertig!