<!doctype html>
<html lang="de">
		<meta charset="utf-8">

		<title>Einführung in Linux</title>

		<meta name="description" content="YALC - Yet Another Linux Course ">
		<meta name="author" content="Daniel Schubert">

		<meta name="apple-mobile-web-app-capable" content="yes">
		<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

		<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

		<link rel="stylesheet" href="css/reveal.css">
		<link rel="stylesheet" href="css/theme/league.css" id="theme">
		
		<link rel="icon" href="img/openlogo-nd-25.png" type="img/png">

		<!-- Theme used for syntax highlighting of code -->
		<link rel="stylesheet" href="lib/css/zenburn.css">

		<!-- Printing and PDF exports -->
		<script>
			var link = document.createElement( 'link' );
			link.rel = 'stylesheet';
			link.type = 'text/css';
			link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
			document.getElementsByTagName( 'head' )[0].appendChild( link );
		</script>
		<style type="text/css">
			.reveal img{ max-height: 60vh}
		</style>

	</head>

	<body>
		<div class="reveal">
			<!-- Any section element inside of this container is displayed as a slide -->
			<div class="slides">

				<section data-transition="slide" data-background="#4d7e65" data-background-transition="zoom">
					<h1>LINUX</h1>
					<h3>Das universelle Betriebssystem</h3>
					<p>Eine Einführung - Teil 8
					<p>
						<small>Deutsche Angestellten Akademie</small>
					</p>

					<aside class="notes">
						Frage: Fragen zur letzten Stunde?
					</aside>
				</section>
				<section>
					https://www.schubertdaniel.de/linuxkurs
				</section>

				<section data-transition="slide" data-background="lightblue" data-background-transition="zoom">
					<h2 style="text-shadow: 5px 4px 15px black;">Systemverwaltung</h2>
						</section>
		   		<section> 
		          Begriff: daemon

		          <p>Ein Systemdienst der automatisch startet und ohne Eingriffe arbeitet ( meistens :-) )
		          <p>vgl. Dienste unter Windows
		          <p>Name endet oft mit „d“ 
		          <ul>
		            <li>systemd - ...
		            <li>sshd - SSH Server Daemon
		            <li>dockerd - docker daemon
		            <li>smbd - SAMBA File Server
		            <li>ntpd - Network Time Protocal Daemon
		            <li>atd - at Daemon
		        </section>
		        <section style="">

		          	<p>Begriff: Runlevel</p>

					<table class="prettytable" style=" font-size: .4em; border:solid 2px #677089;">

					<tbody><tr style="">
					<th style="line-height:2.5em;">Runlevel</th>
					<th>Beschreibung
					</th></tr>
					<tr style="border-bottom:solid 2px #AAAAAA;">
					<td style="text-align:center;font-weight:bold;">0
					</td>
					<td style="padding:4px 8px;line-height:118%;">Shutdown. Alle Netzverbindungen werden geschlossen, Dateipuffer werden geschrieben, Mounts auf Partitionen werden entfernt (d.&nbsp;h. die im Verzeichnisbaum eingebundenen Datenträger werden ausgehängt).
					</td></tr>
					<tr style="border-bottom:solid 2px #AAAAAA;">
					<td style="text-align:center;font-weight:bold;">S
					</td>
					<td style="padding:4px 8px;line-height:118%;">Single-User-Runlevel; niedrigster Systemzustand für Wartungsarbeiten, in dem ausschließlich Systemressourcen wie <a href="/wiki/Festplatten" class="mw-redirect" title="Festplatten">Festplatten</a> oder <a href="/wiki/Dateisystem" title="Dateisystem">Dateisysteme</a> aktiv sind.
					</td></tr>
					<tr style="border-bottom:solid 2px #AAAAAA;">
					<td style="text-align:center;font-weight:bold;">1
					</td>
					<td style="padding:4px 8px;line-height:118%;">Einzelnutzerbetrieb ohne Netzwerk mit ausschließlich lokalen Ressourcen. In vielen Implementierungen identisch mit 'S'.
					</td></tr>
					<tr style="border-bottom:solid 2px #AAAAAA;">
					<td style="text-align:center;font-weight:bold;">2
					</td>
					<td style="padding:4px 8px;line-height:118%;">Lokaler Mehrnutzerbetrieb ohne Netzwerk mit ausschließlich lokalen Ressourcen. Unter einigen Linuxdistributionen (z.&nbsp;B. Debian) wird in Runlevel 2 auch das Netzwerk konfiguriert.
					</td></tr>
					<tr style="border-bottom:solid 2px #AAAAAA;">
					<td style="text-align:center;font-weight:bold;">3
					</td>
					<td style="padding:4px 8px;line-height:118%;">Netzwerkbetrieb, über das Netzwerk erreichbare Ressourcen sind nutzbar, eine grafische Oberfläche steht nicht zur Verfügung. Firewalls sollten aktiviert werden.
					</td></tr>
					<tr style="border-bottom:solid 2px #AAAAAA;">
					<td style="text-align:center;font-weight:bold;">4
					</td>
					<td style="padding:4px 8px;line-height:118%;">Ist normalerweise nicht definiert. Kann aber für diverse Dienste genutzt werden.
					</td></tr>
					<tr style="border-bottom:solid 2px #AAAAAA;">
					<td style="text-align:center;font-weight:bold;">5
					</td>
					<td style="padding:4px 8px;line-height:118%;">Wie 3, zusätzlich wird die grafische Oberfläche bereitgestellt.
					</td></tr>
					<tr>
					<td style="text-align:center;font-weight:bold;">6
					</td>
					<td style="padding:4px 8px;line-height:118%;">Reboot. Alle Netzverbindungen werden geschlossen, Dateipuffer werden geschrieben, Mounts auf Partitionen werden entfernt.
					</td></tr></tbody></table>
				</section>

						
				<section data-transition="slide" data-background="#4d7e65" data-background-transition="convex">
					<h2>Part 5 - systemd</h2>
				</section>


				<section>
		          <ul>
		            <li class="">Relativ neu 
		            <li class="fragment">bricht mit alter Linux Philosophie:<br>  -- do one thing and do it well --
		            <li class="fragment">Sysvinit funktioniert über Shell Scripte, die nacheinander abgearbeitet werden
		            <li class="fragment">Systemd ist schneller - startet Dienste parallel 
		            <li class="fragment">Kritik : übernimmt sehr viel Kontrolle - single point of failure
		            <li class="fragment">zB Gnome3 ist abhängig von systemd
		            <li class="fragment">-->Abspaltungen: Devuan - nutzt weiterhin Sysvinit
		            <li class="fragment">Standard in : Debian RedHat Suse Ubuntu
				</section>	
			
				<section>
		         	<h4>Der Boot-Ablauf mit systemd</h4>
		          	<img style="max-height: 50vh" src="img/startup-systemd.png">
		          	<p><small> Das initramfs ist ein komprimiertes Archiv, das für den Systemstart benötigte Dateien enthält.</small>
				</section>

				<section>

		          <p>systemd ist organisiert mit
		          <ul>
		            <li class="fragment">units - einzelne Dienste
		            <li class="fragment">targets - Gruppen von Diensten, Systemzustände
		              <ul><li>entspr. runlevel unter Sysvinit</li></ul>
		          </ul>
		          <p>
		          <div class="fragment">
		          	 Dateien: 
			          <p>/lib/systemd/system/ -> default
			          <p>/etc/systemd/system/ -> custom 
		          </div>
		        </section>

				<section> 
					<h3>Informationen anzeigen</h3>

					<ul>
						<li class="fragment ">Systemstatus anzeigen:<pre><code>systemctl status</code></pre></li>
						<li class="fragment ">Liste der fehlgeschlagenene Units <pre><code>systemctl --failed</code></pre></li>
						<li class="fragment ">Liste aller installierter Units<pre><code>systemctl list-unit-files</code></pre></li>
				</section>
				<section>

						<div>Default Target<pre><code>systemctl get-default</code></pre></div>
						<div class="fragment ">Alle Targets<pre><code>systemctl list-units --type target</code></pre></div >
				</section>

				<section>
	        		<h4>Ensprechenungen der alten Runlevel und der neuen Targets</h4>
	        		
	        		<table class="wikitable" style="font-size:.4em">
					<tbody><tr>
					<th>SysV Runlevel</th>
					<th>systemd Target</th>
					<th>Notes
					</th></tr>
					<tr>
					<td>0</td>
					<td>runlevel0.target, poweroff.target</td>
					<td>Halt the system.
					</td></tr>
					<tr>
					<td>1, s, single</td>
					<td>runlevel1.target, rescue.target</td>
					<td>Single user mode.
					</td></tr>
					<tr>
					<td>2, 4</td>
					<td>runlevel2.target, runlevel4.target, multi-user.target</td>
					<td>User-defined/Site-specific runlevels. By default, identical to 3.
					</td></tr>
					<tr>
					<td>3</td>
					<td>runlevel3.target, multi-user.target</td>
					<td>Multi-user, non-graphical. Users can usually login via multiple consoles or via the network.
					</td></tr>
					<tr>
					<td>5</td>
					<td>runlevel5.target, graphical.target</td>
					<td>Multi-user, graphical. Usually has all the services of runlevel 3 plus a graphical login.
					</td></tr>
					<tr>
					<td>6</td>
					<td>runlevel6.target, reboot.target</td>
					<td>Reboot
					</td></tr>
					<tr>
					<td>emergency</td>
					<td>emergency.target</td>
					<td>Emergency shell
					</td></tr>
					</tbody></table>
	        	</section>

				<section> 
					<h3>Dienste Steuern</h3>
					<ul>
						<li class="fragment ">Laufende Dienste anzeigen:<pre><code>systemctl</code></pre></li>
						<li class="fragment ">Eine Unit starten <pre><code>systemctl start DIENST</code></pre></li>
						<li class="fragment ">Eine Unit neu starten<pre><code>systemctl restart DIENST</code></pre></li>
						<li class="fragment ">Unit Status anzeigen<pre><code>systemctl status DIENST</code></pre></li>
					</ul>
				</section>

				<section>
					<ul>
						<li class="fragment ">Dienst Autostart anschalten<pre><code>systemctl enable DIENST</code></pre></li>
						<li class="fragment ">Dienst Autostart anschalten und sofort starten<pre><code>systemctl enable --now DIENST</code></pre></li>
						<li class="fragment ">Dienst Autostart abschalten<pre><code>systemctl disable DIENST</code></pre></li>
					</ul>
				</section>

		     
		        <section>
		          <h3>Eine unit</h3>
		          <code style="font-size: .4em">/lib/systemd/system/ssh.service</code>
		          <pre style="font-size: .4em"><code>[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target
Alias=sshd.service
		</code></pre>
		        </section>


		        <section>
		        	<span style="color: orange">Aufgabe:</span> Erstellt eine Unit und startet sie.<p>
		        		
		        	<div class="fragment">
		        		<code style="font-size: .5em">https://wiki.archlinux.org/index.php/Systemd#Writing_unit_files<br>/etc/systemd/system/simple-webserver.service</code>
		        		<pre><code>[Unit]
Description=Simple Web Server

[Service]
Type=simple
ExecStart=/home/USERNAME-HIER-EINSETZEN/hello-web.sh

[Install]
WantedBy=multi-user.target

						</code></pre>
						<code style="font-size: .5em">~/hello-web.sh</code>
						<pre><code>#!/bin/bash 
cd /home/
python3 -m http.server 8082 </code></pre>
					</div>	

	        	</section>


	        	<section>
	        		<pre><code>systemctl start simple-webserver.service</code></pre>
	        		<pre><code>systemctl status simple-webserver.service</code></pre>
	        		Wenn das gescheitert sein sollte:
	        		<pre><code>journalctl -xe </code></pre>
	        		<pre><code>journalctl --unit=simple-webserver.service </code></pre>
	        	</section>

	        	<section>Browser öffnen: <code>http://localhost:8082/BENUTZERNAME</code>
	        		<aside class="notes">der simple webserver ist praktisch zum dateien teilen</aside></section>

	        	<section><h4>Ändern der Standard-Units</h4>

	        		<ul>
	        			<li class="fragment "> <pre><code>systemctl edit unit</code></pre></li>
	        			<li class="fragment "> Öffnet <code>/etc/systemd/system/unit.d/override.conf</code></li>
	        			<li class="fragment "> Aktualiseren <code>systemctl daemon-reload </code></li>
	        			<li class="fragment ">UnDo: <pre><code>systemctl revert unit</code></pre></li>
	        		</ul>

	        	</section>

	        

	        	<section>
	        	timer als cron Ersatz
	        	<pre><code>systemctl list-timers --all</code></pre>
	        	<div class="fragment">die Timer  Datei muss den selben namen haben wie das Unit-File<p><code>toller-dienst.service</code><p><code>toller-dienst.timer</code></div>

	        		<aside class="notes">
	        			timer datei ansehen
	        		</aside>
	        	</section>

	          	<section style="font-size: .7em ">
	           		<span style="color: orange; ">Aufgabe:</span> Erstellt einen Service, der alle 5 Minuten omikron.net pingt. Die Zeitplanung soll mit systemd timer umgesetzt werden. Die Ausgabe soll nach /var/log/omikron-ping.log geschrieben werden.<p>https://wiki.archlinux.org/index.php/Systemd/Timers
	           		<p>
	           		<code>/bin/ping-omikron.sh</code>
					<pre><code>#!/bin/bash
date &>> /var/log/ping-omikron.log
ping -c 3 omikron.net &>> /var/log/ping-omikron.log
					</code></pre>

				</section>

				<section>
						<code style="font-size: .5em">/etc/systemd/system/ping-omikron.timer</code>
		        		<pre><code>[Unit]
Description=Ping Omikron Timer

[Timer]
OnActiveSec=30s
OnUnitActiveSec=5m
Persistent=true

[Install]
WantedBy=basic.target
						</code></pre>
					<code style="font-size: .5em">/etc/systemd/system/ping-omikron.service</code>
	        		<pre><code>[Unit]
Description=Ping Omikron Unit

[Service]
Type=simple
ExecStart=/PFAD/ZU/ping-omikron.sh
					</code></pre>
					
	        	</section>
	        	
				<section>
					<h4>journalctl</h4>
					<pre><code>journalctl</code></pre>
					<pre><code>journalctl -xe</code></pre>
					<pre><code>journalctl --unit=backup.service </code></pre>

					<aside class="notes">man journalctl</aside>
		        </section>
				
				<section><a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-targets">Nützliche sytemd Targets</a>
					<p>https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-targets</section>
		        
		        <section>
		        	<h4>timedatectl</h4>
		        	Die Zeit mit systemd einstellen.
		        	<p>https://wiki.ubuntuusers.de/Systemzeit/
		        	<pre><code>sudo timedatectl set-timezone Europe/Berlin </code></pre>
		        	<pre><code>sudo timedatectl set-time 2019-28-02 19:01 </code></pre>
		        </section>

		        <section>
		        	<h4>Vorteile / Nachteile zu cron:</h4>
		        	<ul>
		        		<li class="fragment ">Nachteil: 2 Dateien müssen angelegt werden</li>
		        		<li class="fragment ">Vorteil: Besser steuerbar, Logs landen im systemd-journal</li>
		        		<li class="fragment ">Das ist die Zukunft</li>
		        	</ul>
		        </section>

		        <section style="font-size: .6em">
		        	<p>Bemerkungen: 
		        	<p>Systemd ist rückwärtskompatibel zu Sysvinit.<br> Alte init Befehle werden von systemd verstanden, sind teilweise noch in Benutzung
		        	<p>init-scripte sind in <code>/etc/init.d/</code> zu finden
		        	<pre><code>sudo /etc/init.d/apache2 start </code></pre>
		        	<p>Die logs landen weiterhin zusätzlich in /var/log/

		        	<p>ein weiteres init-System : Upstart -> eingestellt
		        		<aside class="notes">
		        			cat /etc/init.d/apache2<br>
		        			cat /lib/systemd/system/apache2.service 
		        		</aside>
		        </section>
			
				<section data-transition="slide" data-background="#4d7e65" data-background-transition="convex">
					<h2>Part 7 - Dateisysteme</h2>

				</section>
				<section>
					<h4>Benennung von Datenträgern</h4>
					<p>Festplatten / USB Sticks
					<ul>
						<li class="fragment ">/dev/sda - Erste Festplatte</li>
						<li class="fragment ">/dev/sdb - zweite FP</li>
						<li class="fragment ">/dev/sda1 - erste Partition auf erster FP</li>
						<li class="fragment ">/dev/sdb2 - 2.  P. auf 2. FP.</li>
					</ul>
				</section>

				<section>
					<p>externe Laufwerke

					<ul>
						<li class="fragment ">/dev/scd0 od. /dev/sr0  - erstes CD / DVD Laufwerk</li>
						<li class="fragment ">/dev/scd1 od. /dev/sr1  - zweites CD / DVD Laufwerk</li>
					</ul>
				</section>
				<section><pre><code>lsblk</code></pre>
					<pre><code>NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 489,1G  0 disk 
├─sda1   8:1    0  63,1G  0 part /
├─sda2   8:2    0     1K  0 part 
├─sda5   8:5    0 407,3G  0 part /home
├─sda6   8:6    0   9,4G  0 part [SWAP]
└─sda7   8:7    0   9,2G  0 part /tmp
sdb      8:16   0 298,1G  0 disk 
└─sdb1   8:17   0 298,1G  0 part /home/dany
sr0     11:0    1  1024M  0 rom  
sr1     11:1    1  1024M  0 rom  
				</code></pre></section>

				<section>Reihenfolge kann sich beim Umstecken ändern.<br>For the rescue: UUID
					<pre><code>ls -Lr /dev/disk/</code></pre></section>

				<section>fstab, partitionieren, mounten</section>



			</div>
		</div>

		<script src="lib/js/head.min.js"></script>
		<script src="js/reveal.js"></script>

		<script>

			// More info https://github.com/hakimel/reveal.js#configuration
			Reveal.initialize({
				controls: true,
				progress: true,
				history: true,
				center: true,

				transition: 'slide', // none/fade/slide/convex/concave/zoom

				// More info https://github.com/hakimel/reveal.js#dependencies
				dependencies: [
					{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
					{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
					{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
					{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
					{ src: 'plugin/search/search.js', async: true },
					{ src: 'plugin/zoom-js/zoom.js', async: true },
					{ src: 'plugin/notes/notes.js', async: true }
				]
			});

		</script>

	</body>
</html>