<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ingo's Lehre-Blog</title><link>https://ingformatik.de/</link><description>Mein Blog rund um Themen in der Lehre.</description><atom:link href="https://ingformatik.de/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>de</language><copyright>Contents © 2025 &lt;a href="mailto:lehre@itih.de"&gt;Ingo Haschler&lt;/a&gt; </copyright><lastBuildDate>Tue, 08 Apr 2025 10:08:04 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Labor-VM mit Vagrant erstellen</title><link>https://ingformatik.de/posts/labor-vm-mit-vagrant-erstellen/</link><dc:creator>Ingo Haschler</dc:creator><description>&lt;p&gt;Die Verwendung von vorkonfigurierten virtuellen Maschinen (VMs) hat sich gerade für Laborveranstaltungen bewährt. Dadurch erhalten alle Teilnehmer eine identische Arbeitsumgebung für die Übungen, außerdem verringert sich der (technische) Betreuungsaufwand enorm.&lt;/p&gt;
&lt;p&gt;Am Beispiel eines Datenbank-Labors (FIXME Link auf Git-Repo) wird hier gezeigt, wie man eine solche VM konfiguriert und größtenteils automatisch erzeugt. Am Ende steht eine OVA-Datei (open virtualization format), die dann an die Teilnehmer verteilt werden kann. Das Format ist herstellerübergreifend und kann somit in jede gängige Virtualisierungs-Software (z.B. VirtualBox, VmWare) importiert werden.&lt;/p&gt;
&lt;h2&gt;Vagrant&lt;/h2&gt;
&lt;p&gt;Vagrant ist eines von mehreren verfügbaren Werkzeugen zur Erzeugung von VMs. Die zentrale Konfiguration steht dabei in einem Vagrantfile.&lt;/p&gt;
&lt;h3&gt;Beispiel für Vagrantfile&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://ingformatik.de/listings/vagrant-vm/Vagrantfile.html"&gt;vagrant-vm/Vagrantfile&lt;/a&gt;  &lt;a href="https://ingformatik.de/listings/vagrant-vm/Vagrantfile"&gt;(Source)&lt;/a&gt;&lt;/p&gt;&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;
&lt;span class="normal"&gt;17&lt;/span&gt;
&lt;span class="normal"&gt;18&lt;/span&gt;
&lt;span class="normal"&gt;19&lt;/span&gt;
&lt;span class="normal"&gt;20&lt;/span&gt;
&lt;span class="normal"&gt;21&lt;/span&gt;
&lt;span class="normal"&gt;22&lt;/span&gt;
&lt;span class="normal"&gt;23&lt;/span&gt;
&lt;span class="normal"&gt;24&lt;/span&gt;
&lt;span class="normal"&gt;25&lt;/span&gt;
&lt;span class="normal"&gt;26&lt;/span&gt;
&lt;span class="normal"&gt;27&lt;/span&gt;
&lt;span class="normal"&gt;28&lt;/span&gt;
&lt;span class="normal"&gt;29&lt;/span&gt;
&lt;span class="normal"&gt;30&lt;/span&gt;
&lt;span class="normal"&gt;31&lt;/span&gt;
&lt;span class="normal"&gt;32&lt;/span&gt;
&lt;span class="normal"&gt;33&lt;/span&gt;
&lt;span class="normal"&gt;34&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# -*- mode: ruby -*-&lt;/span&gt;
&lt;span class="c1"&gt;# vi: set ft=ruby :&lt;/span&gt;

&lt;span class="c1"&gt;# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!&lt;/span&gt;
&lt;span class="no"&gt;VAGRANTFILE_API_VERSION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2"&lt;/span&gt;

&lt;span class="c1"&gt;# cf. https://github.com/hashicorp/vagrant/issues/8878#issuecomment-345112810&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;VagrantPlugins&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ProviderVirtualBox&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Action&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Network&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;dhcp_server_matches_config?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dhcp_server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="no"&gt;Vagrant&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;VAGRANTFILE_API_VERSION&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"moderne_dbs"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;moderne_dbs&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;moderne_dbs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;box&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"debian/bullseye64"&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;moderne_dbs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"private_network"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dhcp"&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;moderne_dbs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;provider&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"virtualbox"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;vb&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;vb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2048"&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;vb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"moderne_dbs"&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;moderne_dbs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;provision&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"shell"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;privileged&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kp"&gt;false&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"provision.sh"&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"moderne-dbs"&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;Vagrant&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;has_plugin?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"vagrant-proxyconf"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'http_proxy'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;proxy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'http_proxy'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;proxy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'https_proxy'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;proxy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;no_proxy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"localhost,127.0.0.1"&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hier wird neben dem Namen und dem RAM der VM das Basis-Image (Debian-Bullseye) sowie die Netzwerkkonfiguration definiert.&lt;/p&gt;
&lt;p&gt;Sobald die VM (mit &lt;code&gt;vagrant up&lt;/code&gt;) erstellt wird, wird das erste Shell-Skript (provision.sh) ausgeführt. Dieses übernimmt die erste Stufe der Konfiguration.&lt;/p&gt;
&lt;h3&gt;Shell-Skripte&lt;/h3&gt;
&lt;h4&gt;provision&lt;/h4&gt;
&lt;p&gt;Das Skript erzeugt im Prinzip einen neuen Benutzer (student) und gibt diesem Administrator-Rechte (sudo). Außerdem wird die Anmeldung per SSH mit Paßwort aktiviert.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ingformatik.de/listings/vagrant-vm/provision.sh.html"&gt;vagrant-vm/provision.sh&lt;/a&gt;  &lt;a href="https://ingformatik.de/listings/vagrant-vm/provision.sh"&gt;(Source)&lt;/a&gt;&lt;/p&gt;&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;
&lt;span class="normal"&gt;17&lt;/span&gt;
&lt;span class="normal"&gt;18&lt;/span&gt;
&lt;span class="normal"&gt;19&lt;/span&gt;
&lt;span class="normal"&gt;20&lt;/span&gt;
&lt;span class="normal"&gt;21&lt;/span&gt;
&lt;span class="normal"&gt;22&lt;/span&gt;
&lt;span class="normal"&gt;23&lt;/span&gt;
&lt;span class="normal"&gt;24&lt;/span&gt;
&lt;span class="normal"&gt;25&lt;/span&gt;
&lt;span class="normal"&gt;26&lt;/span&gt;
&lt;span class="normal"&gt;27&lt;/span&gt;
&lt;span class="normal"&gt;28&lt;/span&gt;
&lt;span class="normal"&gt;29&lt;/span&gt;
&lt;span class="normal"&gt;30&lt;/span&gt;
&lt;span class="normal"&gt;31&lt;/span&gt;
&lt;span class="normal"&gt;32&lt;/span&gt;
&lt;span class="normal"&gt;33&lt;/span&gt;
&lt;span class="normal"&gt;34&lt;/span&gt;
&lt;span class="normal"&gt;35&lt;/span&gt;
&lt;span class="normal"&gt;36&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-x

&lt;span class="nv"&gt;HOSTNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;

&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;DEBIAN_FRONTEND&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;noninteractive

sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;update
sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;-y&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;gnupg&lt;span class="w"&gt; &lt;/span&gt;curl&lt;span class="w"&gt; &lt;/span&gt;unzip&lt;span class="w"&gt; &lt;/span&gt;libuser&lt;span class="w"&gt; &lt;/span&gt;net-tools

&lt;span class="c1"&gt;# sudo für student ohne PW &lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"student ALL=(ALL:ALL) NOPASSWD: ALL"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;tee&lt;span class="w"&gt; &lt;/span&gt;/etc/sudoers.d/student

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/vagrant"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;
&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;USERNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;student
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;123456&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Set hostname"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;hostname&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$HOSTNAME&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$HOSTNAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;tee&lt;span class="w"&gt; &lt;/span&gt;/etc/hostname&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/dev/null
&lt;span class="w"&gt;    &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;sed&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s/bullseye/&lt;/span&gt;&lt;span class="nv"&gt;$HOSTNAME&lt;/span&gt;&lt;span class="s2"&gt;/g"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/hosts
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Create user student"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;useradd&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;-G&lt;span class="w"&gt; &lt;/span&gt;sudo,vagrant&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;/bin/bash&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$USERNAME&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PASSWORD&lt;/span&gt;&lt;span class="s2"&gt;\n&lt;/span&gt;&lt;span class="nv"&gt;$PASSWORD&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;passwd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$USERNAME&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Enable SSH password authentication"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;sed&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'s/PasswordAuthentication no/PasswordAuthentication yes/g'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/ssh/sshd_config
&lt;span class="w"&gt;    &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;systemctl&lt;span class="w"&gt; &lt;/span&gt;restart&lt;span class="w"&gt; &lt;/span&gt;sshd.service
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Run install"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$USERNAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;bash&lt;span class="w"&gt; &lt;/span&gt;/vagrant/install.sh
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;bash&lt;span class="w"&gt; &lt;/span&gt;/vagrant/install.sh
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Im Anschluß wird die zweite Phase der Konfiguration unter dem neuen Benutzerkonto gestartet.&lt;/p&gt;
&lt;h4&gt;install&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://ingformatik.de/listings/vagrant-vm/install.sh.html"&gt;vagrant-vm/install.sh&lt;/a&gt;  &lt;a href="https://ingformatik.de/listings/vagrant-vm/install.sh"&gt;(Source)&lt;/a&gt;&lt;/p&gt;&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;
&lt;span class="normal"&gt;17&lt;/span&gt;
&lt;span class="normal"&gt;18&lt;/span&gt;
&lt;span class="normal"&gt;19&lt;/span&gt;
&lt;span class="normal"&gt;20&lt;/span&gt;
&lt;span class="normal"&gt;21&lt;/span&gt;
&lt;span class="normal"&gt;22&lt;/span&gt;
&lt;span class="normal"&gt;23&lt;/span&gt;
&lt;span class="normal"&gt;24&lt;/span&gt;
&lt;span class="normal"&gt;25&lt;/span&gt;
&lt;span class="normal"&gt;26&lt;/span&gt;
&lt;span class="normal"&gt;27&lt;/span&gt;
&lt;span class="normal"&gt;28&lt;/span&gt;
&lt;span class="normal"&gt;29&lt;/span&gt;
&lt;span class="normal"&gt;30&lt;/span&gt;
&lt;span class="normal"&gt;31&lt;/span&gt;
&lt;span class="normal"&gt;32&lt;/span&gt;
&lt;span class="normal"&gt;33&lt;/span&gt;
&lt;span class="normal"&gt;34&lt;/span&gt;
&lt;span class="normal"&gt;35&lt;/span&gt;
&lt;span class="normal"&gt;36&lt;/span&gt;
&lt;span class="normal"&gt;37&lt;/span&gt;
&lt;span class="normal"&gt;38&lt;/span&gt;
&lt;span class="normal"&gt;39&lt;/span&gt;
&lt;span class="normal"&gt;40&lt;/span&gt;
&lt;span class="normal"&gt;41&lt;/span&gt;
&lt;span class="normal"&gt;42&lt;/span&gt;
&lt;span class="normal"&gt;43&lt;/span&gt;
&lt;span class="normal"&gt;44&lt;/span&gt;
&lt;span class="normal"&gt;45&lt;/span&gt;
&lt;span class="normal"&gt;46&lt;/span&gt;
&lt;span class="normal"&gt;47&lt;/span&gt;
&lt;span class="normal"&gt;48&lt;/span&gt;
&lt;span class="normal"&gt;49&lt;/span&gt;
&lt;span class="normal"&gt;50&lt;/span&gt;
&lt;span class="normal"&gt;51&lt;/span&gt;
&lt;span class="normal"&gt;52&lt;/span&gt;
&lt;span class="normal"&gt;53&lt;/span&gt;
&lt;span class="normal"&gt;54&lt;/span&gt;
&lt;span class="normal"&gt;55&lt;/span&gt;
&lt;span class="normal"&gt;56&lt;/span&gt;
&lt;span class="normal"&gt;57&lt;/span&gt;
&lt;span class="normal"&gt;58&lt;/span&gt;
&lt;span class="normal"&gt;59&lt;/span&gt;
&lt;span class="normal"&gt;60&lt;/span&gt;
&lt;span class="normal"&gt;61&lt;/span&gt;
&lt;span class="normal"&gt;62&lt;/span&gt;
&lt;span class="normal"&gt;63&lt;/span&gt;
&lt;span class="normal"&gt;64&lt;/span&gt;
&lt;span class="normal"&gt;65&lt;/span&gt;
&lt;span class="normal"&gt;66&lt;/span&gt;
&lt;span class="normal"&gt;67&lt;/span&gt;
&lt;span class="normal"&gt;68&lt;/span&gt;
&lt;span class="normal"&gt;69&lt;/span&gt;
&lt;span class="normal"&gt;70&lt;/span&gt;
&lt;span class="normal"&gt;71&lt;/span&gt;
&lt;span class="normal"&gt;72&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;DEBIAN_FRONTEND&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;noninteractive
&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;

&lt;span class="nv"&gt;HBASE_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;.4.9
&lt;span class="nv"&gt;HBASE_ARCHIVE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;hbase-&lt;span class="nv"&gt;$HBASE_VERSION&lt;/span&gt;-bin.tar.gz

&lt;span class="c1"&gt;# HBase&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;-y&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;default-jdk-headless
wget&lt;span class="w"&gt; &lt;/span&gt;-nv&lt;span class="w"&gt; &lt;/span&gt;https://archive.apache.org/dist/hbase/&lt;span class="nv"&gt;$HBASE_VERSION&lt;/span&gt;/&lt;span class="nv"&gt;$HBASE_ARCHIVE&lt;/span&gt;
tar&lt;span class="w"&gt; &lt;/span&gt;xvf&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$HBASE_ARCHIVE&lt;/span&gt;
rm&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$HBASE_ARCHIVE&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"export PATH=&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/hbase-2.4.9/bin"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;~/.profile
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"export JAVA_HOME=/usr/lib/jvm/default-java"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;~/.profile
&lt;span class="c1"&gt;# MongoDB&lt;/span&gt;
wget&lt;span class="w"&gt; &lt;/span&gt;-qO&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;https://www.mongodb.org/static/pgp/server-5.0.asc&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt-key&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;-
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deb https://repo.mongodb.org/apt/debian buster/mongodb-org/5.0 main"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;tee&lt;span class="w"&gt; &lt;/span&gt;/etc/apt/sources.list.d/mongodb-org-5.0.list
sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;update
sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;-y&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;mongodb-org
&lt;span class="c1"&gt;# Neo4J&lt;/span&gt;
wget&lt;span class="w"&gt; &lt;/span&gt;-O&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;https://debian.neo4j.com/neotechnology.gpg.key&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt-key&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;-
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'deb https://debian.neo4j.com stable latest'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;tee&lt;span class="w"&gt; &lt;/span&gt;-a&lt;span class="w"&gt; &lt;/span&gt;/etc/apt/sources.list.d/neo4j.list
sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;update
sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;-y&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;neo4j
&lt;span class="c1"&gt;# zwei Zeilen in /etc/neo4j/neo4j.conf aktivieren (cf. https://neo4j.com/docs/operations-manual/current/configuration/password-and-user-recovery/)&lt;/span&gt;
&lt;span class="c1"&gt;# dbms.security.auth_enabled=false&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;sed&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s/^#dbms.security.auth_enabled/dbms.security.auth_enabled/g"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/neo4j/neo4j.conf
&lt;span class="c1"&gt;# dbms.default_listen_address=0.0.0.0&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;sed&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s/^#dbms.default_listen_address/dbms.default_listen_address/g"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/neo4j/neo4j.conf
&lt;span class="c1"&gt;# Zugriffsrechte Import-Verzeichnis anpassen&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;chmod&lt;span class="w"&gt; &lt;/span&gt;a+w&lt;span class="w"&gt; &lt;/span&gt;/var/lib/neo4j/import
&lt;span class="c1"&gt;# Postgres&lt;/span&gt;
&lt;span class="c1"&gt;# cf. https://linuxhint.com/install-postgresql-debian/&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;-y&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;postgresql&lt;span class="w"&gt; &lt;/span&gt;postgresql-contrib
sudo&lt;span class="w"&gt; &lt;/span&gt;systemctl&lt;span class="w"&gt; &lt;/span&gt;disable&lt;span class="w"&gt; &lt;/span&gt;postgresql
&lt;span class="c1"&gt;# externer Zugriff:&lt;/span&gt;
&lt;span class="c1"&gt;# * in /etc/postgresql/13/main/pg_hba.conf allow&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'host      all     all     0.0.0.0/0       md5'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;tee&lt;span class="w"&gt; &lt;/span&gt;-a&lt;span class="w"&gt; &lt;/span&gt;/etc/postgresql/13/main/pg_hba.conf
&lt;span class="c1"&gt;# * /etc/postgresql/13/main/postgresql.conf listen&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;sed&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s/^#listen_addresses.*&lt;/span&gt;$&lt;span class="s2"&gt;/listen_addresses = '*'/g"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/postgresql/13/main/postgresql.conf
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CREATE USER student WITH PASSWORD '123456';"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;postgres&lt;span class="w"&gt; &lt;/span&gt;psql
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CREATE DATABASE student;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;postgres&lt;span class="w"&gt; &lt;/span&gt;psql
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GRANT ALL PRIVILEGES ON DATABASE student TO student;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;postgres&lt;span class="w"&gt; &lt;/span&gt;psql
sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;-y&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;redis
sudo&lt;span class="w"&gt; &lt;/span&gt;systemctl&lt;span class="w"&gt; &lt;/span&gt;disable&lt;span class="w"&gt; &lt;/span&gt;redis

&lt;span class="c1"&gt;# cf. https://askubuntu.com/questions/217358/how-can-i-display-my-machines-ip-address-on-a-tty-login-screen&lt;/span&gt;
cat&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;lt;&amp;lt; 'EOF' &amp;gt; /tmp/update-issue&lt;/span&gt;
&lt;span class="s"&gt;#!/bin/sh&lt;/span&gt;
&lt;span class="s"&gt;MSG=$(cat /etc/issue | grep -v IP)&lt;/span&gt;
&lt;span class="s"&gt;IP_ADDRESSES=$(/sbin/ifconfig | grep 'inet' | grep -v '127' |grep -v 'inet6'|awk '{ print $2 }'&lt;/span&gt;
&lt;span class="s"&gt;)&lt;/span&gt;
&lt;span class="s"&gt;printf "%s\n" "$MSG" &amp;gt; /etc/issue&lt;/span&gt;
&lt;span class="s"&gt;for i in $IP_ADDRESSES; do&lt;/span&gt;
&lt;span class="s"&gt;  printf "%s\n" "IP: $i" &amp;gt;&amp;gt; /etc/issue&lt;/span&gt;
&lt;span class="s"&gt;done;&lt;/span&gt;
&lt;span class="s"&gt;EOF&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;mv&lt;span class="w"&gt; &lt;/span&gt;/tmp/update-issue&lt;span class="w"&gt; &lt;/span&gt;/etc/network/if-up.d/
sudo&lt;span class="w"&gt; &lt;/span&gt;chmod&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0755&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/network/if-up.d/update-issue
&lt;span class="c1"&gt;# Linuxlogo :-)&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;-y&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;linuxlogo
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"linuxlogo"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;~/.profile

&lt;span class="c1"&gt;# set locale&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;-y&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;locales
sudo&lt;span class="w"&gt; &lt;/span&gt;sed&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'s/^# *\(de_DE.UTF-8\)/\1/'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/locale.gen
sudo&lt;span class="w"&gt; &lt;/span&gt;locale-gen
&lt;span class="c1"&gt;# set timezone&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;timedatectl&lt;span class="w"&gt; &lt;/span&gt;set-timezone&lt;span class="w"&gt; &lt;/span&gt;Europe/Berlin

&lt;span class="c1"&gt;#  (apt-)cache löschen&lt;/span&gt;
sudo&lt;span class="w"&gt; &lt;/span&gt;rm&lt;span class="w"&gt; &lt;/span&gt;-rf&lt;span class="w"&gt; &lt;/span&gt;/var/cache/*
&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;Makefile&lt;/h2&gt;
&lt;p&gt;Damit das OVA nicht manuell erzeugt werden kann, bietet sich die Automatisierung mittels make an.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ingformatik.de/listings/vagrant-vm/Makefile.html"&gt;vagrant-vm/Makefile&lt;/a&gt;  &lt;a href="https://ingformatik.de/listings/vagrant-vm/Makefile"&gt;(Source)&lt;/a&gt;&lt;/p&gt;&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nf"&gt;.SILENT&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clean&lt;/span&gt; 
&lt;span class="nv"&gt;.DEFAULT_GOAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;all

&lt;span class="nf"&gt;clean&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;rm&lt;span class="w"&gt; &lt;/span&gt;dist/moderne-dbs.ova


&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clean&lt;/span&gt; &lt;span class="n"&gt;ova&lt;/span&gt;

&lt;span class="nf"&gt;ova&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;dist
&lt;span class="w"&gt;        &lt;/span&gt;vagrant&lt;span class="w"&gt; &lt;/span&gt;destroy&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;vagrant&lt;span class="w"&gt; &lt;/span&gt;up&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;vagrant&lt;span class="w"&gt; &lt;/span&gt;halt&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;vboxmanage&lt;span class="w"&gt; &lt;/span&gt;sharedfolder&lt;span class="w"&gt; &lt;/span&gt;remove&lt;span class="w"&gt; &lt;/span&gt;moderne_dbs&lt;span class="w"&gt; &lt;/span&gt;--name&lt;span class="w"&gt; &lt;/span&gt;vagrant
&lt;span class="w"&gt;        &lt;/span&gt;vboxmanage&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;moderne_dbs&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;dist/moderne-dbs.ova
&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nun erzeugt ein einfacher Aufruf von &lt;code&gt;make&lt;/code&gt; die OVA-Datei im Unterverzeichnis &lt;code&gt;dist&lt;/code&gt;. Da die VM in diesem Format bereits komprimiert ist, kann diese nun direkt an die Teilnehmer verteilt werden.&lt;/p&gt;
&lt;h2&gt;Weitere Ideen/Ausblick&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Versionierung der VM und Anzeige beim Einloggen&lt;/li&gt;
&lt;/ul&gt;</description><guid>https://ingformatik.de/posts/labor-vm-mit-vagrant-erstellen/</guid><pubDate>Fri, 19 Aug 2022 13:01:30 GMT</pubDate></item><item><title>Buchtips Datenbanken II (AI)</title><link>https://ingformatik.de/posts/buchtips-datenbanken-ii-ai/</link><dc:creator>Ingo Haschler</dc:creator><description>&lt;h2&gt;Datenbanken&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://amzn.to/3B4AMLW" target="_blank"&gt;
&lt;img width="10%" border="0" src="https://c.media-amazon.com/images/I/81CjWWvjK0L._SL1500_.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Seven Databases in Seven Weeks
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://amzn.to/3Mx9qk6" target="_blank"&gt;
&lt;img border="0" width="10%" src="https://c.media-amazon.com/images/I/61UH3f1YRpL._SL1181_.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next Generation Databases&lt;/p&gt;
&lt;p&gt;&lt;a href="https://amzn.to/3ATWhPE" target="_blank"&gt;
 &lt;img border="0" width="10%" src="https://c.media-amazon.com/images/I/81dL+27f-TL._SL1500_.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Big Data in der Praxis&lt;/p&gt;
&lt;h3&gt;Hinweise&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Die Links auf Bücher bei Amazon sind Partner-Links, d.h.
        ich bekomme einen kleinen Anteil, wenn Bücher über diese Links aufgerufen
        und gekauft werden.&lt;/li&gt;
&lt;li&gt;Generell empfehle ich, Fachbücher im Original zu lesen;
        insofern erscheinen Übersetzungen (falls vorhanden) immer als zweites.&lt;/li&gt;
&lt;li&gt;Meistens läßt sich etwas Geld sparen, wenn man sich für die eBook-Version
entscheidet. Hierzu ist nicht unbedingt ein Kindle nötig, die eBooks können auch
mit einer App auf dem Tablet oder dem PC gelesen werden. Weiterhin besteht auf
diesem Weg die Möglichkeit, vor dem Kauf eine Leseprobe zu erhalten.&lt;/li&gt;
&lt;/ul&gt;</description><category>ai</category><category>dhbw</category><guid>https://ingformatik.de/posts/buchtips-datenbanken-ii-ai/</guid><pubDate>Tue, 19 Apr 2022 09:34:53 GMT</pubDate></item><item><title>Host-only-Netzwerk mit VirtualBox 6.1</title><link>https://ingformatik.de/posts/host-only-netzwerk-mit-virtualbox-61/</link><dc:creator>Ingo Haschler</dc:creator><description>&lt;h2&gt;Problem&lt;/h2&gt;
&lt;p&gt;Nach dem Update von VirtualBox auf 6.1 funktioniert das Host-only-Netzwerk nicht mehr.&lt;/p&gt;
&lt;h2&gt;Grund&lt;/h2&gt;
&lt;p&gt;VirtualBox hat ab 6.1 einen neuen Sicherheitsmechanismus eingeführt, der die IP-Adressbereiche einschränkt, die für Host-only-Netzwerke verwendet werden können.&lt;/p&gt;
&lt;h2&gt;Lösung&lt;/h2&gt;
&lt;p&gt;Will man das ursprüngliche Verhalten (bis 6.0) wiederherstellen, konfiguriert man in der Datei /etc/vbox/networks.conf folgende Zeile:
&lt;code&gt;* 0.0.0.0/0 ::/0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Damit erlaubt man alle IP-Adressbereiche.&lt;/p&gt;
&lt;h2&gt;Links&lt;/h2&gt;
&lt;p&gt;https://www.virtualbox.org/manual/ch06.html#network_hostonly&lt;/p&gt;</description><guid>https://ingformatik.de/posts/host-only-netzwerk-mit-virtualbox-61/</guid><pubDate>Tue, 19 Apr 2022 09:26:34 GMT</pubDate></item><item><title>Buchtips (importiert)</title><link>https://ingformatik.de/posts/buchtips/</link><dc:creator>Ingo Haschler</dc:creator><description>&lt;h2&gt;Hinweise&lt;/h2&gt;
&lt;p&gt;Die Links auf Bücher bei Amazon sind Partner-Links, d.h. ich bekomme einen kleinen Anteil, wenn Bücher über diese Links aufgerufen und gekauft werden.
Generell empfehle ich, Fachbücher im Original zu lesen; insofern erscheinen Übersetzungen (falls vorhanden) immer als zweites.
Meistens läßt sich etwas Geld sparen, wenn man sich für die eBook-Version entscheidet. Hierzu ist nicht unbedingt ein Kindle nötig, die eBooks können auch mit einer App auf dem Tablet oder dem PC gelesen werden. Weiterhin besteht auf diesem Weg die Möglichkeit, vor dem Kauf eine Leseprobe zu erhalten.&lt;/p&gt;
&lt;p&gt;Diese Liste ist von meiner alten Webseite importiert. In Zukunft werden neue Buchtips als einzelne Posts in der Kategorie buchtips erscheinen.&lt;/p&gt;
&lt;h2&gt;Software-Entwicklung&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/Weniger-schlecht-programmieren-Kathrin-Passig/dp/3897215675/ref=as_li_ss_il?ie=UTF8&amp;amp;qid=1505385552&amp;amp;sr=8-1&amp;amp;keywords=weniger+schlecht+programmieren&amp;amp;linkCode=li1&amp;amp;tag=ingohaschler-21&amp;amp;linkId=11f169611dfb0ce7b204e6db08d43e62" target="_blank"&gt;
&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51tcZwK6-iL._SL160_.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Weniger schlecht programmieren&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/Designing-User-Interface-Human-Computer-Interaction/dp/0321197860/ref=as_li_ss_il?ie=UTF8&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=0e36c68197382ba8b48eee46cfad97b6&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/512W6A1KJYL._SL160_.jpg"&gt;&lt;/a&gt;
&lt;a href="https://www.amazon.de/User-Interface-Design-Ben-Shneiderman/dp/3826607538/ref=as_li_ss_il?s=books&amp;amp;ie=UTF8&amp;amp;qid=1547059811&amp;amp;sr=1-1&amp;amp;keywords=user+interface+design+shneiderman&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=884a5672b8be685c129306454ee9830c&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51TESCJSTHL._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Designing the User Interface: Strategies for Effective Human-Computer Interaction / User Interface Design&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/Design-Patterns-Elements-Reusable-Object-Oriented/dp/9332555400/ref=as_li_ss_il?_encoding=UTF8&amp;amp;qid=1505393321&amp;amp;sr=1-3&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=8c20bcd366aef04fb99aab88a1b5f085&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/21HDxVJ18nL._SL160_.jpg" border="0"&gt;&lt;/a&gt;
&lt;a href="https://www.amazon.de/Design-Patterns-Entwurfsmuster-wiederverwendbarer-objektorientierter/dp/3826697006/ref=as_li_ss_il?_encoding=UTF8&amp;amp;qid=1505393321&amp;amp;sr=1-2&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=aa495c0194c8eef8fba10af2ab1973d3&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51kaRXIFrdL._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Design Patterns: Elements of Reusable Object-Oriented Software / Design Patterns (mitp Professional): Entwurfsmuster als Elemente wiederverwendbarer objektorientierter Software&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/ref=as_li_ss_il?s=books-intl-de&amp;amp;ie=UTF8&amp;amp;qid=1505393541&amp;amp;sr=1-2&amp;amp;keywords=algorithms+sedgewick+c++&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=d70eec04cbfaa95f6b5a51d426514a85&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51lmNVDNSkL._SL160_.jpg" border="0"&gt;&lt;/a&gt;
&lt;a href="https://www.amazon.de/Algorithmen-Sonstige-B%C3%BCcher-AW/dp/3893194622/ref=as_li_ss_il?s=books&amp;amp;ie=UTF8&amp;amp;qid=1505393509&amp;amp;sr=1-1&amp;amp;keywords=algorithms+sedgewick&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=8243e65fd472ffbb47e66f4a198d0818&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51HG59TAR1L._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching, Third Edition / Algorithmen in C++&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/Think-Like-Programmer-Introduction-Creative/dp/1593274246/ref=as_li_ss_il?s=books-intl-de&amp;amp;ie=UTF8&amp;amp;qid=1505393590&amp;amp;sr=1-1&amp;amp;keywords=think+like+a+programmer&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=d2bb3edecc2bcd04468344a6598c62a4&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/511x3v3NcWL._SL160_.jpg" border="0"&gt;&lt;/a&gt;
&lt;a href="https://www.amazon.de/Think-Like-Programmer-Programmieraufgaben-Professional/dp/3826692780/ref=as_li_ss_il?_encoding=UTF8&amp;amp;qid=1505393624&amp;amp;sr=1-1&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=7cc7492958cc0551a039ce7c8afcf9dc&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51jKj8t0nSL._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Think Like a Programmer: An Introduction to Creative Problem Solving / Think Like a Programmer: Typische Programmieraufgaben kreativ lösen am Beispiel von C++&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/Lehrbuch-Objektmodellierung-Analyse-Entwurf-mit/dp/382742903X/ref=as_li_ss_il?s=books&amp;amp;ie=UTF8&amp;amp;qid=1505393691&amp;amp;sr=1-2&amp;amp;keywords=lehrbuch+balzert&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=712df94641f03991be4243af5d48bbe7&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51rp8jd89iL._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lehrbuch der Objektmodellierung: Analyse und Entwurf mit der UML 2&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/UML-Distilled-Standard-Addison-Wesley-Technology/dp/0321193687/ref=as_li_ss_il?_encoding=UTF8&amp;amp;qid=1505393732&amp;amp;sr=1-1&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=e686d23a371d5909f3829a00369d4324&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51CabWoj1BL._SL160_.jpg" border="0"&gt;&lt;/a&gt;
&lt;a href="https://www.amazon.de/UML-konzentriert-3-aktualisierte-Auflage/dp/3827321263/ref=as_li_ss_il?s=books&amp;amp;ie=UTF8&amp;amp;qid=1505393732&amp;amp;sr=1-2&amp;amp;keywords=uml+distilled&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=05ec93daa4ac95afd14f9d45b3df41ef&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51Yd6kN0zPL._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;UML Distilled: A Brief Guide to the Standard Object Modeling Language / UML konzentriert&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/Exercises-Programmers-Challenges-Develop-Coding/dp/1680501224/ref=as_li_ss_il?s=books-intl-de&amp;amp;ie=UTF8&amp;amp;qid=1505393838&amp;amp;sr=1-1&amp;amp;keywords=exercises+programmer&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=efeae7b4fa9e5a55ad9dcef2ed6d0e90&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/513azvyRViL._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Exercises for Programmers: 57 Challenges to Develop Your Coding Skills&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/Code-Complete-Practical-Construction-Costruction/dp/0735619670/ref=as_li_ss_il?_encoding=UTF8&amp;amp;qid=&amp;amp;sr=&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=2ea8057ce0fed4ca5bb53f127db0eb87&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51FUYfErOXL._SL160_.jpg" border="0"&gt;&lt;/a&gt;
&lt;a href="https://www.amazon.de/Code-Complete-Deutsche-Ausgabe-Second/dp/386063593X/ref=as_li_ss_il?s=books&amp;amp;ie=UTF8&amp;amp;qid=1506858482&amp;amp;sr=1-1&amp;amp;keywords=code+complete&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=4829bba80f47d3ea113d3c517315e2d0&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/41qnjXIApSL._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Code Complete: A Practical Handbook of Software Construction: A Practical Handbook of Software Costruction / Code Complete - Deutsche Ausgabe der Second Edition&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/JavaScript-Parts-Working-Shallow-Grain/dp/0596517742/ref=as_li_ss_il?s=books-intl-de&amp;amp;ie=UTF8&amp;amp;qid=1505393919&amp;amp;sr=1-1&amp;amp;keywords=javascript+good+parts&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=6f9e0233f7017a89aaff43251c6afbd5&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/5131OWtQRaL._SL160_.jpg" border="0"&gt;&lt;/a&gt;
&lt;a href="https://www.amazon.de/Das-Beste-JavaScript-Douglas-Crockford/dp/3897218763/ref=as_li_ss_il?s=books&amp;amp;ie=UTF8&amp;amp;qid=1505393950&amp;amp;sr=1-1&amp;amp;keywords=javascript+good+parts+crockford&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=2b5c05bb47a92dbd629c4616f729ee1c&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51KZjM6wyVL._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;JavaScript: The Good Parts: Working with the Shallow Grain of JavaScript / Das Beste an JavaScript&lt;/p&gt;
&lt;!--
Ist nicht mehr verfügbar :-(
&lt;a href="https://www.ebooks.com/1993212/you-don-t-know-js-up-going/simpson-kyle/"&gt;&lt;img src="https://image.ebooks.com/previews/001/001993/001993212/001993212-hq-168-80.jpg" style="max-width:100%;" width="75"&gt;&lt;/a&gt;
&lt;a href="https://www.ebooks.com/1647631/you-don-t-know-js-scope-closures/simpson-kyle/"&gt;&lt;img src="https://image.ebooks.com/previews/001/001647/001647631/001647631-hq-168-80.jpg" style="max-width:100%;" width="75"&gt;&lt;/a&gt;
&lt;a href="https://www.ebooks.com/1734321/you-don-t-know-js-this-object-prototypes/simpson-kyle/"&gt;&lt;img src="https://image.ebooks.com/previews/001/001734/001734321/001734321-hq-168-80.jpg" style="max-width:100%;" width="75"&gt;&lt;/a&gt;
&lt;a href="http://www.ebooks.com/1935541/you-don-t-know-js-types-grammar/simpson-kyle/"&gt;&lt;img src="https://image.ebooks.com/previews/001/001935/001935541/001935541-hq-168-80.jpg" style="max-width:100%;" width="75"&gt;&lt;/a&gt;
&lt;a href="https://www.ebooks.com/2481820/you-don-t-know-js-es6-beyond/simpson-kyle/"&gt;&lt;img src="https://image.ebooks.com/previews/002/002481/002481820/002481820-hq-168-80.jpg" style="max-width:100%;" width="75"&gt;&lt;/a&gt;
&lt;a href="https://www.ebooks.com/1977375/you-don-t-know-js-async-performance/simpson-kyle/"&gt;&lt;img src="https://image.ebooks.com/previews/001/001977/001977375/001977375-hq-168-80.jpg" style="max-width:100%;" width="75"&gt;&lt;/a&gt;

You Don't Know JS (book series)
--&gt;

&lt;p&gt;&lt;a href="https://www.amazon.de/JavaScript-JQuery-Interactive-Front-End-Development/dp/1118531647/ref=as_li_ss_il?s=books-intl-de&amp;amp;ie=UTF8&amp;amp;qid=1505476095&amp;amp;sr=1-1&amp;amp;keywords=javascript+jquery&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=5fc7cc19073d5bfbed167fa6df5ec9fb&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/41y31M-zcgL._SL160_.jpg" border="0"&gt;&lt;/a&gt;
&lt;a href="https://www.amazon.de/JavaScript-jQuery-Interaktive-Websites-entwickeln/dp/3527760571/ref=as_li_ss_il?s=books&amp;amp;ie=UTF8&amp;amp;qid=1505476180&amp;amp;sr=1-1&amp;amp;keywords=javascript+jquery&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=d92d86d30cb7b35d278cf5219b5d88c3&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/41Os0591Q6L._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;JavaScript and JQuery: Interactive Front-End Web Development / JavaScript &amp;amp; jQuery: Interaktive Websites entwickeln&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/Effective-Specific-Addison-Wesley-Professional-Computing/dp/0321334876/ref=as_li_ss_il?_encoding=UTF8&amp;amp;qid=1511361388&amp;amp;sr=8-2&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=f6297657fb3585d346f68a6cf14f9c42&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51aICwPHi0L._SL160_.jpg" border="0"&gt;&lt;/a&gt;
&lt;a href="https://www.amazon.de/Effektiv-programmieren-M%C3%B6glichkeiten-verbessern-Programmers/dp/3827326907/ref=as_li_ss_il?ie=UTF8&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=2eced89e7eee4f48dc964d4d74611dcc&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/416cOqsB%2B8L._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Effective C++: 55 Specific Ways to Improve Your Programs and Designs / Effektiv C++ programmieren - 55 Möglichkeiten, Ihre Programme und Entwürfe zu verbessern&lt;/p&gt;
&lt;h2&gt;Gesellschaftliche Bezüge&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/Social-Engineering-Art-Human-Hacking/dp/0470639539/ref=as_li_ss_il?s=books-intl-de&amp;amp;ie=UTF8&amp;amp;qid=1505386192&amp;amp;sr=1-1&amp;amp;keywords=social+engineering&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=f3d9be5c3ae4a9840dc18d65db0181ac&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/41TqG7rm-jL._SL160_.jpg" border="0"&gt;&lt;/a&gt;
&lt;a href="https://www.amazon.de/Kunst-Human-Hacking-mitp-Professional/dp/3826691679/ref=as_li_ss_il?_encoding=UTF8&amp;amp;qid=1505386132&amp;amp;sr=1-1&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=05ac299d170cf999b1cdc5146de2ab98&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51tfjX5zg1L._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Social Engineering: The Art of Human Hacking / Die Kunst des Human Hacking (mitp Professional)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://amzn.to/3Xvhfxb"&gt;
&lt;img src="https://c.media-amazon.com/images/I/817Xh8r46BL._SL1500_.jpg" border="0" width="10%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In the Beginning...Was the Command Line&lt;/p&gt;
&lt;h2&gt;Sonstiges&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/Getting-Things-Done-Stress-Free-Productivity/dp/0143126563/ref=as_li_ss_il?_encoding=UTF8&amp;amp;qid=1505394156&amp;amp;sr=1-2&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=5ec7096cff8a71efe0fa5b852c2c6cd6&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/51W-ZL%2BQRlL._SL160_.jpg" border="0"&gt;&lt;/a&gt;
&lt;a href="https://www.amazon.de/Dinge-geregelt-kriege-Selbstmanagement-%C3%9Cberarbeitete/dp/3492307205/ref=as_li_ss_il?_encoding=UTF8&amp;amp;qid=1505394156&amp;amp;sr=1-1&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=e196cf734a8eaecf65f37afa8e507f64&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/41DksA6T-xL._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Getting Things Done: the art of stress-free productivity / Wie ich die Dinge geregelt kriege: Selbstmanagement für den Alltag&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.de/Willpower-Rediscovering-Our-Greatest-Strength/dp/0141049480/ref=as_li_ss_il?_encoding=UTF8&amp;amp;qid=&amp;amp;sr=&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=b684e3b0bb0ca0494b607a23397842bd&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/41iIdCLyknL._SL160_.jpg" border="0"&gt;&lt;/a&gt;
&lt;a href="https://www.amazon.de/Die-Macht-Disziplin-unseren-trainieren/dp/3442173930/ref=as_li_ss_il?_encoding=UTF8&amp;amp;qid=1505475505&amp;amp;sr=1-1&amp;amp;linkCode=li2&amp;amp;tag=ingohaschler-21&amp;amp;linkId=55c503fb531cd1f35ad4d8558cd5610c&amp;amp;language=de_DE" target="_blank"&gt;&lt;img src="https://images-eu.ssl-images-amazon.com/images/I/41GhiA1dNnL._SL160_.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Willpower: Rediscovering Our Greatest Strength / Die Macht der Disziplin: Wie wir unseren Willen trainieren können&lt;/p&gt;
&lt;p&gt;&lt;a href="https://amzn.to/4edGglW" target="_blank"&gt;
&lt;img src="https://c.media-amazon.com/images/I/61hxw0zJAiL._SL1500_.jpg" alt="" style="border:none !important; margin:0px !important;" lyt9kv71n="" width="10%" border="0"&gt;&lt;/a&gt;
&lt;a href="https://amzn.to/3ATWAKi" target="_blank"&gt;&lt;img width="10%" border="0" src="https://c.media-amazon.com/images/I/71Hi2Xb5P4L._SL1500_.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Why We Sleep: The New Science of Sleep and Dreams / Das große Buch vom Schlaf: Die enorme Bedeutung des Schlafs - Beste Vorbeugung gegen Alzheimer, Krebs, Herzinfarkt und vieles mehr&lt;/p&gt;</description><category>software-entwicklung</category><guid>https://ingformatik.de/posts/buchtips/</guid><pubDate>Sat, 11 Sep 2021 22:11:06 GMT</pubDate></item></channel></rss>