<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux &amp; Server on myl3z.me</title><link>https://myl3z.me/de/docs/linux/</link><description>Recent content in Linux &amp; Server on myl3z.me</description><generator>Hugo</generator><language>de</language><atom:link href="https://myl3z.me/de/docs/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>Boot-Stick im Terminal</title><link>https://myl3z.me/de/docs/linux/bootable-usb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://myl3z.me/de/docs/linux/bootable-usb/</guid><description>&lt;h1 id="boot-stick-im-terminal"&gt;Boot-Stick im Terminal&lt;a class="anchor" href="#boot-stick-im-terminal"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Ein bootfaehiger USB-Stick aus einer ISO — ohne Zusatzsoftware, nur mit &lt;code&gt;lsblk&lt;/code&gt;, &lt;code&gt;umount&lt;/code&gt;
und &lt;code&gt;dd&lt;/code&gt;. Das Beispiel schreibt einen Debian-Netinst-Installer, funktioniert aber mit jeder
Hybrid-ISO gleich. Was die einzelnen Befehle genau tun, steht unter
&lt;a href="https://myl3z.me/de/docs/linux/disk-commands/"&gt;lsblk, umount, dd, sync&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote class='book-hint warning'&gt;
&lt;p&gt;&lt;code&gt;dd&lt;/code&gt; fragt nicht nach und kennt kein Undo. Ein falscher Geraetename ueberschreibt die
Systemplatte. Das Ziel vor dem Ausfuehren zweimal pruefen.&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="book-steps"&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;h2 id="geraet-ermitteln"&gt;Geraet ermitteln&lt;a class="anchor" href="#geraet-ermitteln"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lsblk -o NAME,SIZE,MODEL,TRAN,MOUNTPOINTS&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Beispielausgabe:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NAME SIZE MODEL TRAN MOUNTPOINTS
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nvme0n1 1.8T Samsung SSD
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├─nvme0n1p1 1G /boot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└─nvme0n1p2 1.8T /
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sdb 28.7G SanDisk Ultra usb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└─sdb1 28.7G /run/media/xander/USB&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;TRAN usb&lt;/code&gt;, die passende Groesse und der Modellname identifizieren den Stick: hier
&lt;code&gt;/dev/sdb&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>lsblk, umount, dd, sync</title><link>https://myl3z.me/de/docs/linux/disk-commands/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://myl3z.me/de/docs/linux/disk-commands/</guid><description>&lt;h1 id="lsblk-umount-dd-sync"&gt;lsblk, umount, dd, sync&lt;a class="anchor" href="#lsblk-umount-dd-sync"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Die vier Befehle, mit denen man unter Linux an Blockgeraete herangeht: eines finden, es
freigeben, es beschreiben und sicherstellen, dass die Daten wirklich drauf sind. Angewandt
werden sie unter &lt;a href="https://myl3z.me/de/docs/linux/bootable-usb/"&gt;Boot-Stick im Terminal&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="lsblk--blockgeraete-auflisten"&gt;lsblk — Blockgeraete auflisten&lt;a class="anchor" href="#lsblk--blockgeraete-auflisten"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;lsblk&lt;/code&gt; liest den Geraetebaum aus dem Kernel (&lt;code&gt;/sys/block&lt;/code&gt;) und stellt ihn als Baum dar:
physische Datentraeger als Wurzel, ihre Partitionen als Kinder. Es braucht keine
Root-Rechte und fasst nichts an.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lsblk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nvme0n1 259:0 0 1.8T 0 disk
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├─nvme0n1p1 259:1 0 1G 0 part /boot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└─nvme0n1p2 259:2 0 1.8T 0 part /
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sdb 8:16 1 28.7G 0 disk
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└─sdb1 8:17 1 28.7G 0 part /run/media/xander/USB&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Die Standardspalten sagen wenig ueber die Herkunft eines Geraets. Mit &lt;code&gt;-o&lt;/code&gt; waehlt man selbst
aus:&lt;/p&gt;</description></item><item><title>Statische IP mit ifupdown</title><link>https://myl3z.me/de/docs/linux/static-ip/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://myl3z.me/de/docs/linux/static-ip/</guid><description>&lt;h1 id="statische-ip-mit-ifupdown"&gt;Statische IP mit ifupdown&lt;a class="anchor" href="#statische-ip-mit-ifupdown"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Ein Server, den andere Geraete ansprechen sollen, braucht eine Adresse, die sich nicht
aendert. Per DHCP bekommt er irgendeine — nach einem Neustart des Routers moeglicherweise eine
andere, und jede Konfiguration, die auf die alte zeigt, laeuft ins Leere. Besonders bei einem
DNS-Server ist das keine Option: dessen Adresse tragen alle Clients fest ein.&lt;/p&gt;
&lt;p&gt;Eine Debian-Installation ohne Desktop verwaltet das Netzwerk mit &lt;strong&gt;ifupdown&lt;/strong&gt; ueber
&lt;code&gt;/etc/network/interfaces&lt;/code&gt;. NetworkManager und &lt;code&gt;systemd-networkd&lt;/code&gt; loesen dieselbe Aufgabe, sind
auf einem Netinst-System aber nicht im Spiel.&lt;/p&gt;</description></item><item><title>SSH-Config und Key-Login</title><link>https://myl3z.me/de/docs/linux/ssh-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://myl3z.me/de/docs/linux/ssh-config/</guid><description>&lt;h1 id="ssh-config-und-key-login"&gt;SSH-Config und Key-Login&lt;a class="anchor" href="#ssh-config-und-key-login"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Ohne Konfiguration besteht jede Verbindung aus derselben Tipparbeit:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh -i ~/.ssh/id_rsa xander@10.10.10.3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Adresse, Benutzer und Schluessel gehoeren nicht in die Kommandozeile, sondern in die
Client-Konfiguration unter &lt;code&gt;~/.ssh/config&lt;/code&gt;. Dort steht pro Host, wie die Verbindung aussehen
soll — danach genuegt der Alias:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh dns01&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="der-eintrag"&gt;Der Eintrag&lt;a class="anchor" href="#der-eintrag"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Host dns01
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HostName 10.10.10.3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; IdentityFile /home/xander/.ssh/id_rsa
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; IdentitiesOnly yes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Zeile&lt;/th&gt;
					&lt;th&gt;Bedeutung&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;Host dns01&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;der Name, den man auf der Kommandozeile tippt. Frei waehlbar und unabhaengig vom echten Hostnamen; alles bis zum naechsten &lt;code&gt;Host&lt;/code&gt; gehoert zu diesem Block&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;HostName 10.10.10.3&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;wohin tatsaechlich verbunden wird — IP oder DNS-Name&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;IdentityFile&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;der &lt;strong&gt;private&lt;/strong&gt; Schluessel fuer diese Verbindung. Der oeffentliche daneben (&lt;code&gt;.pub&lt;/code&gt;) liegt auf dem Server&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;IdentitiesOnly yes&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;nur diesen Schluessel anbieten, nichts anderes&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Der Datei-Abschnitt ist eine Sammlung von Defaults, keine Verbindung fuer sich. Er greift bei
allem, was auf den Alias passt — also auch bei &lt;code&gt;scp&lt;/code&gt;, &lt;code&gt;rsync&lt;/code&gt; und &lt;code&gt;git&lt;/code&gt;, die denselben
SSH-Client verwenden:&lt;/p&gt;</description></item><item><title>sudo nachruesten</title><link>https://myl3z.me/de/docs/linux/sudo-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://myl3z.me/de/docs/linux/sudo-setup/</guid><description>&lt;h1 id="sudo-nachruesten"&gt;sudo nachruesten&lt;a class="anchor" href="#sudo-nachruesten"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Auf einer frischen Debian-Installation kann &lt;code&gt;sudo&lt;/code&gt; fehlen — und zwar abhaengig von einer
Entscheidung, die man beim Installieren getroffen hat, ohne die Folge zu sehen:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Root-Passwort im Installer&lt;/th&gt;
					&lt;th&gt;Ergebnis&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;vergeben&lt;/td&gt;
					&lt;td&gt;root ist aktiv, &lt;code&gt;sudo&lt;/code&gt; wird &lt;strong&gt;nicht&lt;/strong&gt; installiert&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;leer gelassen&lt;/td&gt;
					&lt;td&gt;root ist gesperrt, &lt;code&gt;sudo&lt;/code&gt; wird installiert und der erste Benutzer in die Gruppe &lt;code&gt;sudo&lt;/code&gt; aufgenommen&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Wer also ein Root-Passwort gesetzt hat, steht anschliessend vor einem &lt;code&gt;sudo: command not found&lt;/code&gt; und muss nachruesten.&lt;/p&gt;</description></item><item><title>Grundausstattung nach der Installation</title><link>https://myl3z.me/de/docs/linux/base-packages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://myl3z.me/de/docs/linux/base-packages/</guid><description>&lt;h1 id="grundausstattung-nach-der-installation"&gt;Grundausstattung nach der Installation&lt;a class="anchor" href="#grundausstattung-nach-der-installation"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Eine Netinst-Installation ohne Desktop bringt bewusst wenig mit. Das ist die richtige
Ausgangslage fuer einen Server — es haelt Angriffsflaeche und Update-Aufwand klein —, hat aber
zur Folge, dass Werkzeuge erst dann auffallen, wenn man sie braucht. Diese Seite sammelt, was
auf dem Homelab-Rechner nachtraeglich dazugekommen ist.&lt;/p&gt;
&lt;p&gt;Ob ein Programm ueberhaupt fehlt, beantwortet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff5c57"&gt;command&lt;/span&gt; -v curl &lt;span style="color:#78787e"&gt;# Pfad, wenn vorhanden; sonst leer und Exit-Code 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dpkg -l curl &lt;span style="color:#78787e"&gt;# Paketstatus: ii = installiert und konfiguriert&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="curl"&gt;curl&lt;a class="anchor" href="#curl"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install curl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; holt Daten ueber HTTP, HTTPS und ein Dutzend weiterer Protokolle und schreibt sie
standardmaessig nach stdout. Auf einem Server ohne Browser ist es das Standardwerkzeug fuer
alles, was ueber das Netz kommt: Installations-Skripte, API-Abfragen, der schnelle Test, ob
ein Dienst antwortet.&lt;/p&gt;</description></item><item><title>Pi-hole als DNS-Server</title><link>https://myl3z.me/de/docs/linux/pihole/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://myl3z.me/de/docs/linux/pihole/</guid><description>&lt;h1 id="pi-hole-als-dns-server"&gt;Pi-hole als DNS-Server&lt;a class="anchor" href="#pi-hole-als-dns-server"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Pi-hole ist ein DNS-Server mit Filter. Fragt ein Geraet nach einer Domain, die auf einer
Blockliste steht, reicht Pi-hole die Anfrage nicht an den Upstream weiter, sondern beantwortet
sie selbst — mit einer Adresse, die ins Leere zeigt. Der Vorteil gegenueber einem Blocker im
Browser ist die Stelle, an der gefiltert wird: die Namensaufloesung nutzt jedes Geraet im
Netz, auch das Fernsehgeraet und das Telefon des Besuchs, auf denen sich nichts installieren
laesst.&lt;/p&gt;</description></item><item><title>Upstream-DNS waehlen</title><link>https://myl3z.me/de/docs/linux/dns-upstream/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://myl3z.me/de/docs/linux/dns-upstream/</guid><description>&lt;h1 id="upstream-dns-waehlen"&gt;Upstream-DNS waehlen&lt;a class="anchor" href="#upstream-dns-waehlen"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://myl3z.me/de/docs/linux/pihole/"&gt;Pi-hole&lt;/a&gt; kennt die Adressen der Welt nicht. Es kennt
Blocklisten und einen Cache — alles andere reicht es weiter an einen &lt;strong&gt;Upstream&lt;/strong&gt;, und dessen
Antwort gibt es an den Client zurueck. Damit ist der Upstream die Stelle, an der die
Namensaufloesung des ganzen Haushalts das eigene Netz verlaesst.&lt;/p&gt;
&lt;p&gt;Der Installer stellt die Frage einmal, mit Google als erstem Vorschlag, und wer bestaetigt,
hat eine Entscheidung getroffen, ohne sie zu treffen.&lt;/p&gt;</description></item></channel></rss>