<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>StarBlog</title>
	<atom:link href="https://my.stargazer.at/de/feed/" rel="self" type="application/rss+xml"/>
	<link>https://my.stargazer.at/de</link>
	<description>my two cents on life - including taxes and duties...</description>
	<lastBuildDate>Wed, 02 Aug 2023 13:50:50 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><item>
		<title>AdGuard vs PiHole Hands on</title>
		<link>https://my.stargazer.at/de/2023/08/02/settling-the-adguard-vs-pihole-debate-for-good/?pk_campaign=feed&amp;pk_kwd=settling-the-adguard-vs-pihole-debate-for-good</link>
					<comments>https://my.stargazer.at/de/2023/08/02/settling-the-adguard-vs-pihole-debate-for-good/?pk_campaign=feed&amp;pk_kwd=settling-the-adguard-vs-pihole-debate-for-good#comments</comments>
		
		<dc:creator><![CDATA[ToeiRei]]></dc:creator>
		<pubDate>Wed, 02 Aug 2023 13:50:50 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://my.stargazer.at/?p=1907</guid>

					<description><![CDATA[Heutzutage im Internet unterwegs zu sein ohne AdBlocker ist eines der Dinge, die ich mir schon nicht mehr vorstellen mag. Ernsthaft! Überall Werbung und die frisst sogar noch meine Bandbreite. Auf (m)einem PC habe ich oft genug Möglichkeiten um Werbung im Browser zu blockieren &#8211; aber bei manchen Dingen geht das nicht so einfach; Die Lösung dazu ist [&#8230;]<img src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2023%2F08%2F02%2Fsettling-the-adguard-vs-pihole-debate-for-good%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dsettling-the-adguard-vs-pihole-debate-for-good&amp;action_name=AdGuard%20vs%20PiHole%20Hands%20on&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[<p>Heutzutage im Internet unterwegs zu sein ohne AdBlocker ist eines der Dinge, die ich mir schon nicht mehr vorstellen mag. Ernsthaft! Überall Werbung und die frisst sogar noch meine Bandbreite. Auf (m)einem PC habe ich oft genug Möglichkeiten um Werbung im Browser zu blockieren &#8211; aber bei manchen Dingen geht das nicht so einfach; Die Lösung dazu ist oftmals DNS Blocking &#8211; ein bewusstes &#8217;nicht finden&#8216; von Seiten im Internet die eben Werbung bzw Tracker hosten.</p>
<p>Um einmal aufzuzeigen, wie effektiv Werbung die Bandbreite fressen kann erinnere ich mich an ein Studentenwohnheim, wo ein DNS Blocker als letzter Versuch herhalten musste um bei der damaligen Internet-Leitung etwas Linderung zu bringen. Remote-Desktop-Verbindungen in das Studentenheim waren erst durch den Einsatz des Blockers wieder möglich, da er die vielen eingebetteten Werbe-Videos auf Webseiten blockierte. Eine Idee auf die ich heute noch stolz bin.</p>
<p>Wenn man nach DNS Blockern im Netz sucht, stößt man unweigerlich auf <a href="https://adguard.com/en/adguard-home/overview.html">AdGuard Home</a> und <a href="https://pi-hole.net/">PiHole</a> und schier endlose Debatten, welcher nun besser sei. Da ich aber lieber Fakten und Zahlen sehe, habe ich mir in meinem Homelab auf meinem Proxmox Server, einem AMD EPYC 7282 16-Kerner, zwei Container eingebaut. Selbe Hardware, selbe Voraussetzungen via Docker.</p>
<p>Auf den ersten Blick sind beide Kandidaten Open Source Projekte mit ihrer Community, vielen (zusätzlichen) Blocklisten die man laden kann &#8211; also ziemlich alles was man so braucht. AdGuard Home kann auch noch DoH und DoT, welche ich hier in meinem Heimnetzwerk als Funktion nicht brauche, da ich meinem Netzwerk vertraue &#8211; Irgendwo muss man einmal die Linie ziehen. Um aber auch Verschlüsselung testen zu können habe ich einfach Traefik vor PiHole geklemmt. AdGuard punktet in Sachen Funktionalität noch zusätzlich dadurch, dass &#8217;safe-search&#8216; erzwungen werden kann. Interessant mit Kindern, aber da ich hier das einzige Spielkind bin, vernachlässigbar. AdGuard punktet hier deutlich mit einfacheren Setup, wobei ich die Konfiguration über docker-compose ohne Assistenten bei piHole für meinen Andwendungsfall praktischer finde.</p>
<p>Die Einrichtung ist aber nicht wirklich etwas, was ich besonders oft mache &#8211; im Normalfall einmal und das war&#8217;s &#8211; also gibt es für mich nicht viel Unterschied. Also ab zur Benutzung.</p>
<p>Ich habe mich für die firehol.net-Blocklisten entschieden, welche ich der Fairness halber in beide Systeme eingespielt habe. Klarer Gewinner: PiHole, weil er diese auf einmal importieren kann. AdGuard hingegen mit seinem schickeren UI kann diese Funktion nicht. </p>
<p>Wie sieht es mit RAM Verbrauch aus? AdGuard hatte sich bei etwa 250 MB eingependelt:<br />
<img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-1909" src="https://my.stargazer.at/wp-content/uploads/2023/08/adguard-portainer.png" alt="" width="2226" height="531" srcset="https://my.stargazer.at/wp-content/uploads/2023/08/adguard-portainer.png 2226w, https://my.stargazer.at/wp-content/uploads/2023/08/adguard-portainer-300x72.png 300w, https://my.stargazer.at/wp-content/uploads/2023/08/adguard-portainer-1024x244.png 1024w, https://my.stargazer.at/wp-content/uploads/2023/08/adguard-portainer-150x36.png 150w, https://my.stargazer.at/wp-content/uploads/2023/08/adguard-portainer-768x183.png 768w, https://my.stargazer.at/wp-content/uploads/2023/08/adguard-portainer-1536x366.png 1536w, https://my.stargazer.at/wp-content/uploads/2023/08/adguard-portainer-2048x489.png 2048w" sizes="(max-width: 2226px) 100vw, 2226px" /></p>
<p>PiHole, da ich diesen länger laufen hatte, hatte sich bereits bei 100 MB angesiedelt.<br />
<img decoding="async" class="alignnone size-full wp-image-1910" src="https://my.stargazer.at/wp-content/uploads/2023/08/pihole-portainer.png" alt="" width="2228" height="528" srcset="https://my.stargazer.at/wp-content/uploads/2023/08/pihole-portainer.png 2228w, https://my.stargazer.at/wp-content/uploads/2023/08/pihole-portainer-300x71.png 300w, https://my.stargazer.at/wp-content/uploads/2023/08/pihole-portainer-1024x243.png 1024w, https://my.stargazer.at/wp-content/uploads/2023/08/pihole-portainer-150x36.png 150w, https://my.stargazer.at/wp-content/uploads/2023/08/pihole-portainer-768x182.png 768w, https://my.stargazer.at/wp-content/uploads/2023/08/pihole-portainer-1536x364.png 1536w, https://my.stargazer.at/wp-content/uploads/2023/08/pihole-portainer-2048x485.png 2048w" sizes="(max-width: 2228px) 100vw, 2228px" /></p>
<p>Angeblich sollte piHole mehr RAM fressen als AdGuard. Nichts was ich in meinem Versuch hier reproduzieren konnte &#8211; im Gegenteil.</p>
<p>Um jetzt zum DNS zu kommen &#8211; dort wo es nun wirklich interessant wird &#8211; schauen wir uns die Latenz an. Der Versuch besteht aus 2 Abfragen hintereinander, damit der DNS Zeit hat die Anfrage zu cachen und wir nicht auf externe DNS zurückgreifen müssen, die uns den test verfälschen. Um einfach einmal eine Baseline zu haben, fragte ich erstmal bei Googles 8.8.8.8 an und verwendete &#8218;time&#8216; um den &#8218;dig&#8216; command zu timen. Dabei zeigt &#8218;real&#8216; die vergangene Zeit an.</p>
<pre>
test@ts ~ $ time dig google.de @8.8.8.8

; <<>> DiG 9.16.41 <<>> google.de @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55953
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;google.de.                     IN      A

;; ANSWER SECTION:
google.de.              299     IN      A       142.250.180.227

;; Query time: 64 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Aug 02 15:00:37 CEST 2023
;; MSG SIZE  rcvd: 54


real    0m0.078s
user    0m0.004s
sys     0m0.004s
</pre>
<p>Google legt dank Netzwerklatenz mit 78ms vor. Nicht schlecht.</p>
<p>Mein interner Bind9 Server legte mit 43ms nach. Nicht wirklich super, aber auch nicht schlecht für das LDAP Backend und Krempel die dieser intern macht. PiHole zieht allen mit 18ms davon, während AdGuard Home mit 21ms den zweiten Platz belegt. Mit anderen Worten, die 3ms Unterschied merkt man im realen Betrieb nicht. Was heißt das jetzt für jeden Einzelnen? Ganz ehrlich: Ich würde beide Lösungen testen und dann sehen wie wichtig einem Statistiken bzw ein schickes UI sind. Ich für meinen Teil bleibe auf jeden Fall bei piHole, da mir adGuard Home keine Vorteile bringt.</p>
<img decoding="async" src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2023%2F08%2F02%2Fsettling-the-adguard-vs-pihole-debate-for-good%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dsettling-the-adguard-vs-pihole-debate-for-good&amp;action_name=AdGuard%20vs%20PiHole%20Hands%20on&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
					<wfw:commentRss>https://my.stargazer.at/de/2023/08/02/settling-the-adguard-vs-pihole-debate-for-good/?pk_campaign=feed&amp;pk_kwd=settling-the-adguard-vs-pihole-debate-for-good/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Matrix vs Ntfy – Fehlersuche à la carte</title>
		<link>https://my.stargazer.at/de/2023/03/30/matrix-vs-ntfy-detective-work/?pk_campaign=feed&amp;pk_kwd=matrix-vs-ntfy-detective-work</link>
					<comments>https://my.stargazer.at/de/2023/03/30/matrix-vs-ntfy-detective-work/?pk_campaign=feed&amp;pk_kwd=matrix-vs-ntfy-detective-work#respond</comments>
		
		<dc:creator><![CDATA[ToeiRei]]></dc:creator>
		<pubDate>Thu, 30 Mar 2023 18:55:55 +0000</pubDate>
				<category><![CDATA[IT Related stuff]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[matrix]]></category>
		<guid isPermaLink="false">https://my.stargazer.at/?p=1901</guid>

					<description><![CDATA[Ich betreibe einen kleinen Matrix Homeserver. Einer der Gründe ist einfach der Preis von Speicher, da jener am Smartphone einfach viel teurer ist, als ein paar Festplatten in meinem Server. Durch das &#8218;umlagern&#8216; der ganzen Messenger auf den Server hatte ich kurzerhand um die 20 GB Speicher auf dem Androiden wieder frei gemacht und nur noch eine App. [&#8230;]<img src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2023%2F03%2F30%2Fmatrix-vs-ntfy-detective-work%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dmatrix-vs-ntfy-detective-work&amp;action_name=Matrix%20vs%20Ntfy%20%26%238211%3B%20Fehlersuche%20%C3%A0%20la%20carte&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[<p>Ich betreibe einen kleinen Matrix Homeserver. Einer der Gründe ist einfach der Preis von Speicher, da jener am Smartphone einfach viel teurer ist, als ein paar Festplatten in meinem Server. Durch das &#8218;umlagern&#8216; der ganzen Messenger auf den Server hatte ich kurzerhand um die 20 GB Speicher auf dem Androiden wieder frei gemacht und nur noch eine App.</p>
<p>Aber nun zum versprochenen Problem. Mein Server war installiert und ich begann die Kiste nach meinem Gutdünken mit Bridges zu erweitern &#8211; auch mit einem eigenen Push Server, da ich nicht unbedingt meine eigenen Apps bauen wollte, nur um mit dem Google Push Service zu interagieren. Die Installation lief und alles sah gut aus, außer dass der Matrix client nie aufgeweckt wurde. Eigene Push-Mitteilungen, die ich als Alarme nutzte, kamen sehr wohl an. Ich muss zugeben, Anfangs hatte mich die Ruhe nicht wirklich gestört, bis es einfach mal zu ruhig war und ich dieses &#8218;hier stimmt etwas nicht&#8216;-Gefühl sich in der Magengegend manifestierte.</p>
<p>Unser Container produzierte brav Logfiles &#8211; und da war auch ein Hinweis, der mich alles nur nicht erleichterte:<br />
<code>Mar 18 23:30:14 matrix matrix-synapse[2213]: 2023-03-18 22:30:14,267 - synapse.push.httppusher - 432 - WARNING - httppush.process-17 - Failed to push event $bLGuzRj3t4p6Z6h16aTmfw9YA5gEhZZ0fZOebFToL04 to @user:domain/im.vector.app.android/https://ntfy.domain/upv5aFQWe5uAHe?up=1: <class 'twisted.internet.error.DNSLookupError'> DNS lookup failed: no results for hostname lookup: ntfy.domain.</code></p>
<p>Was war da los? War das Docker-Netzwerk im Eimer? War der DNS down oder nur falsch eingestellt? Ich hab&#8216; mir gleich einmal eine Shell an den Container geheftet und mit einigermaßen Frust festgestellt, dass der Container weder &#8218;ping&#8216; noch anderes Netzwerk-Werkzeug enthielt (was ja eigentlich nicht schlecht ist!). Nach einigen Geräuschemissionen fand ich dann aber doch die curl Binary und konnte versuchen, eine Nachricht an den Push Service abzusetzen&#8230;. Erfolgreich?</p>
<p>Okay &#8211; dann hatte die Meldung offenbar nichts mit dem DNS zu tun und hatte die gleiche Glaubwürdigkeit wie die Aussage eines Politikers. Demnach war der Schuldige definitiv der Synapse Server und ich hatte absolut keine Lust voreilig in dessen (teilweise echt furchteinflößendem) Code zu wühlen. Also nahm ich mir als erstes das Twisted Framework vor, welches dazu benutzt wurde den Service zu programmieren. Ein <a href="https://docs.twistedmatrix.com/en/twisted-16.1.1/_downloads/testdns.py" rel="noopener" target="_blank">DNS Test Script</a> war eine einfache Möglichkeit zu sehen, woran es liegen könnte. Zwei Sekunden und einen Wutschrei später war auch Twisted als Unschuldig außen vor.</p>
<p>Mit einer frischen Tasse Tee hatte ich mich dann ans Suchen und Code lesen gemacht und nach Stunden einen Hinweis in der Config gefunden:</p>
<p><code><br />
# Prevent outgoing requests from being sent to the following blacklisted IP address<br />
# CIDR ranges. If this option is not specified then it defaults to private IP<br />
# address ranges (see the example below).<br />
#<br />
# The blacklist applies to the outbound requests for federation, identity servers,<br />
# push servers, and for checking key validity for third-party invite events.<br />
#<br />
# (0.0.0.0 and :: are always blacklisted, whether or not they are explicitly<br />
# listed here, since they correspond to unroutable addresses.)<br />
#<br />
# This option replaces federation_ip_range_blacklist in Synapse v1.25.0.<br />
#<br />
# Note: The value is ignored when an HTTP proxy is in use<br />
#<br />
#ip_range_blacklist:<br />
#  - '127.0.0.0/8'<br />
#  - '10.0.0.0/8'<br />
#  - '172.16.0.0/12'<br />
#  - '192.168.0.0/16'<br />
#  - '100.64.0.0/10'<br />
#  - '192.0.0.0/24'<br />
#  - '169.254.0.0/16'<br />
#  - '192.88.99.0/24'<br />
#  - '198.18.0.0/15'<br />
#  - '192.0.2.0/24'<br />
#  - '198.51.100.0/24'<br />
#  - '203.0.113.0/24'<br />
#  - '224.0.0.0/4'<br />
#  - '::1/128'<br />
#  - 'fe80::/10'<br />
#  - 'fc00::/7'<br />
#  - '2001:db8::/32'<br />
#  - 'ff00::/8'<br />
#  - 'fec0::/10'</p>
<p># List of IP address CIDR ranges that should be allowed for federation,<br />
# identity servers, push servers, and for checking key validity for<br />
# third-party invite events. This is useful for specifying exceptions to<br />
# wide-ranging blacklisted target IP ranges - e.g. for communication with<br />
# a push server only visible in your network.<br />
#<br />
# This whitelist overrides ip_range_blacklist and defaults to an empty<br />
# list.<br />
#<br />
#ip_range_whitelist:<br />
#   - '192.168.1.1'<br />
</code></p>
<p>Mein ntfy Service war in meiner DMZ und wurde auch (erfolgreich) von anderen Diensten verwendet. Das setzte ihn jedoch auf die Blockliste von Synapse und verursachte somit das Problem. Ein Einfacher Eintrag in der Whitelist hat die Sache dann erledigt. Ich fühlte mich für einen Moment echt großartig, das Problem gelöst zu haben&#8230; bis die Benachrichtigungen über ungelesene Nachrichten bei mir wieder eintrudelten. Vermisse ich die Ruhe nachdem ich den Fehler repariert hatte? Manchmal.</p>
<img loading="lazy" decoding="async" src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2023%2F03%2F30%2Fmatrix-vs-ntfy-detective-work%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dmatrix-vs-ntfy-detective-work&amp;action_name=Matrix%20vs%20Ntfy%20%26%238211%3B%20Fehlersuche%20%C3%A0%20la%20carte&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
					<wfw:commentRss>https://my.stargazer.at/de/2023/03/30/matrix-vs-ntfy-detective-work/?pk_campaign=feed&amp;pk_kwd=matrix-vs-ntfy-detective-work/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Was ist in meinem PC drin?</title>
		<link>https://my.stargazer.at/de/2022/06/07/whats-in-my-pc/?pk_campaign=feed&amp;pk_kwd=whats-in-my-pc</link>
					<comments>https://my.stargazer.at/de/2022/06/07/whats-in-my-pc/?pk_campaign=feed&amp;pk_kwd=whats-in-my-pc#respond</comments>
		
		<dc:creator><![CDATA[ToeiRei]]></dc:creator>
		<pubDate>Tue, 07 Jun 2022 11:50:31 +0000</pubDate>
				<category><![CDATA[IT Related stuff]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[YouTube]]></category>
		<guid isPermaLink="false">https://my.stargazer.at/?p=1885</guid>

					<description><![CDATA[<img src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2022%2F06%2F07%2Fwhats-in-my-pc%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dwhats-in-my-pc&amp;action_name=Was%20ist%20in%20meinem%20PC%20drin%3F&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[<p><iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/TFagCbYV1PA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<img loading="lazy" decoding="async" src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2022%2F06%2F07%2Fwhats-in-my-pc%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dwhats-in-my-pc&amp;action_name=Was%20ist%20in%20meinem%20PC%20drin%3F&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
					<wfw:commentRss>https://my.stargazer.at/de/2022/06/07/whats-in-my-pc/?pk_campaign=feed&amp;pk_kwd=whats-in-my-pc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kernel mit clang bauen: Erste Gehversuche</title>
		<link>https://my.stargazer.at/de/2021/09/24/building-the-kernel-with-clang-messing-around/?pk_campaign=feed&amp;pk_kwd=building-the-kernel-with-clang-messing-around</link>
					<comments>https://my.stargazer.at/de/2021/09/24/building-the-kernel-with-clang-messing-around/?pk_campaign=feed&amp;pk_kwd=building-the-kernel-with-clang-messing-around#respond</comments>
		
		<dc:creator><![CDATA[ToeiRei]]></dc:creator>
		<pubDate>Thu, 23 Sep 2021 22:02:31 +0000</pubDate>
				<category><![CDATA[IT Related stuff]]></category>
		<category><![CDATA[clang]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[llvm]]></category>
		<guid isPermaLink="false">https://my.stargazer.at/?p=1867</guid>

					<description><![CDATA[Der Linux Kernel ist schon ein schönes Stück Programmierkunst, mit dessen Bau ich mich eigentlich recht wohl fühle. So sicher, dass ich inzwischen meine eigenen Debian Pakete schnüre. Höchste Zeit also, ein bisschen was Umzubauen um die Sache interessanter zu gestalten. Wie wäre es mit clang und LTO? Das einzige Problem dabei ist gute Doku &#8211; also selbst [&#8230;]<img src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2021%2F09%2F24%2Fbuilding-the-kernel-with-clang-messing-around%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dbuilding-the-kernel-with-clang-messing-around&amp;action_name=Kernel%20mit%20clang%20bauen%3A%20Erste%20Gehversuche&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[<p>Der Linux Kernel ist schon ein schönes Stück Programmierkunst, mit dessen Bau ich mich eigentlich recht wohl fühle. So sicher, dass ich inzwischen meine eigenen Debian Pakete schnüre. Höchste Zeit also, ein bisschen was Umzubauen um die Sache interessanter zu gestalten. Wie wäre es mit clang und LTO? Das einzige Problem dabei ist gute Doku &#8211; also selbst schreiben.</p>
<p>Um den Kernel überhaupt mit LTO zu bauen, sollte die Config mit folgenden Optionen versehen sein:</p>
<p># CONFIG_STACKPROTECTOR is not set<br />
CONFIG_LTO=y<br />
CONFIG_LTO_CLANG=y<br />
CONFIG_ARCH_SUPPORTS_LTO_CLANG=y<br />
CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y<br />
CONFIG_HAS_LTO_CLANG=y<br />
# CONFIG_LTO_NONE is not set<br />
CONFIG_LTO_CLANG_FULL=y<br />
# CONFIG_LTO_CLANG_THIN is not set</p>
<p>Compiling wäre ziemlich einfach, sobald wir die clang-11 Binaries (debian buster default) mit Symlinks in den Griff kriegen, damit sie von den Scripts auch gefunden werden. Ein Job für update-alternatives:</p>
<p>update-alternatives \<br />
        &#8211;verbose \<br />
        &#8211;install /usr/bin/llvm-config       llvm-config      /usr/bin/llvm-config-11 100 \<br />
        &#8211;slave   /usr/bin/llvm-ar           llvm-ar          /usr/bin/llvm-ar-11 \<br />
        &#8211;slave   /usr/bin/llvm-as           llvm-as          /usr/bin/llvm-as-11 \<br />
        &#8211;slave   /usr/bin/llvm-bcanalyzer   llvm-bcanalyzer  /usr/bin/llvm-bcanalyzer-11 \<br />
        &#8211;slave   /usr/bin/llvm-cov          llvm-cov         /usr/bin/llvm-cov-11 \<br />
        &#8211;slave   /usr/bin/llvm-diff         llvm-diff        /usr/bin/llvm-diff-11 \<br />
        &#8211;slave   /usr/bin/llvm-dis          llvm-dis         /usr/bin/llvm-dis-11 \<br />
        &#8211;slave   /usr/bin/llvm-dwarfdump    llvm-dwarfdump   /usr/bin/llvm-dwarfdump-11 \<br />
        &#8211;slave   /usr/bin/llvm-extract      llvm-extract     /usr/bin/llvm-extract-11 \<br />
        &#8211;slave   /usr/bin/llvm-link         llvm-link        /usr/bin/llvm-link-11 \<br />
        &#8211;slave   /usr/bin/llvm-mc           llvm-mc          /usr/bin/llvm-mc-11 \<br />
        &#8211;slave   /usr/bin/llvm-nm           llvm-nm          /usr/bin/llvm-nm-11 \<br />
        &#8211;slave   /usr/bin/llvm-objdump      llvm-objdump     /usr/bin/llvm-objdump-11 \<br />
        &#8211;slave   /usr/bin/llvm-ranlib       llvm-ranlib      /usr/bin/llvm-ranlib-11 \<br />
        &#8211;slave   /usr/bin/llvm-readobj      llvm-readobj     /usr/bin/llvm-readobj-11 \<br />
        &#8211;slave   /usr/bin/llvm-rtdyld       llvm-rtdyld      /usr/bin/llvm-rtdyld-11 \<br />
        &#8211;slave   /usr/bin/llvm-size         llvm-size        /usr/bin/llvm-size-11 \<br />
        &#8211;slave   /usr/bin/llvm-stress       llvm-stress      /usr/bin/llvm-stress-11 \<br />
        &#8211;slave   /usr/bin/llvm-symbolizer   llvm-symbolizer  /usr/bin/llvm-symbolizer-11 \<br />
        &#8211;slave   /usr/bin/llvm-tblgen       llvm-tblgen      /usr/bin/llvm-tblgen-11 \<br />
        &#8211;slave   /usr/bin/llvm-objcopy      llvm-objcopy     /usr/bin/llvm-objcopy-11 \<br />
        &#8211;slave   /usr/bin/llvm-strip        llvm-strip       /usr/bin/llvm-strip-11</p>
<p>update-alternatives \<br />
        &#8211;verbose \<br />
        &#8211;install /usr/bin/clang                 clang                 /usr/bin/clang-11 100 \<br />
        &#8211;slave   /usr/bin/clang++               clang++               /usr/bin/clang++-11  \<br />
        &#8211;slave   /usr/bin/asan_symbolize        asan_symbolize        /usr/bin/asan_symbolize-11 \<br />
        &#8211;slave   /usr/bin/clang-cpp             clang-cpp             /usr/bin/clang-cpp-11 \<br />
        &#8211;slave   /usr/bin/ld.lld                ld.lld                /usr/bin/ld.lld-11</p>
<p>Nachdem das alles erledigt ist, kann man ans Compilen denken: make LLVM=1 LLVM_IAS=1 CC=clang HOSTCC=clang LD=ld.lld -j5 deb-pkg &#8211; aber Vorsicht: LTO wird einiges an RAM brauchen um seine Arbeit zu verrichten. Was Ergebnis betrifft, wie die Kernels performen oder wie stabil sie sind, kann ich noch nicht sagen. Aber Tests werden das in der Zukunft zeigen&#8230;</p>
<img loading="lazy" decoding="async" src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2021%2F09%2F24%2Fbuilding-the-kernel-with-clang-messing-around%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dbuilding-the-kernel-with-clang-messing-around&amp;action_name=Kernel%20mit%20clang%20bauen%3A%20Erste%20Gehversuche&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
					<wfw:commentRss>https://my.stargazer.at/de/2021/09/24/building-the-kernel-with-clang-messing-around/?pk_campaign=feed&amp;pk_kwd=building-the-kernel-with-clang-messing-around/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Automatisierung der kernel builds</title>
		<link>https://my.stargazer.at/de/2021/06/28/working-my-way-to-automatic-kernel-builds/?pk_campaign=feed&amp;pk_kwd=working-my-way-to-automatic-kernel-builds</link>
					<comments>https://my.stargazer.at/de/2021/06/28/working-my-way-to-automatic-kernel-builds/?pk_campaign=feed&amp;pk_kwd=working-my-way-to-automatic-kernel-builds#comments</comments>
		
		<dc:creator><![CDATA[ToeiRei]]></dc:creator>
		<pubDate>Mon, 28 Jun 2021 10:23:24 +0000</pubDate>
				<category><![CDATA[IT Related stuff]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[script]]></category>
		<guid isPermaLink="false">https://my.stargazer.at/?p=1834</guid>

					<description><![CDATA[Es ist ziemlich offensichtlich, dass die Betreuung des Debian Kernel Repos, das ich in diesem Artikel angekündigt hatte, einiges an Arbeit ist &#8211; gerade da ich den Kernel in 4 &#8222;Geschmacksrichtungen&#8220; anbiete: Vanilla, VM und beide Arten mit dem Gentoo Patchset &#8211; mit anderen Worten: Es mussten Verbesserungen her &#8211; und zwar schnell. Die Einführung von ccache brachte [&#8230;]<img src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2021%2F06%2F28%2Fworking-my-way-to-automatic-kernel-builds%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dworking-my-way-to-automatic-kernel-builds&amp;action_name=Automatisierung%20der%20kernel%20builds&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[<p>Es ist ziemlich offensichtlich, dass die Betreuung des <a href="https://github.com/ToeiRei/kernel-deb">Debian Kernel Repos</a>, das ich <a href="https://my.stargazer.at/2020/10/30/building-a-gentoo-linux-kernel-on-debian/">in diesem Artikel</a> angekündigt hatte, einiges an Arbeit ist &#8211; gerade da ich den Kernel in 4 &#8222;Geschmacksrichtungen&#8220; anbiete: Vanilla, VM und beide Arten mit dem Gentoo Patchset &#8211; mit anderen Worten: Es mussten Verbesserungen her &#8211; und zwar schnell. <a href="https://my.stargazer.at/2021/01/27/ccache-on-kernels/">Die Einführung von ccache</a> brachte zwar eine leichte Verbesserung (12-15% Cache Hits), aber das ist auch alles Andere als &#8218;viel&#8216; oder &#8218;Großartig&#8216;.</p>
<p>Der zweite Schritt war ein Build-Script, damit ich nicht alle Schritte händisch zu machen hatte und das Zeug sich selbst baut anstatt auf mich zu warten. Es war keine große Sache, ein einfaches Batch-Script, das seinen Job tat. Aber unterm Strich war es mir zu unflexibel für das, was ich das Script gebraucht habe. Aufgrund der fehlenden Fehlererkennung funktionierte das Script obendrein nur, wenn alles glatt lief &#8211; also in einer nicht-vorhandenen, perfekten Welt.</p>
<p>Also zurück an den Start:</p>
<p>Das Erste was ich brauchte, war Config-Management um die Konsistenz der Config für jeden Kernel zu gewährleisten. Git ist für solche Sachen großartig und Github bietet mir entsprechende Sicherheit gegen Plattenausfälle. Super.</p>
<p>Das nächste Problem, das ich lösen wollte war eine &#8218;Ein Script sie zu knechten&#8216;-Lösung um nicht vier Scripts zu haben, die alle relativ das Gleiche tun. Also war es an der Zeit alles in Funktionen zu kapseln und einige IFs in den Code zu werfen um die vier Geschmacksrichtungen zu erhalten. Nicht ganz perfekt, aber schon eine weitere Verbesserung.</p>
<p>Unser nächstes Ziel war nun kaputte Builds bzw. Patches die nicht funktionierten &#8211; also alles was mir die Builds ruiniert &#8211; abzufangen. Das war kein großes Ding mehr, da ich ja alles in Funktionen aufgebrochen hatte. Bei Auftreten eines Fehlers konnte ich so sauber aussteigen ohne die Config wieder in mein Repo zurückzuschreiben, was mir am Ende einige Rollbacks meines Repos erspart.</p>
<p>Jetzt ist die Sache zwar schon funktionstüchtig, aber wenig komfortabel, da ich immer noch die exakte Kernel-Version heraussuchen musste um den neuen Kernel zu bauen. Ein bisschen curl hier, grep da und schon hatten wir die neueste Version herausgefunden:</p>
<pre>KERNEL_VERSION=`curl -s https://www.kernel.org | grep -A1 latest_link | tail -n1 | egrep -o '&gt;[^&lt;]+' | egrep -o '[^&gt;]+'`</pre>
<p>Warum eigentlich alles in Bash? Ich muss zugeben, diese Frage wurde mir bereits einige male gestellt und die Antwort ist eigentlich nicht schwer: Ich will das Script leicht pflegen können und es in zB C zu schreiben würde mir keinen nennenswerten Vorteile bringen, da ich ohnehin viele shell-exec Aufrufe tätigen muss.</p>
<p>Das Script selbst tut seinen Job und was noch blieb war die Config auszulagern, wie ich in <a href="https://my.stargazer.at/2021/05/28/bash-files-vs-configuration/">diesem Beitrag beschreibe</a>, da ich diesen Artikel nicht noch weiter in die Länge ziehen wollte.</p>
<img loading="lazy" decoding="async" src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2021%2F06%2F28%2Fworking-my-way-to-automatic-kernel-builds%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dworking-my-way-to-automatic-kernel-builds&amp;action_name=Automatisierung%20der%20kernel%20builds&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
					<wfw:commentRss>https://my.stargazer.at/de/2021/06/28/working-my-way-to-automatic-kernel-builds/?pk_campaign=feed&amp;pk_kwd=working-my-way-to-automatic-kernel-builds/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Bash und Konfigurationen</title>
		<link>https://my.stargazer.at/de/2021/05/28/bash-files-vs-configuration/?pk_campaign=feed&amp;pk_kwd=bash-files-vs-configuration</link>
					<comments>https://my.stargazer.at/de/2021/05/28/bash-files-vs-configuration/?pk_campaign=feed&amp;pk_kwd=bash-files-vs-configuration#respond</comments>
		
		<dc:creator><![CDATA[ToeiRei]]></dc:creator>
		<pubDate>Fri, 28 May 2021 11:38:05 +0000</pubDate>
				<category><![CDATA[IT Related stuff]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[script]]></category>
		<guid isPermaLink="false">https://my.stargazer.at/?p=1836</guid>

					<description><![CDATA[Ich glaube, es ist kein großes Geheimnis mehr, dass ich gerne Dinge scripte um mein Leben einfacher zu gestalten: Das startet beim Smarthome und zieht sich hin zur Serverwartung und alles was halt sonst so scriptbar ist. Doch diesmal habe ich ein Thema auf dem Herzen, das ich mit euch teilen möchte: Wie arbeitet man mit Konfigurationsdateien in [&#8230;]<img src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2021%2F05%2F28%2Fbash-files-vs-configuration%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dbash-files-vs-configuration&amp;action_name=Bash%20und%20Konfigurationen&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[<p>Ich glaube, es ist kein großes Geheimnis mehr, dass ich gerne Dinge scripte um mein Leben einfacher zu gestalten: Das startet beim Smarthome und zieht sich hin zur Serverwartung und alles was halt sonst so scriptbar ist. Doch diesmal habe ich ein Thema auf dem Herzen, das ich mit euch teilen möchte: Wie arbeitet man mit Konfigurationsdateien in Bash?</p>
<p>Erstmal vorweg: Konfigurationen in Scripts sind Benutzernamen, Server, entfernte Repositories, you name it. Alles was man halt so an Daten in so einem Script braucht. Gerade wenn man seine Scripts öffentlich macht, sollte man darauf achten, nichts zu leaken &#8211; denn Leute werden mit dem Zeug rumexperimentieren.</p>
<p>Also was ist die Lösung? Für mich war es vorweg einmal alle Benutzernamen und anderen Krempel in Variablen zu packen um sie leichter anpassen zu können und eventuelle Fehler von der vorherigen Problematik zu lösen. Ist jetzt nichts Großes, aber eine Voraussetzung für eine saubere Lösung.</p>
<p>Der nächste logische Schritt wäre ein externes Config-File. In Bash könnte so eine Lösung wie folgt aussehen:</p>
<pre>source /home/myuser/test/config</pre>
<p>Und das ist genau das, wo ich mir angefangen habe, Gedanken zu machen. Ein Script zu sourcen heißt es auszuführen. Mit anderen Worten, source ist eine Möglichkeit mit der Config &#8211; sofern jemand bösen Code reinbastelt richtig in Schwierigkeiten zu kommen &#8211; was sich jedoch durch einfache Tricks vermeiden lässt.</p>
<p>Meine Lösung sieht vor, die Config zu parsen anstatt sie auszuführen. Da Json sehr einfach und lesbar ist, habe ich mir gedacht, kann ich es auch gleich verwenden. Durch den Shell-Parser &#8218;jq&#8216; lassen sich Werte auslesen ohne die Datei auszuführen. Wenn ihr mehr auf XML steht, empfehle ich das XML Startlet.</p>
<p>Aber genug der Theorie. Gehen wir die Sache an einem Beispiel an. Eine einfache Config könnte wie folgt aussehen:</p>
<pre>{ 
"username": "username-or-email",
"password": "the-password" 
}</pre>
<p>In unserem Hauptscript können wir nun Daten mit jq auslesen:</p>
<pre>USERNAME="$( jq -r '.username' "$config_file" )"</pre>
<p>Und die Moral von der Geschicht&#8216;: Parse deine Config, Exekutiere sie nicht!</p>
<img loading="lazy" decoding="async" src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2021%2F05%2F28%2Fbash-files-vs-configuration%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dbash-files-vs-configuration&amp;action_name=Bash%20und%20Konfigurationen&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
					<wfw:commentRss>https://my.stargazer.at/de/2021/05/28/bash-files-vs-configuration/?pk_campaign=feed&amp;pk_kwd=bash-files-vs-configuration/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mit dem Yubikey anmelden</title>
		<link>https://my.stargazer.at/de/2021/05/15/yubikey-for-system-auth/?pk_campaign=feed&amp;pk_kwd=yubikey-for-system-auth</link>
					<comments>https://my.stargazer.at/de/2021/05/15/yubikey-for-system-auth/?pk_campaign=feed&amp;pk_kwd=yubikey-for-system-auth#respond</comments>
		
		<dc:creator><![CDATA[ToeiRei]]></dc:creator>
		<pubDate>Sat, 15 May 2021 09:56:10 +0000</pubDate>
				<category><![CDATA[IT Related stuff]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[pam]]></category>
		<category><![CDATA[yubikey]]></category>
		<guid isPermaLink="false">https://my.stargazer.at/?p=1832</guid>

					<description><![CDATA[Linux ist schon ein wunderbares System mit vielen Dingen, die sich unendlich anpassen lassen &#8211; zumindest fühlt es sich immer jedesmal aufs Neue so an, wenn ich an meinem System ein neues Feature einbaue, das mir das Leben leichter macht. Heute: Login mit dem Yubikey Unter Linux ist es dank PAM sehr einfach, sich am System &#8222;irgendwie&#8220; zu [&#8230;]<img src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2021%2F05%2F15%2Fyubikey-for-system-auth%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dyubikey-for-system-auth&amp;action_name=Mit%20dem%20Yubikey%20anmelden&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[<p>Linux ist schon ein wunderbares System mit vielen Dingen, die sich unendlich anpassen lassen &#8211; zumindest fühlt es sich immer jedesmal aufs Neue so an, wenn ich an meinem System ein neues Feature einbaue, das mir das Leben leichter macht. Heute: Login mit dem Yubikey</p>
<p>Unter Linux ist es dank PAM sehr einfach, sich am System &#8222;irgendwie&#8220; zu authentifizieren und auch diese Methoden zu kombinieren. In meinem Fall war ich es leid, beim Befehl &#8217;su&#8216; oder &#8217;sudo&#8216; immer wieder mein Passwort eingeben zu müssen und habe mir das U2F Modul namens <a href="https://github.com/Yubico/pam-u2f.git">pam_u2f.so</a> geholt. Für Debian und Gentoo habe ich das Glück, dass das Modul als Paket verfügbar ist.</p>
<p>Die Konfiguration ist erschreckend einfach:</p>
<p>In /etc/pam.d/ finden sich diverse Services mit deren Modul-Konfigurationen &#8211; Manche davon sind Symlinks, aber das macht ja nichts. Man bekommt relativ schnell eine Idee, welche Config für welchen Dienst zuständig ist. Ich für meinen Teil habe mich für &#8217;su&#8216; entschieden, da ich das am lokalen System &#8211; wie oben beschrieben &#8211; doch sehr häufig brauche.</p>
<p>Der Inhalt der Datei ist in meinem Fall sehr einfach gestrickt</p>
<pre>auth            sufficient      pam_rootok.so 
auth            required        pam_wheel.so use_uid 
auth            include         system-auth 
account         include         system-auth 
password        include         system-auth 
session         include         system-auth 
session         required        pam_env.so 
session         optional        pam_xauth.so
</pre>
<p>Zugegeben, es ist der Standard-Inhalt der Datei unter Gentoo, den ich bislang nicht wirklich angefasst habe.  Hier finden sich die einzelnen Module mit &#8217;sufficient&#8216; bis &#8218;required&#8216;, was die Regeln der PAM Module in der letzten Spalte festlegt. Für meine Zwecke reicht es mir aus, dass ich eine Zeile in der auth-Sektion einfüge:</p>
<pre>auth            sufficient      pam_u2f.so cue</pre>
<p>Durch diese Zeile gebe ich an. dass es &#8218;ausreichend&#8216; ist, wenn ich mich mit dem Yubikey anmelde, und den zugehörigen PIN eingebe. Durch die Verwendung von &#8218;required&#8216; anstelle von &#8217;sufficient&#8216; kann man natürlich auch die Authentifizierung zusätzlich zum Passwort verlangen, um das System noch sicherer zu gestalten, wovon ich bei der ersten Einrichtung tunlichst abrate um sich nicht aus dem System zu sperren!</p>
<p>Der Parameter &#8218;cue&#8216; sagt dem PAM Modul, dass es eine Nachricht ausgeben soll, wenn der Key gedrückt werden sollte. Alle weiteren Parameter finden sich unter https://developers.yubico.com/pam-u2f/</p>
<p>Nun haben wir zwar PAM gesagt dass es den Yubikey verwenden soll, aber das Ganze ist noch nicht fertig. Das System benötigt noch eine Registrierung der einzelnen Schlüssel und die Zuordnung zu den Benutzern: Dies passiert entweder in der Datei /etc/u2f_mappings oder für jeden User in ~/.ssh/u2f_keys</p>
<p>Die Dateien sind ähnlich und wie folgt aufgebaut:</p>
<pre>&lt;username1&gt;:&lt;KeyHandle1&gt;,&lt;UserKey1&gt;,&lt;Options1&gt;:&lt;KeyHandle2&gt;,&lt;UserKey2&gt;,&lt;Options2&gt;:...
&lt;username2&gt;:&lt;KeyHandle1&gt;,&lt;UserKey1&gt;,&lt;Options1&gt;:&lt;KeyHandle2&gt;,&lt;UserKey2&gt;,&lt;Options2&gt;:...</pre>
<p>Die Key-Handles bekommen wir durch</p>
<pre>pamu2fcfg -uusername -opam://myorigin -ipam://myappid</pre>
<p>Damit bekommen wir die eindeutige ID des Schlüssels und können sie so dem Benutzer zuordnen.</p>
<p>Um das Ganze zu testen ist es nicht nötig zu rebooten oder irgendetwas neu zu laden, da PAM seine Konfigurationen bei jedem Login liest.</p>
<img loading="lazy" decoding="async" src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2021%2F05%2F15%2Fyubikey-for-system-auth%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dyubikey-for-system-auth&amp;action_name=Mit%20dem%20Yubikey%20anmelden&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
					<wfw:commentRss>https://my.stargazer.at/de/2021/05/15/yubikey-for-system-auth/?pk_campaign=feed&amp;pk_kwd=yubikey-for-system-auth/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Zentrales Login und DNS Ziele</title>
		<link>https://my.stargazer.at/de/2021/02/19/central-logging-vs-dns-targets/?pk_campaign=feed&amp;pk_kwd=central-logging-vs-dns-targets</link>
					<comments>https://my.stargazer.at/de/2021/02/19/central-logging-vs-dns-targets/?pk_campaign=feed&amp;pk_kwd=central-logging-vs-dns-targets#respond</comments>
		
		<dc:creator><![CDATA[ToeiRei]]></dc:creator>
		<pubDate>Fri, 19 Feb 2021 22:45:13 +0000</pubDate>
				<category><![CDATA[IT Related stuff]]></category>
		<category><![CDATA[graylog]]></category>
		<category><![CDATA[syslog]]></category>
		<guid isPermaLink="false">https://my.stargazer.at/?p=1824</guid>

					<description><![CDATA[Oh my &#8211; das hatte ich nicht erwartet, dass mich ein so doofes Feature erwischt. Aber ich sollte wohl von Vorne anfangen: Ich betreibe Graylog als meinen zentralen Log.Server, damit ich einfacher suchen und überhaupt in den Logs herumstochern kann. Eigentlich keine große Sache, bis ich mal ein Auge auf meinen DNS Traffic geschaut habe, welcher mit mehr [&#8230;]<img src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2021%2F02%2F19%2Fcentral-logging-vs-dns-targets%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dcentral-logging-vs-dns-targets&amp;action_name=Zentrales%20Login%20und%20DNS%20Ziele&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[<p>Oh my &#8211; das hatte ich nicht erwartet, dass mich ein so doofes Feature erwischt. Aber ich sollte wohl von Vorne anfangen:</p>
<p>Ich betreibe <a href="https://www.graylog.org/" target="_blank" rel="noopener">Graylog</a> als meinen zentralen Log.Server, damit ich einfacher suchen und überhaupt in den Logs herumstochern kann. Eigentlich keine große Sache, bis ich mal ein Auge auf meinen DNS Traffic geschaut habe, welcher mit mehr als 3000 Anfragen auf 10 Minuten doch etwas viel zu hoch war. Am Ende waren es einfach Anfragen nach der IP des Log-Servers von zwei Access Points.</p>
<p>Ich hätte mir jetzt schon etwas wie Caching oder Ähnliches erwartet &#8211; aber offensichtlich wurde das nicht implementiert. Ich hab&#8217;s kapiert: Für Log-Server die IP verwenden.</p>
<img loading="lazy" decoding="async" src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2021%2F02%2F19%2Fcentral-logging-vs-dns-targets%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dcentral-logging-vs-dns-targets&amp;action_name=Zentrales%20Login%20und%20DNS%20Ziele&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
					<wfw:commentRss>https://my.stargazer.at/de/2021/02/19/central-logging-vs-dns-targets/?pk_campaign=feed&amp;pk_kwd=central-logging-vs-dns-targets/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kernel mit ccache bauen</title>
		<link>https://my.stargazer.at/de/2021/01/27/ccache-on-kernels/?pk_campaign=feed&amp;pk_kwd=ccache-on-kernels</link>
					<comments>https://my.stargazer.at/de/2021/01/27/ccache-on-kernels/?pk_campaign=feed&amp;pk_kwd=ccache-on-kernels#respond</comments>
		
		<dc:creator><![CDATA[ToeiRei]]></dc:creator>
		<pubDate>Wed, 27 Jan 2021 20:23:53 +0000</pubDate>
				<category><![CDATA[IT Related stuff]]></category>
		<category><![CDATA[ccache]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">https://my.stargazer.at/?p=1821</guid>

					<description><![CDATA[Nachdem ich seit ein paar Kernel-Versionen Debian Pakete aus den Quellen von Kernel.org (optional mit Gentoo-Patches) baue, muss ich das gleiche Ding mehrmals bauen &#8211; drei mal um genau zu sein: Einmal ohne Modifikationen, einmal für Virtuelle Maschinen und ein drittes mal für Gameserver mit dem Gentoo-Patchset In einem älteren Blogpost über ccache habe ich über die (un)Sinnhaftigkeit [&#8230;]<img src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2021%2F01%2F27%2Fccache-on-kernels%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dccache-on-kernels&amp;action_name=Kernel%20mit%20ccache%20bauen&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[<p>Nachdem ich seit ein paar Kernel-Versionen <a href="https://toei.stargazer.at/2020/12/15/kernel-kernel-am-system/" target="_blank" rel="noopener">Debian Pakete</a> aus den Quellen von Kernel.org (optional mit <a href="https://my.stargazer.at/2020/10/30/building-a-gentoo-linux-kernel-on-debian/">Gentoo-Patches</a>) baue, muss ich das gleiche Ding mehrmals bauen &#8211; drei mal um genau zu sein: Einmal ohne Modifikationen, einmal für Virtuelle Maschinen und ein drittes mal für Gameserver mit dem <a href="https://my.stargazer.at/2020/10/30/building-a-gentoo-linux-kernel-on-debian/">Gentoo-Patchset</a></p>
<p>In einem <a href="https://my.stargazer.at/2014/11/24/ccache-more-speed/">älteren Blogpost über ccache</a> habe ich über die (un)Sinnhaftigkeit von ccache bei einem Gentoo-System geschrieben, da ein Cache erst bei wiederholtem Bauen der selben Prozedur greift. Also genau bei diesem Anwendungsfall, wo der Kernel mehrmals gebaut wird. Die Implementation ist einfach &#8211; der make Befehl wird mit <em>CC=&#8220;ccache gcc&#8220;</em> erweitert und wir sind im Geschäft.</p>
<p>Damit dieser Post hier nicht nur leere Worte sind, hier ein paar Zahlen nach dem ersten gebauten Kernel, der wie üblich etwa eine Stunde baute:</p>
<pre>
cache hit (direct)                     0
cache hit (preprocessed)               0
cache miss                         15556
cache hit rate                      0.00 %
called for link                       29
called for preprocessing            2857
unsupported code directive             4
no input file                        682
cleanups performed                     0
files in cache                     46654
cache size                           7.2 GB
max cache size                      10.0 GB
</pre>
<p>Der erste Compile brachte keine Treffer im Cache und somit auch keine Zeitersparnis. Der zweite Durchgang hingegen zeigte ein paar Treffer. Die Ergebnisse:</p>
<pre>
cache hit (direct)                    34
cache hit (preprocessed)             774
cache miss                          7318
cache hit rate                      9.94 %
called for link                       28
called for preprocessing            1964
unsupported code directive             4
no input file                        682
cleanups performed                    17
files in cache                     53763
cache size                           8.8 GB
max cache size                      10.0 GB
</pre>
<p>Um noch mehr Geschwindigkeit herauszuholen wäre der Einsatz von distcc denkbar. Die Implementation ist genauso einfach durch die Erweiterung der CC Variable auf CC=&#8217;ccache distcc gcc&#8216; machbar, aber der Aufwand mit gleichen Compilern und besserem Netzwerk als ich hier zur Verfügung habe&#8230;</p>
<img loading="lazy" decoding="async" src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2021%2F01%2F27%2Fccache-on-kernels%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dccache-on-kernels&amp;action_name=Kernel%20mit%20ccache%20bauen&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
					<wfw:commentRss>https://my.stargazer.at/de/2021/01/27/ccache-on-kernels/?pk_campaign=feed&amp;pk_kwd=ccache-on-kernels/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mein eigenes Kernel-Repository</title>
		<link>https://my.stargazer.at/de/2020/11/24/my-own-kernel-repo/?pk_campaign=feed&amp;pk_kwd=my-own-kernel-repo</link>
					<comments>https://my.stargazer.at/de/2020/11/24/my-own-kernel-repo/?pk_campaign=feed&amp;pk_kwd=my-own-kernel-repo#respond</comments>
		
		<dc:creator><![CDATA[ToeiRei]]></dc:creator>
		<pubDate>Tue, 24 Nov 2020 11:44:12 +0000</pubDate>
				<category><![CDATA[IT Related stuff]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">https://my.stargazer.at/?p=1814</guid>

					<description><![CDATA[Debian ist eine schöne Sache. Wirklich. Ich mag Debian &#8211; aber ab und an ist mir der alte, gut gereifte Kernel etwas zu alt. Aktuell liegt es an fstrim und da ich ohnehin schon einen eigenen Gentoo-Kernel für Debian baue, habe ich beschlossen das Ganze vernünftig zu machen und mir gleich noch einen Vanilla-Kernel zu bauen. Unschön ist [&#8230;]<img src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2020%2F11%2F24%2Fmy-own-kernel-repo%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dmy-own-kernel-repo&amp;action_name=Mein%20eigenes%20Kernel-Repository&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[<p>Debian ist eine schöne Sache. Wirklich. Ich mag Debian &#8211; aber ab und an ist mir der alte, gut gereifte Kernel etwas zu alt. Aktuell liegt es an fstrim und da ich ohnehin schon einen eigenen <a href="https://my.stargazer.at/2020/10/30/building-a-gentoo-linux-kernel-on-debian/">Gentoo-Kernel für Debian</a> baue, habe ich beschlossen das Ganze vernünftig zu machen und mir gleich noch einen Vanilla-Kernel zu bauen. Unschön ist dabei nur, jede deb-Datei händisch installieren zu müssen.</p>
<p>Damit dieses einzeln Installieren ein Ende hat, hilft nur ein sogenanntes Meta-Paket &#8211; ein Debian-Paket, das nur aus Abhängigkeiten besteht. Diese bauen wir mit dem Tool &#8218;Equivs&#8216;, welches wir uns erstmal installieren müssen:</p>
<pre>apt install equivs</pre>
<p>Ist das Paket installiert, folgt das Erstellen der Paketkonfiguration:</p>
<pre>equivs-control my-kernel-package</pre>
<p>Dieser Befehl gibt uns eine Datei, die es anzupassen gilt &#8211; Augenmerk liegt dabei auf der Zeile &#8222;Depends:&#8220;, da wir dort unsere Abhängigkeiten, die gebauten Debian-Pakete, eintragen. Für den heute aktuellen Kernel sieht diese Datei wie folgt aus:</p>
<pre>### Commented entries have reasonable defaults.
### Uncomment to edit them.
# Source: &lt;source package name; defaults to package name&gt;
Section: misc
Priority: optional
# Homepage: &lt;enter URL here; no default&gt;
Standards-Version: 5.9.10

Package: vanilla-kernel
Version: 5.9.10
Maintainer: Viktoria Rei Bauer &lt;debian@example.com&gt;
# Pre-Depends: &lt;comma-separated list of packages&gt;
Depends: linux-image-5.9.10,linux-headers-5.9.10,linux-libc-dev
# Recommends: &lt;comma-separated list of packages&gt;
# Suggests: &lt;comma-separated list of packages&gt;
# Provides: &lt;comma-separated list of packages&gt;
# Replaces: &lt;comma-separated list of packages&gt;
Architecture: amd64
# Multi-Arch: &lt;one of: foreign|same|allowed&gt;
# Copyright: &lt;copyright file; defaults to GPL2&gt;
# Changelog: &lt;changelog file; defaults to a generic changelog&gt;
# Readme: &lt;README.Debian file; defaults to a generic one&gt;
# Extra-Files: &lt;comma-separated list of additional files for the doc directory&gt;
# Links: &lt;pair of space-separated paths; First is path symlink points at, second is filename of link&gt;
# Files: &lt;pair of space-separated paths; First is file to include, second is destination&gt;
# &lt;more pairs, if there's more than one file to include. Notice the starting space&gt;
Description: &lt;short description; defaults to some wise words&gt;
Meta-Package for vanilla kernel built based on debian .config</pre>
<p>Nachdem die Datei geschrieben ist, gilt es das Debian-Paket zu bauen:</p>
<pre>equivs-build my-kernel-package</pre>
<p>Das Ergebnis ist eine schicke deb-Datei, die man dann in sein Repository hinzufügen kann. Ich selbst nutze dafür den Sonatype Nexus.</p>
<p>Auf den Client-PCs muss dann nur das Repository in die sources.list aufgenommen und der PGP Key importiert werden und schon steht der Installation nichts mehr im Wege.</p>
<img loading="lazy" decoding="async" src="http://stats.stargazer.at/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fmy.stargazer.at%2Fde%2F2020%2F11%2F24%2Fmy-own-kernel-repo%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dmy-own-kernel-repo&amp;action_name=Mein%20eigenes%20Kernel-Repository&amp;urlref=https%3A%2F%2Fmy.stargazer.at%2Fde%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
					<wfw:commentRss>https://my.stargazer.at/de/2020/11/24/my-own-kernel-repo/?pk_campaign=feed&amp;pk_kwd=my-own-kernel-repo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>