<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-de">
  <title>cperrin.xyz</title>
  <subtitle>Sysadmin - Programmierer - Computerfreund</subtitle>
  <link href="https://staging.cperrin.xyz/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="https://staging.cperrin.xyz/" rel="alternate" type="text/html"/>
  <updated>2026-06-19T21:37:05+00:00</updated>
  <id>https://staging.cperrin.xyz/</id>
  <author>
    <name>Christopher Perrin</name>
    <email>me@cperrin.xyz</email>
  </author>
  <generator uri="https://gohugo.io/" version="0.160.0">Hugo</generator>
  <entry>
    <title>Was können wir gegen die Vibe-Committer tun</title>
    <link href="https://staging.cperrin.xyz/2026/06/19/was-k%C3%B6nnen-wir-gegen-die-vibe-committer-tun/" rel="alternate" type="text/html"/>
    <id>https://staging.cperrin.xyz/2026/06/19/was-k%C3%B6nnen-wir-gegen-die-vibe-committer-tun/</id>
    <published>2026-06-19T00:00:00+00:00</published>
    <updated>2026-06-19T23:07:43+02:00</updated>
    <author>
      <name>Christopher Perrin</name>
    </author>
    <summary type="html">&lt;p&gt;Ich hatte kürzlich eine Diskussion auf Mastodon, die durch einen Post der Software Freedom Conservancy über den &lt;a href=&#34;https://sfconservancy.org/llm-gen-ai/llm-backed-generative-ai-recommendations.html&#34;&gt;Umgang mit LLM-Gen-AI-Submissions&lt;/a&gt; angestoßen wurde. Es gibt viele Leute, die strikt dagegen sind, LLM-generierten Code in ihre Projekte zu lassen. Das ist definitiv ein verständlicher Standpunkt, wenn man Dinge wie Legalität, unethische Datenquellen, Ressourcenverbrauch und Machtkonzentration bedenkt.&lt;/p&gt;
&lt;p&gt;Abgesehen davon ist es völlig legitim, wenn ein Maintainer Regeln für Submissions festlegt. Eine FOSS-Lizenz bedeutet nicht einmal, dass ein Maintainer überhaupt mit irgendwem interagieren muss. Sie stellt einfach nur den Sourcecode zur Verfügung.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Ich hatte kürzlich eine Diskussion auf Mastodon, die durch einen Post der Software Freedom Conservancy über den &lt;a href=&#34;https://sfconservancy.org/llm-gen-ai/llm-backed-generative-ai-recommendations.html&#34;&gt;Umgang mit LLM-Gen-AI-Submissions&lt;/a&gt; angestoßen wurde. Es gibt viele Leute, die strikt dagegen sind, LLM-generierten Code in ihre Projekte zu lassen. Das ist definitiv ein verständlicher Standpunkt, wenn man Dinge wie Legalität, unethische Datenquellen, Ressourcenverbrauch und Machtkonzentration bedenkt.&lt;/p&gt;
&lt;p&gt;Abgesehen davon ist es völlig legitim, wenn ein Maintainer Regeln für Submissions festlegt. Eine FOSS-Lizenz bedeutet nicht einmal, dass ein Maintainer überhaupt mit irgendwem interagieren muss. Sie stellt einfach nur den Sourcecode zur Verfügung.&lt;/p&gt;
&lt;p&gt;Trotzdem hat es mich zum Nachdenken gebracht, welche Auswirkungen diese Regeln haben könnten und in welchen Fällen sie sich unterm Strich eher negativ auswirken.&lt;/p&gt;
&lt;h2 id=&#34;consent-is-king&#34;&gt;Consent is King&lt;/h2&gt;
&lt;p&gt;Die Maintainer machen die Regeln. Ihnen ist die Pflege einer Code-Version anvertraut, zu der andere vielleicht beitragen wollen. Oft ist das eine einzelne Person, die nicht nur etwas erschaffen hat, das sie teilen wollte, sondern es auch auf sich genommen hat, anderen dabei zu helfen, es zu verbessern. Dafür sollten wir für ihre Arbeit dankbar sein und ihre Wünsche respektieren.&lt;/p&gt;
&lt;p&gt;Aber so funktioniert die Welt leider nicht. Ob durch Ignoranz, Anspruchsdenken oder böse Absicht – Maintainer werden oft mit Forderungen oder Feindseligkeit konfrontiert. Ihre Grenzen werden ignoriert, und die Frustration wächst. LLM-generierter Code ist dafür ein perfekter Nährboden. Während manche ihn als den heiligen Gral sehen, halten andere ihn für den Teufel. Diese stark polarisierende Wirkung, kombiniert mit ignorierten Grenzen, führt schnell zu Konflikten.&lt;/p&gt;
&lt;h2 id=&#34;solid-snake-und-benny-hill&#34;&gt;Solid Snake und Benny Hill&lt;/h2&gt;
&lt;p&gt;Jeder Konflikt hat das Potenzial, für alle Seiten extrem stressig zu werden. Das gilt besonders, wenn unschuldige Leute ins Kreuzfeuer geraten. In meinen Jahren als Softwareentwickler habe ich eine Menge schlechten Code gesehen. In letzter Zeit hat so mancher Code meinen Vibe-Code-Sensor ausgelöst, obwohl er von einem Menschen geschrieben wurde.&lt;/p&gt;
&lt;p&gt;Auf der anderen Seite glaube ich, dass ich die Herkunft einer Code-Submission wahrscheinlich ganz gut verschleiern könnte. Ich würde das niemals tun, besonders nicht, um jemanden zu täuschen. Aber das lässt mich vermuten, dass da draußen viele Leute unterwegs sind, die das gleiche Wissen und kein Problem mit Täuschung haben.&lt;/p&gt;
&lt;p&gt;Das könnte dazu führen, dass manche Leute ihren LLM-Code wie Solid Snake in eine geheime Basis einschleusen, während andere von einem wütenden Maintainer wie in einem Benny-Hill-Sketch verjagt werden.&lt;/p&gt;
&lt;h2 id=&#34;misstrauen-führt-zu-wut-wut-führt-zu-einer-miesen-zeit-für-alle&#34;&gt;Misstrauen führt zu Wut, Wut führt zu einer miesen Zeit für alle&lt;/h2&gt;
&lt;p&gt;Ich bin natürlich nicht der Erste, der an böswillige Akteure denkt, die versuchen, sich an den Verteidigungen vorbeizuschleichen. Ich bin mir sicher, dass die leidenschaftlichsten Maintainer sich dessen ständig bewusst sind – ständig auf der Hut nach dem kleinsten Hinweis auf LLM-Beteiligung, immer wachsam.&lt;/p&gt;
&lt;p&gt;Oder sie machen sich ständig Sorgen um die Quelle einer Submission, zusätzlich zu deren Qualität – immer misstrauisch. Nach meinen Beobachtungen kann das mit Wut einhergehen. Vielleicht Wut über LLMs, über die Missachtung von Grenzen oder über die zusätzliche Arbeit, die sie reinstecken müssen.&lt;/p&gt;
&lt;p&gt;An diesem Punkt drängt sich die Frage auf, wer hier eigentlich noch irgendwas gewinnt. Schlimmer noch: Einige Leute verlieren definitiv. Die Maintainer, neue Programmierer und die FOSS-Community als Ganzes sind negativ betroffen, während Vibe-Coder und LLM-Firmen oft trotzdem bekommen, was sie wollen.&lt;/p&gt;
&lt;h2 id=&#34;pragmatische-prinzipien&#34;&gt;Pragmatische Prinzipien&lt;/h2&gt;
&lt;p&gt;Das klingt alles ziemlich übel für Leute, die Prinzipien haben. Zu seinen Prinzipien zu stehen, kann Unschuldige und sogar den Maintainer verletzen, aber seine Prinzipien aufzugeben, kann genauso wehtun. Mein persönlicher Ausweg: pragmatische Prinzipien.&lt;/p&gt;
&lt;p&gt;Damit meine ich, mir gezielt die Kämpfe auszusuchen, die ich gewinnen kann und die unterm Strich etwas Positives bewirken. Ein paar meiner Leitprinzipien sind:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Such bei einer Submission nicht krampfhaft nach Anzeichen für LLM-Code, aber ignoriere sie auch nicht&lt;/li&gt;
&lt;li&gt;Im Zweifel geh davon aus, dass es von einem Menschen stammt oder sprich deine Zweifel offen an&lt;/li&gt;
&lt;li&gt;Bewerte Submissions in erster Linie nach der Codequalität&lt;/li&gt;
&lt;li&gt;Geh davon aus, dass die Leute helfen wollen&lt;/li&gt;
&lt;li&gt;Denk daran, dass wir alle Fehler machen&lt;/li&gt;
&lt;li&gt;Konzentrier dich auf das Positive&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;nachwort&#34;&gt;Nachwort&lt;/h2&gt;
&lt;p&gt;Ich möchte klarstellen, dass ich will, dass jeder seine Grenzen so setzt, wie er es für richtig hält, und dass das von allen respektiert werden sollte. Ich wünsche mir eine Welt, in der es selbstverständlich ist, dass die Prinzipien anderer respektiert werden.&lt;/p&gt;
&lt;p&gt;Der pragmatische Ansatz ist nur mein persönlicher Weg, um damit umzugehen, wenn ich meine Prinzipien nicht auf eine gesunde oder erfolgreiche Weise verteidigen kann. Mir ist klar, dass das nicht leicht ist, wenn ein Projekt von &amp;ldquo;Slop&amp;rdquo; überrannt wird. Es ist keine perfekte Lösung und auch nicht für jeden etwas.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Veeam Backups unter Linux mit SystemD triggern</title>
    <link href="https://staging.cperrin.xyz/2026/01/28/veeam-backups-unter-linux-mit-systemd-triggern/" rel="alternate" type="text/html"/>
    <id>https://staging.cperrin.xyz/2026/01/28/veeam-backups-unter-linux-mit-systemd-triggern/</id>
    <published>2026-01-28T00:00:00+00:00</published>
    <updated>2026-01-28T22:44:24+01:00</updated>
    <author>
      <name>Christopher Perrin</name>
    </author>
    <summary type="html">&lt;p&gt;Veeam Backup ist meiner Meinung nach eine der besten Lösungen für Backups die man kostenlos bekommen kann. Besonders unter Linux muss man die mölgichkeit Snapshot-Backups von Ext4 Partitionen machen zu können hervorheben.&lt;/p&gt;
&lt;p&gt;Leider hat besonders die Linux Version einen Großen nachteil gegenüber der Windows Version: das Scheduling der Backups ist extrem eingeschränkt. Man kann nur Tag und Stunde einstellen an dem das Backup stattfinden soll. Wenn zu dem Zeitpunkt der Rechner im Sleep-Modus oder gar ausgeschaltet ist, wird das Backup nicht durchgeführt und vor allem auch nicht nachgeholt.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Veeam Backup ist meiner Meinung nach eine der besten Lösungen für Backups die man kostenlos bekommen kann. Besonders unter Linux muss man die mölgichkeit Snapshot-Backups von Ext4 Partitionen machen zu können hervorheben.&lt;/p&gt;
&lt;p&gt;Leider hat besonders die Linux Version einen Großen nachteil gegenüber der Windows Version: das Scheduling der Backups ist extrem eingeschränkt. Man kann nur Tag und Stunde einstellen an dem das Backup stattfinden soll. Wenn zu dem Zeitpunkt der Rechner im Sleep-Modus oder gar ausgeschaltet ist, wird das Backup nicht durchgeführt und vor allem auch nicht nachgeholt.&lt;/p&gt;
&lt;p&gt;Um das zu umgehen musste ich etwas in die Trickkiste greifen und SystemD Timer, SystemD Services und ein wenig Scrpting verbinden.&lt;/p&gt;
&lt;h2 id=&#34;veeam-cli&#34;&gt;Veeam CLI&lt;/h2&gt;
&lt;p&gt;Man kann Veeam Jobs auch außerhalb der Terminal UI steuern. Dafür gibt es das &lt;code&gt;veeamconfig&lt;/code&gt; Tool.&lt;/p&gt;
&lt;p&gt;Beispielweise kann man mit folgendem Befehl ein Backup starten:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;veeamconfig job run --name &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;JOBNAME&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Das Problem ist nur, dass dieser Befehl nicht blockierend ist, sondern direkt zurückkehrt. Um dann herauszufinden ob das Backup abgeschlossen ist und mit welchem Status, muss man den Befehl&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;veeamconfig job status --name &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;JOBNAME&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ausführen. Weil der Befehl auch nicht blockierend ist, ist die einzige Lösung Polling. Wir müssen immer wieder nachfragen, ob der Job noch läuft, bis er entweder abgeschlossen ist oder fehlerhaft beendet wurde.&lt;/p&gt;
&lt;p&gt;Hier ist der wichtige Teil des Polling-Skripts, der die Job-Übernahme übernimmt:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Session-ID aus der Job-Start-Ausgabe extrahieren&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SESSION_ID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OUTPUT&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -oP &lt;span class=&#34;s1&#34;&gt;&amp;#39;Session ID: \[\{\K[^}]+&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Session-Status abfragen bis zum Abschluss&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; true&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;STATUS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;/usr/bin/veeamconfig session info --id &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SESSION_ID&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;State:&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;STATE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$STATUS&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -oP &lt;span class=&#34;s1&#34;&gt;&amp;#39;State:\s+\K\w+&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$STATE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Success&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$STATE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Warning&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Job abgeschlossen mit Status: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$STATE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$STATE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Failed&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Job fehlgeschlagen!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Job läuft noch... Status: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$STATE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sleep &lt;span class=&#34;nv&#34;&gt;$POLL_INTERVAL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Das Skript enthält auch eine Signalbehandlung zum kontrollierten Stoppen von Backups bei Bedarf.&lt;/p&gt;
&lt;h2 id=&#34;systemd&#34;&gt;SystemD&lt;/h2&gt;
&lt;p&gt;Die auf der SystemD Seite war es wesentlich einfacher. SystemD Timer erlauben es mir, den Computer aus dem Sleep-Mode aufzuwecken, um das Backup zu starten. Hierzu muss man lediglich in der &lt;code&gt;[Timer]&lt;/code&gt;-Block die Option &lt;code&gt;WakeSystem=true&lt;/code&gt; setzen.&lt;/p&gt;
&lt;p&gt;Die Service-Unit war genauso wenig ein Problem mit dem Skript. Ich musste lediglich verhindern, dass der Computer wieder in den Schlafzustand wechseln kann solange das Backup läuft. Hierzu habe ich &lt;code&gt;systemd-inhibit&lt;/code&gt; genutzt.&lt;/p&gt;
&lt;h3 id=&#34;systemd-service&#34;&gt;SystemD Service&lt;/h3&gt;
&lt;p&gt;Die Service-Unit führt unser Skript aus und verhindert dabei, dass das System während der Backups in den Schlafmodus wechselt:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Unit]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Veeam Backup Job %i&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;After&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;network.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Service]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;simple&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;systemd-inhibit --what &amp;#34;sleep:idle:shutdown&amp;#34; --why &amp;#34;Veeam Backup %i&amp;#34; --who &amp;#34;Veeam Job&amp;#34; --mode &amp;#34;block-weak&amp;#34; /usr/local/bin/veeam-run-polling %i&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Restart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;no&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;systemd-timer&#34;&gt;SystemD Timer&lt;/h3&gt;
&lt;p&gt;Dieser Timer weckt das System und führt das Backup alle zwei Tage um 10:30 Uhr aus:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Unit]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Veeam Backup Timer for Job %i&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Timer]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;OnCalendar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;*-*-1/2 10:30:00&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Persistent&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;WakeSystem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;DeferReactivation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Unit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;veeam-run@%i.service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Install]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;WantedBy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;timers.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Alle Unit Files und das Skript sind auf &lt;a href=&#34;https://git.screebo.net/cperrin/veeam-systemd-timers&#34;&gt;https://git.screebo.net/cperrin/veeam-systemd-timers&lt;/a&gt; zu finden.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>2026: das Jahr in dem Windows zu sehr nervt</title>
    <link href="https://staging.cperrin.xyz/2026/01/03/2026-das-jahr-in-dem-windows-zu-sehr-nervt/" rel="alternate" type="text/html"/>
    <id>https://staging.cperrin.xyz/2026/01/03/2026-das-jahr-in-dem-windows-zu-sehr-nervt/</id>
    <published>2026-01-03T00:00:00+00:00</published>
    <updated>2026-01-28T19:37:25+01:00</updated>
    <author>
      <name>Christopher Perrin</name>
    </author>
    <summary type="html">&lt;p&gt;In den letzten Tagen habe ich mehrere Blogartikel gelesen, die davon sprechen, dass 2026 das Jahr des Linux-Desktops ist, und das ist eine tolle Sache. Ich finde aber, dass viele der Überschriften und Posts zu dem Thema eine andere Überschrift haben könnten, und zwar „Das Jahr, in dem Windows zu sehr nervt“.&lt;/p&gt;
&lt;h2 id=&#34;geschichte-der-verschlimmbesserung&#34;&gt;Geschichte der Verschlimmbesserung&lt;/h2&gt;
&lt;p&gt;Microsoft hat nun seit Jahren sein Betriebssystem stark verschlimmbessert. Windows Vista war ein schwieriger Schritt, weil viele Rechner noch nicht dafür bereit waren, aber es gab zumindest einen technischen Fortschritt, der mit Windows 7 dann relativ sauber abgeschlossen war.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;In den letzten Tagen habe ich mehrere Blogartikel gelesen, die davon sprechen, dass 2026 das Jahr des Linux-Desktops ist, und das ist eine tolle Sache. Ich finde aber, dass viele der Überschriften und Posts zu dem Thema eine andere Überschrift haben könnten, und zwar „Das Jahr, in dem Windows zu sehr nervt“.&lt;/p&gt;
&lt;h2 id=&#34;geschichte-der-verschlimmbesserung&#34;&gt;Geschichte der Verschlimmbesserung&lt;/h2&gt;
&lt;p&gt;Microsoft hat nun seit Jahren sein Betriebssystem stark verschlimmbessert. Windows Vista war ein schwieriger Schritt, weil viele Rechner noch nicht dafür bereit waren, aber es gab zumindest einen technischen Fortschritt, der mit Windows 7 dann relativ sauber abgeschlossen war.&lt;/p&gt;
&lt;p&gt;Ein Schritt, den aber nicht viele mitgehen konnten, war der Wechsel zu Windows 8. Der damalige Chef von Microsoft, Steve Ballmer, war überzeugt davon, Windows zum überall einsetzbaren Betriebssystem zu machen. Ob auf dem Tablet oder dem Handy oder dem Desktop oder auf einem ganz neuen Gerät, Windows sollte das Richtige sein. Dabei hat er ein System gemacht, was für kaum einen gut war. Auf dem Desktop war die vollbildfokussierte Oberfläche immer im Weg und hat den Workflow verändert. Tablets gab es kaum welche und die, die es gab, haben damit gekämpft, dass alle Programme, die nutzenswert waren, nicht auf Touch angepasst waren und das System auch viel zu schwer war. Auf dem Handy ist das System nie angekommen, weil einfach keiner Apps entwickelt hat, und somit war es unattraktiv. Weitere unwillkommene Neuerungen von Windows 8 waren Microsoft-Account-Login, bei dem Nutzer sich anstatt mit einem lokalen Konto mit dem Online-Konto bei Microsoft einloggen konnten.&lt;/p&gt;
&lt;p&gt;Einige der Designentscheidungen von Windows 8 wurden dann mit Windows 8.1 „entschärft“. Der Vollbild-Startmenü-Zwang wurde entfernt und das System wurde wieder nutzbarer Trotzdem begann Microsoft schon mit der nächsten tollen Idee: automatisches Synchronisieren von Dokumenten nach OneDrive. Anstatt die Nutzer zu fragen, wurde einfach davon ausgegangen, dass Nutzer es super finden, wenn ihre Daten einfach so in der Microsoft-Cloud landen. Dazu kam, dass der kostenlose Speicher für die meisten sowieso zu klein war. Aber dann kann man ja einfach dafür zahlen.&lt;/p&gt;
&lt;h2 id=&#34;das-für-immer-windows&#34;&gt;Das „für immer“ Windows&lt;/h2&gt;
&lt;p&gt;Windows 10 war dann das „für immer“-Windows. Es sollte das letzte Windows sein und kontinuierlich weiterentwickelt werden. Das Bedienkonzept war nun wieder eher klassisch, aber an vielen Ecken wurden strategisch Dinge verschlechtert. Das Startmenü suchte nun nicht mehr nur Programme, sondern auch Dokumente und sogar online. Dementsprechend war es langsam und ungenau Die Tradition von vorinstallierter Fremdsoftware wurde weitergeführt mit Apps wie Candy Crush und LinkedIn, die sich automatisch nach der frischen Installation des Systems mitinstalliert haben.&lt;/p&gt;
&lt;p&gt;Die „Verbesserungen“ kamen dann nach und nach: OneDrive wurde immer aggressiver angepriesen, Edge hat sich zum Standardbrowser gemacht, immer neue Apps kamen in die Startleiste, die niemand wollte, und vieles mehr. Jedes größere Update hat einige Verbesserungen und viele Verschlimmerungen mit sich gebracht.&lt;/p&gt;
&lt;h2 id=&#34;windows-11-und-die-ki&#34;&gt;Windows 11 und die KI&lt;/h2&gt;
&lt;p&gt;Ein starkes Kippen der Stimmung gegenüber Microsoft war mit der Ankündigung von Windows 11 zu spüren. Das Windows, was eigentlich das für immer Windows sein sollte, würde ersetzt werden. Und dieses Mal durften viele PCs den Weg nicht mitgehen. Mit Windows 11 machte Microsoft TPM 2.0 und Secure Boot Pflicht Für viel ältere Hardware wäre dies das Ende. Aus der nachdrücklichen Einladung, das Microsoft-Konto zu nutzen, in Windows 10 wurde nun eine Pflicht. Natürlich ließ sich das Ganze mit ein paar Tricks umgehen, aber Microsoft macht schnell klar: „Das ist nicht mehr dein Betriebssystem, du bist nur noch Gast hier.“&lt;/p&gt;
&lt;p&gt;Diese Mentalität wurde nur noch mehr ausgebaut und die Daumenschrauben angezogen. Wir alle waren müde, wir wollten unsere Computer doch einfach nur nutzen. Doch dann passierte das Unerwartete, was die Welt verändern sollte: ChatGPT.&lt;/p&gt;
&lt;p&gt;Die Tore waren geöffnet, die Techkonzerne bekamen Angst und scheinbar über Nacht war KI das, was alles beherrschen sollte. Ab jetzt musste alles KI haben. KI-Chat, KI-Suche, KI-KI. Wenn es keine KI hatte, war es nicht gut. Je invasiver, je aufdringlicher, je unumgehbarer, desto besser KI in Windows, KI in Paint, KI in Word, KI in Excel, KI in Notepad. Nichts war mehr Sicht Ki sollte ab nun sogar unsere Spiele für uns spielen.&lt;/p&gt;
&lt;h2 id=&#34;ein-ventil-für-den-frust&#34;&gt;Ein Ventil für den Frust&lt;/h2&gt;
&lt;p&gt;Während Microsoft daran arbeitete, unseren Desktop immer mehr nach ihren Vorstellungen zu gestalten, werkelte eine kleine Firma namens Valve an ihrer eigenen Lösung. Mit dem Steam Deck brachten sie einen PC auf den Markt, in der Form erinnernd an eine übergewichtige Nintendo-Switch-Konsole. Die Hardware selbst war sehr interessant, aber der wirklich aufregende Teil war die Software. Das Besondere war, dass auf dem Gerät Linux lief.&lt;/p&gt;
&lt;p&gt;Man muss hierbei sagen, dass Valve in der Vergangenheit schon einmal versucht hatte, eine Linux-Konsole auf den Markt zu bringen. Damals als Wohnzimmergerät konzipiert, war die Hoffnung, dass, wenn man mit gutem Beispiel vorangeht, die anderen Entwickler ihre Spiele auch für Linux herausbringen. Das passierte jedoch nicht.&lt;/p&gt;
&lt;p&gt;Aber Valve hatte daraus gelernt und hinter den Kulissen viel Geld und Zeit investiert, um Windows-Spiele auf Linux nicht nur lauffähig, sondern gut lauffähig zu machen. Das Steam Deck war der Beweis, dass es auch ohne Microsoft ging und dass das Mantra, dass man auf Linux keine Spiele spielen kann, von nun an falsch war. Natürlich war nicht alles von Anfang an perfekt. Aber der Grundstein war gelegt, die Infrastruktur war da und der Damm gebrochen.&lt;/p&gt;
&lt;h2 id=&#34;die-perfekte-welle&#34;&gt;Die perfekte Welle&lt;/h2&gt;
&lt;p&gt;Seit dem Verkaufsstart des Steam Decks hat sich einiges getan an der Spieleunterstützung und die meisten Titel laufen problemlos (manchmal sogar besser als unter Windows). Nur Anti-Cheat-Software macht noch Probleme. Valve hat noch mehr Hardware angekündigt, die auf Windows verzichtet. Dies, gepaart mit der steigenden Nervigkeit von Windows, hat viele Menschen nun davon überzeugt, Linux eine Chance zu geben. Und das ist eine tolle Nachricht für alle. Wenn Microsoft auf einmal mit einem kostenlosen Betriebssystem konkurrieren muss, das den Nutzer respektiert und ständig besser wird, kann das für keinen schlecht sein. Ich hoffe sehr auf das Jahr des Linux-Desktops. Es wird nicht immer einfach, denn nicht jeder möchte nur spielen und Linux hat noch viele Ecken und Kanten.&lt;/p&gt;
&lt;p&gt;Für mich persönlich hat das Jahr des Linux-Desktops jedoch schon 2025 begonnen und ich kann nur davon profitieren, wenn mehr Menschen den Schritt mit mir gehen.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Das Fediverse, Meta und Threads</title>
    <link href="https://staging.cperrin.xyz/2023/07/04/das-fediverse-meta-und-threads/" rel="alternate" type="text/html"/>
    <id>https://staging.cperrin.xyz/2023/07/04/das-fediverse-meta-und-threads/</id>
    <published>2023-07-04T00:00:00+00:00</published>
    <updated>2023-07-04T18:44:11+02:00</updated>
    <author>
      <name>Christopher Perrin</name>
    </author>
    <summary type="html">&lt;p&gt;Das Fediverse wächst. Beflügelt von den Problemen bei Twitter und Reddit trauen sich immer mehr Nutzer nun auch auf alternative Plattformen. Besonders &lt;a href=&#34;https://joinmastodon.org&#34;&gt;Mastodon&lt;/a&gt;, &lt;a href=&#34;https://join-lemmy.org&#34;&gt;Lemmy&lt;/a&gt; und &lt;a href=&#34;https://kbin.pub&#34;&gt;KBin&lt;/a&gt; haben in der letzten Zeit einen explosionsartigen Anstieg von Nutzern erlebt. Dies lief natürlich nicht ohne Probleme ab, aber es zeigt zumindest, dass es vielleicht doch einen Weg gibt, den großen Firmen nicht alle Daten in den Rachen zu schmeißen.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2023/07/04/das-fediverse-meta-und-threads/fediverse.png&#34; alt=&#34;Die vielen Zweige des Fediverse&#34;&gt;&lt;/p&gt;
&lt;p&gt;Mit dem &lt;a href=&#34;https://www.w3.org/TR/activitypub/&#34;&gt;ActivityPub-Protokoll&lt;/a&gt; als Kleber zwischen allen Fediverse-Projekten sollte nun auch die Silobildung endlich beendet werden. Jeder kann mit jedem sprechen: Mastodon mit Pixelfed, Pleroma mit Peertube, Lemmy mit KBin. Die Grenzen zwischen den Projekten verschwimmen, auch wenn manchmal Content von einer Software in der Oberfläche einer anderen keinen Sinn macht. Doch hier beginnt das Problem.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Das Fediverse wächst. Beflügelt von den Problemen bei Twitter und Reddit trauen sich immer mehr Nutzer nun auch auf alternative Plattformen. Besonders &lt;a href=&#34;https://joinmastodon.org&#34;&gt;Mastodon&lt;/a&gt;, &lt;a href=&#34;https://join-lemmy.org&#34;&gt;Lemmy&lt;/a&gt; und &lt;a href=&#34;https://kbin.pub&#34;&gt;KBin&lt;/a&gt; haben in der letzten Zeit einen explosionsartigen Anstieg von Nutzern erlebt. Dies lief natürlich nicht ohne Probleme ab, aber es zeigt zumindest, dass es vielleicht doch einen Weg gibt, den großen Firmen nicht alle Daten in den Rachen zu schmeißen.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2023/07/04/das-fediverse-meta-und-threads/fediverse.png&#34; alt=&#34;Die vielen Zweige des Fediverse&#34;&gt;&lt;/p&gt;
&lt;p&gt;Mit dem &lt;a href=&#34;https://www.w3.org/TR/activitypub/&#34;&gt;ActivityPub-Protokoll&lt;/a&gt; als Kleber zwischen allen Fediverse-Projekten sollte nun auch die Silobildung endlich beendet werden. Jeder kann mit jedem sprechen: Mastodon mit Pixelfed, Pleroma mit Peertube, Lemmy mit KBin. Die Grenzen zwischen den Projekten verschwimmen, auch wenn manchmal Content von einer Software in der Oberfläche einer anderen keinen Sinn macht. Doch hier beginnt das Problem.&lt;/p&gt;
&lt;h2 id=&#34;meta-threads&#34;&gt;Meta Threads&lt;/h2&gt;
&lt;p&gt;Denn auch bei den großen Konzernen stehen die Mühlen nicht still, auch wenn es manchmal so scheinen mag. So hat Meta (ehemals Facebook) sich entschieden, auch ein Teil der Fediverse-Revolution zu sein. Mit einem neuen Projekt, das nun den Namen &lt;a href=&#34;https://www.threads.net/&#34;&gt;Threads&lt;/a&gt; erhalten hat, will man sich an das Fediverse anbinden. Es soll wohl eine Art von Microblogging-Plattform wie Twitter oder Mastodon werden. Die Ankündigungen und Leaks wurden im Fediverse natürlich mit größter Vorfreude und Anerkennung aufgenommen. NICHT!&lt;/p&gt;
&lt;p&gt;Viele der Kritiker sahen sich an die von Microsoft geprägte Strategie &amp;ldquo;Embrace, Extend, Extinguish&amp;rdquo; erinnert. Dabei geht es darum, ein Projekt zuerst mit offenen Armen aufzunehmen um Nutzer anzuziehen, dann mit proprietären Erweiterungen auszustatten, die nicht mit dem Ursprünglichen kompatibel sind, und damit dann den Wettbewerber langsam aus dem Markt zu drängen, bis er ausgelöscht ist. Es ist nicht schwer zu sehen, wie Meta solch eine Strategie gegenüber dem Fediverse nutzen könnte.&lt;/p&gt;
&lt;p&gt;Aber die Kritiker gehen auch weiter. Wie wir alle spätestens nach dem Cambridge Analytica Skandal wissen, gibt es bei Meta erhebliche Probleme mit dem Datenschutz. Hinzu kommt, dass ihr primäres Geschäftsmodell darin besteht detaillierte Nutzerprofile zu erstellen und zu kapitalisieren. Und hier wird die Stärke des Fediverse zu einer möglichen Schwäche.&lt;/p&gt;
&lt;h2 id=&#34;föderation-nicht-nur-bei-star-trek&#34;&gt;Föderation nicht nur bei Star Trek&lt;/h2&gt;
&lt;p&gt;Das Problem lässt sich am einfachsten mit einem kleinen Exkurs zum Thema ActivityPub verstehen. Wie bereits am Anfang erwähnt, ist es das Protokoll was die Kommunikation zwischen den ganzen Fediverse Projekten ermöglicht. Sobald beispielweise eine Mastodon instanz wie mastodon.social ijre Nutzern erlaubt den Nutzern von anderen Instanzen zu folgen sowie umgekehrt, dann gilt dieser Server als föderiert. Dies gilt genau so für Gruppen, Communities, Magazines oder andere &amp;ldquo;Dinge&amp;rdquo; denen man folgen kann. Sobald nun ein Nutzer auf Instanz A einem Nutzer auf Instanz B folgt, werden alle öffentlichen Updates des Nutzers auf Instanz B an Instanz A geschickt und auf Instanz A gespeichert.&lt;/p&gt;
&lt;p&gt;Der aufmerksame Leser mag nun hier das Problem entdeckt haben. Wenn ein Threads-Nutzer jetzt einem Nutzer auf einer Fediverse Instanz folgt, landen unweigerlich Daten von Fediverse-Nutzern auf Meta-Servern. Dies kann eingeschränkt werden, indem eine Instanz sich von Threads deföderiert, also die Kommunikation der Instanz mit Threads unterbindet. Viele Betreiber von Instanzen haben diesen Schritt auch schon angekündigt, während andere erst noch abwarten wollen. Die Meinungen sind auf jeden Fall gespalten.&lt;/p&gt;
&lt;h2 id=&#34;alleine-meine-bits&#34;&gt;Alleine meine Bits!&lt;/h2&gt;
&lt;p&gt;Ich bin selbst nun auch nicht der allergrößte Fan von Meta und dem Rest aber ich muss sagen, dass ich die Panik als etwas fehlgerichtet ansehe. Ich bin natürlich auch nicht begeistert, dass meine Daten zu den großen Konzernen fließen, aber ich habe mich auch dazu entschieden diese Daten zu veröffentlichen. Eine Analogie dazu wäre sich auf einen Marktplatz zu stellen, um die eigene Meinung in die Welt zu schreien und sich dann zu ärgern, wenn jemand dies mitschreibt.&lt;/p&gt;
&lt;p&gt;Das Konzept hat sich auch nicht verändert zu Facebook, Twitter &amp;amp; Co. Die Daten sind dort zwar in ihren eigenen Silos aber auch dort werden Daten an Werbepartner und Analysefirmen weitergeschickt, von öffentlichen Seiten abgegrast und anderweitig verarbeitet. Im Fediverse ist es nur offensichtlicher, dass die Daten weiter geschickt werden. Und das ist keine Kritik am Fediverse. Das ist das Kernprinzip des Fediverse.&lt;/p&gt;
&lt;h2 id=&#34;social-private-media&#34;&gt;Social Private Media&lt;/h2&gt;
&lt;p&gt;Was ist nun die Lösung für das Problem. Meine Antwort: Es gibt keine. Zumindest nicht so wie viele das gerne hätten. Wir haben als Gesellschaft vergessen, dass es nicht immer gut ist sich auf den Marktplatz zu stellen und loszuschreien. Wir haben angefangen Unbekannten unsere Babyfotos zu zeigen, unseren Aufenthaltsort zu mitzuteilen, und unser innerstes preiszugeben. Alles, ohne uns wirklich klarzumachen, was die Implikationen davon sind. Teilweise waren sie uns verschleiert, teilweise haben wir sie ignoriert.&lt;/p&gt;
&lt;p&gt;Die Probleme des Fediverse sind, genauso wie die Lösung, nicht neu. Wir müssen weniger über uns Preisgeben. Wir müssen uns bewusst sein, dass ein versendeter Toot genauso wie ein Instagram Post nach dem Absenden mehr in unserer Hand ist. Sie können verarbeitet, korreliert und zu einem persönlichen Profil gemacht werden. Dazu braucht es nicht einmal Threads von Meta. Das öffentliche Teilen von Daten ist inkompatibel mit einem Verlangen nach Kontrolle.&lt;/p&gt;
&lt;p&gt;Wir können versuchen die Rechte der Nutzer durch Gesetze zu stärken und die Verarbeitung von Daten schwerer zu machen, aber letztendlich bleibt auch ohne große böse Firmen eines gleich:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Social Media ist nicht Private Media&lt;/strong&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Neu ist immer besser (?)</title>
    <link href="https://staging.cperrin.xyz/2021/09/16/neu-ist-immer-besser/" rel="alternate" type="text/html"/>
    <id>https://staging.cperrin.xyz/2021/09/16/neu-ist-immer-besser/</id>
    <published>2021-09-16T00:00:00+00:00</published>
    <updated>2022-02-03T19:01:24+01:00</updated>
    <author>
      <name>Christopher Perrin</name>
    </author>
    <summary type="html">&lt;p&gt;Ich muss etwas gestehen. Ich habe ein Problem. Ich bin mir nicht sicher, ob mein Problem einen Namen hat, also gebe ich ihm einen. Ich nenne es &amp;ldquo;Neoprogrammismus&amp;rdquo;. Was ist das? Nun am besten lässt sich das einer einem Beispiel klarmachen.&lt;/p&gt;
&lt;h2 id=&#34;beispiel-1&#34;&gt;Beispiel 1&lt;/h2&gt;
&lt;p&gt;Ich kenne mich mittlerweile aus mehreren Projekten gut mit Python und Django aus bin aber mit JavaScript nicht so vertraut. Es gibt da ein neues Projekt, um APIs direkt aus dem Datenbankschema zu generieren, das komplett auf JavaScript setzt? Nehm ich!&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Ich muss etwas gestehen. Ich habe ein Problem. Ich bin mir nicht sicher, ob mein Problem einen Namen hat, also gebe ich ihm einen. Ich nenne es &amp;ldquo;Neoprogrammismus&amp;rdquo;. Was ist das? Nun am besten lässt sich das einer einem Beispiel klarmachen.&lt;/p&gt;
&lt;h2 id=&#34;beispiel-1&#34;&gt;Beispiel 1&lt;/h2&gt;
&lt;p&gt;Ich kenne mich mittlerweile aus mehreren Projekten gut mit Python und Django aus bin aber mit JavaScript nicht so vertraut. Es gibt da ein neues Projekt, um APIs direkt aus dem Datenbankschema zu generieren, das komplett auf JavaScript setzt? Nehm ich!&lt;/p&gt;
&lt;h2 id=&#34;beispiel-2&#34;&gt;Beispiel 2&lt;/h2&gt;
&lt;p&gt;JavaScript ist mir zwar nicht so geläufig aber CSS mag ich gerne. Um mein Leben dennoch zu erleichtern und best practices besser zu folgen, entscheide ich mich für ein CSS Framework. Nun gibt es in diesem Bereich eine Menge etablierte Frameworks, aber ich habe in einem Artikel kürzlich so mit dem halben Hirn gelesen, dass es da ein neues schlankes Framework gibt. Nimm lieber das!&lt;/p&gt;
&lt;h2 id=&#34;was-ich-damit-sagen-will&#34;&gt;Was ich damit sagen will&amp;hellip;&lt;/h2&gt;
&lt;p&gt;Neoprogrammismus kann uns alles betreffen denn die wenigsten von uns ist immun vor dem neusten &amp;ldquo;bling&amp;rdquo;. Es ist oft verlockend für das neue Projekt das neuste und &amp;ldquo;tollste&amp;rdquo; zu nutzen. Das muss auch nicht unbedingt etwas Schlechtes sein. Neue projekte machen manchmal Dinge besser oder haben eine Chance länger in der Zukunft noch Support zu erhalten.&lt;/p&gt;
&lt;p&gt;Man darf aber dabei nicht vergessen, dass es möglicherweise einen Grund gibt, dass &amp;ldquo;älter Projekte&amp;rdquo; noch da sind und aktiv entwickelt werden. Es gibt möglicherweise auch gute Gründe, dass diese Projekte so funktionieren wie sie funktionieren. Dazu kommt noch, dass es mehr Zeit gab um ein Ökosystem darum zu bauen.&lt;/p&gt;
&lt;p&gt;Die wichtigste Frage die ich mir stelle um, meinen Neoprogrammismus zu besiegen ist, ob ich etwas nur benutzen will, weil es neu oder trendy ist.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Neues Design für den Blog</title>
    <link href="https://staging.cperrin.xyz/2020/02/20/neues-design-f%C3%BCr-den-blog/" rel="alternate" type="text/html"/>
    <id>https://staging.cperrin.xyz/2020/02/20/neues-design-f%C3%BCr-den-blog/</id>
    <published>2020-02-20T00:00:00+00:00</published>
    <updated>2022-02-05T10:42:24+01:00</updated>
    <author>
      <name>Christopher Perrin</name>
    </author>
    <summary type="html">&lt;p&gt;Die Zeit der heruntergeladenen und angepassten Designs ist vorbei. Mein erstes eigenes Design erblickt das Licht der Welt. Ich nenne es cperrin-hugo-theme. Poetisch, oder?&lt;/p&gt;
&lt;p&gt;Aber das ist nicht das einzige neue. Ich habe mir ein eigenes, brandheißes und ultrakreatives Logo ausgedacht, um die Massen zum kreischen zu bringen.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Die Zeit der heruntergeladenen und angepassten Designs ist vorbei. Mein erstes eigenes Design erblickt das Licht der Welt. Ich nenne es cperrin-hugo-theme. Poetisch, oder?&lt;/p&gt;
&lt;p&gt;Aber das ist nicht das einzige neue. Ich habe mir ein eigenes, brandheißes und ultrakreatives Logo ausgedacht, um die Massen zum kreischen zu bringen.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/2020/02/20/neues-design-f%C3%BCr-den-blog/logo.png&#34; alt=&#34;Neues Logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;Macht die Arbeit Sinn, wenn man bedenkt, wie viele Einträge ich seit Beginn des Blogs geschrieben habe? Ganz sicher nicht! Hat es Spaß gemacht? Joa. War es eine gute Möglichkeit nicht das zu tun, was ich tun sollte? Auf jeden Fall!!&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Ansible: DevOps leicht gemacht</title>
    <link href="https://staging.cperrin.xyz/2017/09/08/ansible-devops-leicht-gemacht/" rel="alternate" type="text/html"/>
    <id>https://staging.cperrin.xyz/2017/09/08/ansible-devops-leicht-gemacht/</id>
    <published>2017-09-08T00:00:00+00:00</published>
    <updated>2022-02-05T14:54:41+01:00</updated>
    <author>
      <name>Christopher Perrin</name>
    </author>
    <summary type="html">&lt;p&gt;Das Problem ist schon etwas älter: Eine größere Anzahl von Servern muss auf aufgesetzt oder Homogenisiert werden am besten mit wenig Aufwand. Diese Problem wurde nun schon mehrfach gelöst. Sogenannte Orchestrierungs-Tools führen anhand von vordefinierten Anweisungen bestimmte Befehle auf mehreren System aus.&lt;/p&gt;
&lt;p&gt;Beispiele für solche Tools sind &lt;a href=&#34;https://puppet.com/&#34;&gt;Puppet&lt;/a&gt;, &lt;a href=&#34;https://www.chef.io/&#34;&gt;Chef&lt;/a&gt; oder &lt;a href=&#34;https://cfengine.com/&#34;&gt;CFEngine&lt;/a&gt;. Doch vor diese Vertreter haben für mich einen großen Nachteil: Sie benötigen für die Ausführung einen Client der auf der Gegenseite installiert werden muss.&lt;/p&gt;
&lt;p&gt;Hier kommt &lt;a href=&#34;https://www.ansible.com/&#34;&gt;Ansible&lt;/a&gt; ins Bild. Ansible nutzt für die Ausführung der Skripte oder Playbooks auf den Clients lediglich eine SSH-Verbindung.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Das Problem ist schon etwas älter: Eine größere Anzahl von Servern muss auf aufgesetzt oder Homogenisiert werden am besten mit wenig Aufwand. Diese Problem wurde nun schon mehrfach gelöst. Sogenannte Orchestrierungs-Tools führen anhand von vordefinierten Anweisungen bestimmte Befehle auf mehreren System aus.&lt;/p&gt;
&lt;p&gt;Beispiele für solche Tools sind &lt;a href=&#34;https://puppet.com/&#34;&gt;Puppet&lt;/a&gt;, &lt;a href=&#34;https://www.chef.io/&#34;&gt;Chef&lt;/a&gt; oder &lt;a href=&#34;https://cfengine.com/&#34;&gt;CFEngine&lt;/a&gt;. Doch vor diese Vertreter haben für mich einen großen Nachteil: Sie benötigen für die Ausführung einen Client der auf der Gegenseite installiert werden muss.&lt;/p&gt;
&lt;p&gt;Hier kommt &lt;a href=&#34;https://www.ansible.com/&#34;&gt;Ansible&lt;/a&gt; ins Bild. Ansible nutzt für die Ausführung der Skripte oder Playbooks auf den Clients lediglich eine SSH-Verbindung.&lt;/p&gt;
&lt;p&gt;Der beste Weg um die Einfachheit von Ansible zu demonstrieren ist ein kleines Beispiel, in dem eine Liste von Paketen über apt installiert wird. Zuerst legen wir die Grundstruktur an&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ansible
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ansible
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Also nächstes müssen wir ein inventory anlegen, welches eine Liste von Servern und Gruppen ist, auf denen die Playbooks ausgeführt werden.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ansible/inventory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[group1]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;server1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;server2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;server3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In diesem Beispiel haben wir einen Gruppe namens &lt;code&gt;group1&lt;/code&gt; welche die Server 1-3 enthält.&lt;/p&gt;
&lt;p&gt;Als nächstes müssen wir ein Playbook anlegen welches die Anweisungen für Ansible beinhaltet&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# ansible/site.yml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;hosts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;all                &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Server wählen&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;become&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# also sudo ausführen&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tasks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                     &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Liste von Tasks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Install packages&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Name für den Task&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# APT-Modul nutzen&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ items }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Name des Pakets.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;state&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;present      &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Status des Pakets&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with_items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Loop mit einer Liste. Füllt {{ items }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;program1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;program2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;program3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dieses Playbook installiert die Programme &lt;code&gt;propgram1-3&lt;/code&gt; über apt.&lt;/p&gt;
&lt;p&gt;Um dies Playbook müssen wir nur noch ausführen mit&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ansible-playbook site.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Falls man keine SSH-Key Authentifizierung ingerichtet hat muss man noch die Option &lt;code&gt;-k&lt;/code&gt; anhängen. Um sich mit einem anderen Nutzer als dem momentan angemeldeten Nutzer zu authentifizieren muss die Option &lt;code&gt;-u &amp;lt;username&amp;gt;&lt;/code&gt; genutzt werden.&lt;/p&gt;
&lt;p&gt;Das war auch schon alles. Ansible sollte sich nun per SSH mit allen Servern verbinden und die gelisteten Pakete installieren. Falls die Pakete schon installiert sind wird Ansible diese einfach überspringen.&lt;/p&gt;
&lt;p&gt;Ansible hat mittlerweile eine &lt;a href=&#34;https://docs.ansible.com/ansible/latest/collections/index.html&#34;&gt;riesige Anzahl von Modulen&lt;/a&gt; zur Auswahl die es einem ermöglichen Ansible in unterschiedlichsten Anwendungsfällen zu nutzen.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Seafile: OwnCloud, nur besser</title>
    <link href="https://staging.cperrin.xyz/2017/01/02/seafile-owncloud-nur-besser/" rel="alternate" type="text/html"/>
    <id>https://staging.cperrin.xyz/2017/01/02/seafile-owncloud-nur-besser/</id>
    <published>2017-01-02T00:00:00+00:00</published>
    <updated>2019-02-04T13:29:08+01:00</updated>
    <author>
      <name>Christopher Perrin</name>
    </author>
    <summary type="html">&lt;p&gt;Wer meine &lt;a href=&#34;https://staging.cperrin.xyz/2012/08/13/owncloud-dropbox-zum-selber-hosten/&#34;&gt;Beitrag zu Owncloud&lt;/a&gt; gelesen hat, wird wissen, dass ich danach strebe meine Daten, nach möglichkeit nicht bei Dropbox&amp;amp;Co abzulegen. In der vergangenheit war OwnCloud da die beste und einfachste Lösung, aber seit einiger Zeit nun gibt es eine alternative die sich sehen lassen kann: &lt;a href=&#34;https://seafile.com&#34;&gt;Seafile&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Seafile bietet kostenlose Sync Clients für jede gängige Plattform an (Windows, Linux, macOS, Android, iOS).&lt;/p&gt;
&lt;p&gt;Im Hintergrund arbeitet die, in Python geschriebene, Anwendung in zwei Teilen. Die &lt;code&gt;seafile&lt;/code&gt; Anwendung, steuert das Speichern und Synchronisieren der der Daten. Hierbei wird ein Dateisystem auf der Basis von git genutzt, was bedeutet, dass Standardmäßig alle Dateien versioniert sind. Der andere teil ist der &lt;code&gt;seahub&lt;/code&gt;, der die Weboberfläche zu Seafile bietet.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Wer meine &lt;a href=&#34;https://staging.cperrin.xyz/2012/08/13/owncloud-dropbox-zum-selber-hosten/&#34;&gt;Beitrag zu Owncloud&lt;/a&gt; gelesen hat, wird wissen, dass ich danach strebe meine Daten, nach möglichkeit nicht bei Dropbox&amp;amp;Co abzulegen. In der vergangenheit war OwnCloud da die beste und einfachste Lösung, aber seit einiger Zeit nun gibt es eine alternative die sich sehen lassen kann: &lt;a href=&#34;https://seafile.com&#34;&gt;Seafile&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Seafile bietet kostenlose Sync Clients für jede gängige Plattform an (Windows, Linux, macOS, Android, iOS).&lt;/p&gt;
&lt;p&gt;Im Hintergrund arbeitet die, in Python geschriebene, Anwendung in zwei Teilen. Die &lt;code&gt;seafile&lt;/code&gt; Anwendung, steuert das Speichern und Synchronisieren der der Daten. Hierbei wird ein Dateisystem auf der Basis von git genutzt, was bedeutet, dass Standardmäßig alle Dateien versioniert sind. Der andere teil ist der &lt;code&gt;seahub&lt;/code&gt;, der die Weboberfläche zu Seafile bietet.&lt;/p&gt;
&lt;p&gt;Aus meiner Sicht hat Seafile den großen vorteil, dass es nicht in PHP geschrieben ist. Man muss PHP sehr quälen um ihm eine funktionalität wie OwnCloud zu entlocken. Das macht sich in der Performanz bemerkbar. Ebenso ist die Trennung von der Weboberfläche und des Sync-Servers vorteilhaft. Sync-Clients sprechen direkt mit dem Sync-Server und die Webseiteite ist nur ein weiterer Sync-Client.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Umzug auf Hugo und neue Domain</title>
    <link href="https://staging.cperrin.xyz/2016/05/19/umzug-auf-hugo-und-neue-domain/" rel="alternate" type="text/html"/>
    <id>https://staging.cperrin.xyz/2016/05/19/umzug-auf-hugo-und-neue-domain/</id>
    <published>2016-05-19T00:00:00+00:00</published>
    <updated>2022-02-03T18:43:53+01:00</updated>
    <author>
      <name>Christopher Perrin</name>
    </author>
    <summary type="html">&lt;p&gt;Ich habe jetzt lange einen Wordpress Blog gehütet und selten etwas gepostet. Dabei ist immer wieder aufgefallen, wie langsam Wordpress doch ist. Außerdem benötige ich PHP und eine Datenbank um alles am laufen zu halten. Dies, gekoppelt mit der Tatsache, dass es immer wieder Sicherheitslücken in Wordpress gab, hat mich dazu gebracht eine Alternative zu suchen.&lt;/p&gt;
&lt;p&gt;Da ich nicht viel Dynamik in meiner Webseite brauche, habe ich mich nach einem Generator für statische Seiten umgesehen und bin dabei auf &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt; gestoßen.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Ich habe jetzt lange einen Wordpress Blog gehütet und selten etwas gepostet. Dabei ist immer wieder aufgefallen, wie langsam Wordpress doch ist. Außerdem benötige ich PHP und eine Datenbank um alles am laufen zu halten. Dies, gekoppelt mit der Tatsache, dass es immer wieder Sicherheitslücken in Wordpress gab, hat mich dazu gebracht eine Alternative zu suchen.&lt;/p&gt;
&lt;p&gt;Da ich nicht viel Dynamik in meiner Webseite brauche, habe ich mich nach einem Generator für statische Seiten umgesehen und bin dabei auf &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt; gestoßen.&lt;/p&gt;
&lt;p&gt;Hugo ist eine in Go geschrieben Anwendung, die aus Markdown-Dateien und Templates statische HTML-Dateien generiert. Diese liefere ich nur noch mit einem Nginx aus und habe einen schönen Blog ohne PHP und MySQL. Dank Disqus muss ich nicht einmal auf eine Kommentar-Funktion verzichten.&lt;/p&gt;
&lt;p&gt;Um mir mein Leben noch etwas leichter zu machen Benutze ich &lt;a href=&#34;https://gogs.io&#34;&gt;Gogs&lt;/a&gt; und &lt;a href=&#34;https://drone.io/&#34;&gt;Drone.io&lt;/a&gt; um meinen Blog automatisch bauen und auf den Server kopieren zu lassen. Dazu benutze ich folgende &lt;code&gt;.drone.yml&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;build:
  production:
    image: publysher/hugo
    commands:
      - hugo --destination=&amp;lt;production_source&amp;gt;
    when:
      branch: master
  staging:
    image: publysher/hugo
    commands:
      - hugo --destination=&amp;lt;staging_source&amp;gt; --buildDrafts=true --buildFuture=true --baseUrl=&amp;lt;staging_url&amp;gt;

publish:
  rsync:
    host: &amp;lt;server&amp;gt;
    user: &amp;lt;user&amp;gt;
    source: &amp;lt;staging_source&amp;gt;
    target: &amp;lt;staging_target&amp;gt;
    recursive: true
  rsync:
    host: &amp;lt;server&amp;gt;
    user: &amp;lt;user&amp;gt;
    source: &amp;lt;production_source&amp;gt;
    target: &amp;lt;production_target&amp;gt;
    recursive: true
    when:
      branch: master
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Das sorgt dafür, dass jeder push in mein Gogs repo, eine build auslöst und eine Produnktions- und ein Staging-Version auf den Server lädt. Ist ja fast schon Magie.&lt;/p&gt;
&lt;p&gt;Um das ganz noch abzurunden, habe ich mir eine neue und persönlichere Domain besorgt. Mein Blog wird zukünftig unter &lt;a href=&#34;https://cperrin.xyz&#34;&gt;https://cperrin.xyz&lt;/a&gt; zu finden zu sein&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>PAMMySQLTools: libnss-mysql und pam-mysql user über die shell verwalten</title>
    <link href="https://staging.cperrin.xyz/2016/05/13/pammysqltools-libnss-mysql-und-pam-mysql-user-%C3%BCber-die-shell-verwalten/" rel="alternate" type="text/html"/>
    <id>https://staging.cperrin.xyz/2016/05/13/pammysqltools-libnss-mysql-und-pam-mysql-user-%C3%BCber-die-shell-verwalten/</id>
    <published>2016-05-13T00:00:00+00:00</published>
    <updated>2019-02-04T13:29:08+01:00</updated>
    <author>
      <name>Christopher Perrin</name>
    </author>
    <summary type="html">&lt;p&gt;Durch meine Arbeit stand ich vor dem Problem, dass wir Nutzer Zentral über MySQL authentifizieren wollten. Dies ist an sich kein Problem dank &lt;em&gt;libnss-mysql&lt;/em&gt; und &lt;em&gt;pam-mysql&lt;/em&gt;, doch leider mangelt es an Programmen um die Nutzer sinnvoll zu verwalten.&lt;/p&gt;
&lt;p&gt;Deshalb habe ich nun Tools dafür geschrieben die die Linuxprogramme &lt;code&gt;user{add,mod,del}&lt;/code&gt; und &lt;code&gt;group{add,mod,del}&lt;/code&gt; imitieren und diese als &lt;a href=&#34;https://github.com/cperrin88/PAMMySQLTools&#34;&gt;PAMMySQLTools&lt;/a&gt; auf &lt;a href=&#34;https://pypi.python.org/pypi/PAMMySQLTools&#34;&gt;PyPI&lt;/a&gt; veröffentlicht.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Durch meine Arbeit stand ich vor dem Problem, dass wir Nutzer Zentral über MySQL authentifizieren wollten. Dies ist an sich kein Problem dank &lt;em&gt;libnss-mysql&lt;/em&gt; und &lt;em&gt;pam-mysql&lt;/em&gt;, doch leider mangelt es an Programmen um die Nutzer sinnvoll zu verwalten.&lt;/p&gt;
&lt;p&gt;Deshalb habe ich nun Tools dafür geschrieben die die Linuxprogramme &lt;code&gt;user{add,mod,del}&lt;/code&gt; und &lt;code&gt;group{add,mod,del}&lt;/code&gt; imitieren und diese als &lt;a href=&#34;https://github.com/cperrin88/PAMMySQLTools&#34;&gt;PAMMySQLTools&lt;/a&gt; auf &lt;a href=&#34;https://pypi.python.org/pypi/PAMMySQLTools&#34;&gt;PyPI&lt;/a&gt; veröffentlicht.&lt;/p&gt;
&lt;h1 id=&#34;installation&#34;&gt;Installation&lt;/h1&gt;
&lt;p&gt;Dank &lt;code&gt;pip&lt;/code&gt; muss man nur den Befehl&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pip install pammysqltools
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;bzw&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pip3 install pammysqltools
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ausführen um die Tools zu installieren. Dadurch, werden folgende Programme installiert:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;myuseradd&lt;/li&gt;
&lt;li&gt;myusermod&lt;/li&gt;
&lt;li&gt;myuserdel&lt;/li&gt;
&lt;li&gt;mygroupadd&lt;/li&gt;
&lt;li&gt;mygroupmod&lt;/li&gt;
&lt;li&gt;mygroupdel&lt;/li&gt;
&lt;li&gt;myimportusers&lt;/li&gt;
&lt;li&gt;myimportgroups&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Die &lt;code&gt;myuser*&lt;/code&gt; und &lt;code&gt;mygroup*&lt;/code&gt; Tools sind größtenteils nach dem Vorbild der Linuxprogramme aufgebaut und verhalten sich größtenteils gleich.&lt;/p&gt;
&lt;p&gt;Die Tools &lt;code&gt;myimportusers&lt;/code&gt; und &lt;code&gt;myimportgroups&lt;/code&gt; importieren die Benutzer aus der &lt;code&gt;/etc/passwd&lt;/code&gt; und &lt;code&gt;/etc/groups&lt;/code&gt; bzw. &lt;code&gt;/etc/shadow&lt;/code&gt; und &lt;code&gt;/etc/gshadow&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Für eine Übersicht die Argumente kann einfach &lt;code&gt;--help&lt;/code&gt; angehangen werden.&lt;/p&gt;
&lt;p&gt;Beispiel: myuseradd&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ myuseradd --help
Usage: myuseradd [OPTIONS] LOGIN

Options:
  -b, --basedir BASE_DIR          base directory for the home directory of the
                                  new account
  -c, --comment COMMENT           GECOS field of the new account
  -d, --home-dir HOME_DIR         home directory of the new account
  -e, --expiredate EXPIRE_DATE    expiration date of the new account
  -f, --inactive INACTIVE         password inactivity period of the new
                                  account
  -g, --gid GROUP                 name or ID of the primary group of the new
                                  account
  -G, --groups GROUPS             list of supplementary groups of the new
                                  account
  -k, --skel SKEL_DIR             use this alternative skeleton directory
  -K, --key KEY=VALUE             override /etc/login.defs defaults
  -M, --no-create-home / -m, --create-home
                                  do not create the user&amp;#39;s home directory
  -U, --no-user-group / -N, --user-group
                                  do not create a group with the same name as
                                  the user
  -o, --non-unique                allow to create users with duplicate (non-
                                  unique) UID
  -p, --password PASSWORD         encrypted password of the new account
  -r, --system                    create a system account
  -s, --shell SHELL               login shell of the new account
  -u, --uid UID                   user ID of the new account
  --config CONF_PATH              path to the config file for this tool
  --help                          Show this message and exit.
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;konfiguration&#34;&gt;Konfiguration&lt;/h1&gt;
&lt;p&gt;Um die Verbindung zur Datenbank und die Benennung der Tabellen und Spalten anzupassen muss die Datein &lt;code&gt;/etc/pam_mysql_manager.conf&lt;/code&gt; nach &lt;a href=&#34;https://github.com/cperrin88/PAMMySQLTools/blob/master/conf/pam_mysql_manager.conf&#34;&gt;diesem Schema&lt;/a&gt; angelegt werden. Alternativ kann der Pfad zur Konfigurationsdateien auch mit dem argument &lt;code&gt;--config&lt;/code&gt; übergeben werden. Für alle Optionen die hierbei nicht angegeben werden, sind die Werte in der Beispieldatei der Defaultwert.&lt;/p&gt;
&lt;p&gt;Sobald alles eingestellt wurde kann es los gehen.&lt;/p&gt;
&lt;h1 id=&#34;beispiele&#34;&gt;Beispiele&lt;/h1&gt;
&lt;p&gt;Benutzer anlegen:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ myuseradd testuser
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Shell ändern:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ myusermod -s /bin/zsh testuser
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Gruppen ohne passwörter importieren:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ mygroupimport -i
&lt;/code&gt;&lt;/pre&gt;</content>
  </entry>
  <entry>
    <title>CARP &amp; HAProxy: High-Availability für Anfänger</title>
    <link href="https://staging.cperrin.xyz/2012/12/21/carp-haproxy-high-availability-f%C3%BCr-anf%C3%A4nger/" rel="alternate" type="text/html"/>
    <id>https://staging.cperrin.xyz/2012/12/21/carp-haproxy-high-availability-f%C3%BCr-anf%C3%A4nger/</id>
    <published>2012-12-21T00:00:00+00:00</published>
    <updated>2020-02-20T15:48:59+01:00</updated>
    <author>
      <name>Christopher Perrin</name>
    </author>
    <summary type="html">&lt;p&gt;Das Themengebiet der High-Availability im Webbereich ist oft kompliziert, groß, und schwer zu fassen. Das muss es aber nicht sein, dank CARP und HAProxy. Die Verbindung dieser beiden Techniken ermöglicht es anfragen auf mehrere Server zu verteilen und dabei das Single-Point-of-Failure Problem zu umgehen. Dafür brauchen wir nur mindestens 2 Rechner mit FreeBSD (oder einem anderen BSD System mit CARP unterstütung), die im gleichen Subnetz stehen und etwas Zeit zur Einrichtung folgender Software:&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Das Themengebiet der High-Availability im Webbereich ist oft kompliziert, groß, und schwer zu fassen. Das muss es aber nicht sein, dank CARP und HAProxy. Die Verbindung dieser beiden Techniken ermöglicht es anfragen auf mehrere Server zu verteilen und dabei das Single-Point-of-Failure Problem zu umgehen. Dafür brauchen wir nur mindestens 2 Rechner mit FreeBSD (oder einem anderen BSD System mit CARP unterstütung), die im gleichen Subnetz stehen und etwas Zeit zur Einrichtung folgender Software:&lt;/p&gt;
&lt;h1 id=&#34;haproxy&#34;&gt;HAProxy&lt;/h1&gt;
&lt;p&gt;HAProxy ist ein Reverse TCP Proxy mit Load-Balancing Funktionalität. Er verteilt die Last auf mehrere (Backend-)Server und erkennt wenn einer von ihnen nicht mehr erreichbar ist. HAProxy kann sowohl für das Balancing von MySQL-Anfragen als auch für HTTP-Requests genutzt werden. Ich konzentriere mich hier ausschließlich auf das letztere.&lt;/p&gt;
&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;
&lt;p&gt;Die Installation erfolgt am einfachsten über den Ports-Tree&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cd /usr/ports/net/haproxy
make install clean
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dies kompiliert und installiert HAProxy auf dem System.&lt;/p&gt;
&lt;h2 id=&#34;konfiguration&#34;&gt;Konfiguration&lt;/h2&gt;
&lt;p&gt;Die Konfigurationsdatei für HAProxy liegt unter &lt;code&gt;/usr/local/etc/haproxy.conf&lt;/code&gt;. Ein Ansatzpunkt für eine funktionierende Konfiguration könnte folgendes sein&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-conf&#34; data-lang=&#34;conf&#34;&gt;global
        daemon
        maxconn 256

defaults
        mode http
        timeout connect 5000ms
        timeout client 5000ms
        timeout server 5000ms
        stats enable

frontend http-in
        option httplog
        log global
        default_backend servers

backend servers
        server server1 server1.example.com:8080 check
        server server2 server2.example.com:8080 check
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;carp&#34;&gt;CARP&lt;/h1&gt;
&lt;p&gt;CARP steht für &amp;ldquo;Common Address Redundancy Protocol&amp;rdquo;. Es ermöglicht, dass wenn ein eine IP-Adresse nicht mehr erreichbar ist, automatisch von einem anderen Host übernommen werden kann. Voraussetzung hierfür ist, dass alle Computer im gleichen Netzwerksegment stehen, da CARP via Broadcast arbeitet.&lt;/p&gt;
&lt;h2 id=&#34;installation-1&#34;&gt;Installation&lt;/h2&gt;
&lt;p&gt;Ab FreeBSD 9.0 ist CARP standardmäßig aktiviert. Bei älteren Versionen muss entweder der Support in den Kernel einkompiliert werden oder das Kernelmodul aktiviert werden mit dem Eintrag.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-conf&#34; data-lang=&#34;conf&#34;&gt;if_carp_load=&amp;#34;YES&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;in der Datei &lt;code&gt;/boot/loader.conf&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;konfigurationsdateien&#34;&gt;Konfigurationsdateien&lt;/h2&gt;
&lt;p&gt;Die Konfiguration von CARP ist relativ simpel. Als erstes wird ein Master-Server Konfiguriert. Dieser hält standardmäßig die IP.&lt;/p&gt;
&lt;p&gt;Dafür müssen wir ein CARP Interface erstellen un konfigurierten. Im Laufenden Betrieb nutzen wir dafür&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ifconfig carp0 create
ifconfig vhid 1 pass &amp;lt;passwort&amp;gt; 10.10.0.1/16
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Das Passwort und die vhid-Nummer müssen auf allen Backup-Systemen gleich sein. Damit diese Konfiguration auch bei einem Neustart noch funktioniert, ergänzen wir die &lt;code&gt;/etc/rc.conf&lt;/code&gt; um folgende Zeilen&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-conf&#34; data-lang=&#34;conf&#34;&gt;cloned_interfaces=&amp;#34;carp0&amp;#34;
ifconfig_carp0=&amp;#34;vhid 1 pass &amp;lt;passwort&amp;gt; 10.10.0.1/16&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Auf den Backup-Systemen wird das CARP-Interface auf ähnlich weise erstellt nur, dass das Argument &amp;ldquo;adskew&amp;rdquo; eingefügt wird:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-conf&#34; data-lang=&#34;conf&#34;&gt;cloned_interfaces=&amp;#34;carp0&amp;#34;
ifconfig_carp0=&amp;#34;vhid 1 advskew 100 pass &amp;lt;passwort&amp;gt; 10.10.0.1/16&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Je höher der Wert hinter &amp;ldquo;advskew&amp;rdquo; desto niedriger die Priorität falls das Haupt-System ausfällt.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Owncloud: Dropbox zum selber hosten</title>
    <link href="https://staging.cperrin.xyz/2012/08/13/owncloud-dropbox-zum-selber-hosten/" rel="alternate" type="text/html"/>
    <id>https://staging.cperrin.xyz/2012/08/13/owncloud-dropbox-zum-selber-hosten/</id>
    <published>2012-08-13T00:00:00+00:00</published>
    <updated>2020-02-20T15:48:59+01:00</updated>
    <author>
      <name>Christopher Perrin</name>
    </author>
    <summary type="html">&lt;p&gt;Dropbox ist einer der praktischsten Werkzeuge die mir bei meiner Täglichen Arbeit helfen. Ob nun Daten einfach nur synchronisieren oder sogar mit anderen Teilen. Mit ein paar Clicks ist das möglich.&lt;/p&gt;
&lt;p&gt;Leider hat das ganze einen gravierenden Nachteil: Meine Daten liegen nicht mehr bei mir! Zwar werden die Daten in Dropbox laut eigener Aussage verschlüsselt, trotzdem kann man sich NIE sicher sein was mit eigenen Daten geschehen mag.&lt;/p&gt;
&lt;p&gt;Für dieses Dilemma gibt es nun eine Lösung: &lt;a href=&#34;http://owncloud.org/&#34;&gt;Owncloud&lt;/a&gt;&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Dropbox ist einer der praktischsten Werkzeuge die mir bei meiner Täglichen Arbeit helfen. Ob nun Daten einfach nur synchronisieren oder sogar mit anderen Teilen. Mit ein paar Clicks ist das möglich.&lt;/p&gt;
&lt;p&gt;Leider hat das ganze einen gravierenden Nachteil: Meine Daten liegen nicht mehr bei mir! Zwar werden die Daten in Dropbox laut eigener Aussage verschlüsselt, trotzdem kann man sich NIE sicher sein was mit eigenen Daten geschehen mag.&lt;/p&gt;
&lt;p&gt;Für dieses Dilemma gibt es nun eine Lösung: &lt;a href=&#34;http://owncloud.org/&#34;&gt;Owncloud&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Owncloud ist eine Open Source PHP-Anwendung um einen eigenen Dropbox ähnlichen Service anzubieten. Mit Owcloud ist es ein leichtes die volle Kontrolle über seine Daten zu behalten ohne einen großen Mehraufwand.&lt;/p&gt;
&lt;p&gt;Die Installation ist Kinder leicht und benötigt nicht einmal zwingend die Installation eines MySQL-Servers. Standardmäßig wird SQLite verwendet. Die Installation lässt sich in zwei einfache Schritte aufteilen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Webserver-Konfiguration: Dafür gibt es auf der Owncloud-Website für viele Server vorlagen&lt;/li&gt;
&lt;li&gt;Owncloud Setup: Das Setup von Owncloud besteht aus EINER Seite. Man muss lediglich einen Admin-Account anlegen und nach Wunsch einen MySQL server angeben.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Fertig!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mittlerweile gibt es auch für fast jede Plattform (Linux, Mac, Windows, Andoid, iOS) einen Sync-Client.&lt;/p&gt;
&lt;p&gt;Owncloud will jedoch mehr sein als ein einfacher Dropbox-Ersatz. Hier ein paar Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kalender&lt;/li&gt;
&lt;li&gt;Music Player für abgelegte Musik&lt;/li&gt;
&lt;li&gt;Kontakte&lt;/li&gt;
&lt;li&gt;Bildergalerie&lt;/li&gt;
&lt;li&gt;Verschlüsselung der Dateien auf dem Server&lt;/li&gt;
&lt;li&gt;Einbindung von Dropbox, GDrive, usw. in die eigene Owncloud&lt;/li&gt;
&lt;li&gt;Ampache/WebDAV/CalDAV/CardDAV-Server&lt;/li&gt;
&lt;li&gt;Plugin-Schnittstelle&lt;/li&gt;
&lt;li&gt;LDAP-Auth&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Owncloud ist auf jeden Fall einen Blick wert und ist mittlerweile eine wirklich brauchbare Alternative zu Dropbox und Co.&lt;/p&gt;</content>
  </entry>
</feed>
