Bash on Ubuntu on Windows

Windows versteht Linux! Wenn auch nur in sehr beschränkter Art und Weise, ist dieses Features für einen wahren Linuxfan unter Windows 10 beinahe Pflicht. Die Installation ist relativ einfach:

Schritt 1
wähle Start > Einstellungen > Update und Sicherheit > Für Entwickler. Nach diesem Schritt muss ggf. Windows 10 neu gestartet werden.

Schritt 2
Gehe nun auf Systemsteuerung > Programme deinstallieren und ändern > Windows-Features aktivieren oder deaktivieren und aktiviere hier das Kästchen Windows-Subsystem für Linux (Beta)
Danach ein weiteres mal den Rechner neu starten…
windows-bash001Schritt 3
Öffne nun die Eingabeaufforderung mit Administrationsrechte und tippe
bash
ein. Erst jetzt wird die gesamte Umgebung installiert! Verlasse anschliessend die Eingabeaufforderung mit exit.
windows-bash002
Schritt 4
Starte Bash on Ubuntu on Windows via Start und dem entsprechenden Icon.
windows-bash003
Schritt 5
ab jetzt steht Dir eine Bash unter Windows 10 zur Verfügung. Wie du es von Linux gewohnt bist, werden Pakete via
# apt-get install
installiert.
windows-bash004

php7 auf Debian Jessie

Debain eignet sich hervorragend, um Webseiten lokal zu entwerfen. Dabei spielt die PHP-Version u.a. eine wesentliche Rolle, was Performance und Geschwindigkeit angeht. Normalerweise landet zur Zeit PHP5 auf Jessie. Mit wenig Handgriffen lässt sich dies jedoch ändern!

Vorsicht: tippe diese Befehle nur ein, wenn du weisst was Du tust. Ein Backup der Datenbank ist selbstverständlich Pflicht!

Schritt 1
füge folgende Quellen in /etc/apt/sources.list ein:

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

Schritt 2
Installiere den GnuPG Key:

wget https://www.dotdeb.org/dotdeb.gpg
# apt-key add dotdeb.gpg

Schritt 3
und aktualisiere die Paktetquellen

# apt-get update

Schritt 4
installiere nun das Metapacket php7.0

# apt-get install php7.0 

Schritt 5
überprüfe nun die installiereten Pakete:

# dpkg -l | grep php
ii  libapache2-mod-php5                   5.6.22+dfsg-0+deb8u1                 amd64        server-side, HTML-embedded scripting language (Apache 2 module)
ii  libapache2-mod-php7.0                 7.0.7-1~dotdeb+8.1                   amd64        server-side, HTML-embedded scripting language (Apache 2 module)
ii  php-common                            21-1~dotdeb+8.1                      all          Common files for PHP packages
ii  php-gettext                           1.0.11-1                             all          read gettext MO files directly, without requiring anything other than PHP
ii  php-readline                          21-1~dotdeb+8.1                      all          readline module for PHP [default]
ii  php-tcpdf                             6.0.093+dfsg-1                       all          PHP class for generating PDF files on-the-fly
ii  php5-cli                              5.6.22+dfsg-0+deb8u1                 amd64        command-line interpreter for the php5 scripting language
ii  php5-common                           5.6.22+dfsg-0+deb8u1                 amd64        Common files for packages built from the php5 source
ii  php5-gd                               5.6.22+dfsg-0+deb8u1                 amd64        GD module for php5
ii  php5-json                             1.3.6-1                              amd64        JSON module for php5
ii  php5-mcrypt                           5.6.22+dfsg-0+deb8u1                 amd64        MCrypt module for php5
ii  php5-mysql                            5.6.22+dfsg-0+deb8u1                 amd64        MySQL module for php5
ii  php5-readline                         5.6.22+dfsg-0+deb8u1                 amd64        Readline module for php5
ii  php7.0                                7.0.7-4                              all          server-side, HTML-embedded scripting language (metapackage)
ii  php7.0-cli                            7.0.7-1~dotdeb+8.1                   amd64        command-line interpreter for the PHP scripting language
ii  php7.0-common                         7.0.7-1~dotdeb+8.1                   all          Common files for packages built from the PHP source
ii  php7.0-json                           7.0.7-1~dotdeb+8.1                   amd64        JSON module for PHP
ii  php7.0-opcache                        7.0.7-1~dotdeb+8.1                   amd64        Zend OpCache module for PHP
ii  php7.0-readline                       7.0.7-1~dotdeb+8.1                   amd64        readline module for PHP
ii  phpmyadmin                            4:4.2.12-2+deb8u1                    all          MySQL web administration tool

Schritt 6
entferne nun php5:

# apt-get purge php5*

Schritt 7
und installiere phpmyadmin nach:

# apt-get install phpmyadmin

Schritt 8
überprüfe z.B. mit einer Datei info.php unter /var/www/html nun die Version:
php7-in-jessie

Nachtrag
es wäre zu schön gewesen, um Wahr zu sein. Nach Aufruf von http://localhost/phpmyadmin zeigte sich mir folgendes Bild:
fehler-mysqli-erweiterung-fehlt
ein finales

# apt-get install php7.0-mysql

brachte den gewünschten Erfolg!
phpmyadmin-mysli-erweiterungPS: den Webserver startest Du neu mit:

/etc/init.d/apache2 restart

ein .vdi File mounten

vdi-file-mountUnter der VirtualBox von Oracle werden Festplattenabbilder normalerweise im Format .vdi abgelegt.
Dabei landet ein mehr oder weniger riesengrosser „Datenklumpen“ als einzige Datei auf der Festplatte.

Praktisch wäre es, von Linux direkt auf diese Datei zugreifen zu können, ohne das betreffende OS jeweils starten zu müssen…

Vergewissere Dich, ob das Pakte qemu bereits installiert ist. Wenn nicht, tippe

# apt-get install qemu

ein. Nun müssen wir das Modul nbd laden. Der Schalter max_part=16 verweist auf die maximale Anzahl an möglichen Partitionen. Partition 3 befindet sich dann z.B. unter nbd0p3

# modprobe nbd max_part=16

Jetzt laden wir das .vdi File

# qemu-nbd -c /dev/nbd0 FILENAME.vdi

und überprüfen, wie viele Partitionen sich nun unter nbd0pX befinden.

ls -l /dev | grep nbd*
brw-rw----  1 root disk       43,   0 Okt 31 11:33 nbd0
brw-rw----  1 root disk       43,   1 Okt 31 11:33 nbd0p1

die Partition muss noch eingehängt werden:

# mount /dev/nbd0p1 /mnt

das war’s bereits. Das .vdi-File kann nun unter /mnt wie ein normaler Ordner behandelt werden. Vergiss nicht am Ende die ganze Geschichte wieder auszuhängen und ggf. das Modul nbd zu beenden:

# umount /mnt
# qemu-nbd -d /dev/nbd0
# rmmod nbd

Paketabhängigkeit in Debian (hier an Google Earth)

das Installieren via Paketmanager ist in den meisten Fällen einfach. Dennoch kann beim Versuch (hier Google Earth) auf die Platte zu bekommen etwas schief gehen. Wobei „schief gehen“ im eigentlichen Sinne falsch ist! Hier geht nichts schief, sondern Debian kann schlicht und einfach ein Paket (hier lsb-core) nicht auflösen bzw. finden, welches für das zu installierende Programm relevant ist.
Wir laden uns von Google Earth die neuste Version herunter und installieren diese per dpkg:

# dpkg --install google-earth-stable_current_amd64.deb
Entpacken von google-earth-stable (7.1.4.1529-r0) ...
dpkg: Abhängigkeitsprobleme verhindern Konfiguration von google-earth-stable:
  google-earth-stable hängt ab von lsb-core (>= 3.2); aber:
  Paket lsb-core ist nicht installiert.
  (...)

in den meisten Fällen hilft hier ein: # apt-get -f install weiter:

# apt-get -f install
(...)
Die folgenden NEUEN Pakete werden installiert:
  (...) lsb-core (...)
(...)
E: Fehlschlag beim Holen von http://ftp.ch.debian.org/debian/pool/main/g/glibc/libc6-i386_2.19-18_amd64.deb  404  Not Found [IP: 2001:67c:10ec:3dd1::42 80]
E: Einige Archive konnten nicht heruntergeladen werden; vielleicht »apt-get update« ausführen oder mit »--fix-missing« probieren?

Tja, dann machen wir doch einfach das, was der Paketmanager von Debian vorschlägt…

# apt-get update
# apt-get upgrade
Probieren Sie »apt-get -f install«, um dies zu korrigieren.
Die folgenden Pakete haben unerfüllte Abhängigkeiten:
 google-earth-stable : Hängt ab von: lsb-core (>= 3.2) ist aber nicht installiert
E: Unerfüllte Abhängigkeiten. Versuchen Sie, -f zu benutzen.

…und beenden das Ganze nochmals mit einem finalen:

# apt-get -f install
(...)
Vormals nicht ausgewähltes Paket lsb-core wird gewählt.
Vorbereitung zum Entpacken von .../lsb-core_4.1+Debian13+nmu1_amd64.deb ...
Entpacken von lsb-core (4.1+Debian13+nmu1) ...
(...)
lsb-core (4.1+Debian13+nmu1) wird eingerichtet ...
(...)

hat geklappt!
gestartet wird Google Earth mit:

/usr/bin/google-earth
google-earth-stable

google-earth-stable hat soeben alle nötigen Pakete installiert und kann gestartet werden. Ab jetzt kannst Du auf Entdeckungreise gehen. Hier das Stade de Suisse in Bern…

HINWEIS
um die verschiedenen Pakete zu analysieren oder zusätzliche Informationen darüber zu erhalten, kann man sich dpkg und/oder apt-cache bedienen. Nähere Informationen bekommst Du über die man-Pages der jeweiligen Befehle.

$ dpkg -l | grep lsb-core
$ apt-cache policy lsb-core
$ apt-cache showpkg lsb-core

und noch was: Fehlermeldungen sind da, um gelesen und verstanden zu werden!

ein C++ Programm kompilieren und ausführen

Mit diesem kleinen Tutorial wirst Du in wenigen Minuten ein wenig besser verstehen, was eine Binärdatei und eine Klartextdatei (hier der Quellcode) ist. Als Compiler nehmen wir hier g++ oder alternativ gcc. Selbstverständlich müssen diese Pakete bereits installiert sein.

Erstelle einen geeigneten Ordner mit:

mkdir meinc++

und wechsle in diesen Ordner. Starte nun Deinen Lieblingseditor und gib den Quellcode ein. Ich bevorzuge den Standardeditor von Debian namens Nano:

nano zweizahlen.cc

diese Datei speichern wir nun unter zweizahlen.cc ab und müssen sie nur noch übersetzen, bzw. eben kompilieren. Kompilieren mit g++

g++ zweizahlen.cc -o zweizahlen

oder alternativ mit gcc

gcc zweizahlen.cc -o zweizahlen -lstdc++

vereinfacht gesagt erstellt der Kompilier aus unserem Quellcode nun eine Binärdatei, welche im Terminal ausgeführt werden kann.

zweizahlen-kompiliert

Binärdatei und Quellcodedatei nach dem Kompilieren wie sie z.B. im Dateibrowser dargestellt werden.


nach diesem Schritt können wird das Programm im Terminal aufrufen:

yuna@supertux:~/meinc++$ ./zweizahlen
Zahlen nacheinander eingeben: 
17
23
die Summe beträgt: 40

der Versuch, die Binärdatei zu lesen wird in jeden Fall scheiteren. Binärdateien sind bereits übersetzte Klartextdateien und können von einem Editor nicht mehr gelesen werden!

less zweizahlen
"zweizahlen" may be a binary file.  See it anyway? 

binärdatei-im-editor
das kompilierte Programm kann mit

# cp zweizahlen /usr/bin

in das Binary Verzeichnis kopiert werden und steht ab jetzt immer zur Verfügung.

yuna@supertux:~$ zweizahlen
Zahlen nacheinander eingeben: 
17
23
die Summe beträgt: 40
yuna@supertux:~$