<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Flyn Computing</title>
    <link>https://www.flyn.org/</link>
      <atom:link href="https://www.flyn.org/index.xml" rel="self" type="application/rss+xml" />
    <description>Flyn Computing</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Thu, 02 Oct 2025 10:15:55 -0400</lastBuildDate>
    <image>
      <url>https://www.flyn.org/media/icon_hu_9860572c80cba4e6.png</url>
      <title>Flyn Computing</title>
      <link>https://www.flyn.org/</link>
    </image>
    
    <item>
      <title>gowasmdemo</title>
      <link>https://www.flyn.org/projects/gowasmdemo/</link>
      <pubDate>Thu, 02 Oct 2025 10:15:55 -0400</pubDate>
      <guid>https://www.flyn.org/projects/gowasmdemo/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;This project provides a starting point for web applications written
entirely in Go. The client-side portion of the example compiles to
WebAssembly.&lt;/p&gt;
&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The gowasmdemo project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/gowasmdemo&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>reflectcrud</title>
      <link>https://www.flyn.org/projects/reflectcrud/</link>
      <pubDate>Sun, 09 Mar 2025 10:07:45 -0400</pubDate>
      <guid>https://www.flyn.org/projects/reflectcrud/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Reflectcrud allows for a Go program to interact with an SQL database
using reflection. For example, you can create a table in a database
by providing only a Go structure that contains a few field tags.&lt;/p&gt;
&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The reflectcrud project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/reflectcrud&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>Terminal colors</title>
      <link>https://www.flyn.org/notes/colors/</link>
      <pubDate>Wed, 14 Aug 2024 10:33:41 -0400</pubDate>
      <guid>https://www.flyn.org/notes/colors/</guid>
      <description>&lt;p&gt;Setting your terminal&amp;rsquo;s colors is a matter of use and personal preference,
but it is generally important that the colors contrast sufficiently to leave text
legible. Use of a projector, operating equipment in dark or sunny conditions,
and office environments can all impact color choice.
My uses favor a dark background with vibrant foreground
colors.&lt;/p&gt;
&lt;p&gt;The basis for color terminals is commonly related to the ANSI standard
that defined eight colors. Modern terminals often support far more colors,
but building a palette based on the original eight
leaves applications displaying more-or-less as intended.
If you deviate too much, you might find a terminal application
uses green—rather than red—for a critical alert or
places light blue text on a blue background.
An example of careful color selection
is Ethan Schoonover&amp;rsquo;s &lt;a href=&#34;https://ethanschoonover.com/solarized/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Solarised&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here are the original eight colors,
along with their bold variants (i.e., modifier = 1),
which brings the total count to sixteen:&lt;/p&gt;
&lt;table class=&#34;booktabs&#34; summary=&#34;ANSI colors&#34;&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Modifier&lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;th&gt;Normal hue&lt;/th&gt;&lt;th&gt;Escape code example&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;Black&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[0;30mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;Red&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[0;31mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;Green&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[0;32mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;Brown/Orange&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[0;33mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;Blue&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[0;34mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;Purple&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[0;35mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;Cyan&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[0;36mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;Light Gray&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[0;37mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;Dark Gray&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[1;30mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;Light Red&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[1;31mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;Light Green&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[1;32mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;Yellow&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[1;33mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;Light Blue&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[1;34mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;Light Purple&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[1;35mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;Light Cyan&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[1;36mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;White&lt;/td&gt;&lt;td&gt;&lt;code&gt;printf &#39;\033[1;37mCOLOR\033[0m&#39;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;My color preferences follow.
I do not use the full GNOME desktop environment, but many of my
applications, including &lt;code&gt;gnome-terminal&lt;/code&gt;, follow GNOME&amp;rsquo;s settings.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set the &lt;code&gt;TERM&lt;/code&gt; environment variable to hold the value &lt;code&gt;xterm-256color&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;gnome-control-center&lt;/code&gt;, and set &lt;code&gt;GNOME&lt;/code&gt;→&lt;code&gt;Appearance&lt;/code&gt;→&lt;code&gt;Style&lt;/code&gt; to &lt;code&gt;Dark&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;gnome-terminal&lt;/code&gt;, and select &lt;code&gt;Custom&lt;/code&gt; in &lt;code&gt;Preferences&lt;/code&gt;→&lt;code&gt;Colors&lt;/code&gt;. Next, customize the following values:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Palette entry 0:  &lt;code&gt;#000000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 1:  &lt;code&gt;#ff0000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 2:  &lt;code&gt;#00ff00&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 3:  &lt;code&gt;#ff8800&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 4:  &lt;code&gt;#00ccff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 5:  &lt;code&gt;#ff00ff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 6:  &lt;code&gt;#00ffff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 7:  &lt;code&gt;#f0f0f0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 8:  &lt;code&gt;#888888&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 9:  &lt;code&gt;#ff8888&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 10: &lt;code&gt;#88ff88&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 11: &lt;code&gt;#ffff00&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 12: &lt;code&gt;#8888ff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 13: &lt;code&gt;#ff88ff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 14: &lt;code&gt;#88ffff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Palette entry 15: &lt;code&gt;#ffffff&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Edit &lt;code&gt;.vimrc&lt;/code&gt; and add &lt;code&gt;colorscheme=koehler&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Edit &lt;code&gt;.muttrc&lt;/code&gt; and add the following color definitions (notice mutt expects variants of the ANSI colors):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color hdrdefault red default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color quoted yellow default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color signature red default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color indicator black brightyellow
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color error brightred default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color status black white
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color tree magenta default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color tilde magenta default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color message brightcyan default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color markers brightcyan default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color attachment brightmagenta default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color search default green
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color header blue default ^(From|Subject|To):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color body magenta default &amp;#34;(ftp|http)://[^ ]+&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color body magenta default [-a-z_0-9.]+@[-a-z_0-9.]+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color underline brightgreen default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color index black brightred &amp;#39;~h &amp;#34;X-Spam-Flag: YES&amp;#34;&amp;#39;    # Spamassassin.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color index black brightyellow &amp;#39;~h &amp;#34;X-Bogosity: Spam&amp;#34;&amp;#39; # Bogofilter.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Testing terminal colors involves running various commands and observing
the appearance of their output. You should test under the conditions
you expect, such as with a projector, in sunlight,
or in a dark office. Here are some illustrative commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mutt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dircolors --print-ls-colors&lt;/code&gt; (and the &lt;code&gt;LS_COLORS&lt;/code&gt; environment variable)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;grep&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vim&lt;/code&gt; (view various languages and HTML)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;diff --color&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git diff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git log&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>FIDO2 and its companions</title>
      <link>https://www.flyn.org/notes/fido2/</link>
      <pubDate>Tue, 21 Nov 2023 13:42:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/fido2/</guid>
      <description>&lt;h2 id=&#34;commands-that-interact-with-a-yubikey&#34;&gt;Commands that interact with a YubiKey&lt;/h2&gt;
&lt;dl&gt;
&lt;dt&gt;Display basic information about an attached YubiKey:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;ykman info&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Disable YubiKey features:&lt;/dt&gt;
&lt;dd&gt;&lt;code&gt;ykman config usb --disable F&lt;/code&gt;, where &lt;code&gt;F&lt;/code&gt; is &lt;code&gt;OTP&lt;/code&gt;, &lt;code&gt;OATH&lt;/code&gt;, &lt;code&gt;PIV&lt;/code&gt;, &lt;code&gt;OPENPGP&lt;/code&gt;, or &lt;code&gt;HSMAUTH&lt;/code&gt;
&lt;dt&gt;Change a YubiKey&#39;s PIN:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;ykman fido access change-pin&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Reset a YubiKey&#39;s PIN and other persistent storage:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;ykman fido reset&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;List the credentials present on a YubiKey:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;ykman fido credentials list&lt;/pre&gt;&lt;/dd&gt;
&lt;/dl&gt;
</description>
    </item>
    
    <item>
      <title>Courses as Code: The Aquinas Learning System</title>
      <link>https://www.flyn.org/publications/Courses-as-Code-The-Aquinas-Learning-System/</link>
      <pubDate>Mon, 01 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Courses-as-Code-The-Aquinas-Learning-System/</guid>
      <description></description>
    </item>
    
    <item>
      <title>alpine-build</title>
      <link>https://www.flyn.org/projects/alpine-build/</link>
      <pubDate>Sat, 09 Jul 2022 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/alpine-build/</guid>
      <description>&lt;p&gt;The alpine-build script builds an Alpine disk image from a JSON-encoded
definition. See definitions/example.json for one such definition.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The alpine-build project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/alpine-build&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>golatex</title>
      <link>https://www.flyn.org/projects/golatex/</link>
      <pubDate>Thu, 14 Apr 2022 09:28:26 -0400</pubDate>
      <guid>https://www.flyn.org/projects/golatex/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;GoLaTeX provides routines for the Go programming language that
are helpful when writing code that involves LaTeX.&lt;/p&gt;
&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The golatex project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/golatex&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>safe</title>
      <link>https://www.flyn.org/projects/safe/</link>
      <pubDate>Thu, 14 Apr 2022 09:28:26 -0400</pubDate>
      <guid>https://www.flyn.org/projects/safe/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Safe provides routines for the Go programming language that sanitize,
unmarshal, and marshal input.&lt;/p&gt;
&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The safe project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/safe&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>wasm</title>
      <link>https://www.flyn.org/projects/wasm/</link>
      <pubDate>Thu, 14 Apr 2022 09:28:26 -0400</pubDate>
      <guid>https://www.flyn.org/projects/wasm/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Wasm provides routines for the Go programming language that
are helpful when writing code that is compiled to WebAssembly.&lt;/p&gt;
&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The wasm project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/wasm&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>Intel 64 and IA-32 Architectures Software Developer&#39;s Manual Volume 1: Basic Architecture</title>
      <link>https://www.flyn.org/reference/intel-21-sdmv-1/</link>
      <pubDate>Wed, 01 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/intel-21-sdmv-1/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Intel 64 and IA-32 Architectures Software Developer&#39;s Manual Volume 2: Instruction Set Reference</title>
      <link>https://www.flyn.org/reference/intel-21-sdmv-2/</link>
      <pubDate>Wed, 01 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/intel-21-sdmv-2/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Intel 64 and IA-32 Architectures Software Developer&#39;s Manual Volume 3: System Programming Guide</title>
      <link>https://www.flyn.org/reference/intel-21-sdmv-3/</link>
      <pubDate>Wed, 01 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/intel-21-sdmv-3/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Intel 64 and IA-32 Architectures Software Developer&#39;s Manual Volume 4: Model-Specific Registers</title>
      <link>https://www.flyn.org/reference/intel-21-sdmv-4/</link>
      <pubDate>Wed, 01 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/intel-21-sdmv-4/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Web security playground</title>
      <link>https://www.flyn.org/notes/web-security/</link>
      <pubDate>Wed, 24 Mar 2021 12:01:36 -0500</pubDate>
      <guid>https://www.flyn.org/notes/web-security/</guid>
      <description>&lt;p&gt;View this page in various browsers to observe how they
handle different aspects of web security.
Most browsers include development tools
that will allow you to inspect
your browser&amp;rsquo;s behavior.&lt;/p&gt;
&lt;h2 id=&#34;cookie-attributes&#34;&gt;Cookie attributes&lt;/h2&gt;
&lt;p&gt;Loading this page created the following cookies:&lt;/p&gt;
&lt;script&gt;
	document.cookie = &#34;name1=val1; SameSite=Strict&#34;;
	document.cookie = &#34;name2=val2; Path=/; SameSite=Strict&#34;;
	document.cookie = &#34;name3=val3; Path=/; SameSite=Lax&#34;;
	document.cookie = &#34;name4=val4; Path=/; SameSite=None; Secure&#34;;
&lt;/script&gt;
&lt;pre&gt;
&amp;lt;script&amp;gt;
	document.cookie = &#34;name1=val1; SameSite=Strict&#34;;
	document.cookie = &#34;name2=val2; Path=/; SameSite=Strict&#34;;
	document.cookie = &#34;name3=val3; Path=/; SameSite=Lax&#34;;
	document.cookie = &#34;name4=val4; Path=/; SameSite=None; Secure&#34;;
&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Reloading this page should cause your browser to submit cookies “name1”, “name2”, “name2”, and “name4”.&lt;/p&gt;
&lt;p&gt;This &lt;a href=&#34;https://www.flyn.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;link&lt;/a&gt; should cause your browser to submit cookies “name2”, “name3”, and “name4”.
The default &lt;code&gt;Path&lt;/code&gt; attribute forbids cookie “name1” here.&lt;/p&gt;
&lt;p&gt;Selecting this &lt;a href=&#34;https://www.aquinas.dev&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;link&lt;/a&gt; and then following the “Flyn Computing” link therein back to &lt;a href=&#34;https://www.flyn.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.flyn.org&lt;/a&gt;
should cause your browser to submit cookies “name3” and “name4”.
The &lt;code&gt;SameSite=Strict&lt;/code&gt; attribute causes your browser not to submit cookie “name2” when entering this site from another.&lt;/p&gt;
&lt;p&gt;An HTML document that is provided by
another web server and that references the image at &lt;a
href=&#34;https://www.flyn.org/projects/VisorFlow/fig-architecture.png&#34;&gt;&lt;a href=&#34;https://www.flyn.org/projects/VisorFlow/fig-architecture.png&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.flyn.org/projects/VisorFlow/fig-architecture.png&lt;/a&gt;&lt;/a&gt;
should cause your browser to submit cookie “name4”.
Your browser will only submit cookies marked with &lt;code&gt;SameSite=None&lt;/code&gt; in such a cross-site scenario.
See, for example, &lt;a href=&#34;https://www.cs.uwlax.edu/~wpetullo/web-security.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.cs.uwlax.edu/~wpetullo/web-security.html&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;mixed-passive-content&#34;&gt;Mixed passive content&lt;/h2&gt;
&lt;p&gt;The following image is fetched using HTTP.
Many browsers will log to their console the presence of mixed passive content,
and they might indicate this with a broken security lock.&lt;/p&gt;
&lt;img src=&#34;http://nacl.cr.yp.to/cace-logo-25.png&#34;/&gt;
Source:&lt;pre&gt;&amp;lt;img src=&#34;http://nacl.cr.yp.to/cace-logo-25.png&#34;/&amp;gt;&lt;/pre&gt;
&lt;h2 id=&#34;mixed-active-content&#34;&gt;Mixed active content&lt;/h2&gt;
&lt;p&gt;The following “script” is fetched using HTTP.
Many browsers will refuse to load this mixed active content,
and many will log this refusal to their console.&lt;/p&gt;
&lt;!-- Not really a script ... --&gt;
&lt;script src=&#34;http://cr.yp.to/&#34;&gt;&lt;/script&gt;&lt;br/&gt;
&lt;pre&gt;&amp;lt;script src=&#34;http://cr.yp.to/&#34;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;h2 id=&#34;https-strict-transport-security&#34;&gt;HTTPS Strict Transport Security&lt;/h2&gt;
&lt;p&gt;This web server makes use of HTTPS Strict Transport Security.
You should find that it provides a &lt;code&gt;Strict-Transport-Security&lt;/code&gt;
field in its response headers.&lt;/p&gt;
&lt;h2 id=&#34;cross-origin-resource-sharing-cors&#34;&gt;Cross-Origin Resource Sharing (CORS)&lt;/h2&gt;
&lt;p&gt;
This page attempts to load WebAssembly code from &lt;a href=&#34;https://www.aquinas.dev/wasm/busycrate.wasm&#34;&gt;https://www.aquinas.dev/wasm/busycrate.wasm&lt;/a&gt;.
This should fail because (1) the domain hosting the code is different than the domain hosting this page and
(2) aquinas.dev does not set the &lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt; header. A server sets an &lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt; header to indicate that its API is meant for use from third-party sites.
Many browsers will log to their console the action they take to block these types of requests.
&lt;/p&gt;
&lt;script src=&#34;https://api.flyn.org/httpsmtp/wasm_exec.js&#34;&gt;&lt;/script&gt;
&lt;script&gt;
const go = new Go();
go.argv = [];
WebAssembly.instantiateStreaming(fetch(&#34;https://www.aquinas.dev/wasm/busycrate.wasm&#34;), go.importObject).then((result) =&gt; {
    go.run(result.instance);
});
&lt;/script&gt;
&lt;pre&gt;
&amp;lt;script&amp;gt;
const go = new Go();
go.argv = [];
WebAssembly.instantiateStreaming(fetch(&#34;https://www.aquinas.dev/wasm/busycrate.wasm&#34;), go.importObject).then((result) =&gt; {
    go.run(result.instance);
});
&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
This page also loads JavaScript code from &lt;a href=&#34;https://api.flyn.org/httpsmtp/wasm_exec.js&#34;&gt;https://api.flyn.org/httpsmtp/wasm_exec.js&lt;/a&gt;.
The browser allows this because the server at api.flyn.org sets the appropriate CORS header.
&lt;/p&gt;
&lt;pre&gt;&amp;lt;script src=&#34;https://api.flyn.org/httpsmtp/wasm_exec.js&#34;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;p&gt;
Note that the user could load the code in either of the above cases by clicking on the links.
CORS regulates only fetches from JavaScript, WebAssembly, and other dynamic code ran by the browser.
The use of a &lt;code&gt;Content-Security-Policy&lt;/code&gt; header could further define the sites from which this page could load scripts
and other resources.
&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>GnuPG signing party</title>
      <link>https://www.flyn.org/notes/signing-party/</link>
      <pubDate>Wed, 17 Mar 2021 20:16:53 -0500</pubDate>
      <guid>https://www.flyn.org/notes/signing-party/</guid>
      <description>&lt;p&gt;This document summarizes how to host a GnuPG signing party.
For a more detailed description that considers how to store
keys and how to handle large parties, see &lt;a href=&#34;https://www.cryptnet.net/fdp/crypto/keysigning_party/en/keysigning_party.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;The Keysigning Party
HOWTO&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;If you do not yet have a set of keys, generate them. Run &lt;code&gt;gpg --full-generate-key&lt;/code&gt;.  Select the default key type, select the default curve or number of bits,
indicate a lifetime of five years, and provide your full name and
email address.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Obtain your key&amp;rsquo;s identifier (MY-ID) by running &lt;code&gt;gpg --list-secret-keys&lt;/code&gt;.  The identifier is comprised of 40 hex digits.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Optionally edit the key to add additional email addresses you own.
Run &lt;code&gt;gpg --edit-key MY-ID&lt;/code&gt;, and execute &lt;code&gt;adduid&lt;/code&gt; and &lt;code&gt;save&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Export your key by running &lt;code&gt;gpg --armor --export MY-ID&lt;/code&gt;. Share this
form of your key with the other key-signing attendees.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Prepare to confirm the other attendees safely received your key: Display your key&amp;rsquo;s fingerprint with &lt;code&gt;gpg --fingerprint MY-ID&lt;/code&gt;.
The fingerprint is comprised of 40 hex digits, and they are separated by spaces to make them easier for a human to read.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Import other attendee keys with &lt;code&gt;gpg --import F&lt;/code&gt;, where &lt;code&gt;F&lt;/code&gt; is a
file containing their exported key.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Find each attendee&amp;rsquo;s key by running &lt;code&gt;gpg --list-keys&lt;/code&gt;, and note its
identifier (HIS-ID).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For each key identifier HIS-ID, run &lt;code&gt;gpg --fingerprint HIS-ID&lt;/code&gt;. Verbally confirm the fingerprint with its owner.  Once
satisfied, run &lt;code&gt;gpg --sign-key HIS-ID&lt;/code&gt;. This records that you
have met the owner of the key, and that you confirmed the
key is valid.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now you can safely encrypt messages intended for the owners of keys you imported
and verified. For example, encrypt the file &lt;code&gt;F&lt;/code&gt; for the recipient &lt;code&gt;bob@example.com&lt;/code&gt; by running the command
&lt;code&gt;gpg --encrypt --recipient=bob@example.com --compress-algo none --armor F&lt;/code&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>The Industrial Age of Hacking</title>
      <link>https://www.flyn.org/publications/The-Industrial-Age-of-Hacking/</link>
      <pubDate>Fri, 01 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/The-Industrial-Age-of-Hacking/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Towards Binary Diversified Challenges For A Hands-On Reverse Engineering Course</title>
      <link>https://www.flyn.org/reference/stricklan-21-binary-diversity/</link>
      <pubDate>Fri, 01 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/stricklan-21-binary-diversity/</guid>
      <description></description>
    </item>
    
    <item>
      <title>OpenWrt and SELinux</title>
      <link>https://www.flyn.org/reference/edge-20-open-wrt-se-linux/</link>
      <pubDate>Tue, 01 Sep 2020 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/edge-20-open-wrt-se-linux/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Industrial Age of Hacking</title>
      <link>https://www.flyn.org/publications/The-Industrial-Age-of-Hacking/</link>
      <pubDate>Sat, 01 Aug 2020 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/The-Industrial-Age-of-Hacking/</guid>
      <description></description>
    </item>
    
    <item>
      <title>OpenWrt-based XMPP server</title>
      <link>https://www.flyn.org/notes/prosody/</link>
      <pubDate>Wed, 03 Jun 2020 14:56:43 -0400</pubDate>
      <guid>https://www.flyn.org/notes/prosody/</guid>
      <description>&lt;p&gt;This document describes how to build an OpenWrt-based XMPP server.
We build on top of OpenWrt because of the distribution&amp;rsquo;s simplicity and small size.
Here we assume that the server will run within the confines of a Xen hypervisor.&lt;/p&gt;
&lt;h2 id=&#34;establish-the-vm&#34;&gt;Establish the VM&lt;/h2&gt;
&lt;p&gt;Perform the following steps on the Xen Dom0 host to establish the VM which will host the XMPP server:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Obtain the x86_64 OpenWrt image at &lt;a href=&#34;https://downloads.lede-project.org/releases/17.01.1/targets/x86/64/lede-17.01.1-x86-64-combined-ext4.img.gz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://downloads.lede-project.org/releases/17.01.1/targets/x86/64/lede-17.01.1-x86-64-combined-ext4.img.gz&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Uncompress the image and place it at &lt;code&gt;/var/lib/xen/images/prosody-lede-17.01.1-x86-64-combined-ext4.img&lt;/code&gt; on the Xen Dom0 host.&lt;/li&gt;
&lt;li&gt;Write the following at &lt;code&gt;/etc/xen/vm-prosody.cfg&lt;/code&gt; on the Xen Dom0 host (replace &lt;em&gt;XX:XX:XX:XX:XX:XX&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;prosody&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;n&#34;&gt;memory&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;1024&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;n&#34;&gt;vcpus&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;mi&#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;n&#34;&gt;builder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hvm&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;n&#34;&gt;vif&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;s2&#34;&gt;&amp;#34;model=e1000,script=vif-bridge,bridge=xenbr0,mac=XX:XX:XX:XX:XX:XX&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;disk&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;s2&#34;&gt;&amp;#34;tap2:tapdisk:aio:/var/lib/xen/images/prosody-lede-17.01.1-x86-64-combined-ext4.img,xvda,w&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;serial&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pty&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;software-installation&#34;&gt;Software installation&lt;/h2&gt;
&lt;p&gt;Perform the following steps on the VM:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set the root password: &lt;code&gt;passwd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Remove unnecessary packages:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg remove \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        dnsmasq \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        kmod-ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        kmod-pppoe \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        kmod-pppox \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        kmod-r8169 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	logd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-app-firewall \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-lib-ip \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-lib-jsonc \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-lib-nixio \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-proto-ipv6 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-proto-ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-theme-bootstrap \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-mod-admin-full \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-base \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        mtd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        odhcpd-ipv6only \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ppp-mod-pppoe \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        r8169-firmware \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        uhttpd-mod-ubus \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	uhttpd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Configure networking by writing &lt;code&gt;/etc/config/network&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config interface loopback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname lo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto static
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ipaddr 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option netmask 255.0.0.0
&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;config interface lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto dhcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Install the necessary software:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg install \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        freifunk-watchdog \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        prosody \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        zoneinfo-core \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        zoneinfo-northamerica
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Install a public SSH key at &lt;code&gt;/etc/dropbear/authorized_keys&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configuring-the-prosody-chat-server&#34;&gt;Configuring the Prosody chat server&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/prosody/certs/example.com.cert&lt;/code&gt;:
Concatenate your certificate, the immediate certificate, and the root certificate to produce &lt;code&gt;etc/prosody/certs/example.com.cert&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/prosody/certs/example.com.key&lt;/code&gt;: Place your private key in &lt;code&gt;etc/prosody/certs/example.com.key&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/prosody/prosody.cfg.lua&lt;/code&gt; (replace &lt;code&gt;example.com&lt;/code&gt;):&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;admins&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;p&#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;n&#34;&gt;modules_enabled&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;roster&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;saslauth&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;tls&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;dialback&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;disco&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;private&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;vcard&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;legacyauth&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;uptime&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;ping&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;pep&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;register&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;posix&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;allow_registration&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;pidfile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/run/prosody/prosody.pid&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;ssl&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/prosody/certs/example.com.key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;certificate&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/prosody/certs/example.com.cert&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;c2s_require_encryption&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;s2s_require_encryption&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;nb&#34;&gt;log&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;levels&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;s2&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;syslog&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;p&#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;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;levels&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;s2&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;filename&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/prosody/prosody.err&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;p&#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;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;levels&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;nb&#34;&gt;min&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;info&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;filename&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/prosody/prosody.log&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;p&#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;p&#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;n&#34;&gt;VirtualHost&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;example.com&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;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Set the ownership of Prosody&amp;rsquo;s sensitive files using &lt;code&gt;chown prosody /etc/prosody/certs/*&lt;/code&gt;, and set the permissions on these files with &lt;code&gt;chmod 600 /etc/prosody/certs/*&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For each prosody user, &lt;code&gt;prosodyctl register USERNAME example.com PASSWORD&lt;/code&gt;, replacing &lt;code&gt;USERNAME&lt;/code&gt;, &lt;code&gt;PASSWORD&lt;/code&gt;, and &lt;code&gt;example.com&lt;/code&gt;. (Use LDAP?)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configure-the-host-firewall&#34;&gt;Configure the host firewall&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;/etc/config/firewall&lt;/em&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config defaults
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option drop_invalid 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option input ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option output ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option forward ACCEPT
&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;config zone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option name lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option network lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option input DROP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option output ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option forward DROP
&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;# Allow Jabber client-to-server connections from LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 5222
&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;# Allow Jabber server-to-server connections from LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 5269
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configure-basic-system-settings&#34;&gt;Configure basic system settings&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/config/system&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config system
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option hostname	prosody.flyn.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option timezone	EST5EDT,M3.2.0,M11.1.0
&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;config timeserver ntp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     0.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     1.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     2.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     3.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enabled 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enable_server 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/freifunk-watchdog&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option process dropbear	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option initscript /etc/init.d/dropbear
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/dropbear&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config dropbear
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option PasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option RootPasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option Port         &amp;#39;22&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>ulimit</title>
      <link>https://www.flyn.org/notes/ulimit/</link>
      <pubDate>Fri, 27 Mar 2020 17:33:54 -0400</pubDate>
      <guid>https://www.flyn.org/notes/ulimit/</guid>
      <description>&lt;p&gt;UNIX provides the &lt;code&gt;getrlimit&lt;/code&gt; and &lt;code&gt;setrlimit&lt;/code&gt; system calls to limit
the resources available to processes, and most shells provide a
command—such as &lt;code&gt;ulimit&lt;/code&gt;—to provide an interface to these
settings. Running &lt;code&gt;ulimit -a&lt;/code&gt; using a modern Bourne shell will print
the current limitations:&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-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ulimit&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&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;n&#34;&gt;core&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;          &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blocks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unlimited&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;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;seg&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;           &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kbytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unlimited&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;n&#34;&gt;scheduling&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;priority&lt;/span&gt;             &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#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;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;               &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blocks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unlimited&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;n&#34;&gt;pending&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;signals&lt;/span&gt;                 &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11724&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;max&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;locked&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;       &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kbytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;l&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;64&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;max&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kbytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unlimited&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;n&#34;&gt;open&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files&lt;/span&gt;                      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1024&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;n&#34;&gt;pipe&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;512&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&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;n&#34;&gt;POSIX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;queues&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;q&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;819200&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;n&#34;&gt;real&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;priority&lt;/span&gt;              &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#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;n&#34;&gt;stack&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;              &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kbytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8192&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;n&#34;&gt;cpu&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;               &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seconds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unlimited&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;max&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;user&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;processes&lt;/span&gt;              &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11724&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;n&#34;&gt;virtual&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt;          &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kbytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unlimited&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;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;locks&lt;/span&gt;                      &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unlimited&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The output above included resource categories (e.g., &lt;code&gt;file size&lt;/code&gt;),
an optional unit (e.g., &lt;code&gt;blocks&lt;/code&gt;), the flag used to adjust the resource
limit (e.g., &lt;code&gt;-f&lt;/code&gt;), and the current limit (e.g., &lt;code&gt;unlimited&lt;/code&gt;).
Limiting the size of the file that can be created by any process run
by the current shell to 1,024 blocks is a matter of running:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ulimit -f 1024
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Similar commands can limit the other resource categories.&lt;/p&gt;
&lt;p&gt;The following program is useful for testing one&amp;rsquo;s understanding of
&lt;code&gt;ulimit&lt;/code&gt;.  Assuming you save this to a file named &lt;code&gt;ulimitest.c&lt;/code&gt;, you
can compile this program with &lt;code&gt;cc -o ulimitest ulimitest.c&lt;/code&gt;. Inspecting
the source should give you an indication of what resources the program
uses. The For example, &lt;code&gt;lots_of_files&lt;/code&gt; functions simultaneously opens
128 files; this would exceed the limit set by &lt;code&gt;ulimit -n 64&lt;/code&gt;.&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-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#include &amp;lt;sys/stat.h&amp;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;c1&#34;&gt;#include &amp;lt;sys/types.h&amp;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;c1&#34;&gt;#include &amp;lt;sys/wait.h&amp;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;c1&#34;&gt;#include &amp;lt;fcntl.h&amp;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;c1&#34;&gt;#include &amp;lt;signal.h&amp;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;c1&#34;&gt;#include &amp;lt;stdbool.h&amp;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;c1&#34;&gt;#include &amp;lt;stdio.h&amp;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;c1&#34;&gt;#include &amp;lt;stdlib.h&amp;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;c1&#34;&gt;#include &amp;lt;unistd.h&amp;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;o&#34;&gt;/*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Test&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;segment&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buf1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;void&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;n&#34;&gt;recurse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ne&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;recurse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;p&#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;n&#34;&gt;void&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;n&#34;&gt;big_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;FILE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rc&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tmpfile&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NULL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;perror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;error creating temporary file&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;rc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fwrite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;buf1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizeof&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buf1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizeof&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buf1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;perror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;error writing 1 MB to file&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;fclose&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;void&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;n&#34;&gt;lots_of_processes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;o&#34;&gt;/*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NOTE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;makes&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;128.&lt;/span&gt; &lt;span class=&#34;o&#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;n&#34;&gt;pid_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;127&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fail&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#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;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ne&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizeof&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizeof&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&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;p&#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;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fork&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;switch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;p&#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;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#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;o&#34;&gt;/*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Parent&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;n&#34;&gt;perror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;error forking&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;fail&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;goto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;done&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;o&#34;&gt;/*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Child&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_SUCCESS&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#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;o&#34;&gt;/*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Parent&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#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;p&#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;p&#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;n&#34;&gt;done&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ne&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizeof&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizeof&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&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;p&#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;n&#34;&gt;kill&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SIGKILL&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ne&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizeof&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizeof&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&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;p&#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;n&#34;&gt;rc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;waitpid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;perror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;error waiting for process&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;fprintf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stderr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;waited on wrong process&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&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;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;p&#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;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;p&#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;n&#34;&gt;void&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;n&#34;&gt;lots_of_files&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;ne&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#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;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ne&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizeof&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizeof&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&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;p&#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;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/dev/null&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;O_RDONLY&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;perror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;error opening file&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;p&#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;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ne&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizeof&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizeof&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&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;p&#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;n&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;p&#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;ne&#34;&gt;int&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;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;o&#34;&gt;/*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Test&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stack&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;recurse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#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;o&#34;&gt;/*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Test&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;maximum&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;big_file&lt;/span&gt;&lt;span class=&#34;p&#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;o&#34;&gt;/*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Test&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;maximum&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;memory&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buf2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#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;o&#34;&gt;/*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Test&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;open&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;lots_of_files&lt;/span&gt;&lt;span class=&#34;p&#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;o&#34;&gt;/*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Test&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;open&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;lots_of_processes&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;finished&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&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;
&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;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_SUCCESS&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;-u&lt;/code&gt; limit refers to threads rather than strictly processes, and
the limit applies to every program the user has running. &lt;code&gt;Ulimitest&lt;/code&gt;
will try to simultaneously run 128 processes, but you likely already have
a number of processes running (to include your shell). Use &lt;code&gt;ps -eLf | grep $USER | wc -l&lt;/code&gt; to count the number of threads you are presently
running, and take this into account when setting a limit.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>USA</title>
      <link>https://www.flyn.org/notes/USA/</link>
      <pubDate>Fri, 27 Mar 2020 17:33:54 -0400</pubDate>
      <guid>https://www.flyn.org/notes/USA/</guid>
      <description>&lt;p&gt;I try to buy products that are made in the USA.
Here are some manufacturers I have found:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://system76.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;System76&lt;/a&gt; builds their THELIO line of desktop computers in Colorado.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.kendallhoward.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Kendall Howard&lt;/a&gt; builds server racks and other products in Minnesota.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://madeinusatools.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Made in USA Tools&lt;/a&gt; sells tools from manufacturers that build their products in the USA.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Proposals</title>
      <link>https://www.flyn.org/proposals/</link>
      <pubDate>Thu, 12 Mar 2020 09:29:06 -0400</pubDate>
      <guid>https://www.flyn.org/proposals/</guid>
      <description>&lt;p&gt;I am looking for talented collaborators for
ongoing research. Undergraduate and graduate students
alike can participate in research,
and Master of Software Engineering students
can contribute through their capstone project.
My interests span software systems and security.&lt;/p&gt;
&lt;h2 id=&#34;master-of-software-engineering-capstone&#34;&gt;Master of Software Engineering capstone&lt;/h2&gt;
&lt;p&gt;Students must submit a coherent, well-written proposal before I will take on the task of advising them.
Ultimately, student work must demonstrate both
the technical ability to complete a challenging programming project
and
the application of the software engineering principles.
When advising capstone projects, I expect to see hard evidence of both of these things.
I suggest you keep The Heilmeier Catechism in mind as you form your plan:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What are you trying to do? (State objectives clearly with no jargon.)&lt;/li&gt;
&lt;li&gt;How is this done today? What are the limitations of current practice?&lt;/li&gt;
&lt;li&gt;What is new in your approach, and why do you think it will be successful?&lt;/li&gt;
&lt;li&gt;Who cares? If you are successful, what difference does it make?&lt;/li&gt;
&lt;li&gt;What are the risks?&lt;/li&gt;
&lt;li&gt;How much will it cost? (Consider both financial and other costs.)&lt;/li&gt;
&lt;li&gt;How long will it take?&lt;/li&gt;
&lt;li&gt;What are the mid-term and final “exams” to check for success?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Good design,
a robust testing regimen,
and
an introspective approach to software engineering
will set you up for success.
Frantically trying to get things to work will not. Regarding design,
I like the summary of software architecture research that Roy Fielding
provided in the abstract of his dissertaion; I summarize his words and apply them to design as:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Determine how to best partition a system.&lt;/li&gt;
&lt;li&gt;Define how components identify and communicate with each other.&lt;/li&gt;
&lt;li&gt;Express how information is communicated.&lt;/li&gt;
&lt;li&gt;Allow for elements of a system to evolve independently.&lt;/li&gt;
&lt;li&gt;Describe all of this using formal and informal notations.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;undergraduate-and-graduate-research-and-project-ideas&#34;&gt;Undergraduate and graduate research and project ideas&lt;/h2&gt;
&lt;h3 id=&#34;research&#34;&gt;Research&lt;/h3&gt;
&lt;p&gt;The following is a list of tasks that might make a good line of student research.
Diamonds (♦) indicate the degree of difficulty.&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Aquinas&lt;/dt&gt;
&lt;dd&gt;Aquinas has an extensive list of goals, including
&lt;ul&gt;
&lt;li&gt;perform a privacy and/or security review,&lt;/li&gt;
&lt;li&gt;write new lessons,&lt;/li&gt;
&lt;li&gt;add a grading scheme that permits revealing test inputs to students whose submission fails,&lt;/li&gt;
&lt;li&gt;fix dark mode so that code displays properly&lt;/li&gt;
&lt;li&gt;support user-specific assignment variations, and&lt;/li&gt;
&lt;li&gt;study the efficacy of Aquinas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;Benchmarks&lt;/dt&gt;
&lt;dd&gt;Modern, repeatable benchmarks for things like Xen, SSH/scp, HTTP, and system calls;
a more up-to-date &lt;a href=&#34;http://www.bitmover.com/lmbench/&#34;&gt;lmbench&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;Network benchmarks&lt;/dt&gt;
&lt;dd&gt;IPsec vs. QUIC vs. TLS vs. tcpcrypt vs. MinimaLT: latency, DoS resistence, number of simultaneous connections, etc.&lt;/dd&gt;
&lt;dt&gt;Open-Source Supply-Chain Security&lt;/dt&gt;
&lt;dd&gt;See, e.g., The Linux Foundation&#39;s &lt;a href=&#34;https://www.linuxfoundation.org/en/resources/publications/open-source-software-supply-chain-security/&#34;&gt;analysis&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;Little SELinux&lt;/dt&gt;
&lt;dd&gt;SELinux on embedded systems, especially OpenWrt.&lt;/dd&gt;
&lt;dt&gt;Covert channels &amp;diams;&amp;diams;&lt;/dt&gt;
&lt;dd&gt;A covert-channel analysis of the Linux kernel.&lt;/dd&gt;
&lt;dt&gt;Heap protections &amp;diams;&amp;diams;&lt;/dt&gt;
&lt;dd&gt;Memory protections for the Linux heap.&lt;/dd&gt;
&lt;dt&gt;Exfiltration countermeasures&lt;/dt&gt;
&lt;dd&gt;Implement automated countermeasures for DNS- and other exfiltration techniques.&lt;/dd&gt;
&lt;dt&gt;Port Go 1.0 to Ethos &amp;diams;&amp;diams;&lt;/dt&gt;
&lt;dd&gt;
We have the differences between upstream and our port of Go r60.3.
Changes to Go&amp;apos;s Goroutine implementation
might add to the difficulty of this task.
&lt;/dd&gt;
&lt;dt&gt;Programming language for Ethos &amp;diams;&amp;diams;&amp;diams;&lt;/dt&gt;
&lt;dd&gt;
We would like to develop a language which internalizes
ETN definitions and provides IPC that is as convenient
and type-safe as Go&amp;apos;s channels. Modernize the beauty of C+UNIX!
&lt;/dd&gt;
&lt;dt&gt;Go OS &amp;diams;&amp;diams;&amp;diams;&lt;/dt&gt;
&lt;dd&gt;A simple operating system kernel in Go. Would first require
thinking through Go&amp;apos;s garbage collector. See &lt;a href=&#34;https://www.usenix.org/system/files/osdi18-cutler.pdf&#34;&gt;Biscut&lt;/a&gt;, &lt;a href=&#34;https://git.sr.ht/~eliasnaur/unik&#34;&gt;Go unikernel&lt;/a&gt;, and gVisor.
&lt;dt&gt;Rust OS &amp;diams;&amp;diams;&amp;diams;&lt;/dt&gt;
&lt;dd&gt;A simple operating system kernel in Rust. Contribute to &lt;a href=&#34;https://www.redox-os.org/&#34;&gt;Redox OS&lt;/a&gt;?
&lt;/dd&gt;
&lt;dt&gt;Ethos in Qubes&lt;/dt&gt;
&lt;dd&gt;Allow Ethos to easily run within &lt;a href=&#34;https://www.qubes-os.org/&#34;&gt;Qubes&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;Unikernel work&lt;/dt&gt;
&lt;dd&gt;Play with &lt;a href=&#34;http://openmirage.org/&#34;&gt;unikernels&lt;/a&gt;. Compare unikernels,
which minimize code and thus attack surface,
with Ethos,
which focuses on OS interfaces that promote robust programming. Port something like Aquinas to unikernels.&lt;/dd&gt;
&lt;dt&gt;Adapt Tor to use MinimaLT &amp;diams;&lt;/dt&gt;
&lt;dd&gt;Tor might benefit from the low-latency behavior of MinimaLT.
&lt;/dd&gt;
&lt;dt&gt;Ethos access controls &amp;diams;&amp;diams;&amp;diams;&lt;/dt&gt;
&lt;dd&gt;Writing access controls within the Ethos kernel.&lt;/dd&gt;
&lt;dt&gt;Implement typed command-line arguments in Ethos&lt;/dt&gt;
&lt;dd&gt;This is a small task that can serve as an introduction to Ethos development. I think PowerShell supports types.&lt;/dd&gt;
&lt;dt&gt;Certificate survey&lt;/dt&gt;
&lt;dd&gt;Study what is required to prove your identity
in order to purchase certificates from a number of certificate authorities.
&lt;/dd&gt;
&lt;dt&gt;Capsicum&lt;/dt&gt;
&lt;dd&gt;Put Capsicum to use.&lt;/dd&gt;
&lt;dt&gt;HiStar&lt;/dt&gt;
&lt;dd&gt;Put HiStar to use.&lt;/dd&gt;
&lt;dt&gt;seL4 port of Ethos interfaces &amp;diams;&amp;diams;&amp;diams;&lt;/dt&gt;
&lt;dd&gt;Implement Ethos on top of the seL4 microkernel.&lt;/dd&gt;
&lt;dt&gt;Code auditing tools&lt;/dt&gt;
&lt;dd&gt;Implement a tool which takes as input a program and configuration
and produces the lines of code which will run.
&lt;/dd&gt;
&lt;dt&gt;Ethos applications&lt;/dt&gt;
&lt;dd&gt;Write Ethos applications and compare their security properties
to their POSIX counterparts.&lt;/dd&gt;
&lt;dt&gt;More study of OpenSSL and other APIs&lt;/dt&gt;
&lt;dd&gt;Study the patterns of API use. How many are accidental? How many are inherent to proper use? Does libtlssep cover them all?&lt;/dd&gt;
&lt;dt&gt;Linux kernel MinimaLT implementation&lt;/dt&gt;
&lt;dd&gt;Implement a MinimaLT module for the Linux kernel and figure out a user-space tie in.&lt;/dd&gt;
&lt;dt&gt;&lt;del&gt;&lt;a href=&#34;../projects/libtlssep&#34;&gt;TLS service&lt;/a&gt;&lt;/del&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;del&gt;Using the lessons learned from Fahl, Georgiev, et al., develop a service-based TLS library.&lt;/del&gt; (Thank you, Leo St. Amour.)&lt;/dd&gt;
&lt;dt&gt;&lt;del&gt;&lt;a href=&#34;../projects/SimpleFlow&#34;&gt;SimpleFlow&lt;/a&gt;&lt;/del&gt; &amp;diams;&amp;diams;&lt;/dt&gt;
&lt;dd&gt;&lt;del&gt;Create a simple-flow-based security model for Linux.&lt;/del&gt; (Thank you, Jessie Lass and Ryan Johnson.)&lt;/dd&gt;
&lt;dt&gt;More SimpleFlow&lt;/dt&gt;
&lt;dd&gt;Port SimpleFlow to a newer kernel, and couple with a framework to write information-flow-aware applications. Build a more sophisticated flow model.&lt;/dd&gt;
&lt;dt&gt;&lt;del&gt;VisorFlow &lt;/del&gt;&amp;diams;&amp;diams;&lt;/dt&gt;
&lt;dd&gt;&lt;del&gt;A hypervisor-based information flow monitor.&lt;/del&gt; (Thank you, Matt Shockley, Chris Maixner, Ryan Johnson, and Mitch DeRidder.)&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&#34;general-programming-and-administration-proposals&#34;&gt;General programming and administration proposals&lt;/h3&gt;
&lt;dl&gt;
&lt;dt&gt;NetworkManager&lt;/dt&gt;
&lt;dd&gt;Add FIDO/WebAuthn/USB support (Red Hat Bugzilla #&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=2247565&#34;&gt;2247565&lt;/a&gt;). Would require extending WebKitGTK (WebKit Bugzilla #&lt;a href=&#34;https://bugs.webkit.org/show_bug.cgi?id=205350&#34;&gt;205350&lt;/a&gt;).&lt;/dd&gt;
&lt;dt&gt;Kodi&lt;/dt&gt;
&lt;dd&gt;Add Grilo support to Kodi.&lt;/dd&gt;
&lt;dt&gt;Grilo&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;Pandora plugin&lt;/li&gt;
&lt;li&gt;iHeartRadio plugin&lt;/li&gt;
&lt;li&gt;Netflix plugin&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;Libdmapsharing, etc.&lt;/dt&gt;
&lt;dd&gt;Various tasks, including:
&lt;ul&gt;
&lt;li&gt;fix the DACP (i.e., iOS Remote) support in libdmapsharing,&lt;/li&gt;
&lt;li&gt;analyze libdmapsharing and dmapd for code quality, and&lt;/li&gt;
&lt;li&gt;add DPAP support to GNOME Photos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;Awesome window manager&lt;/dt&gt;
&lt;dd&gt;Various tasks, including:
&lt;ul&gt;
&lt;li&gt;support for opening a new terminal using a current working directory which matches an existing terminal,&lt;/li&gt;
&lt;li&gt;easy command-line emailing with attachments,&lt;/li&gt;
&lt;li&gt;unified up-arrow histories across all bash instances, and&lt;/li&gt;
&lt;li&gt;Khal notifications.&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;Small devices&lt;/dt&gt;
&lt;dd&gt;Improvements to &lt;a href=&#34;../notes/golem/&#34;&gt;Golem&lt;/a&gt;, &lt;a href=&#34;../notes/siren/&#34;&gt;Siren&lt;/a&gt;, and &lt;a href=&#34;../notes/sprite/&#34;&gt;Sprite&lt;/a&gt;, including:
&lt;ul&gt;
&lt;li&gt;support for encrypted NFSv4,&lt;/li&gt;
&lt;li&gt;use of LDAP/Kerberos in Dovecot and Postfix,&lt;/li&gt;
&lt;li&gt;certificate-based logins,&lt;/li&gt;
&lt;li&gt;improved use of watchdogs,&lt;/li&gt;
&lt;li&gt;more multiplatform network shares (e.g., WebDAV and SMB),&lt;/li&gt;
&lt;li&gt;better DVD support,&lt;/li&gt;
&lt;li&gt;a user-configurable SPAM filter, and&lt;/li&gt;
&lt;li&gt;integrated support for console-video-game emulation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;Survey virtualization platforms&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;OpenNebula&lt;/li&gt;
&lt;li&gt;Eucalyptus&lt;/li&gt;
&lt;li&gt;OpenStack&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id=&#34;approximate-security-and-systems-conference-schedule&#34;&gt;Approximate security and systems conference schedule&lt;/h2&gt;
&lt;table class=&#34;booktabs&#34; summary=&#34;Conference schedule&#34;&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Event&lt;/th&gt;&lt;th&gt;Timeframe&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Shmoocon&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Mid January&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;USENIX Enigma&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Late January&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;USENIX Security Deadline&lt;/td&gt;&lt;td&gt;Mid February&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;NDSS&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Late February&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;NSDI&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Mid March&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;SOSP Deadline (biennial)&lt;/td&gt;&lt;td&gt;Late March&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;ASPLOS&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Early April&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;EuroSys&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Mid April&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Blackhat Deadline&lt;/td&gt;&lt;td&gt;Mid April&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;NSPW Deadline&lt;/td&gt;&lt;td&gt;Late April&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;OSDI Deadline (biennial)&lt;/td&gt;&lt;td&gt;Early May&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;ACM CCS Deadline&lt;/td&gt;&lt;td&gt;Mid May&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;IEEE S&amp;amp;P&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Late May&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;ACSAC Deadline&lt;/td&gt;&lt;td&gt;Early June&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;IEEE SecDev Deadline&lt;/td&gt;&lt;td&gt;Late June&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Blackhat&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Early August&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;USENIX Security&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Mid August&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;USENIX Enigma Deadline&lt;/td&gt;&lt;td&gt;&lt;b&gt;Late August&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;NSDI&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Mid September&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;NSPW&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Late September&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;SOSP (biennial)&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Early October&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;ACM CCS&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Mid October&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;EuroSys Deadline&lt;/td&gt;&lt;td&gt;Mid October&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;IEEE SecDev&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Early November&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;OSDI (biennial)&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Early November&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;IEEE S&amp;amp;P Deadline&lt;/td&gt;&lt;td&gt;Mid November&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;ASPLOS Deadline&lt;/td&gt;&lt;td&gt;Mid November&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;ACSAC&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Early December&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description>
    </item>
    
    <item>
      <title>Reading List</title>
      <link>https://www.flyn.org/reading/</link>
      <pubDate>Thu, 12 Mar 2020 09:29:06 -0400</pubDate>
      <guid>https://www.flyn.org/reading/</guid>
      <description>&lt;h2 id=&#34;programming-mistakes&#34;&gt;Programming mistakes&lt;/h2&gt;
&lt;p&gt;Evidence shows that the software we rely on every day is simply not trustworthy.
Why do we have so much trouble crafting robust computer programs?
Reading literature that enumerates mistakes made while programming
will help you begin to draw general conclusions about what is wrong with the state of practice.&lt;/p&gt;









	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/fahl-13-appified-ssl/&#34; &gt;Rethinking SSL Development in an Appified World&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Sascha-Fahl/&#34;&gt;Sascha Fahl&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Marian-Harbach/&#34;&gt;Marian Harbach&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Henning-Perl/&#34;&gt;Henning Perl&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Markus-Koetter/&#34;&gt;Markus Koetter&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Matthew-Smith/&#34;&gt;Matthew Smith&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jan 1, 2013
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/fahl-13-appified-ssl/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/georgiev-12-non-browser-ssl/&#34; &gt;The most dangerous code in the world: validating SSL certificates in non-browser software&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Martin-Georgiev/&#34;&gt;Martin Georgiev&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Subodh-Iyengar/&#34;&gt;Subodh Iyengar&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Suman-Jana/&#34;&gt;Suman Jana&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Rishita-Anubhai/&#34;&gt;Rishita Anubhai&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Dan-Boneh/&#34;&gt;Dan Boneh&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Vitaly-Shmatikov/&#34;&gt;Vitaly Shmatikov&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jan 1, 2012
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/georgiev-12-non-browser-ssl/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/fahl-12-android-ssl/&#34; &gt;Why Eve and Mallory love Android: an analysis of Android SSL (in)security&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Sascha-Fahl/&#34;&gt;Sascha Fahl&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Marian-Harbach/&#34;&gt;Marian Harbach&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Thomas-Muders/&#34;&gt;Thomas Muders&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Matthew-Smith/&#34;&gt;Matthew Smith&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Lars-Baumgartner/&#34;&gt;Lars Baumgärtner&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Bernd-Freisleben/&#34;&gt;Bernd Freisleben&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jan 1, 2012
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/fahl-12-android-ssl/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	


&lt;h2 id=&#34;secure-design&#34;&gt;Secure design&lt;/h2&gt;
&lt;p&gt;There are many examples in the literature of designs
that advance the state of the art in
crafting robust programs.
While reading these papers,
you should ask yourself, “how do these designs
categorically remove errors described by the ‘mistake’ papers”,
and “how could we further improve these designs by making their
protections more mandatory?”&lt;/p&gt;









	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/bernstein-12-nacl/&#34; &gt;The security impact of a new cryptographic library&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Daniel-J.-Bernstein/&#34;&gt;Daniel J. Bernstein&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Tanja-Lange/&#34;&gt;Tanja Lange&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Peter-Schwabe/&#34;&gt;Peter Schwabe&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jan 1, 2012
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/bernstein-12-nacl/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/bernstein-07-qmail/&#34; &gt;Some thoughts on security after ten years of qmail 1.0&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Daniel-J.-Bernstein/&#34;&gt;Daniel J. Bernstein&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jan 1, 2007
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  
    
  



&lt;a class=&#34;btn btn-outline-primary btn-page-header btn-sm&#34; href=&#34;https://cr.yp.to/qmail/qmailsec-20071101.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;
  PDF
&lt;/a&gt;



&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/bernstein-07-qmail/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/provos-03-preventing-privilege-escalation/&#34; &gt;Preventing Privilege Escalation&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Niels-Provos/&#34;&gt;Niels Provos&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Markus-Friedl/&#34;&gt;Markus Friedl&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Peter-Honeyman/&#34;&gt;Peter Honeyman&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Aug 1, 2003
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/provos-03-preventing-privilege-escalation/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/cox-02-plan-9-security/&#34; &gt;Security in Plan 9&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Russ-Cox/&#34;&gt;Russ Cox&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Eric-Grosse/&#34;&gt;Eric Grosse&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Rob-Pike/&#34;&gt;Rob Pike&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Dave-Presotto/&#34;&gt;Dave Presotto&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Sean-Quinlan/&#34;&gt;Sean Quinlan&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jan 1, 2002
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/cox-02-plan-9-security/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/loscocco-98-inevitability/&#34; &gt;The Inevitability of Failure: The Flawed Assumption of Security in Modern Computing Environments&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Peter-Loscocco/&#34;&gt;Peter Loscocco&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Stephen-D.-Smalley/&#34;&gt;Stephen D. Smalley&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Patrick-A.-Muckelbauer/&#34;&gt;Patrick A. Muckelbauer&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Ruth-C.-Taylor/&#34;&gt;Ruth C. Taylor&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/S.-Jeff-Turner/&#34;&gt;S. Jeff Turner&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/John-F.-Farrel/&#34;&gt;John F. Farrel&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jan 1, 1998
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/loscocco-98-inevitability/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	


&lt;h2 id=&#34;access-control-systems&#34;&gt;Access control systems&lt;/h2&gt;
&lt;p&gt;Programmers craft programs which transform universal Turing machines
into machines which serve a particular purpose.
Attackers find ways to break out of these particular machines
and thus restore access to the underlying universal machine.
Access controls serve to constrain programs such that they
are given only least privilege.&lt;/p&gt;
&lt;p&gt;There is a limit to access control systems. Dan Bernstein points out in “Some thoughts on security after ten years of qmail 1.0” that
even least privilege is too much. Put another way, computer programs themselves will be able to violate security requirements
even with the most tightly-designed access controls.
Robust systems must both make the act of programming robust applications easier
and provide access controls to sufficiently restrict applications.&lt;/p&gt;









	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/watson-10-capsicum/&#34; &gt;Capsicum: practical capabilities in UNIX&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Robert-Watson/&#34;&gt;Robert Watson&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Janathan-Anderson/&#34;&gt;Janathan Anderson&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Ben-Laurie/&#34;&gt;Ben Laurie&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Kris-Kennaway/&#34;&gt;Kris Kennaway&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Aug 1, 2010
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/watson-10-capsicum/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/zeldovich-06-histar/&#34; &gt;Making information flow explicit in HiStar&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Nickolai-Zeldovich/&#34;&gt;Nickolai Zeldovich&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Silas-Boyd-Wickizer/&#34;&gt;Silas Boyd-Wickizer&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Eddie-Kohler/&#34;&gt;Eddie Kohler&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/David-Mazieres/&#34;&gt;David Mazières&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Nov 1, 2006
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/zeldovich-06-histar/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/loscocco-01-flexible/&#34; &gt;Integrating Flexible Support for Security Policies into the Linux Operating System&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Peter-Loscocco/&#34;&gt;Peter Loscocco&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Stephen-Smalley/&#34;&gt;Stephen Smalley&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jun 1, 2001
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/loscocco-01-flexible/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/saltzer-74-multics/&#34; &gt;Protection and the Control of Information Sharing in Multics&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/J.-H.-Saltzer/&#34;&gt;J. H. Saltzer&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jul 1, 1974
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/saltzer-74-multics/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/ritchie-74-unix/&#34; &gt;The UNIX time-sharing system&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Dennis-M.-Ritchie/&#34;&gt;Dennis M. Ritchie&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Ken-Thompson/&#34;&gt;Ken Thompson&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jan 1, 1974
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/ritchie-74-unix/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;













&lt;a class=&#34;btn btn-outline-primary btn-page-header btn-sm&#34; href=&#34;https://doi.org/http://doi.acm.org/10.1145/361011.361061&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;
  DOI
&lt;/a&gt;



    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	


&lt;h2 id=&#34;reading-and-writing-systems-papers&#34;&gt;Reading and writing systems papers&lt;/h2&gt;
&lt;p&gt;Reading and writing systems papers is unlike reading for leisure and informal writing.&lt;/p&gt;









	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/vitek-12-repeatability/&#34; &gt;R3: Repeatability, Reproducibility and Rigor&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Jan-Vitek/&#34;&gt;Jan Vitek&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Tomas-Kalibera/&#34;&gt;Tomas Kalibera&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Mar 1, 2012
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/vitek-12-repeatability/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/keshav-07-how-to-read/&#34; &gt;How to Read a Paper&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/S.-Keshav/&#34;&gt;S. Keshav&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jul 1, 2007
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/keshav-07-how-to-read/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/levin-88-how-to-write/&#34; &gt;An Evaluation of the Ninth SOSP Submissions or How (and How Not) to Write a Good Systems Paper&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  
  
  
  &lt;div&gt;
    

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Roy-Levin/&#34;&gt;Roy Levin&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/David-D.-Redell/&#34;&gt;David D. Redell&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Oct 1, 1988
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/levin-88-how-to-write/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	


&lt;p&gt;See also Dan Bernstein&#39;s &lt;a href=&#34;http://cr.yp.to/bib/devil-cite.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;The devil&#39;s guide to citing the literature&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;life-in-academia&#34;&gt;Life in academia&lt;/h2&gt;
&lt;p&gt;Mor Harchol-Balter captured the considerations involved in &lt;a href=&#34;https://www.cs.cmu.edu/~harchol/gradschooltalk.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;applying
to Ph.D. programs&lt;/a&gt; with the aim of
studying computer science.&lt;/p&gt;
&lt;h2 id=&#34;did-you-think-you-were-going-to-get-away-with-avoiding-our-papers&#34;&gt;Did you think you were going to get away with avoiding our papers?&lt;/h2&gt;
&lt;p&gt;See &lt;a href=&#34;https://www.flyn.org/publication/&#34;&gt;our publications&lt;/a&gt;.
We recommend the following order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;“Simple-to-use, secure-by-design networking in Ethos”&lt;/li&gt;
&lt;li&gt;“MinimaLT: Minimal-latency networking through better security”&lt;/li&gt;
&lt;li&gt;“Ethos&#39; deeply integrated distributed types”&lt;/li&gt;
&lt;li&gt;“On the generality and convenience of Etypes”&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>Service inquiry</title>
      <link>https://www.flyn.org/inquiry/</link>
      <pubDate>Thu, 12 Mar 2020 09:29:06 -0400</pubDate>
      <guid>https://www.flyn.org/inquiry/</guid>
      <description>&lt;script src=&#34;https://api.flyn.org/httpsmtp/wasm_exec.js&#34;&gt;&lt;/script&gt;
&lt;div class=&#34;container mb-5 mt-5&#34;&gt;
&lt;form&gt;
&lt;div class=&#34;form-group&#34;&gt;
&lt;label id=&#34;lable-name&#34; for=&#34;name&#34;&gt;Name:&lt;/label&gt;
&lt;input id=&#34;field-name&#34; class=&#34;form-control&#34; type=&#34;text&#34; name=&#34;Name&#34;/&gt;
&lt;/div&gt;
&lt;div class=&#34;form-group&#34;&gt;
&lt;label id=&#34;lable-email&#34; for=&#34;email&#34;&gt;Email:&lt;/label&gt;
&lt;input id=&#34;field-email&#34; class=&#34;form-control&#34; type=&#34;email&#34; name=&#34;Email&#34;/&gt;
&lt;/div&gt;
&lt;div class=&#34;form-group&#34;&gt;
&lt;label id=&#34;lable-phone&#34; for=&#34;phone&#34;&gt;Phone:&lt;/label&gt;
&lt;input id=&#34;field-phone&#34; class=&#34;form-control&#34; type=&#34;text&#34; name=&#34;Phone&#34;/&gt;
&lt;/div&gt;
&lt;div class=&#34;form-group&#34;&gt;
&lt;label id=&#34;lable-type&#34; for=&#34;phone&#34;&gt;Type of service:&lt;/label&gt;
&lt;select id=&#34;field-type&#34; class=&#34;form-control&#34; name=&#34;Type&#34; onchange=&#34;selected(this)&#34;&gt;
&lt;option value=&#34;Five page&#34;&gt;Five page site ($19/mo.)&lt;/option&gt;
&lt;option value=&#34;Business card&#34;&gt;Business card site ($7/mo.)&lt;/option&gt;
&lt;option value=&#34;Farm stand&#34;&gt;Farm stand/self-serve payment site ($7/mo.)&lt;/option&gt;
&lt;option value=&#34;Aquinas access&#34;&gt;Aquinas access ($10/user/mo.)&lt;/option&gt;
&lt;option value=&#34;Other&#34;&gt;Other&lt;/option&gt;
&lt;/select&gt;
&lt;/div&gt;
&lt;div class=&#34;form-group&#34;&gt;
&lt;label id=&#34;label-description&#34; for=&#34;description&#34;&gt;Describe your company or organization:&lt;/label&gt;
&lt;textarea id=&#34;field-description&#34; class=&#34;form-control&#34; name=&#34;Message&#34; rows=&#34;5&#34;&gt;&lt;/textarea&gt;
&lt;/div&gt;
&lt;div class=&#34;form-group&#34;&gt;
&lt;label id=&#34;label-socials&#34; for=&#34;socials&#34;&gt;List the social media URLs associated with your company, one per line:&lt;/label&gt;
&lt;textarea id=&#34;field-socials&#34; class=&#34;form-control&#34; name=&#34;Message&#34; rows=&#34;3&#34;&gt;&lt;/textarea&gt;
&lt;/div&gt;
&lt;div class=&#34;form-group&#34;&gt;
&lt;label id=&#34;label-domain&#34; for=&#34;domain&#34;&gt;What domain would you like to reserve for your company?&lt;/label&gt;
&lt;input id=&#34;field-domain&#34; class=&#34;form-control&#34; type=&#34;text&#34; name=&#34;Domain&#34;/&gt;
&lt;/div&gt;
&lt;/form&gt;
&lt;p id=&#34;p-icann&#34;&gt;
You can use &lt;a href=&#34;https://lookup.icann.org/&#34;&gt;ICANN|Lookup&lt;/a&gt; to check for the availability
of a domain, or provide us with some ideas, and we will find available options.
&lt;/p&gt;
&lt;!-- Button disabled until WASM loads. --&gt;
&lt;button id=&#34;button&#34; class=&#34;btn btn-primary&#34; style=&#34;background-color: #234e38; border: none&#34; disabled onclick=&#34;clicked(
        document.getElementById(&#39;field-name&#39;).value,
        document.getElementById(&#39;field-email&#39;).value,
        document.getElementById(&#39;field-phone&#39;).value,
        document.getElementById(&#39;field-type&#39;).value,
        document.getElementById(&#39;field-description&#39;).value,
        document.getElementById(&#39;field-socials&#39;).value,
        document.getElementById(&#39;field-domain&#39;).value
)&#34;&gt;Send&lt;/button&gt;
&lt;/div&gt;
&lt;script&gt;
function selected(service) {
    if (service.value == &#34;Five page&#34; || service.value == &#34;Business card&#34;) {
        labelDescription = document.getElementById(&#39;label-description&#39;)
        labelDescription.hidden = false;
        labelDescription.innerHTML = &#34;Describe your company or organization:&#34;;

        fieldDescription = document.getElementById(&#39;field-description&#39;)
        fieldDescription.hidden = false;

        labelSocials = document.getElementById(&#39;label-socials&#39;)
        labelSocials.hidden = false;

        fieldSocials = document.getElementById(&#39;field-socials&#39;)
        fieldSocials.hidden = false;

        labelDomain = document.getElementById(&#39;label-domain&#39;)
        labelDomain.hidden = false;

        fieldDomain = document.getElementById(&#39;field-domain&#39;)
        fieldDomain.hidden = false;

        pIcann = document.getElementById(&#39;p-icann&#39;)
        pIcann.hidden = false;
    } else if (service.value == &#34;Farm stand&#34;) {
        labelDescription = document.getElementById(&#39;label-description&#39;)
        labelDescription.hidden = false;
        labelDescription.innerHTML = &#34;Describe your farm stand or self-serve store:&#34;;

        fieldDescription = document.getElementById(&#39;field-description&#39;)
        fieldDescription.hidden = false;

        labelSocials = document.getElementById(&#39;label-socials&#39;)
        labelSocials.hidden = false;

        fieldSocials = document.getElementById(&#39;field-socials&#39;)
        fieldSocials.hidden = false;

        labelDomain = document.getElementById(&#39;label-domain&#39;)
        labelDomain.hidden = false;

        fieldDomain = document.getElementById(&#39;field-domain&#39;)
        fieldDomain.hidden = false;

        pIcann = document.getElementById(&#39;p-icann&#39;)
        pIcann.hidden = false;
    } else if (service.value == &#34;Aquinas access&#34;) {
        labelDescription = document.getElementById(&#39;label-description&#39;)
        labelDescription.hidden = true;

        fieldDescription = document.getElementById(&#39;field-description&#39;)
        fieldDescription.hidden = true;

        labelSocials = document.getElementById(&#39;label-socials&#39;)
        labelSocials.hidden = true;

        fieldSocials = document.getElementById(&#39;field-socials&#39;)
        fieldSocials.hidden = true;

        labelDomain = document.getElementById(&#39;label-domain&#39;)
        labelDomain.hidden = true;

        fieldDomain = document.getElementById(&#39;field-domain&#39;)
        fieldDomain.hidden = true;

        pIcann = document.getElementById(&#39;p-icann&#39;)
        pIcann.hidden = true;
    } else if (service.value == &#34;Other&#34;) {
        labelDescription = document.getElementById(&#39;label-description&#39;)
        labelDescription.hidden = false;
        labelDescription.innerHTML = &#34;Describe your requirement:&#34;;

        fieldDescription = document.getElementById(&#39;field-description&#39;)
        fieldDescription.hidden = false;

        labelSocials = document.getElementById(&#39;label-socials&#39;)
        labelSocials.hidden = true;

        fieldSocials = document.getElementById(&#39;field-socials&#39;)
        fieldSocials.hidden = true;

        labelDomain = document.getElementById(&#39;label-domain&#39;)
        labelDomain.hidden = true;

        fieldDomain = document.getElementById(&#39;field-domain&#39;)
        fieldDomain.hidden = true;

        pIcann = document.getElementById(&#39;p-icann&#39;)
        pIcann.hidden = true;
    }
}

async function clicked(name, emailFrom, phone, type, description, socials, domain) {
        if (name == &#34;&#34;) {
                alert(&#34;Your name is required.&#34;);
                return;
        }

        if (emailFrom == &#34;&#34;) {
                alert(&#34;Your email address is required.&#34;);
                return;
        }

        message  = &#34;Type:\n&#34;
        message += type

        if (description != &#34;&#34;) {
            message += &#34;\n\nCompany Description:\n&#34;
            message += description
        }

        if (socials != &#34;&#34;) {
            message += &#34;\n\nSocial Media:\n&#34;
            message += socials
        }

        if (domain != &#34;&#34;) {
            message += &#34;\n\nDomain:\n&#34;
            message += domain
        }

        try {
                await httpsmtp(
                        &#34;mike@flyn.org&#34;,
                        emailFrom,
                        name,
                        phone,
                        message
                );
        } catch (err) {
                console.error(err);
        }
        window.location.href = &#34;/sent/&#34;;
}

if (WebAssembly) {
        // WebAssembly.instantiateStreaming is not currently available in Safari
        if (WebAssembly &amp;&amp; !WebAssembly.instantiateStreaming) { // polyfill
                WebAssembly.instantiateStreaming = async (resp, importObject) =&gt; {
                        const source = await (await resp).arrayBuffer();
                        return await WebAssembly.instantiate(source, importObject);
                };
        }

        const go = new Go();
        go.argv = [];
        WebAssembly.instantiateStreaming(fetch(&#34;https://api.flyn.org/httpsmtp/httpsmtp.wasm&#34;), go.importObject).then((result) =&gt; {
                go.run(result.instance);
                button = document.getElementById(&#39;button&#39;)
                button.disabled = false
        });
} else {
        console.log(&#34;WebAssembly is not supported in your browser&#34;)
}
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>SRPMS</title>
      <link>https://www.flyn.org/SRPMS/</link>
      <pubDate>Thu, 12 Mar 2020 09:29:06 -0400</pubDate>
      <guid>https://www.flyn.org/SRPMS/</guid>
      <description>&lt;ul&gt;

	&lt;li&gt;
		 &lt;a href=&#34;arduino-1.8.19-1.fc39.src.rpm&#34;&gt;arduino-1.8.19-1.fc39.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;arduino.spec&#34;&gt;arduino.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		
		 / &lt;a href=&#34;bluej.spec&#34;&gt;bluej.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;cgilib-0.7-2.fc10.src.rpm&#34;&gt;cgilib-0.7-2.fc10.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;cgilib.spec&#34;&gt;cgilib.spec&lt;/a&gt;
		 / &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=450050&#34;&gt;Bugzilla #450050&lt;/a&gt;
	&lt;/li&gt;

	&lt;li&gt;
		
		 / &lt;a href=&#34;coala.spec&#34;&gt;coala.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;crosstool-ng-1.3.2-1.fc10.src.rpm&#34;&gt;crosstool-ng-1.3.2-1.fc10.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;crosstool-ng.spec&#34;&gt;crosstool-ng.spec&lt;/a&gt;
		 / &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=502699&#34;&gt;Bugzilla #502699&lt;/a&gt;
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;CuraEngine-lulzbot-20231130-1.fc39.src.rpm&#34;&gt;CuraEngine-lulzbot-20231130-1.fc39.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;CuraEngine-lulzbot.spec&#34;&gt;CuraEngine-lulzbot.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;cura-lulzbot-4.13.4-1.fc39.src.rpm&#34;&gt;cura-lulzbot-4.13.4-1.fc39.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;cura-lulzbot.spec&#34;&gt;cura-lulzbot.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;gobject-linter-0~20260505.git0a8b69c-1.fc44.src.rpm&#34;&gt;gobject-linter-0~20260505.git0a8b69c-1.fc44.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;gobject-linter.spec&#34;&gt;gobject-linter.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;golang-github-aphistic-golf-0-0.1.20240201gitb8be15e.fc39.src.rpm&#34;&gt;golang-github-aphistic-golf-0-0.1.20240201gitb8be15e.fc39.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;golang-github-aphistic-golf.spec&#34;&gt;golang-github-aphistic-golf.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;golang-github-aphistic-sweet-0.3.0-1.fc39.src.rpm&#34;&gt;golang-github-aphistic-sweet-0.3.0-1.fc39.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;golang-github-aphistic-sweet.spec&#34;&gt;golang-github-aphistic-sweet.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;golang-github-azure-sdk-security-keyvault-azkeys-1.0.1-1.fc38.src.rpm&#34;&gt;golang-github-azure-sdk-security-keyvault-azkeys-1.0.1-1.fc38.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;golang-github-azure-sdk-security-keyvault-azkeys.spec&#34;&gt;golang-github-azure-sdk-security-keyvault-azkeys.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;golang-github-azure-sdk-security-keyvault-internal-1.0.0-1.fc38.src.rpm&#34;&gt;golang-github-azure-sdk-security-keyvault-internal-1.0.0-1.fc38.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;golang-github-azure-sdk-security-keyvault-internal.spec&#34;&gt;golang-github-azure-sdk-security-keyvault-internal.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;golang-github-bep-goportabletext-0.1.0-1.fc42.src.rpm&#34;&gt;golang-github-bep-goportabletext-0.1.0-1.fc42.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;golang-github-bep-goportabletext.spec&#34;&gt;golang-github-bep-goportabletext.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;golang-github-gohugoio-i18n-2.1.2-1.fc38.src.rpm&#34;&gt;golang-github-gohugoio-i18n-2.1.2-1.fc38.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;golang-github-gohugoio-i18n.spec&#34;&gt;golang-github-gohugoio-i18n.spec&lt;/a&gt;
		 / &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=2031583&#34;&gt;Bugzilla #2031583&lt;/a&gt;
	&lt;/li&gt;

	&lt;li&gt;
		
		 / &lt;a href=&#34;golang-github-google-github-28.spec&#34;&gt;golang-github-google-github-28.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		
		 / &lt;a href=&#34;golang-github-google-github-32.spec&#34;&gt;golang-github-google-github-32.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;golang-github-quicktest-qt-1.101.0-1.fc42.src.rpm&#34;&gt;golang-github-quicktest-qt-1.101.0-1.fc42.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;golang-github-quicktest-qt.spec&#34;&gt;golang-github-quicktest-qt.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;golang-github-tj-elastic-0-0.1.20231231git36157cb.fc39.src.rpm&#34;&gt;golang-github-tj-elastic-0-0.1.20231231git36157cb.fc39.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;golang-github-tj-elastic.spec&#34;&gt;golang-github-tj-elastic.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;golang-github-tj-kinesis-0-0.1.20231231git08b17f5.fc39.src.rpm&#34;&gt;golang-github-tj-kinesis-0-0.1.20231231git08b17f5.fc39.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;golang-github-tj-kinesis.spec&#34;&gt;golang-github-tj-kinesis.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		
		 / &lt;a href=&#34;graylog2.spec&#34;&gt;graylog2.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;hugo-0.147.6-1.fc42.src.rpm&#34;&gt;hugo-0.147.6-1.fc42.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;hugo.spec&#34;&gt;hugo.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;jmdns-3.5.9-1.fc39.src.rpm&#34;&gt;jmdns-3.5.9-1.fc39.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;jmdns.spec&#34;&gt;jmdns.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;jsemver-0.9.0-1.fc38.src.rpm&#34;&gt;jsemver-0.9.0-1.fc38.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;jsemver.spec&#34;&gt;jsemver.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;libarcus-lulzbot-20221013-1.fc38.src.rpm&#34;&gt;libarcus-lulzbot-20221013-1.fc38.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;libarcus-lulzbot.spec&#34;&gt;libarcus-lulzbot.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;maze5-0.8.1-3.fc15.src.rpm&#34;&gt;maze5-0.8.1-3.fc15.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;maze5.spec&#34;&gt;maze5.spec&lt;/a&gt;
		 / &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=714543&#34;&gt;Bugzilla #714543&lt;/a&gt;
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;mcds-1.9-1.fc42.src.rpm&#34;&gt;mcds-1.9-1.fc42.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;mcds.spec&#34;&gt;mcds.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;python-angr-9.2.135-1.fc43.src.rpm&#34;&gt;python-angr-9.2.135-1.fc43.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;python-angr.spec&#34;&gt;python-angr.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;python-cle-9.2.189-1.fc43.src.rpm&#34;&gt;python-cle-9.2.189-1.fc43.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;python-cle.spec&#34;&gt;python-cle.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;python-nampa-1.0-1.fc42.src.rpm&#34;&gt;python-nampa-1.0-1.fc42.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;python-nampa.spec&#34;&gt;python-nampa.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;python-pycryptodome-3.21.0-1.fc41.src.rpm&#34;&gt;python-pycryptodome-3.21.0-1.fc41.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;python-pycryptodome.spec&#34;&gt;python-pycryptodome.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;python-pyvex-9.2.189-1.fc43.src.rpm&#34;&gt;python-pyvex-9.2.189-1.fc43.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;python-pyvex.spec&#34;&gt;python-pyvex.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;python-pyxbe-1.0.3-1.fc43.src.rpm&#34;&gt;python-pyxbe-1.0.3-1.fc43.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;python-pyxbe.spec&#34;&gt;python-pyxbe.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		
		 / &lt;a href=&#34;python-rekall.spec&#34;&gt;python-rekall.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;python-uranium-lulzbot-20231219-1.fc39.src.rpm&#34;&gt;python-uranium-lulzbot-20231219-1.fc39.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;python-uranium-lulzbot.spec&#34;&gt;python-uranium-lulzbot.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;realtek-rtl8192-kmod-2.6.0019.1207.2010-1.fc15.src.rpm&#34;&gt;realtek-rtl8192-kmod-2.6.0019.1207.2010-1.fc15.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;realtek-rtl8192-kmod.spec&#34;&gt;realtek-rtl8192-kmod.spec&lt;/a&gt;
		 / &lt;a href=&#34;https://bugzilla.rpmfusion.org/show_bug.cgi?id=1797&#34;&gt;Bugzilla #1797&lt;/a&gt;
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;rust-unidiff-0.4.0-1.fc44.src.rpm&#34;&gt;rust-unidiff-0.4.0-1.fc44.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;rust-unidiff.spec&#34;&gt;rust-unidiff.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;thoggen-0.7.1.1-4.fc19.src.rpm&#34;&gt;thoggen-0.7.1.1-4.fc19.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;thoggen.spec&#34;&gt;thoggen.spec&lt;/a&gt;
		 / &lt;a href=&#34;https://bugzilla.rpmfusion.org/show_bug.cgi?id=2917&#34;&gt;Bugzilla #2917&lt;/a&gt;
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;tiddlywiki-5.1.23-2.fc33.src.rpm&#34;&gt;tiddlywiki-5.1.23-2.fc33.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;tiddlywiki.spec&#34;&gt;tiddlywiki.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;tikz-er2-20100913-1.fc14.src.rpm&#34;&gt;tikz-er2-20100913-1.fc14.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;tikz-er2.spec&#34;&gt;tikz-er2.spec&lt;/a&gt;
		 / &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=633561&#34;&gt;Bugzilla #633561&lt;/a&gt;
	&lt;/li&gt;

	&lt;li&gt;
		
		 / &lt;a href=&#34;wayscriber.spec&#34;&gt;wayscriber.spec&lt;/a&gt;
		
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;webunit-0.4-6.fc12.src.rpm&#34;&gt;webunit-0.4-6.fc12.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;webunit.spec&#34;&gt;webunit.spec&lt;/a&gt;
		 / &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=266001&#34;&gt;Bugzilla #266001&lt;/a&gt;
	&lt;/li&gt;

	&lt;li&gt;
		 &lt;a href=&#34;wooz-0.1.0-20251227git24e2856.fc43.src.rpm&#34;&gt;wooz-0.1.0-20251227git24e2856.fc43.src.rpm&lt;/a&gt;
		 / &lt;a href=&#34;wooz.spec&#34;&gt;wooz.spec&lt;/a&gt;
		
	&lt;/li&gt;

&lt;/ul&gt;

</description>
    </item>
    
    <item>
      <title>Statistics</title>
      <link>https://www.flyn.org/academic-statistics/</link>
      <pubDate>Thu, 12 Mar 2020 09:29:06 -0400</pubDate>
      <guid>https://www.flyn.org/academic-statistics/</guid>
      <description>&lt;h2 id=&#34;committees-panels-and-paper-reviewing&#34;&gt;Committees, panels, and paper reviewing&lt;/h2&gt;
&lt;h3 id=&#34;calendar-year-2024&#34;&gt;Calendar year 2024&lt;/h3&gt;
&lt;p&gt;29th ACM Conference on Innovation and Technology in Computer Science Education&lt;/p&gt;
&lt;h3 id=&#34;calendar-year-2023&#34;&gt;Calendar year 2023&lt;/h3&gt;
&lt;p&gt;28th ACM Conference on Innovation and Technology in Computer Science Education&lt;/p&gt;
&lt;h3 id=&#34;calendar-year-2022&#34;&gt;Calendar year 2022&lt;/h3&gt;
&lt;p&gt;27th ACM Conference on Innovation and Technology in Computer Science Education&lt;/p&gt;
&lt;h3 id=&#34;calendar-year-2017&#34;&gt;Calendar year 2017&lt;/h3&gt;
&lt;p&gt;Ninth ACM CCS International Workshop on Managing Insider Security Threats&lt;/p&gt;
&lt;h3 id=&#34;calendar-year-2015&#34;&gt;Calendar year 2015&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Fifth International Conference on Security, Privacy, and Applied Cryptography Engineering&lt;/li&gt;
&lt;li&gt;NSF Secure and Trustworthy Cyberspace&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;grants-awarded&#34;&gt;Grants awarded&lt;/h2&gt;
&lt;p&gt;NSF CRII: SaTC: Next-Generation Robust Software (CNS-1464121)&lt;/p&gt;
&lt;h2 id=&#34;college-courses-taught&#34;&gt;College courses taught&lt;/h2&gt;
&lt;dl&gt;
&lt;dt&gt;2024&amp;ndash;2025&lt;/dt&gt;
&lt;dd&gt;UW&amp;ndash;L CS220, Software Design II&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS356, Software Exploitation&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CPE105, Introduction to the Computing Environment&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CPE309, Systems Programming&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS455/555, Fundamentals of Information Security&lt;/dd&gt;
&lt;dt&gt;2023&amp;ndash;2024&lt;/dt&gt;
&lt;dd&gt;UW&amp;ndash;L CS220, Software Design II&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS356, Software Exploitation&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS455/555, Fundamentals of Information Security&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS456/556, Secure Software Development&lt;/dd&gt;
&lt;dt&gt;2022&amp;ndash;2023&lt;/dt&gt;
&lt;dd&gt;UW&amp;ndash;L CS120, Software Design I&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS356, Software Exploitation&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS410/510, Open Source Software Development&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS441, Operating System Concepts&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS455/555, Fundamentals of Information Security&lt;/dd&gt;
&lt;dt&gt;2021&amp;ndash;2022&lt;/dt&gt;
&lt;dd&gt;UW&amp;ndash;L CS120, Software Design I&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS356, Software Exploitation&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS455/555, Fundamentals of Information Security&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS456/556, Secure Software Development&lt;/dd&gt;
&lt;dt&gt;2020&amp;ndash;2021&lt;/dt&gt;
&lt;dd&gt;UW&amp;ndash;L CS120, Software Design I&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS410/510, Open Source Software Development&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS455/555, Fundamentals of Information Security&lt;/dd&gt;
&lt;dd&gt;UW&amp;ndash;L CS456/556, Secure Software Development&lt;/dd&gt;
&lt;dt&gt;2016&amp;ndash;2017&lt;/dt&gt;
&lt;dd&gt;USMA CS481, Operating Systems&lt;/dd&gt;
&lt;dd&gt;USMA CS401, Software Systems Design&lt;/dd&gt;
&lt;dd&gt;USMA XE402, Integrative Systems Design&lt;/dd&gt;
&lt;dd&gt;USMA CS474, Fundamentals of Computer Theory&lt;/dd&gt;
&lt;dt&gt;2015&amp;ndash;2016&lt;/dt&gt;
&lt;dd&gt;USMA CS481, Operating Systems&lt;/dd&gt;
&lt;dd&gt;USMA CS401, Software Systems Design&lt;/dd&gt;
&lt;dd&gt;USMA XE402, Integrative Systems Design&lt;/dd&gt;
&lt;dd&gt;USMA CS301, Fundamentals of Computer Science&lt;/dd&gt;
&lt;dt&gt;2014&amp;ndash;2015&lt;/dt&gt;
&lt;dd&gt;USMA CS481, Operating Systems&lt;/dd&gt;
&lt;dd&gt;USMA CS482, Cyber-Security Engineering&lt;/dd&gt;
&lt;dt&gt;2013&amp;ndash;2014&lt;/dt&gt;
&lt;dd&gt;USMA CS481, Operating Systems&lt;/dd&gt;
&lt;dd&gt;USMA IT305, Theory and Practice of Military Information Systems&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id=&#34;masters-capstone-committees&#34;&gt;Masters capstone committees&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Spring 2023: Jordan LaRue: Emperor Parking Management&lt;/li&gt;
&lt;li&gt;Spring 2022: Christian Strauss: Audio Canvas: An Audio Visualization Tool&lt;/li&gt;
&lt;li&gt;Fall 2021: Drew Lohmeyer: Parlay: A Web Application Designed to Facilitate Competition in the Form of Sports Betting Leagues&lt;/li&gt;
&lt;li&gt;Fall 2020: Dongyi Liang: A Route Recommendation System Based on Check-In Data&lt;/li&gt;
&lt;li&gt;Fall 2020: Tyler Durr: Online Photo Gallery with E-Commerce Support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;* Served as thesis advisor.&lt;br/&gt;&lt;/p&gt;
&lt;h2 id=&#34;conferences-and-workshops-attended&#34;&gt;Conferences and workshops attended&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;ACM DIM 2010, Chicago, Illinois*&lt;/li&gt;
&lt;li&gt;ACM CCS 2010, Chicago, Illinois&lt;/li&gt;
&lt;li&gt;IEEE Security &amp;amp; Privacy 2012, San Francisco, California&lt;/li&gt;
&lt;li&gt;USENIX Security 2012, Bellevue, Washington&lt;/li&gt;
&lt;li&gt;USENIX OSDI 2012, Hollywood, California&lt;/li&gt;
&lt;li&gt;ACM CCS 2012, Raleigh, North Carolina&lt;/li&gt;
&lt;li&gt;RESoLVE 2013, Houston, Texas*&lt;/li&gt;
&lt;li&gt;ASPLOS 2013, Houston, Texas&lt;/li&gt;
&lt;li&gt;EUROSEC 2013, Prague, Czech Republic*&lt;/li&gt;
&lt;li&gt;Greater Chicago Area Systems Research Workshop 2013, Evanston, Illinois&lt;/li&gt;
&lt;li&gt;ACM CCS 2013, Berlin, Germany*&lt;/li&gt;
&lt;li&gt;IEEE LangSec 2014, San Jose, California*&lt;/li&gt;
&lt;li&gt;IEEE Security &amp;amp; Privacy 2015, San Jose, California&lt;/li&gt;
&lt;li&gt;IEEE LangSec 2015, San Jose, California*&lt;/li&gt;
&lt;li&gt;Black Hat USA 2015, Las Vegas, Nevada&lt;/li&gt;
&lt;li&gt;SPACE 2015, Jaipur, India*&lt;sup&gt;,†&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Black Hat USA 2016, Las Vegas, Nevada&lt;/li&gt;
&lt;li&gt;USENIX Advances in Security Education 2016, Austin, Texas*&lt;/li&gt;
&lt;li&gt;USENIX Security 2016, Austin, Texas&lt;/li&gt;
&lt;li&gt;ACM CCS 2016, Vienna, Austria&lt;/li&gt;
&lt;li&gt;ACM MIST 2016, Vienna, Austria*&lt;/li&gt;
&lt;li&gt;ASEE Annual Conference 2017, Columbus, Ohio*&lt;/li&gt;
&lt;li&gt;ACM MIST 2017, Dallas, Texas*&lt;sup&gt;,†&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;High Confidence Software and Systems Conference 2019, Annapolis, Maryland*&lt;/li&gt;
&lt;li&gt;USENIX Security 2020, Boston, Massachusetts (held online due to COVID-19)*&lt;/li&gt;
&lt;li&gt;Workshop on Cyber Security Experimentation and Test 2022*&lt;/li&gt;
&lt;li&gt;55th Midwest Instruction and Computing Symposium, Cedar Falls, Iowa&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;* Presented, or paper included in proceedings.&lt;br/&gt;
&lt;sup&gt;†&lt;/sup&gt; Served on program committee.&lt;br/&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Statistics</title>
      <link>https://www.flyn.org/oss-statistics/</link>
      <pubDate>Thu, 12 Mar 2020 09:29:06 -0400</pubDate>
      <guid>https://www.flyn.org/oss-statistics/</guid>
      <description>&lt;h2 id=&#34;official-fedora-packages-maintained&#34;&gt;Official Fedora packages maintained&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;academic-admin&lt;/li&gt;
&lt;li&gt;checkmake&lt;/li&gt;
&lt;li&gt;dmapd&lt;/li&gt;
&lt;li&gt;festival&lt;/li&gt;
&lt;li&gt;fmt-ptrn&lt;/li&gt;
&lt;li&gt;gnupg-pkcs11-scd&lt;/li&gt;
&lt;li&gt;golang-github-alecthomas-assert-2&lt;/li&gt;
&lt;li&gt;golang-github-alecthomas-chroma-2&lt;/li&gt;
&lt;li&gt;golang-github-apache-thrift&lt;/li&gt;
&lt;li&gt;golang-github-azure-amqp&lt;/li&gt;
&lt;li&gt;golang-github-azure-amqp-common&lt;/li&gt;
&lt;li&gt;golang-github-bep-clocks&lt;/li&gt;
&lt;li&gt;golang-github-bep-workers&lt;/li&gt;
&lt;li&gt;golang-github-devigned-tab&lt;/li&gt;
&lt;li&gt;golang-github-evanw-esbuild&lt;/li&gt;
&lt;li&gt;golang-github-fatih-color&lt;/li&gt;
&lt;li&gt;golang-github-getkin-kin-openapi&lt;/li&gt;
&lt;li&gt;golang-github-gohugoio-locales&lt;/li&gt;
&lt;li&gt;golang-github-google-flatbuffers&lt;/li&gt;
&lt;li&gt;golang-github-google-subcommands&lt;/li&gt;
&lt;li&gt;golang-github-google-wire&lt;/li&gt;
&lt;li&gt;golang-github-googlecloudplatform-cloudsql-proxy&lt;/li&gt;
&lt;li&gt;golang-github-hashicorp-lru-2&lt;/li&gt;
&lt;li&gt;golang-github-johncgriffin-overflow&lt;/li&gt;
&lt;li&gt;golang-github-jwt-5&lt;/li&gt;
&lt;li&gt;golang-github-klauspost-compress&lt;/li&gt;
&lt;li&gt;golang-github-ncruces-strftime&lt;/li&gt;
&lt;li&gt;golang-github-pbnjay-memory&lt;/li&gt;
&lt;li&gt;golang-github-pelletier-toml-2&lt;/li&gt;
&lt;li&gt;golang-github-rwcarlsen-goexif&lt;/li&gt;
&lt;li&gt;golang-github-tj-assert&lt;/li&gt;
&lt;li&gt;golang-gopkg-neurosnap-sentences-1&lt;/li&gt;
&lt;li&gt;golang-lukechampine-uint128&lt;/li&gt;
&lt;li&gt;golang-modernc-cc-3&lt;/li&gt;
&lt;li&gt;golang-modernc-cc-4&lt;/li&gt;
&lt;li&gt;golang-modernc-ccgo-3&lt;/li&gt;
&lt;li&gt;golang-modernc-ccgo-4&lt;/li&gt;
&lt;li&gt;golang-modernc-ccorpus2&lt;/li&gt;
&lt;li&gt;golang-modernc-ebnf&lt;/li&gt;
&lt;li&gt;golang-modernc-ebnfutil&lt;/li&gt;
&lt;li&gt;golang-modernc-gc-2&lt;/li&gt;
&lt;li&gt;golang-modernc-httpfs&lt;/li&gt;
&lt;li&gt;golang-modernc-ir&lt;/li&gt;
&lt;li&gt;golang-modernc-irgo&lt;/li&gt;
&lt;li&gt;golang-modernc-libc&lt;/li&gt;
&lt;li&gt;golang-modernc-memory&lt;/li&gt;
&lt;li&gt;golang-modernc-opt&lt;/li&gt;
&lt;li&gt;golang-modernc-parser&lt;/li&gt;
&lt;li&gt;golang-modernc-scannertest&lt;/li&gt;
&lt;li&gt;golang-modernc-sortutil&lt;/li&gt;
&lt;li&gt;golang-modernc-sqlite&lt;/li&gt;
&lt;li&gt;golang-modernc-strutil&lt;/li&gt;
&lt;li&gt;golang-modernc-token&lt;/li&gt;
&lt;li&gt;golang-modernc-xc&lt;/li&gt;
&lt;li&gt;golang-modernc-y&lt;/li&gt;
&lt;li&gt;golang-modernc-z&lt;/li&gt;
&lt;li&gt;golang-nhooyr-websocket&lt;/li&gt;
&lt;li&gt;hugo (co-maintain with Athos Ribeiro)&lt;/li&gt;
&lt;li&gt;LaTeXML&lt;/li&gt;
&lt;li&gt;libdmapsharing4&lt;/li&gt;
&lt;li&gt;libvmi&lt;/li&gt;
&lt;li&gt;Mars&lt;/li&gt;
&lt;li&gt;nex&lt;/li&gt;
&lt;li&gt;openfst&lt;/li&gt;
&lt;li&gt;opengrm-ngram&lt;/li&gt;
&lt;li&gt;pocketsphinx&lt;/li&gt;
&lt;li&gt;python-ana&lt;/li&gt;
&lt;li&gt;python-angr&lt;/li&gt;
&lt;li&gt;python-bibtexparser&lt;/li&gt;
&lt;li&gt;python-cart&lt;/li&gt;
&lt;li&gt;python-ailment (co-maintain with Fabian Affolter)&lt;/li&gt;
&lt;li&gt;python-archinfo (co-maintain with Fabian Affolter)&lt;/li&gt;
&lt;li&gt;python-claripy (co-maintain with Fabian Affolter)&lt;/li&gt;
&lt;li&gt;python-cle&lt;/li&gt;
&lt;li&gt;python-colored-traceback&lt;/li&gt;
&lt;li&gt;python-cooldict&lt;/li&gt;
&lt;li&gt;python-intervaltree&lt;/li&gt;
&lt;li&gt;python-mulpyplexer&lt;/li&gt;
&lt;li&gt;python-plumbum&lt;/li&gt;
&lt;li&gt;python-pwntools&lt;/li&gt;
&lt;li&gt;python-pyvex&lt;/li&gt;
&lt;li&gt;python-ROPGadget&lt;/li&gt;
&lt;li&gt;python-rpyc&lt;/li&gt;
&lt;li&gt;python-sounddevice&lt;/li&gt;
&lt;li&gt;python-uv-dynamic-versioning&lt;/li&gt;
&lt;li&gt;rust-unidiff&lt;/li&gt;
&lt;li&gt;spim&lt;/li&gt;
&lt;li&gt;tex-cjw&lt;/li&gt;
&lt;li&gt;tikzit&lt;/li&gt;
&lt;li&gt;unicorn&lt;/li&gt;
&lt;li&gt;x2gowswrapper&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We also maintain a number of &lt;a href=&#34;../SRPMS/index.html&#34;&gt;submitted&lt;/a&gt;—but not yet accepted—packages.&lt;/p&gt;
&lt;h2 id=&#34;official-openwrt-packages-maintained&#34;&gt;Official OpenWrt packages maintained&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;bison&lt;/li&gt;
&lt;li&gt;bogofilter&lt;/li&gt;
&lt;li&gt;cyrus-sasl&lt;/li&gt;
&lt;li&gt;dmapd&lt;/li&gt;
&lt;li&gt;flex&lt;/li&gt;
&lt;li&gt;fuse-overlayfs&lt;/li&gt;
&lt;li&gt;gcc&lt;/li&gt;
&lt;li&gt;grilo&lt;/li&gt;
&lt;li&gt;grilo-plugins&lt;/li&gt;
&lt;li&gt;gst1-libav&lt;/li&gt;
&lt;li&gt;gst1-plugins-bad&lt;/li&gt;
&lt;li&gt;gst1-plugins-base&lt;/li&gt;
&lt;li&gt;gst1-plugins-good&lt;/li&gt;
&lt;li&gt;gst1-plugins-ugly&lt;/li&gt;
&lt;li&gt;gstreamer1&lt;/li&gt;
&lt;li&gt;hwloc&lt;/li&gt;
&lt;li&gt;krb5&lt;/li&gt;
&lt;li&gt;lcdgrilo&lt;/li&gt;
&lt;li&gt;lcdringer&lt;/li&gt;
&lt;li&gt;libdaq3&lt;/li&gt;
&lt;li&gt;libdmapsharing&lt;/li&gt;
&lt;li&gt;libexif&lt;/li&gt;
&lt;li&gt;libgcrypt&lt;/li&gt;
&lt;li&gt;libgee&lt;/li&gt;
&lt;li&gt;libgpg-error&lt;/li&gt;
&lt;li&gt;libmpeg2&lt;/li&gt;
&lt;li&gt;liboil&lt;/li&gt;
&lt;li&gt;libpsl&lt;/li&gt;
&lt;li&gt;libsoup3&lt;/li&gt;
&lt;li&gt;libtheora&lt;/li&gt;
&lt;li&gt;loudmouth&lt;/li&gt;
&lt;li&gt;luaexpat&lt;/li&gt;
&lt;li&gt;luafilesystem&lt;/li&gt;
&lt;li&gt;luasec&lt;/li&gt;
&lt;li&gt;luasocket&lt;/li&gt;
&lt;li&gt;mandoc&lt;/li&gt;
&lt;li&gt;nfdump&lt;/li&gt;
&lt;li&gt;openldap&lt;/li&gt;
&lt;li&gt;php8-pecl-imagick&lt;/li&gt;
&lt;li&gt;php8-pecl-krb5&lt;/li&gt;
&lt;li&gt;pigeonhole&lt;/li&gt;
&lt;li&gt;python3-libselinux&lt;/li&gt;
&lt;li&gt;python3-networkx&lt;/li&gt;
&lt;li&gt;quota&lt;/li&gt;
&lt;li&gt;scapy&lt;/li&gt;
&lt;li&gt;semodule-utils&lt;/li&gt;
&lt;li&gt;sendmail&lt;/li&gt;
&lt;li&gt;setools&lt;/li&gt;
&lt;li&gt;shared-mime-info&lt;/li&gt;
&lt;li&gt;snort3&lt;/li&gt;
&lt;li&gt;totem-pl-parser&lt;/li&gt;
&lt;li&gt;vala&lt;/li&gt;
&lt;li&gt;vips&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;formal-bug-reports-or-report-contributions&#34;&gt;Formal bug reports or report contributions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://bugzilla.redhat.com/buglist.cgi?email1=flyn.org&amp;amp;amp;emailassigned_to1=1&amp;amp;amp;emailcc1=1&amp;amp;amp;emaildocs_contact1=1&amp;amp;amp;emaillongdesc1=1&amp;amp;amp;emailqa_contact1=1&amp;amp;amp;emailreporter1=1&amp;amp;amp;emailtype1=substring&amp;amp;amp;query_format=advanced&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Red Hat/Fedora&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bugzilla.rpmfusion.org/buglist.cgi?emailassigned_to1=1&amp;amp;amp;query_format=advanced&amp;amp;amp;order=Bug%20Number&amp;amp;amp;emailcc1=1&amp;amp;amp;emailreporter1=1&amp;amp;amp;emaillongdesc1=1&amp;amp;amp;email1=flyn.org&amp;amp;amp;emailtype1=substring&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RPM Fusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bugzilla.gnome.org/buglist.cgi?email1=flyn.org&amp;amp;amp;emailassigned_to1=1&amp;amp;amp;emailcc1=1&amp;amp;amp;emaillongdesc1=1&amp;amp;amp;emailqa_contact1=1&amp;amp;amp;emailreporter1=1&amp;amp;amp;emailtype1=substring&amp;amp;amp;query_format=advanced&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GNOME&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bugzilla.mozilla.org/buglist.cgi?email1=%40flyn.org&amp;amp;emailtype1=substring&amp;amp;emailbug_mentor1=1&amp;amp;emailcc1=1&amp;amp;resolution=---&amp;amp;emailassigned_to1=1&amp;amp;emailqa_contact1=1&amp;amp;list_id=16792227&amp;amp;emaillongdesc1=1&amp;amp;query_format=advanced&amp;amp;emailreporter1=1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Mozilla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bugs.freedesktop.org/buglist.cgi?email1=flyn.org&amp;amp;amp;emailassigned_to1=1&amp;amp;amp;emailcc1=1&amp;amp;amp;emaillongdesc1=1&amp;amp;amp;emailqa_contact1=1&amp;amp;amp;emailreporter1=1&amp;amp;amp;emailtype1=substring&amp;amp;amp;query_format=advanced&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;freedesktop.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://bugzilla.xensource.com/bugzilla/buglist.cgi?emailassigned_to1=1&amp;amp;amp;query_format=advanced&amp;amp;amp;emailreporter1=1&amp;amp;amp;emailcc1=1&amp;amp;amp;order=Bug%20Number&amp;amp;amp;emaillongdesc1=1&amp;amp;amp;email1=flyn.org&amp;amp;amp;emailtype1=substring&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Xen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://bugzilla.padl.com/buglist.cgi?query_format=advanced&amp;amp;amp;emailassigned_to1=1&amp;amp;amp;emailreporter1=1&amp;amp;amp;emailcc1=1&amp;amp;amp;emaillongdesc1=1&amp;amp;amp;emailtype1=substring&amp;amp;amp;email1=flyn.org&amp;amp;amp;order=Bug&amp;#43;Number&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PADL (OpenLDAP)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bugzilla.samba.org/buglist.cgi?email1=flyn.org&amp;amp;amp;emailassigned_to1=1&amp;amp;amp;emailcc1=1&amp;amp;amp;emaillongdesc1=1&amp;amp;amp;emailqa_contact1=1&amp;amp;amp;emailreporter1=1&amp;amp;amp;emailtype1=substring&amp;amp;amp;query_format=advanced&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Samba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://bugzilla.abisource.com/buglist.cgi?query_format=advanced&amp;amp;amp;emailassigned_to1=1&amp;amp;amp;emailreporter1=1&amp;amp;amp;emailqa_contact1=1&amp;amp;amp;emailcc1=1&amp;amp;amp;emaillongdesc1=1&amp;amp;amp;emailtype1=substring&amp;amp;amp;email1=flyn.org&amp;amp;amp;order=Bug&amp;#43;Number&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;AbiSource&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gcc.gnu.org/bugzilla/buglist.cgi?cf_known_to_fail_type=allwords&amp;amp;amp;cf_known_to_work_type=allwords&amp;amp;amp;email1=flyn.org&amp;amp;amp;emailassigned_to1=1&amp;amp;amp;emailcc1=1&amp;amp;amp;emaillongdesc1=1&amp;amp;amp;emailreporter1=1&amp;amp;amp;emailtype1=substring&amp;amp;amp;list_id=124398&amp;amp;amp;query_format=advanced&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GCC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://trac.macports.org/search?q=flyn.org&amp;amp;amp;noquickjump=1&amp;amp;amp;ticket=on&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MacPorts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bugs.php.net/search.php?search_for=flyn&amp;amp;amp;boolean=0&amp;amp;amp;limit=30&amp;amp;amp;order_by=&amp;amp;amp;direction=DESC&amp;amp;amp;cmd=display&amp;amp;amp;status=All&amp;amp;amp;bug_type=All&amp;amp;amp;project=All&amp;amp;amp;php_os=&amp;amp;amp;phpver=&amp;amp;amp;cve_id=&amp;amp;amp;assign=&amp;amp;amp;author_email=&amp;amp;amp;bug_age=0&amp;amp;amp;bug_updated=0&amp;amp;amp;commented_by=&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PHP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Thank you!</title>
      <link>https://www.flyn.org/sent/</link>
      <pubDate>Thu, 12 Mar 2020 09:29:06 -0400</pubDate>
      <guid>https://www.flyn.org/sent/</guid>
      <description>&lt;p&gt;Your message is being delivered, and we look forward to receiving it.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Adventure</title>
      <link>https://www.flyn.org/notes/adventure/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/adventure/</guid>
      <description>&lt;p&gt;I have been playing William Crowther’s Colossal Cave Adventure with my children.&lt;/p&gt;
&lt;p&gt;We have found these actions useful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;north&lt;/li&gt;
&lt;li&gt;south&lt;/li&gt;
&lt;li&gt;east&lt;/li&gt;
&lt;li&gt;west&lt;/li&gt;
&lt;li&gt;ne&lt;/li&gt;
&lt;li&gt;se&lt;/li&gt;
&lt;li&gt;nw&lt;/li&gt;
&lt;li&gt;sw&lt;/li&gt;
&lt;li&gt;up&lt;/li&gt;
&lt;li&gt;down&lt;/li&gt;
&lt;li&gt;building&lt;/li&gt;
&lt;li&gt;climb&lt;/li&gt;
&lt;li&gt;downstream&lt;/li&gt;
&lt;li&gt;drop&lt;/li&gt;
&lt;li&gt;enter&lt;/li&gt;
&lt;li&gt;forest&lt;/li&gt;
&lt;li&gt;info&lt;/li&gt;
&lt;li&gt;inventory&lt;/li&gt;
&lt;li&gt;pour&lt;/li&gt;
&lt;li&gt;save&lt;/li&gt;
&lt;li&gt;score&lt;/li&gt;
&lt;li&gt;take&lt;/li&gt;
&lt;li&gt;throw&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We also found a technique which allows us to script Adventure when running the
program from a graphical terminal. Since Adventure responds to commands entered on standard in,
we can paste a series of commands into Adventure. For example, the following scripts work as
described when executed immediately after starting Adventure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;to-hall-of-mists.txt&#34;&gt;to Western Hall of Mists, near maze&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;to-bedquilt.txt&#34;&gt;to bedquilt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;to-long-hall.txt&#34;&gt;to long hall&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Such scripting is confounded by rooms with randomized passages, so you
should proceed through passages like these manually.&lt;/p&gt;
&lt;p&gt;We have been using Graphviz to record the adventures we have had.
I share here our map in two formats:
&lt;a href=&#34;adventure.dot&#34;&gt;.dot&lt;/a&gt;
&lt;a href=&#34;adventure.svg&#34;&gt;.svg&lt;/a&gt;
The map also appears below.&lt;/p&gt;


















&lt;figure  id=&#34;figure-colossal-cave-adventure-map&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;adventure.svg&#34; alt=&#34;Colossal Cave Adventure map&#34; loading=&#34;lazy&#34; data-zoomable width=&#34;100%&#34; /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      Colossal Cave Adventure map
    &lt;/figcaption&gt;&lt;/figure&gt;

</description>
    </item>
    
    <item>
      <title>alsa-utils-0.5.10-toggle</title>
      <link>https://www.flyn.org/patches/alsa-utils-0.5.10-toggle/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/alsa-utils-0.5.10-toggle/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;alsa-utils-0.5.10-toggle.patch.gz&#34;&gt;alsa-utils-0.5.10-toggle&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for the &lt;a href=&#34;http://www.alsa-project.org&#34;&gt;Advanced Linux
Sound Architecture utilities&lt;/a&gt; which adds mute toggling to amixer.
This really makes sence when a user wishes to use a remote control
or joystick to control his sound device.  For example, the command
amixer set Master toggle could be run whenever the mute button is
pressed on a remote control.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Apple</title>
      <link>https://www.flyn.org/notes/apple/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/apple/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This is a collection of Open Source applications for the Macintosh.
This collection is intended to supplement package manager-based
distributions such as &lt;a href=&#34;http://www.macports.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MacPorts&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you would like to build these applications yourself using my
instructions, then you will need to install
MacPorts. The following instructions
document how to install GTK+/Quartz:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ensure that you have Apple&#39;s X11 package installed.&lt;/li&gt;
&lt;li&gt;Install Apple&#39;s &lt;a href=&#34;http://developer.apple.com/tools/xcode/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Xcode&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Install &lt;a href=&#34;http://www.macports.org/%22%3eMacPorts&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MacPorts&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Add the following lines to &lt;code&gt;~/.bash_profile&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/opt/local/bin:$PATH&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;k&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CPPFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;-I/opt/local/include $CPPFLAGS&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;k&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;-L/opt/local/lib $LDFLAGS&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Use the command &lt;code&gt;sudo port install PACKAGE&lt;/code&gt; to build and install the following packages and their dependencies:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;cairo +quartz+no_x11&lt;/li&gt;
&lt;li&gt;pango +quartz+no_x11&lt;/li&gt;
&lt;li&gt;gtk2 +quartz+no_x11&lt;/li&gt;
&lt;li&gt;poppler +quartz&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;packages&#34;&gt;Packages&lt;/h2&gt;
&lt;h3 id=&#34;abiword&#34;&gt;AbiWord&lt;/h3&gt;


















&lt;figure  id=&#34;figure-abiword-screenshot&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;abiword.png&#34; alt=&#34;AbiWord screenshot&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      AbiWord screenshot
    &lt;/figcaption&gt;&lt;/figure&gt;

&lt;p&gt;&lt;a href=&#34;http://www.abisource.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;AbiWord&lt;/a&gt; is a word processor.  This package
contains a native build for Mac OS X and does not require X11.
&lt;a href=&#34;AbiWord-2.8.6-10.6.dmg.gz&#34;&gt;Download&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;building-from-source&#34;&gt;Building from Source&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Edit AbiWord&#39;s &lt;code&gt;configure&lt;/code&gt; script, setting &lt;code&gt;ABIWORD_CONTENTSDIR&lt;/code&gt; to &lt;code&gt;/Applications/AbiWord.app/Contents&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;./configure&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;make&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;sudo make install&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;bugs-filed&#34;&gt;Bugs Filed&lt;/h4&gt;
&lt;p&gt;I have filed or reviewed the following bugs related to AbiWord:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;del&gt;Abisource Bugzilla &lt;a href=&#34;http://bugzilla.abisource.com/show_bug.cgi?id=11793&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#11793&lt;/a&gt;, Build Abiword against GTK/Quartz&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;AbiSource Bugzilla &lt;a href=&#34;http://bugzilla.abisource.com/show_bug.cgi?id=12446&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#12446&lt;/a&gt;, Compile error on Snow Leopard&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;Abisource Bugzilla &lt;a href=&#34;http://bugzilla.abisource.com/show_bug.cgi?id=13233&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#13233&lt;/a&gt;, configure script does not allow customization of ABIWORD_CONTENTSDIR&lt;/li&gt;
&lt;li&gt;MacPorts ticket &lt;a href=&#34;https://trac.macports.org/ticket/17012&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#17012&lt;/a&gt;, Request newer build of abiword&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;gnumeric&#34;&gt;Gnumeric&lt;/h3&gt;


















&lt;figure  id=&#34;figure-gnumeric-screenshot&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;gnumeric.png&#34; alt=&#34;Gnumeric screenshot&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      Gnumeric screenshot
    &lt;/figcaption&gt;&lt;/figure&gt;

&lt;p&gt;&lt;a href=&#34;http://www.gnome.org/projects/gnumeric/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Gnumeric&lt;/a&gt; is a
spreadsheet application.  The following instructions will build the
application to use GTK&#39;s Quartz backend (no X11 required.)  Mac OS X 10.4
or newer is required for this build.  GTK&#39;s Quartz backend is currently
experimental, so this package is also unstable.  These instructions
are provided so that people may more easily build and test GTK Quartz.
&lt;a href=&#34;Gnumeric-1.10.12-10.6.dmg.gz&#34;&gt;Download&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;building-from-source-1&#34;&gt;Building from Source&lt;/h4&gt;
&lt;p&gt;Use the command &lt;code&gt;sudo port install gnumeric&lt;/code&gt; to build and install gnumeric.&lt;/p&gt;
&lt;h4 id=&#34;bugs-filed-1&#34;&gt;Bugs Filed&lt;/h4&gt;
&lt;p&gt;I have filed or reviewed the following bugs related to this process and
the resulting Gnumeric application:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;del&gt;GNOME Bugzilla &lt;a href=&#34;http://bugzilla.gnome.org/show_bug.cgi?id=382925&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#382925&lt;/a&gt;, gail doesn&#39;t build with Quartz GDK backend&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;GNOME Bugzilla &lt;a href=&#34;http://bugzilla.gnome.org/show_bug.cgi?id=396329&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#396329&lt;/a&gt;, src/Makefile still includes -lpopt&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;GNOME Bugzilla [#396434}(http://bugzilla.gnome.org/show_bug.cgi?id=396434), Gnumeric crashes when mouse over File-&amp;gt;Open on Mac OS X / gtk-quartz&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;GNOME Bugzilla &lt;a href=&#34;http://bugzilla.gnome.org/show_bug.cgi?id=396438&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#396438&lt;/a&gt;, Build fails on Mac OS X / gtk-quartz because of missing -lgthread-2.0&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;GNOME Bugzilla &lt;a href=&#34;http://bugzilla.gnome.org/show_bug.cgi?id=396654&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#396654&lt;/a&gt;, libgnomeprint ./configure fails on Mac OS X&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;GNOME Bugzilla &lt;a href=&#34;http://bugzilla.gnome.org/show_bug.cgi?id=477381&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#477381&lt;/a&gt;, Use the Mac OS X menubar when built with GTK+/Quartz&lt;/li&gt;
&lt;li&gt;GNOME Bugzilla &lt;a href=&#34;http://bugzilla.gnome.org/show_bug.cgi?id=534134&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#534134&lt;/a&gt;, Gnumeric does not seem to support XDG Base Directory Specification&lt;/li&gt;
&lt;li&gt;&lt;del&gt;GNOME Bugzilla &lt;a href=&#34;http://bugzilla.gnome.org/show_bug.cgi?id=600085&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#600085&lt;/a&gt;, Cell labels&#39; text not rendered on Mac OS X / Quartz&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;MacPorts ticket &lt;a href=&#34;http://trac.macports.org/ticket/14853&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#14853&lt;/a&gt;, RFE: have icon-naming-utils not depend on p5-getopt-long&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;MacPorts ticket &lt;a href=&#34;http://trac.macports.org/ticket/15052&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#15052&lt;/a&gt;, pango: Font display problems when compiled against cairo 1.6.4&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;MacPorts ticket #15558](&lt;a href=&#34;http://trac.macports.org/ticket/15558%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://trac.macports.org/ticket/15558)&lt;/a&gt;, Provide quartz-only variant of cairo port&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;MacPorts ticket &lt;a href=&#34;http://trac.macports.org/ticket/15559&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#15559&lt;/a&gt;, gtk2 error for missing ${prefix}/include/cairo/cairo-quartz.h incorrect&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;MacPorts ticket &lt;a href=&#34;http://trac.macports.org/ticket/15560&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#15560&lt;/a&gt;, Patch gnumeric to integrate into Mac OS X menu&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;MacPorts ticket &lt;a href=&#34;http://trac.macports.org/ticket/16083&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#16083&lt;/a&gt;, gnumeric row/column labels show broken character box instead of the letter/number&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;MacPorts ticket &lt;a href=&#34;http://trac.macports.org/ticket/16798&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#16798&lt;/a&gt;, gnumeric fails to build on Leopard&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;MacPorts ticket &lt;a href=&#34;http://trac.macports.org/ticket/17049&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#17049&lt;/a&gt;, pango +quartz cannot build 64-bit&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;MacPorts ticket &lt;a href=&#34;http://trac.macports.org/ticket/20924&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#20924&lt;/a&gt;, OS X 10.6 with +no_x11 +quartz: Pango-WARNING **: shaping failure, expect ugly output&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;MacPorts ticket &lt;a href=&#34;http://trac.macports.org/ticket/21624&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#21624&lt;/a&gt;, pango @1.26.0_0+macosx makes software freeze&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;MacPorts ticket &lt;a href=&#34;http://trac.macports.org/ticket/22581&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#22581&lt;/a&gt;, new Portfile: goffice08&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;building-application-bundle&#34;&gt;Building Application Bundle&lt;/h4&gt;
&lt;p&gt;In order to make an Application Bundle for Gnumeric, follow these steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use the command &lt;code&gt;sudo port install ige-mac-bundler&lt;/code&gt; to build and install the ige-mac-bundler utility&lt;/li&gt;
&lt;li&gt;Download the &lt;a href=&#34;Gnumeric.tar.gz&#34;&gt;definitions of Gnumeric.app&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Extract the Gnumeric.app definitions, enter its directory and execute the following:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ige-mac-bundler Gnumeric.bundle
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Replace &lt;code&gt;Gnumeric.app/Contents/Resources/etc/pango&lt;/code&gt; with the contents of &lt;code&gt;/opt/local/etc/pango&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Double-click on Gnumeric (Gnumeric.app) in the Finder.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;gthumb&#34;&gt;Gthumb&lt;/h3&gt;


















&lt;figure  id=&#34;figure-gthumb-screenshot&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;gthumb.png&#34; alt=&#34;Gthumb screenshot&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      Gthumb screenshot
    &lt;/figcaption&gt;&lt;/figure&gt;

&lt;p&gt;&lt;a href=&#34;http://gthumb.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Gthumb&lt;/a&gt; is an
image viewer.  The following instructions will build the
application to use GTK&#39;s Quartz backend (no X11 required.)  Mac OS X 10.4
or newer is required for this build.  GTK&#39;s Quartz backend is currently
experimental, so this package is also unstable.  These instructions
are provided so that people may more easily build and test GTK Quartz.&lt;/p&gt;
&lt;h4 id=&#34;building-from-source-2&#34;&gt;Building from Source&lt;/h4&gt;
&lt;p&gt;Use the command &lt;code&gt;sudo port install gthumb&lt;/code&gt; to build and install gthumb.&lt;/p&gt;
&lt;h4 id=&#34;bugs-filed-2&#34;&gt;Bugs Filed&lt;/h4&gt;
&lt;p&gt;I have filed or reviewed the following bugs related to this process and the resulting Gthumb application:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;del&gt;GNOME Bugzilla &lt;a href=&#34;http://bugzilla.gnome.org/show_bug.cgi?id=551225&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#551225&lt;/a&gt;, Gthumb will not build against GTK/Quartz (Mac OS), requires X11&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;GNOME Bugzilla &lt;a href=&#34;http://bugzilla.gnome.org/show_bug.cgi?id=554240&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#554240&lt;/a&gt;, Use the Mac OS X menubar when built with GTK+/Quartz&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;building-application-bundle-1&#34;&gt;Building Application Bundle&lt;/h4&gt;
&lt;p&gt;In order to make an Application Bundle for Gthumb, follow these steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use the command &lt;code&gt;sudo port install ige-mac-bundler&lt;/code&gt; to build and install the ige-mac-bundler utility&lt;/li&gt;
&lt;li&gt;Download the &lt;a href=&#34;Gthumb.tar.gz&#34;&gt;definitions of Gthumb.app&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Extract the Gthumb.app definitions, enter its directory and execute the following:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ige-mac-bundler Gthumb.bundle
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Double-click on Gthumb (Gthumb.app) in the Finder.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;inkscape&#34;&gt;Inkscape&lt;/h3&gt;


















&lt;figure  id=&#34;figure-inkscape-screenshot&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;inkscape.png&#34; alt=&#34;Inkscape screenshot&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      Inkscape screenshot
    &lt;/figcaption&gt;&lt;/figure&gt;

&lt;p&gt;&lt;a href=&#34;http://www.inkscape.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Inkscape&lt;/a&gt; is a
vector graphics illustration program.  The following instructions will build the
application to use GTK&#39;s Quartz backend (no X11 required.)  Mac OS X 10.4
or newer is required for this build.  GTK&#39;s Quartz backend is currently
experimental, so this package is also unstable.  These instructions
are provided so that people may more easily build and test GTK Quartz.
&lt;a href=&#34;Inkscape-0.48-10.6.dmg.gz&#34;&gt;Download&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;building-from-source-3&#34;&gt;Building from Source&lt;/h4&gt;
&lt;p&gt;Use the command &lt;code&gt;sudo port install inkscape&lt;/code&gt; to build and install inkscape.&lt;/p&gt;
&lt;h4 id=&#34;bugs-filed-3&#34;&gt;Bugs Filed&lt;/h4&gt;
&lt;p&gt;I have filed or reviewed the following bugs related to this process and the resulting Inkscape application:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;del&gt;Inkscape / Launchpad bug &lt;a href=&#34;https://bugs.launchpad.net/inkscape/&amp;#43;bug/251982&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#251982&lt;/a&gt;, Inkscape&#39;s -g option does not make sense when using GTK/Quartz on Mac OS X&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;libproxy bug &lt;a href=&#34;http://code.google.com/p/libproxy/issues/detail?id=101&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#101&lt;/a&gt;, libproxy does not compile on Mac OS X 10.6.2&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;To file: Xft2 (required by Inkscape) requires xorg-proto and xrender&lt;/li&gt;
&lt;li&gt;To file: Xft2 build requires xorg-xcmiscproto and xorg-bigreqsproto, but Portfile does not&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;building-application-bundle-2&#34;&gt;Building Application Bundle&lt;/h4&gt;
&lt;p&gt;In order to make an Application Bundle for Inkscape, follow these steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use the command &lt;code&gt;sudo port install ige-mac-bundler&lt;/code&gt; to build and install the ige-mac-bundler utility&lt;/li&gt;
&lt;li&gt;Download the &lt;a href=&#34;Inkscape.tar.gz&#34;&gt;definitions of Inkscape.app&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Extract the Inkscape.app definitions, enter its directory and execute the following:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ige-mac-bundler Inkscape.bundle
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Double-click on Inkscape (Inkscape.app) in the Finder.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>appliance-config</title>
      <link>https://www.flyn.org/abandoned/appliance-config/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/appliance-config/</guid>
      <description>&lt;p&gt;Configuration system for a network appliance&lt;/p&gt;
&lt;img src=&#34;appliance-config.png&#34; alt=&#34;Screenshot&#34; class=&#34;center-framed&#34;/&gt;
&lt;img src=&#34;ac-architecture.png&#34; alt=&#34;Screenshot&#34; class=&#34;center-framed&#34;/&gt;
&lt;h1&gt;Overview&lt;/h1&gt;
&lt;p&gt;
Appliance-config is a web-based configuration system intended for use
on network appliances.  The core functionality of the system provides
the following features:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fileserver (WebDAV, NFS and SMB)&lt;/li&gt;
&lt;li&gt;CUPS-based print server&lt;/li&gt;
&lt;li&gt;Backup and restore system&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The backup system can replicate data to an external disk or an external
host that also runs appliance-config.  When backing up to a remote host,
appliance-config can encrypt the data so that the owner of the remote
host can not read it.  In this way, two people can help each other by
hosting a backup without nessessarily sharing the data that is backed up.
&lt;/p&gt;
&lt;p&gt;
Additional functionality may be implemented as a module.  Appliance-config
uses a CGI-based tool to present configuration options to an
administrator.  After configuration options are saved, the system
invokes a backend to implement any necessary changes to system services.
The system&amp;apos;s backends are written primarily as bash shell scripts.
&lt;/p&gt;
&lt;h1&gt;Nasty Details&lt;/h1&gt;
&lt;p&gt;
As documented in the overview, the appliance-config system consists of
a daemon that runs as root and modules that handle configuring services.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
The daemon waits for notification that a configuration has changed.
After receiving a notification, the daemon executes the modules&amp;apos;
backend scripts.
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Each configuration module consists of:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;dl&gt;
&lt;dt&gt;CGI Program&lt;/dt&gt;
&lt;dd&gt;When executed by a GET, the program displays a form.  When executed by a POST, it writes configuration data to a file or directions to a spool and notifies the daemon of the change.&lt;/dd&gt;
&lt;dt&gt;Configuration File&lt;/dt&gt;
&lt;dd&gt;Configuration files are written by the CGI programs.&lt;/dd&gt;
&lt;dt&gt;Backend Script&lt;/dt&gt;
&lt;dd&gt;Executed by the daemon after the daemon receives a notice.  Reads appliance-config configuration files and writes system configurations based on templates.  Reconfigures and restarts system services.  May also read a spool and perform some action based on its contents.&lt;/dd&gt;
&lt;/dl&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>Aquinas</title>
      <link>https://www.flyn.org/projects/Aquinas/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/Aquinas/</guid>
      <description>&lt;p&gt;Aquinas is an interactive learning system that aims to teach computer
programming and exploit development.  Teachers define programming
projects, and students complete the projects and submit their work using
Git. Aquinas provides a website that lists the projects and provides
a summary of each student&amp;rsquo;s progress.&lt;/p&gt;
&lt;p&gt;A number of goals drove the design of Aquinas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Allow for projects that involve network programming and exploit
development.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Facilitate easy-to-define projects with a consistent specification
language.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ease reuse of projects across many programming languages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Allow for high-quality assignment instructions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide a web- and Git-based interface to students.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide for automated grading and student feedback.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apply the principle of least privilege and use a type-safe language.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;aquinas-dependencies&#34;&gt;Aquinas dependencies&lt;/h1&gt;
&lt;p&gt;Building, configuring, and deploying Aquinas requires the following
software:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;make&lt;/li&gt;
&lt;li&gt;GCC, including support for C++ (to build VMs)&lt;/li&gt;
&lt;li&gt;A C library suitable for static linking&lt;/li&gt;
&lt;li&gt;expect&lt;/li&gt;
&lt;li&gt;qemu-system-x86&lt;/li&gt;
&lt;li&gt;The Go programming language&lt;/li&gt;
&lt;li&gt;The Perl programming language (to build VMs)&lt;/li&gt;
&lt;li&gt;The jq JSON parser&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;An ssh client&lt;/li&gt;
&lt;li&gt;LaTeXML and TeX Live&lt;/li&gt;
&lt;li&gt;The tidy HTML beautifier&lt;/li&gt;
&lt;li&gt;The dig DNS resolver&lt;/li&gt;
&lt;li&gt;The Hugo website generator&lt;/li&gt;
&lt;li&gt;The wget HTTP utility (to build VMs)&lt;/li&gt;
&lt;li&gt;which&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;obtaining-aquinas&#34;&gt;Obtaining Aquinas&lt;/h1&gt;
&lt;p&gt;Download Aquinas using:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone --recurse-submodules https://www.flyn.org/git/aquinas
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;building-aquinas&#34;&gt;Building Aquinas&lt;/h1&gt;
&lt;p&gt;Building Aquinas can take a long time. If you prefer to install
Aquinas using the binary VM images we provide, then download them from
&lt;a href=&#34;https://www.flyn.org/projects/Aquinas&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.flyn.org/projects/Aquinas&lt;/a&gt;,
and skip to the section titled &amp;ldquo;Configuring and deploying Aquinas.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;quick-check&#34;&gt;Quick check&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Run &amp;ldquo;make deps all&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &amp;ldquo;(sudo) ./build/httpd -dummy -root www/public/&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You should now be able to browse to http://localhost/. The dynamic
aspects of Aquinas will not work without a full installation, but you
should be able to review most of Aquinas&amp;rsquo; look and feel using this
dummy mode.&lt;/p&gt;
&lt;h2 id=&#34;full-build&#34;&gt;Full build&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Review aquinas-build.json to facilitate installing Aquinas at your
site. The default values should be adequate in most cases.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &amp;ldquo;make deps all vms&amp;rdquo;. This will build some utilities and the Aquinas VMs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;configuring-and-deploying-aquinas&#34;&gt;Configuring and deploying Aquinas&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install your public SSH key the VMs by running
&amp;ldquo;./aquinas-setup-ssh-developer DEVELOPER-HOME/.ssh/id_rsa.pub&amp;rdquo; with
root privileges. (Mounting the VM disk images requires root privileges.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install each disk image (e.g.,
aquinas-git-alpine-x86-64.img) and each domain configuration (e.g.,
vm-aquinas-git.cfg) so that they can be run by your hypervisor. Edit
each domain configuration to suit your needs.  (Note that you will need
to build a new VM around each disk image if not using Xen.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update your DHCP service to provide the correct IP address to each
domain. Refer to each domain configuration for the host&amp;rsquo;s MAC address.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update your DNS service to provide an appropriate A record for each
domain. Refer to each domain configuration for the host&amp;rsquo;s name.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start each configured VM.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use SSH to sign in on each VM to edit /etc/aquinas/aquinas.json. It
is likely you will need to modify &amp;ldquo;domain,&amp;rdquo; &amp;ldquo;logServer,&amp;rdquo; &amp;ldquo;emailRegex,&amp;rdquo;
&amp;ldquo;emailRelay,&amp;rdquo; emailSender,&amp;quot; and &amp;ldquo;emailSenderName.&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install a certificate and private key in aquinas-www&amp;rsquo;s /etc/httpd
directory, writing them to the files aquinas.cert and aquinas.key,
respectively.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure syslog-ng on each VM. The /etc/hosts files on aquinas-user
and aquinas-target must contain records for the syslog server (which
accepts connections on TCP port 6514), as their firewall prohibits
DNS queries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure collectd on each VM. The /etc/hosts files on aquinas-user
and aquinas-target must contain records for the collectd server (which
accepts connections on UDP port 25826), as their firewall prohibits
DNS queries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a record for your target host to /etc/hosts on your user host;
neither can make DNS requests, as their firewall prohibits DNS queries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a record for your user host to /etc/hosts on your target host.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add &amp;ldquo;server [IP of git host]&amp;rdquo; to /etc/ntpd.conf on www, user, and target.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit /etc/config/system on each VM. You might need to adjust the timezone,
and you should set the NTP server to the IP address of aquinas-git
host on all of the VMs except for aquinas-git. Note that the firewall
rules will allow NTP queries from aquinas-user and aquinas-target only
to aquinas-git, and these hosts can only reference aquinas-git by its
IP address due to the firewall blocking DNS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On your development computer, run &amp;ldquo;./aquinas-setup-ssh&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On aquinas-www, run &amp;ldquo;sudo -u http aquinas-add-student test PASSWORD &amp;lsquo;Test Account&amp;rsquo;&amp;rdquo;.
Ensure you select a strong password to replace PASSWORD.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On your development computer, run &amp;ldquo;./aquinas-add-teacher
DEVELOPER-HOME/.ssh/id_rsa.pub&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push a projects repository to aquinas-git:/home/teacher/projects.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push a records repository to aquinas-git:/home/teacher/records.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push the HTML documents to aquinas-www using &lt;code&gt;make all publish&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On your development computer and from the directory test/, run
&amp;ldquo;./test-all.&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;writing-a-project&#34;&gt;Writing a project&lt;/h1&gt;
&lt;p&gt;Writing a project is a matter of creating a machine-readable JSON file
to define the project and a LaTeX (or Markdown) fragment to instruct
students in how to complete the project.&lt;/p&gt;
&lt;h2 id=&#34;project-definition&#34;&gt;Project definition&lt;/h2&gt;
&lt;p&gt;Here is the definition of a very simple project named &lt;em&gt;unix&lt;/em&gt;. The
absence of the &lt;em&gt;checks&lt;/em&gt; keyword means that Aquinas will not grade this
project. Because &lt;em&gt;languages&lt;/em&gt; is set to &lt;em&gt;none&lt;/em&gt;, Aquinas will generate no
language-specific variants of this project. Perhaps this project could
guide the student through an introduction to UNIX without requiring a
graded deliverable.&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-fallback&#34; data-lang=&#34;fallback&#34;&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;        &amp;#34;name&amp;#34;: &amp;#34;unix&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;summary&amp;#34;: &amp;#34;An introduction to Unix and the Bourne shell&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &amp;#34;languages&amp;#34;: [ &amp;#34;none&amp;#34; ]
&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here is another language-agnostic project. This project, &lt;em&gt;git&lt;/em&gt;, assumes
the completion of &lt;em&gt;unix&lt;/em&gt;. Aquinas will take this into account when
ordering the list of projects presented to a student.  This project
provides a check (&lt;em&gt;checks&lt;/em&gt;); running the &lt;em&gt;command&lt;/em&gt; &lt;em&gt;cat NOTES&lt;/em&gt; from the
root of the student&amp;rsquo;s Git repository should print &amp;ldquo;In case of fire: git
commit, git push, and leave the building!&amp;rdquo; to standard out. (I.e., the file
NOTES should exist in the Git repository and it should contain &amp;ldquo;In case
of fire: &amp;hellip;&amp;rdquo;)&lt;/p&gt;
&lt;p&gt;The value in the &lt;em&gt;stdout&lt;/em&gt; field is this string, base64 encoded (but not
depicted in its entirety here). The base64 encoding is to allow such
values to contain binary data.&lt;/p&gt;
&lt;p&gt;Aquinas will present the string defined in a check&amp;rsquo;s hint field as part
of the feedback it provides upon grading a failed submission.&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-fallback&#34; data-lang=&#34;fallback&#34;&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;	&amp;#34;name&amp;#34;: &amp;#34;git&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;summary&amp;#34;: &amp;#34;An introduction to the Git version control system&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;languages&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;none&amp;#34;
&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;	&amp;#34;prerequisites&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;unix&amp;#34;
&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;	&amp;#34;checks&amp;#34;: [
&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;			&amp;#34;type&amp;#34;: &amp;#34;basic&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;#34;parameters&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;command&amp;#34;: &amp;#34;cat NOTES&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;stdin&amp;#34;: null,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;stdout&amp;#34;: &amp;#34;SW4gY2Fz...&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;stderr&amp;#34;: null,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;exitCode&amp;#34;: 0,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;hint&amp;#34;: &amp;#34;Does your NOTES file contain the correct string?&amp;#34;
&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&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Using a check of kind &lt;em&gt;compare&lt;/em&gt; causes Aquinas to evaluate student work
in a different way. With &lt;em&gt;compare&lt;/em&gt; checks, Aquinas can reveal its test
inputs without allowing the student to tailor his solution to a limited
test plan.  The idea is to use a generator to produce random input that is
well-formed with respect to the project definition. Aquinas generates such
input, which it provides both to the reference solution and the student
submission. If the programs&amp;rsquo; outputs match, then Aquinas deems the student
submission correct. Otherwise, the student submission is incorrect.
A &lt;em&gt;compare&lt;/em&gt; check requires the definition of a &lt;em&gt;reference&lt;/em&gt; solution
along with a program that generates standard input data (&lt;em&gt;genstdin&lt;/em&gt;)
or a program that generates command-line arguments (&lt;em&gt;gencmdargs&lt;/em&gt;).
The following example demonstrates a &lt;em&gt;compare&lt;/em&gt; check that generates
standard input data.&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-fallback&#34; data-lang=&#34;fallback&#34;&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;	&amp;#34;kind&amp;#34;: &amp;#34;compare&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;parameters&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;command&amp;#34;: &amp;#34;./project&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;reference&amp;#34;: &amp;#34;projectC.c&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;genstdin&amp;#34;: &amp;#34;generator-project.c&amp;#34;
&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Assume the project processes non-negative integers, read from standard
input. The following definition of &lt;em&gt;generator-project.c&lt;/em&gt; generates
such inputs.&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-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#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;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#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;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;sys/time.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#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;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;timeval&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tv&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;gettimeofday&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;srand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tv_sec&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tv_usec&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;%d&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;rand&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The use of &lt;em&gt;gencmdargs&lt;/em&gt; is similar. Aquinas assumes each line printed by
this type of generator represents a command-line argument.  Aquinas will
compile and deploy generators and reference solutions that exist in a
project&amp;rsquo;s directory and are referenced by a &lt;em&gt;compare&lt;/em&gt; check.&lt;/p&gt;
&lt;p&gt;A student may submit the following project in C or Python. In the case of
C, the submission should contain &lt;em&gt;hello.c&lt;/em&gt;, and this file should compile
to a program that prints &amp;ldquo;Hello, world\n&amp;rdquo;. A Python submission should
take the form of &lt;em&gt;hello&lt;/em&gt; as an executable script (i.e., with shebang). As
with the previous example, the value of &lt;em&gt;stdout&lt;/em&gt; is base64 encoded to
support binary data.&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-fallback&#34; data-lang=&#34;fallback&#34;&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;	&amp;#34;name&amp;#34;: &amp;#34;hello&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;summary&amp;#34;: &amp;#34;Printing to the screen&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;languages&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;C&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;Python&amp;#34;
&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;	&amp;#34;prerequisites&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;git&amp;#34;
&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;	&amp;#34;checks&amp;#34;: [
&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;			&amp;#34;type&amp;#34;: &amp;#34;basic&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;#34;parameters&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;command&amp;#34;: &amp;#34;./hello&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;stdin&amp;#34;: null,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;stdout&amp;#34;: &amp;#34;SGVsbG8sIHdvcmxkIQo=&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;stderr&amp;#34;: null,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;exitCode&amp;#34;: 0
&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&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The following network project installs a service, defined in &lt;em&gt;network.go&lt;/em&gt;,
on Aquinas&amp;rsquo; target host. A correct solution will interact with this
service as the project instructions prescribe to produce the output
required by the project&amp;rsquo;s checks. The value of &lt;em&gt;source&lt;/em&gt; minus its
extension must match the value of &lt;em&gt;name&lt;/em&gt;, and every project must bear a
unique &lt;em&gt;port&lt;/em&gt;. Note that Aquinas will replace &lt;em&gt;TARGET&lt;/em&gt; with the target
host&amp;rsquo;s name when performing this check.&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-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;network&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;summary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Programming a TCP/IPv4 client&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;languages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;Go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;Python&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;p&#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;s2&#34;&gt;&amp;#34;prerequisites&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;variables&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;p&#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;s2&#34;&gt;&amp;#34;checks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;p&#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;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;parameters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./network TARGET 1025&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stdin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stdout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stderr&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;exitCode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#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;p&#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;p&#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;p&#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;s2&#34;&gt;&amp;#34;services&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;p&#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;s2&#34;&gt;&amp;#34;source&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;service-network.go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;port&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1025&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;p&#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;p&#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;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Adding the following within a particular service&amp;rsquo;s definition makes the
service binary available for download.&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &amp;#34;publish_binary&amp;#34;: true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A teacher can also specify flags in a service definition that Aquinas
will pass to the compiler when building the service binary:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &amp;#34;compiler_flags&amp;#34;: &amp;#34;-fstack-protector&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When presenting lists of projects, Aquinas will make use of tags for
organization. A set of tags augment the language categories:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;tags&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;Exploitation&amp;#34;: true
&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sometimes it might be useful to directly call functions in a project
solution when testing. An &lt;em&gt;altmain&lt;/em&gt; statement allows this. For example,
if &lt;em&gt;altmain&lt;/em&gt; is defined as &lt;em&gt;true&lt;/em&gt; for C, Aquinas will compile the
submitted program such that the function &lt;em&gt;main2&lt;/em&gt; in the teacher-defined
file main2.c serves as the program&amp;rsquo;s main function.&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-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;functions&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;summary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Abstraction and code reuse using functions&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;languages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;Go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;Python&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;p&#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;s2&#34;&gt;&amp;#34;prerequisites&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;variables&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;p&#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;s2&#34;&gt;&amp;#34;altmain&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;Go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;Python&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;bp&#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;p&#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;s2&#34;&gt;&amp;#34;checks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;p&#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;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;parameters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./functions&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stdin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stdout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stderr&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;exitCode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#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;p&#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;p&#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;p&#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;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Aquinas supports solution templates, which provide students with a
starting point for their solution. In this example, the values of
&lt;em&gt;templates&lt;/em&gt; should correspond with template files for C, Go, and Python.
These files must exists in the same Git repository as this description,
and Aquinas will copy them to the students&amp;rsquo; &lt;em&gt;variables&lt;/em&gt; repositories.
If the template value is a directory, then Aquinas will copy all of the files
in that directory to the root of the student&amp;rsquo;s repository.&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-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;variables&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;summary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Programming language variables and arithmetic operators&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;languages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;Go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;Python&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;p&#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;s2&#34;&gt;&amp;#34;prerequisites&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;hello&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;p&#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;s2&#34;&gt;&amp;#34;checks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;p&#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;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;parameters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./variables&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stdin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stdout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stderr&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;exitCode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#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;p&#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;p&#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;p&#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;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;parameters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./variables&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stdin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stdout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stderr&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;exitCode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#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;p&#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;p&#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;p&#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;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;parameters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./variables&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stdin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stdout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;stderr&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;exitCode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#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;p&#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;p&#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;p&#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;s2&#34;&gt;&amp;#34;templates&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;template-variablesC.c&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;Go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;template-variablesGo.go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;Python&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;template-variablesPython&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;p&#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;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Aside from &lt;em&gt;templates&lt;/em&gt;, Aquinas supports the following file-related specifications.
Each of these name an array of strings:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;files&lt;/dt&gt;&lt;dd&gt;Causes grader to place files in student&#39;s submission directory after cloning it, possibly overwriting what is already there&lt;/dd&gt;
&lt;dt&gt;user_files&lt;/dt&gt;&lt;dd&gt;Places files in /usr/libexec/aquinas/files/PROJECT on aquinas-user, making them available to the grader&lt;/dd&gt;
&lt;dt&gt;service_files&lt;/dt&gt;&lt;dd&gt;Places files in /usr/libexec/aquinas/services/PROJECT on aquinas-target, making them available to the target service&lt;/dd&gt;
&lt;dt&gt;service_links&lt;/dt&gt;&lt;dd&gt;Set up a link on aquinas-target from the given path outside the service chroot to inside of the service chroot&lt;/dd&gt;
&lt;dt&gt;service_chroot_programs&lt;/dt&gt;&lt;dd&gt;Copies files from outside the target service chroot to inside the target service chroot&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id=&#34;project-instructions&#34;&gt;Project instructions&lt;/h2&gt;
&lt;p&gt;Teachers write project instructions in the form of a LaTeX fragment,
which Aquinas combines with a template before processing into a
HTML document. It is a good practice to use &lt;code&gt;\section*&lt;/code&gt; to provide
three sections: &lt;em&gt;Command&lt;/em&gt; (or &lt;em&gt;Function&lt;/em&gt;) &lt;em&gt;summary&lt;/em&gt;, &lt;em&gt;Lesson&lt;/em&gt;, and
&lt;em&gt;Assignment&lt;/em&gt;. Aquinas will provide the prelude and epilog material;
here it is sufficient to begin with the first &lt;code&gt;\section*&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Aquinas provides the following LaTeX commands for use in a project&amp;rsquo;s
instructions:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;pre&gt;\cmd&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a command.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\project&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a project name.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\conf&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a configuration file.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\file&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a file name.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\dir&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a directory name.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\fn&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a function name.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\host&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a host name.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\keypress&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as if it were a key to be pressed.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\unix&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the work UNIX.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\shprompt&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset a Bourne shell prompt.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\cmddesc&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Define a command within a LaTeX description list. Like \item, except
Aquinas notes occurences of \cmddesc to produce a command reference
page.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\fncdesc&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Define a C function within a LaTeX description list. Like \item, except
Aquinas notes occurences of \fncdesc to produce a C function reference
page. Variants exist for other languages such as Go (\fngodesc)
and Python (\fnpythondesc).&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\ifC&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;If the language associated with the current project variant matches
(here the C variant), then include the subsequent text up until the
next \fi. Otherwise print nothing.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\ifshebang&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;If the language can make use of a shebang, then print the second argument.
Otherwise print nothing.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\clone&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Provide instructions on how to clone the current project using Git.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\submission&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Print instructions on how to submit a project solution.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\submissionNoLanguage&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Print instructions on how to submit a language-agnostic project solution.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Alternatively, a teacher can describe a project using Markdown.&lt;/p&gt;
&lt;h1 id=&#34;the-aquinas-vms&#34;&gt;The Aquinas VMs&lt;/h1&gt;
&lt;dl&gt;
&lt;dt&gt;aquinas-www&lt;/dt&gt;
&lt;dd&gt;The HTTP server that allows users to read project assignments and
view submission results.&lt;/dd&gt;
&lt;dt&gt;aquinas-git&lt;/dt&gt;
&lt;dd&gt;The Git server to which users make project submissions.&lt;/dd&gt;
&lt;dt&gt;aquinas-user&lt;/dt&gt;
&lt;dd&gt;The host that runs project submissions during the grading process.&lt;/dd&gt;
&lt;dt&gt;aquinas-target&lt;/dt&gt;
&lt;dd&gt;The host that runs network services with which user programs might
interact.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;system-inputs&#34;&gt;System inputs&lt;/h1&gt;
&lt;dl&gt;
&lt;dt&gt;(unauthenticated) http://aquinas-www/landing.html&lt;/dt&gt;
&lt;dd&gt;Allows a user to either log in or register.&lt;/dd&gt;
&lt;dt&gt;(unauthenticated) http://aquinas-www/login.html&lt;/dt&gt;
&lt;dd&gt;Accepts student email and password. Allows a student to log in to
the web interface. Transitions state of HTTP session to authenticated.&lt;/dd&gt;
&lt;dt&gt;(unauthenticated) http://aquinas-www/register.html&lt;/dt&gt;
&lt;dd&gt;Accepts an email address. Allows a registering student to initiate
the registration process. Sends an email to the registering student
that allows him to complete the registration.&lt;/dd&gt;
&lt;dt&gt;(unauthenticated) http://aquinas-www/register3.html&lt;/dt&gt;
&lt;dd&gt;Accepts an email address, nonce, hashed token, and password. Allows
a registering student to prove ownership of an email address and
thus complete the registration process.&lt;/dd&gt;
&lt;dt&gt;(authenticated) http://aquinas-www/index.html&lt;/dt&gt;
&lt;dd&gt;Allows a student to select a project page.&lt;/dd&gt;
&lt;dt&gt;(authenticated) http://aquinas-www/p.html, where p is a project&lt;/dt&gt;
&lt;dd&gt;Allows a student to view information that describes project p.&lt;/dd&gt;
&lt;dt&gt;ssh://s@aquinas-git/home/s/p, where s is a student and p is a project&lt;/dt&gt;
&lt;dd&gt;Interact with student s&#39;s project p submission using Git/git-shell.&lt;/dd&gt;
Git hook invokes grader, run as teacher, with s and p as its input.&lt;/dd&gt;
&lt;dt&gt;ssh://t@aquinas-git/home/teacher/projects, where t is a teacher&lt;/dt&gt;
&lt;dd&gt;Interact with the project definitions using Git/git-shell.  Git hook
invokes aquinas-initialize-projects, run as root.&lt;/dd&gt;
&lt;dt&gt;ssh://t@aquinas-git/home/teacher/records, where t is a teacher&lt;/dt&gt;
&lt;dd&gt;Interact with the project submission records using Git/git-shell.&lt;/dd&gt;
&lt;dt&gt;ssh://root@\*&lt;/dt&gt;
&lt;dd&gt;Allows developers shell access.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;sudo-permissions&#34;&gt;Sudo permissions&lt;/h1&gt;
&lt;h2 id=&#34;aquinas-git&#34;&gt;aquinas-git&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;All users can run grader as teacher&lt;/li&gt;
&lt;li&gt;Teacher can run aquinas-initialize-projects as root&lt;/li&gt;
&lt;li&gt;Http can run aquinas-add-student-slave as root&lt;/li&gt;
&lt;li&gt;Http can run aquinas-get-ssh-authorized-keys as root&lt;/li&gt;
&lt;li&gt;Http can run aquinas-deploy-key as root&lt;/li&gt;
&lt;li&gt;Http can run aquinas-remove-student-slave as root&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;ssh-keys&#34;&gt;SSH keys&lt;/h1&gt;
&lt;dl&gt;
&lt;dt&gt;root@aquinas-git&lt;/dt&gt;
&lt;dd&gt;generated by alpine-build&lt;/dd&gt;
&lt;dt&gt;teacher@aquinas-git&lt;/dt&gt;
&lt;dd&gt;generated by alpine-build&lt;/dd&gt;
&lt;dt&gt;http@aquinas-www&lt;/dt&gt;
&lt;dd&gt;generated by alpine-build&lt;/dd&gt;
&lt;dt&gt;Developers&lt;/dt&gt;
&lt;dd&gt;installed by hand&lt;/dd&gt;
&lt;dt&gt;Teachers&lt;/dt&gt;
&lt;dd&gt;installed by aquinas-add-teacher&lt;/dd&gt;
&lt;dt&gt;Students&lt;/dt&gt;
&lt;dd&gt;installed by ssh/ssh2.html&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;permitted-ssh-connections&#34;&gt;Permitted SSH connections&lt;/h1&gt;
&lt;table class=&#34;booktabs-confined&#34; summary=&#34;Permitted SSH connections&#34;&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;From&lt;/th&gt;&lt;th&gt;To&lt;/th&gt;&lt;th&gt;Installed by&lt;/th&gt;&lt;th&gt;Purpose&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Developers&lt;/td&gt;&lt;td&gt;root@aquinas-git&lt;/td&gt;&lt;td&gt;alpine-build/manual&lt;/td&gt;&lt;td&gt;Development/administration&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Developers&lt;/td&gt;&lt;td&gt;test@aquinas-git&lt;/td&gt;&lt;td&gt;test case&lt;/td&gt;&lt;td&gt;Pushing solutions during test&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Teachers&lt;/td&gt;&lt;td&gt;teacher@aquinas-git&lt;/td&gt;&lt;td&gt;add-teacher&lt;/td&gt;&lt;td&gt;Project deployment&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;http@aquinas-www&lt;/td&gt;&lt;td&gt;http@aquinas-git&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;Httpd uses to run httpsh:
&lt;ul&gt;
&lt;li&gt;check for student&lt;/li&gt;
&lt;li&gt;check for SSH key&lt;/li&gt;
&lt;li&gt;add a new student&lt;/li&gt;
&lt;li&gt;deploy SSH key&lt;/li&gt;
&lt;li&gt;remove a student&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Students&lt;/td&gt;&lt;td&gt;STUDENT@aquinas-git&lt;/td&gt;&lt;td&gt;ssh/ssh2.html&lt;/td&gt;&lt;td&gt;Commit submissions to Git&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Developers&lt;/td&gt;&lt;td&gt;root@aquinas-www&lt;/td&gt;&lt;td&gt;alpine-build/manual&lt;/td&gt;&lt;td&gt;Development/administration&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Teachers&lt;/td&gt;&lt;td&gt;teacher@aquinas-www&lt;/td&gt;&lt;td&gt;add-teacher&lt;/td&gt;&lt;td&gt;Updating HTML documents&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;teacher@aquinas-git&lt;/td&gt;&lt;td&gt;teacher@aquinas-www&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;&lt;p&gt;Used by grader to update records on aquinas-www&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Developers&lt;/td&gt;&lt;td&gt;root@aquinas-user&lt;/td&gt;&lt;td&gt;alpine-build/manual&lt;/td&gt;&lt;td&gt;Development&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;teacher@aquinas-git&lt;/td&gt;&lt;td&gt;root@aquinas-user&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;&lt;p&gt;Used by initialize-project
to pull host key and user key from aquinas-user
(Cannot use test@, because test has shell set to
buildrunsh) Also used by grader to place
user-submitted code on aquinas-user&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;teacher@aquinas-git&lt;/td&gt;&lt;td&gt;teacher@aquinas-user&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;&lt;p&gt;Used grader to run reference solution on aquinas-user
in the case of compare-type checks&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;root@aquinas-git&lt;/td&gt;&lt;td&gt;root@aquinas-user&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;Add or remove user&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;root@aquinas-git&lt;/td&gt;&lt;td&gt;teacher@aquinas-user&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;Compile network project services&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;teacher@aquinas-git&lt;/td&gt;&lt;td&gt;STUDENT@aquinas-user&lt;/td&gt;&lt;td&gt;add-student&lt;/td&gt;&lt;td&gt;&lt;p&gt;Grader uses to run buildrunsh
on user VM; Git hook runs as
user, and uses sudo to run
grader as teacher&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;root@aquinas-git&lt;/td&gt;&lt;td&gt;root@aquinas-target&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;Deploy network project services&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;component-isolation&#34;&gt;Component isolation&lt;/h1&gt;
&lt;p&gt;The design of Aquinas isolates its components to prevent student
program from exfiltrating data available to them during the grading
process. This prevents student knowledge of the checks that grade
their submissions. Furthermore, student programs cannot interact beyond
the aquinas-user host with the exception of allowed connections to
aquinas-target.&lt;/p&gt;
&lt;h2 id=&#34;firewall-rules&#34;&gt;Firewall rules&lt;/h2&gt;
&lt;p&gt;The host firewalls on aquinas-user and aquinas-target prohibit all
outgoing connections with the exception of a connection to a syslog
server (TCP port 6514). All interaction with these hosts is by way of
incoming SSH connections or project-specific services. The aim of this
is to prevent a user-written program from exfiltrating data from either
host while executing for the purpose of grading.&lt;/p&gt;
&lt;h2 id=&#34;chroot-jails&#34;&gt;Chroot jails&lt;/h2&gt;
&lt;p&gt;Services on aquinas-target run as the user nobody and within a chroot
jail.&lt;/p&gt;
&lt;h1 id=&#34;aquinas-administation&#34;&gt;Aquinas administation&lt;/h1&gt;
&lt;h2 id=&#34;manually-fork-a-repository&#34;&gt;Manually fork a repository&lt;/h2&gt;
&lt;p&gt;The following assumes the student is using Aquinas&amp;rsquo; native Git repository,
rather than a third-party repository such as GitLab. If this is not the
case, then you would need to provide more information in the JSON-encoded
parameter.&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aquinas-fork-project STUDENT@EXAMPLE.COM PROJECT &amp;#39;{&amp;#34;git-provider&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;git-path&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;git-username&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;git-token&amp;#34;:&amp;#34;&amp;#34;}&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;force-the-grading-of-a-project&#34;&gt;Force the grading of a project&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@aquinas-git&amp;gt; aquinas-enqueue /usr/sbin/grader STUDENT@EXAMPLE.COM PROJECTLANG
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Force the grading of a project directly, without using the queuing system&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;root@aquinas-git&amp;gt; scp -r /home/teacher/workdir/students/STUDENT@EXAMPLE.COM/helloC/ root@aquinas-user.EXAMPLE.COM:/home/STUDENT@EXAMPLE.COM/helloC/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;root@aquinas-git&amp;gt; ssh root@aquinas-user.EXAMPLE.COM chown -R STUDENT_at_EXAMPLE_dot_COM:STUDENT_at_EXAMPLE_dot_COM /home/STUDENT@EXAMPLE.COM/helloC&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;root@aquinas-git&amp;gt; ( echo build; echo \&amp;quot;C\&amp;quot;; cat /home/teacher/workdir/projects/hello/description.json ) | sudo -u teacher ssh -T STUDENT_at_EXAMPLE_dot_COM@aquinas-user.EXAMPLE.COM&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Possibly copy files required by project to &lt;a href=&#34;mailto:root@aquinas-user.EXAMPLE.COM&#34;&gt;root@aquinas-user.EXAMPLE.COM&lt;/a&gt;:/home/STUDENT@EXAMPLE.COM/helloC/.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;root@aquinas-git&amp;gt; ( echo run; echo \&amp;quot;C\&amp;quot;; cat /home/teacher/workdir/projects/hello/description.json ) | sudo -u teacher ssh -T STUDENT_at_EXAMPLE_dot_COM@aquinas-user.EXAMPLE.COM&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;rename-a-user&#34;&gt;Rename a user&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Note the student&amp;rsquo;s alias.&lt;/li&gt;
&lt;li&gt;Backup the student OLD&amp;rsquo;s home directory at &lt;code&gt;/home/OLD@EXAMPLE.COM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On aquinas-www, run &lt;code&gt;sudo -u http aquinas-remove-student OLD@EXAMPLE.COM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On aquinas-www, run &lt;code&gt;sudo -u http aquinas-add-student NEW@EXAMPLE.COM PASSWORD&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install SSH key from backup.&lt;/li&gt;
&lt;li&gt;Restore student&amp;rsquo;s alias.&lt;/li&gt;
&lt;li&gt;For each repository in the backup, &lt;code&gt;git clone&lt;/code&gt; the repository to a temporary location, and from that location run &lt;code&gt;git push repo=NEW_AT_EXAMPLE_DOT_COM@aquinas-git.DOMAIN:/home/NEW@EXAMPLE.COM/PROJECT --all --force&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;mark-a-user-as-a-teacher&#34;&gt;Mark a user as a teacher&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;root@aquinas-www&amp;gt; touch /etc/httpd/accounts/USER/teacher&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;root@aquinas-www&amp;gt; chown http:www-data /etc/httpd/accounts/USER/teacher&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;related-publications&#34;&gt;Related publications&lt;/h1&gt;









	
		







  








&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/publications/Courses-as-Code-The-Aquinas-Learning-System/&#34; &gt;Courses as Code: The Aquinas Learning System&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
      &lt;div&gt;
        

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/W.-Michael-Petullo/&#34;&gt;W. Michael Petullo&lt;/a&gt;&lt;/span&gt;
      &lt;/div&gt;
      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  
    
  



&lt;a class=&#34;btn btn-outline-primary btn-page-header btn-sm&#34; href=&#34;http://www.flyn.org/publications/2022-Aquinas.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;
  PDF
&lt;/a&gt;



&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/publications/Courses-as-Code-The-Aquinas-Learning-System/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	


&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;aquinas-git-alpine-x86-64.img.bz2&#34;&gt;aquinas-git-alpine-x86-64.img.bz2&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;aquinas-target-alpine-x86-64.img.bz2&#34;&gt;aquinas-target-alpine-x86-64.img.bz2&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;aquinas-user-alpine-x86-64.img.bz2&#34;&gt;aquinas-user-alpine-x86-64.img.bz2&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;aquinas-www-alpine-x86-64.img.bz2&#34;&gt;aquinas-www-alpine-x86-64.img.bz2&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;vm-aquinas-git.cfg&#34;&gt;vm-aquinas-git.cfg&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;vm-aquinas-target.cfg&#34;&gt;vm-aquinas-target.cfg&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;vm-aquinas-user.cfg&#34;&gt;vm-aquinas-user.cfg&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;vm-aquinas-www.cfg&#34;&gt;vm-aquinas-www.cfg&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The Aquinas project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone --recurse-submodules https://www.flyn.org/git/aquinas&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>army_tex</title>
      <link>https://www.flyn.org/abandoned/army_tex/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/army_tex/</guid>
      <description>&lt;p&gt;Army_tex is a set of &lt;a href=&#34;http://www.tug.org/teTeX/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LaTeX&lt;/a&gt;
classes for generating U.S. Army documents, compliant with &lt;em&gt;AR
25-50&lt;/em&gt;.  The army_tex package provides classes to create documents
such as memorandums and letters.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>arty</title>
      <link>https://www.flyn.org/abandoned/arty/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/arty/</guid>
      <description>&lt;p&gt;Arty is an artillery simulation game.  It is currently in the infancy
of its development.  Arty takes advantage of &lt;a href=&#34;http://www.opengl.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;OpenGL&lt;/a&gt; and the
&lt;a href=&#34;http://www.xfree86.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;X Window System&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>asterisk-1.6.0-beta9-crashfix</title>
      <link>https://www.flyn.org/patches/asterisk-1.6.0-beta9-crashfix/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/asterisk-1.6.0-beta9-crashfix/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;asterisk-1.6.0-beta9-crashfix.patch.gz&#34;&gt;asterisk-1.6.0-beta9-crashfix&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.asterisk.org/&#34;&gt;Asterisk&lt;/a&gt;&#39;s
realtime LDAP module, with fixes from subversion, backported to
Asterisk 1.6 Beta 9. This bug is documented in Asterisk bug #&lt;a
href=&#34;http://bugs.digium.com/view.php?id=12572&#34;&gt;12572&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>authconfig-4.6.1-1-pam_mount</title>
      <link>https://www.flyn.org/patches/authconfig-4.6.1-1-pam_mount/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/authconfig-4.6.1-1-pam_mount/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;authconfig-4.6.1-1-pam_mount.patch.gz&#34;&gt;authconfig-4.6.1-1-pam_mount&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for &lt;a href=&#34;http://www.redhat.com&#34;&gt;Red Hat&lt;/a&gt;&#39;s &lt;a
href=&#34;https://fedorahosted.org/authconfig/&#34;&gt;authconfig&lt;/a&gt;
tool that adds the ability to configure &lt;a
href=&#34;http://www.flyn.org/projects/pam_mount/&#34;&gt;pam_mount&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>avfs-0.9.3-devfs</title>
      <link>https://www.flyn.org/patches/avfs-0.9.3-devfs/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/avfs-0.9.3-devfs/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;avfs-0.9.3-devfs.patch.gz&#34;&gt;avfs-0.9.3-devfs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A simple patch for Miklos Szeredi&#39;s &lt;a
href=&#34;http://avf.sourceforge.net/&#34;&gt;AVFS&lt;/a&gt; that
makes avfscoda work with /dev/coda/0, a devfs style device name,
out of the box.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Awesome</title>
      <link>https://www.flyn.org/notes/awesome/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/awesome/</guid>
      <description>&lt;p&gt;First, install the Awesome window manager:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ dnf install awesome
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next, configure Awesome. I maintain my Awesome configuration such that it is accessible with:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git clone https://www.flyn.org/git/awesome-config
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should install the contents of the awesome-config
folder at ~/.config/awesome (i.e., drop the &lt;em&gt;-config&lt;/em&gt;
portion of the directory name).  My configuration assumes that
~/.config/awesome/themes/flyn/background is a symbolic link to a
background picture. Set this with something like:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ln -sf /usr/share/backgrounds/default.png ~/.config/awesome/themes/flyn/background.png
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To login with awesome, select the “awesome” option presented by GDM (gears button).
The result is a very simple configuration with the following input bindings. The modifier key (i.e., Mod) is the key most often labeled something like Command or Windows.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mod-Ctrl-q: Quit Awesome and thus terminate the login session.&lt;/li&gt;
&lt;li&gt;Mod-Ctrl-r: Restart Awesome.&lt;/li&gt;
&lt;li&gt;Mod-Ctrl-Space: Toggle the focused window between floating and tiled mode.&lt;/li&gt;
&lt;li&gt;Mod-Escape: Return to the previous virtual desktop.&lt;/li&gt;
&lt;li&gt;Mod-Left: Select the next virtual desktop to the left.&lt;/li&gt;
&lt;li&gt;Mod-Right: Select the next virtual desktop to the right.&lt;/li&gt;
&lt;li&gt;Mod-Return: Run a gnome-terminal.&lt;/li&gt;
&lt;li&gt;Mod-f: Grow the focused window to span the screen.&lt;/li&gt;
&lt;li&gt;Mod-q: Quit the focused application.&lt;/li&gt;
&lt;li&gt;Mod-r: Activate a run-command prompt at the bottom of the screen.&lt;/li&gt;
&lt;li&gt;Mod-r: Activate a run-command prompt at the bottom of the screen.&lt;/li&gt;
&lt;li&gt;Mod-Space: Toggle the tiling style.&lt;/li&gt;
&lt;li&gt;Mod-Tab: Shift focus to previous window.&lt;/li&gt;
&lt;li&gt;Mod-Volume Down: Lower the speaker volume.&lt;/li&gt;
&lt;li&gt;Mod-Volume Mute: Mute the speaker.&lt;/li&gt;
&lt;li&gt;Mod-Volume Up: Raise the speaker volume.&lt;/li&gt;
&lt;li&gt;Mod-Click-and-drag: Move a window.&lt;/li&gt;
&lt;li&gt;Mod-Left-click-and-drag: Resize a window.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I use many of the GNOME tools along with Awesome. Some of them require
a little nudging to get to work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gnome-control-center requires the &lt;em&gt;XDG_CURRENT_DESKTOP&lt;/em&gt; environment variable set to &lt;em&gt;GNOME&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>backup-scripts</title>
      <link>https://www.flyn.org/abandoned/backup-scripts/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/backup-scripts/</guid>
      <description>&lt;p&gt;A series of scripts for performing backups of servers and workstations&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>balsa-1.2.3-attachment</title>
      <link>https://www.flyn.org/patches/balsa-1.2.3-attachment/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/balsa-1.2.3-attachment/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;balsa-1.2.3-attachment.patch.gz&#34;&gt;balsa-1.2.3-attachment&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Jay Painter and Stuart Parmenter&#39;s &lt;a href=&#34;http://balsa.gnome.org&#34;&gt;Balsa&lt;/a&gt;.
When this patch is applied, a user may specify mail attachments
on the command line using the -a or
&amp;ndash;attachment option.&lt;/p&gt;
&lt;p&gt;Incidentally, this patch allows one to integrate &lt;a
href=&#34;http://balsa.gnome.org&#34;&gt;Balsa&lt;/a&gt; very nicely with the graphical
shell Nautilus.  One can right click on selected files, scale them to
a reasonable size, and open a new mail message with them attached if
one places my mail_file script in their Nautilus scripts directory.
Mail_file is distributed in my nautilus_scripts package.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>balsa-2.1.0-ab-window-dnotify</title>
      <link>https://www.flyn.org/patches/balsa-2.1.0-ab-window-dnotify/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/balsa-2.1.0-ab-window-dnotify/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;balsa-2.1.0-ab-window.c.dnotify.patch.gz&#34;&gt;balsa-2.1.0-ab-window.c.dnotify&lt;/a&gt; &lt;a href=&#34;balsa-2.1.0-ab-window.h.dnotify.patch.gz&#34;&gt;balsa-2.1.0-ab-window.h.dnotify&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for the &lt;a href=&#34;http://balsa.gnome.org&#34;&gt;balsa&lt;/a&gt; email client
that reloads a user&#39;s address book automatically when a dnotify event
indicates that it has changed.  This replaces the &lt;i&gt;reload&lt;/i&gt; button.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>balsa-2.1.0-attachments</title>
      <link>https://www.flyn.org/patches/balsa-2.1.0-attachments/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/balsa-2.1.0-attachments/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;balsa-2.1.0-attachments.patch.gz&#34;&gt;balsa-2.1.0-attachments&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for the &lt;a href=&#34;http://balsa.gnome.org&#34;&gt;balsa&lt;/a&gt; email client
that fixes some issues with attaching files from the command line.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>balsa-2.1.0-defclient</title>
      <link>https://www.flyn.org/patches/balsa-2.1.0-defclient/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/balsa-2.1.0-defclient/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;balsa-2.1.0-defclient.patch.gz&#34;&gt;balsa-2.1.0-defclient&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for the &lt;a href=&#34;http://balsa.gnome.org&#34;&gt;balsa&lt;/a&gt; email client
that causes the program to ask if it should be the default email client
when run for the first time.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>bbb</title>
      <link>https://www.flyn.org/abandoned/bbb/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/bbb/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Burn_baby_burn&#39;s replacement, bbb, is a set of utilities for burning to
CD-R and CD-RW media.  The package allows one to easily perform tasks
such as burning the contents of a directory, burning an audio CD, burning
a CD image and copying CD media from the command line.  Bbb differs
from burn_baby_burn primarily in the interface it presents the user.
Bbb is designed as several simple tools that may be used easily in
standard UNIX pipelines.&lt;/p&gt;
&lt;h1 id=&#34;nasty-details&#34;&gt;Nasty Details&lt;/h1&gt;
&lt;p&gt;Bbb provides a mechanism for keeping the system load down during
CD burning.  A file, /tmp/be_nice, exists when a CD is being burned.
Cron and other similar systems should check for the existence of this
file before executing jobs.  Bbbnice is a tool provided by bbb that
waits until /tmp/be_nice no longer exists before executing a task.&lt;/p&gt;
&lt;p&gt;Here is an example of a crontab that uses bbbnice:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SHELL=/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PATH=/sbin:/bin:/usr/sbin:/usr/bin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MAILTO=root
&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;01 * * * * root bbbnice run-parts /etc/cron.hourly
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;02 4 * * * root bbbnice run-parts /etc/cron.daily
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;22 4 * * 0 root bbbnice run-parts /etc/cron.weekly
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;42 4 1 * * root bbbnice run-parts /etc/cron.monthly
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For burning bootable backup CD-ROMS, I recommend Gratien D&#39;haese&#39;s &lt;a href=&#34;http://mkcdrec.sourceforge.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Make CD-ROM Recovery&lt;/a&gt;.
For encoding audio CDs into MPEG 1 Layer III
or &lt;a href=&#34;http://www.vorbis.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Ogg Vorbis&lt;/a&gt;
files, I recommend &lt;a href=&#34;http://autorip.sourceforge.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;autorip&lt;/a&gt;
by Jonathan Mayer.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>beamer-control</title>
      <link>https://www.flyn.org/projects/beamer-control/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/beamer-control/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Beamer is a LaTeX class for creating slides for
presentations. beamer-control allows you to simultaneously control two PDF
viewers to synchronize slides—displayed with a projector—and
notes—displayed on a laptop screen. beamer-control uses the AT-SPI
accessibility framework to communicate with any compatible viewers, such as evince.&lt;/p&gt;
&lt;h1 id=&#34;setup-in-the-case-of-the-awesome-window-manager&#34;&gt;Setup (in the case of the Awesome window manager)&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Ensure you are running &lt;code&gt;at-spi2-registryd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;beamer-control&lt;/code&gt; and use &lt;code&gt;xwininfo&lt;/code&gt; to identify its window identifier.&lt;/li&gt;
&lt;li&gt;Configure Awesome to treat beamer-control as a floating window; write the following to your Awesome configuration, where &lt;code&gt;Beamer Control&lt;/code&gt; is the window identifier from the previous step:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;awful.rules.rules = {
&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;	{ rule = { name=&amp;#34;Beamer Control&amp;#34;, instance = &amp;#34;python3&amp;#34; }, properties = {floating = true}},
&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;a-workflow&#34;&gt;A workflow&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Add the following to your presentation&#39;s preamble to ensure every slide has a note, and thus the number of slides and note pages are equal:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\makeatletter
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\def\beamer@framenotesbegin{%
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	\gdef\beamer@noteitems{}%
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	\gdef\beamer@notes{{}}%
&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;\makeatother
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Add the following to allow building either the slides or notes from the command line:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\ifcsname ifshowOnlyNotes\endcsname\else
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\expandafter\let\csname ifshowOnlyNotes\expandafter\endcsname
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\csname iffalse\endcsname
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\fi
&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;\ifshowOnlyNotes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\setbeameroption{show only notes}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\fi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Build slides with &lt;code&gt;pdflatex presentation.tex&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Build notes with &lt;code&gt;pdflatex --jobname=notes &amp;quot;\let\ifshowOnlyNotes\iftrue\input{presentation}&amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Open the slides using evince and place them on one screen in presentation mode.&lt;/li&gt;
&lt;li&gt;Open the notes using evince and place them on the other screen in fullscreen mode.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;beamer-control&lt;/code&gt; and place on the notes screen (anywhere but the top-left corner).&lt;/li&gt;
&lt;li&gt;Control the presentation by placing the focus on beamer-control and pressing the up or down arrow keys.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;beamer-control&#34;&gt;beamer-control&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>Beholder</title>
      <link>https://www.flyn.org/notes/beholder/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/beholder/</guid>
      <description>&lt;p&gt;This document describes how to build Beholder, a multi-function server. Beholder runs on
commodity router hardware and provides a number of features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SSH access&lt;/li&gt;
&lt;li&gt;a Snort network intrusion prevention system&lt;/li&gt;
&lt;li&gt;a NetFlow exporter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We build Beholder on top of OpenWrt because of the distribution&amp;rsquo;s simplicity and small size.
Beholder is made up of roughly 90 packages, and its programs and configurations take up less than 40 MB of storage space.
Here we assume that Beholder will run within the confines of a Xen hypervisor.&lt;/p&gt;
&lt;h2 id=&#34;establish-the-beholder-vm&#34;&gt;Establish the Beholder VM&lt;/h2&gt;
&lt;p&gt;Perform the following steps on the Xen Dom0 host to establish the VM which will host Beholder:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Obtain the x86_64 OpenWrt image at &lt;a href=&#34;https://downloads.lede-project.org/releases/17.01.1/targets/x86/64/lede-17.01.1-x86-64-combined-ext4.img.gz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://downloads.lede-project.org/releases/17.01.1/targets/x86/64/lede-17.01.1-x86-64-combined-ext4.img.gz&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Uncompress the image and place it at &lt;code&gt;/var/lib/xen/images/beholder-lede-17.01.1-x86-64-combined-ext4.img&lt;/code&gt; on the Xen Dom0 host.&lt;/li&gt;
&lt;li&gt;Create a disk image to serve as the server&amp;rsquo;s large data store (see our notes on &lt;a href=&#34;../virtualization/index.html#disks&#34;&gt;platform virtualization&lt;/a&gt;)
and name it &lt;code&gt;/var/lib/xen/images/beholder-data.qcow&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Write the following at &lt;code&gt;/etc/xen/vm-beholder.cfg&lt;/code&gt; on the Xen Dom0 host (replace &lt;em&gt;XX:XX:XX:XX:XX:XX&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;beholder&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;n&#34;&gt;memory&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;1024&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;n&#34;&gt;vcpus&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;mi&#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;n&#34;&gt;builder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hvm&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;n&#34;&gt;vif&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;s2&#34;&gt;&amp;#34;model=e1000,script=vif-bridge,bridge=xenbr0,mac=XX:XX:XX:XX:XX:XX&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;disk&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;s2&#34;&gt;&amp;#34;tap2:tapdisk:aio:/var/lib/xen/images/beholder-lede-17.01.1-x86-64-combined-ext4.img,xvda,w&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;serial&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pty&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;software-installation&#34;&gt;Software installation&lt;/h2&gt;
&lt;p&gt;Perform the following steps on Beholder:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set the root password: &lt;code&gt;passwd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Remove unnecessary packages:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg remove \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dnsmasq \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kmod-ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kmod-pppoe \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kmod-pppox \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kmod-r8169 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;logd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;luci \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;luci-app-firewall \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;luci-base \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;luci-lib-ip \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;luci-lib-nixio \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;luci-proto-ipv6 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;luci-proto-ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;luci-theme-bootstrap \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mtd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;odhcpd-ipv6only \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ppp-mod-pppoe \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;r8169-firmware \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uhttpd-mod-ubus \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uhttpd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Configure networking by writing &lt;em&gt;/etc/config/network&lt;/em&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config interface loopback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname lo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto static
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ipaddr 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option netmask 255.0.0.0
&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;config interface lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto dhcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Install the necessary software:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg install \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	freifunk-watchdog \	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	snort \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	softflowd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	syslog-ng \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	zoneinfo-core \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	zoneinfo-northamerica
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Install a public SSH key at &lt;em&gt;/etc/dropbear/authorized_keys&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configure-the-firewall&#34;&gt;Configure the firewall&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/config/firewall&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config defaults
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option drop_invalid 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option input ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option output ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option forward ACCEPT
&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;config zone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option name lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option network lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option input ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option output ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option forward DROP
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configure-basic-system-settings&#34;&gt;Configure basic system settings&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;/etc/config/system&lt;/em&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config system
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option hostname beholder.EXAMPLE.COM
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option timezone EST5EDT,M3.2.0,M11.1.0
&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;config timeserver ntp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     0.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     1.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     2.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     3.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enabled 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enable_server 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;em&gt;/etc/config/freifunk-watchdog&lt;/em&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option process dropbear
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option initscript /etc/init.d/dropbear
&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;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option process snort
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option initscript /etc/init.d/snort
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;em&gt;/etc/config/network&lt;/em&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config interface loopback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option ifname lo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option proto static
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option ipaddr 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option netmask 255.0.0.0
&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;config interface lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option ifname eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option proto dhcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;em&gt;/etc/config/dropbear&lt;/em&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config dropbear
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option PasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option RootPasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option Port         &amp;#39;22&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;forwarding-packets-to-snort-host&#34;&gt;Forwarding packets to Snort host&lt;/h2&gt;
&lt;p&gt;Once Snort is running, you will want to forward a copy of network packets to the Snort host.
The tee feature of netfilter can perform this work.
To configure an OpenWrt router to forward a copy of each packet to the Snort host at
beholder.&lt;em&gt;EXAMPLE.COM&lt;/em&gt;, add the following to &lt;code&gt;/etc/firewall.user&lt;/code&gt; on the router (replace &lt;em&gt;BEHOLDER-IP&lt;/em&gt;):&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -t mangle -A INPUT  ! -s BEHOLDER-IP/32 -j TEE --gateway BEHOLDER-IP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -t mangle -A OUTPUT ! -d BEHOLDER-IP/32 -j TEE --gateway BEHOLDER-IP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -t mangle -A FORWARD ! -d BEHOLDER-IP/32 ! -s BEHOLDER-IP/32 -j TEE --gateway BEHOLDER-IP
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configuring-snort&#34;&gt;Configuring Snort&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;/etc/config/snort&lt;/em&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config snort snort
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option config_dir /etc/snort/etc/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option alert_module alert_syslog
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option interface eth0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Register with Snort, download the registered Snort rules from &lt;a href=&#34;https://www.snort.org/downloads/registered/snortrules-snapshot-3000.tar.gz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.snort.org/downloads/registered/snortrules-snapshot-3000.tar.gz&lt;/a&gt;, and install them at &lt;code&gt;/etc/snort/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Uncomment the appropriate rules in each file found in &lt;code&gt;/etc/snort/rules/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Restart Snort, and test its functionality. One way to do this is to uncomment the &lt;code&gt;NessusTest&lt;/code&gt; rule in &lt;code&gt;/etc/snort/rules/snort3-server-webapp.rules&lt;/code&gt; and run &lt;code&gt;wget http://webserver/NessusTest&lt;/code&gt;. Snort should log something like this: “SERVER-WEBAPP nessus 2.x 404 probe.”&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;configuring-softflowd&#34;&gt;Configuring softflowd&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/config/softflowd&lt;/code&gt; (replace &lt;code&gt;example.com&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;softflowd&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;1&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;interface&lt;/span&gt;      &lt;span class=&#34;s1&#34;&gt;&amp;#39;eth0&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pcap_file&lt;/span&gt;      &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;timeout&lt;/span&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;max_flows&lt;/span&gt;      &lt;span class=&#34;s1&#34;&gt;&amp;#39;8192&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;host_port&lt;/span&gt;      &lt;span class=&#34;s1&#34;&gt;&amp;#39;golem.example.com:9995&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pid_file&lt;/span&gt;       &lt;span class=&#34;s1&#34;&gt;&amp;#39;/var/run/softflowd.pid&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;control_socket&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/var/run/softflowd.ctl&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;export_version&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;5&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hoplimit&lt;/span&gt;       &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tracking_level&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;full&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;track_ipv6&lt;/span&gt;     &lt;span class=&#34;s1&#34;&gt;&amp;#39;0&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sampling_rate&lt;/span&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;100&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>bluefish-0.12-desktop</title>
      <link>https://www.flyn.org/patches/bluefish-0.12-desktop/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/bluefish-0.12-desktop/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;bluefish-0.12-desktop.patch.gz&#34;&gt;bluefish-0.12-desktop.patch.gz&lt;/a&gt; &lt;a href=&#34;gnome-vfs.keys-bluefish.patch.gz&#34;&gt;gnome-vfs.keys-bluefish.patch.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Patches that integrate Bluefish into the GNOME MIME system more effectively.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>C</title>
      <link>https://www.flyn.org/notes/c/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/c/</guid>
      <description>&lt;h2 id=&#34;standardizing-style-with-the-aim-of-aiding-inspection-and-removing-pitfalls&#34;&gt;Standardizing style with the aim of aiding inspection and removing pitfalls&lt;/h2&gt;
&lt;p&gt;Human review remains one of the best ways to ensure a body of source code
specifies the program that the programmer set out to write.
Testing is usually a practical necessity, but
a programmer’s ultimate goal should be a program that humans can read and understand.
Source files that follow a single style are easier to review and audit.
The &lt;a href=&#34;https://www.flyn.org/projects/pedansee/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pedansee&lt;/a&gt; utility parses
source files in C and indicates whether they comply
with one such style.&lt;/p&gt;
&lt;p&gt;Pedansee’s default style strives for consistency, and it also
removes pitfalls that lead to bugs. For example, C does not require
braces around one-line blocks. However, leaving them off sometimes leads to the situation
where a programmer later indents a statement following a block and
expects it to be included in the block.&lt;/p&gt;
&lt;p&gt;It is possible to integrate pedansee with a project that builds using the GNU autotools.
First, add the following to the project’s &lt;code&gt;configure.ac&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AC_PATH_PROG(PEDANSEE, pedansee)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AM_CONDITIONAL(HAVE_PEDANSEE, test -n &amp;#34;$PEDANSEE&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next, add this to the &lt;code&gt;Makefile.am&lt;/code&gt; responsible for compiling the project’s source code (replace &lt;em&gt;proj_1_0&lt;/em&gt;):&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;check:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;if HAVE_PEDANSEE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       set -e; for i in $(proj_1_0_la_SOURCES); do $(PEDANSEE) $$i -- -x c $(DEFS) $(proj_1_0_la_CFLAGS); done
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;endif
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With this, running pedansee is a matter of executing &lt;code&gt;make check&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The tool indent will reformat C source code according to a configurable style.
Flyn Computing&amp;rsquo;s preferred use is &lt;code&gt;indent -linux foo.c&lt;/code&gt;.
This follows Linus Torvalds&amp;rsquo;s preferred style.&lt;/p&gt;
&lt;h2 id=&#34;catching-bugs-with-assertions&#34;&gt;Catching bugs with assertions&lt;/h2&gt;
&lt;p&gt;Assertions can help catch the bugs that result from ill composition or otherwise misused interfaces,
but you should not use them to catch runtime conditions from which a program could otherwise recover.
In general, it is best to catch bugs as early as possible during the course of writing a program;
the following definition of &lt;code&gt;C_ASSERT&lt;/code&gt; will at compile time catch
bugs involving constants:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1] __attribute__((unused))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;catching-bugs-with-run-time-unit-testing&#34;&gt;Catching bugs with run-time unit testing&lt;/h2&gt;
&lt;p&gt;Proving the correctness of a program
or relying completely on code audits
does not measure up to the complexity found in most programs.
Thus run-time testing remains necessary.
Unit testing tests the components of a program independently,
and it is best performed as a program is written.
For example, the programmer specifies a C function,
and then he writes a series of tests to ensure the C function
implements the specification.
Finally, he writes the function itself and runs the tests.
This makes the programmer an adversary of himself.
Precisely when he best has in mind the purpose of a function,
he writes the tests for that function.
Only after the tests exist and can provide evidence of the correctness
of the function does he write the function itself.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://libcheck.github.io/check/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;check&lt;/a&gt; framework aids in writing
unit tests for programs specified in C.
Check can use &lt;code&gt;fork&lt;/code&gt;/&lt;code&gt;exec&lt;/code&gt; to allow a series of tests to run even if one
terminates due to a memory error,
although this feature can be turned off to facilitate running the tests in a
debugger. Check also supports environment variables that result in running a subset of tests.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;It is possible to integrate check with a project that builds using the GNU autotools.
First, add the following to the project’s &lt;code&gt;configure.ac&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PKG_CHECK_MODULES([CHECK], [check &amp;amp;gt;= 0.9.4],have_check=yes,have_check=no)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AM_CONDITIONAL(HAVE_CHECK, test x&amp;#34;$have_check&amp;#34; = &amp;#34;xyes&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next, add this to the &lt;code&gt;Makefile.am&lt;/code&gt; responsible for compiling the project’s tests (replace … or omit the statement entirely):&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;if HAVE_CHECK
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;noinst_PROGRAMS += unit-test
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;endif
&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;if HAVE_CHECK
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unit_test_SOURCES = unit-test.c
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unit_test_LDADD = ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;endif
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note that this example assumes that the project ships a library, namely &lt;em&gt;libproj&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Each source file ought to contain tests. For example, this checks that the function
&lt;code&gt;x&lt;/code&gt; produces the string &lt;code&gt;bar&lt;/code&gt; when passed &lt;code&gt;foo&lt;/code&gt;:&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-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#ifdef HAVE_CHECK
&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;nf&#34;&gt;START_TEST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x_test&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;nf&#34;&gt;ck_assert_str_eq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;END_TEST&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;cp&#34;&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Refer to check’s documentation for a description of the API used to write such tests.&lt;/p&gt;
&lt;p&gt;Writing the framework code necessary for test execution can be tedious,
as it involves bundling tests into suites and maintaining a main function.
Some projects include a script that generates this source; see &lt;a href=&#34;https://www.flyn.org/projects/libdmapsharing/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;libdmapsharing&lt;/a&gt;’s &lt;code&gt;generate-test-suites&lt;/code&gt;, for example.&lt;/p&gt;
&lt;h2 id=&#34;measuring-code-coverage-using-gcov&#34;&gt;Measuring code coverage using gcov&lt;/h2&gt;
&lt;p&gt;Unit tests ought to maximally cover the body of source code that makes up a program.
Although it is impossible to test other than the simplest programs across all
possible inputs, testing should at least try to execute each possible branch in a program.
GCC’s gcov can help achieve path coverage.&lt;/p&gt;
&lt;p&gt;To use gcov to measure your path coverage, compile your program using &lt;code&gt;-fprofile-arcs -ftest-coverage&lt;/code&gt;.
You can build with
the GNU
autotools a configure script that activates these flags when passed &lt;code&gt;--enable-coverage&lt;/code&gt;.
To do this, use the following pattern in &lt;code&gt;configure.ac&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug],[enable debugging build])])
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AC_ARG_ENABLE(coverage, [AC_HELP_STRING([--enable-coverage],[enable code-coverage build])])
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;if test &amp;#34;x$enable_debug&amp;#34; = &amp;#34;xyes&amp;#34;; then
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    CFLAGS=&amp;#34;$CFLAGS -g&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;elif test &amp;#34;x$enable_coverage&amp;#34; = &amp;#34;xyes&amp;#34;; then
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    CFLAGS=&amp;#34;$CFLAGS -fprofile-arcs -ftest-coverage&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;else
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    CFLAGS=&amp;#34;$CFLAGS -O2&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fi
&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;AC_PROG_CC
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run your program after building it with gcov support.
The result is an instrumented execution that will produce files containing the details
of the execution. To view these details, run:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ gcov foo.c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;where &lt;code&gt;foo.c&lt;/code&gt; is a source file. This will provide a summary along with a
detailed report in &lt;code&gt;foo.c.gcov&lt;/code&gt;. The report marks lines with an integer representing
how many times that line executed. A line preceded by ##### did not execute,
and thus indicates insufficient test coverage.&lt;/p&gt;
&lt;p&gt;Some projects
require an argument
that points gcov to the directory containing the project’s object
files (i.e., .libs). This is the case when the project includes
library code:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ gcov foo.c -o .libs/libfoo_1_0-foo.gnco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;catching-memory-errors-with-valgrind&#34;&gt;Catching memory errors with Valgrind&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;http://valgrind.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Valgrind&lt;/a&gt; helps find in programs memory errors
such as buffer overflows and memory leaks,
and thus it might help find bugs missed even when unit tests provide full
path coverage.
To use Valgrind, compile your program to include debugging symbols
and without optimization. Then run the following (replace &lt;code&gt;program -options &amp;amp;hellip;&lt;/code&gt;):&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ valgrind --leak-check=full --num-callers=100 program -options ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;configure.ac&lt;/code&gt; fragment described in the gcov section
above also provides support for a &lt;code&gt;--enable-debug&lt;/code&gt; flag.&lt;/p&gt;
&lt;h2 id=&#34;catching-memory-errors-with-gcc&#34;&gt;Catching memory errors with GCC&lt;/h2&gt;
&lt;p&gt;Always use GCC&amp;rsquo;s &lt;code&gt;-Wall&lt;/code&gt; and &lt;code&gt;-Wextra&lt;/code&gt; options.&lt;/p&gt;
&lt;p&gt;GCC supports a &lt;code&gt;-fsanitize=address&lt;/code&gt; option that instruments a program to catch memory errors,
including out-of-bounds memory accesses and memory that is used after having been freed.
Simply invoke the option when compiling, and run the resulting program.
As a dynamic analyzer, this will only catch errors that manifest while running.
Refer to GCC&amp;rsquo;s documentation for other GCC sanitize options.&lt;/p&gt;
&lt;p&gt;GCC also supports a &lt;code&gt;-fanalyzer&lt;/code&gt; option that invokes a static analyzer on the program
GCC is compiling.&lt;/p&gt;
&lt;h2 id=&#34;catching-programming-errors-with-american-fuzzy-lop&#34;&gt;Catching programming errors with American Fuzzy Lop&lt;/h2&gt;
&lt;p&gt;Fuzzing provides randomized input patterns to a program in an attempt
to cause the program to crash and thereby expose a bug.
This technique might help find bugs missed by the techniques above.&lt;/p&gt;
&lt;p&gt;For a program to be tested by American Fuzzy Lop (AFL), the program must read its input
from standard input. If this is not the case, then you will need to write a wrapper
program to facilitate testing.&lt;/p&gt;
&lt;p&gt;To use AFL, compile your program using the following pattern:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ afl-gcc program.c -o program
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next, craft a series of input patterns that will guide AFL as it later
produces its random inputs.  The AFL documentation describes how to do
this, but placing the following in &lt;code&gt;fuzz_testcase_dir/0&lt;/code&gt; will cause AFL
to produce character inputs:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;b
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finally, run the program with:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ afl-fuzz -i fuzz_testcase_dir -o fuzz_findings_dir ./fuzz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will run AFL. AFL provides a real-time display and, when
run as described, places crash-producing inputs in
&lt;code&gt;fuzz_findings_dir/crashes/&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;static-linking-with-the-gnu-linker&#34;&gt;Static linking with the GNU linker&lt;/h2&gt;
&lt;p&gt;When you statically link using the GNU linker, &lt;code&gt;ld&lt;/code&gt; adds library symbols referenced by your code to the program it outputs.
&lt;code&gt;Ld&lt;/code&gt; adds these symbols using source-file granularity; that is, if you require the function &lt;code&gt;foo&lt;/code&gt;,
then &lt;code&gt;ld&lt;/code&gt; will include &lt;code&gt;foo&lt;/code&gt; along with any other symbols defined in the same source file as &lt;code&gt;foo&lt;/code&gt;.
If you want to produce small programs, then it might make sense to write your libraries such that each
source file contains a single externally-visible function;
this will minimize the amount of code included in your program.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Ld&lt;/code&gt; only includes symbols that you have not already defined, allowing you to override library functions.
This must be used with care, because if you redefine &lt;code&gt;foo&lt;/code&gt; but not
&lt;code&gt;bar&lt;/code&gt; but both were defined in the same library source file, then
you will get a symbol conflict; &lt;code&gt;ld&lt;/code&gt; will include both &lt;code&gt;foo&lt;/code&gt;
and &lt;code&gt;bar&lt;/code&gt;, and the conflict arises as a result of two definitions:
your &lt;code&gt;foo&lt;/code&gt; and the library&#39;s &lt;code&gt;foo&lt;/code&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Certificates</title>
      <link>https://www.flyn.org/notes/certificates/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/certificates/</guid>
      <description>&lt;h2 id=&#34;generate&#34;&gt;Generate&lt;/h2&gt;
&lt;h3 id=&#34;generate-a-ca-certificate-and-key&#34;&gt;Generate a CA certificate and key&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;openssl req -new -x509 -sha256 -newkey rsa:4096 -days 365 -extensions v3_ca -nodes -keyout ca.key -out ca.pem&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This should result in a certificate with &lt;em&gt;X509v3 Basic Constraints&lt;/em&gt; set to &lt;em&gt;CA:TRUE&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&#34;generate-a-self-signed-certificate-and-key&#34;&gt;Generate a self-signed certificate and key&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;openssl req -new -x509 -sha256 -newkey rsa:4096 -days 365 -nodes -keyout example.com.key -out example.com.pem&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;generate-a-pkcs10-x509-certificate-signing-request&#34;&gt;Generate a PKCS#10 X.509 certificate signing request&lt;/h3&gt;
&lt;dl&gt;
&lt;dt&gt;Generate a private key:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;openssl genrsa -out example.com.key 4096&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Produce a corresponding CSR:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;openssl req -new -key example.com.key -out example.com.csr&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Review the CSR:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;openssl req -in example.com.csr -noout -text&lt;/pre&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&#34;generate-a-ca-signed-certificate-from-a-certificate-signing-request-and-ca-certificatekey&#34;&gt;Generate a “CA”-signed certificate from a certificate signing request and “CA” certificate/key&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;openssl x509 -req -sha256 -days 365 -in example.com.csr -CA ca.pem -CAkey ca.key -set_serial 01 -out example.com.pem&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;display&#34;&gt;Display&lt;/h2&gt;
&lt;h3 id=&#34;display-in-human-readable-form-the-contents-of-a-certificate-in-pem-format&#34;&gt;Display in human-readable form the contents of a certificate in PEM format&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;openssl x509 -in example.com.pem -noout -text&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;display-in-human-readable-form-the-contents-of-a-certificate-in-der-format&#34;&gt;Display in human-readable form the contents of a certificate in DER format&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;openssl x509 -in example.com.der -inform DER -noout -text&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;display-in-human-readable-form-the-contents-of-a-certificate-revocation-list-in-der-format&#34;&gt;Display in human-readable form the contents of a certificate revocation list in DER format&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;openssl crl -in example.com.crl -inform DER -noout -text&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;convert&#34;&gt;Convert&lt;/h2&gt;
&lt;h3 id=&#34;convert-a-pkcs7-certificate-into-a-x509-certificate&#34;&gt;Convert a PKCS#7 certificate into a X.509 certificate&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;openssl pkcs7 -print_certs -in example.com.p7p -out example.com.pem&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;convert-a-certificate-and-private-key-into-a-pkcs12-file&#34;&gt;Convert a certificate and private key into a PKCS#12 file&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;openssl pkcs12 -export -out certificate.pfx -inkey example.com.key -in example.com.pem -certfile ca.pem&lt;/code&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>cryptoswap</title>
      <link>https://www.flyn.org/abandoned/cryptoswap/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/cryptoswap/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;The cryptoswap package supports building an encrypted swap partition
when a system boots.  This may be necessary on systems that use encrypted
filesystems because plaintext secrets may be written to disk when memory
is swapped to disk.&lt;/p&gt;
&lt;h1 id=&#34;nasty-details&#34;&gt;Nasty Details&lt;/h1&gt;
&lt;p&gt;Cryptoswap.sh should be installed in /etc/init.d.  During system boot,
cryptoswap.sh should execute right before checkroot.sh.  When shutting
down, cryptoswap should execute after sysklogd.&lt;/p&gt;
&lt;p&gt;This package also includes an initialization  script for building loopback
encrypted /tmp.  This may be necessary if a system contains encrypted
filesystems but / is not encrypted.  A link from directories like /var/tmp
to /tmp may be appropriate.  There are a few other alternatives for
systems such as these:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Tmpfs is a Linux kernel feature that allows /tmp to exist in memory.  This is a good solution for systems with a lot of memory and/or (encrypted) swap.&lt;/li&gt;
&lt;li&gt;If you have a system that uses encrypted home directories, per-user temporary directories inside $HOME could be used.  This would ensure that user&#39;s data is protected but would require that all applications use $HOME/tmp instead of /tmp.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Finally, the project may be used to create an encrypted root filesystem.
Doing so requires two special partitions.  First, create a small partition
to hold your kernel and initrd image, /dev/hdaX.  Second create a large
partition to contain the root of your filesystem, /dev/hdaY.&lt;/p&gt;
&lt;p&gt;Next configure and install an initrd-based boot system:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ensure romfs is compiled in your kernel (not a module).&lt;/li&gt;&lt;/li&gt;
&lt;li&gt;Create a kernel-supported filesystem on /dev/hdaX and copy your kernel to /vmlinux.&lt;/li&gt;&lt;/li&gt;
&lt;li&gt;Download busybox and extract it as initrd/busybox.&lt;/li&gt;&lt;/li&gt;
&lt;li&gt;Update initrd/src/etc/modules.initrd to include any modules needed to boot.&lt;/li&gt;&lt;/li&gt;
&lt;li&gt;Build cryptoswap&#39;s initrd image (cd initrd &amp;amp;&amp;amp; make initrd) and copy it to the filesystem on /dev/hdaX at /initrd.img.gz.&lt;/li&gt;&lt;/li&gt;
&lt;li&gt;Make sure you use literal = &amp;quot;root=/dev/ram0 init=/linuxrc rw&amp;quot; or liLO equivalent.&lt;/li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Finally, create a proper encrypted filesystem on /dev/hdaY:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Randomize the partition: dd if=/dev/urandom of=/dev/hdaY.&lt;/li&gt;&lt;/li&gt;
&lt;li&gt;Set up a loopback device: openssl enc -d -aes-256-ecb -in initrd/src/etc/efsk | losetup -p0 -e aes /dev/loop0 /dev/hdaY.&lt;/li&gt;&lt;/li&gt;
&lt;li&gt;Create the root filesystem: mkfs.ext2 /dev/loop0.&lt;/li&gt;&lt;/li&gt;
&lt;li&gt;Mount your new root filesystem: mount /dev/loop0 &amp;lt;mountpoint&amp;gt;.&lt;/li&gt;&lt;/li&gt;
&lt;li&gt;Populate your new root filesystem.&lt;/li&gt;&lt;/li&gt;
&lt;/ol&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>cryptsetup-0.2-hexkey</title>
      <link>https://www.flyn.org/patches/cryptsetup-0.2-hexkey/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/cryptsetup-0.2-hexkey/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;cryptsetup-0.2-hexkey.patch.gz&#34;&gt;cryptsetup-0.2-hexkey&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch that allows one to input a key into cryptsetup using hexadecimal notation.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>dia-20030920-exportformat</title>
      <link>https://www.flyn.org/patches/dia-20030920-exportformat/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/dia-20030920-exportformat/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;dia-20030920-exportformat.patch.gz&#34;&gt;dia-20030920-exportformat&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for dia that allows one to use dia&#39;s -t and -e options together.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>dia-20031203-vfs</title>
      <link>https://www.flyn.org/patches/dia-20031203-vfs/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/dia-20031203-vfs/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;dia-20031203-vfs.patch.gz&#34;&gt;dia-20031203-vfs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for dia that begins to add support for GNOME VFS.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>DirectFB-0.9.8-dev_input_js</title>
      <link>https://www.flyn.org/patches/DirectFB-0.9.8-dev_input_js/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/DirectFB-0.9.8-dev_input_js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;DirectFB-0.9.8-dev_input_js.patch.gz&#34;&gt;DirectFB-0.9.8-dev_input_js&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for the &lt;a href=&#34;http://www.directfb.org&#34;&gt;DirectFB&lt;/a&gt;
library which allows it to work with new-style Linux joystick device names
(/dev/input/js?).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>dmapd</title>
      <link>https://www.flyn.org/projects/dmapd/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/dmapd/</guid>
      <description>&lt;p&gt;The dmapd project provides a GObject-based, Open Source implementation
of DMAP sharing with the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for both DAAP and DPAP&lt;/li&gt;
&lt;li&gt;Support for realtime transcoding of media formats not natively supported by clients&lt;/li&gt;
&lt;li&gt;Support for many metadata formats, such as those associated with Ogg Vorbis and MP3 (e.g., ID3)&lt;/li&gt;
&lt;li&gt;Detection of video streams so that clients may play them as video&lt;/li&gt;
&lt;li&gt;Use of GStreamer to support a wide range of audio and video CODECs&lt;/li&gt;
&lt;li&gt;Caching of photograph thumbnails to avoid regenerating them each time the server restarts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dmapd runs on Linux and other POSIX operating systems. It has been used
on OpenWrt Linux-based systems with as little as 32MB of memory to serve
music, video, and photograph libraries containing thousands of files.&lt;/p&gt;
&lt;p&gt;Dmapd supports the following command line options:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;-?, --help&lt;/dt&gt;&lt;dd&gt;Show help options&lt;/dd&gt;
&lt;dt&gt;-f, --foreground&lt;/dt&gt;&lt;dd&gt;Do not fork; remain in foreground&lt;/dd&gt;
&lt;dt&gt;-n, --name&lt;/dt&gt;&lt;dd&gt;Name of media shares&lt;/dd&gt;
&lt;dt&gt;-m, --music-dir&lt;/dt&gt;&lt;dd&gt;Music directory&lt;/dd&gt;
&lt;dt&gt;-p, --picture-dir&lt;/dt&gt;&lt;dd&gt;Picture directory&lt;/dd&gt;
&lt;dt&gt;-M, --music-format&lt;/dt&gt;&lt;dd&gt;Acceptable music format&lt;/dd&gt;
&lt;dt&gt;-P, --picture-format&lt;/dt&gt;&lt;dd&gt;Acceptable picture format&lt;/dd&gt;
&lt;dt&gt;-l, --lockpath&lt;/dt&gt;&lt;dd&gt;Path to lockfile&lt;/dd&gt;
&lt;dt&gt;-i, --pidpath&lt;/dt&gt;&lt;dd&gt;Path to PID file&lt;/dd&gt;
&lt;dt&gt;-d, --db-dir&lt;/dt&gt;&lt;dd&gt;Media database directory&lt;/dd&gt;
&lt;dt&gt;-u, --user&lt;/dt&gt;&lt;dd&gt;User to run as&lt;/dd&gt;
&lt;dt&gt;-g, --group&lt;/dt&gt;&lt;dd&gt;Group to run as&lt;/dd&gt;
&lt;dt&gt;-t, --transcode-mime-type&lt;/dt&gt;&lt;dd&gt;Target MIME type for transcoding&lt;/dd&gt;
&lt;dt&gt;-r, --rt-transcode&lt;/dt&gt;&lt;dd&gt;Perform transcoding in real-time&lt;/dd&gt;
&lt;dt&gt;-w, --max-thumbnail-width&lt;/dt&gt;&lt;dd&gt;Maximum thumbnail size (may reduce memory use)&lt;/dd&gt;
&lt;dt&gt;-c, --directory-containers&lt;/dt&gt;&lt;dd&gt;Serve DMAP containers based on filesystem heirarchy&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Dmapd supports the following environment variables:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;DMAPD_DEBUG&lt;/dt&gt;&lt;dd&gt;Enable verbose debugging messages&lt;/dd&gt;
&lt;dt&gt;DMAPD_CONFIG_FILE&lt;/dt&gt;&lt;dd&gt;Path to an alternate configuration file&lt;/dd&gt;
&lt;dt&gt;DMAPD_MODULEDIR&lt;/dt&gt;&lt;dd&gt;Directory containing dmapd modules&lt;/dd&gt;
&lt;dt&gt;DMAPD_AV_META_READER_MODULE&lt;/dt&gt;&lt;dd&gt;Name of an alternate AV module&lt;/dd&gt;
&lt;dt&gt;DMAPD_AV_RENDER_MODULE&lt;/dt&gt;&lt;dd&gt;Name of an alternate AV render module; when applicable may also specify a host, e.g.: DMAPD_AV_RENDER_MODULE=gst:host=192.168.0.1&lt;/dd&gt;
&lt;dt&gt;DMAPD_PHOTO_META_READER_MODULE&lt;/dt&gt;&lt;dd&gt;Name of an alternate photograph module&lt;/dd&gt;
&lt;dt&gt;DMAPD_DB_MODULE&lt;/dt&gt;&lt;dd&gt;Name of an alternate database module&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Dmapd can provide content to any client that supports DAAP or DPAP. This
includes the following software clients and hardware devices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apple &lt;a href=&#34;http://www.apple.com/itunes/&#34;&gt;iTunes&lt;/a&gt;™&lt;/li&gt;
&lt;li&gt;Apple &lt;a href=&#34;http://www.apple.com/ilife/iphoto/&#34;&gt;iPhoto&lt;/a&gt;™&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://projects.gnome.org/rhythmbox/&#34;&gt;Rhythmbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Roku SoundBridge™&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dmapd can read metadata from any music file supported by GStreamer. In order
to use this feature you must have the appropriate GStreamer plugins
installed. The following plugins are always required if you wish to use
this feature:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;app&lt;/li&gt;
&lt;li&gt;decodebin&lt;/li&gt;
&lt;li&gt;typefindfunctions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following GStreamer plugins are required for the corresponding
media types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mad (MP3)&lt;/li&gt;
&lt;li&gt;id3demux (MP3)&lt;/li&gt;
&lt;li&gt;ogg (Ogg Vorbis, etc.)&lt;/li&gt;
&lt;li&gt;vorbis (Ogg Vorbis)&lt;/li&gt;
&lt;li&gt;flac (FLAC)&lt;/li&gt;
&lt;li&gt;mpeg2dec (MPEG video)&lt;/li&gt;
&lt;li&gt;theora (Ogg Theora video)&lt;/li&gt;
&lt;/ul&gt;





	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.1.tar.gz&#34;&gt;dmapd-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.2.tar.gz&#34;&gt;dmapd-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.3.tar.gz&#34;&gt;dmapd-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.4.tar.gz&#34;&gt;dmapd-0.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.5.tar.gz&#34;&gt;dmapd-0.0.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.6.tar.gz&#34;&gt;dmapd-0.0.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.7.tar.gz&#34;&gt;dmapd-0.0.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.8.tar.gz&#34;&gt;dmapd-0.0.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.9.tar.gz&#34;&gt;dmapd-0.0.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.10.tar.gz&#34;&gt;dmapd-0.0.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.11.tar.gz&#34;&gt;dmapd-0.0.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.12.tar.gz&#34;&gt;dmapd-0.0.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.13.tar.gz&#34;&gt;dmapd-0.0.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.14.tar.gz&#34;&gt;dmapd-0.0.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.15.tar.gz&#34;&gt;dmapd-0.0.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.16.tar.gz&#34;&gt;dmapd-0.0.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.17.tar.gz&#34;&gt;dmapd-0.0.17.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.18.tar.gz&#34;&gt;dmapd-0.0.18.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.19.tar.gz&#34;&gt;dmapd-0.0.19.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.20.tar.gz&#34;&gt;dmapd-0.0.20.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.21.tar.gz&#34;&gt;dmapd-0.0.21.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.22.tar.gz&#34;&gt;dmapd-0.0.22.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.23.tar.gz&#34;&gt;dmapd-0.0.23.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.24.tar.gz&#34;&gt;dmapd-0.0.24.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.25.tar.gz&#34;&gt;dmapd-0.0.25.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.26.tar.gz&#34;&gt;dmapd-0.0.26.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.27.tar.gz&#34;&gt;dmapd-0.0.27.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.28.tar.gz&#34;&gt;dmapd-0.0.28.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.29.tar.gz&#34;&gt;dmapd-0.0.29.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.30.tar.gz&#34;&gt;dmapd-0.0.30.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.31.tar.gz&#34;&gt;dmapd-0.0.31.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.32.tar.gz&#34;&gt;dmapd-0.0.32.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.33.tar.gz&#34;&gt;dmapd-0.0.33.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.34.tar.gz&#34;&gt;dmapd-0.0.34.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.35.tar.gz&#34;&gt;dmapd-0.0.35.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.36.tar.gz&#34;&gt;dmapd-0.0.36.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.37.tar.gz&#34;&gt;dmapd-0.0.37.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.38.tar.gz&#34;&gt;dmapd-0.0.38.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.39.tar.gz&#34;&gt;dmapd-0.0.39.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.40.tar.gz&#34;&gt;dmapd-0.0.40.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.41.tar.gz&#34;&gt;dmapd-0.0.41.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.42.tar.gz&#34;&gt;dmapd-0.0.42.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.43.tar.gz&#34;&gt;dmapd-0.0.43.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.44.tar.gz&#34;&gt;dmapd-0.0.44.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.45.tar.gz&#34;&gt;dmapd-0.0.45.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.46.tar.gz&#34;&gt;dmapd-0.0.46.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.47.tar.gz&#34;&gt;dmapd-0.0.47.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.48.tar.gz&#34;&gt;dmapd-0.0.48.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.49.tar.gz&#34;&gt;dmapd-0.0.49.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.50.tar.gz&#34;&gt;dmapd-0.0.50.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.51.tar.gz&#34;&gt;dmapd-0.0.51.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.52.tar.gz&#34;&gt;dmapd-0.0.52.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.53.tar.gz&#34;&gt;dmapd-0.0.53.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.54.tar.gz&#34;&gt;dmapd-0.0.54.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.55.tar.gz&#34;&gt;dmapd-0.0.55.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.56.tar.gz&#34;&gt;dmapd-0.0.56.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.57.tar.gz&#34;&gt;dmapd-0.0.57.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.58.tar.gz&#34;&gt;dmapd-0.0.58.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.59.tar.gz&#34;&gt;dmapd-0.0.59.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.60.tar.gz&#34;&gt;dmapd-0.0.60.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.61.tar.gz&#34;&gt;dmapd-0.0.61.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.62.tar.gz&#34;&gt;dmapd-0.0.62.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.63.tar.gz&#34;&gt;dmapd-0.0.63.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.64.tar.gz&#34;&gt;dmapd-0.0.64.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.65.tar.gz&#34;&gt;dmapd-0.0.65.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.66.tar.gz&#34;&gt;dmapd-0.0.66.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.67.tar.gz&#34;&gt;dmapd-0.0.67.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.68.tar.gz&#34;&gt;dmapd-0.0.68.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.69.tar.gz&#34;&gt;dmapd-0.0.69.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.70.tar.gz&#34;&gt;dmapd-0.0.70.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.71.tar.gz&#34;&gt;dmapd-0.0.71.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.72.tar.gz&#34;&gt;dmapd-0.0.72.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.73.tar.gz&#34;&gt;dmapd-0.0.73.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.74.tar.gz&#34;&gt;dmapd-0.0.74.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.75.tar.gz&#34;&gt;dmapd-0.0.75.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.76.tar.gz&#34;&gt;dmapd-0.0.76.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.77.tar.gz&#34;&gt;dmapd-0.0.77.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.78.tar.gz&#34;&gt;dmapd-0.0.78.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.79.tar.gz&#34;&gt;dmapd-0.0.79.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.80.tar.gz&#34;&gt;dmapd-0.0.80.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.81.tar.gz&#34;&gt;dmapd-0.0.81.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.82.tar.gz&#34;&gt;dmapd-0.0.82.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.83.tar.gz&#34;&gt;dmapd-0.0.83.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.84.tar.gz&#34;&gt;dmapd-0.0.84.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.85.tar.gz&#34;&gt;dmapd-0.0.85.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.86.tar.gz&#34;&gt;dmapd-0.0.86.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.87.tar.gz&#34;&gt;dmapd-0.0.87.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.88.tar.gz&#34;&gt;dmapd-0.0.88.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.89.tar.gz&#34;&gt;dmapd-0.0.89.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.90.tar.gz&#34;&gt;dmapd-0.0.90.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.91.tar.gz&#34;&gt;dmapd-0.0.91.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.92.tar.gz&#34;&gt;dmapd-0.0.92.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.93.tar.gz&#34;&gt;dmapd-0.0.93.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.94.tar.gz&#34;&gt;dmapd-0.0.94.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.95.tar.gz&#34;&gt;dmapd-0.0.95.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.96.tar.gz&#34;&gt;dmapd-0.0.96.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-dummy-0.0.1.tar.gz&#34;&gt;dmapd-dummy-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-dummy-0.0.2.tar.gz&#34;&gt;dmapd-dummy-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The dmapd project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/dmapd&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>DoD Common Access Card and other smartcards on Unix</title>
      <link>https://www.flyn.org/notes/smartcard/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/smartcard/</guid>
      <description>&lt;h2 id=&#34;fedora&#34;&gt;Fedora&lt;/h2&gt;
&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Install the DoD root certificates:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Download the DoD root certificates. Visit the DoD &lt;a href=&#34;https://public.cyber.mil/pki-pke/pkipke-document-library/?_dl_facet_pkipke_type=popular-dod-certs&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PKI/PKE Document Library&lt;/a&gt;, and download the target of the link “PKI CA Certificate Bundles: PKCS#7 For DoD PKI Only - Version 5.6”.&lt;/li&gt;
&lt;li&gt;Unzip the downloaded package, and enter the unzipped directory.&lt;/li&gt;
&lt;li&gt;Copy the certificates to the system directory: &lt;code&gt;cp DoD_PKE_CA_chain.pem /etc/pki/ca-trust/source/anchors/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Update the CA trust store: &lt;code&gt;update-ca-trust&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Install the necessary packages: &lt;code&gt;yum install opensc pcsc-lite-ccid pcsc-lite pcsc-tools&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Start the PC/SC daemon: &lt;code&gt;systemctl start pcscd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Configure the system to start the PC/SC daemon each time it boots: &lt;code&gt;systemctl enable pcscd.service&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;dod-common-access-card&#34;&gt;DoD Common Access Card&lt;/h3&gt;
&lt;p&gt;This document describes how to integrate the US Department of Defense Common Access Card with UNIX.
Here we assume that you have a CAC which already contains the appropriate certificates and private keys.&lt;/p&gt;
&lt;h4 id=&#34;firefox&#34;&gt;Firefox&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Insert your CAC into the smart-card reader&lt;/li&gt;
&lt;li&gt;Introduce the PC/SC interface to Firefox:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Select &lt;code&gt;Preferences&lt;/code&gt;→&lt;code&gt;Privacy &amp;amp; Security&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Security Devices&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Load&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Name the module something like &lt;code&gt;CAC Support&lt;/code&gt; and select &lt;code&gt;/usr/lib64/pkcs11/opensc-pkcs11.so&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;pam&#34;&gt;PAM&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Obtain the DoD certificate set from &lt;a href=&#34;https://crl.chamb.disa.mil/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://crl.chamb.disa.mil/&lt;/a&gt; and run the following command to add the certificate to your local certificate database: &lt;code&gt;certutil -A -n DODCA_29 -t pCcT,pCcT,pCcT -i DODCA_29.cer -d /etc/pki/nssdb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Review &lt;code&gt;/etc/pam.d/smartcard-auth&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Edit &lt;code&gt;/etc/pam_pkcs11/pam_pkcs11.conf&lt;/code&gt; and set &lt;code&gt;user_mappers&lt;/code&gt; to &lt;code&gt;subject&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;pkcs11_inspect debug&lt;/code&gt;, and look for &lt;code&gt;Printing data for ...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Edit &lt;code&gt;/etc/pam_pkcs11/subject_mapping&lt;/code&gt; to contain something like &lt;code&gt;CN=LAST.FIRST.MIDDLE.ID,OU=USA,OU=PKI,OU=DoD,O=U.S. Government,C=US -&amp;gt; username&lt;/code&gt;, replacing LAST.FIRST.MIDDLE.ID with the output from &lt;code&gt;pkcs11_inspect&lt;/code&gt; and username with the corresponding UNIX username&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;gnupg&#34;&gt;GnuPG&lt;/h4&gt;
&lt;p&gt;First, complete the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install the necessary packages: &lt;code&gt;yum install dirmngr gnupg2-smime gnupg-pkcs11-scd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;scdaemon-program /usr/bin/gnupg-pkcs11-scd&lt;/code&gt; to &lt;code&gt;~/.gnupg/gpg-agent.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add the following to &lt;code&gt;~/.gnupg/gnupg-pkcs11-scd.conf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;providers p1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;provider-p1-library /usr/lib64/pkcs11/libcoolkeypk11.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;emulate-openpgpg
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openpgp-sign hash
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openpgp-encr hash
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openpgp-auth hash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace hash with the output from &lt;code&gt;echo &amp;quot;SCD LEARN&amp;quot; | gpg-agent --server gpg-connect-agent&lt;/code&gt; (You will probably want the hashes from the second record)&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Obtain the DoD certificate set from &lt;a href=&#34;https://crl.chamb.disa.mil/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://crl.chamb.disa.mil/&lt;/a&gt; and your own certificate from &lt;a href=&#34;https://dod411.gds.disa.mil/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://dod411.gds.disa.mil/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;pivkey-c910&#34;&gt;PIVKey C910&lt;/h3&gt;
&lt;p&gt;A PIVKey C910 arrives without certificates or private keys. Unfortunately, the management of these materials requires Windows.
The necessary utilities exist in the archive available at &lt;a href=&#34;http://pivkey.com/pkadmin.zip&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://pivkey.com/pkadmin.zip&lt;/a&gt;.
You can use the vSEC:CMS tool contained therein to perform the following tasks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set the PIN of the smartcard (the default is 000000)&lt;/li&gt;
&lt;li&gt;Set the administrative key of the smartcard (the default is 000000000000000000000000)&lt;/li&gt;
&lt;li&gt;Load a &lt;a href=&#34;../certificates/index.html#pkcs12&#34;&gt;PKCS#12&lt;/a&gt; certificate/key onto the smartcard&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PIVKey C910 supports a number of key slots which are defined by various standards:&lt;/p&gt;
&lt;table class=&#34;booktabs&#34; summary=&#34;Description of key slots&#34;&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Slot identifier&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;9A&lt;/td&gt;&lt;td&gt;Authentication (e.g., system logins)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9C&lt;/td&gt;&lt;td&gt;Digital signatures&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9D&lt;/td&gt;&lt;td&gt;Key management (encryption)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9E&lt;/td&gt;&lt;td&gt;Card authentication; does not require PIN (e.g., door locks)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;You can use the following invocations of PivKeyTool.exe to associate certificates/keys with these slots:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;kbd&gt;PivKeyTool.exe --listmd&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;List the certificates/keys present on the smartcard.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;PivKeyTool.exe --listpiv&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;List the mappings between certificate IDs and key slots.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;PivKeyTool.exe --userpin &lt;em&gt;PIN&lt;/em&gt; --mappiv9&lt;em&gt;n&lt;/em&gt; &lt;em&gt;certid&lt;/em&gt;&lt;/kbd&gt;, where &lt;kbd&gt;&lt;em&gt;n&lt;/em&gt;&lt;/kbd&gt; is &lt;kbd&gt;a&lt;/kbd&gt;, &lt;kbd&gt;c&lt;/kbd&gt;, &lt;kbd&gt;d&lt;/kbd&gt;, or &lt;kbd&gt;e&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Establish a mapping between a certificate ID and key slot.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id=&#34;smart-card-related-gnupg-commands&#34;&gt;Smart-card-related GnuPG commands&lt;/h1&gt;&lt;/h2&gt;
&lt;p&gt;Once you have installed and configured GnuPG, you might find the following commands helpful:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;kbd&gt;gpg2 --card-status&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Test the interoperability between GnuPG and the CAC&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;gpgsm --import DODCA_29.cer  DODEMAILCA_29.cer&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Import the DoD certificates downloaded from &lt;a href=&#34;https://crl.chamb.disa.mil/&#34;&gt;https://crl.chamb.disa.mil/&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;gpgsm --import &lt;i&gt;name&lt;/i&gt;.cer&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Import the personal certificate downloaded from &lt;a href=&#34;https://dod411.gds.disa.mil&#34;&gt;https://dod411.gds.disa.mil/&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;gpgsm --learn-card&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Learn about the CAC&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;gpgsm --list-secret-keys&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Describe the secret keys available on the CAC&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;gpgsm --verbose --disable-crl-checks --armour --sign &lt;i&gt;path&lt;/i&gt;&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Perform a test signature&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;gpgsm --verbose --disable-crl-checks --armour --verify &lt;i&gt;path&lt;/i&gt;&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Perform a test verification&lt;/dd&gt;
&lt;/dl&gt;
</description>
    </item>
    
    <item>
      <title>Domain Controller</title>
      <link>https://www.flyn.org/notes/ad/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/ad/</guid>
      <description>&lt;p&gt;This document describes how to configure a computer running FreeBSD
to serve as an Active Directory domain controller.&lt;/p&gt;
&lt;h2 id=&#34;base-unix-domain-controller&#34;&gt;Base UNIX Domain Controller&lt;/h2&gt;
&lt;p&gt;First, setup the server:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install FreeBSD and configure networking. Be sure to set the server&amp;rsquo;s hostname such as with &lt;code&gt;hostname=&amp;quot;dc.example.com&amp;quot;&lt;/code&gt; in &lt;code&gt;/etc/rc.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Configure the Samba 4 port by entering &lt;code&gt;/usr/ports/net/samba43/&lt;/code&gt;
and running &lt;code&gt;make config&lt;/code&gt;. (The version 4.4 of the Samba port is presently &lt;a href=&#34;https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=209787&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;broken&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;For a minimal install, select neither &lt;em&gt;mDNSresponder&lt;/em&gt; nor &lt;em&gt;avahi&lt;/em&gt;
while configuring the build.&lt;/li&gt;
&lt;li&gt;Build and install Samba 4 by running &lt;code&gt;make install clean&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Activate filesystem ACLs in /etc/fstab, e.g., &lt;code&gt;/dev/ada0p2 / ufs rw,acls 1 1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Configure Samba by running &lt;code&gt;samba-tool domain provision --use-rfc2307 --interactive&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;samba-tool user add&lt;/code&gt; to add users to Samba&amp;rsquo;s authentication database.&lt;/li&gt;
&lt;li&gt;Activate Samba by adding &lt;code&gt;samba_server_enable=&amp;quot;YES&amp;quot;&lt;/code&gt; to &lt;code&gt;/etc/rc.conf&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Next, add a Windows client to the domain:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set the Windows host&amp;rsquo;s DNS resolver to point to the Samba server&amp;rsquo;s IP address.&lt;/li&gt;
&lt;li&gt;Right click on the computer icon; select &lt;code&gt;properties&lt;/code&gt;; select &lt;code&gt;change settings&lt;/code&gt; near the text &lt;em&gt;computer name&lt;/em&gt;; and press the button to change the computer&amp;rsquo;s domain.&lt;/li&gt;
&lt;li&gt;Select the &lt;code&gt;domain&lt;/code&gt; radio button and type in Samba 4&amp;rsquo;s full domain.&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;ok&lt;/code&gt; and provide the administrative password for the Samba 4 domain.&lt;/li&gt;
&lt;li&gt;Restart the client computer.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As an aside, Red Hat-derived
Linux distributions such as RHEL, CentOS, and Fedora make it difficult to
configure Samba 4 as an Active Directory domain controller.
This is primarily because these distributions use
MIT Kerberos, while many of the Active Directory-related features in Samba 4
require Heimdal Kerberos.
Information about the coming solution to this problem can be found on the Internet,
including as documented by the &lt;a href=&#34;https://wiki.samba.org/index.php/MIT_Build&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Samba project&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;adding-host-records-to-sambas-dns-implementation&#34;&gt;Adding Host Records to Samba&amp;rsquo;s DNS implementation&lt;/h2&gt;
&lt;p&gt;Each domain host will likely require a DNS record in Samba&amp;rsquo;s DNS service.
You can use the following command to add an A record to the domain controller at dc.example.com for the host which is named host.example.com
and bears the IP address 10.0.0.64:
&lt;code&gt;samba-tool dns add dc.example.com example.com host A 10.0.0.64&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;remote-management-from-a-windows-computer&#34;&gt;Remote Management from a Windows Computer&lt;/h2&gt;
&lt;p&gt;Windows provides facilities for remotely managing domain-connected
computers. In order to activate one such facility on a user computer,
run the following on that user computer:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Enable-PSremoting
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once the user computer is set to accept remote-management requests,
you can run the following command as the domain administrator from an
administrative computer to test remote management (replace &lt;em&gt;TARGET&lt;/em&gt;
with the computer you intent to manage):&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Invoke-Command -Computer TARGET -ScriptBlock { &amp;#34;C:\Program files&amp;#34; |  Get-ChildItem }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;smart-card-authentication&#34;&gt;Smart-Card Authentication&lt;/h2&gt;
&lt;h3 id=&#34;certificate-production&#34;&gt;Certificate Production&lt;/h3&gt;
&lt;h4 id=&#34;establish-a-certificate-authority&#34;&gt;Establish a Certificate Authority&lt;/h4&gt;
&lt;p&gt;Smart-card-based authentication requires a number of certificates:
CA &amp;quot;root-of-trust&amp;quot; certificate, a certificate for the domain controller, and certificates for each user.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a basic CA directory structure from within the root of where you intend
to store your certificates and other materials: &lt;code&gt;mkdir certs crl private newcerts&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create a blank file named &lt;code&gt;index.txt&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create files named &lt;code&gt;serial&lt;/code&gt; and &lt;code&gt;crlnumber&lt;/code&gt; containing &lt;code&gt;00&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add the following to &lt;code&gt;/etc/openssl.cnf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CRLURL      = [URL of CRL server, e.g., https://crl.example.com/example.com.crl]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;BASEDIR     = [Base of certificate store; where signed certificates go]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;COUNTRY     = [Two-letter country code]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;STATE       = [State of province (not abbreviated)]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LOCALITY    = [City, town, etc.]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ORG         = [Name of organization]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OU          = [Organizational unit]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DOMAIN      = [Domain, e.g., example.com]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EMAIL       = [Email address]@$DOMAIN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DC          = [Hostname of domain controller]
&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;# Using &amp;#34;ADSI Edit&amp;#34; on Windows:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   1. Connect to domain controller
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   2. Default naming context
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   3. DC=...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   4. OU=Domain Controllers
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   5. Right click on CN=... and select Properties
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   6. View objectGUID in hexadecimal
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DCGUID      = [Domain controller&amp;#39;s GUID in HEX, eg, FEEDDEADBEEF...]
&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;# Using &amp;#34;ADSI Edit&amp;#34; on Windows:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   1. Connect to domain controller
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   2. Default naming context
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   3. DC=...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   4. CN=Users
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   5. Right click on CN=... and select Properties
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   6. View usePrincipalName
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UPN         = [UPN of user]
&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;oid_section = new_oids
&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;[ new_oids ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scardLogin = 1.3.6.1.4.1.311.20.2.2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;msUPN      = 1.3.6.1.4.1.311.20.2.3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;msKDC      = 1.3.6.1.5.2.3.5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;msADGUID   = 1.3.6.1.4.1.311.25.1
&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;[ ca ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default_ca  = CA_default                  # The default ca section
&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;[ CA_default ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dir              = $BASEDIR               # Where everything is kept
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;certs            = $dir/certs             # Where the issued certs are kept
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crl_dir          = $dir/crl               # Where the issued crl are kept
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;database         = $dir/index.txt         # database index file.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unique_subject   = yes                    # Set to &amp;#39;no&amp;#39; to allow creation of
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;new_certs_dir    = $dir/newcerts          # default place for new certs.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;certificate      = $dir/cacert.pem        # The CA certificate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;serial           = $dir/serial            # The current serial number
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crlnumber        = $dir/crlnumber         # the current crl number
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crl              = $dir/ca-crl.pem        # The current CRL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;private_key      = $dir/private/cakey.pem # The private key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RANDFILE         = $dir/private/.rand     # private random number file
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# x509_extensions =               # Extensions to add to certificate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name_opt         = ca_default             # Subject Name options
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cert_opt         = ca_default             # Certificate field options
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crl_extensions   = crl_ext
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default_days     = 730                    # how long to certify for
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default_crl_days = 30                     # how long before next CRL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default_md       = sha256                 # use public key default MD
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;preserve         = no                     # keep passed DN ordering
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;policy           = policy_match
&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;[ policy_match ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;countryName            = match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stateOrProvinceName    = match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;organizationName       = match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;organizationalUnitName = optional
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commonName             = supplied
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;emailAddress           = optional
&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;[ policy_anything ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;countryName            = match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stateOrProvinceName    = match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;localityName           = match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;organizationName       = match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;organizationalUnitName = match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commonName             = supplied
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;emailAddress           = supplied
&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;[ req ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default_bits           = 4096
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default_keyfile        = privkey.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distinguished_name     = req_distinguished_name
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;x509_extensions        = v3_ca            # The extensions to add to the self signed cert
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;string_mask            = utf8only
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;attributes             = req_attributes
&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;[ req_attributes ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;challengePassword     = A challenge password
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;challengePassword_min = 4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;challengePassword_max = 20
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unstructuredName      = An optional company name
&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;[ req_distinguished_name ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;countryName                    = Country Name (2 letter code)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;countryName_default            = $COUNTRY
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;countryName_min                = 2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;countryName_max                = 2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stateOrProvinceName            = State or Province Name (full name)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stateOrProvinceName_default    = $STATE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;localityName                   = Locality Name (eg, city)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;localityName_default           = $LOCALITY
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;organizationName               = Organization Name (eg, company)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;organizationName_default       = $ORG
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;organizationalUnitName         = Organizational Unit Name (eg, section)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;organizationalUnitName_default = $OU
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;emailAddress                   = Email Address
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;emailAddress_default           = $EMAIL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;emailAddress_max               = 64
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commonName                     = Common Name (eg, YOUR name)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commonName_default             = hostname.$DOMAIN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commonName_max                 = 64
&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;[ v3_req ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;basicConstraints = CA:FALSE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;keyUsage         = nonRepudiation, digitalSignature, keyEncipherment
&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;[ v3_ca ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;subjectKeyIdentifier   = hash
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;authorityKeyIdentifier = keyid:always,issuer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;basicConstraints       = CA:true
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;keyUsage               = cRLSign, keyCertSign
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crlDistributionPoints  = URI:$CRLURL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nsCertType             = sslCA, emailCA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;subjectAltName         = email:copy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;issuerAltName          = issuer:copy
&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;[ crl_ext ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;issuerAltName          = issuer:copy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;authorityKeyIdentifier = keyid:always
&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;# Extensions for domain-controller certificates:
&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;[ usr_cert_mskdc ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# This goes against PKIX guidelines but some CAs do it and some software
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# requires this to avoid interpreting an end-user certificate as a CA.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;basicConstraints       = CA:FALSE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crlDistributionPoints  = URI:$CRLURL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nsCertType             = server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;keyUsage               = nonRepudiation, digitalSignature, keyEncipherment
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nsComment              = &amp;#34;Domain Controller Certificate&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;subjectKeyIdentifier   = hash
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;authorityKeyIdentifier = keyid,issuer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;subjectAltName         = @dc_subjalt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;issuerAltName          = issuer:copy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nsCaRevocationUrl      = $CRLURL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;extendedKeyUsage       = clientAuth,serverAuth,msKDC
&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;[dc_subjalt]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DNS                    = $DC
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;otherName              = msADGUID;FORMAT:HEX,OCTETSTRING:$DCGUID
&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;# Extensions for smart-card user certificates:
&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;[ usr_cert_scarduser ]
&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;# This goes against PKIX guidelines but some CAs do it and some software
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# requires this to avoid interpreting an end-user certificate as a CA.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;basicConstraints       = CA:FALSE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crlDistributionPoints  = URI:$CRLURL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nsCertType             = client, email
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;keyUsage               = nonRepudiation, digitalSignature, keyEncipherment
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nsComment              = Smart Card Login Certificate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;subjectKeyIdentifier   = hash
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;authorityKeyIdentifier = keyid,issuer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;subjectAltName         = email:copy,otherName:msUPN;UTF8:$UPN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;issuerAltName          = issuer:copy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nsCaRevocationUrl      = $CRLURL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;extendedKeyUsage       = clientAuth,scardLogin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;generate-a-ca-root-certificate&#34;&gt;Generate a CA Root Certificate&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Properly define the variables at the top of &lt;code&gt;openssl.cnf&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;See &lt;a href=&#34;../certificates/index.html&#34;&gt;notes on the use of certificates&lt;/a&gt;. You will want to use the &lt;code&gt;-config openssl.cnf&lt;/code&gt; option to use the above configuration.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;generate-a-certificate-for-samba&#34;&gt;Generate a Certificate for Samba&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Under the &lt;code&gt;CA_default&lt;/code&gt; section of &lt;code&gt;openssl.cnf&lt;/code&gt;, set &lt;code&gt;x509_extensions = usr_cert_mskdc&lt;/code&gt; and ensure the line is not commented out.&lt;/li&gt;
&lt;li&gt;Generate the certificate using &lt;code&gt;openssl req -new -newkey rsa:4096 -keyout private/dc-key.pem -out dc-req.pem -config openssl.cnf -nodes&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Sign the Samba certificate using the CA certificate &lt;code&gt;openssl ca -config openssl.cnf -in dc-req.pem -out dc-cert.pem&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;generate-a-smart-card-user-certificate&#34;&gt;Generate a Smart-Card User Certificate&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Under the &lt;code&gt;CA_default&lt;/code&gt; section of &lt;code&gt;openssl.cnf&lt;/code&gt;, set &lt;code&gt;x509_extensions = usr_cert_scarduser&lt;/code&gt; and ensure the line is not commented out.&lt;/li&gt;
&lt;li&gt;Generate the certificate using &lt;code&gt;openssl req -new -newkey rsa:2048 -keyout private/user-key.pem -out user-req.pem -config openssl.cnf -nodes&lt;/code&gt;. Note that you might have limited key types/sizes to choose from, depending on the type of smartcard you plan to use.&lt;/li&gt;
&lt;li&gt;Sign the user certificate using the CA certificate &lt;code&gt;openssl ca -config openssl.cnf -in user-req.pem -out user-cert.pem&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install the certificate and private key onto a &lt;a href=&#34;../smartcard/index.html&#34;&gt;smartcard&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;certificate-revocation-list-server&#34;&gt;Certificate-Revocation-List Server&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Configure, build, and install the apache24 port.&lt;/li&gt;
&lt;li&gt;Generate and install a certificate and private key for Apache at &lt;code&gt;/usr/local/etc/apache24/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Configure Apache, including the following in &lt;code&gt;/usr/local/etc/apache24/httpd.conf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LoadModule ssl_module modules/mod_ssl.so&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ServerName crl.example.com:443&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Listen 443&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SSLEngine on&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SSLCertificateFile /usr/local/etc/apache24/crl.example.com.pem&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SSLCertificateKeyFile /usr/local/etc/apache24/crl.example.com.key&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Generate the CRL with &lt;code&gt;openssl ca -config openssl.cnf -gencrl -out example.com.crl&lt;/code&gt; and install the result in Apache&amp;rsquo;s document directory.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;configure-samba-to-support-certificate-based-login&#34;&gt;Configure Samba to support certificate-based login&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Copy the necessary certificates and the CRL onto the Samba host (see the next step for what Samba will require).&lt;/li&gt;
&lt;li&gt;Generate Diffie-Hellman parameters: &lt;code&gt;openssl dhparam 4096 -out dc-dhparams.pem&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add to smb4.conf:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tls enabled       = yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tls certfile      = /usr/local/samba/private/tls/dc-cert.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tls keyfile       = /usr/local/samba/private/tls/secure/dc-privkey.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tls cafile        = /usr/local/samba/private/tls/cacert.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tls crlfile       = /usr/local/samba/private/tls/ca.crl
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tls dhparams file = /usr/local/samba/private/tls/dc-dhparams.pem
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;configure-windows-to-support-certificate-based-login&#34;&gt;Configure Windows to support certificate-based login&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Convert your PEM-format CA certificate to DER: &lt;code&gt;openssl x509 -in cacert.pem -out cacert.cer -outform DER&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Convert your user certificate to DER: &lt;code&gt;openssl x509 -in Administrator-cert.pem -out Administrator-cert.cer -outform DER&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>Doppelganger</title>
      <link>https://www.flyn.org/notes/doppelganger/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/doppelganger/</guid>
      <description>&lt;p&gt;Doppelganger is configured as
&lt;a href=&#34;../mimic/index.html&#34;&gt;Mimic&lt;/a&gt; with the following exceptions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Change the hostname in &lt;code&gt;/etc/hostname&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Configure logging in a way appropriate for the host network.&lt;/li&gt;
&lt;li&gt;Adjust &lt;code&gt;mynetworks&lt;/code&gt; in golem&amp;rsquo;s &lt;code&gt;/etc/postfix/main.cf&lt;/code&gt;,
because Doppelganger might exist on a different network
than Mimic.&lt;/li&gt;
&lt;li&gt;Adjust
&lt;code&gt;/etc/postfix/saslpasswd&lt;/code&gt;
and
&lt;code&gt;relayhost&lt;/code&gt; in golem&amp;rsquo;s &lt;code&gt;/etc/postfix/main.cf&lt;/code&gt;
to use a relay appropriate for Doppelganger&amp;rsquo;s network. Compile with &lt;code&gt;postmap&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install the &lt;em&gt;wireguard-tools&lt;/em&gt; package, configure WireGuard by writing the configuration below to &lt;em&gt;/etc/wireguard/wg0.conf&lt;/em&gt;,
and run &lt;code&gt;systemctl enable wg-quick@wg0&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Interface]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Address = 192.168.2.4/32
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ListenPort = 51820
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Generate with umask 077 &amp;amp;&amp;amp; wg genkey | tee privkey | wg pubkey &amp;gt;pubkey
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Deploy public key to server.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PrivateKey = PRIVATEKEY
&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;[Peer]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Obtain public- and pre-shared-key from server.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PublicKey = PUBLICKEY
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PresharedKey = PRESHAREDKEY
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AllowedIPs = 192.168.2.0/24, 192.168.1.0/24
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EndPoint = IP:51820
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PersistentKeepalive = 30
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>esound-0.2.15-unlock</title>
      <link>https://www.flyn.org/patches/esound-0.2.15-unlock/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/esound-0.2.15-unlock/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;esound-0.2.15-unlock.patch.gz&#34;&gt;esound-0.2.15-unlock&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for &lt;a href=&#34;http://www.tux.org/~ricdude/EsounD.html&#34;&gt;EsounD&lt;/a&gt;
which adds the two command line options which permit non-owners to control
the dæmon.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>fctk</title>
      <link>https://www.flyn.org/projects/fctk/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/fctk/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;The Flyn Computing Template Kit
(fctk) is a collection of fmt-ptrn templates, XSLT templates, and project
descriptions.  These tools are used at Flyn Computing for development.
The collection of templates use XML and the priciple of not repeating
oneself.  For example, this description comes from an XML file that
is used to generate the fctk package&#39;s man page, HTML documentation,
&lt;a href=&#34;http://www.rpm.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RPM&lt;/a&gt;
specification, Debian package specifications, etc.&lt;/p&gt;
&lt;h1 id=&#34;nasty-details&#34;&gt;Nasty Details&lt;/h1&gt;
&lt;p&gt;Using np with the included project template, gnu_c:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;np foo gnu_c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;hellip;will create the following directory tree:&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-fallback&#34; data-lang=&#34;fallback&#34;&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;AUTHORS    INSTALL      TODO          dry         missing        src
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;COPYING    Makefile.am  configure.in  include     mkinstalldirs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ChangeLog  NEWS         debian        install-sh  scripts
&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;./debian:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;changelog  control  copyright  rules
&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;./dry:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Makefile.am  foo.xml
&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;./include:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Makefile.am
&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;./scripts:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Makefile.am
&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;./src:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Makefile.am  foo.c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each file that is created provides a reasonable starting point for a
GNU C project.  Dry/foo.xml is used by dry/Makefile to create getopt()
C code, man pages, etc.&lt;/p&gt;
&lt;p&gt;Project directory structure:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;xslt&lt;/dt&gt;
&lt;dd&gt;XSLT templates to generate getopt() C code, man pages, HTML
documentation, Debian package specifications, RPM specifications,
etc. from one XML description.&lt;/dd&gt;
&lt;dt&gt;templates&lt;/dt&gt;
&lt;dd&gt;Templates for use with nf.&lt;/dd&gt;
&lt;dt&gt;projects&lt;/dt&gt;
&lt;dd&gt;Project descriptions for use with np&lt;/dd&gt;
&lt;dt&gt;fctk&lt;/dt&gt;
&lt;dd&gt;Auxillary files which are referenced by some of the other templates.  These should go in /etc/fctk/&lt;/dd&gt;
&lt;/dl&gt;





	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk.ppc.rpm&#34;&gt;fctk.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk.src.rpm&#34;&gt;fctk.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk.tar.gz&#34;&gt;fctk.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.3.tar.gz&#34;&gt;fctk-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.4.tar.gz&#34;&gt;fctk-0.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.4-1.i386.rpm&#34;&gt;fctk-0.0.4-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.5.tar.gz&#34;&gt;fctk-0.0.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.5-1.i386.rpm&#34;&gt;fctk-0.0.5-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.5-1.src.rpm&#34;&gt;fctk-0.0.5-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.6.tar.gz&#34;&gt;fctk-0.0.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.6-1.ppc.rpm&#34;&gt;fctk-0.0.6-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.6-1.src.rpm&#34;&gt;fctk-0.0.6-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.7.tar.gz&#34;&gt;fctk-0.0.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.7-1.ppc.rpm&#34;&gt;fctk-0.0.7-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.7-1.src.rpm&#34;&gt;fctk-0.0.7-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.8.tar.gz&#34;&gt;fctk-0.0.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.8-0.fdr.1.ppc.rpm&#34;&gt;fctk-0.0.8-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.8-0.fdr.1.src.rpm&#34;&gt;fctk-0.0.8-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.9.tar.gz&#34;&gt;fctk-0.0.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.10.tar.gz&#34;&gt;fctk-0.0.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.11.tar.gz&#34;&gt;fctk-0.0.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.12.tar.gz&#34;&gt;fctk-0.0.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk_0.0.6-1_powerpc.deb&#34;&gt;fctk_0.0.6-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk_0.0.7-1_powerpc.deb&#34;&gt;fctk_0.0.7-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk_powerpc.deb&#34;&gt;fctk_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_templates-0.0.1.tar.gz&#34;&gt;flyn_templates-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_templates-0.0.1-1.i386.rpm&#34;&gt;flyn_templates-0.0.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_templates-0.0.2.tar.gz&#34;&gt;flyn_templates-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_templates-0.0.2-1.i386.rpm&#34;&gt;flyn_templates-0.0.2-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>Fedora Nano</title>
      <link>https://www.flyn.org/notes/fedoranano/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/fedoranano/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Fedora Nano is a project with three goals:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Develop and document a technique for installing the smallest possible Fedora installation onto a CompactFlash or other solid-state disk.&lt;/li&gt;
&lt;li&gt;Provide a centralized location for package enhancement requests
geared towards small, embedded systems. Most often, packages will be broken up into core and optional components, reducing core package dependencies.&lt;/li&gt;
&lt;li&gt;Document redundancy within Fedora. Redundancy can be an indication of a healthy software environment as competing projects may promote innovation. However, redundancy also increases memory and disk usage and makes code auditing more difficult.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I am using the following components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VIA EPIA ME6000 Fanless Mini-ITX Motherboard&lt;/li&gt;
&lt;li&gt;PC2100/DDR266 256MB Memory&lt;/li&gt;
&lt;li&gt;Morex 2699 Mini-ITX Case&lt;/li&gt;
&lt;li&gt;Round IDE cables&lt;/li&gt;
&lt;li&gt;CFDISK.2G CompactFlash to IDE adapter&lt;/li&gt;
&lt;li&gt;Notebook 2.5&amp;quot; to 2.3&amp;quot; HD IDE adapter (soldered into molex connector)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;installation-of-fedora-9-on-a-compactflash-disk&#34;&gt;Installation of Fedora 9 on a CompactFlash disk&lt;/h2&gt;
&lt;p&gt;These instructions assume your build host is of the same architecture as your target.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a filesystem on the CompactFlash disk and mount it at /mnt. Mount any other filesystems required on top of /mnt.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the command &lt;b&gt;yumdownloader &amp;ndash;installroot=/mnt &amp;ndash;resolve &amp;ndash;destdir=packages &lt;em&gt;package&lt;/em&gt;&lt;/b&gt; to download the following packages and their dependencies (see also &lt;a href=&#34;http://yum.baseurl.org/ticket/1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Use yum to install to a temporary, yumless filesystem, yum bug #1&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;filesystem&lt;/li&gt;
&lt;li&gt;busybox&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the command &lt;code&gt;rpm --root /mnt -Uvh packages/*.rpm&lt;/code&gt; to install the packages downloaded using the previous step.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;At a minimum, create the following busybox links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ln -s /sbin/busybox /mnt/sbin/init&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ln -s /sbin/busybox /mnt/bin/sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ln -s /sbin/busybox /mnt/bin/hostname&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ln -s /sbin/busybox /mnt/bin/mv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ln -s /sbin/busybox /mnt/bin/touch&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit /mnt/etc/init.d/rcS to execute startup services.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build and install a custom kernel (my configuration is available &lt;a href=&#34;config&#34;&gt;here&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Copy your kernel config to .config and run &lt;code&gt;make oldconfig&lt;/code&gt; or run &lt;code&gt;make menuconfig&lt;/code&gt; to configure the kernel.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;make clean&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;make clean binrpm-pkg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rpm --root /mnt -Uvh /usr/src/redhat/RPMS/i386/*kernel*.rpm&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add an entry to &lt;code&gt;/etc/grub.conf&lt;/code&gt; for the new root disk.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Execute &lt;code&gt;grub-install primary-disk-devnode&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;pwconv&lt;/code&gt; to create /etc/shadow.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In order to make the root filesystem readonly, perform the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/var&lt;/code&gt;, &lt;code&gt;/home&lt;/code&gt; and &lt;code&gt;/tmp&lt;/code&gt; should be mounted from a readwrite partition. I have these directories on one partition and mount them by adding &lt;code&gt;/shared/var  /var  none  bind  0 0&lt;/code&gt; to &lt;code&gt;/etc/fstab&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;READONLY=yes&lt;/code&gt; in /etc/sysconfig/readonly-root.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The
&lt;a href=&#34;http://et.redhat.com/~rjones/febootstrap/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;febootstrap&lt;/a&gt;
project looks like an interesting project to create a small Fedora
installation.&lt;/p&gt;
&lt;h2 id=&#34;fine-grained-package-requests&#34;&gt;Fine-grained Package Requests&lt;/h2&gt;
&lt;h3 id=&#34;pull-out-perl-dependency&#34;&gt;Pull out perl dependency&lt;/h3&gt;
&lt;p&gt;Perl is a good language, but may be too large a requirement for some small systems.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stunnel: Pull /usr/sbin/stunnel3 into seperate package?, ✓&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=442842&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Red Hat Bugzilla #442842&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bogofilter: Pull /usr/bin/bogoupgrade into seperate package?, ✓&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=442843&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Red Hat Bugzilla #442843&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;dl&gt;
&lt;dt&gt;cups&lt;/dt&gt;
&lt;dd&gt;/usr/lib/cups/backend/dnssd is written in perl. This is a CUPS backend that discovers printers using avahi. See the &amp;#x2713;&lt;a href=&#34;http://www.cups.org/doc-1.1/spm.html#WRITING_BACKENDS&#34;&gt;CUPS Software Programmers Manual&lt;a/&gt;. move cups perl backends into sub package, &amp;#x2713;&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=465157&#34;&gt;Red Hat Bugzilla #465157&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;fedora-ds-base&lt;/dt&gt;
&lt;dd&gt;Several FDS scripts are written in perl.&lt;/dd&gt;
&lt;dt&gt;foomatic&lt;/dt&gt;
&lt;dd&gt;Much of foomatic is written in perl. RFE: Migrate to C foomatic once feasible, &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=466068&#34;&gt;Red Hat Bugzilla #466068&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;ghostscript&lt;/dt&gt;
&lt;dd&gt;The X11 code in ghostscript could be placed in a separate package.&lt;/dd&gt;
&lt;dt&gt;texlive-utils&lt;/dt&gt;
&lt;dd&gt;The X11 code in texlive-utils (/usr/bin/mf) could be placed in a separate package.&lt;/dd&gt;
&lt;dt&gt;avahi-tools&lt;/dt&gt;
&lt;dd&gt;The X11 code in avahi-tools (/usr/bin/avahi-discover) could be placed in a separate package. avahi-discover requires GTK, should move to avahi-ui-tools, &amp;#x2713;&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=513768&#34;&gt;Red Hat Bugzilla #513768.&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;postfix&lt;/dt&gt;
&lt;dd&gt;/usr/sbin/qshape is written in perl. Pull components dependent on perl out of main postfix package?, &amp;#x2713;&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=467529&#34;&gt;Red Hat Bugzilla #467529&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;ntp&lt;/dt&gt;
&lt;dd&gt;/usr/sbin/ntp-wait and /usr/sbin/ntptrace are written in perl.&lt;/dd&gt;
&lt;dt&gt;net-snmp&lt;/dt&gt;
&lt;dd&gt;Some components are written in perl.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&#34;pull-out-mysql-dependency&#34;&gt;Pull out MySQL dependency&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Postfix: Provide both mysql and postgresql support using loadable maps patch, ✓&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=455206&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Red Hat Bugzilla #455206&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;break-up-imagemagick&#34;&gt;Break up ImageMagick&lt;/h3&gt;
&lt;p&gt;ImageMagick provides a valuable library for image processing.
However, Fedora presently packages ImageMagick in such a way that
several X11 libraries are always required. I proposed that ImageMagick
be broken up into -libs and -utilities packages. See Make ImageMagick package more fine-grained, ✓&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=478789&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Red Hat Bugzilla #478789&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;break-up-gstreamer&#34;&gt;Break up GStreamer&lt;/h3&gt;
&lt;p&gt;Fine-grained packaging of GStreamer would allow users to choose which
modules they want to install. See  ✓&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=108463&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;gstreamer-plugins should be split up, Red Hat Bugzilla #108463&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;separate-documentation-packages&#34;&gt;Separate documentation packages&lt;/h3&gt;
&lt;p&gt;Package documentation, installed in &lt;code&gt;/usr/share/doc&lt;/code&gt;, can occupy a
lot of storage space. It would be beneficial to separate documentation
into a -doc sub-package.&lt;/p&gt;
&lt;h3 id=&#34;separate-locale-packages&#34;&gt;Separate locale packages&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;/usr/lib/locale&lt;/code&gt; and &lt;code&gt;/usr/share/locale&lt;/code&gt; directories quickly grow
as more internationalized packages are added to a system. It would
be beneficial to control which locales are installed. Perhaps a
specialized package installation system like the one that has been
developed for media codecs could be applied to this problem.&lt;/p&gt;
&lt;h2 id=&#34;redundancy-tracker&#34;&gt;Redundancy Tracker&lt;/h2&gt;
&lt;p&gt;Tracking redundancy throughout all of Fedora is beyond the scope
of this project. Instead, we focus on redundencies brought in by
the following packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fedora Directory Server&lt;/li&gt;
&lt;li&gt;Kerberos&lt;/li&gt;
&lt;li&gt;FreeIPA&lt;/li&gt;
&lt;li&gt;Apache&lt;/li&gt;
&lt;li&gt;mod_nss&lt;/li&gt;
&lt;li&gt;OpenSSH&lt;/li&gt;
&lt;li&gt;Postfix&lt;/li&gt;
&lt;li&gt;Dovecot&lt;/li&gt;
&lt;li&gt;Samba&lt;/li&gt;
&lt;li&gt;Avahi&lt;/li&gt;
&lt;li&gt;Jabberd&lt;/li&gt;
&lt;li&gt;Bogofilter&lt;/li&gt;
&lt;li&gt;mt-daapd&lt;/li&gt;
&lt;li&gt;inadyn&lt;/li&gt;
&lt;/ul&gt;
&lt;dl&gt;
&lt;dt&gt;FreeIPA requires OpenLDAP, FDS requires mozldap&lt;/dt&gt;
&lt;dd&gt;
It now seems that the 389 Directory Server may build against
OpenLDAP in the future. See 
 &amp;#x2713;&lt;a href=&#34;http://directory.fedoraproject.org/wiki/Use_OpenLDAP_Clients_In_389&#34;&gt;Use OpenLDAP Clients in 389&lt;/a&gt;. It would follow that FreeIPA could do
the same.
&lt;p&gt;Previously, I tried to remove the OpenLDAP requirement from
FreeIPA. I submitted a
✓&lt;a href=&#34;https://www.redhat.com/archives/freeipa-devel/2008-February/msg00175.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;patch&lt;/a&gt; so that FreeIPA may be built against mozldap. This package was integrated into FreeIPA. However, it was later &lt;a href=&#34;http://www.redhat.com/archives/freeipa-devel/2008-June/msg00097.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;reported&lt;/a&gt;
that my patch broke &lt;code&gt;ipa-kpasswd&lt;/code&gt;. As a result, I submitted a
✓&lt;a href=&#34;https://www.redhat.com/archives/freeipa-devel/2008-July/msg00118.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;second patch&lt;/a&gt; that fixed a preexisting misuse of the OpenLDAP API.
Ipa-server ends
up requiring both openldap-clients and mozldap-tools, ✓&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=434153&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Red Hat Bugzilla #434153&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following packages require OpenLDAP:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;quota&lt;/li&gt;
&lt;li&gt;openldap-clients&lt;/li&gt;
&lt;li&gt;postfix&lt;/li&gt;
&lt;li&gt;openldap&lt;/li&gt;
&lt;li&gt;httpd&lt;/li&gt;
&lt;li&gt;cyrus-sasl&lt;/li&gt;
&lt;li&gt;libcurl&lt;/li&gt;
&lt;li&gt;libuser&lt;/li&gt;
&lt;li&gt;nfs-utils-lib&lt;/li&gt;
&lt;li&gt;krb5-server-ldap&lt;/li&gt;
&lt;li&gt;curl&lt;/li&gt;
&lt;li&gt;nss_ldap&lt;/li&gt;
&lt;li&gt;GConf2&lt;/li&gt;
&lt;li&gt;gnupg&lt;/li&gt;
&lt;li&gt;samba-winbind&lt;/li&gt;
&lt;li&gt;samba-common&lt;/li&gt;
&lt;li&gt;samba&lt;/li&gt;
&lt;li&gt;libsmbclient&lt;/li&gt;
&lt;li&gt;sudo&lt;/li&gt;
&lt;li&gt;autofs&lt;/li&gt;
&lt;li&gt;apr-util-ldap&lt;/li&gt;
&lt;li&gt;cups&lt;/li&gt;
&lt;li&gt;dirmngr&lt;/li&gt;
&lt;li&gt;gnupg2&lt;/li&gt;
&lt;li&gt;dhcp&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following packages require mozldap:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ipa-client&lt;/li&gt;
&lt;li&gt;slapi-nis&lt;/li&gt;
&lt;li&gt;mozldap-tools&lt;/li&gt;
&lt;li&gt;perl-Mozilla-LDAP&lt;/li&gt;
&lt;li&gt;ipa-server&lt;/li&gt;
&lt;li&gt;389-ds-base&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;NSS vs. OpenSSL vs. the world&lt;/dt&gt;
&lt;dd&gt;The &amp;#x2713;&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=333741&#34;&gt;Crypto Consolidation Bug&lt;/a&gt; is an ambitious project to make NSS the standard cryptological library for Fedora.&lt;/dd&gt;
&lt;/dl&gt;
</description>
    </item>
    
    <item>
      <title>FES</title>
      <link>https://www.flyn.org/abandoned/FES/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/FES/</guid>
      <description>&lt;p&gt;The Flyn Entertainment System, or FES, is a piece of software that
provides entertainment in the form of an arcade, television, and
audio player.  Rather than provide a traditional computer interface,
FES acts like a DVD player or other appliance, presenting a simple,
joystick controlled menu.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>FiOS G1100 Bridge</title>
      <link>https://www.flyn.org/notes/g1100-bridge/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/g1100-bridge/</guid>
      <description>&lt;p&gt;This document describes how to configure a Verizon FiOS G1100 to act in
bridge mode. This mode deactivates some cable television features,
but it allows another router to obtain an IP address directly
from Verizon. Other users have documented
these steps in publications such as &lt;a href=&#34;http://www.dslreports.com/forum/r31057540-Networking-HOW-TO-Bridge-G1100-So-your-Router-becomes-Primary&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;DSL
Reports&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Login to the G1100 from a computer which is directly connected to
one of the G1100’s LAN ports.&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Wireless Settings&lt;/code&gt;→&lt;code&gt; Basic Security Settings&lt;/code&gt;, and turn off
2.4 Ghz and 5 GHz wireless. Click &lt;code&gt;Apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Wireless Settings&lt;/code&gt;→&lt;code&gt;Advanced Security Settings&lt;/code&gt;, and disable
2.4 GHz and 5 GHz SSID broadcasting.&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Firewall&lt;/code&gt;, and set &lt;code&gt;Minimum Security&lt;/code&gt; for both IPv4 and IPv6. Click &lt;code&gt;Apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;My Network&lt;/code&gt;→&lt;code&gt;Network Connections&lt;/code&gt;→&lt;code&gt; Advanced&lt;/code&gt;. Disable the listed access points, and click &lt;code&gt;Apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Note the listed broadband connection. Select it, along with &lt;code&gt;Settings&lt;/code&gt;,
and uncheck &lt;code&gt;Internet Connection Firewall&lt;/code&gt;. Set &lt;code&gt;Internet Protocol&lt;/code&gt; to &lt;code&gt;No IP Address&lt;/code&gt;. Click &lt;code&gt;Apply&lt;/code&gt;. At this point, you will loose you connection
to the Internet through the G1100.&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Release&lt;/code&gt; and then &lt;code&gt;Apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;My Network&lt;/code&gt;→&lt;code&gt;Network Connections&lt;/code&gt;→&lt;code&gt;Network (Home/Office)&lt;/code&gt;. Change the G1100’s IP
address to 192.168.1.2 so as not to conflict with the replacement
router. Under the bridge section, check &lt;code&gt;Broadband Connection (Ethernet/Coax)&lt;/code&gt; and uncheck both wireless APs. Change &lt;code&gt;IP Address Distribution&lt;/code&gt; to &lt;code&gt;Disabled&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Apply&lt;/code&gt;. The G1100 is now in bridge mode, so it
will no longer obtain an IP address. Connect your replacement router to
one of the G1100’s LAN ports. From this point forward, you can interact
with the G1100 by connecting a computer to its WAN port and manually
assigning the computer an IP address on the 192.168.1.0/24 network.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>firewalld</title>
      <link>https://www.flyn.org/notes/firewalld/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/firewalld/</guid>
      <description>&lt;p&gt;Commands that make use of &lt;code&gt;--permanent&lt;/code&gt; will not take effect until firewalld restarts.&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;List the known zones:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;firewall-cmd --get-zones&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;View information about the active zones:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;firewall-cmd --get-active-zones&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Add an interface to the DMZ zone:&lt;/dt&gt;
&lt;dd&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;firewall-cmd --permanent --zone=dmz --change-interface=interface&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;In &lt;code&gt;/etc/sysconfig/network-scripts/ifcfg-interface&lt;/code&gt;, set &lt;code&gt;ZONE=dmz&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;dd&gt;
&lt;dt&gt;List the services known by firewalld&amp;mdash;known service definitions exist in &lt;i&gt;/usr/lib/firewalld/services/&lt;/i&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;firewall-cmd --get-services&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Describe the service named &lt;i&gt;https&lt;/i&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;firewall-cmd --info-service https&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;List the services permitted within within the zone named &lt;i&gt;public&lt;/i&gt;:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;firewall-cmd --zone=public --list-all&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Permit the &lt;i&gt;https&lt;/i&gt; service on the interfaces in the &lt;i&gt;dmz&lt;/i&gt; zone:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;firewall-cmd --permanent --zone=dmz --add-service=https&lt;/pre&gt; and: &lt;pre&gt;firewall-cmd --zone=dmz --add-service=https&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Define a new service, based on Wazuh:&lt;/dt&gt;
&lt;dd&gt;&lt;/dd&gt;
&lt;/dl&gt;
  * `firewall-cmd --permanent --new-service=wazuh`
  * `firewall-cmd --permanent --service=wazuh --set-description=&#34;Wazuh agent communication&#34;`
  * `firewall-cmd --permanent --service=wazuh --set-short=&#34;Wazuh&#34;`
  * `firewall-cmd --permanent --service=wazuh --add-port=1514/tcp`
  * `firewall-cmd --permanent --service=wazuh --add-port=1515/tcp`
  * `firewall-cmd --permanent --zone=public --add-service=wazuh`
&lt;dl&gt;
&lt;dt&gt;Log rejections:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;firewall-cmd --set-log-denied=all&lt;/pre&gt;&lt;/dd&gt;
&lt;/dl&gt;
</description>
    </item>
    
    <item>
      <title>flyn_docs</title>
      <link>https://www.flyn.org/projects/flyn_docs/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/flyn_docs/</guid>
      <description>&lt;p&gt;Flyn_docs is a set of files which may be used to create letterhead,
envelopes, etc. related to Flyn Computing.&lt;/p&gt;





	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_docs.i386.rpm&#34;&gt;flyn_docs.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_docs.tar.gz&#34;&gt;flyn_docs.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_docs-0.0.1.tar.gz&#34;&gt;flyn_docs-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_docs-0.0.1-1.i386.rpm&#34;&gt;flyn_docs-0.0.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>fmt-ptrn</title>
      <link>https://www.flyn.org/projects/fmt-ptrn/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/fmt-ptrn/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;New is a template system, especially useful in conjunction with a
simple text editor such as vi. The user maintains templates which
may contain format strings. At run time, nf replaces the format
strings in a template with appropriate values to create a new file.&lt;/p&gt;
&lt;p&gt;For example, given the following template:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;//   FILE: %%(FILE)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// AUTHOR: %%(FULLNAME)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;//   DATE: %%(DATE)
&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;// Copyright (C) 1999 %%(FULLNAME) %%(EMAIL)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// All rights reserved.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;nf&lt;/code&gt; will create:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;//   FILE: foo.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// AUTHOR: W. Michael Petullo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;//   DATE: 11 September 1999
&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;// Copyright (C) 1999 W. Michael Petullo new@flyn.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// All rights reserved.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;on my computer.&lt;/p&gt;
&lt;p&gt;The program understands plaintext or gziped template files.&lt;/p&gt;
&lt;p&gt;The fmt-ptrn system also provides a shared library which allows a programmer
access to nf&#39;s functionality. The system was developed to be light and
fast.  Its only external dependencies are the C library, glib2 and zlib.&lt;/p&gt;
&lt;h1 id=&#34;nasty-details&#34;&gt;Nasty Details&lt;/h1&gt;
&lt;p&gt;Nf first looks for templates in ~/.fmt-ptrn/templates.
Second, nf looks for templates in &amp;lt;datadir&amp;gt;/fmt-ptrn/template, where
datadir is defined by autoconf.  This directory is usually
/usr/local/share or /usr/share.&lt;/p&gt;
&lt;p&gt;The templates directory contains several subdirectories matching
filename extensions.  This may include directories such as html, cpp,
c, and tex.  Within each subdirectory are the actual
template files.  The template file named default
is the default template used for the filename extension.  Other templates
can be used by specifying their filename to nf on the command line (see
NF(1)).&lt;/p&gt;
&lt;p&gt;Certain types of files generally don&#39;t have extensions.  In this case,
nf looks for a template directory with the same name as the file being
created.  This is useful when using templates to create files with names
such as Makefile and README.&lt;/p&gt;
&lt;p&gt;When filling a format pattern, nf knows the value for the following
format patterns:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;DATE&lt;/dt&gt;
&lt;dd&gt;Today&amp;apos;s date.&lt;/dd&gt;
&lt;dt&gt;FILE&lt;/dt&gt;
&lt;dd&gt;The name of the file being created.&lt;/dd&gt;
&lt;dt&gt;FULLNAME&lt;/dt&gt;
&lt;dd&gt;The user&amp;apos;s full name (from GECOS field).&lt;/dd&gt;
&lt;dt&gt;FIRSTNAME&lt;/dt&gt;
&lt;dd&gt;The user&amp;apos;s first name (from GECOS field).&lt;/dd&gt;
&lt;dt&gt;MIDDLENAME&lt;/dt&gt;
&lt;dd&gt;The user&amp;apos;s middle name (from GECOS field).&lt;/dd&gt;
&lt;dt&gt;LASTNAME&lt;/dt&gt;
&lt;dd&gt;The user&amp;apos;s last name (from GECOS field).&lt;/dd&gt;
&lt;dt&gt;EMPTY_STR&lt;/dt&gt;
&lt;dd&gt;The empty string.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;In addition, any environment variable can be used as a format pattern.
An alternate string to be used in the case of an environment variable
being undefined can be specified as follows:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%(UNDEFINED:foo)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will be replaced with ”foo” in the created file if
UNDEFINED is not a part of one&#39;s environment.&lt;/p&gt;
&lt;p&gt;The alternative may be a format pattern, too.  If FIRSTNAME is defined
a Mike, the following:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%(UNDEFINED:%(before=&amp;quot;My name is &amp;quot; FIRSTNAME))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;will print “My name is Mike.”&lt;/p&gt;
&lt;p&gt;A format pattern can also be acted on by a modifier.  The following will
print the value of FOO in capital letters:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%(upper FOO)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It makes sense to use some modifiers with a literal, instead of a key
which will be replaced by a value.  For example:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%(file FOO)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;will insert the text contained in a the file whose path is the value of
the key FOO.  But:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%(file &amp;quot;foo&amp;quot;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;will insert the contents of the file named foo.&lt;/p&gt;
&lt;p&gt;The following modifiers are currently available:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;upper&lt;/dt&gt;
&lt;dd&gt;Convert to upper case.&lt;/dd&gt;
&lt;dt&gt;lower&lt;/dt&gt;
&lt;dd&gt;Convert to lower case.&lt;/dd&gt;
&lt;dt&gt;basename&lt;/dt&gt;
&lt;dd&gt;Convert to the basename of a filename.&lt;/dd&gt;
&lt;dt&gt;before=&#34;str&#34;&lt;/dt&gt;
&lt;dd&gt;Append the string str before.&lt;/dd&gt;
&lt;dt&gt;after=&#34;str&#34;&lt;/dt&gt;
&lt;dd&gt;Append the string str after.&lt;/dd&gt;
&lt;dt&gt;fn&lt;/dt&gt;
&lt;dd&gt;Tag a &#34; ()&#34; on the end.&lt;/dd&gt;
&lt;dt&gt;c_delim&lt;/dt&gt;
&lt;dd&gt;Print enveloped in a C style deliminator, ie: /* == foo == */.&lt;/dd&gt;
&lt;dt&gt;cpp_delim&lt;/dt&gt;
&lt;dd&gt;Print enveloped in a C++ style deliminator, ie: // == foo.&lt;/dd&gt;
&lt;dt&gt;sh_delim&lt;/dt&gt;
&lt;dd&gt;Print enveloped in a shell script style deliminator, ie: # == foo.&lt;/dd&gt;
&lt;dt&gt;tex_delim&lt;/dt&gt;
&lt;dd&gt;Print eveloped in a LaTeX style deliminator, ie: % == foo.&lt;/dd&gt;
&lt;dt&gt;newlines&lt;/dt&gt;
&lt;dd&gt;Replaces occurrences of &#34; &#34; in the string with new lines&lt;/dd&gt;
&lt;dt&gt;no_newlines&lt;/dt&gt;
&lt;dd&gt;Replaces occurrences of &#34;\n&#34; in the string with &#39; &#39;&lt;/dd&gt;
&lt;dt&gt;remove_underscore&lt;/dt&gt;
&lt;dd&gt;Replaces occurrences of &#39;_&#39; in the string with &#39;-&#39;&lt;/dd&gt;
&lt;dt&gt;file&lt;/dt&gt;
&lt;dd&gt;Treats the key as the path to a file, which is included&lt;/dd&gt;
&lt;dt&gt;template&lt;/dt&gt;
&lt;dd&gt;Treats the key as the path to a template, which is filled and included&lt;/dd&gt;
&lt;dt&gt;#&lt;/dt&gt;
&lt;dd&gt;A comment, this will not appear in destination file %(# Comment.)&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Several modifiers can act within one format string as illustrated:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%(basename upper FOO)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Modifiers use a stack to be applied.  The first modifier to be applied
is the one farthest to the right.  The last to be applied it the one
farthest to the left.&lt;/p&gt;





	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.12.tar.gz&#34;&gt;fmt-ptrn-1.3.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.13.tar.gz&#34;&gt;fmt-ptrn-1.3.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.14.tar.gz&#34;&gt;fmt-ptrn-1.3.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.15.tar.gz&#34;&gt;fmt-ptrn-1.3.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.16.tar.gz&#34;&gt;fmt-ptrn-1.3.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.17.tar.gz&#34;&gt;fmt-ptrn-1.3.17.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.18.tar.gz&#34;&gt;fmt-ptrn-1.3.18.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.19.tar.gz&#34;&gt;fmt-ptrn-1.3.19.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.20.tar.gz&#34;&gt;fmt-ptrn-1.3.20.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.21.tar.gz&#34;&gt;fmt-ptrn-1.3.21.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.22.tar.gz&#34;&gt;fmt-ptrn-1.3.22.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.23.tar.gz&#34;&gt;fmt-ptrn-1.3.23.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.24.tar.gz&#34;&gt;fmt-ptrn-1.3.24.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new.i386.rpm&#34;&gt;new.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new.ppc.rpm&#34;&gt;new.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new.src.rpm&#34;&gt;new.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new.tar.gz&#34;&gt;new.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.0.1.tar.gz&#34;&gt;new-1.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.0.1-1.i386.rpm&#34;&gt;new-1.0.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.12.tar.gz&#34;&gt;new-1.1.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.12-1.i386.rpm&#34;&gt;new-1.1.12-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.13.tar.gz&#34;&gt;new-1.1.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.13-1.i386.rpm&#34;&gt;new-1.1.13-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.14.tar.gz&#34;&gt;new-1.1.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.14-1.i386.rpm&#34;&gt;new-1.1.14-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.15.tar.gz&#34;&gt;new-1.1.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.15-1.i386.rpm&#34;&gt;new-1.1.15-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.16.tar.gz&#34;&gt;new-1.1.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.16-1.i386.rpm&#34;&gt;new-1.1.16-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.2.0.tar.gz&#34;&gt;new-1.2.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.2.0-1.i386.rpm&#34;&gt;new-1.2.0-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.0.tar.gz&#34;&gt;new-1.3.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.0-1.i386.rpm&#34;&gt;new-1.3.0-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.1.tar.gz&#34;&gt;new-1.3.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.1-1.i386.rpm&#34;&gt;new-1.3.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.2.tar.gz&#34;&gt;new-1.3.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.3.tar.gz&#34;&gt;new-1.3.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.3-0.fdr.1.ppc.rpm&#34;&gt;new-1.3.3-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.3-0.fdr.1.src.rpm&#34;&gt;new-1.3.3-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.4.tar.gz&#34;&gt;new-1.3.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.4-0.fdr.1.ppc.rpm&#34;&gt;new-1.3.4-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.4-0.fdr.1.src.rpm&#34;&gt;new-1.3.4-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.5.tar.gz&#34;&gt;new-1.3.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.5-1.ppc.rpm&#34;&gt;new-1.3.5-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.5-1.src.rpm&#34;&gt;new-1.3.5-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.5-2.src.rpm&#34;&gt;new-1.3.5-2.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.8.tar.gz&#34;&gt;new-1.3.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.9.tar.gz&#34;&gt;new-1.3.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.11.tar.gz&#34;&gt;new-1.3.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new_1.3.1-1_powerpc.deb&#34;&gt;new_1.3.1-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new_1.3.2-1_powerpc.deb&#34;&gt;new_1.3.2-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new_powerpc.deb&#34;&gt;new_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>Forensic analysis</title>
      <link>https://www.flyn.org/notes/forensic/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/forensic/</guid>
      <description>&lt;h2 id=&#34;post-compromise-analysis-on-red-hat-like-operating-systems&#34;&gt;Post-compromise analysis on Red-Hat-like operating systems&lt;/h2&gt;
&lt;p&gt;This describes some useful techniques for performing a post-compromise forensic analysis of a Red-Hat-like operating system,
such as
&lt;a href=&#34;http://www.redhat.com/en/technologies/linux-platforms/enterprise-linux&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Red Hat Enterprise Linux&lt;/a&gt;,
&lt;a href=&#34;http://www.centos.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CentOS&lt;/a&gt;,
and
&lt;a href=&#34;http://www.fedoraproject.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Fedora&lt;/a&gt;.
While these instructions are RPM-centric,
similar techniques could apply elsewhere,
for example by replacing &lt;code&gt;rpm&lt;/code&gt; with &lt;code&gt;dpkg&lt;/code&gt; and &lt;code&gt;yum&lt;/code&gt; with &lt;code&gt;apt&lt;/code&gt;.
We assume that you have an image of the compromised host&amp;rsquo;s disk partition (or partitions) which we refer to here as &lt;code&gt;/evidence/partition.img&lt;/code&gt;.
Where a whole disk is required, we use the name &lt;code&gt;/evidence/disk.img&lt;/code&gt;.
(See below for how to manipulate a partition within a whole-disk image and how to deal with Linux Volume Management.)
We further assume that the compromised
host was protected by neither a &lt;a href=&#34;http://www.redhat.com/en/about/blog/uefi-secure-boot&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;trusted boot process&lt;/a&gt;,
nor a file integrity tool such as &lt;a href=&#34;http://www.tripwire.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Tripwire&lt;/a&gt;,
nor an encrypted disk.
Such protections would only make this task easier.&lt;/p&gt;
&lt;h3 id=&#34;partition-carving-and-linux-volume-management&#34;&gt;Partition carving and Linux Volume Management&lt;/h3&gt;
&lt;p&gt;Given a whole-disk image, you can mount a single partition by first identifying where the partition begins with &lt;code&gt;parted&lt;/code&gt; and then providing this byte offset to the &lt;code&gt;mount&lt;/code&gt; command. The following example assumes a 512-byte sector size while mounting partition one:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ parted /evidence/disk.img unit s print
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WARNING: You are not superuser.  Watch out for permissions.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Model:  (file)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Disk /evidence/disk.img: 62914560s
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Sector size (logical/physical): 512B/512B
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Partition Table: msdos
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Disk Flags: 
&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;Number  Start     End        Size       Type     File system  Flags
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 1      2048s     1026047s   1024000s   primary  xfs          boot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 2      1026048s  62914559s  61888512s  primary               lvm
&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;$ sudo mount -o offset=$((2048*512)) /evidence/disk.img /mnt/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the above example, the second partition is dedicated to LVM.
You can mount partitions subject to LVM in this way:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo kpartx -va /evidence/disk.img
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;add map loop1p1 (253:4): 0 1024000 linear /dev/loop1 2048
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;add map loop1p2 (253:5): 0 61888512 linear /dev/loop1 1026048
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ls /dev/mapper/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;centos-root  loop1p1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;centos-swap  loop1p2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;control
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo mount /dev/mapper/centos-root /mnt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;analysis-setup&#34;&gt;Analysis setup&lt;/h3&gt;
&lt;p&gt;First, you will mount &lt;code&gt;/evidence/partition.img&lt;/code&gt; into the filesystem of a trustworthy (i.e., likely uncompromised) computer. It would not hurt to isolate this computer from
the rest of your network, but it is very important that you not immediately directly boot &lt;code&gt;/evidence/partition.img&lt;/code&gt;. (Some analysis will require that you boot &lt;code&gt;partition.img&lt;/code&gt;; you will need to decide when to do so in order to perform tests like &lt;code&gt;netstat&lt;/code&gt; checks.)&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount /evidence/partition.img /mnt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It is possible that you will start with a disk image which is in some virtualization-platform format. If this is the case, then you can
use &lt;code&gt;qemu-img&lt;/code&gt; to convert it to a raw disk image. For an example of a disk-image-format conversion, see our notes on &lt;a href=&#34;https://www.flyn.org/notes/virtualization/index.html&#34;&gt;virtualization&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;weak-rpm-verification&#34;&gt;Weak RPM verification&lt;/h3&gt;
&lt;p&gt;The following will check the integrity of the files which were installed on &lt;code&gt;/evidence/partition.img&lt;/code&gt; (mounted at &lt;code&gt;/mnt&lt;/code&gt;)
from RPM packages. However, this check relies on the integrity of the (possibly compromised) RPM database on &lt;code&gt;/evidence/partition.img&lt;/code&gt;, and so the results here cannot be fully trusted.
Despite this step&amp;rsquo;s flaws, it might turn up something of interest, especially if the attacker was careless.&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rpm --root /mnt --verify -a | grep &amp;#34;\(^[^.]\)\|^.[^.]\|^..[^.]\|^...[^.]\|^....[^.]\|^.....[^.]\|^......[^.]\|^.......[^.T]\|^........[^.]&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;rpm&lt;/code&gt; manpage documents the details of the output from this command.
In summary, it indicates which files have changed since being installed from an RPM package. The use of &lt;code&gt;grep&lt;/code&gt; prints only the files
RPM thinks are modified &lt;em&gt;other than mere mtime changes&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&#34;trustworthy-rpm-verification&#34;&gt;Trustworthy RPM verification&lt;/h3&gt;
&lt;p&gt;Here we describe how to check the integrity of a program named &lt;code&gt;foo&lt;/code&gt; which we assume to have been installed using the package
&lt;code&gt;foo-version.rpm&lt;/code&gt;.
You can identify &lt;em&gt;version&lt;/em&gt; by running &lt;code&gt;sudo rpm --root /mnt -q foo&lt;/code&gt;.
Let us first install a trustworthy copy of &lt;code&gt;foo&lt;/code&gt; on our trustworthy host:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum --releasever=/ --installroot=/tmp/scratch install foo-version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You will likely find that &lt;code&gt;yum&lt;/code&gt; installs a number of dependencies for &lt;code&gt;foo&lt;/code&gt;.
This can cause trouble, because we are about to compare files on the compromised host with the files we download here.
Rather than allow &lt;code&gt;yum&lt;/code&gt; to install the latest versions of dependencies,
you ought to install the same version which is present on the compromised host.
Note the dependencies, identify the proper versions using &lt;code&gt;rpm ... -q ...&lt;/code&gt;,
and explicitly add these dependencies to the &lt;code&gt;yum&lt;/code&gt; command line. You should write a script to perform these steps.&lt;/p&gt;
&lt;p&gt;Once you have installed a trustworthy copy of the software which exists
on the compromised host, you can start comparing files.  This is a matter
of running&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;md5sum /mnt/path/to/file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;md5sum /scratch/path/to/file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and comparing the hashes.
Again, you should write a script to automate these steps.&lt;/p&gt;
&lt;h3 id=&#34;considering-the-nature-of-dynamically-linked-programs&#34;&gt;Considering the nature of dynamically-linked programs&lt;/h3&gt;
&lt;p&gt;Does a proper hash of &lt;code&gt;/usr/bin/foo&lt;/code&gt; mean that &lt;code&gt;foo&lt;/code&gt; is not compromised? No!
Modern systems employ shared libraries, which a dynamic linker combines with program code at runtime.
To illustrate this, run the following command to display the shared libraries that &lt;code&gt;foo&lt;/code&gt; makes use of:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ldd /usr/bin/foo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you run this command, then you should see that &lt;code&gt;foo&lt;/code&gt; makes use of a number of shared libraries.
You must check the integrity of each of these in addition to &lt;code&gt;foo&lt;/code&gt; itself.
Some programs are instead statically linked (i.e., all of their code is present in a single executable file).
The &lt;code&gt;file&lt;/code&gt; command will report whether a given executable is dynamically or statically linked.&lt;/p&gt;
&lt;p&gt;Some environment variables influence from where the dynamic linker will load shared libraries. These include &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt; and &lt;code&gt;LD_PRELOAD&lt;/code&gt;.
An attacker could set these variables to cause the linker to load a library from an unexpected location.
Likewise, the dynamic linker honors a number of configuration files, including &lt;code&gt;/etc/ld.so.conf&lt;/code&gt; and &lt;code&gt;/etc/ld.so.preload&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;particularly-dangerous-programs&#34;&gt;Particularly dangerous programs&lt;/h3&gt;
&lt;p&gt;Setuid-bit programs run with the privileges of the owner of the program&#39;s file within the filesystem instead of the parent process.
This mechanism is often used to temporarily escalate privileges, and so compromised setuid-bit programs are particularly dangerous.
You can list the setuid-bit programs on the compromised system by running the following command:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find /mnt -perm -4000 -type f
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A second set of commands which are dangerous are those that listen on a network socket. If they are compromised, then they might give a remote attacker access to the computer. To view the programs which are listening on (or are connected via) UNIX-domain, TCP, and UDP sockets, run:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;netstat -ap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It is wise to compare these setuid and network-facing programs to the list of files modified since being installed by RPM.&lt;/p&gt;
&lt;p&gt;Even more dangerous is a compromised kernel or bootloader, which we describe next.&lt;/p&gt;
&lt;h3 id=&#34;the-boot-process&#34;&gt;The boot process&lt;/h3&gt;
&lt;p&gt;Modern PC hardware first executes a bootloader either from a master-boot record or&amp;mdash;on capable firmware&amp;mdash;from
a particular file within a filesystem. In either case, the bootloader could be compromised.
To investigate the 512-byte master-boot record, copy it to &lt;code&gt;/scratch&lt;/code&gt; using:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dd bs=1 count=512 if=/evidence/disk.img of=/scratch/mbr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Other documentation describes the structure of the master-boot record.&lt;/p&gt;
&lt;p&gt;The GRUB 2 bootloader places a stage-one bootloader, &lt;code&gt;boot.img&lt;/code&gt;, within the master-boot record.
This stage-one loader loads a stage-1.5 loader, &lt;code&gt;core.img&lt;/code&gt;, which exists between the master-boot record and the first disk partition.
The stage 1.5 loader also maintains a configuration file and a number of loadable modules which perform various tasks such as
parsing various filesystem layouts.
GRUB 2&#39;s first interaction with a filesystem takes place while executing its stage-two loader which finally loads the OS kernel.
The stage-two loader is generally found in the &lt;code&gt;/boot&lt;/code&gt; directory, and its configuration exists at &lt;code&gt;/boot/grub2/config&lt;/code&gt; AKA &lt;code&gt;/etc/grub2.cfg&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Checking GRUB 2 requires inspecting the stage-one, stage-1.5, and stage-two loaders as well as the related configuration files and loadable modules.&lt;/p&gt;
&lt;p&gt;Instead of verifying each of GRUB 2&#39;s installed files, you can merely overwrite them with trustworthy copies.
Updating a GRUB 2 installation is a matter of running as root:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grub2-mkconfig &amp;gt; /boot/grub2/grub.cfg
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grub2-install /dev/sda
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kernels exist in &lt;code&gt;/boot&lt;/code&gt;, and are named &lt;code&gt;vmlinuz-version&lt;/code&gt;.
Each kernel can load dynamic modules into its address space,
and these modules exist in &lt;code&gt;/lib/modules&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Checking a kernel is a matter of checking the kernel itself, as well as each of its loadable modules. While you can use the &lt;code&gt;lsmod&lt;/code&gt;
to review the currently loaded kernel modules, it is likely that &lt;code&gt;lsmod&lt;/code&gt; is compromised.&lt;/p&gt;
&lt;h3 id=&#34;accounts-and-the-login-process&#34;&gt;Accounts and the login process&lt;/h3&gt;
&lt;p&gt;The files &lt;code&gt;/etc/passwd&lt;/code&gt;, &lt;code&gt;/etc/shadow&lt;/code&gt;, and &lt;code&gt;/etc/group&lt;/code&gt; define standard UNIX accounts and groups. However, many programs perform authentication using Pluggable Authentication Modules (PAM) which provide many other authentication techniques. Such techniques include Kerberos, NIS, and so on. The PAM modules each PAM-capable program uses to authenticate are defined using configuration files in &lt;code&gt;/etc/pam.d&lt;/code&gt;. Thus checking for proper authentication involves:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Checking the integrity of each authenticating program&lt;/li&gt;
&lt;li&gt;Checking the PAM configuration of each authenticating program&lt;/li&gt;
&lt;li&gt;Checking the accounts themselves (e.g., expected accounts with strong passwords)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Graphical login authentication is generally performed using a display manager such as &lt;code&gt;gdm&lt;/code&gt;, and text logins usually use &lt;code&gt;agetty&lt;/code&gt; which spawns &lt;code&gt;login&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;access-controls&#34;&gt;Access controls&lt;/h3&gt;
&lt;p&gt;Access controls constrain programs. On UNIX, OS objects&amp;mdash;such as files&amp;mdash;bear permissions.
For example, &lt;code&gt;ls -l /path/to/file&lt;/code&gt; will display the permissions (along with other information)
for the file at &lt;code&gt;/path/to/file&lt;/code&gt;.
An attacker might perturb these permissions to make returning to the compromised computer easier in the future.
Thus it is wise to check the permissions of installed files in a manner similar to how you checked the integrity of the files themselves.&lt;/p&gt;
&lt;p&gt;Permissions on &lt;em&gt;block&lt;/em&gt; and 8char device nodes* are particularly troublesome. For example, if a block device which corresponds to
a disk has permissive access controls, then an attacker could use this block device to undermine the access controls within the filesystem contained therein.
To enumerate all of the device nodes on the compromised host, run&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find /mnt -type b -o -type c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Other forms of access controls provide stronger or more expressive protections. For example, a filesystem&amp;rsquo;s access-control lists can be displayed using &lt;code&gt;getfacl /path/to/file&lt;/code&gt;. SELinux policy source and binary files exist in &lt;code&gt;/etc/selinux/&lt;/code&gt;,
and SELinux can be activated/deactivated by editing &lt;code&gt;/etc/sysconfig/selinux&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;checklist&#34;&gt;Checklist&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Verify kernel, kernel modules, and GRUB 2 (do not forget to look for &lt;em&gt;extra&lt;/em&gt; kernel modules)&lt;/li&gt;
&lt;li&gt;Verify setuid programs and their shared libraries&lt;/li&gt;
&lt;li&gt;Verify programs and their shared libraries&lt;/li&gt;
&lt;li&gt;Verify permissions (especially device nodes)&lt;/li&gt;
&lt;li&gt;Verify SELinux policy&lt;/li&gt;
&lt;li&gt;Review PAM configurations&lt;/li&gt;
&lt;li&gt;Review accounts&lt;/li&gt;
&lt;li&gt;Review boot services&lt;/li&gt;
&lt;li&gt;Review cron and at jobs&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>gamecon-2.4.19-modinc</title>
      <link>https://www.flyn.org/patches/gamecon-2.4.19-modinc/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/gamecon-2.4.19-modinc/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;gamecon-2.4.19-modinc.patch.gz&#34;&gt;gamecon-2.4.19-modinc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for the Linux kernel&#39;s gamecon joystick driver that causes the
driver to manage its usage count correctly.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>gdm-2.4.4.5-pam_mount</title>
      <link>https://www.flyn.org/patches/gdm-2.4.4.5-pam_mount/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/gdm-2.4.4.5-pam_mount/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;gdm-2.4.4.5-pam_mount.patch.gz&#34;&gt;gdm-2.4.4.5-pam_mount&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for gdm that ensures the X server is reset (and all X programs
exit) before calling pam_session_close.  This is required if a PAM module
like pam_mount is to unmount a user&#39;s home directory upon logging out
because programs like xscreensaver will block an unmount with open
file descriptors.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>ghostscript-7.07-glib2</title>
      <link>https://www.flyn.org/patches/ghostscript-7.07-glib2/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/ghostscript-7.07-glib2/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;ghostscript-7.07-gtk2.patch.gz&#34;&gt;ghostscript-7.07-gtk2&lt;/a&gt; &lt;a href=&#34;ghostscript-7.07-omni-glib2.patch.gz&#34;&gt;ghostscript-7.07-omni-glib2&lt;/a&gt; &lt;a href=&#34;ghostscript.spec-glib2.patch.gz&#34;&gt;ghostscript.spec-glib2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Three patches that cause Red Hat&#39;s ghostscript 7.07 packages to build
against glib2.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>gitstats</title>
      <link>https://www.flyn.org/projects/gitstats/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/gitstats/</guid>
      <description>&lt;p&gt;Gitstats collects statistics about the activity surrounding Git
repositories.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The gitstats project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/gitstats&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>gnome-keyring-0.4.3-command-line</title>
      <link>https://www.flyn.org/patches/gnome-keyring-0.4.3-command-line/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/gnome-keyring-0.4.3-command-line/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;gnome-keyring-0.4.3-command-line.patch.gz&#34;&gt;gnome-keyring-0.4.3-command-line&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for gnome-keyring that adds command line utilities to manipulate keyrings.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>gnome-session-2.4.0-gconfd-shutdown</title>
      <link>https://www.flyn.org/patches/gnome-session-2.4.0-gconfd-shutdown/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/gnome-session-2.4.0-gconfd-shutdown/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;gnome-session-2.4.0-gconfd-shutdown.patch.gz&#34;&gt;gnome-session-2.4.0-gconfd-shutdown&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for gnome-session that ensures gconfd-2 quits when a user logs out.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>gnome-session-2.6.1-pam-keyring</title>
      <link>https://www.flyn.org/patches/gnome-session-2.6.1-pam-keyring/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/gnome-session-2.6.1-pam-keyring/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;gnome-session-2.6.1-pam-keyring.patch.gz&#34;&gt;gnome-session-2.4.0-gconfd-shutdown&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for gnome-session that ensures gnome-keyring-daemon is not
executed if it is already running.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>gnome-volume-manager-1.5.7-luks</title>
      <link>https://www.flyn.org/patches/gnome-volume-manager-1.5.7-luks/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/gnome-volume-manager-1.5.7-luks/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;gnome-volume-manager-1.5.7-luks-2.patch.gz&#34;&gt;gnome-volume-manager-1.5.7-luks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for gnome-volume-manager that adds LUKS encrypted volume support.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Golem</title>
      <link>https://www.flyn.org/notes/golem/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/golem/</guid>
      <description>&lt;p&gt;This document describes how to build Golem, a multi-function server. Golem runs on
commodity router hardware and provides a number of features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SSH access&lt;/li&gt;
&lt;li&gt;a media service compatible with iTunes&lt;/li&gt;
&lt;li&gt;a file share&lt;/li&gt;
&lt;li&gt;an LDAP and Kerberos service&lt;/li&gt;
&lt;li&gt;a network proxy&lt;/li&gt;
&lt;li&gt;a NetFlow collector&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We build Golem on top of OpenWrt because of the distribution&amp;rsquo;s simplicity and small size.
Golem is made up of roughly 120 packages, and its programs and configurations take up less than 50 MB of storage space.
Here we assume that Golem will run within the confines of a Xen hypervisor.&lt;/p&gt;
&lt;h2 id=&#34;establish-the-golem-vm&#34;&gt;Establish the Golem VM&lt;/h2&gt;
&lt;p&gt;Perform the following steps on the Xen Dom0 host to establish the VM which will host Golem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Obtain the x86_64 OpenWrt image at &lt;a href=&#34;https://downloads.lede-project.org/releases/17.01.1/targets/x86/64/lede-17.01.1-x86-64-combined-ext4.img.gz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://downloads.lede-project.org/releases/17.01.1/targets/x86/64/lede-17.01.1-x86-64-combined-ext4.img.gz&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Uncompress the image and place it at &lt;code&gt;/var/lib/xen/images/golem-lede-17.01.1-x86-64-combined-ext4.img&lt;/code&gt; on the Xen Dom0 host.&lt;/li&gt;
&lt;li&gt;Create a disk image to serve as the server&amp;rsquo;s large data store (see our notes on &lt;a href=&#34;../virtualization/index.html#disks&#34;&gt;platform virtualization&lt;/a&gt;)
and name it &lt;code&gt;/var/lib/xen/images/golem-data.qcow&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Write the following at &lt;code&gt;/etc/xen/vm-golem.cfg&lt;/code&gt; on the Xen Dom0 host (replace &lt;code&gt;XX:XX:XX:XX:XX:XX&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;golem&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;n&#34;&gt;memory&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;1024&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;n&#34;&gt;vcpus&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;mi&#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;n&#34;&gt;builder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hvm&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;n&#34;&gt;vif&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;s2&#34;&gt;&amp;#34;model=e1000,script=vif-bridge,bridge=xenbr0,mac=XX:XX:XX:XX:XX:XX&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;disk&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;tap2:tapdisk:aio:/var/lib/xen/images/golem-lede-17.01.1-x86-64-combined-ext4.img,xvda,w&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;tap2:qcow:/var/lib/xen/images/golem-data.qcow,xvdb,w&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;p&#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;n&#34;&gt;serial&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pty&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;software-installation&#34;&gt;Software installation&lt;/h2&gt;
&lt;p&gt;Perform the following steps on Golem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set the root password: &lt;code&gt;passwd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Remove unnecessary packages:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg remove \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        dnsmasq \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        kmod-ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        kmod-pppoe \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        kmod-pppox \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        kmod-r8169 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	logd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-app-firewall \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-base \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-lib-ip \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-lib-nixio \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-proto-ipv6 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-proto-ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-theme-bootstrap \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        mtd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        odhcpd-ipv6only \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ppp-mod-pppoe \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        r8169-firmware \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        uhttpd-mod-ubus \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	uhttpd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Configure networking by writing &lt;code&gt;/etc/config/network&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config interface loopback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname lo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto static
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ipaddr 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option netmask 255.0.0.0
&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;config interface lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto dhcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Install the necessary software:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg install \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	block-mount \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	ca-certificates \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	dmapd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	freifunk-watchdog \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-app \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-audioconvert \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-audioparsers \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-flac \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-gio \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-id3demux \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-lame \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-mpeg2dec \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-mpg123 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-ogg \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-playback \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-theora \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-typefindfunctions \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-vorbis \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	krb5-server \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	nfdump \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	nfs-kernel-server \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	openldap-server \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	rsync \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	syslog-ng \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	tinyproxy \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	zoneinfo-core \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	zoneinfo-northamerica
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Install a public SSH key at &lt;code&gt;/etc/dropbear/authorized_keys&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configuring-kerberos-authentication&#34;&gt;Configuring Kerberos authentication&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/krb5.conf&lt;/code&gt; (replace &lt;code&gt;EXAMPLE.COM&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[libdefaults]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	default_realm = EXAMPLE.COM
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	dns_lookup_realm = false
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	dns_lookup_kdc = false
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	ticket_lifetime = 24h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	forwardable = yes
&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;[realms]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	EXAMPLE.COM = {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		kdc = localhost:88
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		admin_server = localhost:749
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		default_domain = local
&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[domain_realm]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	.local = EXAMPLE.COM
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	local = EXAMPLE.COM
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Add Kerberos principals by running &lt;code&gt;kadmin.local&lt;/code&gt; and then &lt;code&gt;add_principal user&lt;/code&gt; for each &lt;code&gt;user&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configuring-ldap-network-information&#34;&gt;Configuring LDAP network information&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/openldap/example.com.cert&lt;/code&gt;:
Place your certificate in &lt;code&gt;/etc/openldap/example.com.cert&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/openldap/example.com.key&lt;/code&gt;: Place your private key in &lt;code&gt;/etc/openldap/example.com.key&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/openldap/ca.cert&lt;/code&gt;: Place your CA certificate in &lt;code&gt;/etc/openldap/ca.cert&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/openldap/slapd.conf&lt;/code&gt; (replace &lt;code&gt;PASSWORD&lt;/code&gt; and &lt;code&gt;example.com&lt;/code&gt;):&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;core&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schema&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;n&#34;&gt;include&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cosine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schema&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;n&#34;&gt;include&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inetorgperson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schema&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;n&#34;&gt;include&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nis&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schema&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;n&#34;&gt;include&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;autofs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schema&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;n&#34;&gt;include&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sudoers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schema&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;n&#34;&gt;allow&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bind_v2&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;n&#34;&gt;TLSCACertificateFile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ca&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cert&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;n&#34;&gt;TLSCertificateFile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cert&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;n&#34;&gt;TLSCertificateKeyFile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&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;n&#34;&gt;pidfile&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slapd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&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;n&#34;&gt;argsfile&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slapd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&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;n&#34;&gt;database&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;ldif&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;n&#34;&gt;directory&lt;/span&gt;	&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;db&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;n&#34;&gt;suffix&lt;/span&gt;          &lt;span class=&#34;s2&#34;&gt;&amp;#34;dc=example,dc=com&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;n&#34;&gt;rootdn&lt;/span&gt;          &lt;span class=&#34;s2&#34;&gt;&amp;#34;cn=Manager,dc=example,dc=com&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;n&#34;&gt;rootpw&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;PASSWORD&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/openldap/schema/sudoers.schema&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;attributetype ( 1.3.6.1.4.1.15953.9.1.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	NAME &amp;#39;sudoUser&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	DESC &amp;#39;User(s) who may  run sudo&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	EQUALITY caseExactIA5Match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	SUBSTR caseExactIA5SubstringsMatch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
&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;attributetype ( 1.3.6.1.4.1.15953.9.1.2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	NAME &amp;#39;sudoHost&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	DESC &amp;#39;Host(s) who may run sudo&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	EQUALITY caseExactIA5Match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	SUBSTR caseExactIA5SubstringsMatch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
&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;attributetype ( 1.3.6.1.4.1.15953.9.1.3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	NAME &amp;#39;sudoCommand&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	DESC &amp;#39;Command(s) to be executed by sudo&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	EQUALITY caseExactIA5Match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
&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;attributetype ( 1.3.6.1.4.1.15953.9.1.4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	NAME &amp;#39;sudoRunAs&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	DESC &amp;#39;User(s) impersonated by sudo&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	EQUALITY caseExactIA5Match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
&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;attributetype ( 1.3.6.1.4.1.15953.9.1.5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	NAME &amp;#39;sudoOption&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	DESC &amp;#39;Options(s) followed by sudo&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	EQUALITY caseExactIA5Match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
&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;attributetype ( 1.3.6.1.4.1.15953.9.1.6
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	NAME &amp;#39;sudoRunAsUser&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	DESC &amp;#39;User(s) impersonated by sudo&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	EQUALITY caseExactIA5Match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
&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;attributetype ( 1.3.6.1.4.1.15953.9.1.7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	NAME &amp;#39;sudoRunAsGroup&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	DESC &amp;#39;Group(s) impersonated by sudo&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	EQUALITY caseExactIA5Match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
&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;attributetype ( 1.3.6.1.4.1.15953.9.1.8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	NAME &amp;#39;sudoNotBefore&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	DESC &amp;#39;Start of time interval for which the entry is valid&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	EQUALITY generalizedTimeMatch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	ORDERING generalizedTimeOrderingMatch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
&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;attributetype ( 1.3.6.1.4.1.15953.9.1.9
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	NAME &amp;#39;sudoNotAfter&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	DESC &amp;#39;End of time interval for which the entry is valid&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	EQUALITY generalizedTimeMatch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	ORDERING generalizedTimeOrderingMatch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
&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;attributeTypes ( 1.3.6.1.4.1.15953.9.1.10
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	NAME &amp;#39;sudoOrder&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	DESC &amp;#39;an integer to order the sudoRole entries&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	EQUALITY integerMatch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	ORDERING integerOrderingMatch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
&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;objectclass ( 1.3.6.1.4.1.15953.9.2.1 NAME &amp;#39;sudoRole&amp;#39; SUP top STRUCTURAL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	DESC &amp;#39;Sudoer Entries&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	MUST ( cn )
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		sudoRunAsGroup $ sudoOption $ sudoNotBefore $ sudoNotAfter $
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		sudoOrder $ description )
&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;From a computer with ldapadd on golem&amp;rsquo;s network, execute &lt;code&gt;ldapadd -x -D &amp;quot;cn=Manager,dc=example,dc=com&amp;quot; -W -f accounts.ldif&lt;/code&gt;, where &lt;code&gt;accounts.ldif&lt;/code&gt; contains records like (replace &lt;code&gt;example&lt;/code&gt;, &lt;code&gt;com&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, and &lt;code&gt;Some User&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dn: dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: organization
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: dcObject
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;o: Example Organization
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dc: example
&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;dn: automountMapName=auto_master,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: top
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: automountMap
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;automountMapName: auto_master
&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;dn: automountMapName=auto_root,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: top
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: automountMap
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;automountMapName: auto_root
&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;dn: automountKey=/-,automountMapName=auto_master,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: top
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: automount
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;automountKey: /-
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;automountInformation: auto_root
&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;dn: automountKey=/home,automountMapName=auto_root,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: top
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: automount
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;automountKey: /home
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;automountInformation: golem.example.com:/home/
&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;dn: ou=group,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: organizationalUnit
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ou: group
&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;dn: cn=ldapusers,ou=group,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: posixGroup
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: top
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cn: ldapusers
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;userPassword:: WFhYWA==
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gidNumber: 1002
&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;dn: ou=people,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: organizationalUnit
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ou: people
&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;dn: uid=user,ou=people,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uid: user
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cn: Some User 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: account
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: posixAccount
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: top
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;userPassword:: WFhYWA==
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;loginShell: /bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uidNumber: 1102
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gidNumber: 1002
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;homeDirectory: /home/user
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gecos: Some User
&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;dn: ou=sudoers,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: top
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: organizationalUnit
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ou: sudoers
&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;dn: cn=user,ou=sudoers,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: top
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;objectClass: sudoRole
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cn: user
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudoUser: user
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudoHost: ALL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudoCommand: ALL
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configuring-the-dmapd-media-server&#34;&gt;Configuring the dmapd media server&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/dmapd.conf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;General&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;Database&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sda1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dmapd&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Music&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DAAP&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;n&#34;&gt;Dirs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sda1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Storage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Music&lt;/span&gt;&lt;span class=&#34;o&#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;n&#34;&gt;Transcode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Mimetype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;audio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mp3&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;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Picture&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DPAP&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;n&#34;&gt;Dirs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sda1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Storage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Pictures&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configuring-nfs&#34;&gt;Configuring NFS&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/exports&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/mnt/sda1 *(fsid=root,rw,insecure,no_subtree_check,async)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/mnt/sda1/Storage *(rw,insecure,no_subtree_check,async)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/mnt/sda1/home *(rw,insecure,no_subtree_check,async)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configuring-tinyproxy&#34;&gt;Configuring Tinyproxy&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/tinyproxy-filter.conf&lt;/code&gt;: List the websites that you want tinyproxy to allow access to, one per line (e.g., &lt;a href=&#34;https://www.example.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;www.example.com&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configure-the-firewall&#34;&gt;Configure the firewall&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/config/firewall&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config defaults
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option drop_invalid 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option input ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option output ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option forward ACCEPT
&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;config zone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option name lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option network lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option input ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option output ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option forward DROP
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configure-basic-system-settings&#34;&gt;Configure basic system settings&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/config/fstab&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config global automount
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option from_fstab 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option anon_mount 1
&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;config global autoswap
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option from_fstab 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option anon_swap  1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/nfs&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config nfs nfs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option minversion &amp;#39;4&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/system&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config system
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option hostname	golem.example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option timezone	EST5EDT,M3.2.0,M11.1.0
&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;config timeserver ntp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     0.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     1.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     2.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     3.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enabled 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enable_server 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/tinyproxy&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config tinyproxy
&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;option enable 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option User nobody
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option Group nogroup
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option Port 8080
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option Timeout 600
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option SysLog 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option LogLevel Info
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option MaxClients 100
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option MinSpareServers 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option MaxSpareServers 3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option StartServers 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option MaxRequestsPerChild 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option ViaProxyName &amp;#34;tinyproxy&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option Filter &amp;#34;/etc/tinyproxy-filter.conf&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option FilterDefaultDeny 1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/freifunk-watchdog&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option process dropbear	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option initscript /etc/init.d/dropbear
&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;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option process crond
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option initscript &amp;#39;/etc/init.d/cron&amp;#39;
&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;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option process dmapd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option initscript /etc/init.d/dmapd	
&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;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option process krb5kdc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option initscript /etc/init.d/krb5kdc
&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;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option process slapd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option initscript /etc/init.d/ldap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/network&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config interface loopback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname lo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto static
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ipaddr 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option netmask 255.0.0.0
&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;config interface lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto dhcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/dropbear&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config dropbear
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option PasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option RootPasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option Port         &amp;#39;22&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;8&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/nfcapd&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nfcapd&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nfcapd&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;mi&#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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;port&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;9995&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;logdir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sda1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;netflow&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>gpdf-20031030-highlights</title>
      <link>https://www.flyn.org/patches/gpdf-20031030-highlights/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/gpdf-20031030-highlights/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;gpdf-20031022-highlights.patch.gz&#34;&gt;gpdf-20031022-highlights&lt;/a&gt; &lt;a href=&#34;gpdf-20031022-tools.patch.gz&#34;&gt;gpdf-20031022-tools&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Patches that add the ability to add highlights to a PDF file using gpdf.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>grilo-dmap</title>
      <link>https://www.flyn.org/patches/grilo-dmap/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/grilo-dmap/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;grilo-dmap.patch.gz&#34;&gt;grilo-dmap&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Grilo that adds support for the DMAP family of protocols.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Growing a filesystem</title>
      <link>https://www.flyn.org/notes/growdisk/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/growdisk/</guid>
      <description>&lt;p&gt;Growing a Linux filesystem requires the manipulation of each
level of abstraction involved from filesystem to disk partition.
Here we assume that the
disk is a virtual disk image and that the following
things must be resized:
the virtual disk image,
the partition,
the LVM volume group,
the LVM logical volume,
and the filesystem.
Other scenarios will require similar procedures.
We assume that you want to increase the size
of a filesystem within the disk image named &lt;code&gt;disk.img&lt;/code&gt;
by 16 GB.&lt;/p&gt;
&lt;p&gt;First, shut down the virtual machine which contains the disk you want to grow.
Next, increase the size of the disk image:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dd if=/dev/zero bs=1G count=16 &amp;gt;&amp;gt; disk.img
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should complete the next steps from within the virtual machine.
However, if you are resizing the root filesystem, then you will need to
boot the virtual machine using some form of bootable external media.
In any case, these instructions assume that the disk you resize
is not mounted. Here we assume the disk is known as &lt;code&gt;/dev/sda&lt;/code&gt;,
that you want to resize partition 2,
that the LVM logical volume you wish to resize is known as
&lt;code&gt;/dev/mapper/centos-root&lt;/code&gt;,
and that all of this hosts an XFS filesystem.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;fdisk /dev/sda&lt;/code&gt; to delete and recreate partition 2.
Use &lt;code&gt;d&lt;/code&gt; to delete, and &lt;code&gt;n&lt;/code&gt; to create.
When recreating partition 2, use the same start block, but use the new end block.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;kpartx -va /dev/sda&lt;/code&gt; to scan the disk&amp;rsquo;s LVM logical volumes.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;pvresize /dev/sda2&lt;/code&gt; to cause LVM to use all of /dev/sda2&amp;rsquo;s new size.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;pvdisplay&lt;/code&gt; to confirm the change.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;lvextend -L+16GB /dev/mapper/centos-root&lt;/code&gt; to extend the
logical volume to span the new disk size.&lt;/li&gt;
&lt;li&gt;Resize the filesystem using &lt;code&gt;xfs_growfs /&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>grub-1.96-20080813-dmi</title>
      <link>https://www.flyn.org/patches/grub-1.96-20080813-dmi/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/grub-1.96-20080813-dmi/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;grub-1.96-20080813-dmi.patch.gz&#34;&gt;grub-1.96-20080813-dmi.patch.gz&lt;/a&gt; &lt;a href=&#34;cryptsetup-1.0.5-dmi-v2.patch.gz&#34;&gt;cryptsetup-1.0.5-dmi-v2.patch.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Patches for &lt;a href=&#34;http://www.gnu.org/software/grub/&#34;&gt;grub&lt;/a&gt; and &lt;a href=&#34;http://code.google.com/p/cryptsetup/&#34;&gt;cryptsetup&lt;/a&gt; that add the ability to read an encryption key from an SMBIOS record. The grub modification is dependent on Michael Gorven&#39;s encryption &lt;a href=&#34;http://lists.gnu.org/archive/html/grub-devel/2008-05/msg00127.html&#34;&gt;patch&lt;/a&gt;. Gustavo Duarte wrote some great &lt;a href=&#34;http://duartes.org/gustavo/blog/post/how-computers-boot-up/&#34;&gt;documentation&lt;/a&gt; on the Intel Architecture boot process that I used while writing this patch. Documentation covering the SMBIOS records may be found &lt;a href=&#34;http://www.dmtf.org/standards/published_documents/DSP0134v2.5Final.pdf&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>GSnes9x-3.12-joystick</title>
      <link>https://www.flyn.org/patches/GSnes9x-3.12-joystick/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/GSnes9x-3.12-joystick/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;GSnes9x-3.12-joystick.patch.gz&#34;&gt;GSnes9x-3.12-joystick&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for &lt;a href=&#34;http://sourceforge.net/projects/gsnes9x/&#34;&gt;GNOME
Snes9x&lt;/a&gt; which adds three useful features.  First, support for
configurable joystick device names is added.  This makes it easiy
to use GSnes9x on a system which manages its devices using devfs.
Second, the patch causes GSnes9x to honor the standard &amp;ndash;geometry
option.  Finally, the patch allows the basic controlling of GSnes9x
with a joystick device.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>gst-plugins-0.7.5-movext</title>
      <link>https://www.flyn.org/patches/gst-plugins-0.7.5-movext/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/gst-plugins-0.7.5-movext/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;gst-plugins-0.7.5-movext.patch.gz&#34;&gt;gst-plugins-0.7.5-movext.patch.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Patch that helps gst-launch-ext create pipelines to play QuickTime files.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>GStreamer</title>
      <link>https://www.flyn.org/notes/gstreamer/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/gstreamer/</guid>
      <description>&lt;h2 id=&#34;multimedia-related-commands&#34;&gt;Multimedia-related commands&lt;/h2&gt;
&lt;dl&gt;
&lt;dt&gt;Adjust the system volume (e.g., bind these to the volume-control keys on a keyboard):&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;
amixer set Master 5%+ unmute; ogg123 /usr/share/sounds/freedesktop/stereo/bell.oga
amixer set Master 5%- unmute; ogg123 /usr/share/sounds/freedesktop/stereo/bell.oga
amixer set Master toggle;     ogg123 /usr/share/sounds/freedesktop/stereo/bell.oga
&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Record audio:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;arecord -f S16_LE -c 2 output.wav&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Manipulate PulseAudio:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;PULSE_RUNTIME_PATH=/var/run/user/&lt;em&gt;UID&lt;/em&gt;/pulse pacmd ...&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Get the title of a DVD:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;dvdbackup -i /dev/cdrom -I | head -n 1 | awk -F \&amp;quot; &#39;{ print $2 }&#39;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Backup a DVD to an image file:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;readom dev=/dev/cdrom f=output.iso&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Alternatively:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;dvdbackup -i /dev/cdrom -M
genisoimage -dvd-video -o output.iso /path/to/dvd/folder&lt;/pre&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id=&#34;gst-launch-examples&#34;&gt;Gst-launch examples&lt;/h2&gt;
&lt;dl&gt;
&lt;dt&gt;Transcode to WebM/VP8/Vorbis and scale to 1280&amp;times;720 (this format is often used with HTML5):&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;gst-launch-1.0 filesrc location=input.mts ! decodebin name=decoder \
	webmmux name=mux ! filesink location=output.webm \
	decoder. ! videoscale ! video/x-raw,width=1280,height=720 ! videoconvert ! vp8enc ! mux. \
	decoder. ! progressreport ! audioconvert ! audiorate ! vorbisenc ! mux.&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Transcode to QuickTime/H.264 and scale to 1280&amp;times;720 (this format is often used with HTML5, and it is&amp;mdash;with the `profile=high` setting&amp;mdash;suitable for Firefox and iOS/Safari):&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;gst-launch-1.0 filesrc location=input.mts ! decodebin name=decoder \
	qtmux name=mux ! filesink location=output.mov \
	decoder. ! videoscale ! video/x-raw,width=1280,height=720 ! videoconvert ! x264enc ! \
                   video/x-h264,profile=high ! mux. \
	decoder. ! progressreport ! audioconvert ! audiorate ! avenc_aac ! mux.&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Transcode to Ogg/Theora/Vorbis and scale to 1280&amp;times;720 (this format is sometimes used with HTML5 on open-source browsers):&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;gst-launch-1.0 filesrc location=input.mts ! decodebin name=decoder \
	oggmux name=mux ! filesink location=output.ogg \
	decoder. ! videoscale ! video/x-raw,width=1280,height=720 ! videoconvert ! theoraenc ! mux. \
	decoder. ! progressreport ! audioconvert ! audiorate ! vorbisenc ! mux.&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Transcode to MPEG2 and scale to 1280&amp;times;720:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;gst-launch-1.0 filesrc location=input.mts ! decodebin name=decoder \
	avmux_mpeg name=mux ! filesink location=output.mpg \
	decoder. ! videoscale ! video/x-raw,width=1280,height=720 ! videoconvert ! avenc_mpeg2video ! mux. \
	decoder. ! progressreport ! audioconvert ! audiorate ! lamemp3enc ! mux.&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Transcode title two from a DVD to the QuickTime format above:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;gst-launch-1.0 dvdreadsrc title=&#34;2&#34; device=/dev/cdrom ! decodebin name=&#34;decoder&#34; \
        qtmux name=mux ! filesink location=output.mov \
        decoder. ! videoscale ! video/x-raw,width=720,height=480 ! videoconvert ! x264enc ! mux. \
        decoder. ! progressreport ! audioconvert ! audiorate ! avenc_aac ! mux.&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Build a stop-motion video out of a series of images (the first command normalizes the images names&amp;mdash;otherwise, there might be a missing number):&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;i=0; for f in *.JPG; do mv $f $i.JPG; i=$((i+1)); done
&lt;p&gt;gst-launch-1.0 multifilesrc location=%d.JPG caps=&amp;ldquo;image/jpeg,framerate=(fraction)4/1&amp;rdquo; &lt;br&gt;
! jpegdec ! videoscale ! video/x-raw,width=1280,height=720 ! videoconvert ! videorate ! theoraenc &lt;br&gt;
! oggmux ! filesink location=output.ogg&lt;/pre&gt;&lt;/dd&gt;&lt;/p&gt;
&lt;dt&gt;Combine two videos to produce a blue/green-screen effect (here we specify the RGB values of the mask):&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;gst-launch-1.0 compositor name=mixer ! videoconvert ! xvimagesink \
	filesrc location=background.mts ! decodebin ! alpha ! mixer.sink_0 \
	filesrc location=foreground.mts ! decodebin \
	! alpha method=custom target-r=182 target-g=168 target-b=148 ! mixer.sink_1&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Determine the plugin graph produced by playbin:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;GST_DEBUG_DUMP_DOT_DIR=/tmp/ gst-launch-1.0 playbin uri=file:///&lt;i&gt;path&lt;/i&gt;
dot -Tpng &lt;i&gt;output&lt;/i&gt;.dot &gt; graph.png
&lt;/pre&gt;
The first command will produce a number of GraphViz files which represent the pipelines produced by playbin. The most interesting of these is often the one that contains the string &lt;i&gt;READY_PAUSED&lt;/i&gt;. The second command produces an image file which represents one of the pipelines.&lt;/dd&gt;
&lt;/dl&gt;
</description>
    </item>
    
    <item>
      <title>gstreamer-cinepak</title>
      <link>https://www.flyn.org/patches/gstreamer-cinepak/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/gstreamer-cinepak/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;gst-ffmpeg-0.7.1-cinepak.patch.gz&#34;&gt;gst-ffmpeg-0.7.1-cinepak.patch.gz&lt;/a&gt; &lt;a href=&#34;gst-plugins-0.7.5-cinepak.patch.gz&#34;&gt;gst-plugins-0.7.5-cinepak.patch.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Patches that enable FFmpeg&#39;s cinepak support in GStreamer.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Guardian</title>
      <link>https://www.flyn.org/notes/guardian/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/guardian/</guid>
      <description>&lt;p&gt;This document describes how to build Guardian, a switch, router, and firewall. Guardian runs on commodity router hardware and provides a number of features, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a wireless access point,&lt;/li&gt;
&lt;li&gt;a switch comprised of a number of Gigabit Ethernet ports,&lt;/li&gt;
&lt;li&gt;a firewall and NAT translator, and&lt;/li&gt;
&lt;li&gt;a print service.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Guardian is made up of the following hardware components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a Microtik RouterBoard 493G,&lt;/li&gt;
&lt;li&gt;a Microtik RouterBoard R52n-M miniPCI wireless adapter,&lt;/li&gt;
&lt;li&gt;a Microtik 5V USB power injector,&lt;/li&gt;
&lt;li&gt;a RouterBoard 493G case with interior USB extension cable,&lt;/li&gt;
&lt;li&gt;two whip antennas,&lt;/li&gt;
&lt;li&gt;a Belkin USB-to-RS-232 adapter,&lt;/li&gt;
&lt;li&gt;an RS-232 cable,&lt;/li&gt;
&lt;li&gt;a null-modem adapter,&lt;/li&gt;
&lt;li&gt;a GFP121U-0520 GME switching AC/DC power adapter, and&lt;/li&gt;
&lt;li&gt;a USB printer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I purchased
my hardware from &lt;a href=&#34;http://www.balticnetworks.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Baltic Networks&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;selecting-the-software-for-a-guardian-image&#34;&gt;Selecting the software for a Guardian image&lt;/h2&gt;
&lt;p&gt;This section describes how to gather and select the OpenWrt source code which makes up Guardian.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Obtain the OpenWrt source tree using &lt;code&gt;git clone https://git.openwrt.org/openwrt/openwrt.git&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enter the OpenWrt source tree and modify the package configuration provided by &lt;code&gt;feeds.conf&lt;/code&gt; to use &lt;code&gt;src-git packages ssh://git@github.com/MikePetullo/packages.git&lt;/code&gt;. Run &lt;code&gt;./scripts/feeds update&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Activate the necessary packages using:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./scripts/feeds install ca-certificates \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        ddns-scripts \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        freifunk-watchdog \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        libustream-openssl \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        openvpn \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        p910nd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        rsync \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        wget \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        zoneinfo-core \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        zoneinfo-northamerica
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Run &lt;code&gt;make menuconfig&lt;/code&gt; and select:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Target System: Atheros ATH79 (DTS)&lt;/li&gt;
&lt;li&gt;Subtarget: Mikrotik devices&lt;/li&gt;
&lt;li&gt;Target Profile: MikroTik RouterBoard 493G&lt;/li&gt;
&lt;li&gt;Target Images: ramdisk then tar.gz (Note that you need to build twice for the RB493G: (1) for a TFTP image and (2) for an installable rootfs image.)&lt;/li&gt;
&lt;li&gt;Base system:
&lt;ul&gt;
&lt;li&gt;ca-certificates&lt;/li&gt;
&lt;li&gt;Kernel Modules:
&lt;ul&gt;
&lt;li&gt;Netfilter Extensions: kmod-ipt-tee&lt;/li&gt;
&lt;li&gt;Other modules: kmod-softdog&lt;/li&gt;
&lt;li&gt;USB Support:
&lt;ul&gt;
&lt;li&gt;kmod-usb-ohci&lt;/li&gt;
&lt;li&gt;kmod-usb-printer&lt;/li&gt;
&lt;li&gt;kmod-usb2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Wireless Drivers: kmod-ath9k&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LuCI: Freifunk: freifunk-watchdog&lt;/li&gt;
&lt;li&gt;Network:
&lt;ul&gt;
&lt;li&gt;File Transfer:
&lt;ul&gt;
&lt;li&gt;rsync&lt;/li&gt;
&lt;li&gt;wget&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Firewall: iptables-mod-tee&lt;/li&gt;
&lt;li&gt;IP Addresses and Names:
&lt;ul&gt;
&lt;li&gt;ddns-scripts&lt;/li&gt;
&lt;li&gt;ddns-scripts_no-ip.com&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Printing: p910nd&lt;/li&gt;
&lt;li&gt;VPN:
&lt;ul&gt;
&lt;li&gt;openvpn-openssl&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Utilities:
&lt;ul&gt;
&lt;li&gt;zoneinfo: zoneinfo-northamerica&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Create the directory files and populate it as described in the following sections.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configuring-the-network-interfaces&#34;&gt;Configuring the network interfaces&lt;/h2&gt;
&lt;p&gt;Aside from the standard loopback device, Guardian provides for four networks:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;a private LAN for workstations and internal servers (192.168.1.128/25),&lt;/li&gt;
&lt;li&gt;a public LAN for Internet-facing servers (192.168.1.0/25),&lt;/li&gt;
&lt;li&gt;a WAN (DHCP-assigned), and&lt;/li&gt;
&lt;li&gt;a network for use with OpenVPN (192.168.2.0/24).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Guardian splits its switch ports between the private and public LANs.
Guardian also provides WiFi connectivity to its private and public LANs.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/config/network&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config interface loopback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname lo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto static
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ipaddr 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option netmask 255.0.0.0
&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;config switch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option name switch0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option enable 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option reset 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option enable_vlan 1
&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;config switch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option name switch1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option enable 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option reset 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option enable_vlan 1
&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;# Private:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config switch_vlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option device switch0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option vlan 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option vid 100
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	# 0: CPU, 1--4: phy. ports, 5 unused.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	# t indicates packets sent will be VLAN tagged; rec&amp;#39;d must match tag. 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ports &amp;#34;0t 1 2 3 4&amp;#34;
&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;config interface privlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname &amp;#39;eth0.100 tap0&amp;#39; # Bridge in OpenVPN tap device.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option type bridge
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto static
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ipaddr 192.168.1.129
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option netmask 255.255.255.128
&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;# Public:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config switch_vlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option device switch1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option vlan 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option vid 200
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	# 0: CPU, 1--4: phy. ports, 5 below.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	# t indicates packets sent will be VLAN tagged; rec&amp;#39;d must match tag. 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ports &amp;#34;0t 1 2 3 4&amp;#34;
&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;config interface publan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname eth1.200
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option type bridge
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto static
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ipaddr 192.168.1.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option netmask 255.255.255.128
&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;# WAN:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config switch_vlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option device switch1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option vlan 2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option vid 300
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	# t indicates packets sent will be VLAN tagged; rec&amp;#39;d must match tag. 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ports &amp;#34;0t 5&amp;#34;
&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;config interface wan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname eth1.300
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto dhcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	# Use OpenDNS (not ISP DNS) for content filter.                              
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dns  &amp;#34;208.67.222.123 208.67.220.123&amp;#34;                                  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option peerdns 0 
&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;# OpenVPN:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config interface vpn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname tun0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto none
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/wireless&lt;/code&gt; (replace &lt;code&gt;PCIPATH&lt;/code&gt;, &lt;code&gt;ExampleCom&lt;/code&gt;, &lt;code&gt;ExampleComGuest&lt;/code&gt;, &lt;code&gt;KEY1&lt;/code&gt;, and &lt;code&gt;KEY2&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config wifi-device radio0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option type     mac80211
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option country	US
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option channel  11
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option hwmode   11ng
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option htmode   HT20
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option path     PCIPATH
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	list ht_capab   SHORT-GI-40
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	list ht_capab   TX-STBC
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	list ht_capab   RX-STBC1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	list ht_capab   DSSS_CCK-40
&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;config wifi-iface                  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option device   radio0     
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option network  privlan    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option mode     ap         
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ssid     ExampleCom
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option encryption psk2       
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option key      KEY1
&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;config wifi-iface                                                               
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option device   radio0                                                  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option network  publan                                                  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option mode     ap                                                      
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ssid     ExampleComGuest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option encryption psk2                                                  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option key      KEY2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configuring-the-firewall&#34;&gt;Configuring the firewall&lt;/h2&gt;
&lt;p&gt;Guardian&amp;rsquo;s firewall drops most incoming traffic destined for its private and OpenVPN LANs.
Guardian also blocks outgoing DNS queries from its LANs which are destined to servers other than Guardian.
Aside from this, Guardian allows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;connections from the private LAN to Guardian,&lt;/li&gt;
&lt;li&gt;connections from the OpenVPN LAN to Guardian,&lt;/li&gt;
&lt;li&gt;DHCP and DNS requests from the public LAN to Guardian,&lt;/li&gt;
&lt;li&gt;and OpenVPN connections from anywhere to Guardian.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Guardian allows LDAPS and Kerberos traffic to flow from the public LAN
to the private LAN because it assumes that the network&amp;rsquo;s authentication
services exist on the private LAN.&lt;/p&gt;
&lt;p&gt;Guardian redirects connections for the following services from the WAN to 192.168.1.5 on the public LAN:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SSH,&lt;/li&gt;
&lt;li&gt;HTTP,&lt;/li&gt;
&lt;li&gt;HTTPS,&lt;/li&gt;
&lt;li&gt;SMTP,&lt;/li&gt;
&lt;li&gt;XMPP client-to-server connections, and&lt;/li&gt;
&lt;li&gt;XMPP server-to-server connections.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Guardian also provides a copy of all packets to 192.168.1.8 for analysis.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;/etc/config/firewall:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config include
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option path /etc/firewall.user
&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;config defaults
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option drop_invalid 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option input DROP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option output DROP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option forward DROP
&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;# WAN: NAT, drop incoming; accept outgoing; drop forward.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config zone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option name wan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option network wan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option input DROP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option output ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option forward DROP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option masq 1
&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;# Private LAN: drop incoming; accept outgoing; reject forward.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config zone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option name privlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option network privlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option input DROP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option output ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option forward REJECT
&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;# Public (guest) LAN: drop incoming; accept outgoing; reject forward.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config zone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option name publan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option network publan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option input DROP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option output ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option forward REJECT
&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;# OpenVPN LAN: drop incoming; accept outgoing; reject forward.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config zone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option name vpn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option network vpn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option input DROP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option output ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option forward REJECT
&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;# Forward from private LAN to WAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config forwarding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src privlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest wan
&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;# Forward from public LAN to WAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config forwarding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src publan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest wan
&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;# Forward from OpenVPN LAN to WAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config forwarding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src vpn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest wan
&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;# Forward from private LAN to public LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config forwarding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src privlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest publan
&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;# Forward from OpenVPN LAN to public LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config forwarding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src vpn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest publan
&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;# Forward from OpenVPN LAN to private LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config forwarding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src vpn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest privlan
&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;# Forward from private LAN to OpenVPN LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config forwarding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src privlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest vpn
&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;# Forbid DNS requests to outside servers unless from router.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target REJECT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src *
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest wan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 53
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcpudp
&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;# Allow DNS requests from public LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src publan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 53
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcpudp
&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;# Allow ALL connections from private LAN to router.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src privlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto all
&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;# Allow ALL connections from OpenVPN LAN to router.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src vpn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto all
&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;# Allow OpenVPN connections from anywhere to router.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src *
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 1194
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto udp
&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;# Allow DHCP requests from public LAN to router.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src publan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src_port 67-68
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 67-68
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto udp
&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;# Allow LDAPS requests from public LAN to private LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src publan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest privlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 636
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&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;# Allow Kerberos requests from public LAN to private LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src publan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest privlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 88
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&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;# Redirect HTTP to herald.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config redirect
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target DNAT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src wan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src_dport 80
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_ip 192.168.1.5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest publan
&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;# Redirect HTTPS to herald.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config redirect
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target DNAT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src wan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src_dport 443
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_ip 192.168.1.5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest publan
&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;# Redirect SMTP to herald.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config redirect
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target DNAT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src wan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src_dport 25
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_ip 192.168.1.5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest publan
&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;# Redirect Jabber client-to-server connections to herald.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config redirect
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target DNAT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src wan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src_dport 5222
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_ip 192.168.1.5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest publan
&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;# Redirect Jabber server-to-server connections to herald.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config redirect
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target DNAT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src wan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src_dport 5269
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_ip 192.168.1.5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest publan
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;/etc/firewall.user:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -t mangle -A INPUT  ! -s 192.168.1.8/32 -j TEE --gateway 192.168.1.8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -t mangle -A OUTPUT ! -d 192.168.1.8/32 -j TEE --gateway 192.168.1.8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -t mangle -A FORWARD ! -d 192.168.1.8/32 ! -s 192.168.1.8/32 -j TEE --gateway 192.168.1.8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configure-openvpn&#34;&gt;Configure OpenVPN&lt;/h2&gt;
&lt;p&gt;Guardian accepts OpenVPN connections, allowing access to its private
LAN from remote workstations.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/config/openvpn&lt;/code&gt; (replace &lt;code&gt;example.com&lt;/code&gt;):&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-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;openvpn&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;n&#34;&gt;config&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;openvpn&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;privlan&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt; &lt;span class=&#34;mi&#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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;port&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1194&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;proto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;udp&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tun0&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;txqueuelen&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1000&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mtu&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1500&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mssfix&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1300&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ca&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openvpn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ca&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cert&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cert&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openvpn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cert&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openvpn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dh&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openvpn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dh2048&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pem&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ifconfig&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pool&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;persist&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ipp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;txt&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;keepalive&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;10 120&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;persist&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt; &lt;span class=&#34;mi&#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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;persist&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tun&lt;/span&gt; &lt;span class=&#34;mi&#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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openvpn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;verb&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;192.168.2.0 255.255.255.0&amp;#39;&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt; &lt;span class=&#34;mi&#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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tls&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;min&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.2&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;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tls&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ECDHE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RSA&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AES256&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GCM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SHA384&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;n&#34;&gt;list&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;push&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;redirect-gateway def1&amp;#39;&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;n&#34;&gt;list&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;push&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;dhcp-option DNS 192.168.1.129&amp;#39;&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;n&#34;&gt;list&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;push&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;route 192.168.1.0   255.255.255.128&amp;#39;&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;n&#34;&gt;list&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;push&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;route 192.168.1.128 255.255.255.128&amp;#39;&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;## Configure basic system settings&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;mf&#34;&gt;1.&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p910nd&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;config p910nd
option device        /dev/usb/lp0
option port          0
option bidirectional 1
option enabled       1&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2. `/etc/config/system`:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;config system
option hostname	guardian.example.com
option timezone	EST5EDT,M3.2.0,M11.1.0&lt;/p&gt;
&lt;p&gt;config timeserver ntp
list server     0.openwrt.pool.ntp.org
list server     1.openwrt.pool.ntp.org
list server     2.openwrt.pool.ntp.org
list server     3.openwrt.pool.ntp.org
option enabled 1
option enable_server 0&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-mysql&#34; data-lang=&#34;mysql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ddns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;examplecom&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;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&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;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;USERNAME&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;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PASSWORD&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;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;config service &amp;rsquo;examplecom&#39;
option enabled &amp;lsquo;1&amp;rsquo;
option interface &amp;lsquo;wan&amp;rsquo;
option service_name &amp;rsquo;no-ip.com&#39;
option lookup_host &amp;lsquo;&lt;a href=&#34;https://www.example.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;www.example.com&lt;/a&gt;&amp;rsquo;
option domain &amp;rsquo;example.com&#39;
option username &amp;lsquo;USERNAME&amp;rsquo;
option password &amp;lsquo;PASSWORD&amp;rsquo;
option use_https &amp;lsquo;1&amp;rsquo;
option cacert &amp;lsquo;/etc/ssl/certs&amp;rsquo;
option use_syslog &amp;lsquo;3&amp;rsquo;
4. &lt;code&gt;/etc/config/freifunk-watchdog&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option process dropbear	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option initscript /etc/init.d/dropbear
&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;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option process crond
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option initscript &amp;#39;/etc/init.d/cron&amp;#39;
&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;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option process dnsmasq
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option initscript /etc/init.d/dnsmasq
&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;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option process p910nd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option initscript /etc/init.d/p910nd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/dropbear&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config dropbear
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option PasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option RootPasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option Port         &amp;#39;22&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/dhcp&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config dhcp privlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option interface    privlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option start        138 # Room for static at bottom.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option limit        254 # Room for OpenVPN at top.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option leasetime    24h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	# GW, DNS:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	list dhcp_option &amp;#34;3,192.168.1.129&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	list dhcp_option &amp;#34;6,192.168.1.129&amp;#34;
&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;config dhcp publan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option interface    publan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option start        10
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option limit        126
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option leasetime    24h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	# GW, DNS:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	list dhcp_option &amp;#34;3,192.168.1.1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	list dhcp_option &amp;#34;6,192.168.1.1&amp;#34;
&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;config dnsmasq
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option leasefile   &amp;#39;/tmp/dhcp.leases&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option resolvfile  &amp;#39;/tmp/resolv.conf.auto&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option localise_queries 1
&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;config odhcpd &amp;#39;odhcpd&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option maindhcp &amp;#39;0&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option leasefile &amp;#39;/tmp/hosts/odhcpd&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option leasetrigger &amp;#39;/usr/sbin/odhcpd-update&amp;#39;
&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;config host
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option name &amp;#39;host.example.com&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ip &amp;#39;192.168.1.2&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option mac &amp;#39;aa:bb:cc:dd:ee:ff&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/hosts&lt;/code&gt; (replace &lt;code&gt;examplecom&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;127.0.0.1 localhost
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;192.168.1.1 guardian.example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;192.168.1.5 www.example.com example.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;build-software-and-perform-installation&#34;&gt;Build software and perform installation&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;make V=99&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install the image you just built onto your router. The instructions here require a computer running Linux, in addition to the Guardian device.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;On the Linux computer:
&lt;ol&gt;
&lt;li&gt;Install &lt;code&gt;dhcp-server&lt;/code&gt;, &lt;code&gt;tftp-server&lt;/code&gt;, &lt;code&gt;minicom&lt;/code&gt;, &lt;code&gt;mtd-utils&lt;/code&gt;, and &lt;code&gt;mtd-utils-ubi&lt;/code&gt;. Configure minicom to emulate an 115,200-bps 8N1 terminal without hardware flow control and without software flow control.&lt;/li&gt;
&lt;li&gt;Temporarily disable the host&amp;rsquo;s firewall (or allow incoming TFTP requests).&lt;/li&gt;
&lt;li&gt;Run the tftp service with &lt;code&gt;in.tftpd -v -s -p -L /var/lib/tftpboot/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Place &lt;code&gt;openwrt-ath79-mikrotik-mikrotik_routerboard-493g-initramfs-kernel.bin&lt;/code&gt; in &lt;code&gt;/var/lib/tftpboot&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the computer&amp;rsquo;s IP address to 192.168.1.3 using &lt;code&gt;ip addr add 192.168.1.3/24 dev enp0s25&lt;/code&gt;. (You might have to do this repeatedly, because the Linux computer&amp;rsquo;s interface might drop its IP address when the router reboots.)&lt;/li&gt;
&lt;li&gt;Configure DHCP as shown below (replace &lt;code&gt;XX:XX:XX:XX:XX:XX&lt;/code&gt; with your router&amp;rsquo;s MAC address (likely eth1), which you can discover using the router&amp;rsquo;s firmware utility), and start the DHCP server with &lt;code&gt;systemctl start dhcpd&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;allow booting;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;allow bootp;
&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;subnet 192.168.1.0 netmask 255.255.255.0 {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option routers 192.168.1.3;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option subnet-mask 255.255.255.0;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option broadcast-address 192.168.1.255;
&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;group {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	host routerboard {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		hardware ethernet XX:XX:XX:XX:XX:XX;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		next-server 192.168.1.3;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		fixed-address 192.168.1.2;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		filename &amp;#34;openwrt-ath79-mikrotik-mikrotik_routerboard-493g-initramfs-kernel.bin&amp;#34;;
&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;On the router:
&lt;ol&gt;
&lt;li&gt;At boot menu, use &lt;code&gt;e&lt;/code&gt; to erase the existing OS firmware.&lt;/li&gt;
&lt;li&gt;Instruct the boot firmware to boot from the network (select &lt;code&gt;o&lt;/code&gt;, &lt;code&gt;e&lt;/code&gt;, and &lt;code&gt;x&lt;/code&gt;). In order to boot the router over the network, it might be necessary to reset the Linux computer&amp;rsquo;s IP address (because the IP address might have been lost after the link momentarily went down). After the router boots, it might be necessary to wait while the router configures its network interfaces and generates its SSH keys; you might also need to deactivate the firewall&amp;rsquo;s router to permit SSH connections over its WAN interface.&lt;/li&gt;
&lt;li&gt;After booting, run &lt;code&gt;passwd&lt;/code&gt; to set the root password.&lt;/li&gt;
&lt;li&gt;The router&amp;rsquo;s IP address should now be 192.168.1.2. Use &lt;code&gt;scp&lt;/code&gt; to copy &lt;code&gt;openwrt-ath79-mikrotik-mikrotik_routerboard-493g-squashfs-sysupgrade.bin&lt;/code&gt; to the router.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;sysupgrade -n openwrt-ath79-mikrotik-mikrotik_routerboard-493g-squashfs-sysupgrade.bin&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Reboot the router, ensuring it boots from its internal flash.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Finalize the router install:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;passwd&lt;/code&gt; to set the root password.&lt;/li&gt;
&lt;li&gt;Create the OpenVPN key material using:
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;clean-all&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;build-ca&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;build-dh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;build-key-server example.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;build-key client&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Copy &lt;code&gt;ca.cert&lt;/code&gt;, &lt;code&gt;dh2048.pem&lt;/code&gt;, &lt;code&gt;example.com.cert&lt;/code&gt;, and &lt;code&gt;example.com.key&lt;/code&gt; to &lt;code&gt;/etc/openvpn&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Copy &lt;code&gt;ca.cert&lt;/code&gt;, &lt;code&gt;dh2048.pem&lt;/code&gt;, &lt;code&gt;client.cert&lt;/code&gt;, and &lt;code&gt;client.key&lt;/code&gt; to the client&amp;rsquo;s &lt;code&gt;/etc/openvpn&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Configure OpenVPN on each client host.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Place the client&amp;rsquo;s certificate, the client&amp;rsquo;s private key, and the CA certificate in &lt;code&gt;/etc/openvpn&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Option 1: Configuration using NetworkManager
&lt;ol&gt;
&lt;li&gt;Create a new VPN connection using NetworkManager.&lt;/li&gt;
&lt;li&gt;Under &lt;code&gt;Advanced&lt;/code&gt;→&lt;code&gt;TLS Authentication&lt;/code&gt;:&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;Subject Match&lt;/code&gt; to &lt;code&gt;/CN=example.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Verify peer (server) certificate usage signature&lt;/code&gt; and set to &lt;code&gt;Server&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Option 2: Direct configuration of OpenVPN
&lt;ol&gt;
&lt;li&gt;Copy &lt;code&gt;/usr/share/doc/openvpn/contrib/pull-resolv-conf/client.up&lt;/code&gt; and &lt;code&gt;client.down&lt;/code&gt; to &lt;code&gt;/etc/openvpn&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the scripts&amp;rsquo; permissions with &lt;code&gt;chmod +x client.up client.down&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/openvpn/example.conf&lt;/code&gt; (replace &lt;code&gt;client.cert&lt;/code&gt;, &lt;code&gt;client.key&lt;/code&gt;, and &lt;code&gt;server.example.com&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dev tun
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proto udp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;verb 3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ca /etc/openvpn/ca.cert
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cert /etc/openvpn/client.cert
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;key /etc/openvpn/client.key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dh /etc/openvpn/dh2048.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;persist-tun
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;persist-key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;client
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;remote-cert-tls server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;remote server.example.com 1194
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;script-security 2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;up /etc/openvpn/client.up
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;down /etc/openvpn/client.down
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;  4. `ln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/openvpn@example.service`
  5. `systemctl start openvpn@example.service`
&lt;/code&gt;&lt;/pre&gt;
</description>
    </item>
    
    <item>
      <title>guestrace</title>
      <link>https://www.flyn.org/projects/guestrace/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/guestrace/</guid>
      <description>&lt;p&gt;Ryan Johnson and Matt Shockley wrote guestrace
as a prototype for a research project,
and we have since packaged it as a stand-alone utility.
A properly-configured guestrace will print as they occur the system calls
which processes invoke within a Xen domain.
This resembles strace, but provides the activity of every running process.
The guestrace utility relies on libvmi to perform virtual-machine introspection.
Guestrace can trace both Linux and Windows,
and it requires no modifications to the target
aside from running the target on Xen.&lt;/p&gt;
&lt;p&gt;Guestrace also provides a library,
libguestrace,
which gives programmers access to the guestrace engine.
This is useful for programs which must trace system calls and
do more than merely print them.&lt;/p&gt;
&lt;h1 id=&#34;limitations&#34;&gt;Limitations&lt;/h1&gt;
&lt;p&gt;As an ongoing research project, guestrace presently has a few limitations in its implementation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;we have not yest tested any version of Windows other than Windows 7 Enterprise with Service Pack 1,&lt;/li&gt;
&lt;li&gt;guestrace malfunctions when monitoring Windows running with more than 2 GB of memory (page sizes &amp;gt; 4 KB), and&lt;/li&gt;
&lt;li&gt;guestrace supports only 64-bit guest operating systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We would be happy to consider any patches which remove these limitations, and we ourselves hope
to address them when time permits.&lt;/p&gt;
&lt;h1 id=&#34;details&#34;&gt;Details&lt;/h1&gt;
&lt;p&gt;Please refer to guestrace&#39;s &lt;a href=&#34;https://www.flyn.org/projects/guestrace/doc/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;API documentation&lt;/a&gt; for details about how to use the library.&lt;/p&gt;





	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.1.tar.gz&#34;&gt;guestrace-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.2.tar.gz&#34;&gt;guestrace-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.3.tar.gz&#34;&gt;guestrace-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.4.tar.gz&#34;&gt;guestrace-0.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.5.tar.gz&#34;&gt;guestrace-0.0.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.6.tar.gz&#34;&gt;guestrace-0.0.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.7.tar.gz&#34;&gt;guestrace-0.0.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.8.tar.gz&#34;&gt;guestrace-0.0.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.9.tar.gz&#34;&gt;guestrace-0.0.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The guestrace project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/guestrace&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>hal-cvs-enc</title>
      <link>https://www.flyn.org/patches/hal-cvs-enc/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/hal-cvs-enc/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;hal-20050211-luks-1.patch.gz&#34;&gt;hal-20050211-luks-1&lt;/a&gt; &lt;a href=&#34;hal-20050211-luks-2.patch.gz&#34;&gt;hal-20050211-luks-2&lt;/a&gt; &lt;a href=&#34;hal-20050301-luks-3.patch.gz&#34;&gt;hal-20050301-luks-3&lt;/a&gt; &lt;a href=&#34;hal-20050302-luks-4.patch.gz&#34;&gt;hal-20050302-luks-4&lt;/a&gt; &lt;a href=&#34;hal-20050312-luks-5.patch.gz&#34;&gt;hal-20050312-luks-5&lt;/a&gt; &lt;a href=&#34;hal-set-strlist-1.patch.gz&#34;&gt;hal-set-strlist-1.patch.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A series of patches that add support for encrypted volumes to HAL.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Hardening Unix computers</title>
      <link>https://www.flyn.org/notes/harden/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/harden/</guid>
      <description>&lt;p&gt;This describes some techniques which help harden Unix computers,
that is reduce the likelihood that the will be compromised by
an attacker.
There is some overlap with another document,
&lt;a href=&#34;../forensic/&#34;&gt;forensic analysis&lt;/a&gt;.
This is because both hardening and forensic analysis
require a deep understanding of how Unix works.&lt;/p&gt;
&lt;h2 id=&#34;strong-access-controls&#34;&gt;Strong access controls&lt;/h2&gt;
&lt;p&gt;If available, administrators should learn and apply the strong access controls
available on their computers. For example, mandatory access control systems
such as SELinux or AppArmor go a long way to constrain programs beyond the
traditional Unix access controls. Using these controls requires a bit of
study, but can provide a large benefit. Another document,
&lt;a href=&#34;../selinux/&#34;&gt;SELinux&lt;/a&gt;, provides a basic introduction to SELinux.&lt;/p&gt;
&lt;h2 id=&#34;passwords-and-system-accounts&#34;&gt;Passwords and system accounts&lt;/h2&gt;
&lt;p&gt;Ideally, passwords should be used only for local authentication, where a user
must be physically present at the computer performing authentication.
The reason for this is that passwords are often compromised using various
forms of guessing attacks, and extending password-based authentication
beyond physically-present users increases the set of people who can
mount these attacks.
Other forms of authentication,
such as public-key-based systems should authenticate network users.&lt;/p&gt;
&lt;p&gt;The passwords that do exist must be strong. In most cases, as review of
&lt;code&gt;/etc/passwd&lt;/code&gt; will reveal the accounts which will need a password
audit.&lt;/p&gt;
&lt;p&gt;Another consideration is whether accounts should exist in the first place.
A review of &lt;code&gt;/etc/passwd&lt;/code&gt; will reveal a number of accounts with a
legitimate shell and other accounts whose shell is set to something like
&lt;code&gt;/sbin/nologin&lt;/code&gt;. You should remove unnecessary accounts of the
former case. Accounts of the latter case are &lt;em&gt;pseudo&lt;/em&gt;-users.
They do not have passwords, and are generally created by the act of
installing some package.
Pseudo-users exist to run software with the least privileges possible.
To remove these latter accounts, remove unnecessary packages.&lt;/p&gt;
&lt;h2 id=&#34;pluggable-authentication-modules&#34;&gt;Pluggable Authentication Modules&lt;/h2&gt;
&lt;p&gt;The files &lt;code&gt;/etc/passwd&lt;/code&gt;, &lt;code&gt;/etc/shadow&lt;/code&gt;, and &lt;code&gt;/etc/group&lt;/code&gt; define standard UNIX accounts and groups. However, many programs perform authentication using Pluggable Authentication Modules (PAM) which provide many other authentication techniques. Such techniques include Kerberos, NIS, and so on. The PAM modules each PAM-capable program uses to authenticate are defined using configuration files in &lt;code&gt;/etc/pam.d&lt;/code&gt;. Thus checking for proper authentication involves:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Checking the integrity of each authenticating program&lt;/li&gt;
&lt;li&gt;Checking the PAM configuration of each authenticating program&lt;/li&gt;
&lt;li&gt;Checking the accounts themselves (e.g., expected accounts with strong passwords)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Graphical login authentication is generally performed using a display manager such as &lt;code&gt;gdm&lt;/code&gt;, and text logins usually use &lt;code&gt;agetty&lt;/code&gt; which spawns &lt;code&gt;login&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;serviceapplication-level-accounts&#34;&gt;Service/application-level accounts&lt;/h2&gt;
&lt;p&gt;Some services, such as databases and web-based applications, often
provide their own account databases instead of relying on the system accounts
provided by Unix. In such cases, you must
audit these accounts too, as they exist separately from the system accounts.
Since each account is defined in an application-specific way,
you will need to refer to each service&amp;rsquo;s documentation to find out how to
review that service&amp;rsquo;s accounts.&lt;/p&gt;
&lt;h2 id=&#34;least-privilege&#34;&gt;Least privilege&lt;/h2&gt;
&lt;p&gt;Avoid running programs as root to the maximum extent possible.
Network-facing programs should run as pseudo-users,
except when root privileges are absolutely needed (see
the design of OpenSSH, qmail, Postfix, and Dovecot).
X11 applications should never run as root.
Indeed, even administrators should minimize running programs as root
to avoid accidents.
Use &lt;code&gt;sudo&lt;/code&gt; to administer your system.&lt;/p&gt;
&lt;h2 id=&#34;minimal-packages&#34;&gt;Minimal packages&lt;/h2&gt;
&lt;p&gt;A hardened computer contains only the software needed to serve its purpose.
On Red Hat-like version of Linux, you can enumerate the packages installed
with &lt;code&gt;rpm -qa&lt;/code&gt; and remove a package with &lt;code&gt;rpm -e *pkg-name*&lt;/code&gt;. In general, you should interact with the computer&amp;rsquo;s
package system (i.e., RPM on Red Hat, dpkg on Debian/Ubuntu, or ports on BSD)
rather than manually removing things with &lt;code&gt;rm&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;dangerous-programs&#34;&gt;Dangerous programs&lt;/h2&gt;
&lt;p&gt;It is very difficult to audit everything on a modern, general-purpose computer (very small distributions such as OpenWrt can be of help here).
Because of this, it is wise to consider those programs
which might give an attacker a foothold on the computer.
This includes &lt;em&gt;network-facing&lt;/em&gt; programs
and &lt;em&gt;setuid-bit&lt;/em&gt; programs.&lt;/p&gt;
&lt;h3 id=&#34;network-facing-programs&#34;&gt;Network-facing programs&lt;/h3&gt;
&lt;p&gt;One way to audit the network-facing programs running on a computer
is with a port scan. The &lt;code&gt;nmap&lt;/code&gt; utility serves this purpose.
There are a few things to remember here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nmap&lt;/code&gt; scans only common ports by default, but you can scan
all ports using &lt;code&gt;-p1-&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nmap&lt;/code&gt; scans TCP by default, but you can scan UDP using &lt;code&gt;-sU&lt;/code&gt;; and&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nmap&lt;/code&gt; scans IPv4 by default, but you can scan IPv6 using &lt;code&gt;-6&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You should scan the entire port range of IPv4 TCP and UDP and also IPv6 TCP and UDP.&lt;/p&gt;
&lt;h3 id=&#34;setuid-bit-programs&#34;&gt;Setuid-bit programs&lt;/h3&gt;
&lt;p&gt;Setuid-bit programs run with the privileges of the owner of the program&#39;s file within the filesystem instead of the parent process.
This mechanism is often used to temporarily escalate privileges, and so compromised setuid-bit programs are particularly dangerous.
You can list the setuid-bit programs on the compromised system by running the following command:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find /mnt -perm -4000 -type f
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It is especially important to remove unnecessary programs which have their
setuid bit set.&lt;/p&gt;
&lt;h2 id=&#34;memory-bug-countermeasures&#34;&gt;Memory-bug countermeasures&lt;/h2&gt;
&lt;p&gt;Attackers sometimes use a memory bug present in a program to a undermine security policy.
Such bugs include unchecked buffer accesses.
It is generally best to select software which is written using a type-safe
language, because type-safe languages remove entire classes of bugs.
However, sometimes software written in unsafe languages such as C cannot
be avoided.
In these cases, certain features of Unix and compilers can help thwart attacks on
memory bugs.&lt;/p&gt;
&lt;p&gt;The following is a list of memory exploits along with countermeasures.&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Stack smash, payload on stack&lt;/dt&gt;&lt;dd&gt;Non-executable stack, a feature of Unix.&lt;/dd&gt;
&lt;dt&gt;Stack smash, return to existing library&lt;/dt&gt;&lt;dd&gt;Stack canaries, a compiler feature.&lt;/dd&gt;
&lt;dt&gt;Stack smash, return-oriented programming&lt;/dt&gt;&lt;dd&gt;Address-space layout randomization, a feature of Unix which relies on code compiled in a position-independent way.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;While these techniques can make the act of exploiting a bug more difficult,
they often fail when software has more than one bug. For examples, ASLR
might be ineffective in the presence of both a buffer-overflow bug and a bug
which leaks the address of one of the program&amp;rsquo;s symbol.&lt;/p&gt;
&lt;h2 id=&#34;centralized-logging&#34;&gt;Centralized logging&lt;/h2&gt;
&lt;p&gt;Computers should log events and send these logs to a centralized
log consolidator using an encrypted and authenticated network channel.
This allows a network administrator to view the activities on his network
in a unified manner, and it stores a record of the activities on each
computer separate from the computer being monitored. If a computer is
compromised, the attacker might find it difficult to compromise the log
server. Of course, the log server itself must also be hardened.
Another document,
&lt;a href=&#34;../selinux/&#34;&gt;logging strategies&lt;/a&gt;, describes one way to build
a logging system with these properties.&lt;/p&gt;
&lt;h2 id=&#34;update-software&#34;&gt;Update software&lt;/h2&gt;
&lt;p&gt;Ensure that the software on the computer is up-to-date. You can do this
using the computer&amp;rsquo;s package-management tool.&lt;/p&gt;
&lt;h2 id=&#34;ssh-configuration&#34;&gt;SSH configuration&lt;/h2&gt;
&lt;p&gt;Administrators commonly use SSH to administer a set of computers.
SSH is a good choice, because it encrypts the connections it provides.
Yet SSH can succumb to password-guessing attacks.
For this reason, administrators should configure SSH to use
public-key-based authentication and forbid password-based authentication.&lt;/p&gt;
&lt;p&gt;You can disable OpenSSH&amp;rsquo;s use of passwords by setting &lt;code&gt;PasswordAuthentication&lt;/code&gt; to &lt;code&gt;no&lt;/code&gt; in &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Generating the keys necessary for public-key-based authentication
is a matter of running &lt;code&gt;ssh-keygen -b 4096&lt;/code&gt; and copying the resulting &lt;code&gt;~/.ssh/id_rsa.pub&lt;/code&gt; into the &lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt; on the computers
you wish to login on.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Herald</title>
      <link>https://www.flyn.org/notes/herald/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/herald/</guid>
      <description>&lt;p&gt;This document describes how to build Herald, a multi-function server. Herald runs on
commodity router hardware and provides a number of features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SSH access&lt;/li&gt;
&lt;li&gt;a web service with PHP support&lt;/li&gt;
&lt;li&gt;an SMTP service&lt;/li&gt;
&lt;li&gt;an IMAP service&lt;/li&gt;
&lt;li&gt;a Git service&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We build Herald on top of OpenWrt because of the distribution&amp;rsquo;s simplicity and small size.
Herald is made up of roughly 120 packages, and its programs and configurations take up less than 50 MB of storage space.
Here we assume that Herald will run within the confines of a Xen hypervisor.&lt;/p&gt;
&lt;h2 id=&#34;establish-the-herald-vm&#34;&gt;Establish the Herald VM&lt;/h2&gt;
&lt;p&gt;Perform the following steps on the Xen Dom0 host to establish the VM which will host Herald:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Obtain the x86_64 OpenWrt image at &lt;a href=&#34;https://downloads.lede-project.org/releases/17.01.1/targets/x86/64/lede-17.01.1-x86-64-combined-ext4.img.gz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://downloads.lede-project.org/releases/17.01.1/targets/x86/64/lede-17.01.1-x86-64-combined-ext4.img.gz&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Uncompress the image and place it at &lt;code&gt;/var/lib/xen/images/herald-lede-17.01.1-x86-64-combined-ext4.img&lt;/code&gt; on the Xen Dom0 host.&lt;/li&gt;
&lt;li&gt;Create a disk image to serve as the server&amp;rsquo;s large data store (see our notes on &lt;a href=&#34;../virtualization/index.html#disks&#34;&gt;platform virtualization&lt;/a&gt;)
and name it &lt;code&gt;/var/lib/xen/images/herald-data.qcow&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Write the following at &lt;code&gt;/etc/xen/vm-herald.cfg&lt;/code&gt; on the Xen Dom0 host (replace &lt;em&gt;XX:XX:XX:XX:XX:XX&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;herald&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;n&#34;&gt;memory&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;1024&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;n&#34;&gt;vcpus&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;mi&#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;n&#34;&gt;builder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hvm&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;n&#34;&gt;vif&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;s2&#34;&gt;&amp;#34;model=e1000,script=vif-bridge,bridge=xenbr0,mac=XX:XX:XX:XX:XX:XX&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;disk&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;tap2:tapdisk:aio:/var/lib/xen/images/herald-lede-17.01.1-x86-64-combined-ext4.img,xvda,w&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;tap2:qcow:/var/lib/xen/images/herald-data.qcow,xvdb,w&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;p&#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;n&#34;&gt;serial&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pty&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;software-installation&#34;&gt;Software installation&lt;/h2&gt;
&lt;p&gt;Perform the following steps on Herald:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set the root password: &lt;code&gt;passwd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Remove unnecessary packages:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg remove \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        dnsmasq \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        kmod-ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        kmod-pppoe \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        kmod-pppox \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        kmod-r8169 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	logd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-app-firewall \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-lib-ip \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-lib-jsonc \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-lib-nixio \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-proto-ipv6 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-proto-ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        luci-theme-bootstrap \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-mod-admin-full \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-base \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        mtd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        odhcpd-ipv6only \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ppp-mod-pppoe \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        r8169-firmware \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        uhttpd-mod-ubus \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	uhttpd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Configure networking by writing &lt;code&gt;/etc/config/network&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config interface loopback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname lo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto static
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ipaddr 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option netmask 255.0.0.0
&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;config interface lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto dhcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Install the necessary software:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg install \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        block-mount \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        bogofilter \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ca-certificates \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        dovecot (with GSSAPI and LDAP modules) \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	dovecot-pigeonhole \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        freifunk-watchdog \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        git \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        lighttpd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	lighttpd-mod-accesslog \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        lighttpd-mod-auth \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        lighttpd-mod-authn_file \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        lighttpd-mod-authn_gssapi \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        lighttpd-mod-fastcgi \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        lighttpd-mod-redirect \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        lighttpd-mod-setenv  \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-fastcgi \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-ctype \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-curl \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-dom \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-exif \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-fileinfo \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-gd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-hash \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-iconv \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-json \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-mbstring \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-opcache \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-openssl \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-pdo \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-pdo-sqlite \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-session \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-simplexml \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-sqlite3 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-xml \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-xmlreader \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-xmlwriter \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        php7-mod-zip \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	php7-pecl-krb5 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	php7-pecl-ldap \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	php7-pecl-mcrypt \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        postfix \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        rsync \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	syslog-ng \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        zoneinfo-core \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        zoneinfo-northamerica
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Install a public SSH key at &lt;code&gt;/etc/dropbear/authorized_keys&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configuring-the-lighttpd-web-server&#34;&gt;Configuring the lighttpd web server&lt;/h2&gt;
&lt;p&gt;Here we describe how to configure lighttpd to redirect HTTP to HTTPS;
authenticate using passwords or GSSAPI, depending on which network the client connects from;
maintain a log using syslog;
and
support FastCGI.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create &lt;code&gt;/etc/lighttpd/htpasswd&lt;/code&gt; to define non-Kerberos accounts which mirror the accounts defined by the network&amp;rsquo;s Kerberos server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set up lighttpd&amp;rsquo;s Kerberos principal by running kadmin.local on the network&amp;rsquo;s Kerberos server, and executing the following commands (replace &lt;em&gt;example.com&lt;/em&gt; and &lt;em&gt;EXAMPLE.COM&lt;/em&gt;):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;add_principal -randkey HTTP/www.example.com@EXAMPLE.COM&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;(if needed) &lt;code&gt;purgekeys -all HTTP/www.example.com@EXAMPLE.COM&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ktadd -k keytab HTTP/www.example.com@EXAMPLE.COM&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To configure Firefox to authenticate using Kerberos, visit about:config and set (replace &lt;em&gt;example.com&lt;/em&gt;):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;network.negotiate-auth.trusted-uris = https://&lt;/li&gt;
&lt;li&gt;network.negotiate-auth.delegation-uris = .example.com&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;. Ensure the &lt;code&gt;/etc/krb5.conf&lt;/code&gt; on each client contains &lt;code&gt;dns_canonicalize_hostname = false&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy &lt;code&gt;keytab&lt;/code&gt; from the network&amp;rsquo;s Kerberos server to &lt;code&gt;/etc/lighttpd/&lt;/code&gt; on Herald. Set the ownership and permissions of the file with &lt;code&gt;chgrp www-data keytab&lt;/code&gt; and &lt;code&gt;chmod 640 keytab&lt;/code&gt;, respectively.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/lighttpd/example.com.pem&lt;/code&gt;:
Some TLS certificate authorities provide free TLS/X.509 certificates.
Run &lt;code&gt;openssl req -out CSR.csr -new -newkey rsa:4096 -nodes -keyout privateKey.key&lt;/code&gt;
to generate a private key and corresponding certificate signing request.
You should submit the request (CSR.csr) to your certificate authority,
and they should respond with your new certificate, a root CA certificate, and an immediate certificate.
Concatenate the private key and certificate to produce &lt;code&gt;etc/lighttpd/example.com.pem&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/lighttpd/ca.pem&lt;/code&gt;:
Concatenate the immediate and root certificate to produce &lt;code&gt;etc/lighttpd/ca.pem&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/lighttpd/dh-param.pem&lt;/code&gt;:
Generate Diffie-Hellman parameters using &lt;code&gt;openssl dhparam -out dh-param.pem -2 2048&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/lighttpd/lighttpd.conf&lt;/code&gt; (replace &lt;em&gt;example.com&lt;/em&gt;):&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modules&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#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;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;errorlog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;syslog&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;enable&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;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;root&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/mnt/sda1/var/www/example.com&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;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;upload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dirs&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;s2&#34;&gt;&amp;#34;/tmp&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;             &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/run/lighttpd.pid&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;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;username&lt;/span&gt;             &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http&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;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;groupname&lt;/span&gt;            &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;www-data&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;names&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;s2&#34;&gt;&amp;#34;index.php&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;index.html&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;index.htm&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;default.htm&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;index.lighttpd.html&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;static&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exclude&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extensions&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;s2&#34;&gt;&amp;#34;.php&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.pl&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.fcgi&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modules&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;s2&#34;&gt;&amp;#34;mod_openssl&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SERVER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;socket&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;:443&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;enable&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;n&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pemfile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/lighttpd/example.com.pem&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;n&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ca&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/lighttpd/ca.pem&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;p&#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;n&#34;&gt;include&lt;/span&gt;       &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/lighttpd/mime.conf&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;n&#34;&gt;include_shell&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat /etc/lighttpd/conf.d/*.conf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;10&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/lighttpd/conf.d/10-redirect.conf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server.modules += ( &amp;#34;mod_redirect&amp;#34; )
&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;$HTTP[&amp;#34;scheme&amp;#34;] == &amp;#34;http&amp;#34; {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        $HTTP[&amp;#34;host&amp;#34;] =~ &amp;#34;.*&amp;#34; {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                url.redirect = (&amp;#34;.*&amp;#34; =&amp;gt; &amp;#34;https://%0$0&amp;#34;)
&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;11&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/lighttpd/conf.d/20-auth.conf&lt;/code&gt; (replace &lt;em&gt;network-cidr&lt;/em&gt;, &lt;em&gt;example.com&lt;/em&gt;, &lt;em&gt;EXAMPLE.COM&lt;/em&gt;, &lt;em&gt;protected-path&lt;/em&gt; and &lt;em&gt;application-name&lt;/em&gt;; &lt;em&gt;network-cidr&lt;/em&gt; represents the network containing the hosts which have access to Kerberos authentication):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server.modules += ( &amp;#34;mod_auth&amp;#34; )
&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;$HTTP[&amp;#34;remoteip&amp;#34;] == &amp;#34;network-cidr&amp;#34; {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	auth.backend                  = &amp;#34;gssapi&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	auth.backend.gssapi.keytab    = &amp;#34;/etc/lighttpd/keytab&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	auth.backend.gssapi.principal = &amp;#34;HTTP/www.example.com@EXAMPLE.COM&amp;#34;
&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;        auth.require = (
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;/protected-path&amp;#34; =&amp;gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;#34;method&amp;#34;  =&amp;gt; &amp;#34;gssapi&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;#34;realm&amp;#34;   =&amp;gt; &amp;#34;EXAMPLE.COM&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;#34;require&amp;#34; =&amp;gt; &amp;#34;valid-user&amp;#34;
&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;} else {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	auth.backend                   = &amp;#34;htpasswd&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	auth.backend.htpasswd.userfile = &amp;#34;/etc/lighttpd/htpasswd&amp;#34;
&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;	auth.require = (
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;/protected-path&amp;#34; =&amp;gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;#34;method&amp;#34;  =&amp;gt; &amp;#34;basic&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;#34;realm&amp;#34;   =&amp;gt; &amp;#34;application-name&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;#34;require&amp;#34; =&amp;gt; &amp;#34;valid-user&amp;#34;
&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&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;12&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/lighttpd/conf.d/30-accesslog.conf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server.modules += ( &amp;#34;mod_accesslog&amp;#34; )
&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;accesslog.use-syslog   = &amp;#34;enable&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;accesslog.syslog-level = 6
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;13&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/lighttpd/conf.d/30-fastcgi.conf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server.modules += ( &amp;#34;mod_fastcgi&amp;#34; )
&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;fastcgi.server = (
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &amp;#34;.php&amp;#34; =&amp;gt; ((
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &amp;#34;bin-path&amp;#34; =&amp;gt; &amp;#34;/usr/bin/php-cgi&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &amp;#34;socket&amp;#34; =&amp;gt; &amp;#34;/tmp/php-fastcgi.socket&amp;#34;
&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;14&#34;&gt;
&lt;li&gt;Set the ownership of lighttpd&amp;rsquo;s sensitive files using &lt;code&gt;chown root:www-data /etc/lighttpd/*.pem /etc/lighttpd/htpasswd&lt;/code&gt;, and set the permissions on these files with &lt;code&gt;chmod 640 /etc/lighttpd/*.pem /etc/lighttpd/htpasswd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/php.ini&lt;/code&gt;: Set &lt;code&gt;doc_root = &amp;quot;/mnt/sda1/var/www/example.com&amp;quot;&lt;/code&gt;, &lt;code&gt;error_log = syslog&lt;/code&gt;, and &lt;code&gt;date.timezone = America/New_York&lt;/code&gt;. 15.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configuring-the-postfix-smtp-server-and-bogofilter-spam-filter&#34;&gt;Configuring the Postfix SMTP server and Bogofilter spam filter&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/postfix/master.cf&lt;/code&gt; (replace &lt;code&gt;host.example.com&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Do not filter mail from localhost (e.g., from Roundcube or a ssh tunnel).
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;127.0.0.1:smtp      inet  n       -       n       -       -       smtpd
&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;# Filter all other mail through bogofilter (see below).
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;host.example.com:smtp      inet  n       -       n       -       -       smtpd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   -o content_filter=filter
&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;pickup    unix  n       -       n       60      1       pickup
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cleanup   unix  n       -       n       -       0       cleanup
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;qmgr      unix  n       -       n       300     1       qmgr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tlsmgr    unix  -       -       n       1000?   1       tlsmgr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rewrite   unix  -       -       n       -       -       trivial-rewrite
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bounce    unix  -       -       n       -       0       bounce
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;defer     unix  -       -       n       -       0       bounce
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;trace     unix  -       -       n       -       0       bounce
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;verify    unix  -       -       n       -       1       verify
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;flush     unix  n       -       n       1000?   0       flush
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxymap  unix  -       -       n       -       -       proxymap
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxywrite unix -       -       n       -       1       proxymap
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;smtp      unix  -       -       n       -       -       smtp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;relay     unix  -       -       n       -       -       smtp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;showq     unix  n       -       n       -       -       showq
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;error     unix  -       -       n       -       -       error
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;retry     unix  -       -       n       -       -       error
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;discard   unix  -       -       n       -       -       discard
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;local     unix  -       n       n       -       -       local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;virtual   unix  -       n       n       -       -       virtual
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lmtp      unix  -       -       n       -       -       lmtp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;anvil     unix  -       -       n       -       1       anvil
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scache    unix  -       -       n       -       1       scache
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;filter	  unix	-	n	n	-	-	pipe
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   flags=Rq user=bogofilter argv=/usr/sbin/postfix-bogofilter -f ${sender} -- ${recipient}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/postfix/main.cf&lt;/code&gt; (replace &lt;code&gt;host.example.com&lt;/code&gt;, &lt;code&gt;example.com&lt;/code&gt;, and &lt;em&gt;mailrelay.example.com&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mail_owner&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;postfix&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;n&#34;&gt;setgid_group&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;postdrop&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;n&#34;&gt;myhostname&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&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;n&#34;&gt;myorigin&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&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;n&#34;&gt;mynetworks&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;127.0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;192.168&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1.0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;24&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;n&#34;&gt;queue_directory&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;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sda1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spool&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;postfix&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;n&#34;&gt;data_directory&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;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sda1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;postfix&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;n&#34;&gt;mail_spool_directory&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;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sda1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spool&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mail&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;n&#34;&gt;virtual_mailbox_base&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;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sda1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spool&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mail&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;n&#34;&gt;relay_domains&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;n&#34;&gt;mydestination&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;n&#34;&gt;smtpd_delay_reject&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yes&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;n&#34;&gt;smtpd_helo_required&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yes&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;n&#34;&gt;smtpd_helo_restrictions&lt;/span&gt; &lt;span class=&#34;o&#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;n&#34;&gt;permit_mynetworks&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_non_fqdn_helo_hostname&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_invalid_helo_hostname&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;permit&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;n&#34;&gt;strict_rfc821_envelopes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yes&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;n&#34;&gt;disable_vrfy_command&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yes&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;n&#34;&gt;smtpd_relay_restrictions&lt;/span&gt; &lt;span class=&#34;o&#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;n&#34;&gt;permit_mynetworks&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;permit_sasl_authenticated&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_unauth_destination&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;# Note, we leave reject_rbl_client-like checks for later processing.&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;n&#34;&gt;smtpd_recipient_restrictions&lt;/span&gt; &lt;span class=&#34;o&#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;n&#34;&gt;permit_mynetworks&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_unauth_pipelining&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_invalid_hostname&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_non_fqdn_sender&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_non_fqdn_recipient&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_unknown_sender_domain&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_unknown_recipient_domain&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_unknown_reverse_client_hostname&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_unauth_destination&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_rhsbl_helo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dbl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spamhaus&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_rhsbl_sender&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dbl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spamhaus&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_rhsbl_reverse_client&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dbl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spamhaus&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_rhsbl_sender&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fresh&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fmb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;la&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;127.2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_rbl_client&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;zen&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spamhaus&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_rbl_client&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dyna&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spamrats&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_rbl_client&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hostkarma&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;junkemailfilter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;127.0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.2&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_rbl_client&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;truncate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gbudb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_rbl_client&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dnsbl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cobion&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_rbl_client&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fmb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;la&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;127.0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.2&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_rbl_client&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;barracudacentral&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject_rbl_client&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spamcop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;check_recipient_access&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cdb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;postfix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;recipient_access&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;check_sender_access&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cdb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;postfix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sender_access&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;reject&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;n&#34;&gt;relayhost&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;n&#34;&gt;mailrelay&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;587&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;n&#34;&gt;smtp_tls_security_level&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;encrypt&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;n&#34;&gt;smtp_sasl_auth_enable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yes&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;n&#34;&gt;smtp_sasl_password_maps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cdb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;postfix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;saslpasswd&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;n&#34;&gt;smtp_sasl_security_options&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;noplaintext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;noanonymous&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;n&#34;&gt;smtp_sasl_tls_security_options&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;noanonymous&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;n&#34;&gt;virtual_mailbox_domains&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;n&#34;&gt;mydomain&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;n&#34;&gt;virtual_mailbox_maps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ldap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;postfix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;users&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cf&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;n&#34;&gt;virtual_mailbox_lock&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fcntl&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;n&#34;&gt;virtual_uid_maps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ldap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;postfix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uids&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cf&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;n&#34;&gt;virtual_gid_maps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&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;n&#34;&gt;virtual_alias_maps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cdb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;postfix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&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;n&#34;&gt;virtual_transport&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lmtp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dovecot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lmtp&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;n&#34;&gt;message_size_limit&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;104857600&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;n&#34;&gt;mailbox_size_limit&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#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;n&#34;&gt;virtual_mailbox_limit&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;unknown_local_recipient_reject_code&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;550&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;n&#34;&gt;unknown_address_reject_code&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;554&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;n&#34;&gt;unknown_hostname_reject_code&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;554&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;n&#34;&gt;unknown_client_reject_code&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;554&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;n&#34;&gt;biff&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;no&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;n&#34;&gt;html_directory&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;no&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;n&#34;&gt;manpage_directory&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;no&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;n&#34;&gt;readme_directory&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;no&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;n&#34;&gt;inet_protocols&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ipv4&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;n&#34;&gt;mailbox_transport&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lmtp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dovecot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lmtp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/postfix/virtual&lt;/code&gt; (replace &lt;em&gt;&lt;a href=&#34;mailto:recipient@example.com&#34;&gt;recipient@example.com&lt;/a&gt;&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root recipient@example.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/postfix/saslpasswd&lt;/code&gt; (replace &lt;em&gt;mailrelay.example.com&lt;/em&gt;, &lt;em&gt;&lt;a href=&#34;mailto:user@example.com&#34;&gt;user@example.com&lt;/a&gt;&lt;/em&gt;, and &lt;em&gt;password&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[mailrelay.example.com]:587 user@example.com:password
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/postfix/recipient_access&lt;/code&gt; (replace &lt;em&gt;&lt;a href=&#34;mailto:unrestricted_recipient@example.com&#34;&gt;unrestricted_recipient@example.com&lt;/a&gt;&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unrestricted_recipient@example.com OK
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/postfix/sender_access&lt;/code&gt; (replace &lt;em&gt;&lt;a href=&#34;mailto:permitted_sender@example.com&#34;&gt;permitted_sender@example.com&lt;/a&gt;&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;permitted_sender@example.com OK
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;Use &lt;code&gt;postmap&lt;/code&gt; to compile each of &lt;em&gt;virtual&lt;/em&gt;, &lt;em&gt;saslpasswd&lt;/em&gt;, &lt;em&gt;recipient_access&lt;/em&gt;, and &lt;em&gt;sender_access&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/postfix/aliases&lt;/code&gt;: Set the recipient of root&#39;s mail and run &lt;code&gt;postalias /etc/postfix/aliases&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/postfix/ldap-users.cf&lt;/code&gt; (replace &lt;em&gt;ldap-server&lt;/em&gt; and &lt;em&gt;dc=example,dc=com&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server_host = ldaps://ldap-server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server_port = 636
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;search_base = ou=people,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;version = 3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;query_filter = uid=%u
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;result_attribute = uid
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;10&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/postfix/ldap-uids.cf&lt;/code&gt; (replace &lt;em&gt;ldap-server&lt;/em&gt; and &lt;em&gt;dc=example,dc=com&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server_host = ldaps://ldap-server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server_port = 636
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;search_base = ou=people,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;version = 3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;query_filter = uid=%u
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;result_attribute = uidNumber
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;11&#34;&gt;
&lt;li&gt;Check the ownership of Postfix&#39;s spool directories.&lt;/li&gt;
&lt;li&gt;Create a &lt;em&gt;bogofilter&lt;/em&gt; user in &lt;code&gt;/etc/passwd&lt;/code&gt;, &lt;code&gt;/etc/group&lt;/code&gt;, and &lt;code&gt;/etc/shadow&lt;/code&gt;. Set the user&amp;rsquo;s shell to &lt;code&gt;/bin/false&lt;/code&gt; and his home directory to &lt;code&gt;/mnt/sda1/var/spool/bogofilter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create the directory &lt;code&gt;/mnt/sda1/var/spool/bogofilter&lt;/code&gt;. Restrict the permissions of this directory so that only the bogofilter user may access it. Configure bogofilter to make use of the directory by modifying &lt;code&gt;/etc/bogofilter.cf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;bogofilter_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sda1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spool&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bogofilter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;14&#34;&gt;
&lt;li&gt;Set the ownership of &lt;code&gt;/etc/bogofilter.cf&lt;/code&gt; with &lt;code&gt;chown bogofilter /etc/bogofilter.cf&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configuring-the-dovecot-pop3imap-server&#34;&gt;Configuring the Dovecot POP3/IMAP server&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Set up Dovecot&amp;rsquo;s Kerberos principal by running kadmin.local on the network&amp;rsquo;s Kerberos server, and executing the following commands (replace &lt;em&gt;example.com&lt;/em&gt; and &lt;em&gt;EXAMPLE.COM&lt;/em&gt;):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;add_principal -randkey imap/www.example.com@EXAMPLE.COM&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;(if needed) &lt;code&gt;purgekeys -all imap/www.example.com@EXAMPLE.COM&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ktadd -k keytab imap/www.example.com@EXAMPLE.COM&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy &lt;code&gt;keytab&lt;/code&gt; from the network&amp;rsquo;s Kerberos server to &lt;code&gt;/etc/dovecot&lt;/code&gt; on Herald. Set the ownership and permissions of the file with &lt;code&gt;chown dovecot keytab&lt;/code&gt; and &lt;code&gt;chmod 600 keytab&lt;/code&gt;, respectively.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/dovecot/dovecot.conf&lt;/code&gt; (replace &lt;em&gt;example.com&lt;/em&gt;):&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;protocols&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;imap&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pop3&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lmtp&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;n&#34;&gt;auth_gssapi_hostname&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;$ALL&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;n&#34;&gt;auth_mechanisms&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plain&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;login&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gssapi&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;n&#34;&gt;auth_krb5_keytab&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;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dovecot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;keytab&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;n&#34;&gt;userdb&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;driver&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ldap&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;n&#34;&gt;args&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;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dovecot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dovecot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ldap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conf&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;p&#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;n&#34;&gt;passdb&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;driver&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;passwd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&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;n&#34;&gt;args&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;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dovecot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;passwd&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;p&#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;n&#34;&gt;service&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;imap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;login&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;inet_listener&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;imaps&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#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;p&#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;p&#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;n&#34;&gt;service&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pop3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;login&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;inet_listener&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pop3s&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#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;p&#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;p&#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;n&#34;&gt;service&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lmtp&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;unix_listener&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sda1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spool&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;postfix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dovecot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lmtp&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;postfix&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;n&#34;&gt;group&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;postfix&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;n&#34;&gt;mode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0600&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;p&#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;p&#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;n&#34;&gt;protocol&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lmtp&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;postmaster_address&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;postmaster&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flyn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&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;n&#34;&gt;hostname&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;flyn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&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;n&#34;&gt;mail_plugins&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;n&#34;&gt;mail_plugins&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sieve&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;p&#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;n&#34;&gt;plugin&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;fts_autoindex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&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;n&#34;&gt;sieve_default&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;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dovecot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sieve&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sieve&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;p&#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;n&#34;&gt;ssl&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;required&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;n&#34;&gt;ssl_cert&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dovecot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cert&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;n&#34;&gt;ssl_key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dovecot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&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;n&#34;&gt;ssl_dh&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dovecot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dh&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;param&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pem&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;n&#34;&gt;mail_location&lt;/span&gt; &lt;span class=&#34;o&#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;n&#34;&gt;mbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sda1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spool&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;folders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;INBOX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mnt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sda1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spool&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&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;n&#34;&gt;mail_access_groups&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mail&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;n&#34;&gt;default_login_user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nobody&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;n&#34;&gt;disable_plaintext_auth&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yes&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;n&#34;&gt;auth_username_format&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;n&#34;&gt;Ln&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;n&#34;&gt;mbox_write_locks&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fcntl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/dovecot/dovecot-ldap.conf&lt;/code&gt; (replace &lt;em&gt;dc=example,dc=com&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hosts = localhost
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;base = ou=people,dc=example,dc=com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;user_filter = (&amp;amp;(objectClass=posixAccount)(uid=%n))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/dovecot/passwd&lt;/code&gt; (replace placeholder fields; hope to eventually use Kerberos):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PLAIN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Full&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dovecot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/dovecot/sieve/default.sieve&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;require&lt;/span&gt; &lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;fileinto&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;regex&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;variables&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;p&#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;n&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;blacklist&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;(a v(e)*ry bad word|viagra)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;header&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;matches&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;X-Bogosity&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Spam,*&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;fileinto&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Junk&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;elsif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;header&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;regex&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Subject&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${blacklist}&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;fileinto&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Junk&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;elsif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;regex&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${blacklist}&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;fileinto&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Junk&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;else&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;keep&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/etc/dovecot/dh-param.pem&lt;/code&gt;:
Generate Diffie-Hellman parameters using &lt;code&gt;openssl dhparam -out dh-param.pem -2 2048&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &lt;code&gt;sievec /etc/dovecot/sieve&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy certificate and private key to &lt;em&gt;example.com.cert&lt;/em&gt; and &lt;em&gt;example.com.key&lt;/em&gt;, respectively.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the ownership of Dovecot&amp;rsquo;s files using &lt;code&gt;chown -R dovecot /etc/dovecot&lt;/code&gt;, and set the permissions on the most sensitive files with &lt;code&gt;chmod 600 /etc/dovecot/example.com.key /etc/dovecot/passwd&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configure-git&#34;&gt;Configure Git&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Add &lt;code&gt;/usr/bin/git-shell&lt;/code&gt; to &lt;code&gt;/etc/shells&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create a &lt;em&gt;git&lt;/em&gt; user in &lt;code&gt;/etc/passwd&lt;/code&gt;, &lt;code&gt;/etc/group&lt;/code&gt;, and &lt;code&gt;/etc/shadow&lt;/code&gt;. Set the user&amp;rsquo;s shell to &lt;code&gt;/usr/bin/git-shell&lt;/code&gt; and his home directory to &lt;code&gt;/mnt/sda1/var/git&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install the authorized users&amp;rsquo; public SSH keys at &lt;code&gt;/mnt/sda1/var/git/.ssh/authorized_keys&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configure-the-host-firewall&#34;&gt;Configure the host firewall&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;/etc/config/firewall&lt;/em&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config defaults
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option drop_invalid 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option input ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option output ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option forward ACCEPT
&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;config zone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option name lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option network lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option input DROP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option output ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option forward DROP
&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;# Allow SSH connections from LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 22
&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;# Allow SMTP connections from LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule                 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 25
&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;# Allow IMAP connections from LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule                 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 143
&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;# Allow HTTP connections from LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 80
&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;# Allow HTTPS connections from LAN.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option target ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option src lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dest_port 443
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configure-basic-system-settings&#34;&gt;Configure basic system settings&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/config/fstab&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config mount
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option device   /dev/sda1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option target   /mnt/sda1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option fstype   ext4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option options  rw
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enabled  1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enabled_fsck 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/php7-fastcgi&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config php7-fastcgi
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option enabled 1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/system&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config system
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option hostname	herald.flyn.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option timezone	EST5EDT,M3.2.0,M11.1.0
&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;config timeserver ntp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     0.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     1.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     2.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     3.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enabled 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enable_server 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/freifunk-watchdog&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option process dropbear	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option initscript /etc/init.d/dropbear
&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;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option process crond
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option initscript &amp;#39;/etc/init.d/cron&amp;#39;
&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;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option process lighttpd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option initscript /etc/init.d/lighttpd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/config/dropbear&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config dropbear
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option PasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option RootPasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option Port         &amp;#39;22&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Herald applications</title>
      <link>https://www.flyn.org/notes/herald-applications/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/herald-applications/</guid>
      <description>&lt;p&gt;This document describes how to install a number of web applications on Herald.
In each case, the instructions describe setting up the application within
a local directory for later synchronization with Herald. This adds a
bit of complexity but leaves the web applications managed in the same
way as static files.&lt;/p&gt;
&lt;p&gt;We call the local directory &lt;code&gt;Local Root&lt;/code&gt; and the remote directory on Herald
&lt;code&gt;Remote Root&lt;/code&gt;. Under the conditions of the default install, &lt;code&gt;Remote Root&lt;/code&gt;
is &lt;code&gt;/mnt/sda1/var/www/example.com&lt;/code&gt; on Herald.  We also reference
&lt;code&gt;Remote Parent&lt;/code&gt; which is &lt;code&gt;/mnt/sda1/var/www/&lt;/code&gt; by default.&lt;/p&gt;
&lt;h2 id=&#34;nextcloud-server&#34;&gt;Nextcloud server&lt;/h2&gt;
&lt;h3 id=&#34;installation&#34;&gt;Installation&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Download the Nextcloud Server source code.&lt;/li&gt;
&lt;li&gt;Extract the source code at &lt;code&gt;Local Root&lt;/code&gt; and rename its top-level folder to &lt;code&gt;share&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Synchronize &lt;code&gt;Local Root&lt;/code&gt; with Herald.&lt;/li&gt;
&lt;li&gt;Create the directory &lt;code&gt;Remote Root/example.com/share/data&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;chgrp -R www-data Remote Root/example.com/share/apps Remote Root/example.com/share/config Remote Root/example.com/share/data&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;chmod -R g+w Remote Root/example.com/share/apps Remote Root/example.com/share/config Remote Root/example.com/share/data&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ensure that the file &lt;code&gt;/etc/ssl/openssl.cnf&lt;/code&gt; exists, even if it is empty.&lt;/li&gt;
&lt;li&gt;Use a browser to visit &lt;a href=&#34;https://www.example.com/share/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.example.com/share/&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Once functioning, it is desirable to move Nextcloud Server&amp;rsquo;s &lt;code&gt;data&lt;/code&gt; directory
to &lt;code&gt;Remote Parent/nextcloud-data&lt;/code&gt;.&lt;/p&gt;
&lt;ol start=&#34;9&#34;&gt;
&lt;li&gt;Run &lt;code&gt;mv Remote Root/example.com/share/data Remote Parent/nextcloud-data&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Update &lt;code&gt;Remote Root/example.com/share/config/config.php&lt;/code&gt; to contain the following definition of &lt;code&gt;datadirectory&lt;/code&gt; (replace &lt;code&gt;Remote Parent&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#39;datadirectory&amp;#39; =&amp;gt; &amp;#39;Remote Parent/nextcloud-data/&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You might want to install a number of NextCloud applications, namely:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Calendar&lt;/li&gt;
&lt;li&gt;Contacts&lt;/li&gt;
&lt;li&gt;Deck&lt;/li&gt;
&lt;li&gt;Forms&lt;/li&gt;
&lt;li&gt;JavaScript XMPP Client&lt;/li&gt;
&lt;li&gt;Mail&lt;/li&gt;
&lt;li&gt;Polls&lt;/li&gt;
&lt;li&gt;Talk&lt;/li&gt;
&lt;li&gt;Workflow external scripts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally copy the &lt;code&gt;apps&lt;/code&gt; and &lt;code&gt;config&lt;/code&gt; directories back to &lt;code&gt;Local Root/share&lt;/code&gt;.
You should do this again each time you install a new Nextcloud application.&lt;/p&gt;
&lt;h3 id=&#34;configure&#34;&gt;Configure&lt;/h3&gt;
&lt;p&gt;Using the Nextcloud &lt;code&gt;Settings&lt;/code&gt; interface, configure Nextcloud in the following way:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Under Administration: &lt;code&gt;Groupware&lt;/code&gt;, set a provisional email account.&lt;/li&gt;
&lt;li&gt;Under Administration: &lt;code&gt;JavaScript XMPP Client&lt;/code&gt;, set an external XMPP server.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;upgrade&#34;&gt;Upgrade&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Place the new version of Nextcloud at &lt;code&gt;Local Root/share-new&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Synchronize &lt;code&gt;Local Root&lt;/code&gt; with Herald.&lt;/li&gt;
&lt;li&gt;Copy the old configuration into the new directory, but edit to use &lt;code&gt;nextcloud-data-new&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;chgrp -R www-data Remote Root/example.com/share-new/apps Remote Root/example.com/share-new/config&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;chmod -R g+w Remote Root/example.com/share-new/apps Remote Root/example.com/share-new/config&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;cp -a Remote Parent/nextcloud-data Remote Parent/nextcloud-data-new&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;From &lt;code&gt;Remote Root/example.com/share-new/&lt;/code&gt;, run &lt;code&gt;php-cli occ upgrade&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;mv Remote Root/example.com/share Remote Root/example.com/share-old&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;mv Remote Root/example.com/share-new Remote Root/example.com/share&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;mv Remote Parent/nextcloud-data Remote Parent/nextcloud-data-old&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;mv Remote Parent/nextcloud-data-new Remote Parent/nextcloud-data&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>Hugo</title>
      <link>https://www.flyn.org/notes/hugo/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/hugo/</guid>
      <description>&lt;p&gt;Hugo is a static HTML and CSS website generator, and Academic adds themes
and features to Hugo.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Clone the Hugo Academic kickstart project: &lt;code&gt;git clone https://github.com/sourcethemes/academic-kickstart.git www.example.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enter the &lt;code&gt;www.example.com&lt;/code&gt; directory.&lt;/li&gt;
&lt;li&gt;Clone the theme submodule: &lt;code&gt;git submodule update --init --recursive&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Edit the files in &lt;code&gt;content/home&lt;/code&gt;, setting the &lt;code&gt;active&lt;/code&gt; flag based on the site needs.&lt;/li&gt;
&lt;li&gt;Edit &lt;code&gt;config/_default/params.toml&lt;/code&gt; and &lt;code&gt;config/_default/config.toml&lt;/code&gt; as appropriate. Set &lt;code&gt;disablePathToLower = true&lt;/code&gt; in &lt;code&gt;config.toml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Edit &lt;code&gt;content/authors/admin/_index.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;content/authors/admin/avatar.jpg&lt;/code&gt; or configure to use Gravatar.&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;assets/images/icon.png&lt;/code&gt; with a 512×512 image.&lt;/li&gt;
&lt;li&gt;Create content using commands like &lt;code&gt;hugo new --kind project notes/foo.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Edit &lt;code&gt;config/_default.menu.toml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Adjust appearance by editing &lt;code&gt;assets/scss/custom.scss&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;hugo server&lt;/code&gt; to test the site.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>hunt_n_gather</title>
      <link>https://www.flyn.org/abandoned/hunt_n_gather/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/hunt_n_gather/</guid>
      <description>&lt;p&gt;Hunt_n_gather is a script which attempts to determine the entries
within a filesystem that should be backed up.  It does this by noting
which files are not listed in a system&#39;s rpm database, have been modified
if installed as part of an rpm, etc.  Once hunt_n_gather has a list
of such files, it copied them to the directory given on the command line.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>initscripts-7.41-mouse-emulation</title>
      <link>https://www.flyn.org/patches/initscripts-7.41-mouse-emulation/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/initscripts-7.41-mouse-emulation/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;initscripts-7.41-mouse-emulation.patch.gz&#34;&gt;initscripts-7.41-mouse-emulation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Fedora&#39;s initscripts that adds support for mouse
emulation. This is useful with one-mouse-button Apple laptops.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>initscripts-cryptoswap</title>
      <link>https://www.flyn.org/patches/initscripts-cryptoswap/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/initscripts-cryptoswap/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;initscripts-8.08-cryptoswap.patch.gz&#34;&gt;initscripts-cryptoswap&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Fedora&#39;s initscripts that adds support for encrypted swap.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>insert</title>
      <link>https://www.flyn.org/notes/insert/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/insert/</guid>
      <description>&lt;p&gt;Many laptops and other small devices do not have an insert key. X11 allows you to remap keys using xmodmap.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Identify the event that you want to produce an insert: run xev and press the key to be remapped&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;xmodmap -e &amp;quot;keycode CODE = Insert&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>kodi-plugin.audio.grilo</title>
      <link>https://www.flyn.org/projects/kodi-plugin.audio.grilo/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/kodi-plugin.audio.grilo/</guid>
      <description>&lt;p&gt;Kodi-plugin.audio.grilo is an addon for &lt;a href=&#34;https://kodi.tv/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Kodi&lt;/a&gt; which provides access to shares supported by &lt;a href=&#34;https://wiki.gnome.org/Projects/Grilo&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Grilo&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;kodi-plugin.audio.grilo-0.0.1.tar.gz&#34;&gt;kodi-plugin.audio.grilo-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The kodi-plugin.audio.grilo project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/kodi-plugin.audio.grilo&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>kupgrade</title>
      <link>https://www.flyn.org/abandoned/kupgrade/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/kupgrade/</guid>
      <description>&lt;p&gt;Kupgrade.sh is a simple script which automates upgrading one&#39;s Linux
&lt;a href=&#34;http://www.kernel.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;kernel&lt;/a&gt;.
The script saves the
current and previous kernel
build configuration files.  Kupgrade.sh greatly eases maintaining
kernels for several non-heterogenous
machines by maintaining configuration files and building custom
kernel &lt;a href=&#34;http://www.rpm.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RPM&lt;/a&gt;
files.&lt;/p&gt;
&lt;p&gt;Kupgrade.sh also supports plugins for compiling drivers such as the
&lt;a href=&#34;http://alsa-project.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Advanced Linux Sound Architecture&lt;/a&gt;
modules.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>LaTeX</title>
      <link>https://www.flyn.org/notes/LaTeX/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/LaTeX/</guid>
      <description>&lt;p&gt;After a fresh install of Fedora, I sometimes see the error &amp;ldquo;pdfTeX error
(font expansion): auto expansion is only possible with scalable fonts&amp;rdquo;
when running &lt;code&gt;pdflatex&lt;/code&gt;. Installing the
&lt;code&gt;texlive-collection-fontsextra&lt;/code&gt; package collection seems to fix this.&lt;/p&gt;
&lt;p&gt;The following error is fixed by installing &lt;code&gt;texlive-updmap-map&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+57/600 --dpi 657 ptmri8r
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gsftopk: fatal: map file `psfonts.map&amp;#39; not found.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mktexpk: don&amp;#39;t know how to create bitmap font for ptmri8r.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mktexpk: perhaps ptmri8r is missing from the map file.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kpathsea: Appending font creation commands to missfont.log.
&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;!pdfTeX error: pdflatex (file ptmri8r): Font ptmri8r at 657 not found
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ==&amp;gt; Fatal error occurred, no output PDF file produced!
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make: *** [Makefile:48: 02_summary.pdf] Error 1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>lavtools-1.2-new-quicktime</title>
      <link>https://www.flyn.org/patches/lavtools-1.2-new-quicktime/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/lavtools-1.2-new-quicktime/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;lavtools-1.2-new-quicktime.patch.gz&#34;&gt;lavtools-1.2-new-quicktime&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Dr. Rainer Johanni&#39;s &lt;a href=&#34;http://mjpeg.sourceforge.net&#34;&gt;lavtools&lt;/a&gt;.
When applied, &lt;a href=&#34;http://mjpeg.sourceforge.net/&#34;&gt;lavtools&lt;/a&gt;
will use a more modern &lt;a href=&#34;http://www.heroinewarrior.com/quicktime.php3&#34;&gt;QuickTime for Linux&lt;/a&gt; distribution, allowing &lt;a href=&#34;http://mjpeg.sourceforge.net&#34;&gt;lavtools&lt;/a&gt;
to be used with the &lt;a href=&#34;http://www.heroinewarrior.com/bcast2000.php&#34;&gt;Broadcast
2000&lt;/a&gt; video editing application.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>lcdgrilo</title>
      <link>https://www.flyn.org/projects/lcdgrilo/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/lcdgrilo/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Lcdgrilo is a Grilo-based media player for use on a Raspberry Pi with a
&lt;a href=&#34;http://www.piface.org.uk/products/piface_control_and_display/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PiFace CAD&lt;/a&gt;.
Because it is based on &lt;a href=&#34;https://wiki.gnome.org/action/show/Projects/Grilo&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Grilo&lt;/a&gt;,
lcdgrilo can play media from
any Grilo audio source, including
DMAP,
&lt;a href=&#34;http://www.jamendo.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Jamendo&lt;/a&gt;, and
&lt;a href=&#34;http://www.magnatune.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Magnatune&lt;/a&gt;. The
program makes use of the PiFace CAD for input and output through the
use of a menu-based interface.&lt;/p&gt;
&lt;p&gt;Detailed instructions that describe one way to build a network radio using lcdgrilo, a Raspberry Pi, and a PiFace CAD
can be found &lt;a href=&#34;https://www.flyn.org/notes/siren/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcddaap-0.0.1.tar.gz&#34;&gt;lcddaap-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcddaap-0.0.2.tar.gz&#34;&gt;lcddaap-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.3.tar.gz&#34;&gt;lcdgrilo-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.4.tar.gz&#34;&gt;lcdgrilo-0.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.5.tar.gz&#34;&gt;lcdgrilo-0.0.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.6.tar.gz&#34;&gt;lcdgrilo-0.0.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.7.tar.gz&#34;&gt;lcdgrilo-0.0.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.8.tar.gz&#34;&gt;lcdgrilo-0.0.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.9.tar.gz&#34;&gt;lcdgrilo-0.0.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.10.tar.gz&#34;&gt;lcdgrilo-0.0.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.11.tar.gz&#34;&gt;lcdgrilo-0.0.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.12.tar.gz&#34;&gt;lcdgrilo-0.0.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.13.tar.gz&#34;&gt;lcdgrilo-0.0.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The lcdgrilo project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/lcdgrilo&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>lcdringer</title>
      <link>https://www.flyn.org/projects/lcdringer/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/lcdringer/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Lcdringer is a ringer for use on a Raspberry Pi with a
&lt;a href=&#34;http://www.piface.org.uk/products/piface_control_and_display/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PiFace CAD&lt;/a&gt;.
The idea is that the audio ring announces the intention to initiate a video chat.
This is useful in households which do not leave their computers or other electronic devices on all of the time.&lt;/p&gt;
&lt;p&gt;Lcdringer connects to an XMPP server, listens for messages, and displays
messages that arrive before activating an audible alarm.
Lcdringer also responds to the messages
it receives with an indication of whether or not the audible alarm was
acknowledged with a button press.&lt;/p&gt;
&lt;p&gt;Upon running, lcdringer reads &lt;code&gt;/etc/lcdringer.conf&lt;/code&gt;. Here is an example configuration (replace &lt;em&gt;EXAMPLE.COM&lt;/em&gt;, &lt;em&gt;PASSWORD&lt;/em&gt;,
&lt;em&gt;USER1&lt;/em&gt;, and &lt;em&gt;USER2&lt;/em&gt;; &lt;em&gt;USER1&lt;/em&gt; and &lt;em&gt;USER2&lt;/em&gt; are the users permitted to cause lcdringer to ring):&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[account]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jid=lcdringer@EXAMPLE.COM
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;password=PASSWORD
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ring_path=/usr/share/lcdringer/ring.mp3
&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;[friends]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jids=USER1@EXAMPLE.COM;USER2@EXAMPLE.COM
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Detailed instructions that describe one way to build a device using lcdringer, a Raspberry Pi, and a PiFace CAD
can be found &lt;a href=&#34;https://www.flyn.org/notes/shrieker/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdringer-0.0.1.tar.gz&#34;&gt;lcdringer-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdringer-0.0.2.tar.gz&#34;&gt;lcdringer-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdringer-0.0.3.tar.gz&#34;&gt;lcdringer-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The lcdringer project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/lcdringer&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>Learning</title>
      <link>https://www.flyn.org/notes/learning/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/learning/</guid>
      <description>&lt;h2 id=&#34;websites-paid-and-free-which-teach-programming&#34;&gt;Websites (paid and free) which teach programming&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.aquinas.dev/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Aquinas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ocw.mit.edu/courses/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MIT Open Courseware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://automatetheboringstuff.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Automate the Boring Stuff with Python&lt;/a&gt;, &lt;a href=&#34;https://www.youtube.com/playlist?list=PL0-84-yl1fUnRuXGFe_F7qSH1LEnn9LkW&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;videos on YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.hackerrank.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Hacker Rank&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://projecteuler.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Project Euler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.codecademy.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Codeacademy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.codeschool.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Code School&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cppinstitute.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;C++ Institute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.coursera.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Coursera&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.udacity.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Udacity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-kernel-programming&#34;&gt;… kernel programming&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://eudyptula-challenge.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;The Eudyptula Challenge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-low-level-security-techniques&#34;&gt;… low-level security techniques&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://hackcenter.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;HackCenter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://security.cs.rpi.edu/courses/binexp-spring2015/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Modern Binary Exploitation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://trailofbits.github.io/ctf/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CTF Field Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cis.syr.edu/~wedu/seed/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SEED Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codewarz.ninja/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Codewarz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.avatao.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Avatao&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codebreaker.ltsnet.net/home/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;NSA Codebreaker Challenge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cyberstakesonline.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Cyberstakes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/RPISEC/MBE&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RPI&amp;rsquo;s Modern Binary Exploitation course&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-cryptography&#34;&gt;… cryptography&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://cryptopals.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Cryptopals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;capture-the-flag-competitions&#34;&gt;Capture-the-flag competitions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://ctftime.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CTF Time&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://builditbreakit.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Build it, break it, fix it&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;frameworks-code-and-other-such-things&#34;&gt;Frameworks, code, and other such things&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://ctfd.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CTFd&lt;/a&gt;, a CTF framework&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ucsb-seclab/ictf-framework&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;iCTF&lt;/a&gt;, A CTF framework&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/cliffe/SecGen/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SecGen&lt;/a&gt;, Create vulnerable virtual machines&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://scratch.mit.edu/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Scratch&lt;/a&gt;, The Scratch programming environment; great for children&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>libdmapsharing</title>
      <link>https://www.flyn.org/projects/libdmapsharing/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/libdmapsharing/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Libdmapsharing is a library which allows programs to access, share and control the
playback of media content using DMAP (DAAP, DPAP &amp;amp; DACP). Libdmapsharing
also detects audio AirPlay services; coupled with the AirPlay™
support in PulseAudio or GStreamer, this can allow an application
to stream audio to an AirPlay device. The library presently supports
Linux and other POSIX-based systems. It is written in C using GObject
and libsoup. The DMAP family of protocols are used by products such as
Apple iTunes™, Apple iPhoto™, and the Roku SoundBridge™
family to share media such as music and photos.&lt;/p&gt;
&lt;p&gt;Possible uses for libdmapsharing include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adding picture sharing capabilities to a photograph application&lt;/li&gt;
&lt;li&gt;Adding music sharing capabilities to an audio application&lt;/li&gt;
&lt;li&gt;Adding audio AirPlay output to an application&lt;/li&gt;
&lt;li&gt;Allowing an audio application to be controlled using Apple&#39;s iOS Remote&lt;/li&gt;
&lt;li&gt;Developing DPAP server software for a home networking product&lt;/li&gt;
&lt;li&gt;Developing DMAP client software for a media player appliance&lt;/li&gt;
&lt;li&gt;Developing gateways that translate between DMAP and DLNA&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;links&#34;&gt;Links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gitlab.gnome.org/GNOME/libdmapsharing/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GNOME Git Tree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;doc/&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.flyn.org/projects/dmapd/&#34;&gt;Dmapd, the reference libdmapsharing-based server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;





	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.1.tar.gz&#34;&gt;libdmapsharing-1.9.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.2.tar.gz&#34;&gt;libdmapsharing-1.9.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.3.tar.gz&#34;&gt;libdmapsharing-1.9.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.4.tar.gz&#34;&gt;libdmapsharing-1.9.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.5.tar.gz&#34;&gt;libdmapsharing-1.9.0.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.6.tar.gz&#34;&gt;libdmapsharing-1.9.0.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.7.tar.gz&#34;&gt;libdmapsharing-1.9.0.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.8.tar.gz&#34;&gt;libdmapsharing-1.9.0.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.9.tar.gz&#34;&gt;libdmapsharing-1.9.0.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.10.tar.gz&#34;&gt;libdmapsharing-1.9.0.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.11.tar.gz&#34;&gt;libdmapsharing-1.9.0.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.12.tar.gz&#34;&gt;libdmapsharing-1.9.0.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.13.tar.gz&#34;&gt;libdmapsharing-1.9.0.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.14.tar.gz&#34;&gt;libdmapsharing-1.9.0.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.15.tar.gz&#34;&gt;libdmapsharing-1.9.0.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.16.tar.gz&#34;&gt;libdmapsharing-1.9.0.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.17.tar.gz&#34;&gt;libdmapsharing-1.9.0.17.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.18.tar.gz&#34;&gt;libdmapsharing-1.9.0.18.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.19.tar.gz&#34;&gt;libdmapsharing-1.9.0.19.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.20.tar.gz&#34;&gt;libdmapsharing-1.9.0.20.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.21.tar.gz&#34;&gt;libdmapsharing-1.9.0.21.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.0.0.tar.gz&#34;&gt;libdmapsharing-2.0.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.0.1.tar.gz&#34;&gt;libdmapsharing-2.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.0.2.tar.gz&#34;&gt;libdmapsharing-2.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.0.3.tar.gz&#34;&gt;libdmapsharing-2.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.0.4.tar.gz&#34;&gt;libdmapsharing-2.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.0.tar.gz&#34;&gt;libdmapsharing-2.1.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.1.tar.gz&#34;&gt;libdmapsharing-2.1.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.2.tar.gz&#34;&gt;libdmapsharing-2.1.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.3.tar.gz&#34;&gt;libdmapsharing-2.1.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.4.tar.gz&#34;&gt;libdmapsharing-2.1.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.5.tar.gz&#34;&gt;libdmapsharing-2.1.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.6.tar.gz&#34;&gt;libdmapsharing-2.1.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.7.tar.gz&#34;&gt;libdmapsharing-2.1.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.8.tar.gz&#34;&gt;libdmapsharing-2.1.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.9.tar.gz&#34;&gt;libdmapsharing-2.1.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.10.tar.gz&#34;&gt;libdmapsharing-2.1.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.11.tar.gz&#34;&gt;libdmapsharing-2.1.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.12.tar.gz&#34;&gt;libdmapsharing-2.1.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.13.tar.gz&#34;&gt;libdmapsharing-2.1.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.14.tar.gz&#34;&gt;libdmapsharing-2.1.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.0.tar.gz&#34;&gt;libdmapsharing-2.9.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.1.tar.gz&#34;&gt;libdmapsharing-2.9.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.2.tar.gz&#34;&gt;libdmapsharing-2.9.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.3.tar.gz&#34;&gt;libdmapsharing-2.9.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.4.tar.gz&#34;&gt;libdmapsharing-2.9.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.5.tar.gz&#34;&gt;libdmapsharing-2.9.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.6.tar.gz&#34;&gt;libdmapsharing-2.9.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.7.tar.gz&#34;&gt;libdmapsharing-2.9.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.8.tar.gz&#34;&gt;libdmapsharing-2.9.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.9.tar.gz&#34;&gt;libdmapsharing-2.9.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.10.tar.gz&#34;&gt;libdmapsharing-2.9.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.11.tar.gz&#34;&gt;libdmapsharing-2.9.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.12.tar.gz&#34;&gt;libdmapsharing-2.9.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.13.tar.gz&#34;&gt;libdmapsharing-2.9.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.14.tar.gz&#34;&gt;libdmapsharing-2.9.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.15.tar.gz&#34;&gt;libdmapsharing-2.9.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.16.tar.gz&#34;&gt;libdmapsharing-2.9.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.17.tar.gz&#34;&gt;libdmapsharing-2.9.17.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.18.tar.gz&#34;&gt;libdmapsharing-2.9.18.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.19.tar.gz&#34;&gt;libdmapsharing-2.9.19.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.20.tar.gz&#34;&gt;libdmapsharing-2.9.20.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.21.tar.gz&#34;&gt;libdmapsharing-2.9.21.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.22.tar.gz&#34;&gt;libdmapsharing-2.9.22.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.23.tar.gz&#34;&gt;libdmapsharing-2.9.23.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.24.tar.gz&#34;&gt;libdmapsharing-2.9.24.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.25.tar.gz&#34;&gt;libdmapsharing-2.9.25.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.26.tar.gz&#34;&gt;libdmapsharing-2.9.26.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.27.tar.gz&#34;&gt;libdmapsharing-2.9.27.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.28.tar.gz&#34;&gt;libdmapsharing-2.9.28.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.29.tar.gz&#34;&gt;libdmapsharing-2.9.29.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.30.tar.gz&#34;&gt;libdmapsharing-2.9.30.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.31.tar.gz&#34;&gt;libdmapsharing-2.9.31.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.32.tar.gz&#34;&gt;libdmapsharing-2.9.32.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.33.tar.gz&#34;&gt;libdmapsharing-2.9.33.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.34.tar.gz&#34;&gt;libdmapsharing-2.9.34.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.35.tar.gz&#34;&gt;libdmapsharing-2.9.35.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.36.tar.gz&#34;&gt;libdmapsharing-2.9.36.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.37.tar.gz&#34;&gt;libdmapsharing-2.9.37.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.38.tar.gz&#34;&gt;libdmapsharing-2.9.38.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.39.tar.gz&#34;&gt;libdmapsharing-2.9.39.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.40.tar.gz&#34;&gt;libdmapsharing-2.9.40.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.41.tar.gz&#34;&gt;libdmapsharing-2.9.41.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.42.tar.gz&#34;&gt;libdmapsharing-2.9.42.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.0.tar.gz&#34;&gt;libdmapsharing-3.9.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.1.tar.gz&#34;&gt;libdmapsharing-3.9.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.2.tar.gz&#34;&gt;libdmapsharing-3.9.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.3.tar.gz&#34;&gt;libdmapsharing-3.9.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.4.tar.gz&#34;&gt;libdmapsharing-3.9.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.5.tar.gz&#34;&gt;libdmapsharing-3.9.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.6.tar.gz&#34;&gt;libdmapsharing-3.9.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.7.tar.gz&#34;&gt;libdmapsharing-3.9.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.8.tar.gz&#34;&gt;libdmapsharing-3.9.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.9.tar.gz&#34;&gt;libdmapsharing-3.9.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.10.tar.gz&#34;&gt;libdmapsharing-3.9.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.11.tar.gz&#34;&gt;libdmapsharing-3.9.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.12.tar.gz&#34;&gt;libdmapsharing-3.9.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.13.tar.gz&#34;&gt;libdmapsharing-3.9.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The libdmapsharing project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone git://git.gnome.org/libdmapsharing&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>libgphoto2-2.1.1-openbsd</title>
      <link>https://www.flyn.org/patches/libgphoto2-2.1.1-openbsd/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/libgphoto2-2.1.1-openbsd/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;libgphoto2-2.1.1-openbsd.patch.gz&#34;&gt;libgphoto2-2.1.1-openbsd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for libgphoto that allows it to run on OpenBSD.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>libnice-0.1.13-vpn</title>
      <link>https://www.flyn.org/patches/libnice-0.1.13-vpn/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/libnice-0.1.13-vpn/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;libnice-0.1.13-vpn.patch.gz&#34;&gt;libnice-0.1.13-vpn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A kludge which allows the use of libnice on
an OpenVPN client.
See libnice task &lt;a href=&#34;https://phabricator.freedesktop.org/T7583&#34;&gt;#7583&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>libss</title>
      <link>https://www.flyn.org/abandoned/libss/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/libss/</guid>
      <description>&lt;p&gt;Libss is a cross-platform library for controlling screensavers.  It allows
one to temporarily disable a screensaver.  This is useful for fullscreen,
visual applications that take little input.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>libtlssep</title>
      <link>https://www.flyn.org/projects/libtlssep/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/libtlssep/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Libtlssep (pronounced lib·te̅·el·sep) aims to provide an improved TLS API while also
protecting private keys using privilege separation.
Libtlssep&#39;s architecture includes a helper process called
tlssep-decorator
which handles all TLS operations and thus is able to isolate
private keys from applications.
An application first creates a network socket to a server (or client),
and then it passes this socket to tlssep-decorator.
All subsequent communication with the server
passes through tlssep-decorator.&lt;/p&gt;
&lt;p&gt;Please refer to libtlssep&#39;s &lt;a href=&#34;doc/&#34;&gt;API documentation&lt;/a&gt; for details about how to use the library.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;libtlssep-0.1.0.tar.gz&#34;&gt;libtlssep-0.1.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libtlssep-0.1.1.tar.gz&#34;&gt;libtlssep-0.1.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libtlssep-0.1.2.tar.gz&#34;&gt;libtlssep-0.1.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libtlssep-0.1.3.tar.gz&#34;&gt;libtlssep-0.1.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libtlssep-0.1.4.tar.gz&#34;&gt;libtlssep-0.1.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libtlssep-0.1.5.tar.gz&#34;&gt;libtlssep-0.1.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lighttpd-1.4.36-tlssep.patch&#34;&gt;lighttpd-1.4.36-tlssep.patch&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;wget-tlssep.patch&#34;&gt;wget-tlssep.patch&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The libtlssep project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/libtlssep&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>Linux kernel development</title>
      <link>https://www.flyn.org/notes/linux-kernel/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/linux-kernel/</guid>
      <description>&lt;p&gt;Building a Linux kernel module on Red Hat-derived distributions requires the &lt;code&gt;kernel-devel&lt;/code&gt; package.
Place the following in &lt;code&gt;hello.c&lt;/code&gt;:&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-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#include &amp;lt;linux/module.h&amp;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;c1&#34;&gt;#include &amp;lt;linux/kernel.h&amp;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;ne&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;init_module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;o&#34;&gt;/*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NOTE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;See&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kern_levels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;level&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;constants&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;printk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KERN_INFO&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello, world!&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&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;
&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;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cleanup_module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;printk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KERN_INFO&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Goodbye, world!&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&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;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#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;n&#34;&gt;MODULE_LICENSE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;GPL&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Place the following in &lt;code&gt;Makefile&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;obj-m += hello.o
&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;all:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
&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;clean:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Build the module using &lt;code&gt;make&lt;/code&gt;.
Load the module using &lt;code&gt;insmod hello.ko&lt;/code&gt;, and remove it using &lt;code&gt;rmmod hello&lt;/code&gt;; upon completing either, you should see a message recorded by the
computer&amp;rsquo;s logging system.&lt;/p&gt;
&lt;h2 id=&#34;receiving-parameters-at-module-load-time&#34;&gt;Receiving parameters at module load time&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;module_param&lt;/code&gt; and &lt;code&gt;MODULE_PARM_DESC&lt;/code&gt; macros
aid in declaring and documenting kernel-module parameters, respectively.
The &lt;code&gt;module_param&lt;/code&gt; macro takes as arguments a parameter name,
parameter type, and a series of permission bits which, if non-zero, apply to
a sysfs entry that the module might later create.
Each use of &lt;code&gt;module_param&lt;/code&gt; should correspond
with a global variable which shares the name of the parameter.&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;static char *option = &amp;#34;default value&amp;#34;;
&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;module_param(option, charp, 0000);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODULE_PARM_DESC(option, &amp;#34;An example character string option&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The sample option above could be set using the command &lt;code&gt;insmod hello.ko option=foo&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;reproducing-the-kernel-source-used-to-build-the-kernel-for-a-red-hat-derived-distribution&#34;&gt;Reproducing the kernel source used to build the kernel for a Red Hat-derived distribution&lt;/h2&gt;
&lt;p&gt;These steps require the &lt;code&gt;dnf-utils&lt;/code&gt; and &lt;code&gt;rpm-build&lt;/code&gt; packages,
along with the compiler and other tools needed to build the Linux kernel.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;yumdownloader --source kernel&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rpm -Uvh kernel...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rpmbuild -bp ~/rpmbuild/SPECS/kernel.spec&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This will result in a copy of the kernel source tree at &lt;code&gt;~/rpmbuild/BUILD/kernel...&lt;/code&gt;.
One way to build the kernel is to modify this source tree, produce a patch,
place the patch in &lt;code&gt;~/rpmbuild/SOURCES&lt;/code&gt;, modify &lt;code&gt;~/rpmbuild/SPECS/kernel.spec&lt;/code&gt; to make use of the patch,
and rebuild the kernel using &lt;code&gt;rpmbuild -ba ~/rpmbuild/SPECS/kernel.spec&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Make a vanilla copy of the kernel source: &lt;code&gt;cp -a ~/rpmbuild/BUILD/kernel.../linux.../ ~/rpmbuild/BUILD/kernel.../linux...-vanilla/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;pr_notice(&amp;quot;Hello, world!\n&amp;quot;);&lt;/code&gt; to &lt;code&gt;~/rpmbuild/BUILD/kernel.../linux.../init/main.c&lt;/code&gt; immediately after the kernel prints &lt;code&gt;&amp;quot;Kernel command line: ...&amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set your current directory to &lt;code&gt;~/rpmbuild/BUILD/kernel.../&lt;/code&gt; and create a patch by running &lt;code&gt;diff -u --recursive linux...-vanilla/ linux.../ &amp;gt;~/rpmbuild/SOURCES/kernel-hello.patch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add the patch to the kernel&amp;rsquo;s RPM specification by adding &lt;code&gt;Patch2: kernel-hello.patch&lt;/code&gt; to &lt;code&gt;~/rpmbuild/SPECS/kernel.spec&lt;/code&gt; after the definition of &lt;code&gt;Patch1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the specification to apply your patch by adding &lt;code&gt;ApplyOptionalPatch kernel-hello.patch&lt;/code&gt; after the application of &lt;code&gt;patch-%{patchversion}-redhat.patch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;rpmbuild -ba ~/rpmbuild/SPECS/kernel.spec&lt;/code&gt; to build the result. This will take a long time, and it will use a lot of disk space.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Finally run &lt;code&gt;rpm -ivh ~/rpmbuild/RPMS/x86_64/kernel-*&lt;/code&gt; to install your new kernel,
and reboot the computer. After booting, you should find that &lt;code&gt;dmesg&lt;/code&gt; includes &lt;code&gt;Hello, world!&lt;/code&gt; in its output.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>linux-xen-passive-oprofile</title>
      <link>https://www.flyn.org/patches/linux-xen-passive-oprofile/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/linux-xen-passive-oprofile/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;linux-2.6.38-xen-passive-oprofile.patch.gz&#34;&gt;linux-2.6.38-xen-passive-oprofile&lt;/a&gt;
&lt;a href=&#34;linux-2.6.39.rc5.git5-xen-passive-oprofile.patch.gz&#34;&gt;linux-2.6.39.rc5.git5-xen-passive-oprofile&lt;/a&gt;
&lt;a href=&#34;linux-3.0-xen-passive-oprofile.patch.gz&#34;&gt;linux-3.0-xen-passive-oprofile&lt;/a&gt;
&lt;a href=&#34;linux-3.2-xen-passive-oprofile.patch.gz&#34;&gt;linux-3.2-xen-passive-oprofile&lt;/a&gt;
&lt;a href=&#34;linux-3.5.3-xen-passive-oprofile.patch.gz&#34;&gt;linux-3.5.3-xen-passive-oprofile&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for the Linux kernel that enables passive profiling of unprivileged Xen domains.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Logging strategies</title>
      <link>https://www.flyn.org/notes/logging/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/logging/</guid>
      <description>&lt;h2 id=&#34;configure-a-client-to-forward-logs-to-a-server-using-rsyslogtls&#34;&gt;Configure a client to forward logs to a server using rsyslog/TLS&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Install rsyslog using &lt;code&gt;yum install rsyslog rsyslog-gnutls&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If you have not already done so, generate a self-signed CA certificate and private key. See the notes on &lt;a href=&#34;../certificates/&#34;&gt;certificates&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Generate a CA-signed certificate and private key for the log server and each client. See the notes on &lt;a href=&#34;../certificates/&#34;&gt;certificates&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;On the log server and each client, place the CA certificate at &lt;code&gt;/etc/pki/ca-trust/source/anchor/&lt;/code&gt;, and run &lt;code&gt;update-ca-trust&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install each host&amp;rsquo;s certificate and private key at &lt;code&gt;/etc/pki/rsyslog/&lt;/code&gt;. Ensure that you use &lt;code&gt;chmod&lt;/code&gt; to remove the read permissions from the private key.&lt;/li&gt;
&lt;li&gt;On the server, ensure a large disk exists at &lt;code&gt;/mnt/sda1&lt;/code&gt; and place the following in &lt;code&gt;/etc/rsyslog.conf&lt;/code&gt;, replacing &lt;code&gt;example.com&lt;/code&gt; and &lt;code&gt;logserver.example.com&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ModLoad&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;imuxsock&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;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ModLoad&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;imtcp&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;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DefaultNetstreamDriver&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gtls&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;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DefaultNetstreamDriverCAFile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pki&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ca&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;trust&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;anchors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pem&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;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DefaultNetstreamDriverCertFile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pki&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rsyslog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logserver&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pem&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;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DefaultNetstreamDriverKeyFile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pki&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rsyslog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logserver&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&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;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InputTCPServerStreamDriverAuthMode&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x509&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&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;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InputTCPServerStreamDriverPermittedPeer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&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;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InputTCPServerStreamDriverMode&lt;/span&gt; &lt;span class=&#34;mi&#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;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InputTCPServerRun&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6514&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;o&#34;&gt;*.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;authpriv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;none&lt;/span&gt;                &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;messages&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;n&#34;&gt;authpriv&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;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;secure&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;n&#34;&gt;mail&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;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maillog&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;n&#34;&gt;cron&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;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cron&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;n&#34;&gt;local7&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;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;On each client, place the following in &lt;code&gt;/etc/rsyslog.conf&lt;/code&gt;, replacing &lt;code&gt;example.com&lt;/code&gt;, &lt;code&gt;logserver.example.com&lt;/code&gt;, and &lt;code&gt;logclient.example.com&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ModLoad imuxsock
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ModLoad imjournal
&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;$DefaultNetstreamDriver gtls
&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;$DefaultNetstreamDriverCAFile /etc/pki/ca-trust/source/anchors/example.com.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$DefaultNetstreamDriverCertFile /etc/pki/rsyslog/logclient.example.com.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$DefaultNetstreamDriverKeyFile /etc/pki/rsyslog/logclient.example.com.key
&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;$ActionSendStreamDriverAuthMode x509/name
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ActionSendStreamDriverPermittedPeer logserver.example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ActionSendStreamDriverMode 1
&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;*.* @@(o)logserver.example.com:6514;RSYSLOG_SyslogProtocol23Format
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;8&#34;&gt;
&lt;li&gt;On each host, run &lt;code&gt;systemctl enable rsyslog&lt;/code&gt; and &lt;code&gt;systemctl restart rsyslog&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Permit rsyslog traffic through the server&amp;rsquo;s firewall:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Place the following in &lt;code&gt;/etc/firewalld/services/syslog.xml&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;service&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;short&amp;gt;Syslog&amp;lt;/short&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;description&amp;gt;Remote syslog&amp;lt;/description&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;port protocol=&amp;#34;tcp&amp;#34; port=&amp;#34;6514&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/service&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;firewall-cmd --permanent --add-service rsyslog&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;10&#34;&gt;
&lt;li&gt;You can troubleshoot rsyslog by running it manually: &lt;code&gt;rsyslogd -nd&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configure-a-client-to-forward-logs-to-a-server-using-syslog-ngtls&#34;&gt;Configure a client to forward logs to a server using syslog-ng/TLS&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;The EPEL repository provides the syslog-ng package for CentOS or RHEL:
&lt;code&gt;rpm -Uvh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Remove rsyslog using &lt;code&gt;yum remove rsyslog&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install syslog-ng using &lt;code&gt;yum install syslog-ng&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If you have not already done so, generate a self-signed CA certificate and private key. See the notes on &lt;a href=&#34;../certificates/&#34;&gt;certificates&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Generate a CA-signed certificate and private key for the log server and each client. See the notes on &lt;a href=&#34;../certificates/&#34;&gt;certificates&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;On the log server and each client, place the CA certificate at &lt;code&gt;/etc/pki/ca-trust/source/anchors/&lt;/code&gt;, and run &lt;code&gt;update-ca-trust&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Calculate the hash of the CA certificate&amp;rsquo;s common name with &lt;code&gt;openssl x509 -noout -hash -in example.com.pem&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Within &lt;code&gt;/etc/pki/ca-trust/source/anchors/&lt;/code&gt;, create a symbolic link from &lt;code&gt;hash&lt;/code&gt;.0 to &lt;code&gt;example.com.pem&lt;/code&gt;, where &lt;code&gt;hash&lt;/code&gt; is the output from the previous step.&lt;/li&gt;
&lt;li&gt;Install each host&amp;rsquo;s certificate and private key at &lt;code&gt;/etc/pki/syslog-ng/&lt;/code&gt;. Ensure that you use &lt;code&gt;chmod&lt;/code&gt; to remove the read permissions from the private key.&lt;/li&gt;
&lt;li&gt;On the server, place the following in &lt;code&gt;/etc/syslog-ng/syslog-ng.conf&lt;/code&gt;, replacing &lt;code&gt;example.com&lt;/code&gt; and &lt;code&gt;logserver.example.com&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.5&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;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;scl.conf&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;flush_lines&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;time_reopen&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;log_fifo_size&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;chain_hostnames&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;off&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;use_dns&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;use_fqdn&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;create_dirs&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;keep_hostname&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;internal&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s_net&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;syslog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6514&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;transport&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tls&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;tls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ca&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/pki/ca-trust/source/anchors&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/pki/rsyslog/logserver.example.com.pem&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/pki/rsyslog/logserver.example.com.key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;p&#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;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_cons&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/dev/console&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_mesg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/messages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_auth&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/secure&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_mail&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/maillog&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;flush_lines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_spol&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/spooler&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_boot&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/boot.log&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_cron&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/cron&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_kern&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/kern&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_mlal&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;usertty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_kernel&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_default&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emerg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&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;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mail&lt;/span&gt;&lt;span class=&#34;p&#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;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;authpriv&lt;/span&gt;&lt;span class=&#34;p&#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;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_auth&lt;/span&gt;       &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;authpriv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_mail&lt;/span&gt;       &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_emergency&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emerg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_news&lt;/span&gt;       &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uucp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&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;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;news&lt;/span&gt;&lt;span class=&#34;p&#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;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;crit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emerg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_boot&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_cron&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_kern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_mesg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_emergency&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_mlal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_news&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_spol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_boot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_boot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/syslog-ng/conf.d/*.conf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;11&#34;&gt;
&lt;li&gt;On each client, place the following in &lt;code&gt;/etc/syslog-ng/syslog-ng.conf&lt;/code&gt;, replacing &lt;code&gt;example.com&lt;/code&gt;, &lt;code&gt;logserver.example.com&lt;/code&gt;, and &lt;code&gt;logclient.example.com&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.5&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;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;scl.conf&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;flush_lines&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;time_reopen&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;log_fifo_size&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;chain_hostnames&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;off&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;use_dns&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;use_fqdn&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;create_dirs&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;keep_hostname&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;internal&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_cons&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/dev/console&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_mesg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/messages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_auth&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/secure&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_mail&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/maillog&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;flush_lines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_spol&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/spooler&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_boot&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/boot.log&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_cron&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/cron&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_kern&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/kern&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_mlal&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;usertty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;syslog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;logserver.example.com&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6514&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;transport&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tls&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;tls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ca&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/pki/ca-trust/source/anchors&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/pki/syslog-ng/logclient.example.com.cert&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/pki/syslog-ng/logclient.example.com.key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;p&#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;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_kernel&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_default&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emerg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&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;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mail&lt;/span&gt;&lt;span class=&#34;p&#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;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;authpriv&lt;/span&gt;&lt;span class=&#34;p&#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;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_auth&lt;/span&gt;       &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;authpriv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_mail&lt;/span&gt;       &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_emergency&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emerg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_news&lt;/span&gt;       &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uucp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&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;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;news&lt;/span&gt;&lt;span class=&#34;p&#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;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;crit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emerg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_boot&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_cron&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_kern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_mesg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_emergency&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_mlal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_news&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_spol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_boot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_boot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/syslog-ng/conf.d/*.conf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;12&#34;&gt;
&lt;li&gt;On each host, run &lt;code&gt;systemctl enable syslog-ng&lt;/code&gt; and &lt;code&gt;systemctl restart syslog-ng&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Permit syslog-ng traffic through the server&amp;rsquo;s firewall:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Place the following in &lt;code&gt;/etc/firewalld/services/syslog.xml&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;service&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;short&amp;gt;Syslog&amp;lt;/short&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;description&amp;gt;Remote syslog&amp;lt;/description&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;port protocol=&amp;#34;tcp&amp;#34; port=&amp;#34;6514&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/service&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;firewall-cmd --permanent --add-service syslog&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configure-a-windows-client-to-forward-logs-to-a-server-using-nxlogtls&#34;&gt;Configure a Windows client to forward logs to a server using Nxlog/TLS&lt;/h1&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Install Nxlog community edition on the Windows client.&lt;/li&gt;
&lt;li&gt;Install the host&amp;rsquo;s TLS key material at &lt;code&gt;C:\Program Files (x86)\nxlog\cert&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Configure Nxlog by writing to &lt;code&gt;C:\Program Files (x86)\nxlog\conf\nxlog.conf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;define ROOT C:\Program Files (x86)\nxlog
&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;ModuleDir %ROOT%\modules
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CacheDir  %ROOT%\data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Pidfile   %ROOT%\data\nxlog.pid
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SpoolDir  %ROOT%\data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LogFile   %ROOT%\data\nxlog.log
&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;&amp;lt;Extension syslog&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Module xm_syslog
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/Extension&amp;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;&amp;lt;Input in&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Module im_msvistalog
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/Input&amp;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;&amp;lt;Output out&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Module om_ssl
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Host logserver.example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Port 6514
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	CAFile %ROOT%\cert\ca.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	CertFile %ROOT%\cert\logserver.example.com.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	CertKeyFile %ROOT%\cert\logserver.example.com.key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	AllowUntrusted FALSE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Exec to_syslog_ietf();
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	OutputType Syslog_TLS
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/Output&amp;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;&amp;lt;Route 1&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Path in =&amp;gt; out
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/Route&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Restart the Nxlog service.&lt;/li&gt;
&lt;li&gt;Test connectivity by generating a log message on the Windows hosts using: &lt;code&gt;eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO MYEVENTSOURCE /D &amp;quot;Hello, world!&amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configure-an-openwrt-server-along-with-clients-which-forward-logs-to-the-server-using-syslog-ngtls&#34;&gt;Configure an OpenWrt server along with clients which forward logs to the server using syslog-ng/TLS&lt;/h1&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Stop the default logging service using &lt;code&gt;/etc/init.d/log stop&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Remove the default logging service using &lt;code&gt;opkg remove logd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Remove the existing log with &lt;code&gt;rm /var/log/messages&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install syslog-ng using &lt;code&gt;opkg install syslog-ng&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On the server, place the following in &lt;code&gt;/etc/syslog-ng.conf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.8&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;n&#34;&gt;options&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;chain_hostnames&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;create_dirs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;flush_lines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;keep_hostname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;log_fifo_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;log_msg_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;stats_freq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;flush_lines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;use_fqdn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;internal&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;unix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dgram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/dev/log&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;net&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;syslog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6514&lt;/span&gt;&lt;span class=&#34;p&#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;nb&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connections&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;transport&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tls&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;tls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ca&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/syslog-ng.d/anchors&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/syslog-ng.d/logserver.example.com.cert&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/syslog-ng.d/logserver.example.com.key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;p&#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;p&#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;n&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/proc/kmsg&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;program_override&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;kernel&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;messages&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/mnt/sda1/var/log/messages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;On each client, place the following in &lt;code&gt;/etc/syslog-ng.conf&lt;/code&gt; (replace &lt;code&gt;SERVER&lt;/code&gt; and &lt;code&gt;SERVER.EXAMPLE.COM&lt;/code&gt;, and consider removing the local file destination if the host&amp;rsquo;s local disk is small):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.8&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;n&#34;&gt;options&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;chain_hostnames&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;create_dirs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;flush_lines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;keep_hostname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;log_fifo_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;log_msg_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;stats_freq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;flush_lines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;use_fqdn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;internal&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;unix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dgram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/dev/log&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/proc/kmsg&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;program_override&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;kernel&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;messages&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/mnt/sda1/var/log/messages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SERVER&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;syslog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;SERVER.EXAMPLE.COM&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6514&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;transport&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tls&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;tls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ca&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/syslog-ng.d/anchors&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/syslog-ng.d/logclient.example.com.cert&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/syslog-ng.d/logclient.example.com.key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;p&#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;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SERVER&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;install-and-configure-graylog2-on-centos-7&#34;&gt;Install and configure Graylog2 on CentOS 7&lt;/h2&gt;
&lt;p&gt;















&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;arch.png&#34; alt=&#34;Graylog2 architecture&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id=&#34;install-and-configure-dependencies&#34;&gt;Install and configure dependencies&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Install the EPEL yum repository: &lt;code&gt;rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install: &lt;code&gt;yum install java-1.8.0-openjdk-headless mongodb-server pwgen policycoreutils-python&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Start MongoDB: &lt;code&gt;systemctl restart mongod&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ensure MongoDB starts on reboot: &lt;code&gt;systemctl enable mongod&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Properly label MongoDB&amp;rsquo;s port: &lt;code&gt;semanage port -a -t mongod_port_t -p tcp 27017&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;install-and-configure-elasticsearch&#34;&gt;Install and configure Elasticsearch&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Install the Elasticsearch yum repository. Add the following to &lt;code&gt;/etc/yum.repos.d/elasticsearch.repo&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[elasticsearch-1.7]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name=Elasticsearch repository for 1.7.x packages
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;baseurl=http://packages.elastic.co/elasticsearch/1.7/centos
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;enabled=1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Install Elasticsearch: &lt;code&gt;yum install elasticsearch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ensure the following settings exist in &lt;code&gt;/etc/elasticsearch/elasticsearch.yml&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cluster.name: graylog-production
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;network.host: 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Start Elasticsearch: &lt;code&gt;systemctl restart elasticsearch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ensure Elasticsearch starts on reboot: &lt;code&gt;systemctl enable elasticsearch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Test Elasticsearch with: &lt;code&gt;curl -XGET http://localhost:9200/_cluster/health?pretty=true&lt;/code&gt;; you should see a status of green.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;install-and-configure-graylog2&#34;&gt;Install and configure Graylog2&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Install the Graylog2 yum repository: &lt;code&gt;rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-1.3-repository-el7_latest.rpm&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install Graylog2: &lt;code&gt;yum install graylog-server&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ensure the following settings exist in &lt;code&gt;/etc/graylog/server/server.conf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;password_secret = [random secret generated using: pwgen -N 1 -s 96]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root_password_sha2 = [hashed password generated using: echo -n password | sha256sum]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;elasticsearch_shards = 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;elasticsearch_replicas = 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;elasticsearch_cluster_name = graylog-production
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;elasticsearch_http_enabled = false
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Also consider adding the following:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root_timezone = America/New_York
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;allow_highlighting = true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Start Graylog2: &lt;code&gt;systemctl restart graylog-server&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ensure Graylog2 starts on reboot: &lt;code&gt;systemctl enable graylog-server&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;configure-syslog-ng-to-forward-log-entries-to-graylog2&#34;&gt;Configure syslog-ng to forward log entries to Graylog2&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Add the following to &lt;code&gt;/etc/syslog-ng/syslog-ng.conf&lt;/code&gt;, repeating variations of the &lt;code&gt;log&lt;/code&gt; statement as necessary:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;destination d_graylog { syslog(&amp;#34;127.0.0.1&amp;#34; port(1514)); };
&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;log { source(s_sys); source(s_net); filter(f_default); destination(d_mesg); destination(d_graylog); };
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Properly label the alternate syslog port: &lt;code&gt;semanage port -a -t syslogd_port_t -p tcp 1514&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;install-and-configure-graylog2s-web-frontend&#34;&gt;Install and configure Graylog2&amp;rsquo;s web frontend&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Install Graylog2: &lt;code&gt;yum install graylog-web&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ensure the following settings exist in &lt;code&gt;/etc/graylog/web/web.conf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;graylog2_server.uris=&amp;#34;http://127.0.0.1:12900&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;application.secret=&amp;#34;&amp;lt;i&amp;gt;random secret generated using: pwgen -N 1 -s 96&amp;lt;/i&amp;gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Start Graylog2&amp;rsquo;s web frontend: &lt;code&gt;systemctl restart graylog-web&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ensure Graylog2&amp;rsquo;s web frontend starts on reboot: &lt;code&gt;systemctl enable graylog-web&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Once Graylog2&amp;rsquo;s web frontend is running, connect to it (http://localhost:9000/) and configure a log input which matches the syslog-ng configuration. Set the input&amp;rsquo;s &lt;em&gt;Bind address&lt;/em&gt; to &lt;code&gt;127.0.0.1&lt;/code&gt;, its &lt;em&gt;Port&lt;/em&gt; to &lt;code&gt;1514&lt;/code&gt;, and also set the its &lt;em&gt;Title&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Permit Graylog web frontend traffic through the server&amp;rsquo;s firewall:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Place the following in &lt;code&gt;/etc/firewalld/services/graylog-web.xml&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;service&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;short&amp;gt;Graylog&amp;lt;/short&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;description&amp;gt;Graylog&amp;#39;s web frontend&amp;lt;/description&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;port protocol=&amp;#34;tcp&amp;#34; port=&amp;#34;9000&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/service&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;firewall-cmd --permanent --add-service graylog-web&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;install-and-configure-graylog2s-netflow-plugin&#34;&gt;Install and configure Graylog2&amp;rsquo;s NetFlow plugin&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Download the plugin from &lt;a href=&#34;https://github.com/Graylog2/graylog-plugin-netflow/releases&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/Graylog2/graylog-plugin-netflow/releases&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Install the plugin at &lt;code&gt;/usr/share/graylog-server/plugin&lt;/code&gt;, ensuring its permissions match the existing plugins.&lt;/li&gt;
&lt;li&gt;Reload Graylog and add a NetFlow input using the web frontend.&lt;/li&gt;
&lt;li&gt;Permit NetFlow traffic through the server&amp;rsquo;s firewall:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Place the following in &lt;code&gt;/etc/firewalld/services/netflow.xml&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;service&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;short&amp;gt;NetFlow&amp;lt;/short&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;description&amp;gt;Remote NetFlow&amp;lt;/description&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;port protocol=&amp;#34;udp&amp;#34; port=&amp;#34;2055&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/service&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;firewall-cmd --permanent --add-service netflow&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>luks-tools</title>
      <link>https://www.flyn.org/abandoned/luks-tools/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/luks-tools/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;The luks-tools package contains various utilities for working with
LUKS-protected filesystems.  HAL uses these utilities to automatically
mount encrypted volumes when they are attached to a system, provided
the user can produce the correct passphrase.  These utilities are
written as separate programs to allow MAC systems like SELinux to have
fine-grained control over them.&lt;/p&gt;


















&lt;figure  id=&#34;figure-screenshot&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;luks-tools.png&#34; alt=&#34;Screenshot&#34; loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      Screenshot
    &lt;/figcaption&gt;&lt;/figure&gt;

&lt;dl&gt;
&lt;dt&gt;luks-format&lt;/dt&gt;
&lt;dd&gt;
A utility that formats a filesystem to contain a LUKS encryption header.
&lt;/dd&gt;
&lt;dt&gt;luks-is-encrypted&lt;/dt&gt;
&lt;dd&gt;
A tool that can determine if a filesystem contains a LUKS encryption header.
&lt;/dd&gt;
&lt;dt&gt;luks-setup&lt;/dt&gt;
&lt;dd&gt;
A utility that sets up the dm-crypt device map for a partition.
&lt;/dd&gt;
&lt;dt&gt;gnome-luks-format&lt;/dt&gt;
&lt;dd&gt;
A GNOME front-end for luks-format.
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;details&#34;&gt;Details&lt;/h1&gt;
&lt;p&gt;The following is an example of how to create an encrypted filesystem
and prepare it for mounting:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;luks-format -v -t ext3 -c aes -l 256 -n MyLuksVolume /dev/sda4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The luks-format step may take quite some time because it overwrites the
partition with random data before it does anything else.&lt;/p&gt;
&lt;p&gt;Once luks-format has been run, a device mapper entry should exist
in /dev/mapper.  This device may be mounted as any other appropriate
block device:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount /dev/mapper/luks_crypto_f20d9b37-ebe6-42c9-9665-CV035a81f0f3 /mnt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A volume that has already been initialized with a LUKS header and
formatted may be mounted as follows:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;luks-setup /dev/sda4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount /dev/mapper/luks_crypto_f20d9b37-ebe6-42c9-9665-cb035a81f0f3 /mnt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;




	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>magic_numbers</title>
      <link>https://www.flyn.org/abandoned/magic_numbers/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/magic_numbers/</guid>
      <description>&lt;p&gt;A collection of magic numbers for Ian Darwin&#39;s file implementation.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>Maven</title>
      <link>https://www.flyn.org/notes/maven/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/maven/</guid>
      <description>&lt;h2 id=&#34;building-a-jar-with-dependencies&#34;&gt;Building a JAR with dependencies&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;build&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;lt;plugins&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;lt;plugin&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;lt;artifactId&amp;gt;maven-dependency-plugin&amp;lt;/artifactId&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;lt;executions&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;lt;execution&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;					&amp;lt;id&amp;gt;copy-dependencies&amp;lt;/id&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;					&amp;lt;phase&amp;gt;prepare-package&amp;lt;/phase&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;					&amp;lt;goals&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;						&amp;lt;goal&amp;gt;copy-dependencies&amp;lt;/goal&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;					&amp;lt;/goals&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;					&amp;lt;configuration&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;						&amp;lt;outputDirectory&amp;gt;${project.build.directory}/lib&amp;lt;/outputDirectory&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;						&amp;lt;overWriteReleases&amp;gt;false&amp;lt;/overWriteReleases&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;						&amp;lt;overWriteSnapshots&amp;gt;false&amp;lt;/overWriteSnapshots&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;						&amp;lt;overWriteIfNewer&amp;gt;true&amp;lt;/overWriteIfNewer&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;					&amp;lt;/configuration&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;lt;/execution&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;lt;/executions&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;lt;/plugin&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;lt;plugin&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;lt;artifactId&amp;gt;maven-jar-plugin&amp;lt;/artifactId&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;lt;configuration&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;lt;archive&amp;gt;       
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;					&amp;lt;manifest&amp;gt;              
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;						&amp;lt;addClasspath&amp;gt;true&amp;lt;/addClasspath&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;						&amp;lt;classpathPrefix&amp;gt;lib/&amp;lt;/classpathPrefix&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;						&amp;lt;mainClass&amp;gt;full.path.to.MainClass&amp;lt;/mainClass&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;					&amp;lt;/manifest&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;lt;/archive&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;lt;/configuration&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;lt;/plugin&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;lt;/plugins&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/build&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Mimic</title>
      <link>https://www.flyn.org/notes/mimic/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/mimic/</guid>
      <description>&lt;p&gt;The Mimic Xen host is capable of efficiently running a number of virtual machines.
If you are reinstalling over an existing host, then you will first need to backup&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the Xen domains&amp;rsquo; disk images,&lt;/li&gt;
&lt;li&gt;the Xen domains&amp;rsquo; configurations,&lt;/li&gt;
&lt;li&gt;data on partitions that are passed through to Xen domains (e.g., using &lt;code&gt;rsync --inplace --delete -aHA * /BACKUP-DISK-MOUNT-POINT&lt;/code&gt;),&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/NetworkManager/system-connections/*&lt;/code&gt;, and&lt;/li&gt;
&lt;li&gt;a public SSH key.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To ensure a GPT partition label, even on disks less than 2 GB,
provide the &lt;code&gt;inst.gpt&lt;/code&gt; argument to the Fedora installer&amp;rsquo;s boot process.
Set aside partitions for any virtual machines that will require direct disk access;
I used the following scheme:&lt;/p&gt;
&lt;table class=&#34;booktabs&#34; summary=&#34;Disk partitions&#34;&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Partition&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Mount point&lt;/th&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;BIOS boot&lt;/td&gt;&lt;td&gt;n/a&lt;/td&gt;&lt;td&gt;n/a&lt;/td&gt;&lt;td&gt;1,024 KiB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Standard/ext4&lt;/td&gt;&lt;td&gt;/boot&lt;/td&gt;&lt;td&gt;boot&lt;/td&gt;&lt;td&gt;1,024 MiB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;btrfs (single subvolume)&lt;/td&gt;&lt;td&gt;/&lt;/td&gt;&lt;td&gt;root&lt;/td&gt;&lt;td&gt;200 GiB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Standard/ext4&lt;/td&gt;&lt;td&gt;n/a&lt;/td&gt;&lt;td&gt;herald&lt;/td&gt;&lt;td&gt;1.25 TiB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Standard/ext4&lt;/td&gt;&lt;td&gt;n/a&lt;/td&gt;&lt;td&gt;golem&lt;/td&gt;&lt;td&gt;Remaining space&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Perform a minimal Fedora install on the computer.
After finishing the install, complete the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Review the host&amp;rsquo;s BIOS/firmware menu to ensure its virtualization instructions are active.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;nomodeset&lt;/code&gt; to the kernel&amp;rsquo;s command-line arguments if necessary (&lt;code&gt;/etc/default/grub&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The combination of Xen and AVX2 instructions presents a vulnerability when using some CPUs under certain circumstances. RHEL 10 and compatible distributions require the AVX2 instructions. Add &lt;code&gt;GRUB_CMDLINE_XEN_DEFAULT=&amp;quot;spec-ctrl=gds-mit=no&amp;quot;&lt;/code&gt; to &lt;code&gt;/etc/default/grub&lt;/code&gt; to turn off the related mitigation and enable AVX2 instructions.&lt;/li&gt;
&lt;li&gt;During the Fedora install:
&lt;ol&gt;
&lt;li&gt;Set the hostname to &lt;code&gt;mimic.flyn.org&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Activate the &lt;code&gt;root&lt;/code&gt; account, and set its password.&lt;/li&gt;
&lt;li&gt;Select the minimal install package set.&lt;/li&gt;
&lt;li&gt;Set the timezone.&lt;/li&gt;
&lt;li&gt;Layout the disk as described above, taking care to ensure the partition numbers are assigned as indicated.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Remove the firewalld-filesystem, firewalld, and systemd-resolved packages.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;dnf update&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install Xen, syslog-ng, net-tools, and the network bridge utilities: &lt;code&gt;dnf install xen grub2-efi-modules syslog-ng net-tools bridge-utils&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install a public SSH key, deactivate password-based SSH logins, and run &lt;code&gt;systemctl restart sshd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Configure syslog-ng (replace the host names that use &lt;code&gt;example.com&lt;/code&gt;):
&lt;ol&gt;
&lt;li&gt;Generate an internal-CA-signed certificate for &lt;code&gt;mimic.example.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Place the CA certificate at &lt;code&gt;/etc/pki/ca-trust/source/anchors/ca.cert&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Identify the CA certificate&amp;rsquo;s hash by running &lt;code&gt;openssl x509 -hash -noout -in ca.cert&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Link &lt;code&gt;ca.cert&lt;/code&gt; to &lt;em&gt;hash&lt;/em&gt;&lt;code&gt;.0&lt;/code&gt;, where &lt;em&gt;hash&lt;/em&gt; is the value from the previous step.&lt;/li&gt;
&lt;li&gt;Place the host&amp;rsquo;s certificate and private key in &lt;code&gt;/etc/pki/syslog-ng/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Restrict the permissions on the private key.&lt;/li&gt;
&lt;li&gt;Write the following to &lt;code&gt;/etc/syslog-ng/syslog-ng.conf&lt;/code&gt; (replace the host names that use &lt;code&gt;example.com&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.35&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;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;scl.conf&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;flush_lines&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;time_reopen&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;log_fifo_size&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;chain_hostnames&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;off&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;use_dns&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;use_fqdn&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;create_dirs&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;keep_hostname&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;internal&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_cons&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/dev/console&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_mesg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/messages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_auth&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/secure&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_mail&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/maillog&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;flush_lines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_spol&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/spooler&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_boot&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/boot.log&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_cron&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/cron&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_kern&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/kern&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_mlal&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;usertty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;destination&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;syslog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;logserver.example.com&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6514&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;transport&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tls&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;tls&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;ca&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/pki/ca-trust/source/anchors&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/pki/syslog-ng/mimic.flyn.org.cert&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/pki/syslog-ng/mimic.flyn.org.key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;p&#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;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_kernel&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_default&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emerg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;authpriv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_auth&lt;/span&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;authpriv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_mail&lt;/span&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_emergency&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emerg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_news&lt;/span&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uucp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;news&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;crit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emerg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_boot&lt;/span&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f_cron&lt;/span&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;facility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_kern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_mesg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_emergency&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_mlal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_news&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_spol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_boot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_boot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f_cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d_cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#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;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/syslog-ng/conf.d/*.conf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;10&#34;&gt;
&lt;li&gt;Configure a Xen network bridge device for each network interface on Mimic; for example &lt;code&gt;/etc/NetworkManager/system-connections/xenbr0.nmconnection&lt;/code&gt; (replace &lt;em&gt;xenbr0&lt;/em&gt; and &lt;em&gt;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&lt;/em&gt;, and set &lt;em&gt;method&lt;/em&gt; to &lt;em&gt;auto&lt;/em&gt; if you would like to assign an IP address):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[connection]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;id=xenbr0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uuid=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;type=bridge
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;interface-name=xenbr0
&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;[bridge]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stp=false
&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;[ipv4]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;method=auto
&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;[ipv6]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dhcp-iaid=mac
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;method=auto
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ensure this file is owned by root and bears the permissions 0600.&lt;/p&gt;
&lt;ol start=&#34;11&#34;&gt;
&lt;li&gt;Configure each network interface on Mimic; for example &lt;code&gt;/etc/NetworkManager/system-connections/bridge-slave-eno0.nmconnection&lt;/code&gt; (replace &lt;em&gt;eno0&lt;/em&gt;, &lt;em&gt;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&lt;/em&gt;, and &lt;em&gt;xenbr0&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[connection]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;id=bridge-slave-eno0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uuid=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;type=ethernet
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;interface-name=eno0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;master=xenbr0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;slave-type=bridge
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ensure this file is owned by root and bears the permissions 0600.&lt;/p&gt;
&lt;ol start=&#34;12&#34;&gt;
&lt;li&gt;Place Xen guest configurations in &lt;code&gt;/etc/xen&lt;/code&gt;, create links to &lt;code&gt;/etc/xen/auto&lt;/code&gt;,
and place guest disk images in &lt;code&gt;/var/lib/xen/images&lt;/code&gt;. Here is an example guest configuration which boots an OpenWrt installation (replace &lt;em&gt;guest&lt;/em&gt; and &lt;em&gt;xx:xx:xx:xx:xx:xx&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;guest&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;n&#34;&gt;memory&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;1024&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;n&#34;&gt;vcpus&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;mi&#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;n&#34;&gt;builder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hvm&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;n&#34;&gt;vif&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;s2&#34;&gt;&amp;#34;model=e1000,script=vif-bridge,bridge=xenbr1,mac=xx:xx:xx:xx:xx:xx&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;disk&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;tap2:tapdisk:aio:/var/lib/xen/images/guest-openwrt-15.05.1-x86-64-combined-ext4.img,xvda,w&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;s2&#34;&gt;&amp;#34;tap2:qcow:/var/lib/xen/images/guest-data.qcow,xvdb,w&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;p&#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;n&#34;&gt;serial&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pty&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;13&#34;&gt;
&lt;li&gt;Allow &lt;code&gt;xenstored&lt;/code&gt; to run under SELinux&amp;rsquo;s policy by running &lt;code&gt;setsebool -P domain_can_mmap_files=true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ensure the Xen hypervisor is the default boot selection:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grub2-set-default &amp;#34;Fedora, with Xen hypervisor&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grub2-mkconfig -o /boot/grub2/grub.cfg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;15&#34;&gt;
&lt;li&gt;Optionally restore the backed up data from the previous install.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>mkCDrec-0.4.9-flyn</title>
      <link>https://www.flyn.org/patches/mkCDrec-0.4.9-flyn/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/mkCDrec-0.4.9-flyn/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;mkCDrec-0.4.9-flyn.patch.gz&#34;&gt;mkCDrec-0.4.9-flyn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Development of Gratien D&#39;haese&#39;s &lt;a href=&#34;http://mkcdrec.sourceforge.net&#34;&gt;Make
CD-ROM Recovery utility&lt;/a&gt;
is now performed using &lt;a href=&#34;http://www.sourceforge.net&#34;&gt;SourceForge&lt;/a&gt;.
I have been given write access to the project&#39;s CVS tree, so you can
get my contributions there.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>mkCDrec2</title>
      <link>https://www.flyn.org/abandoned/mkCDrec2/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/mkCDrec2/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;This is the second version of Gratien D&amp;rsquo;haese&amp;rsquo;s
&lt;a href=&#34;http://mkcdrec.sf.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;mkCDrec&lt;/a&gt;.  This version adds support
for OpenBSD, doing so in such a way that should make adding support
of other platforms easier.&lt;/p&gt;
&lt;p&gt;I recommend using livecd-tools on Fedora Linux and no longer maintain
the mkCDrec2 package.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>movespam-arbitrary-headers</title>
      <link>https://www.flyn.org/patches/movespam-arbitrary-headers/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/movespam-arbitrary-headers/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;movespam-arbitrary-headers.patch&#34;&gt;movespam-arbitrary-headers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for the movespam Roundcube plugin which modifies the plugin to permit moving spam messages based on an arbitrary IMF header.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>NAT</title>
      <link>https://www.flyn.org/notes/nat/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/nat/</guid>
      <description>&lt;h2 id=&#34;basic-configuration-using-iptables&#34;&gt;Basic configuration using iptables&lt;/h2&gt;
&lt;p&gt;Perform the following steps to provide NAT routing on a Linux computer using &lt;code&gt;iptables&lt;/code&gt; (replace &lt;code&gt;wls3&lt;/code&gt; with your Internet-facing interface and &lt;code&gt;em1&lt;/code&gt; with your private-network-facing interface):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sysctl net.ipv4.ip_forward=1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ip addr add W.X.Y.Z/N dev em1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;iptables -t nat -A POSTROUTING -o wls3 -j MASQUERADE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;iptables -A FORWARD -i wls3 -o em1 -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ip tables -A FORWARD -i em1 -o wls3 -j ACCEPT&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;basic-configuration-using-iptables-1&#34;&gt;Basic configuration using iptables&lt;/h2&gt;
&lt;p&gt;If you run firewalld, then you can substitute the following command:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;firewall-cmd --add-masquerade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configuration-using-a-wifi-internet-connection-and-firewalld-without-networkmanager&#34;&gt;Configuration using a WiFi Internet connection and firewalld without NetworkManager&lt;/h2&gt;
&lt;p&gt;On a smaller computer or device, you might not have NetworkManager installed.
These instructions demonstrate how to configure a WiFi adapter to use WPA,
and then how to use this device to perform NAT when firewalld is installed.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;wpa_passphrase ESSID &amp;gt;&amp;gt; /etc/wpa_supplicant/wpa_supplicant.conf&lt;/code&gt; (replace &lt;code&gt;ESSID&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/sysconfig/wpa_supplicant&lt;/code&gt; (replace &lt;code&gt;EXTNETIF&lt;/code&gt; with your external network interface):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;INTERFACES=&amp;#34;-iEXTNETIF&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/sysconfig/network-scripts/ifcfg-ESSID&lt;/code&gt; (replace &lt;code&gt;ESSID&lt;/code&gt; and &lt;code&gt;EXTMACADDRESS&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HWADDR=EXTMACADDRESS
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODE=managed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ESSID=EECSDS3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;BOOTPROTO=dhcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DEFROUTE=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ZONE=external
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ONBOOT=yes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/sysconfig/network-scripts/ifcfg-INTNETIF&lt;/code&gt; (replace &lt;code&gt;INTNETIF&lt;/code&gt; and &lt;code&gt;INTMACADDRESS&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HWADDR=INTMACADDRESS
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;BOOTPROTO=none
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IPADDR=10.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NETMASK=255.255.255.0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ZONE=internal
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ONBOOT=yes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;The use of the &lt;code&gt;ZONE&lt;/code&gt; keyword above causes &lt;code&gt;ifup&lt;/code&gt; to run following commands when bringing up the interfaces:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;firewall-cmd --zone=external --change-interface=EXTNETIF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;firewall-cmd --zone=internal --change-interface=INTNETIF&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>nautilus_scripts</title>
      <link>https://www.flyn.org/abandoned/nautilus_scripts/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/nautilus_scripts/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;This package contains several nautilus scripts to do various fun things
with your files.&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;burn_cd_cue&lt;/dt&gt;
&lt;dd&gt;Burns a cdrdao CUE file to disc.&lt;/dd&gt;
&lt;dt&gt;burn_dir&lt;/dt&gt;
&lt;dd&gt;Burns directory to disc.&lt;/dd&gt;
&lt;dt&gt;mail_file&lt;/dt&gt;
&lt;dd&gt;Send files by email.  May transform files if necessary.  For example, images a shrunk to 640x480 scale.&lt;/dd&gt;
&lt;dt&gt;make_svcd_image&lt;/dt&gt;
&lt;dd&gt;Creates an SVCD image from video files.&lt;/dd&gt;
&lt;dt&gt;make_vcd_image&lt;/dt&gt;
&lt;dd&gt;Creates an VCD image from video files.&lt;/dd&gt;
&lt;dt&gt;new_extension&lt;/dt&gt;
&lt;dd&gt;Prompts for a filename extension and renames files using that extension.&lt;/dd&gt;
&lt;dt&gt;print&lt;/dt&gt;
&lt;dd&gt;Prints files.&lt;/dd&gt;
&lt;dt&gt;push_file&lt;/dt&gt;
&lt;dd&gt;Uses scp to copy files to another host.&lt;/dd&gt;
&lt;dt&gt;rotate_image&lt;/dt&gt;
&lt;dd&gt;Rotates images clockwise or counter-clockwise.&lt;/dd&gt;
&lt;dt&gt;search_n_replace&lt;/dt&gt;
&lt;dd&gt;Searches files for a regular expression and replaces it with a string.&lt;/dd&gt;
&lt;dt&gt;set_read_only&lt;/dt&gt;
&lt;dd&gt;Sets files read-only.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;nasty-details&#34;&gt;Nasty Details&lt;/h1&gt;
&lt;p&gt;Install the scripts in ~/.gnome2/nautilus-scripts and let &#39;er rip.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>nautilus_thumbnailers</title>
      <link>https://www.flyn.org/abandoned/nautilus_thumbnailers/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/nautilus_thumbnailers/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;This package provides scripts to generate thumbnails for several file
formats commonly used in the GNOME environment.  When using these scripts
with the nautilus file manager, for example, icons for PDF files will
present the same appearance as the document itself.  This has long been
the case with images, but this package extends this technique to formats
like PDF, PostScript and GIMP XCF.&lt;/p&gt;
&lt;h1 id=&#34;nasty-details&#34;&gt;Nasty Details&lt;/h1&gt;
&lt;p&gt;This package provides a gconf schema and several scripts.  The schema
tells GNOME filemanagers like nautilus of the scripts&#39; existance.
The scripts do the dirty work of creating 128x128 pixel PNG thumbnails
for documents at the file manager&#39;s request.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>ncpfs-2.2.0.19-env</title>
      <link>https://www.flyn.org/patches/ncpfs-2.2.0.19-env/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/ncpfs-2.2.0.19-env/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;ncpfs-2.2.0.19-env.patch.gz&#34;&gt;ncpfs-2.2.0.19-env&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for ncpfs 2.2.0.19.10 that adds the ability to read passwords
from the environment variable PASSWD to ncpmount.  This makes ncpmount
play nicely with pam_mount.&lt;/p&gt;
&lt;p&gt;Because environment variables are not a safe way to transmit passwords,
pam_mount now uses a new technique.  This patch is no longer required.
All that is required is ncpfs &amp;gt;= 2.2.0.19.10.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>netatalk-2.0.4-crosscompile</title>
      <link>https://www.flyn.org/patches/netatalk-2.0.4-crosscompile/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/netatalk-2.0.4-crosscompile/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;netatalk-2.0.4-crosscompile.patch.gz&#34;&gt;netatalk-2.0.4-crosscompile&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Fixes Netatalk&#39;s configure script to support building in a cross-compile
environment.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Network monitoring</title>
      <link>https://www.flyn.org/notes/nagios/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/nagios/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;code&gt;yum install nagios&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Start the &lt;code&gt;httpd&lt;/code&gt; and &lt;code&gt;nagios&lt;/code&gt; services.&lt;/li&gt;
&lt;li&gt;Set the Nagios administrator password using &lt;code&gt;htpasswd -c /etc/nagios/passwd nagiosadmin&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Define the network to be monitored by editing Nagios&#39; configuration files. You can place your configuration in &lt;code&gt;/etc/nagios/conf.g/*foo.cfg*&lt;/code&gt;. For example, the following will define a &lt;em&gt;host&lt;/em&gt;
named smtp.example.com and also check that &lt;em&gt;smtp.example.com&lt;/em&gt;
is providing an SMTP service:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;define host {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	use			linux-server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	host_name		smtp.example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	address			10.1.10.1
&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&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;define service {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	use			generic-service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	host_name		smtp.example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	service_description	SMTP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	check_command		check_smtp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	notifications_enabled	0
&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Load http://localhost/nagios in a browser. (Note securing Nagios so that it can be accessed away from localhost is beyond the scope of these notes.)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Fedora packages plugins such as &lt;code&gt;check_smtp&lt;/code&gt; separately from the
core Nagios package installed above. The following packages provide common plugins:&lt;/p&gt;
&lt;table summary=&#34;Common Nagios plugin descriptions&#34;&gt;
&lt;tr&gt;&lt;th&gt;Plugin package&lt;/th&gt;&lt;th&gt;Use&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;nagios-plugins-ping&lt;/td&gt;&lt;td&gt;Check the availability of a host using ICMP&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;nagios-plugins-tcp&lt;/td&gt;&lt;td&gt;Check the availability of common Internet services including FTP and IMAP&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;nagios-plugins-http&lt;/td&gt;&lt;td&gt;Check the availability of a HTTP/HTTPS service&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;nagios-plugins-smtp&lt;/td&gt;&lt;td&gt;Check the availability of a SMTP service&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;nagios-plugins-dns&lt;/td&gt;&lt;td&gt;Check the availability of a DNS service&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</description>
    </item>
    
    <item>
      <title>Network monitoring</title>
      <link>https://www.flyn.org/notes/netmon/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/netmon/</guid>
      <description>&lt;h2 id=&#34;monitoring-a-network-from-the-command-line&#34;&gt;Monitoring a network from the command line&lt;/h2&gt;
&lt;p&gt;It is often convenient to monitor a network from the command line. For
example, the use of command-line tools allows you to log into an OpenWrt
router remotely in order to diagnose a network performance problem. Here
I describe how to use some common open-source tools.&lt;/p&gt;
&lt;h2 id=&#34;bmon&#34;&gt;Bmon&lt;/h2&gt;
&lt;p&gt;Bmon monitors the use of a network interface in aggregate; it provides
real-time information about the utilization of the network interfaces
in a computer. After running bmon, you will likely want to press &lt;code&gt;d&lt;/code&gt;
and &lt;code&gt;g&lt;/code&gt; to provide a detailed and graphical display, respectively. The
graphical display plots utilization over time.&lt;/p&gt;
&lt;h2 id=&#34;iftop&#34;&gt;Iftop&lt;/h2&gt;
&lt;p&gt;Iftop helps determine the degree to which individual connections are
using the network. For example, running &lt;code&gt;iftop -i eth0 -P&lt;/code&gt; will show
the connections making use of the interface &lt;code&gt;eth0&lt;/code&gt;. Each measurement
is displayed using two lines, which represent the two directions of
communication. Behind each line, iftop displays, using a highlight, a
bar which is proportional to the percentage the respective connection
represents of the total network utilization (the unit for each bar is
some degree of bits per second).&lt;/p&gt;
&lt;h2 id=&#34;throughput-tests&#34;&gt;Throughput tests&lt;/h2&gt;
&lt;p&gt;Services like &lt;a href=&#34;https://www.speedtest.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Speedtest.net&lt;/a&gt; allow you
to measure the throughput of your network connection, but are generally
designed for use with a web browser. The command-line tool
&lt;code&gt;speedtest-cli&lt;/code&gt; allows you to interact with Speedtest.net&amp;rsquo;s
measurement servers. For an even lighter-weight
solution, first obtain the list of Speedtest.net servers at
&lt;a href=&#34;http://www.speedtest.net/speedtest-servers.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.speedtest.net/speedtest-servers.php&lt;/a&gt;.
Next, choose a nearby server from the list and run &lt;code&gt;time wget http://sto-chic-01.sys.comcast.net/speedtest/random4000x4000.jpg -O /dev/null&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;netflow&#34;&gt;NetFlow&lt;/h2&gt;
&lt;p&gt;Installing softflowd on a device that has visibility of your network
allows that device to provide NetFlow data representing its observations
(see &lt;a href=&#34;https://www.flyn.org/notes/beholder/&#34;&gt;beholder&lt;/a&gt;).
Nfcapd can receive such a NetFlow stream and store it to disk (see &lt;a href=&#34;https://www.flyn.org/notes/golem&#34;&gt;golem&lt;/a&gt;).
The nfdump utility will print stored NetFlow data in human-readable form.
Here are some useful invocations of nfdump:&lt;/p&gt;
&lt;h3 id=&#34;print-first-five-flows-of-month&#34;&gt;Print first five flows of month&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;nfdump -R . -c 5 -t 2020/01&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;print-first-five-flows-of-date-range&#34;&gt;Print first five flows of date range&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;nfdump -R . -c 5 -t 2020/01/01-2020/01/07&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;print-first-five-flows-of-time-period&#34;&gt;Print first five flows of time period&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;nfdump -R . -c 5 -t 2020/01/01.12-2020/01/01.13&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;top-users-of-upload-bandwidth&#34;&gt;Top users of upload bandwidth&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;nfdump -R . -s srcip/bytes -L +10M &#39;src net 192.168.1.0/24&#39;&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;top-users-of-download-bandwidth&#34;&gt;Top users of download bandwidth&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;nfdump -R . -s dstip/bytes -L +10M &#39;dst net 192.168.1.0/24&#39;&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;biggest-download-sources-off-local-network&#34;&gt;Biggest download sources off local network&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;nfdump -R . -s srcip/bytes -L +10M &#39;not src net 192.168.1.0/24&#39;&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;ethtool&#34;&gt;Ethtool&lt;/h2&gt;
&lt;p&gt;Running &lt;code&gt;ethtool eth0&lt;/code&gt; will describe the interface &lt;code&gt;eth0&lt;/code&gt;, including
the connection speed of the interface.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>NTP</title>
      <link>https://www.flyn.org/notes/ntp/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/ntp/</guid>
      <description>&lt;p&gt;These instructions describe how to configure ntpd across the &lt;em&gt;10.0.0.0/24&lt;/em&gt; subnet so that one host, &lt;em&gt;NTP.EXAMPLE.COM&lt;/em&gt;, acts as the subnet&amp;rsquo;s NTP server.
We make use of ntpd instead of chrony.&lt;/p&gt;
&lt;p&gt;On each host:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;rpm -e chrony&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yum install ntp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Hosts other than &lt;em&gt;NTP.EXAMPLE.COM&lt;/em&gt; should only permit NTP connections from localhost. In these cases, merely replace the &lt;code&gt;server&lt;/code&gt; statements in &lt;code&gt;/etc/ntp.conf&lt;/code&gt; with one that references your NTP server, &lt;em&gt;NTP.EXAMPLE.COM&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Start the &lt;code&gt;ntp&lt;/code&gt;service.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On &lt;em&gt;NTP.EXAMPLE.COM&lt;/em&gt;, follow the steps above, except:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set &lt;code&gt;server&lt;/code&gt; to point to the upstream NTP host.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;restrict *10.0.0.0* mask *255.255.255.0* nomodify notrap&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;firewall-cmd --permanent --add-service=ntp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;firewall-cmd --permanent --add-service=ntp --permanent&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>openpam-20030502-openbsd</title>
      <link>https://www.flyn.org/patches/openpam-20030502-openbsd/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/openpam-20030502-openbsd/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;openpam-20030502-openbsd.patch.gz&#34;&gt;openpam-20030502-openbsd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for &lt;a href=&#34;http://openpam.sourceforge.net&#34;&gt;OpenPAM&lt;/a&gt;.  When applied,
OpenPAM should build on OpenBSD.  The patch also fixes a few bugs
in OpenPAM&#39;s su.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>openssh-2.9p2-quiet</title>
      <link>https://www.flyn.org/patches/openssh-2.9p2-quiet/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/openssh-2.9p2-quiet/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;openssh-2.9p2-quiet.patch.gz&#34;&gt;openssh-2.9p2-quiet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A trivial patch for &lt;a href=&#34;http://www.openssh.org&#34;&gt;openssh&lt;/a&gt;
which makes the -q quiet mode a little more quiet.
I wrote this because I was tired of cron emailing unnecessary error output from
ssh every time ssh
was run.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>OpenWrt-based DHCP/DNS server</title>
      <link>https://www.flyn.org/notes/dhcpdns/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/dhcpdns/</guid>
      <description>&lt;p&gt;This document describes how to build a simple DHCP/DNS server on top of OpenWrt.
We assume you already have a working OpenWrt installation and that you have
configured basic networking (&lt;code&gt;/etc/config/network&lt;/code&gt;)
and the host&amp;rsquo;s name (&lt;code&gt;/etc/config/system&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The following will configure &lt;code&gt;dnsmasq&lt;/code&gt; to provide DHCP (assigning .1–.100),
and DNS (e.g., assigning the hostname &lt;em&gt;server.example.com&lt;/em&gt; to the computer with MAC address &lt;em&gt;aa:bb:cc:dd:ee:ff&lt;/em&gt;).
The DNS service will also resolve the local host&amp;rsquo;s name, as set in &lt;code&gt;/etc/config/system&lt;/code&gt;.&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config dnsmasq
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option domainneeded &amp;#39;1&amp;#39;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option boguspriv &amp;#39;1&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option filterwin2k &amp;#39;0&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option localise_queries &amp;#39;1&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option rebind_protection &amp;#39;1&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option rebind_localhost &amp;#39;1&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option local &amp;#39;/example.com/&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option domain &amp;#39;example.com&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option expandhosts &amp;#39;1&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option nonegcache &amp;#39;0&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option authoritative &amp;#39;1&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option readethers &amp;#39;1&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option leasefile &amp;#39;/tmp/dhcp.leases&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option resolvfile &amp;#39;/tmp/resolv.conf.auto&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option server &amp;#39;192.168.1.1&amp;#39; # Upstream DNS.
&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;config dhcp &amp;#39;lan&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option interface &amp;#39;lan&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option start &amp;#39;1&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option limit &amp;#39;100&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option leasetime &amp;#39;12h&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option dhcpv6 &amp;#39;server&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ra &amp;#39;server&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	list dhcp_option &amp;#39;3,192.168.1.1&amp;#39; # Default gateway.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	list dhcp_option &amp;#39;121,192.168.0.0/16,192.168.1.1&amp;#39; # A static route.
&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;config dhcp &amp;#39;wan&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option interface &amp;#39;wan&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ignore &amp;#39;1&amp;#39;
&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;config odhcpd &amp;#39;odhcpd&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option maindhcp &amp;#39;0&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option leasefile &amp;#39;/tmp/hosts/odhcpd&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option leasetrigger &amp;#39;/usr/sbin/odhcpd-update&amp;#39;
&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;config host
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option name &amp;#39;server.example.com&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ip &amp;#39;192.168.1.101&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option mac &amp;#39;aa:bb:cc:dd:ee:ff&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>OpenWrt-based FTP server</title>
      <link>https://www.flyn.org/notes/ftp/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/ftp/</guid>
      <description>&lt;p&gt;This document describes how to build a simple FTP server on top of OpenWrt.
We assume you already have a working OpenWrt installation and that you have
configured basic networking (&lt;code&gt;/etc/config/network&lt;/code&gt;)
and the host&amp;rsquo;s name (&lt;code&gt;/etc/config/system&lt;/code&gt;).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install the following packages:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;zlib&lt;/li&gt;
&lt;li&gt;libopenssl&lt;/li&gt;
&lt;li&gt;vsftpd-tls&lt;/li&gt;
&lt;li&gt;openssh-keygen&lt;/li&gt;
&lt;li&gt;openssh-server&lt;/li&gt;
&lt;li&gt;openssl-util&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Remove the dropbear package&lt;/li&gt;
&lt;li&gt;Take care to &lt;em&gt;set the root password&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Create the directory &lt;code&gt;/home/ftp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add a new user to the system, setting his home directory to &lt;code&gt;/home/ftp&lt;/code&gt; and his shell to &lt;code&gt;/bin/false&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the new user&amp;rsquo;s password.&lt;/li&gt;
&lt;li&gt;Configure cleartext FTP: write the following to &lt;code&gt;/etc/vsftpd.conf&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;background=YES
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;listen=YES
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;anonymous_enable=YES
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;write_enable=NO
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;local_umask=022
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;check_shell=NO
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;local_root=/home/ftp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;session_support=NO
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;8&#34;&gt;
&lt;li&gt;Configure ciphertext SFTP: write the following to &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AuthorizedKeysFile	.ssh/authorized_keys
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UsePrivilegeSeparation	sandbox
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Subsystem		sftp internal-sftp
&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;Match User *
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	ChrootDirectory 	%h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	AllowTCPForwarding 	no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	X11Forwarding		no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	ForceCommand		internal-sftp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>openwrt-build</title>
      <link>https://www.flyn.org/projects/openwrt-build/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/openwrt-build/</guid>
      <description>&lt;p&gt;The openwrt-build script builds an OpenWrt disk image from a JSON-encoded
definition. See definitions/example.json for one such definition.&lt;/p&gt;
&lt;p&gt;Aside from example.json, you can provide openwrt-build with a diffconfig
definition and one or more directory structures which openwrt-build will
add to the disk image. For example,&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./openwrt-build -c example.json files/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;where files/ contains&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;etc/dropbear/authorized_keys
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;will produce an OpenWrt image to which the owner of the public key in
authorized_keys can connect using SSH.&lt;/p&gt;
&lt;p&gt;You can also specify a post-install script using the &amp;lsquo;-p&amp;rsquo; option. The
openwrt-build script will arrange for this script to run the first time
a VM boots the image.&lt;/p&gt;
&lt;p&gt;The default diffconfig causes openwrt-build to build an x86_64 image. You
can provide an alternative diffconfig using the &amp;lsquo;-d&amp;rsquo; option. See
diffconfig/example.&lt;/p&gt;
&lt;p&gt;The openwrt-build script also generates a file named vm-[NAME].cfg which
defines a Xen domain which will boot the generated disk image. For quick
tests, you might also want to run the disk image using QEMU; you can do
this by executing:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;qemu-system-x86_64 -hda [IMAGE.img] -net nic -net user -m 512 -localtime
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;




	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The openwrt-build project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/openwrt-build&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>osdd</title>
      <link>https://www.flyn.org/abandoned/osdd/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/osdd/</guid>
      <description>&lt;p&gt;Osdd polls one&#39;s mixer device and provides an on-screen display
when the mixer&#39;s volume levels change.  It requires XOSD, which is
available at &lt;a href=&#34;http://www.ignavus.net/software.html&#34;&gt;&lt;a href=&#34;http://www.ignavus.net/software.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ignavus.net/software.html&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This application has been superseded by &lt;a href=&#34;http://freshmeat.net/projects/osdsh/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;osdsh&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>Packets</title>
      <link>https://www.flyn.org/notes/packets/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/packets/</guid>
      <description>&lt;dl&gt;
&lt;dt&gt;Print a summary of the transmitting hosts present in the output from tcpdump:&lt;/dt&gt;
&lt;dd&gt;&lt;pre&gt;
tcpdump &gt;packet-summaries
[Ctrl-C]
cat packet-summaries | egrep ^.{16}IP | awk &#39;{ print $3 }&#39; | sed &#39;s/\(.*\)\..*/\1/g&#39; \
                     | sort | uniq -c | sort -n
&lt;/pre&gt;&lt;/dd&gt;
&lt;/dl&gt;
</description>
    </item>
    
    <item>
      <title>pam_ccreds-ccreds_chkpwd</title>
      <link>https://www.flyn.org/patches/pam_ccreds-ccreds_chkpwd/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/pam_ccreds-ccreds_chkpwd/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;pam_ccreds-ccreds_chkpwd-4.patch.gz&#34;&gt;pam_ccreds-ccreds_chkpwd-4.patch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for pam_ccreds that adds a setuid helper utility. This
allows portions of the PAM module to execute with higher privileges
than the calling application (e.g., xscreensaver).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>pam_keyring</title>
      <link>https://www.flyn.org/projects/pam_keyring/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/pam_keyring/</guid>
      <description>&lt;p&gt;A component of the GNOME Keyring now includes
functionality based on pam_keyring.  As a result,
pam_keyring is now no longer maintained.  See &lt;a href=&#34;https://gitlab.gnome.org/GNOME/gnome-keyring&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gitlab.gnome.org/GNOME/gnome-keyring&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring.ppc.rpm&#34;&gt;pam_keyring.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring.src.rpm&#34;&gt;pam_keyring.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring.tar.gz&#34;&gt;pam_keyring.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.1.tar.gz&#34;&gt;pam_keyring-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.2.tar.gz&#34;&gt;pam_keyring-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.2-0.fdr.1.ppc.rpm&#34;&gt;pam_keyring-0.0.2-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.2-0.fdr.1.src.rpm&#34;&gt;pam_keyring-0.0.2-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.3.tar.gz&#34;&gt;pam_keyring-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.3-0.fdr.1.ppc.rpm&#34;&gt;pam_keyring-0.0.3-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.3-0.fdr.1.src.rpm&#34;&gt;pam_keyring-0.0.3-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.4.tar.gz&#34;&gt;pam_keyring-0.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.4-1.ppc.rpm&#34;&gt;pam_keyring-0.0.4-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.4-1.src.rpm&#34;&gt;pam_keyring-0.0.4-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>pam_mount</title>
      <link>https://www.flyn.org/projects/pam_mount/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/pam_mount/</guid>
      <description>&lt;p&gt;The pam_mount module is now maintained by Jan Engelhardt and is available
at &lt;a href=&#34;http://pam-mount.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://pam-mount.sourceforge.net/&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;related-publications&#34;&gt;Related publications&lt;/h1&gt;









	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/tech-republic-03-linux-windows-admin/&#34; &gt;Administrator’s Guide to Linux in the Windows Enterprise&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jan 1, 2003
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/tech-republic-03-linux-windows-admin/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	


&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.0-1_powerpc.deb&#34;&gt;pam-mount_0.9.0-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.1-1_powerpc.deb&#34;&gt;pam-mount_0.9.1-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.2-1_powerpc.deb&#34;&gt;pam-mount_0.9.2-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.3-1_powerpc.deb&#34;&gt;pam-mount_0.9.3-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.4-1_powerpc.deb&#34;&gt;pam-mount_0.9.4-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.5-1_powerpc.deb&#34;&gt;pam-mount_0.9.5-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.6-1_powerpc.deb&#34;&gt;pam-mount_0.9.6-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount.i386.rpm&#34;&gt;pam_mount.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount.ppc.rpm&#34;&gt;pam_mount.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount.src.rpm&#34;&gt;pam_mount.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount.tar.gz&#34;&gt;pam_mount.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.2-flyn.tar.gz&#34;&gt;pam_mount-0.3.2-flyn.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.3.tar.gz&#34;&gt;pam_mount-0.3.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.4.tar.gz&#34;&gt;pam_mount-0.3.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.5.tar.gz&#34;&gt;pam_mount-0.3.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.6.tar.gz&#34;&gt;pam_mount-0.3.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.6-1.i386.rpm&#34;&gt;pam_mount-0.3.6-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.6-1.src.rpm&#34;&gt;pam_mount-0.3.6-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.7.tar.gz&#34;&gt;pam_mount-0.3.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.7-1.i386.rpm&#34;&gt;pam_mount-0.3.7-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.7-1.src.rpm&#34;&gt;pam_mount-0.3.7-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.8.tar.gz&#34;&gt;pam_mount-0.3.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.8-1.i386.rpm&#34;&gt;pam_mount-0.3.8-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.8-1.src.rpm&#34;&gt;pam_mount-0.3.8-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.9.tar.gz&#34;&gt;pam_mount-0.3.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.9-1.i386.rpm&#34;&gt;pam_mount-0.3.9-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.9-1.src.rpm&#34;&gt;pam_mount-0.3.9-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.0.tar.gz&#34;&gt;pam_mount-0.4.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.0-1.i386.rpm&#34;&gt;pam_mount-0.4.0-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.0-1.src.rpm&#34;&gt;pam_mount-0.4.0-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.1.tar.gz&#34;&gt;pam_mount-0.4.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.1-1.i386.rpm&#34;&gt;pam_mount-0.4.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.1-1.src.rpm&#34;&gt;pam_mount-0.4.1-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.2test1.tar.gz&#34;&gt;pam_mount-0.4.2test1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.2test1-1.i386.rpm&#34;&gt;pam_mount-0.4.2test1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.2test1-1.src.rpm&#34;&gt;pam_mount-0.4.2test1-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.0.tar.gz&#34;&gt;pam_mount-0.5.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.0-1.i386.rpm&#34;&gt;pam_mount-0.5.0-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.0-1.src.rpm&#34;&gt;pam_mount-0.5.0-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.1.tar.gz&#34;&gt;pam_mount-0.5.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.1-1.i386.rpm&#34;&gt;pam_mount-0.5.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.1-1.src.rpm&#34;&gt;pam_mount-0.5.1-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.2.tar.gz&#34;&gt;pam_mount-0.5.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.2-1.i386.rpm&#34;&gt;pam_mount-0.5.2-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.2-1.src.rpm&#34;&gt;pam_mount-0.5.2-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.3.tar.gz&#34;&gt;pam_mount-0.5.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.3-1.i386.rpm&#34;&gt;pam_mount-0.5.3-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.3-1.src.rpm&#34;&gt;pam_mount-0.5.3-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.4.tar.gz&#34;&gt;pam_mount-0.5.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.4-1.i386.rpm&#34;&gt;pam_mount-0.5.4-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.4-1.src.rpm&#34;&gt;pam_mount-0.5.4-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.5.tar.gz&#34;&gt;pam_mount-0.5.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.5-1.i386.rpm&#34;&gt;pam_mount-0.5.5-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.5-1.src.rpm&#34;&gt;pam_mount-0.5.5-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.6.tar.gz&#34;&gt;pam_mount-0.5.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.6-1.i386.rpm&#34;&gt;pam_mount-0.5.6-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.6-1.src.rpm&#34;&gt;pam_mount-0.5.6-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.7.tar.gz&#34;&gt;pam_mount-0.5.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.7-1.i386.rpm&#34;&gt;pam_mount-0.5.7-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.7-1.src.rpm&#34;&gt;pam_mount-0.5.7-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.8.tar.gz&#34;&gt;pam_mount-0.5.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.8-1.i386.rpm&#34;&gt;pam_mount-0.5.8-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.8-1.src.rpm&#34;&gt;pam_mount-0.5.8-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.9.tar.gz&#34;&gt;pam_mount-0.5.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.9-1.i386.rpm&#34;&gt;pam_mount-0.5.9-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.9-1.src.rpm&#34;&gt;pam_mount-0.5.9-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.11.tar.gz&#34;&gt;pam_mount-0.5.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.12.tar.gz&#34;&gt;pam_mount-0.5.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.13.tar.gz&#34;&gt;pam_mount-0.5.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.14.tar.gz&#34;&gt;pam_mount-0.5.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.15.tar.gz&#34;&gt;pam_mount-0.5.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.16.tar.gz&#34;&gt;pam_mount-0.5.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.0.tar.gz&#34;&gt;pam_mount-0.9.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.0-1.ppc.rpm&#34;&gt;pam_mount-0.9.0-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.0-1.src.rpm&#34;&gt;pam_mount-0.9.0-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.1.tar.gz&#34;&gt;pam_mount-0.9.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.1-1.ppc.rpm&#34;&gt;pam_mount-0.9.1-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.1-1.src.rpm&#34;&gt;pam_mount-0.9.1-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.2.tar.gz&#34;&gt;pam_mount-0.9.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.2-1.ppc.rpm&#34;&gt;pam_mount-0.9.2-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.2-1.src.rpm&#34;&gt;pam_mount-0.9.2-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.3.tar.gz&#34;&gt;pam_mount-0.9.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.3-1.ppc.rpm&#34;&gt;pam_mount-0.9.3-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.3-1.src.rpm&#34;&gt;pam_mount-0.9.3-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.4.tar.gz&#34;&gt;pam_mount-0.9.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.4-1.ppc.rpm&#34;&gt;pam_mount-0.9.4-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.4-1.src.rpm&#34;&gt;pam_mount-0.9.4-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.5.tar.gz&#34;&gt;pam_mount-0.9.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.5-1.ppc.rpm&#34;&gt;pam_mount-0.9.5-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.5-1.src.rpm&#34;&gt;pam_mount-0.9.5-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.6.tar.gz&#34;&gt;pam_mount-0.9.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.6-1.ppc.rpm&#34;&gt;pam_mount-0.9.6-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.6-1.src.rpm&#34;&gt;pam_mount-0.9.6-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.7.tar.gz&#34;&gt;pam_mount-0.9.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.7-1.ppc.rpm&#34;&gt;pam_mount-0.9.7-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.7-1.src.rpm&#34;&gt;pam_mount-0.9.7-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.8.tar.gz&#34;&gt;pam_mount-0.9.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.8-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.8-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.8-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.8-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.9.tar.gz&#34;&gt;pam_mount-0.9.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.9-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.9-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.9-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.9-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.10.tar.gz&#34;&gt;pam_mount-0.9.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.11.tar.gz&#34;&gt;pam_mount-0.9.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.11-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.11-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.11-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.11-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.12.tar.gz&#34;&gt;pam_mount-0.9.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.12-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.12-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.12-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.12-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.12-0.fdr.2.ppc.rpm&#34;&gt;pam_mount-0.9.12-0.fdr.2.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.12-0.fdr.2.src.rpm&#34;&gt;pam_mount-0.9.12-0.fdr.2.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.13.tar.gz&#34;&gt;pam_mount-0.9.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.13-0.fdr.1.i386.rpm&#34;&gt;pam_mount-0.9.13-0.fdr.1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.13-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.13-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.13-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.13-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.14.tar.gz&#34;&gt;pam_mount-0.9.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.14-0.fdr.1.i386.rpm&#34;&gt;pam_mount-0.9.14-0.fdr.1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.14-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.14-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.14-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.14-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.15.tar.gz&#34;&gt;pam_mount-0.9.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.15-0.fdr.1.i386.rpm&#34;&gt;pam_mount-0.9.15-0.fdr.1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.15-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.15-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.15-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.15-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.16.tar.gz&#34;&gt;pam_mount-0.9.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.16-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.16-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.16-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.16-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.17.tar.gz&#34;&gt;pam_mount-0.9.17.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.17-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.17-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.17-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.17-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.18.tar.gz&#34;&gt;pam_mount-0.9.18.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.18-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.18-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.18-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.18-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.19.tar.gz&#34;&gt;pam_mount-0.9.19.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.19-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.19-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.19-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.19-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.20.tar.gz&#34;&gt;pam_mount-0.9.20.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.20-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.20-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.20-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.20-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.21.tar.gz&#34;&gt;pam_mount-0.9.21.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.21-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.21-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.21-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.21-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.22.tar.gz&#34;&gt;pam_mount-0.9.22.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.22-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.22-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.22-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.22-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.23.tar.gz&#34;&gt;pam_mount-0.9.23.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.23-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.23-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.23-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.23-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.24.tar.gz&#34;&gt;pam_mount-0.9.24.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.24-1.ppc.rpm&#34;&gt;pam_mount-0.9.24-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.24-1.src.rpm&#34;&gt;pam_mount-0.9.24-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.25.tar.gz&#34;&gt;pam_mount-0.9.25.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.25-1.ppc.rpm&#34;&gt;pam_mount-0.9.25-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.25-1.src.rpm&#34;&gt;pam_mount-0.9.25-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-debuginfo-0.9.13-0.fdr.1.i386.rpm&#34;&gt;pam_mount-debuginfo-0.9.13-0.fdr.1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>pam-0.75-devfsd</title>
      <link>https://www.flyn.org/patches/pam-0.75-devfsd/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/pam-0.75-devfsd/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;pam-0.75-devfsd.patch.gz&#34;&gt;pam-0.75-devfsd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for devfsd that allows it to work nicely with pam_console.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>pedansee</title>
      <link>https://www.flyn.org/projects/pedansee/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/pedansee/</guid>
      <description>&lt;p&gt;Pedansee checks C source files for compliance with a particular programming style.
The style is currently defined by the pedansee source code
in the form of functions which walk each source file&amp;rsquo;s syntax tree.
You can modify some aspects of this style through the use of regular
expressions.&lt;/p&gt;
&lt;p&gt;For example, given the following silly program stored at silly.c:&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-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#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;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;glib.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#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;kt&#34;&gt;float&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.14&lt;/span&gt;&lt;span class=&#34;p&#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;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;p&#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;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;nf&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;g_print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Hello, world!&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;you could run pedansee in the following way, producing the indicated effect:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ pedansee silly.c -- -I/usr/include/glib-2.0/ -I/usr/lib64/glib-2.0/include/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;silly.c:4:7 id pi does not start with silly_
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;silly.c:6:13 static id silly does not start with &amp;#39;_&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;silly.c:6:13 function silly name not on column one
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;silly.c:10:5 function main name not on column one
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pedansee prefers that silly.c instead contain:&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-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#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;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;glib.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#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;kt&#34;&gt;float&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;silly_pi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.14&lt;/span&gt;&lt;span class=&#34;p&#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;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&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;nf&#34;&gt;_foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;p&#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;kt&#34;&gt;int&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;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;nf&#34;&gt;_foo&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;g_print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Hello, world!&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pedansee supports configuration files which allow you to configure
some aspects of its style. For example, the following pedansee.conf
defines the form static, constant, and exported symbols must follow:&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-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;regex&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;const&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;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Za&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;z_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#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;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Za&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;z_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#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;n&#34;&gt;exported&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;o&#34;&gt;^&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Za&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;z_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;




	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;pedansee-0.0.1.tar.gz&#34;&gt;pedansee-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pedansee-0.0.2.tar.gz&#34;&gt;pedansee-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pedansee-0.0.3.tar.gz&#34;&gt;pedansee-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pedansee-0.0.4.tar.gz&#34;&gt;pedansee-0.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	



	&lt;p&gt;
		The pedansee project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/pedansee&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>plip-slow</title>
      <link>https://www.flyn.org/patches/plip-slow/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/plip-slow/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;plip-slow.patch.gz&#34;&gt;plip-slow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for the PLIP driver contained in the 2.4.3 version of the Linux
&lt;a href=&#34;http://www.kernel.org/&#34;&gt;kernel&lt;/a&gt;.  This patch allows one
to use PLIP with computers which have an interrupt-less parallel
port and a slow processor.  The stock PLIP driver constantly times
out on my 80486-based laptop.  This patch adds the ability to specify
two key values, trigger_wait and nibble_wait, when loading the PLIP
driver.&lt;/p&gt;
&lt;p&gt;Using this patch and adding the following entry to the modules.conf file
on the computers on either side of my PLIP link makes the connection
work nicely:&lt;/p&gt;
&lt;pre&gt;
 ## Because my laptop is so slow.
options plip                    trigger_wait=50000 nibble_wait=300000
&lt;/pre&gt;
</description>
    </item>
    
    <item>
      <title>print_filter</title>
      <link>https://www.flyn.org/abandoned/print_filter/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/print_filter/</guid>
      <description>&lt;p&gt;Print_filter is a simple filter which
handles several file formats.  Print_filter
is designed to be as simple as possible, allowing one to easily modify
or expand the source code.&lt;/p&gt;
&lt;p&gt;Print_filter was originally written out of frustration with
Red Hat&lt;/a&gt;&#39;s print filter, which was
difficult to modify without using its GUI tools.  Print_filter is small,
simple, and easy to work with on a console system.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>Profiling programs</title>
      <link>https://www.flyn.org/notes/profile/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/profile/</guid>
      <description>&lt;h2 id=&#34;profiling-using-operf&#34;&gt;Profiling using operf&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Ensure you have access to your kernel&amp;rsquo;s debug symbols. On Fedora, you can install these symbols with &lt;code&gt;sudo debuginfo-install kernel&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;sudo operf --system-wide --vmlinux /usr/lib/debug/lib/modules/KERNEL-VERSION/vmlinux&lt;/code&gt;, execute your experiments, and press &lt;code&gt;Ctrl-C&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;opreport -l&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;profiling-using-gprof&#34;&gt;Profiling using gprof&lt;/h2&gt;
&lt;p&gt;Run a program &lt;em&gt;and its children&lt;/em&gt; while collecting profiling data:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Compile with GCC&amp;rsquo;s &lt;code&gt;-pg&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;Run with &lt;code&gt;GMON_OUT_PREFIX=prefix ./a.out&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;gprof a.out prefix.PID&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>Pylog</title>
      <link>https://www.flyn.org/projects/Pylog/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/Pylog/</guid>
      <description>&lt;p&gt;Pylog is a &lt;a href=&#34;http://www.python.org&#34;&gt;Python&lt;/a&gt; module which
gives one access to a Prolog interpreter.  Pylog simply executes a
Prolog interpreter process, communicates with it using pipes, and
provides a simple API for communicating with it.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;http://gocept.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;gocept&lt;/a&gt; company has modified Pypvm
to work with newer versions of SWI Prolog.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;Pylog.tar.gz&#34;&gt;Pylog.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;Pylog-0.75.tar.gz&#34;&gt;Pylog-0.75.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>pypvm</title>
      <link>https://www.flyn.org/projects/pypvm/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/pypvm/</guid>
      <description>&lt;p&gt;Pypvm is a &lt;a href=&#34;http://www.python.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Python&lt;/a&gt; module that
allows interaction with the &lt;a href=&#34;http://www.epm.ornl.gov/pvm/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Parallel Virtual Machine&lt;/a&gt;
(PVM) package.  PVM
allows a collection of computers connected by a network to
serve as a single parallel computer.&lt;/p&gt;
&lt;p&gt;Pypvm is intended to be an educational and
prototyping tool.&lt;/p&gt;
&lt;p&gt;Greg Baker has taken over the maintenance of pypvm.
One can now find the up to date pypvm source code at
&lt;a href=&#34;http://pypvm.sourceforge.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://pypvm.sourceforge.net&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;pypvm-0.8.7.tar.gz&#34;&gt;pypvm-0.8.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>qtutils</title>
      <link>https://www.flyn.org/abandoned/qtutils/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/qtutils/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Qtutils currently contains the following
applications:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;qtsg&lt;/dt&gt;
&lt;dd&gt;
Generates a QuickTime video from image files and a soundtrack.
&lt;/dd&gt;
&lt;dt&gt;qtconv&lt;/dt&gt;
&lt;dd&gt;
Changes the codec used by a QuickTime video.
&lt;/dd&gt;
&lt;dt&gt;qtsplit&lt;/dt&gt;
&lt;dd&gt;
Splits a QuickTime file into smaller files.
&lt;/dd&gt;
&lt;dt&gt;mpegize&lt;/dt&gt;
&lt;dd&gt;
A script which generates an MPEG stream from QuickTime input.
&lt;/dd&gt;
&lt;dt&gt;vcdize&lt;/dt&gt;
&lt;dd&gt;
A script which generates a Video CD disc image from QuickTime input.
&lt;/dd&gt;
&lt;dt&gt;screenqt&lt;/dt&gt;
&lt;dd&gt;
A script which generates a QuickTime file from a series of screenshots.
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;details&#34;&gt;Details&lt;/h1&gt;
&lt;dl&gt;
&lt;dt&gt;ima4&lt;/dt&gt;
&lt;dd&gt;
The ima4 compressor reduces 16 bit audio data to 1/4 size, with very good quality. This is the preferred
codec for low bandwidth audio.
&lt;/dd&gt;
&lt;dt&gt;raw&lt;/dt&gt;
&lt;dd&gt;
Unsigned 8 bit encoding.
&lt;/dd&gt;
&lt;dt&gt;twos&lt;/dt&gt;
&lt;dd&gt;
Twos is the preferred encoding for audio. It stores 8, 16, and 24 bit
audio, interleaved for multiple channels. The 8 bit mode is signed. The
16 and 24 bit modes are big endian signed.
&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
&lt;dt&gt;raw&lt;/dt&gt;
&lt;dd&gt;
RGB packed frames.
&lt;/dd&gt;
&lt;dt&gt;jpeg&lt;/dt&gt;
&lt;dd&gt;
JPEG is preferred for low bandwidth video. This format writes a seperate
JPEG photo for every frame.
&lt;/dd&gt;
&lt;dt&gt;mjpa&lt;/dt&gt;
&lt;dd&gt;
MJPA stores each frame as two JPEGs, interlaced.  The real advantage is
that it can split compression and decompression across 2 processors,
doubling the frame rate.
&lt;/dd&gt;
&lt;dt&gt;png&lt;/dt&gt;
&lt;dd&gt;
This consists of one PNG image for every frame. Like ram this codec
supports 32 bit depths.
&lt;/dd&gt;
&lt;dt&gt;yuv2&lt;/dt&gt;
&lt;dd&gt;
The human eye percieves brightness much more accurately than colors. YUV2
downsamples the color components by 50% for a total compression of 33%
with virtually no image degredation. This is preferred for intermediate
storage. YUV2 is sometimes called Component video.
&lt;/dd&gt;
&lt;dt&gt;yuv4&lt;/dt&gt;
&lt;dd&gt;
YUV4 is planar YUV, identical to MPEG. It downsamples the color components
by 75% for a total 50% compression. This is the preferred intermediate
format for working with MPEG.
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Currently, qtsg can take JPEG images and Ogg Vorbis audio files as input.
It renders a QuickTime video with JPEG encoded video frames and raw
audio frames.  This output is suitable for encoding into MPEG with &lt;a href=&#34;http://mjpeg.sourceforge.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MJPEG tools&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>quicktime4linux-010401-build</title>
      <link>https://www.flyn.org/patches/quicktime4linux-010401-build/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/quicktime4linux-010401-build/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;quicktime4linux-010401-build.patch.gz&#34;&gt;quicktime4linux-010401-build&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Heroine Virtual&#39;s  &lt;a href=&#34;http://www.heroinewarrior.com/quicktime.php3&#34;&gt;QuickTime
for Linux&lt;/a&gt; library which, in my opinion, improves its
build process.  The project now uses autoconf, automake, etc. and shared
libraries and RPMs are now easily built.  The mainstream distribution
includes copies of libraries such as libdv to build; this patch causes
QuickTime for Linux to build against shared libraries already existing
on a system.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;http://libquicktime.sourceforge.net/&#34;&gt;Libquicktime&lt;/a&gt;
project now exists to bring some modern features to &lt;a href=&#34;http://www.heroinewarrior.com/quicktime.php3&#34;&gt;QuickTime
for Linux&lt;/a&gt;.  These include the same build process
changes that are in my patch.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Red Hat Enterprise Linux without root</title>
      <link>https://www.flyn.org/notes/rhel/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/rhel/</guid>
      <description>&lt;h2 id=&#34;replacing-gnomes-metacity-and-gnome-panel-with-the-awesome-window-manager&#34;&gt;Replacing GNOME&amp;rsquo;s metacity and gnome-panel with the awesome window manager&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Build &lt;code&gt;confuse&lt;/code&gt; and &lt;code&gt;imlib2&lt;/code&gt; from within their respective source directories using:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix=$HOME/Root --disable-shared
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make all install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Build &lt;code&gt;awesome&lt;/code&gt; from within its source directory using:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PKG_CONFIG_PATH=$HOME/Root/lib/pkgconfig ./configure --prefix=$HOME/Root
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Add &lt;code&gt;$HOME/Root/bin&lt;/code&gt; to your &lt;code&gt;.bash_profile&lt;/code&gt;/&lt;code&gt;.bashrc&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the contents of &lt;code&gt;$HOME/.local/share/applications/awesome.desktop&lt;/code&gt; to:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Desktop Entry]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Version=1.0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Type=Application
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Name=Awesome
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Comment=The awesome launcher!
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TryExec=awesome
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Exec=awesome
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Use &lt;code&gt;gconf-editor&lt;/code&gt; to:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;edit the values at &lt;code&gt;/desktop/gnome/session/required_components_list&lt;/code&gt;,
ensuring only &lt;code&gt;windowmanager&lt;/code&gt; and &lt;code&gt;terminal&lt;/code&gt; are present,&lt;/li&gt;
&lt;li&gt;set the value of &lt;code&gt;/desktop/gnome/session/required_components/windowmanager&lt;/code&gt; to &lt;code&gt;awesome&lt;/code&gt;, and&lt;/li&gt;
&lt;li&gt;set the value of &lt;code&gt;/desktop/gnome/session/required_components/terminal&lt;/code&gt; to &lt;code&gt;gnome-terminal&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>rhythmbox-libdmapsharing</title>
      <link>https://www.flyn.org/patches/rhythmbox-libdmapsharing/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/rhythmbox-libdmapsharing/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;20100529-0001-Patch-to-replace-DAAP-related-code-with-libdmapshari.patch.gz&#34;&gt;0001-Patch-to-replace-DAAP-related-code-with-libdmapshari.patch.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Patch to replace DAAP-related code in Rhythmbox with libdmapsharing.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>scald</title>
      <link>https://www.flyn.org/abandoned/scald/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/scald/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Scald can assist lazy developers. Scald is a tool to generate program code
from an HTML-like XML description. For example, scald will process an
XML description into C code that prints an HTML form and saves user
input data into a configuration file.&lt;/p&gt;
&lt;h1 id=&#34;details&#34;&gt;Details&lt;/h1&gt;
&lt;p&gt;There are many XSLT processors available to developers. The following examples
use xmllint from libxml2 and
xsltproc from libxslt. Here is example.xml, an
example XML document that follows the scald schema:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34;?&amp;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;&amp;lt;!DOCTYPE webapp PUBLIC &amp;#34;-//Flyn Computing//DTD Scald XML Unstable//EN&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &amp;#34;http://www.flyn.org/xml/dtd/unstable/webapp.dtd&amp;#34;&amp;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;&amp;lt;webapp name=&amp;#34;/cgi-bin/example.cgi&amp;#34; short-name=&amp;#34;example&amp;#34; description=&amp;#34;Example&amp;#34;&amp;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;	&amp;lt;form name=&amp;#34;example&amp;#34; save-data-as=&amp;#34;config&amp;#34; save-to-dir=&amp;#34;/tmp/&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;lt;input name=&amp;#34;example-input&amp;#34; type=&amp;#34;text&amp;#34; label=&amp;#34;Example Input&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;lt;submit value=&amp;#34;Save&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;lt;/form&amp;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;&amp;lt;/webapp&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The file example.xml may be validated with the command xmllint &amp;ndash;noout example.xml and processed with xsltproc &lt;a href=&#34;http://www.flyn.org/xml/xslt/unstable/webapp-c.xslt&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.flyn.org/xml/xslt/unstable/webapp-c.xslt&lt;/a&gt; example.xml. The result will be several functions, written in C:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;void print_form(char *sidebar)&lt;/dt&gt;
&lt;dd&gt;Creates and prints an HTML form, selecting default values from a configuration file, if available.&lt;/dd&gt;
&lt;dt&gt;void save_data(s_cgi *cgi)&lt;/dt&gt;
&lt;dd&gt;Reads a form and saves its values to a configuration file or spool.&lt;/dd&gt;
&lt;dt&gt;char *get_post_mode(s_cgi *cgi)&lt;/dt&gt;
&lt;dd&gt;Returns the CGI mode of execution.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;After you process an XML file to generate C code, you should write a
main function that calls these three functions. One useful technique
is to write a system configuration daemon. After running save_data,
the main function may notify this daemon, which will then reconfigure
a system service based on the updated configuration file (it may be
a bad idea to allow your webserver the rights required to update system
configurations directly).&lt;/p&gt;
&lt;p&gt;The scald schema also allows for dependencies between inputs. For example,
the fragment below describes an input, password, that is only enabled
if another input, authenticate, is selected. This dependency is enforced
by Javascript code that scald automatically generates.&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;input name=&amp;#34;authenticate&amp;#34; type=&amp;#34;checkbox&amp;#34; label=&amp;#34;Use Authentication&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;input name=&amp;#34;password&amp;#34; type=&amp;#34;password&amp;#34; label=&amp;#34;Password&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       enabled-by=&amp;#34;document.formname.authenticate&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The call-print- entites allow one to generate custom HTML at run
runtime. The following fragment indicates that options should be generated
at runtime by a custom function:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;form name=&amp;#34;initialize&amp;#34; save-data-as=&amp;#34;config&amp;#34; save-to-dir=&amp;#34;/tmp/&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;lt;select name=&amp;#34;device&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;lt;call-print-options-fn/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;lt;/select&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/form&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Scald will generate code that expects the function
print_document_initialize_device_options() to be defined in a separate
file and linked against the C output that scald generates. Here is a
simple implementation of print_document_initialize_device_options():&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;void print_document_initialize_device_options(char *obj)
&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;        printf(&amp;#34;&amp;lt;option value=\&amp;#34;foo\&amp;#34;&amp;gt;Foo&amp;lt;/option&amp;gt;&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	printf(&amp;#34;&amp;lt;option value=\&amp;#34;bar\&amp;#34;&amp;gt;Bar&amp;lt;/option&amp;gt;&amp;#34;);
&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A more general-purpose entity is call-print-input-fn. This may be used to generate any HTML input tags:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;form name=&amp;#34;initialize&amp;#34; save-data-as=&amp;#34;spool&amp;#34; save-to-dir=&amp;#34;/tmp/&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;lt;call-print-input-fn name=&amp;#34;example&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/form&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This requires one to define both a print and save function:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;void save_to_spool_document_initialize_example_input(s_cgi *cgi,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                                     char *dir, char *obj)
&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;	/* Code to read data from s_cgi *cgi and write it to spool file
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	 * in char *dir
&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&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;void print_document_initialize_example_input(char *obj)
&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;	/*  Code to print HTML form */
&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The onclick option is available to the input tag. This may be set to a
Javascript function that will execute when the input is clicked. The
Javascript function may be either provided by the XML document or
dynamically generated using a call-print- entity as in the following example:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;form name=&amp;#34;initialize&amp;#34; save-data-as=&amp;#34;config&amp;#34; save-to-dir=&amp;#34;/tmp/&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;lt;input label=&amp;#34;Host&amp;#34; name=&amp;#34;destination&amp;#34; value=&amp;#34;host&amp;#34; type=&amp;#34;radio&amp;#34; onclick=&amp;#34;populate_with_hosts&amp;#34;/&amp;gt;&amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;lt;input label=&amp;#34;Disk&amp;#34; name=&amp;#34;destination&amp;#34; value=&amp;#34;disk&amp;#34; type=&amp;#34;radio&amp;#34; onclick=&amp;#34;populate_with_disks&amp;#34;/&amp;gt;&amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;lt;select label=&amp;#34;Destination&amp;#34; name=&amp;#34;dest&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;lt;call-print-options-fn/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;lt;/select&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/form&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The following is the implementation that will be called by the code
generated by the call-print-options-fn entity. It prints the two
Javascript functions that are referenced by the onclick options
above. It also calls the populate_with_hosts function that it defines
in order to initially populate the options list. Clicking between
the radio buttons defined above will switch the options available.&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;void print_document_initialize_dest_options(char *obj)
&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;        printf (&amp;#34;&amp;lt;script type=\&amp;#34;text/javascript\&amp;#34;&amp;gt;&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	printf (&amp;#34;function populate_with_hosts() {&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	printf (&amp;#34;document.backup.dest.length = 0;&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	/* C Code to print Javascript that assigns hosts, e.g.: */
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	for (i = 0; i &amp;lt; num_opts; i++) {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		printf (&amp;#34;%s[%d] = new Option(\&amp;#34;%s\&amp;#34;, \&amp;#34;%s\&amp;#34;, false);\n&amp;#34;, obj, 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			i, &amp;#34;example.com&amp;#34;, &amp;#34;example.com&amp;#34;);
&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;	if (0 == i) {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		printf(&amp;#34;for (i = %s.options.length; i &amp;gt;= 0; i--) { 			%s[i] = null; 			}\n&amp;#34;, obj, obj);
&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;	printf (&amp;#34;}&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	printf (&amp;#34;function populate_with_disks() {&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	printf (&amp;#34;document.backup.dest.length = 0;&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	/* Code to print disks */
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	printf (&amp;#34;}&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	printf (&amp;#34;populate_with_hosts(%s);&amp;#34;, obj);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	printf (&amp;#34;&amp;lt;/script&amp;gt;&amp;#34;);
&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;




	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>SDL-1.2.5-devfs</title>
      <link>https://www.flyn.org/patches/SDL-1.2.5-devfs/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/SDL-1.2.5-devfs/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;SDL-1.2.5-devfs.patch.gz&#34;&gt;SDL-1.2.5-devfs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for &lt;a href=&#34;http://www.libsdl.org/index.php&#34;&gt;SDL&lt;/a&gt;
that fixes support for Linux&#39;s modern joystick device names
(/dev/input/js?).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>SDL-20020602-screensaver</title>
      <link>https://www.flyn.org/patches/SDL-20020602-screensaver/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/SDL-20020602-screensaver/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;SDL-20020602-screensaver.patch.gz&#34;&gt;SDL-20020602-screensaver&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for &lt;a href=&#34;http://www.libsdl.org/index.php&#34;&gt;SDL&lt;/a&gt;.  When applied,
SDL provides a cross-platform means of enabling
and disabling screensavers.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>SELinux</title>
      <link>https://www.flyn.org/notes/selinux/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/selinux/</guid>
      <description>&lt;h2 id=&#34;activating-and-deactivating-selinux&#34;&gt;Activating and deactivating SELinux&lt;/h2&gt;
&lt;p&gt;A Linux kernel which supports SELinux can assume three modes:
&lt;em&gt;enforcing&lt;/em&gt;, where the kernel enforces the SELinux policy;
&lt;em&gt;permissive&lt;/em&gt;, where the kernel loads the policy but does not enforce its constraints; and
&lt;em&gt;disabled&lt;/em&gt;, where the kernel completely disables SELinux.
Avoid the disabled mode because it can result in a mislabeled system
which will not function if SELinux is reactivated.
You can deactivate or activate enforcing mode temporarily by running the following commands:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;setenforce 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;setenforce 1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The command &lt;code&gt;getenforce&lt;/code&gt; will print the current enforcing status.&lt;/p&gt;
&lt;p&gt;You can configure the SELinux mode which the kernel will adopt upon
booting by editing &lt;code&gt;/etc/syslinux/selinux&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;selinux-labels&#34;&gt;SELinux labels&lt;/h2&gt;
&lt;p&gt;Under SELinux, system objects bear labels. You can use the standard Linux utilities to inspect these labels. Here are some examples:&lt;/p&gt;
&lt;p&gt;Display the labels of filesystem nodes:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -Z
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Recursively modify the label of part of the filesystem, and update the policy to retain the labels through a relabel:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chcon -v -R --type=mytype_file_t /path/to/branch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;semanage fcontext -a -t mytype_file_t &amp;#34;/path/to/branch(/.*)?&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Restore the label of a filesystem node to the path&amp;rsquo;s SELinux policy default:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;restorecon -v myfile.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Relabel the entire filesystem according to the SELinux policy:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch /.autorelabel
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;reboot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Display the labels of TCP and UDP ports:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;semanage port -l
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Modify the label of a port:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;semanage port -a -t mytype_port_t -p tcp 8080
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Display the domains of running processes:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ps auxZ
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note that the domain a running process adopts is a function of
the parent process&amp;rsquo;s domain,
the label of the process&amp;rsquo;s program on disk,
and the SELinux policy. One of these must be changes to modify the
domain a process will run in.&lt;/p&gt;
&lt;h2 id=&#34;selinux-booleans&#34;&gt;SELinux booleans&lt;/h2&gt;
&lt;p&gt;The kernel permits the customization of many details about its SELinux policy through the use of boolean flags. To list the available booleans, along with their current status, run:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;getsebool -a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can modify a boolean by running statements such as:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;setsebool -P httpd_can_network_connect_db on
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;writing-selinux-policy-modules&#34;&gt;Writing SELinux policy modules&lt;/h2&gt;
&lt;p&gt;Booleans only help tailor a policy to do things the original policy authors intended. When installing an uncommon program, an administrator might need to write an entirely  new policy module. Here is a sample program in C, &lt;code&gt;setoy.c&lt;/code&gt;, which we would like to constrain using a custom SELinux policy module:&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-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#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;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#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;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;val&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;FILE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#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;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BUFSIZ&lt;/span&gt;&lt;span class=&#34;p&#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;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fopen&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;setoy.txt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;r+&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#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;nf&#34;&gt;perror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Could not open setoy.txt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;ptr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fgets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;buf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BUFSIZ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#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;nf&#34;&gt;perror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Could not read setoy.txt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fprintf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;%s&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Goodbye, cruel world!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#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;nf&#34;&gt;perror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Could not write setoy.txt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fclose&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#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;nf&#34;&gt;perror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Could not close setoy.txt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fopen&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;setoy2.txt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;w&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#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;nf&#34;&gt;perror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Could not open setoy2.txt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fprintf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;%s&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Goodbye, cruel world!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#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;nf&#34;&gt;perror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Could not write setoy2.txt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fclose&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#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;nf&#34;&gt;perror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Could not close setoy2.txt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_FAILURE&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;nf&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;All system calls succeeded: success (or failure?)&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Press enter to exit &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;getchar&lt;/span&gt;&lt;span class=&#34;p&#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;nf&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXIT_SUCCESS&lt;/span&gt;&lt;span class=&#34;p&#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;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here is a policy which constrains the program, &lt;code&gt;mysetoy.te&lt;/code&gt;:&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-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;policy_module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysetoy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#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;# Must require any core policy definitions you use. This is similar to&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;c1&#34;&gt;# an import in Java or #include in C.&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;n&#34;&gt;require&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;attribute&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_type&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unconfined_t&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;role&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unconfined_r&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;user_devpts_t&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;user_home_t&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fs_t&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dir&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;search&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;chr_file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;read&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;write&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;append&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;getattr&lt;/span&gt; &lt;span class=&#34;p&#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;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filesystem&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;associate&lt;/span&gt;&lt;span class=&#34;p&#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;p&#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;# ==============================================================================&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;c1&#34;&gt;# | Declare a number of types                                                  |&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;c1&#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;n&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;                 &lt;span class=&#34;c1&#34;&gt;# The type we will assign to mysetoy processes.&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;n&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_file_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# Will assign to files mysetoy can read/write.&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;n&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_exec_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;# Will assign to the mysetoy program on disk.&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;# ==============================================================================&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;c1&#34;&gt;# | Allow/cause unconfined_t-domain processes to run mysetoy in mysetoy_t      |&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;c1&#34;&gt;# | domain.                                                                    |&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;c1&#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;n&#34;&gt;domain_type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysetoy_t&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;domain_entry_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysetoy_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_exec_t&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;role&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unconfined_r&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;types&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_t&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;type_transition&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unconfined_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_exec_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;process&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_t&lt;/span&gt;&lt;span class=&#34;p&#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;# ==============================================================================&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;c1&#34;&gt;# | Now we decide what SELinux will permit mysetoy to 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;c1&#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;c1&#34;&gt;# Allow mysetoy_t domain to read and write file objects labeled with mysetoy_file_t.&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;n&#34;&gt;allow&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_file_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;open&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;read&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;write&lt;/span&gt; &lt;span class=&#34;p&#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;# Allow mysetoy_t domain to read and write the console.&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;n&#34;&gt;allow&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;user_devpts_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chr_file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;read&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;write&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;append&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;getattr&lt;/span&gt; &lt;span class=&#34;p&#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;# Allow mysetoy_t domain to enumerate contents of a directory in ~.&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;n&#34;&gt;allow&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;user_home_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dir&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;search&lt;/span&gt;&lt;span class=&#34;p&#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;# Allow mysetoy_t domain to create a file in ~ ...&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;n&#34;&gt;allow&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;user_home_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dir&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;write&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;add_name&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;allow&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_file_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create&lt;/span&gt; &lt;span class=&#34;p&#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;# ... and ensure it bears the label mysetoy_t.&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;n&#34;&gt;allow&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fs_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filesystem&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;associate&lt;/span&gt;&lt;span class=&#34;p&#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;n&#34;&gt;filetrans_pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysetoy_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;user_home_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mysetoy_file_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can compile an SELinux policy with &lt;code&gt;make -f /usr/share/selinux/devel/Makefile mysenettoy.pp&lt;/code&gt;,
and you can install the compiled policy using &lt;code&gt;semodule -i mysetoy.pp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Properly running &lt;code&gt;setoy&lt;/code&gt; will also require:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;echo Hello, world\! &amp;gt;setoy.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chcon -v --type=mysetoy_exec_t setoy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chcon -v --type=mysetoy_file_t setoy.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;selinux-logging-and-machine-assisted-policy-modules&#34;&gt;SELinux logging and machine-assisted policy modules&lt;/h2&gt;
&lt;p&gt;SELinux logs policy violations to &lt;code&gt;/var/log/audit/audit.log&lt;/code&gt;.
The command &lt;code&gt;audit2allow&lt;/code&gt; can help turn the logs which result
from a policy being overly cautious into a new, more appropriate policy module for a program.
This should be done with care, because most of the time the enforcement of the policy is precisely what ought to happen. Thus you should carefully review the results from &lt;code&gt;audit2allow&lt;/code&gt; before loading it into the running policy. Sometimes it is helpful to avoid ignoring common failures (i.e., do-not-audit rules) using:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;semodule -DB
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Restore the do-not-audit rules with:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;semodule -B
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;other-resources&#34;&gt;Other resources&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://stopdisablingselinux.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Stop disabling SELinux!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=cNoVgDqqJmM&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Security-enhanced Linux for mere mortals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/SELinux_Users_and_Administrators_Guide/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RHEL 7 SELinux user&amp;rsquo;s and administrator&amp;rsquo;s guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>serial-5.05-actiontec</title>
      <link>https://www.flyn.org/patches/serial-5.05-actiontec/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/serial-5.05-actiontec/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;serial-5.05-actiontec.patch.gz&#34;&gt;serial-5.05-actiontec&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Theodore Ts&#39;o&#39;s Linux &lt;a href=&#34;serial-5.05.tar.gz&#34;&gt;serial
driver&lt;/a&gt; which adds very ugly support for &lt;a href=&#34;http://www.actiontec.com/&#34;&gt;Actiontec&lt;/a&gt;&#39;s
56K Internal PCI Call Waiting Modem.  This patch causes the driver to
be hard-wired to auto-detect this modem.  I believe that the Lucent
Venus chipset may be buggy, and am currently working with &lt;!--&lt;a
href=&#34;http://www.lucent.com/&#34;&gt;--&gt;Lucent&lt;!--&lt;/a&gt;--&gt;, &lt;a href=&#34;http://www.actiontec.com/&#34;&gt;Actiontec&lt;/a&gt;,
and Theodore Ts&#39;o to fix it.&lt;/p&gt;
&lt;p&gt;I have written open letters to &lt;a href=&#34;agere.pdf&#34;&gt;Agere&lt;/a&gt;
and &lt;a href=&#34;actiontec.pdf&#34;&gt;Actiontec&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I wrote a &lt;a href=&#34;serial_test.c&#34;&gt;kernel
module&lt;/a&gt; to demonstrate the problems I am having with
the Venus chipset.  The module writes a value to the interrupt enable
register (IER) on one&#39;s modem.  It then immediately reads the value stored
in the IER.  Reading a value from the IER that does not equal the value
written to it seems to represent a bug in the chipset.  Theodore Ts&#39;o&#39;s
serial driver makes extensive use of a modem&#39;s IER when it performs
detection operations; thus detecting a Venus-based modem often fails.&lt;/p&gt;
&lt;p&gt;To try this test on your own machine, download the &lt;a href=&#34;serial_test.c&#34;&gt;kernel module&lt;/a&gt; and read the directions included in the
source file.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>shadow_4.0.3-root_close</title>
      <link>https://www.flyn.org/patches/shadow_4.0.3-root_close/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/shadow_4.0.3-root_close/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;shadow_4.0.3-root_close.patch.gz&#34;&gt;shadow_4.0.3-root_close&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for the standard linux shadow utilities that causes login to
retain its root privileges until it calls PAM&#39;s close session code.
This allows pam_mount to work properly with login and is correct behavior.
Gdm, su, etc. already do this.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Shrieker</title>
      <link>https://www.flyn.org/notes/shrieker/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/shrieker/</guid>
      <description>&lt;p&gt;This document describes how to build Shrieker, a Raspberry Pi-based ringer.
Shrieker connects to an XMPP server, listens for messages, and displays
messages that arrive before activating an audible alarm.&lt;/p&gt;
&lt;p&gt;Shrieker is designed to run on the hardware listed below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Raspberry Pi Model B&lt;/li&gt;
&lt;li&gt;PiFace Control &amp;amp; Display&lt;/li&gt;
&lt;li&gt;PiFace Control &amp;amp; Display Case&lt;/li&gt;
&lt;li&gt;5V Micro USB AC Adapter&lt;/li&gt;
&lt;li&gt;8GB SD Card&lt;/li&gt;
&lt;li&gt;Edimax 802.11b/g/n Nano USB Adapter&lt;/li&gt;
&lt;li&gt;HDMI Cable&lt;/li&gt;
&lt;li&gt;USB Keyboard (For initial setup)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At the time of writing, most of this hardware is available from &lt;a href=&#34;http://www.mcmelectronics.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MCM Electronics&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;selecting-the-software-for-a-shrieker-image&#34;&gt;Selecting the software for a Shrieker image&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Obtain the OpenWrt source tree using &lt;code&gt;git clone git://git.openwrt.org/openwrt/openwrt.git&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enter the OpenWrt source tree and modify the package configuration provided by &lt;code&gt;feeds.conf&lt;/code&gt;
to use &lt;code&gt;src-git packages ssh://git@github.com/MikePetullo/packages.git&lt;/code&gt;.
Run &lt;code&gt;./scripts/feeds update&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pull the appropriate feeds, using &lt;code&gt;./scripts/feeds install \ freifunk-watchdog \ gst1-mod-mad \ lcdringer \ wpa-supplicant \ zoneinfo-core \ zoneinfo-northamerica&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &lt;code&gt;make menuconfig&lt;/code&gt; and select:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Target System: &lt;code&gt;Broadcom BCM2708/BCM2709/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Subtarget: &lt;code&gt;BCM2708 based boards&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Target Profile: &lt;code&gt;Raspberry Pi Model B&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Base system:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Remove&lt;/strong&gt; &lt;code&gt;dnsmasq&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Kernel Modules:
&lt;ul&gt;
&lt;li&gt;Other modules: &lt;code&gt;kmod-softdog&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SPI Support:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kmod-spi-bcm2835&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kmod-spi-dev&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Wireless Drivers:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kmod-rtl8192cu&lt;/code&gt; (for firmware)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kmod-rtl8xxxu&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LuCI: Freifunk: &lt;code&gt;freifunk-watchdog&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Multimedia:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;gstreamer1-plugins-base&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Select &lt;em&gt;all&lt;/em&gt; GStreamer base modules&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gstreamer1-plugins-good&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Select &lt;em&gt;all&lt;/em&gt; GStreamer good modules&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gstreamer1-plugins-ugly&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Select &lt;em&gt;all&lt;/em&gt; GStreamer ugly modules&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Network:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lcdringer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remove&lt;/strong&gt; &lt;code&gt;odhcpd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wpa-supplicant&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Utilities:
&lt;ul&gt;
&lt;li&gt;zoneinfo: &lt;code&gt;zoneinfo-northamerica&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Create the directory &lt;code&gt;files&lt;/code&gt; and populate it as described in the following sections.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configure-networking&#34;&gt;Configure networking&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;etc/config/network&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config interface loopback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option ifname lo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option proto static
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option ipaddr 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option netmask 255.0.0.0
&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;config interface lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option ifname wlan0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option proto dhcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;code&gt;etc/config/wireless&lt;/code&gt; (replace &lt;em&gt;MACADDR&lt;/em&gt;, &lt;em&gt;SSID&lt;/em&gt;, and &lt;em&gt;KEY&lt;/em&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config wifi-device radio0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option type     mac80211
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option channel  11
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option hwmode   11g
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option country  US
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option macaddr  MACADDR
&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;config wifi-iface
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option device   radio0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option network  lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option mode     sta
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option ssid     SSID
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option encryption psk2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option key      KEY
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configure-lcdringer&#34;&gt;Configure lcdringer&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;etc/lcdringer.conf&lt;/code&gt; (replace &lt;em&gt;EXAMPLE.COM&lt;/em&gt;, &lt;em&gt;PASSWORD&lt;/em&gt;,
&lt;em&gt;USER1&lt;/em&gt;, and &lt;em&gt;USER2&lt;/em&gt;; &lt;em&gt;USER1&lt;/em&gt; and &lt;em&gt;USER2&lt;/em&gt; are the users permitted to cause lcdringer to ring):&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[account]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jid=lcdringer@EXAMPLE.COM
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;password=PASSWORD
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ring_path=/usr/share/lcdringer/ring.mp3
&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;[friends]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jids=USER1@EXAMPLE.COM;USER2@EXAMPLE.COM
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configure-basic-system-settings&#34;&gt;Configure basic system settings&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;etc/config/system&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config system
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option hostname	shrieker.example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option timezone	EST5EDT,M3.2.0,M11.1.0
&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;config timeserver ntp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     0.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     1.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     2.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     3.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enabled 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enable_server 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;code&gt;etc/config/dropbear&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config dropbear
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option PasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option RootPasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option Port         &amp;#39;22&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;code&gt;etc/config/freifunk-watchdog&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option process lcdringer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option initscript /etc/init.d/lcdringer
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;build-software-and-perform-installation&#34;&gt;Build software and perform installation&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;make V=99&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;dd&lt;/code&gt; to copy &lt;code&gt;openwrt-brcm2708-bcm2708-rpi-b-ext4-sdcard.bin&lt;/code&gt; to the Raspberry Pi&amp;rsquo;s flash card.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>SimpleFlow</title>
      <link>https://www.flyn.org/projects/SimpleFlow/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/SimpleFlow/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;SimpleFlow implements a very simple view of information flow within the Linux kernel.
(We do not claim to approach the sophistication of
&lt;a href=&#34;http://doc.cat-v.org/unix/v10/IX/163c.ps&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IX&lt;/a&gt;, &lt;a href=&#34;http://www.scs.stanford.edu/histar/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;HiStar&lt;/a&gt;, etc.)
We have found the design of SimpleFlow useful in education
and certain computer-security competitions,
and we are also interested in the use of SimpleFlow
to study post-compromise exfiltration and insider threats.&lt;/p&gt;
&lt;p&gt;Under SimpleFlow, the system administrator designates some
filesystem objects as &lt;em&gt;confidential&lt;/em&gt; and some programs as &lt;em&gt;trusted&lt;/em&gt;
(SimpleFlow stores both using extended attributes). Any process not loaded from
a trusted program will become &lt;em&gt;tainted&lt;/em&gt; upon reading a confidential
object. The kernel transfers this taint status from process to process
as a result of inter-process communication (e.g., an untainted process
reads from a tainted process over an IPC channel). If a tainted process
writes to the network, the kernel sets the packet&#39;s RFC 3514 evil bit;
this allows for a variety of filtering or spoofing strategies
which might help determine the intention of the
principal who read the confidential data in the first place.&lt;/p&gt;
&lt;h2 id=&#34;simpleflow-virtual-machine&#34;&gt;SimpleFlow Virtual Machine&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;SimpleFlowDemo-0.3-linux-3.10.0.ova&#34;&gt;SimpleFlowDemo-0.3-linux-3.10.0.ova&lt;/a&gt;
provides in OVA format a virtual machine which contains
a SimpleFlow kernel along with a CentOS 7 installation.
Some useful SimpleFlow-related commands include:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;kbd&gt;getfattr -n security.simple-flow.confidential -v true &lt;i&gt;PATH&lt;/i&gt;&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Set the confidential flag on the file at &lt;i&gt;PATH&lt;/i&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;getfattr -x security.simple-flow.confidential &lt;i&gt;PATH&lt;/i&gt;&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Remove the confidential flag from the file at &lt;i&gt;PATH&lt;/i&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;getfattr -n security.simple-flow.trusted -v true &lt;i&gt;PATH&lt;/i&gt;&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Set the trusted flag on the program at &lt;i&gt;PATH&lt;/i&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;getfattr -x security.simple-flow.trusted &lt;i&gt;PATH&lt;/i&gt;&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Remove the trusted flag from the program at &lt;i&gt;PATH&lt;/i&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;ps auxZ&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Enumerate the running processes, including whether they are tainted.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;echo 1 &gt; /proc/&lt;i&gt;PID&lt;/i&gt;/attr/current&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Taint the process matching &lt;i&gt;PID&lt;/i&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;echo 0 &gt; /proc/&lt;i&gt;PID&lt;/i&gt;/attr/current&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Untaint the process matching &lt;i&gt;PID&lt;/i&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;dmesg -w&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Watch SimpleFlow (and other kernel) events.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;related-publications&#34;&gt;Related publications&lt;/h1&gt;









	
		







  








&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/publications/Studying-Naive-Users-and-the-Insider-Threat-with-SimpleFlow/&#34; &gt;Studying Naive Users and the Insider Threat with SimpleFlow&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
      &lt;div&gt;
        

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Ryan-Johnson/&#34;&gt;Ryan Johnson&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Jessie-Lass/&#34;&gt;Jessie Lass&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/W.-Michael-Petullo/&#34;&gt;W. Michael Petullo&lt;/a&gt;&lt;/span&gt;
      &lt;/div&gt;
      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  
    
  



&lt;a class=&#34;btn btn-outline-primary btn-page-header btn-sm&#34; href=&#34;http://www.flyn.org/publications/2016-SimpleFlow.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;
  PDF
&lt;/a&gt;



&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/publications/Studying-Naive-Users-and-the-Insider-Threat-with-SimpleFlow/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	


&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;SimpleFlowDemo-0.3-linux-3.10.0.ova&#34;&gt;SimpleFlowDemo-0.3-linux-3.10.0.ova&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;linux-3.10.0-simpleflow-0.1.patch&#34;&gt;linux-3.10.0-simpleflow-0.1.patch&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;linux-3.10.0-simpleflow-0.2.patch&#34;&gt;linux-3.10.0-simpleflow-0.2.patch&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;linux-3.10.0-simpleflow-0.3.patch&#34;&gt;linux-3.10.0-simpleflow-0.3.patch&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;simple-flow-rest-0.2.tar.gz&#34;&gt;simple-flow-rest-0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;simple-flow-rest-0.3.tar.gz&#34;&gt;simple-flow-rest-0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	



	&lt;p&gt;
		The SimpleFlow project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/simple-flow-kernel -b v3.10-simpleflow&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>Siren</title>
      <link>https://www.flyn.org/notes/siren/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/siren/</guid>
      <description>&lt;p&gt;This document describes how to build Siren, a Raspberry Pi-based music player.
Siren can play music made available by a DAAP server such as &lt;a href=&#34;../../projects/dmapd/&#34;&gt;dmapd&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Siren is designed to run on the hardware listed below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Raspberry Pi Model B&lt;/li&gt;
&lt;li&gt;PiFace Control &amp;amp; Display&lt;/li&gt;
&lt;li&gt;PiFace Control &amp;amp; Display Case&lt;/li&gt;
&lt;li&gt;5V Micro USB AC Adapter&lt;/li&gt;
&lt;li&gt;8GB SD Card&lt;/li&gt;
&lt;li&gt;Edimax 802.11b/g/n Nano USB Adapter&lt;/li&gt;
&lt;li&gt;HDMI Cable&lt;/li&gt;
&lt;li&gt;USB Keyboard (For initial setup)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At the time of writing, most of this hardware is available from &lt;a href=&#34;http://www.mcmelectronics.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MCM
Electronics&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;selecting-the-software-for-a-siren-image&#34;&gt;Selecting the software for a Siren image&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Obtain the OpenWrt source tree using &lt;code&gt;git clone git://git.openwrt.org/openwrt/openwrt.git&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enter the OpenWrt source tree and
modify the package configuration provided by &lt;code&gt;feeds.conf&lt;/code&gt;
to use &lt;code&gt;src-git packages ssh://git@github.com/MikePetullo/packages.git&lt;/code&gt;.
Run &lt;code&gt;./scripts/feeds update&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pull the appropriate feeds, using&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./scripts/feeds install \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	freifunk-watchdog \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-mad \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-ogg \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-vorbis \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gst1-mod-flac \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	lcdgrilo \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	wpa-supplicant \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	zoneinfo-core \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	zoneinfo-northamerica&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Run &lt;code&gt;make menuconfig&lt;/code&gt; and select:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Target System: Broadcom BCM2708/BCM2709&lt;/li&gt;
&lt;li&gt;Subtarget: BCM2708 based boards&lt;/li&gt;
&lt;li&gt;Target Profile: Raspberry Pi Model B&lt;/li&gt;
&lt;li&gt;Base system:
&lt;ul&gt;
&lt;li&gt;Remove dnsmasq&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kernel Modules:
&lt;ul&gt;
&lt;li&gt;Other modules: kmod-softdog&lt;/li&gt;
&lt;li&gt;SPI Support:
&lt;ul&gt;
&lt;li&gt;kmod-spi-bcm2835&lt;/li&gt;
&lt;li&gt;kmod-spi-dev&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Wireless Drivers:
&lt;ul&gt;
&lt;li&gt;kmod-rtl8192cu (for firmware)&lt;/li&gt;
&lt;li&gt;kmod-rtl8xxxu&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LuCI: Freifunk: freifunk-watchdog&lt;/li&gt;
&lt;li&gt;Multimedia:
&lt;ul&gt;
&lt;li&gt;grilo-plugins&lt;/li&gt;
&lt;li&gt;Select grilo-plugins-dmap&lt;/li&gt;
&lt;li&gt;gstreamer1-plugins-base&lt;/li&gt;
&lt;li&gt;Select all GStreamer base modules&lt;/li&gt;
&lt;li&gt;gstreamer1-plugins-good&lt;/li&gt;
&lt;li&gt;Select all GStreamer good modules&lt;/li&gt;
&lt;li&gt;gstreamer1-plugins-ugly&lt;/li&gt;
&lt;li&gt;Select all GStreamer ugly modules&lt;/li&gt;
&lt;li&gt;lcdgrilo&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Network:
&lt;ul&gt;
&lt;li&gt;Remove odhcpd&lt;/li&gt;
&lt;li&gt;wpa-supplicant&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Utilities:
&lt;ul&gt;
&lt;li&gt;zoneinfo: zoneinfo-northamerica&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Create the directory &lt;code&gt;files&lt;/code&gt; and populate it as described in the following sections.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configure-networking&#34;&gt;Configure networking&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;etc/config/network&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config interface loopback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option ifname lo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option proto static
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option ipaddr 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option netmask 255.0.0.0
&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;config interface lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option ifname wlan0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option proto dhcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;code&gt;etc/config/wireless&lt;/code&gt; (replace MACADDR, SSID, and KEY):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config wifi-device radio0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option type     mac80211
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option channel  11
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option hwmode   11g
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option country  US
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option macaddr  MACADDR
&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;config wifi-iface
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option device   radio0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option network  lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option mode     sta
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option ssid     SSID
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option encryption psk2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option key      KEY
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configure-basic-system-settings&#34;&gt;Configure basic system settings&lt;/h2&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;etc/config/system&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config system
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option hostname	siren.example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option timezone	EST5EDT,M3.2.0,M11.1.0
&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;config timeserver ntp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     0.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     1.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     2.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        list server     3.openwrt.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enabled 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option enable_server 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;code&gt;etc/config/dropbear&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config dropbear
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option PasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option RootPasswordAuth &amp;#39;off&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option Port         &amp;#39;22&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;code&gt;etc/config/freifunk-watchdog&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config process
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option process lcdgrilo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        option initscript /etc/init.d/lcdgrilo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;build-software-and-perform-installation&#34;&gt;Build software and perform installation&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;make V=99&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;dd&lt;/code&gt; to copy &lt;code&gt;openwrt-brcm2708-bcm2708-rpi-b-ext4-sdcard.bin&lt;/code&gt; to the Raspberry Pi&amp;rsquo;s flash card.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>snes9x-1.26-esd</title>
      <link>https://www.flyn.org/patches/snes9x-1.26-esd/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/snes9x-1.26-esd/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;snes9x-1.26-esd.patch.gz&#34;&gt;snes9x-1.26-esd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Gary Henderson&#39;s &lt;a href=&#34;http://www.snes9x.com&#34;&gt;snes9x
&lt;/a&gt; which
allows the SNES emulator to play sound through &lt;a href=&#34;http://www.tux.org/~ricdude/EsounD.html&#34;&gt;EsounD&lt;/a&gt;.
The patch currently causes a lag in the
emulator&#39;s audio, due to latency in &lt;a href=&#34;http://www.tux.org/~ricdude/EsounD.html&#34;&gt;EsounD&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Spam</title>
      <link>https://www.flyn.org/notes/spam/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/spam/</guid>
      <description>&lt;p&gt;This technique uses &lt;em&gt;bogofilter&lt;/em&gt; to categorize email as spam or ham on a server, and it uses &lt;em&gt;spamassassin&lt;/em&gt; and manual characterization on a client computer to train &lt;em&gt;bogofilter&lt;/em&gt;. This assumes that the administrator will use the client computer to review &lt;em&gt;spamassassin&lt;/em&gt;&#39;s classification decisions and deem missed email as spam where appropriate. Any unread email found in &lt;em&gt;spam-samples&lt;/em&gt; was placed there as a result of automatic (&lt;em&gt;spamassassin&lt;/em&gt; or &lt;em&gt;bogofilter&lt;/em&gt;) classification; read mail was either hand-classified or manually reviewed. The efficacy of this technique requires that the administrator&#39;s spam resemble each user&#39;s spam.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install and configure &lt;a href=&#34;../herald/&#34;&gt;Postfix and bogofilter&lt;/a&gt; on your mail server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;spamassassin&lt;/code&gt; and &lt;code&gt;mutt&lt;/code&gt; on a client machine to continuously train &lt;code&gt;bogofilter&lt;/code&gt;:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure &lt;code&gt;spamassassin&lt;/code&gt;:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;required_hits 3.5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;report_safe 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Configure &lt;code&gt;procmail&lt;/code&gt; to filter incoming mail using &lt;code&gt;spamassassin&lt;/code&gt; and to move the email classified as spam to the folder &lt;code&gt;spam-samples&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:0:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* ^X-Bogosity: (Spam|Yes)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$MAILDIR/spam-samples
&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;# Process with spamassassin unless too big.   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:0fw: spamassassin.lock
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* &amp;lt; 1048576   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;| spamassassin                           
&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;# Dump spamassassin spam in spam-samples.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:0:                  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* ^X-Spam-Status: Yes            
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$MAILDIR/spam-samples
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Add a cronjob to analyze &lt;code&gt;spam-samples&lt;/code&gt; using &lt;code&gt;bogofilter&lt;/code&gt; and install the resulting &lt;code&gt;wordlist.db&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0	0	*	*	*	rm -f ~/mail/wordlist.db
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;amp;&amp;amp; grep -av &amp;#39;\(^X-Spam[^ ]*:\|^X-Bogosity:\)&amp;#39; ~/mail/spam-samples | bogofilter -d ~/mail -M -s
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;amp;&amp;amp; grep -av &amp;#39;\(^X-Spam[^ ]*:\|^X-Bogosity:\)&amp;#39; ~/mail/ham-samples  | bogofilter -d ~/mail -M -n
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;amp;&amp;amp; scp ~/mail/wordlist.db root@example.com:/etc/bogofilter/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Configure &lt;em&gt;mutt&lt;/em&gt; with hotkeys which manually characterize email as spam or ham and spam index highlights:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color index black brightred &amp;#39;~h &amp;#34;X-Spam-Flag: YES&amp;#34;&amp;#39;    # Spamassassin.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;color index black brightyellow &amp;#39;~h &amp;#34;X-Bogosity: Spam&amp;#34;&amp;#39; # Bogofilter.
&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;macro index S &amp;#34;\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;enter-command&amp;gt;set resolve=no&amp;lt;enter&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;clear-flag&amp;gt;N\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;enter-command&amp;gt;set resolve=yes&amp;lt;enter&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;save-message&amp;amp;gt;=spam-samples&amp;lt;enter&amp;gt;&amp;lt;enter&amp;gt;&amp;#34; &amp;#34;Save to spam-samples&amp;#34;
&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;macro pager S &amp;#34;\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;enter-command&amp;gt;set resolve=no&amp;lt;enter&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;clear-flag&amp;gt;N\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;enter-command&amp;gt;set resolve=yes&amp;lt;enter&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;save-message&amp;gt;=spam-samples&amp;lt;enter&amp;gt;&amp;lt;enter&amp;gt;&amp;#34; &amp;#34;Save to spam-samples&amp;#34;
&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;macro index H &amp;#34;\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;enter-command&amp;gt;set my_resolve=\$resolve resolve=no&amp;lt;enter&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;copy-message&amp;gt;=ham-samples&amp;lt;enter&amp;gt;&amp;lt;enter&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;enter-command&amp;gt;set resolve=\$my_resolve&amp;lt;enter&amp;gt;&amp;#34; &amp;#34;Copy to ham-samples&amp;#34;
&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;macro pager H &amp;#34;\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;enter-command&amp;gt;set my_resolve=\$resolve resolve=no&amp;lt;enter&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;copy-message&amp;gt;=ham-samples&amp;lt;enter&amp;gt;&amp;lt;enter&amp;gt;\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;enter-command&amp;gt;set resolve=\$my_resolve&amp;lt;enter&amp;gt;&amp;#34; &amp;#34;Copy to ham-samples&amp;#34;
&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;macro index B &amp;#34;&amp;amp;lt;shell-escape&amp;amp;gt;rm -f ~/mail/wordlist.db
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;amp;&amp;amp; grep -av &amp;#39;\\(\^X-Spam[^ ]*:\\|\^X-Bogosity:\\)&amp;#39; ~/mail/spam-samples | bogofilter -d ~/mail -M -s\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;amp;&amp;amp; grep -av &amp;#39;\\(\^X-Spam[^ ]*:\\|\^X-Bogosity:\\)&amp;#39; ~/mail/ham-samples  | bogofilter -d ~/mail -M -n\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;amp;&amp;amp; scp ~/mail/wordlist.db root@www.flyn.org:/etc/bogofilter/&amp;amp;lt;enter&amp;amp;gt;&amp;#34; &amp;#34;Push bogofilter samples&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>speak</title>
      <link>https://www.flyn.org/projects/speak/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/speak/</guid>
      <description>&lt;p&gt;Speak provides a simple interface to
&lt;a href=&#34;http://www.cstr.ed.ac.uk/projects/festival/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Festival&lt;/a&gt;, a
speech synthesis package. The script attempts to detect when
&lt;a href=&#34;http://www.tux.org/~ricdude/EsounD.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;EsounD&lt;/a&gt; is running and takes
advantage of it.  Otherwise, speak uses the computer&#39;s sound device
directly.  Speak can be used for tasks such as reading incoming email.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;speak.i386.rpm&#34;&gt;speak.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;speak.tar.gz&#34;&gt;speak.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;speak-0.0.1.tar.gz&#34;&gt;speak-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;speak-0.0.1-1.i386.rpm&#34;&gt;speak-0.0.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;speak-0.0.2.tar.gz&#34;&gt;speak-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;speak-0.0.2-1.i386.rpm&#34;&gt;speak-0.0.2-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	




</description>
    </item>
    
    <item>
      <title>Sprite</title>
      <link>https://www.flyn.org/notes/sprite/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/sprite/</guid>
      <description>&lt;p&gt;This document describes how to build Sprite, a home entertainment system.&lt;/p&gt;
&lt;p&gt;Sprite is designed to run on a Zotac ZBOX Blu-ray, which provides the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1.8GHz Intel Atom processor&lt;/li&gt;
&lt;li&gt;2GB memory&lt;/li&gt;
&lt;li&gt;Bluray/DVD player&lt;/li&gt;
&lt;li&gt;WiFi and Ethernet network interfaces&lt;/li&gt;
&lt;li&gt;HDMI audio/video output&lt;/li&gt;
&lt;li&gt;USB ports (Only the front-left USB port works with the ZBOX BIOS during the initial stages of booting.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sprite also makes use of two SNES-style USB joypads and a Rii mini wireless keyboard with touchpad.&lt;/p&gt;
&lt;p&gt;Follow the instructions below to build Sprite:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install Fedora using a CD-ROM containing a disk image such as Fedora-20-x86_64-netinst.iso.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;During installation, create a 2GB swap partition and a / partition that spans the rest of the disk.&lt;/li&gt;
&lt;li&gt;Create a user named sprite.&lt;/li&gt;
&lt;li&gt;Install the minimum set of packages.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Use &lt;code&gt;rpm -e&lt;/code&gt; to remove any unnecessary packages.&lt;/li&gt;
&lt;li&gt;Use&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;rpm&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Uvh&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;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;download1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rpmfusion&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;free&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fedora&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rpmfusion&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;free&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;release&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;20.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;noarch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rpm&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;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;download1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rpmfusion&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nonfree&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fedora&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rpmfusion&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nonfree&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;release&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;20.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;noarch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rpm&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;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rpm&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;livna&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;livna&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;release&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rpm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;to install the RPM Fusion and livna repositories.
4. Install the required packages using&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum install \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	ConsoleKit \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	gdm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	kernel-modules-extra \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	mesa-dri-drivers \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	xorg-x11-drv-nouveau \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	xorg-x11-drv-evdev \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	libdvdcss \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	nfs-utils \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	nss-mdns \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Nestopia \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	snes9x \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	xbmc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Configure Sprite to boot in graphical mode: &lt;code&gt;ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install your public SSH key as &lt;code&gt;/root/.ssh/authorized_keys&lt;/code&gt; and configure sshd to disallow password-based logins by editing &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/sysconfig/network-scripts/ifcfg-Auto_ExampleCom&lt;/code&gt; (replace &lt;code&gt;ExampleCom&lt;/code&gt;, &lt;code&gt;UUID&lt;/code&gt; [&lt;code&gt;uuidgen&lt;/code&gt;], and &lt;code&gt;MACADDRESS&lt;/code&gt; [&lt;code&gt;ip link&lt;/code&gt;]):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ESSID=&amp;#34;ExampleCom&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODE=Managed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;KEY_MGMT=WPA-PSK
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TYPE=Wireless
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;BOOTPROTO=dhcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DEFROUTE=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IPV4_FAILURE_FATAL=no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IPV6INIT=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IPV6_AUTOCONF=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IPV6_DEFROUTE=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IPV6_FAILURE_FATAL=no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAME=&amp;#34;Auto ExampleCom&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UUID=UUID
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ONBOOT=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HWADDR=MACADDRESS
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WPA_ALLOW_WPA=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WPA_ALLOW_WPA2=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PEERDNS=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PEERROUTES=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IPV6_PEERDNS=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IPV6_PEERROUTES=yes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;8&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/sysconfig/network-scripts/keys-Auto_ExampleCom&lt;/code&gt; (replace &lt;code&gt;ExampleCom&lt;/code&gt; and &lt;code&gt;PSK&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WPA_PSK=&amp;#39;PSK&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;9&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/hostname&lt;/code&gt; (replace &lt;code&gt;example.com&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sprite.example.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;10&#34;&gt;
&lt;li&gt;&lt;code&gt;/etc/sysconfig/network&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NETWORKING=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NETWORKWAIT=1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;11&#34;&gt;
&lt;li&gt;&lt;code&gt;/home/sprite/.snes9x/snes9x.xml&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34;?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;snes9x&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &amp;lt;preferences&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;default_esc_behavior&amp;#34; value=&amp;#34;2&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;hires_effect&amp;#34; value=&amp;#34;0&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;full_screen_on_open&amp;#34; value=&amp;#34;1&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;video_mode_width&amp;#34; value=&amp;#34;1920&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;video_mode_height&amp;#34; value=&amp;#34;1080&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;window_width&amp;#34; value=&amp;#34;1920&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;window_height&amp;#34; value=&amp;#34;1080&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;prevent_screensaver&amp;#34; value=&amp;#34;1&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;aspect_ratio&amp;#34; value=&amp;#34;1&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;maintain_aspect_ratio&amp;#34; value=&amp;#34;1&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;ui_visible&amp;#34; value=&amp;#34;0&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;statusbar_visible&amp;#34; value=&amp;#34;0&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;modal_dialogs&amp;#34; value=&amp;#34;1&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;sync_to_vblank&amp;#34; value=&amp;#34;1&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;joystick_threshold&amp;#34; value=&amp;#34;40&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;sound_buffer_size&amp;#34; value=&amp;#34;32&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;sound_driver&amp;#34; value=&amp;#34;0&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;sound_input_rate&amp;#34; value=&amp;#34;31950&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;sound_sync&amp;#34; value=&amp;#34;1&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;transparency&amp;#34; value=&amp;#34;1&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;frameskip&amp;#34; value=&amp;#34;200&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;16bit_sound&amp;#34; value=&amp;#34;1&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;stereo&amp;#34; value=&amp;#34;1&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;playback_rate&amp;#34; value=&amp;#34;5&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;block_invalid_vram_access&amp;#34; value=&amp;#34;1&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;option name=&amp;#34;sram_directory&amp;#34; value=&amp;#34;/home/sprite/.snes9x&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &amp;lt;/preferences&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &amp;lt;controls&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;calibration joystick=&amp;#34;0&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;axis number=&amp;#34;0&amp;#34; min=&amp;#34;-32767&amp;#34; max=&amp;#34;32767&amp;#34; center=&amp;#34;0&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;axis number=&amp;#34;1&amp;#34; min=&amp;#34;-32767&amp;#34; max=&amp;#34;32767&amp;#34; center=&amp;#34;0&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/calibration&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;calibration joystick=&amp;#34;1&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;axis number=&amp;#34;0&amp;#34; min=&amp;#34;-32767&amp;#34; max=&amp;#34;32767&amp;#34; center=&amp;#34;0&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;axis number=&amp;#34;1&amp;#34; min=&amp;#34;-32767&amp;#34; max=&amp;#34;32767&amp;#34; center=&amp;#34;0&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/calibration&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;joypad number=&amp;#34;0&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Up&amp;#34; binding=&amp;#34;556270082&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Down&amp;#34; binding=&amp;#34;556270083&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Left&amp;#34; binding=&amp;#34;556270080&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Right&amp;#34; binding=&amp;#34;556270081&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Start&amp;#34; binding=&amp;#34;553648135&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Select&amp;#34; binding=&amp;#34;553648134&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;A&amp;#34; binding=&amp;#34;553648129&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;B&amp;#34; binding=&amp;#34;553648128&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;X&amp;#34; binding=&amp;#34;553648131&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Y&amp;#34; binding=&amp;#34;553648130&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;L&amp;#34; binding=&amp;#34;553648132&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;R&amp;#34; binding=&amp;#34;553648133&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/joypad&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;joypad number=&amp;#34;1&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Up&amp;#34; binding=&amp;#34;573047298&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Down&amp;#34; binding=&amp;#34;573047299&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Left&amp;#34; binding=&amp;#34;573047296&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Right&amp;#34; binding=&amp;#34;573047297&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Start&amp;#34; binding=&amp;#34;570425351&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Select&amp;#34; binding=&amp;#34;570425350&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;A&amp;#34; binding=&amp;#34;570425345&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;B&amp;#34; binding=&amp;#34;570425344&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;X&amp;#34; binding=&amp;#34;570425347&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;Y&amp;#34; binding=&amp;#34;570425346&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;L&amp;#34; binding=&amp;#34;570425348&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &amp;lt;binding name=&amp;#34;R&amp;#34; binding=&amp;#34;570425349&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/joypad&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &amp;lt;/controls&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/snes9x&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;12&#34;&gt;
&lt;li&gt;The first time you run Nestopia, perform the following configurations using a mouse:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;escape&lt;/code&gt; to display Nestopia&amp;rsquo;s menu bar.&lt;/li&gt;
&lt;li&gt;Configure Nestopia to use joypads for input.&lt;/li&gt;
&lt;li&gt;Configure Nestopia to start in fullscreen mode.&lt;/li&gt;
&lt;li&gt;Set the audio output to SDL.&lt;/li&gt;
&lt;li&gt;After quitting Nestopia, edit &lt;code&gt;/home/sprite/.nestopia/nstcontrols&lt;/code&gt; and replace the line &lt;code&gt;STOP _ESCAPE&lt;/code&gt; with &lt;code&gt;EXIT _ESCAPE&lt;/code&gt;. From this point on, you can access the Nestopia menu by pressing &lt;code&gt;f&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Modify &lt;code&gt;/etc/asound.conf&lt;/code&gt; so that the HDMI sound device is the default:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;defaults.ctl.card	1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;defaults.pcm.card	1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;defaults.pcm.device	7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;defaults.timer.card	1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;XBMC&amp;rsquo;s default behavior allows the use of the backslash key to toggle full-screen mode, but this is rarely useful.
Copy &lt;code&gt;/usr/share/xbmc/system/keymaps/keyboard.xml&lt;/code&gt; to &lt;code&gt;/home/sprite/.xbmc/userdata/keymaps/&lt;/code&gt;,
and edit the file to replace &lt;code&gt;&amp;lt;backslash&amp;gt;ToggleFullScreen&amp;lt;/backslash&amp;gt;&lt;/code&gt; with &lt;code&gt;&amp;lt;backslash&amp;gt;OSD&amp;lt;/backslash&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Using XBMC, perform the following configuration:
&lt;ul&gt;
&lt;li&gt;Install video add-ons (e.g., select &lt;code&gt;System&lt;/code&gt;→&lt;code&gt;Add-ons&lt;/code&gt;→&lt;code&gt;Get Add-ons&lt;/code&gt;→&lt;code&gt;XMBC.org Add-ons&lt;/code&gt;→&lt;code&gt;Video Add-ons&lt;/code&gt;→&lt;code&gt;USTV VoD&lt;/code&gt;→&lt;code&gt;Install&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Install the Rom Collection Browser (i.e., select &lt;code&gt;System&lt;/code&gt;→&lt;code&gt;Add-ons&lt;/code&gt;→&lt;code&gt;Get Add-ons&lt;/code&gt;→&lt;code&gt;XMBC.org Add-ons&lt;/code&gt;→&lt;code&gt;Program Add-ons&lt;/code&gt;→&lt;code&gt;Rom Collection Browser&lt;/code&gt;→&lt;code&gt;Install&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Configure the Rom Collection Browser (i.e., select &lt;code&gt;Programs&lt;/code&gt;→&lt;code&gt;Rom Collection Browser&lt;/code&gt;):
&lt;ul&gt;
&lt;li&gt;Create configuration: &lt;code&gt;yes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Scrape game information and artwork online&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Choose a platform: &lt;code&gt;NES&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Path to NES emulator: &lt;code&gt;/usr/bin/nestopia&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Emulator parameters: &lt;code&gt;&amp;quot;%ROM%&amp;quot;&lt;/code&gt; (default)&lt;/li&gt;
&lt;li&gt;Path to NES ROMs: &lt;code&gt;...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;File mask: &lt;code&gt;*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;NES artwork: &lt;code&gt;/home/sprite/NES&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Turn off the RSS feed ticker (i.e., deactivate &lt;code&gt;System&lt;/code&gt;→&lt;code&gt;Appearance&lt;/code&gt;→&lt;code&gt;Show RSS news feeds&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>spruce-0.5.9-fetchmail</title>
      <link>https://www.flyn.org/patches/spruce-0.5.9-fetchmail/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/spruce-0.5.9-fetchmail/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;spruce-0.5.9-fetchmail.patch.gz&#34;&gt;spruce-0.5.9-fetchmail&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Jeffrey Stedfast&#39;s &lt;a href=&#34;http://spruce.sourceforge.net/&#34;&gt;
Spruce&lt;/a&gt; email
client.  This patch allows one to use the external program &lt;a href=&#34;http://fetchmail.berlios.de/&#34;&gt;fetchmail&lt;/a&gt;
to retrieve one&#39;s mail when &lt;a
href=&#34;http://spruce.sourceforge.net/&#34;&gt;
Spruce&lt;/a&gt;&#39;s Check
button is pressed.  Once the patch is applied, look for
the Use External Fetchmail Program
check button under the accounts tab of the options menu.  &lt;a href=&#34;http://fetchmail.berlios.de/&#34;&gt;Fetchmail&lt;/a&gt;
has a few added benefits, such as allowing one to
encrypt a connection to a pop server using &lt;a href=&#34;http://www.openssh.org/&#34;&gt;ssh&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>spruce-0.5.9-metamail</title>
      <link>https://www.flyn.org/patches/spruce-0.5.9-metamail/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/spruce-0.5.9-metamail/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;spruce-0.5.9-metamail.patch.gz&#34;&gt;spruce-0.5.9-metamail&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Another patch for &lt;a
href=&#34;http://spruce.sourceforge.net/&#34;&gt;
Spruce&lt;/a&gt;.  This patch allows MIME encoded
attachments to be displayed using metamail.
Look for the Display item in the
Attachments menu.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>swap</title>
      <link>https://www.flyn.org/abandoned/swap/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/swap/</guid>
      <description>&lt;p&gt;Swap allows one to easily change CD-ROM media with one command or
click.  Issuing the command swap unmounts a device, ejects the
media, waits for the drive to close, and mounts the new media.  Also
included is a C library which gives the programmer access to swap&#39;s
functionality.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>Tracker</title>
      <link>https://www.flyn.org/notes/tracker/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/tracker/</guid>
      <description>&lt;p&gt;Tracker stores information about your files, and makes this information available to applications.&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;kbd&gt;tracker-control&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Show the current status of tracker, including its store and miners.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;tracker-control -s&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Start the tracker miners, which collect information about your files.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;tracker-control -l&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;List the miners that are running.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;tracker-control -a&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;List the miners preset on the system whether they are running or not.&lt;/dd&gt;
&lt;/dl&gt;
</description>
    </item>
    
    <item>
      <title>TunesConvert</title>
      <link>https://www.flyn.org/projects/TunesConvert/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/TunesConvert/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;TunesConvert is a simple utility that converts an iTunes library into
audio files encoded using FLAC. This allows you to move iTunes music to
non-Apple devices. TunesConvert is not able to transcode files protected
with DRM.  For information about iTunes DRM, see &lt;a href=&#34;http://support.apple.com/kb/HT1711&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;the support
page&lt;/a&gt; on the issue.&lt;/p&gt;
&lt;p&gt;TunesConvert uses the GStreamer media framework and relies on plugins
provided by the following packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gstreamer&lt;/li&gt;
&lt;li&gt;gst-plugins-base&lt;/li&gt;
&lt;li&gt;gst-plugins-good&lt;/li&gt;
&lt;li&gt;gst-plugins-bad&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Run TunesConvert, select an output directory, and press “Transcode”.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;TunesConvert-0.0.1.tar.gz&#34;&gt;TunesConvert-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	




</description>
    </item>
    
    <item>
      <title>tuxnes-0.75-sdl</title>
      <link>https://www.flyn.org/patches/tuxnes-0.75-sdl/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/tuxnes-0.75-sdl/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;tuxnes-0.75-sdl.patch.gz&#34;&gt;tuxnes-0.75-sdl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Development of &lt;a href=&#34;http://tuxnes.sourceforge.net/&#34;&gt;TuxNES&lt;/a&gt;
is now performed using &lt;a href=&#34;http://www.sourceforge.net&#34;&gt;SourceForge&lt;/a&gt;.
I have been given write access to the project&#39;s CVS tree, so you can
get my contributions there.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>util-linux-2.11z-mountpoint</title>
      <link>https://www.flyn.org/patches/util-linux-2.11z-mountpoint/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/util-linux-2.11z-mountpoint/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;util-linux-2.11z-mountpoint.patch.gz&#34;&gt;util-linux-2.11z-mountpoint&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for util-linux that fixes umount&#39;s behavior when dealing with
volumes remounted using &amp;ndash;bind.  When looking up data in /etc/mtab
in order to unmount a volume, any mnt_dir match should take priority
because unmounting by fsname is obsolete.  Otherwise unmounting a volume
that was also mounted with &amp;ndash;bind will misbehave (Parent&#39;s mnt_dir is
child&#39;s mnt_fsname).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Virtualization</title>
      <link>https://www.flyn.org/notes/virtualization/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/virtualization/</guid>
      <description>&lt;h2 id=&#34;platform-virtualization&#34;&gt;Platform virtualization&lt;/h2&gt;
&lt;h3 id=&#34;software-based-virtualization-simulation&#34;&gt;Software-based virtualization (simulation)&lt;/h3&gt;
&lt;p&gt;Create an empty disk image and then install Fedora onto it, running the procedure in a qemu simulator:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ qemu-img create -f qcow2 disk.qcow2 4G
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ qemu-system-x86_64 -hda disk.qcow2 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	-cdrom Fedora-20-x86_64-netinst.iso \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	-boot d \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	-net nic \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	-net user \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	-m 1024
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To accelerate qemu when virtualizing the same platform as the
host, first use &lt;code&gt;modprobe&lt;/code&gt; to install the appropriate KVM
modules, and then add the &lt;code&gt;--enable-kvm&lt;/code&gt; option to the
&lt;code&gt;qemu-system-x86_64&lt;/code&gt; command above.&lt;/p&gt;
&lt;p&gt;You might want to run qemu with &lt;code&gt;-nographic&lt;/code&gt;
when running on a computer with no graphical console.
For this to work, the hosted kernel must use the serial device
as its console.
You can arrange for this by passing &lt;code&gt;console=ttyS0&lt;/code&gt;
on the hosted kernel&amp;rsquo;s command line,
likely by editing your bootloader&amp;rsquo;s configuration.&lt;/p&gt;
&lt;p&gt;You can also set the host&amp;rsquo;s MAC address by using &lt;code&gt;-net nic,macaddr=aa:bb:cc:dd:ee:ff&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Another option allows you to configure a network between two QEMU hosts without root access on the host running QEMU.
Start one host with &lt;code&gt;-device e1000,netdev=n1,mac=52:54:00:12:34:56 -netdev socket,id=n1,listen=:1024&lt;/code&gt;,
and start another with &lt;code&gt;-device e1000,netdev=n1,mac=52:54:00:12:34:57 -netdev socket,id=n1,connect=:1024&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&#34;simulating-other-architectures&#34;&gt;Simulating other architectures&lt;/h4&gt;
&lt;p&gt;Qemu can simulate one architecture on another. For example, qemu can facilitate experimenting with the RISC-V
architecture on an AMD64 computer. Fedora provides RISC-V kernels and disk images that are suitable for running in
qemu at &lt;a href=&#34;https://dl.fedoraproject.org/pub/alt/risc-v/repo/virt-builder-images/images/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://dl.fedoraproject.org/pub/alt/risc-v/repo/virt-builder-images/images/&lt;/a&gt;. After gathering and uncompressing a related pair of .elf and .raw files, you can boot them using qemu by running:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ qemu-system-riscv64 -nographic \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -machine virt \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -smp 4 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -m 4G \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -kernel riscv.elf \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -bios none \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -object rng-random,filename=/dev/urandom,id=rng0 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -device virtio-rng-device,rng=rng0 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -device virtio-blk-device,drive=hd0 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -drive file=riscv.raw,format=raw,id=hd0 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -device virtio-net-device,netdev=usernet \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -netdev user,id=usernet,hostfwd=tcp::10000-:22
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(Replace &lt;code&gt;riscv.elf&lt;/code&gt; and &lt;code&gt;riscv.raw&lt;/code&gt; with the name of the files you downloaded.)&lt;/p&gt;
&lt;h4 id=&#34;real-networking-in-qemu&#34;&gt;“Real” networking in qemu&lt;/h4&gt;
&lt;p&gt;Qemu can easily simulate a network connection in userspace with the help of the host computer,
but this approach has limitations.
Sometimes it is helpful to tie the simulated computer&amp;rsquo;s network adapter into
the host computer kernel&amp;rsquo;s view of networking. This is done using bridge and tap interfaces.
Assuming the host computer uses NetworkManager, define a bridge interface by creating a file such as
&lt;code&gt;/etc/NetworkManager/system-connections/br0.nmconnection&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[connection]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;id=br0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;type=bridge
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;interface-name=br0
&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;[bridge]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stp=false
&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;[ipv4]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;method=auto
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ensure &lt;code&gt;/etc/NetworkManager/system-connections/br0.nmconnection&lt;/code&gt; is readable only by root.
Next, configure a physical interface to be a member of the bridge, such as by editing &lt;code&gt;/etc/NetworkManager/system-connections/enp3s0f0.nmconnection&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[connection]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;id=enp3s0f0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;type=ethernet
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;interface-name=enp3s0f0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;master=br0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;slave-type=bridge
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this way, the bridge can obtain an IPv4 address through the physical interface, which is defined
to be a member of the bridge.&lt;/p&gt;
&lt;p&gt;Next, create a tap interface for the simulated host, and add it to the bridge by running these commands:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ tunctl -t tap0 -u root
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ brctl addif br0 tap0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ifconfig tap0 up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finally, start the simulated host and associate the host with the tab device by running:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ qemu-system-riscv64 -nographic \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -machine virt \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -smp 4 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -m 4G \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -kernel riscv.elf \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -bios none \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -object rng-random,filename=/dev/urandom,id=rng0 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -device virtio-rng-device,rng=rng0 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -device virtio-blk-device,drive=hd0 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -drive file=riscv.raw,format=raw,id=hd0 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -device e1000,netdev=net0,mac=aa:bb:cc:dd:ee:ff \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -device tap,id=net0,ifname=tap0,script=no,downscript=no
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Notice the &lt;code&gt;-device&lt;/code&gt; and &lt;code&gt;-netdev&lt;/code&gt; options have changed from the earlier example.&lt;/p&gt;
&lt;h3 id=&#34;xen&#34;&gt;Xen&lt;/h3&gt;
&lt;h4 id=&#34;running-openwrt-as-a-xen-hvm-domu-guest&#34;&gt;Running OpenWrt as a Xen HVM DomU guest&lt;/h4&gt;
&lt;p&gt;The following Xen DomU configuration defines a guest named &lt;code&gt;OpenWrt&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name    = &amp;#34;OpenWrt&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;memory  =  1024
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vcpus   =  1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;builder = &amp;#34;hvm&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vif     = [ &amp;#34;model=e1000,script=vif-bridge&amp;#34; ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;disk    = [ &amp;#34;tap2:tapdisk:aio:/path/to/openwrt-x86-generic-combined-ext4.img,xvda,w&amp;#34; ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;serial  = &amp;#34;pty&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To select a network bridge on a host which has configured more than one,
add a statement of the form &lt;code&gt;bridge=brname&lt;/code&gt; to the list of network parameters.
To hard-code an Ethernet MAC, add &lt;code&gt;mac=mac&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&#34;running-centos-as-a-xen-hvm-domu-guest&#34;&gt;Running CentOS as a Xen HVM DomU guest&lt;/h4&gt;
&lt;p&gt;The following Xen DomU configuration defines a guest named &lt;code&gt;CentOS&lt;/code&gt;, which includes an SDL-based graphics console:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name    = &amp;#34;CentOS&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;memory  =  4096
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vcpus   =  1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;builder = &amp;#34;hvm&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vif     = [ &amp;#34;model=e1000,script=vif-bridge&amp;#34; ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;disk    = [ &amp;#34;tap2:tapdisk:aio:/path/to/disk.img,xvda,w&amp;#34; ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;serial  = &amp;#34;pty&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sdl     = 1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you click on the SDL window, then the Xen interface will capture your mouse. To release the mouse, press &lt;code&gt;Ctrl-Alt&lt;/code&gt;.
&lt;code&gt;Ctl-Alt-f&lt;/code&gt; will enter or leave full screen mode. Alternatively, you can omit &lt;code&gt;sdl = 1&lt;/code&gt; and configure GRUB to boot the Linux
kernel with &lt;code&gt;console=ttyS0&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&#34;running-openbsd-as-a-xen-hvm-domu-guest&#34;&gt;Running OpenBSD as a Xen HVM DomU guest&lt;/h4&gt;
&lt;p&gt;The following Xen DomU configuration defines a guest named &lt;code&gt;OpenBSD&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name    = &amp;#34;OpenBSD&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;memory  =  4096
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vcpus   =  1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;builder = &amp;#34;hvm&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vif     = [ &amp;#34;model=e1000,script=vif-bridge&amp;#34; ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;disk    = [ &amp;#34;tap2:tapdisk:aio:/path/to/disk.img,xvda,w&amp;#34; ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;serial  = &amp;#34;pty&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sdl     = 1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See the description of CentOS above for how to use the SDL console.
Alternatively, you can omit &lt;code&gt;sdl = 1&lt;/code&gt; and configure OpenBSD to use a serial console.
To do this,
add &lt;code&gt;tty00 &amp;quot;/usr/libexec/getty std.9600&amp;quot; vt220 on secure&lt;/code&gt; to &lt;code&gt;/etc/ttys&lt;/code&gt;
and add:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stty com0 19200
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set tty com0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;to &lt;code&gt;/etc/boot.conf&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&#34;networking&#34;&gt;Networking&lt;/h4&gt;
&lt;p&gt;The Xen domain configurations above assume bridged networking. This requires
some configuration on the host. The examples here assume the use of NetworkManager.&lt;/p&gt;
&lt;h5 id=&#34;bridged&#34;&gt;Bridged&lt;/h5&gt;
&lt;p&gt;You can set up a network bridge by placing the following in Dom0&amp;rsquo;s &lt;code&gt;/etc/sysconfig/network-scripts/ifcfg-xenbr0&lt;/code&gt;:
Define a bridge interface by creating a file such as &lt;code&gt;/etc/NetworkManager/system-connections/xenbr0.nmconnection&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[connection]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;id=xenbr0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;type=bridge
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;interface-name=xenbr1
&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;[ipv4]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;method=auto
&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;[ipv6]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dhcp-iaid=mac
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;method=auto
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace the use of &lt;code&gt;method=auto&lt;/code&gt; with &lt;code&gt;method=link-local&lt;/code&gt; if you do not want the Dom0 host to obtain an IP address.&lt;/p&gt;
&lt;p&gt;Associate an physical interface with the bridge,
for example by creating &lt;code&gt;/etc/NetworkManager/system-connections/bridge-slave-eno1.nmconnection&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[connection]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;id=bridge-slave-eno1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;type=ethernet
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;interface-name=eno1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;master=xenbr0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;slave-type=bridge
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;nat&#34;&gt;NAT&lt;/h5&gt;
&lt;p&gt;Alternatively, you can configure a Xen guest to connect to a network
through Dom0 with Dom0 acting as a NAT router.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Configure the guest with &lt;code&gt;vif = [ &amp;quot;model=e1000,script=vif-nat,ip=10.0.0.1/32,gatewaydev=INTERFACE&amp;quot; ]&lt;/code&gt;, where &lt;code&gt;INTERFACE&lt;/code&gt; is the network interface which links to your default Internet router.&lt;/li&gt;
&lt;li&gt;Add the following to &lt;code&gt;/etc/sysctl.conf&lt;/code&gt; on Dom0: &lt;code&gt;net.ipv4.ip_forward=1&lt;/code&gt; and run &lt;code&gt;sysctl -p1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;iptables -t nat -A POSTROUTING -o INTERFACE -j MASQUERADE&lt;/code&gt;, where &lt;code&gt;INTERFACE&lt;/code&gt; is the interface from step one.
(If you use firewalld, then run &lt;code&gt;firewall-cmd --add-masquerade&lt;/code&gt; instead.)&lt;/li&gt;
&lt;li&gt;Boot the guest and configure its IP address as 10.0.0.1, its default gateway to 10.0.0.129 (Dom0&amp;rsquo;s virtual interface), and its DNS resolver to a valid server.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;boot-from-an-installation-cd-rom&#34;&gt;Boot from an installation CD-ROM&lt;/h4&gt;
&lt;p&gt;Add the following to your Xen DomU guest configuration:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;disk = [ &amp;#34;tap2:tapdisk:aio:/path/to/cdrom.iso,hdc:cdrom,r&amp;#34; ]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You might want to instead add this statement to an existing disk list, as his will provide access to both the virtual CD-ROM and disk.&lt;/p&gt;
&lt;h4 id=&#34;pass-an-entire-logical-volume-into-a-xen-guest&#34;&gt;Pass an entire logical volume into a Xen guest&lt;/h4&gt;
&lt;p&gt;If you have an entire logical volume on Dom0 set aside for the guest, then you can pass it to the guest with the following configuration fragment:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;disk = [ &amp;#34;phy:/dev/mapper/lv-name,xvdb,w&amp;#34; ]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;pass-a-usb-device-into-a-xen-guest&#34;&gt;Pass a USB device into a Xen guest&lt;/h4&gt;
&lt;p&gt;Add the following to your Xen DomU guest configuration:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;usb       = 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;usbdevice = &amp;#34;host:xxxx:yyyy&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;or&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;usb       = 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;usbdevice = &amp;#34;host:x.y&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the first example, &lt;code&gt;xxxx:xxxx&lt;/code&gt; represents the USB device&amp;rsquo;s tag.
In the second example, &lt;code&gt;x.y&lt;/code&gt; represents the USB device&amp;rsquo;s bus address.
You can learn these identifiers by using &lt;code&gt;lsusb&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&#34;ensuring-domu-virtual-machines-start-after-booting-dom0&#34;&gt;Ensuring DomU virtual machines start after booting Dom0&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Place the configurations which you want to start upon booting in &lt;code&gt;/etc/xen/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Make a symlink for each configuration from &lt;code&gt;/etc/xen/&lt;/code&gt; to &lt;code&gt;/etc/xen/auto/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;systemctl enable xendomains&lt;/code&gt; to ensure the xendomains script executes when Dom0 boots.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;openstack&#34;&gt;OpenStack&lt;/h3&gt;
&lt;h4 id=&#34;extracting-a-disk-image-that-can-be-imported-into-other-virtualization-platforms&#34;&gt;Extracting a disk image that can be imported into other virtualization platforms&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Generate a snapshot of a running instance.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;glance image-list&lt;/code&gt; to find the identifier of the snapshot you want to extract.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;glance image-download ID --file FILENAME.qcow2&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;create-an-openstack-image-from-an-image-on-disk&#34;&gt;Create an OpenStack image from an image on disk&lt;/h4&gt;
&lt;p&gt;In order for a disk image to interact fully with OpenStack it must contain a few utilities.
On Fedora, the &lt;code&gt;acpid&lt;/code&gt;, &lt;code&gt;cloud-init&lt;/code&gt;, and &lt;code&gt;cloud-utils-growpart&lt;/code&gt; packages provide them.
Enable the acpid service, edit &lt;code&gt;/etc/cloud/cloud.cfg&lt;/code&gt; accordingly (pay attention to the default username), and add
&lt;code&gt;NOZEROCONF=yes&lt;/code&gt; to &lt;code&gt;/etc/sysconfig/network&lt;/code&gt;. Also ensure a SSH server is present.&lt;/p&gt;
&lt;p&gt;Additionally, the disk image must include the virtual I/O drivers in its initial ramdisk.
Edit &lt;code&gt;/etc/dracut.conf.d/openstack.conf&lt;/code&gt;, and add &lt;code&gt;add_drivers=&amp;quot;virtio_blk virtio_gpu&amp;quot;&lt;/code&gt;.
Run &lt;code&gt;dracut --regenerate-all --force&lt;/code&gt; on the computer to update its existing initial ramdisks
to reflect this.
You can inspect an initial ramdisk by running &lt;code&gt;lsinitrd /boot/initramfs-VERSION.img&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To load the image into OpenStack,
run &lt;code&gt;glance image-create --name NAME --visibility=private --disk-format=qcow2 --container-format=bare --file=IMAGE-FILE.qcow2&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&#34;manage-openstack-quotas&#34;&gt;Manage OpenStack quotas&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;View quotas for a project using &lt;code&gt;openstack quota show $(openstack project show -f value -c id PROJECT)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set a quota using &lt;code&gt;openstack quota set --QUOTANAME N $(openstack project show -f value -c id PROJECT)&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;general-openstack-management&#34;&gt;General OpenStack management&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;openstack server list --all-projects&lt;/code&gt; as the admin user to view all servers.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;openstack server show SERVER-ID&lt;/code&gt; to view the details about a server.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;openstack volume list --all-projects&lt;/code&gt; as the admin user to view all volumes.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;openstack server remove volume SERVER-ID VOLUME-ID&lt;/code&gt; to detach a volume from a server.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;openstack volume delete VOLUME-ID&lt;/code&gt; to delete a detached volume.&lt;/li&gt;
&lt;li&gt;Sometimes a volumes stays attached to a server that no longer exists. This command is the remedy: &lt;code&gt;cinder reset-state --attach-status detached VOLUME-ID&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;interacting-with-underlying-kvm&#34;&gt;Interacting with underlying KVM&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Lookup an instance name in OpenStack&amp;rsquo;s web UI.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;virsh list --all --uuid --name&lt;/code&gt; to discover the KVM virtual machine name that corresponds with the instance ID.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;virsh console VM-NAME&lt;/code&gt; to connect to the virtual machine&amp;rsquo;s console.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;virtualbox&#34;&gt;VirtualBox&lt;/h3&gt;
&lt;h4 id=&#34;share-a-folder-from-host-to-linux-guest&#34;&gt;Share a folder from host to Linux guest&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Select guest Settings→Shared Folders.&lt;/li&gt;
&lt;li&gt;Add the folder on your host which you would like to add to your guest; remember the folder name.&lt;/li&gt;
&lt;li&gt;Ensure VirtualBox guest addition exists on the guest.&lt;/li&gt;
&lt;li&gt;On the Linux guest, run &lt;code&gt;mount -t vboxsf folder-name mount-point&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;pass-a-usb-device-from-host-to-linux-guest&#34;&gt;Pass a USB device from host to Linux guest&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;If you need USB 2 and 3 support, then install the VirtualBox extension pack from Oracle on the host: &lt;code&gt;sudo VBoxManage extpack install path-to-extpack&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add the user running VirtualBox to the vboxusers group: &lt;code&gt;sudo gpasswd -a $USER vboxusers&lt;/code&gt;. You might need to log out and log back in for this change to take affect.&lt;/li&gt;
&lt;li&gt;After booting the guest, look for the USB icon in VirtualBox&amp;rsquo;s guest control panel at the bottom of the guest&amp;rsquo;s window. Right click on it to select a USB device to pass through.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You might want to &lt;em&gt;always&lt;/em&gt; pass a certain USB device to the guest. To do this, first identify the device&amp;rsquo;s properties using &lt;code&gt;VBoxManager list usbhost&lt;/code&gt;, and then create a filter using the interface at guest Settings→USB.&lt;/p&gt;
&lt;h3 id=&#34;disk-images&#34;&gt;Disk images&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Convert a raw disk image such that it can be used with VirtualBox or VMware:
&lt;code&gt;qemu-img convert -f raw FOO.img -O vmdk FOO.vmdk&lt;/code&gt; (This will allow the use of an OpenWrt image such as &lt;code&gt;openwrt-x86-generic-combined-ext4.img.gz&lt;/code&gt; if you uncompress it first.)&lt;/li&gt;
&lt;li&gt;Create a sparse QCOW image for use with Xen:
&lt;code&gt;qcow-create $((1024*1024)) vm-disk.qcow&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;eucalyptus&#34;&gt;Eucalyptus&lt;/h3&gt;
&lt;h4 id=&#34;administrative-commands&#34;&gt;Administrative commands&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Reset the password on a Eucalyptus account: &lt;code&gt;euare-usermodloginprofile --as-account ACCOUNT-NAME -u admin -p &amp;quot;PASSWORD&amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;List the instances: &lt;code&gt;euca-describe-instances verbose&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;List the security groups: &lt;code&gt;euca-describe-groups verbose&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;List the keypairs: &lt;code&gt;euca-describe-keypairs verbose&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;List the snapshots: &lt;code&gt;euca-describe-snapshots verbose&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;List the volumes: &lt;code&gt;euca-describe-volumes verbose&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;publishing-base-images&#34;&gt;Publishing base images&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Create a disk image containing an OS install; here we use &lt;code&gt;fedora-37.img&lt;/code&gt; as an example.&lt;/li&gt;
&lt;li&gt;With root privileges, run &lt;code&gt;euca-import-volume --format raw --availability-zone ZONE --bucket fedora-37-3gb-ebs --description &amp;quot;Fedora 37 3 GB EBS&amp;quot; fedora-37.img&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;euca-describe-conversion-tasks import-vol-ID&lt;/code&gt;, where &lt;code&gt;ID&lt;/code&gt; is the value reported by the previous step.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;euca-create-snapshot vol-ID&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;euca-register --name &amp;quot;Fedora37-3GB-EBS&amp;quot; --snapshot snap-acef31baa17c634f0 -a x86_64 --root-device-name /dev/sda --description &amp;quot;Fedora 37 3 GB EBS&amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Edit the image&amp;rsquo;s details, and set the access controls to “public”.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As an alternative to steps 1–4, you can snapshot an existing instance&amp;rsquo;s volume.&lt;/p&gt;
&lt;p&gt;As written, the commands above will make an image available
from within the administrator account,
and the administrator can elect to mark them public and thus available to other accounts.
Adding the
&lt;code&gt;-I ACCESS-KEY&lt;/code&gt; and &lt;code&gt;-S SECRET-KEY&lt;/code&gt; arguments
(and additionally the &lt;code&gt;--owner-akid=ACCESS-KEY&lt;/code&gt; and &lt;code&gt;--owner-sak=SECRET-KEY&lt;/code&gt;,
in the case of &lt;code&gt;euca-import-volume&lt;/code&gt;)
will instead associate the image with another account.
You can generate access and secret keys using Eucalyptus&amp;rsquo;s
“Security Credentials” feature within the “Users” panel.&lt;/p&gt;
&lt;h4 id=&#34;extracting-a-true-disk-image-that-can-be-imported-into-other-virtualization-platforms&#34;&gt;Extracting a true disk image that can be imported into other virtualization platforms&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Inspect the instance to discover the volume name.&lt;/li&gt;
&lt;li&gt;Stop the instance.&lt;/li&gt;
&lt;li&gt;Find the instance&amp;rsquo;s volume file, which should exist in &lt;code&gt;/var/lib/eucalyptus/volumes/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Copy the volume file to a computer that has the utilities required by the remaining steps.&lt;/li&gt;
&lt;li&gt;Associate the volume file with a loopback device by running &lt;code&gt;losetup -f -P VOLUME-FILE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Associate the loopback device with the computer&amp;rsquo;s LVM subsystem by running &lt;code&gt;pvscan --cache&lt;/code&gt; and &lt;code&gt;vgchange -ay&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;losetup&lt;/code&gt; and &lt;code&gt;pvdisplay&lt;/code&gt; and observe the links in &lt;code&gt;/dev/mapper/&lt;/code&gt; to identify the associations between disk images, loopback devices, physical devices, volume groups, and device mappings.&lt;/li&gt;
&lt;li&gt;Extract the disk image using &lt;code&gt;dd if=/dev/dm-N of=IMAGE&lt;/code&gt;, where &lt;em&gt;N&lt;/em&gt; is the correct device number.&lt;/li&gt;
&lt;li&gt;Make use of the disk image. It should boot in QEMU, for example. If it makes use of cloud-init, then a full virtualization suite should be able to setup SSH keys and other material after booting a virtual machine based around the disk image.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>VisorFlow</title>
      <link>https://www.flyn.org/projects/VisorFlow/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/VisorFlow/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;VisorFlow uses virtual-machine introspection
to observe system calls,
infer information flow,
and
control confidential data.
Under VisorFlow, the system administrator designates some filesystem objects as confidential and some programs as trusted.
Any process not loaded from a trusted program will become tainted upon reading a confidential object.
The kernel transfers this taint status from process to process as a result of inter-process communication
(e.g., an untainted process reads from a tainted process over a pipe).
If a tainted process writes to the network,
then the kernel sets the packet&amp;rsquo;s RFC 3514 evil bit;
this permits a variety of filtering or spoofing strategies
that might help determine the human intentions involved.&lt;/p&gt;


















&lt;figure  id=&#34;figure-visorflow-architecture&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;fig-architecture.png&#34; alt=&#34;VisorFlow architecture&#34; loading=&#34;lazy&#34; data-zoomable width=&#34;50%&#34; /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      VisorFlow architecture
    &lt;/figcaption&gt;&lt;/figure&gt;

&lt;p&gt;The figure above depicts the components that make up VisorFlow, including:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;the Xen hypervisor;&lt;/li&gt;
&lt;li&gt;Linux, running in a Dom0 domain;&lt;/li&gt;
&lt;li&gt;one or more DomU domains running Linux or Windows;&lt;/li&gt;
&lt;li&gt;the VisorFlow security monitor;&lt;/li&gt;
&lt;li&gt;one or more processes running within each DomU;&lt;/li&gt;
&lt;li&gt;firewalld;&lt;/li&gt;
&lt;li&gt;the VisorFlow network engine;&lt;/li&gt;
&lt;li&gt;the VisorFlow Windows authorization engine; and&lt;/li&gt;
&lt;li&gt;the VisorFlow Linux authorization engine.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Not pictured here is VisorFlow&amp;rsquo;s network filter.&lt;/p&gt;
&lt;p&gt;Consider process P&lt;sub&gt;n&lt;/sub&gt; in DomU that invokes a system call (a).
The act of invoking a system call normally involves the operating system (b),
but here it also involves the hypervisor (c) and the VisorFlow security monitor (d).
The VisorFlow security monitor observes such system calls and infers how they allow information to flow between processes,
and the security monitor&amp;rsquo;s operating-system engines use these observations to implement a taint-tracking system that resembles &lt;a href=&#34;../SimpleFlow&#34;&gt;SimpleFlow&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the case of network system calls, the VisorFlow network engine works with Dom0 and the hypervisor
to mark as evil packets originating from tainted processes and to taint processes that receive marked packets.
For example, if the Linux engine infers that a system call from a tainted process P&lt;sub&gt;n&lt;/sub&gt; would result in network traffic,
the Linux engine would notify the network engine (e).
The network engine in turn adds a network filter rule to the host firewall through firewalld, which has the affect of labeling P&lt;sub&gt;n&lt;/sub&gt;&amp;rsquo;s packets as evil (f).
The added rule involves instructing NetFilter to rely on VisorFlow to actually set the evil bit using the NFQUEUE interface (g).
Later, the Linux engine might infer that P&lt;sub&gt;n&lt;/sub&gt; exited; when this happens, the Linux engine and network engine will remove the firewall rule that labeled P&lt;sub&gt;n&lt;/sub&gt;&amp;rsquo;s packets as evil.&lt;/p&gt;
&lt;p&gt;Each operating-system-specific engine implements a different model upon which it relies to make decisions about the system. The models encompass:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which system calls can cause a process to taint,&lt;/li&gt;
&lt;li&gt;which system calls can cause an object to become confidential,&lt;/li&gt;
&lt;li&gt;which system calls can cause the generation of network packets,&lt;/li&gt;
&lt;li&gt;which processes are tainted, and&lt;/li&gt;
&lt;li&gt;which objects are confidential (this has to be persistently stored to survive reboots).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This primary advantage of VisorFlow over SimpleFlow is that VisorFlow
needs no kernel modifications to operate. This has two important consequences:
(1) VisorFlow can mediate closed-source operating systems such as Windows,
and (2) VisorFlow avoids difficult-to-maintain modifications
to open-source kernels.
These advantages come at a performance cost.&lt;/p&gt;
&lt;p&gt;By combining aspects of access-control and provenance systems,
VisorFlow removes the race conditions found in some provenance systems.&lt;/p&gt;
&lt;h1 id=&#34;test-vm&#34;&gt;Test VM&lt;/h1&gt;
&lt;p&gt;After saving the following files to your computer
and decompressing them, you can
boot the guest using &lt;code&gt;xl create visorflow-guest-linux.cfg&lt;/code&gt;.
The root password is &lt;code&gt;password&lt;/code&gt;.&lt;/p&gt;
&lt;dl&gt;
	&lt;dt&gt;Disk image&lt;/dt&gt;
	&lt;dd&gt;&lt;a href=&#34;disk.img.gz&#34;&gt;disk.img.gz&lt;/a&gt;&lt;/dd&gt;
	&lt;dt&gt;Spare disk image&lt;/dt&gt;
	&lt;dd&gt;&lt;a href=&#34;spare.img.gz&#34;&gt;spare.img.gz&lt;/a&gt;&lt;/dd&gt;
	&lt;dt&gt;Domain configuration (&lt;i&gt;you must modify the paths contained therein to suit your environment&lt;/i&gt;)&lt;/dt&gt;
	&lt;dd&gt;&lt;a href=&#34;visorflow-guest-linux.cfg&#34;&gt;visorflow-guest-linux.cfg&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;related-publications&#34;&gt;Related publications&lt;/h1&gt;









	
		







  








&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/publications/Using-VisorFlow-to-Control-Information-Flow-without-Modifying-the-Operating-System-Kernel-or-its-Userspace/&#34; &gt;Using VisorFlow to Control Information Flow without Modifying the Operating System Kernel or its Userspace&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
      &lt;div&gt;
        

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Matt-Shockley/&#34;&gt;Matt Shockley&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Chris-Maixner/&#34;&gt;Chris Maixner&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Ryan-Johnson/&#34;&gt;Ryan Johnson&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Mitch-DeRidder/&#34;&gt;Mitch DeRidder&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/W.-Michael-Petullo/&#34;&gt;W. Michael Petullo&lt;/a&gt;&lt;/span&gt;
      &lt;/div&gt;
      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  
    
  



&lt;a class=&#34;btn btn-outline-primary btn-page-header btn-sm&#34; href=&#34;http://www.flyn.org/publications/2017-VisorFlow.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;
  PDF
&lt;/a&gt;



&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/publications/Using-VisorFlow-to-Control-Information-Flow-without-Modifying-the-Operating-System-Kernel-or-its-Userspace/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	


&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;disk.img.gz&#34;&gt;disk.img.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;spare.img.gz&#34;&gt;spare.img.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;visorflow-0.0.1.tar.gz&#34;&gt;visorflow-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;visorflow-guest-linux.cfg&#34;&gt;visorflow-guest-linux.cfg&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	



	&lt;p&gt;
		The VisorFlow project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/visorflow&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>VPN</title>
      <link>https://www.flyn.org/notes/vpn/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/vpn/</guid>
      <description>&lt;p&gt;This assumes you have built an OpenVPN server as described in the
&lt;a href=&#34;../guardian/&#34;&gt;Guardian&lt;/a&gt; document.
After configuring an OpenVPN client as described below, you can start the VPN tunnel by running:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ systemctl start openvpn-client@EXAMPLECOM
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;Place the CA certificate at /etc/openvpn/client/ca.pem.&lt;/li&gt;
&lt;li&gt;Place the client host&amp;rsquo;s certificate at /etc/openvpn/client/CLIENT.EXAMPLE.COM.pem.&lt;/li&gt;
&lt;li&gt;Place the client host&amp;rsquo;s private key at /etc/openvpn/client/CLIENT.EXAMPLE.COM.key.&lt;/li&gt;
&lt;li&gt;Run chmod 600 /etc/openvpn/client/CLIENT.EXAMPLE.COM.key.&lt;/li&gt;
&lt;li&gt;Write the following files:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;/etc/openvpn/client/EXAMPLECOM.conf&lt;/code&gt;:&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dev tun
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;txqueuelen 1000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proto udp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;verb 3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ca /etc/openvpn/client/ca.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cert /etc/openvpn/client/CLIENT.EXAMPLE.COM.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;key /etc/openvpn/client/CLIENT.EXAMPLE.COM.key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;persist-tun
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;persist-key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;client
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;remote-cert-tls server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;remote guardian.EXAMPLE.COM 1194
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;script-security 2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;up /etc/openvpn/client/client.up
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;down /etc/openvpn/client/client.down
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;/etc/openvpn/client/client.up&lt;/code&gt; (See Red Hat bug &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=1381413&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#1381413&lt;/a&gt;):&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;cp&#34;&gt;#!/bin/sh
&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;# Copyright (c) 2005-2010 OpenVPN Technologies, Inc.&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;c1&#34;&gt;# Licensed under the GPL version 2&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;# First version by Jesse Adelman&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;c1&#34;&gt;# someone at boldandbusted dink com&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;c1&#34;&gt;# http://www.boldandbusted.com/&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;# PURPOSE: This script automatically sets the proper /etc/resolv.conf entries&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;c1&#34;&gt;# as pulled down from an OpenVPN server.&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;# INSTALL NOTES:&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;c1&#34;&gt;# Place this in /etc/openvpn/client.up&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;c1&#34;&gt;# Then, add the following to your /etc/openvpn/&amp;amp;lt;clientconfig&amp;amp;gt;.conf:&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;c1&#34;&gt;#   client&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;c1&#34;&gt;#   up /etc/openvpn/client.up&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;c1&#34;&gt;# Next, &amp;#34;chmod a+x /etc/openvpn/client.up&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&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;# USAGE NOTES:&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;c1&#34;&gt;# Note that this script is best served with the companion &amp;#34;client.down&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;c1&#34;&gt;# script.&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;# Tested under Debian lenny with OpenVPN 2.1_rc11&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;c1&#34;&gt;# It should work with any UNIX with a POSIX sh, /etc/resolv.conf or resolvconf&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;# This runs with the context of the OpenVPN UID/GID &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;c1&#34;&gt;# at the time of execution. This generally means that&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;c1&#34;&gt;# the client &amp;#34;up&amp;#34; script will run fine, but the &amp;#34;down&amp;#34; script&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;c1&#34;&gt;# will require the use of the OpenVPN &amp;#34;down-root&amp;#34; plugin&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;c1&#34;&gt;# which is in the plugins/ directory of the OpenVPN source tree&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;# A horrid work around, from a security perspective,&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;c1&#34;&gt;# is to run OpenVPN as root. THIS IS NOT RECOMMENDED. You have&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;c1&#34;&gt;# been WARNED.&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;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
&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;# init variables&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;nv&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&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;nv&#34;&gt;domains&lt;/span&gt;&lt;span class=&#34;o&#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;fopt&lt;/span&gt;&lt;span class=&#34;o&#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;ndoms&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&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;nv&#34;&gt;nns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&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;nv&#34;&gt;nl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;
&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;s1&#34;&gt;&amp;#39;&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;# $foreign_option_&amp;amp;lt;n&amp;amp;gt; is something like&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;c1&#34;&gt;# &amp;#34;dhcp-option DOMAIN example.com&amp;#34; (multiple allowed)&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;c1&#34;&gt;# or&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;c1&#34;&gt;# &amp;#34;dhcp-option DNS 10.10.10.10&amp;#34; (multiple allowed)&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;# each DNS option becomes a &amp;#34;nameserver&amp;#34; option in resolv.conf&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;c1&#34;&gt;# if we get one DOMAIN, that becomes &amp;#34;domain&amp;#34; in resolv.conf&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;c1&#34;&gt;# if we get multiple DOMAINS, those become &amp;#34;search&amp;#34; lines in resolv.conf&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;c1&#34;&gt;# if we get no DOMAINS, then don&amp;#39;t use either domain or search.&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;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;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fopt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\$&lt;/span&gt;foreign_option_&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;si&#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;o&#34;&gt;[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;fopt&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&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;p&#34;&gt;&amp;amp;&lt;/span&gt;amp&lt;span class=&#34;p&#34;&gt;;&amp;amp;&lt;/span&gt;amp&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;break&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;case&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;fopt&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        dhcp-option&lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt;DOMAIN&lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt;*&lt;span class=&#34;o&#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;ndoms&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$((&lt;/span&gt;ndoms &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&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;domains&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;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;domains&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;fopt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;#dhcp-option DOMAIN &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&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;p&#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;        dhcp-option&lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt;DNS&lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt;*&lt;span class=&#34;o&#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;nns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$((&lt;/span&gt;nns &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$nns&lt;/span&gt; -le &lt;span class=&#34;m&#34;&gt;3&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;nv&#34;&gt;dns&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;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;dns&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;dns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:+&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$nl&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;nameserver &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;fopt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;#dhcp-option DNS &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&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;k&#34;&gt;else&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;printf&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;%s\n&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Too many nameservers - ignoring after third&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;gt&lt;span class=&#34;p&#34;&gt;;&amp;amp;&lt;/span&gt;amp&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&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 class=&#34;p&#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;o&#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;nb&#34;&gt;printf&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;%s\n&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Unknown option \&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;fopt&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\&amp;#34; - ignored&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;gt&lt;span class=&#34;p&#34;&gt;;&amp;amp;&lt;/span&gt;amp&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&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;p&#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;k&#34;&gt;esac&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;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$((&lt;/span&gt;i &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&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;k&#34;&gt;done&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;nv&#34;&gt;ds&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$ndoms&lt;/span&gt; -eq &lt;span class=&#34;m&#34;&gt;1&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;nv&#34;&gt;ds&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;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;nl&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;domain&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;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$ndoms&lt;/span&gt; -gt &lt;span class=&#34;m&#34;&gt;1&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;nv&#34;&gt;ds&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;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;nl&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;search&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;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;c1&#34;&gt;# This is the complete file - &amp;#34;$domains&amp;#34; has a leading space already&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;out&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;# resolv.conf autogenerated by &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;nl&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;dns&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ds&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;domains&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&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&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;# use resolvconf if it&amp;#39;s available&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;if&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; resolvconf &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;gt&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;/dev/null 2&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;gt&lt;span class=&#34;p&#34;&gt;;&amp;amp;&lt;/span&gt;amp&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;1&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;printf&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;%s\n&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&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; resolvconf -p -a &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&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;k&#34;&gt;else&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;c1&#34;&gt;# Preserve the existing resolv.conf&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;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -e /etc/resolv.conf &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;    cp /etc/resolv.conf /etc/resolv.conf.ovpnsave
&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 class=&#34;nb&#34;&gt;printf&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;%s\n&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;gt&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; /etc/resolv.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  chmod &lt;span class=&#34;m&#34;&gt;644&lt;/span&gt; /etc/resolv.conf
&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;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;/etc/openvpn/client/client.down&lt;/code&gt; (See Red Hat bug &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=1381413&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#1381413&lt;/a&gt;):&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;cp&#34;&gt;#!/bin/sh
&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;# Copyright (c) 2005-2010 OpenVPN Technologies, Inc.&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;c1&#34;&gt;# Licensed under the GPL version 2&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;# First version by Jesse Adelman&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;c1&#34;&gt;# someone at boldandbusted dink com&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;c1&#34;&gt;# http://www.boldandbusted.com/&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;# PURPOSE: This script automatically removes the /etc/resolv.conf entries previously&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;c1&#34;&gt;# set by the companion script &amp;#34;client.up&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&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;# INSTALL NOTES:&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;c1&#34;&gt;# Place this in /etc/openvpn/client.down&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;c1&#34;&gt;# Then, add the following to your /etc/openvpn/&amp;amp;lt;clientconfig&amp;amp;gt;.conf:&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;c1&#34;&gt;#   client&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;c1&#34;&gt;#   up /etc/openvpn/client.up&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;c1&#34;&gt;#   down /etc/openvpn/client.down&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;c1&#34;&gt;# Next, &amp;#34;chmod a+x /etc/openvpn/client.down&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&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;# USAGE NOTES:&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;c1&#34;&gt;# Note that this script is best served with the companion &amp;#34;client.up&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;c1&#34;&gt;# script.&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;# Tested under Debian lenny with OpenVPN 2.1_rc11&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;c1&#34;&gt;# It should work with any UNIX with a POSIX sh, /etc/resolv.conf or resolvconf&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;# This runs with the context of the OpenVPN UID/GID &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;c1&#34;&gt;# at the time of execution. This generally means that&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;c1&#34;&gt;# the client &amp;#34;up&amp;#34; script will run fine, but the &amp;#34;down&amp;#34; script&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;c1&#34;&gt;# will require the use of the OpenVPN &amp;#34;down-root&amp;#34; plugin&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;c1&#34;&gt;# which is in the plugins/ directory of the OpenVPN source tree&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;# A horrid work around, from a security perspective,&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;c1&#34;&gt;# is to run OpenVPN as root. THIS IS NOT RECOMMENDED. You have&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;c1&#34;&gt;# been WARNED.&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;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
&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;nb&#34;&gt;type&lt;/span&gt; resolvconf &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;gt&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;/dev/null 2&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;gt&lt;span class=&#34;p&#34;&gt;;&amp;amp;&lt;/span&gt;amp&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;1&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;  resolvconf -d &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -f
&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; -e /etc/resolv.conf.ovpnsave &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;c1&#34;&gt;# cp + rm rather than mv in case it&amp;#39;s a symlink&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cp /etc/resolv.conf.ovpnsave /etc/resolv.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  rm -f /etc/resolv.conf.ovpnsave
&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;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>WebDAV, CalDAV, and CardDAV</title>
      <link>https://www.flyn.org/notes/webdav/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/webdav/</guid>
      <description>&lt;p&gt;We at Flyn Computing share our calendars and contacts using NextCloud and the CalDAV and CardDAV protocols.
The following notes demonstrate the key parts of how to configure a selection of clients to use these services.
You should also replace &lt;code&gt;name&lt;/code&gt; with your calendar/address book name and &lt;code&gt;password&lt;/code&gt; with your password.
(We assume that NextCloud exists at the URL &lt;code&gt;https://www.flyn.org/share/&lt;/code&gt;,
but you could replace this portion of the examples below
if you wish to use an NextCloud-based service hosted elsewhere.)&lt;/p&gt;
&lt;h2 id=&#34;apple-ios-settingspasswords--accountsadd-accountotheradd-caldav-account&#34;&gt;Apple iOS (Settings→Passwords &amp;amp; Accounts→Add Account→Other→Add CalDAV Account)&lt;/h2&gt;
&lt;p&gt;Replace &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;password&lt;/code&gt;:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Server&lt;/dt&gt;&lt;dd&gt;https://www.flyn.org/share/remote.php/dav/principals/users/&lt;i&gt;name&lt;/i&gt;/&lt;/dd&gt;
&lt;dt&gt;User Name&lt;/dt&gt;&lt;dd&gt;&lt;i&gt;name&lt;/i&gt;&lt;/dd&gt;
&lt;dt&gt;Password&lt;/dt&gt;&lt;dd&gt;&lt;i&gt;password&lt;/i&gt;&lt;/dd&gt;
&lt;dt&gt;Description&lt;/dt&gt;&lt;dd&gt;&lt;i&gt;Human-friendly description&lt;/i&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id=&#34;android&#34;&gt;Android&lt;/h2&gt;
&lt;p&gt;These directions require the DAVx&lt;sup&gt;5&lt;/sup&gt; app, which is available from the Android app store.
Selecting the app will present a configuration dialog
that you should fill out as described below.
The native calendar and contact apps will display shared data after
you have configured DAVx&lt;sup&gt;5&lt;/sup&gt;.
Replace &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;password&lt;/code&gt;:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Base URL&lt;/dt&gt;&lt;dd&gt;https://www.flyn.org/share/remote.php/dav/&lt;/dd&gt;
&lt;dt&gt;Email address&lt;/dt&gt;&lt;dd&gt;&lt;i&gt;name&lt;/i&gt;&lt;/dd&gt;
&lt;dt&gt;Password&lt;/dt&gt;&lt;dd&gt;&lt;i&gt;password&lt;/i&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id=&#34;apple-ical-503&#34;&gt;Apple iCal 5.0.3&lt;/h2&gt;
&lt;p&gt;Replace &lt;code&gt;name&lt;/code&gt;:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Server Address&lt;/dt&gt;&lt;dd&gt;www.flyn.org&lt;/dd&gt;
&lt;dt&gt;Server Path&lt;/dt&gt;&lt;dd&gt;/&lt;!--planner--&gt;share/remote.php/dav/principals/users/&lt;i&gt;name&lt;/i&gt;/&lt;/dd&gt;
&lt;dt&gt;Use SSL&lt;/dt&gt;&lt;dd&gt;checked&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id=&#34;gnome-gnome-control-centeronline-accounts&#34;&gt;GNOME (gnome-control-center→Online Accounts)&lt;/h2&gt;
&lt;p&gt;Replace &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;password&lt;/code&gt;:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Server&lt;/dt&gt;&lt;dd&gt;https://www.flyn.org/share/&lt;/dd&gt;
&lt;dt&gt;Username&lt;/dt&gt;&lt;dd&gt;&lt;i&gt;name&lt;/i&gt;&lt;/dd&gt;
&lt;dt&gt;Password&lt;/dt&gt;&lt;dd&gt;&lt;i&gt;password&lt;/i&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id=&#34;vdirsyncer&#34;&gt;vdirsyncer&lt;/h2&gt;
&lt;p&gt;Replace &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;password&lt;/code&gt;:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;url&lt;/dt&gt;&lt;dd&gt;https://www.flyn.org/share/remote.php/dav/&lt;/dd&gt;
&lt;dt&gt;auth&lt;/dt&gt;&lt;dd&gt;basic&lt;/dd&gt;
&lt;dt&gt;username&lt;/dt&gt;&lt;dd&gt;&lt;i&gt;name&lt;/i&gt;&lt;/dd&gt;
&lt;dt&gt;password&lt;/dt&gt;&lt;dd&gt;&lt;i&gt;password&lt;/i&gt;&lt;/dd&gt;
&lt;/dl&gt;
</description>
    </item>
    
    <item>
      <title>Wiping devices</title>
      <link>https://www.flyn.org/notes/wipe/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/wipe/</guid>
      <description>&lt;p&gt;These instructions document how to wipe the data from various devices.&lt;/p&gt;
&lt;h2 id=&#34;android&#34;&gt;Android&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Plug the phone in so that it does not loose power during this process.&lt;/li&gt;
&lt;li&gt;Reset the device by selecting
&lt;code&gt;Settings&lt;/code&gt;→&lt;code&gt;Backup&lt;/code&gt;→&lt;code&gt;Factory data reset&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;When the phone restarts, follow the initialization steps, skipping
the ones that are not required. Elect to associate a password with the
screen lock. Use a very strong password such as a sequence of random characters.&lt;/li&gt;
&lt;li&gt;Encrypt the device by selecting
&lt;code&gt;Settings&lt;/code&gt;→&lt;code&gt;Security&lt;/code&gt;→&lt;code&gt;Encrypt phone&lt;/code&gt;. This will
prevent someone from recovering deleted data.&lt;/li&gt;
&lt;li&gt;Reset the device again by selecting
&lt;code&gt;Settings&lt;/code&gt;→&lt;code&gt;Backup&lt;/code&gt;→&lt;code&gt;Factory data reset&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;ipad&#34;&gt;iPad&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Plug the iPad in so that it does not loose power during this process.&lt;/li&gt;
&lt;li&gt;Reset the device by selecting
&lt;code&gt;Settings&lt;/code&gt;→&lt;code&gt;General&lt;/code&gt;→&lt;code&gt;Reset&lt;/code&gt;. Select &lt;code&gt;Erase All Content and Settings&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>wnc</title>
      <link>https://www.flyn.org/abandoned/wnc/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/abandoned/wnc/</guid>
      <description>&lt;p&gt;Wife&#39;s Network Controller is a &lt;a href=&#34;http://www.gnome.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GNOME&lt;/a&gt;
applet to control &lt;a href=&#34;http://diald.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;diald&lt;/a&gt;.  The applet
allows you to choose from three states: auto, on, and off.  When using
the included scripts the auto state gives dial-up control to diald,
the on state forces the dial-up link to come and stay up, and the off
state closes the dial-up link.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>Workstation</title>
      <link>https://www.flyn.org/notes/workstation/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/workstation/</guid>
      <description>&lt;p&gt;These instructions document how to configure a workstation for use with
Golem and other servers. You will need two computers: the workstations itself
and a build computer capable of downloading and preparing materials to
install on the workstation.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download the latest &lt;a href=&#34;http://download.fedoraproject.org/pub/fedora/linux/releases/30/Everything/x86_64/iso/Fedora-Everything-netinst-x86_64-30-1.2.iso&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Fedora installer&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Attach a USB thumb drive to the build computer. Run &lt;code&gt;dmesg&lt;/code&gt; and
observe the device name associated with the thumb drive. You should
see a message which resembles &lt;code&gt;[X] Attached SCSI removable disk&lt;/code&gt;. Here,
&lt;code&gt;X&lt;/code&gt; indicates that you can access the thumb drive through &lt;code&gt;/dev/X&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Copy the Fedora installer image to the thumb drive by running &lt;code&gt;dd if=Fedora-Everything-netinst-x86_64-30-1.2.iso of=/dev/X&lt;/code&gt; with root
privileges. You should replace &lt;code&gt;X&lt;/code&gt; with the correct name.&lt;/li&gt;
&lt;li&gt;After copying the Fedora installer image to the thumb drive, remove
it from the build computer, and attach it to the workstation. Turn on
the workstation.&lt;/li&gt;
&lt;li&gt;You should soon see a screen such as this:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Fedora 30
&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; Install Fedora 30
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Test this media &amp;amp;amp; install Fedora
&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; Troubleshooting
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Press Tab to edit the installers parameters. Append
the following to the end of the configuration line:
&lt;code&gt;ks=https://www.flyn.org/kickstart/Fedora-30-x86_64-workstation.ks&lt;/code&gt;.&lt;/p&gt;
&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;Eventually, the installer will present a menu that allows you to set
the workstation&amp;rsquo;s root password. Press &lt;code&gt;7&lt;/code&gt; and enter a password of your
choosing twice.&lt;/li&gt;
&lt;li&gt;Enter &lt;code&gt;b&lt;/code&gt; to begin the installation.&lt;/li&gt;
&lt;li&gt;Reboot the workstation after the installation completes.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>xawtv-3.24-quicktime</title>
      <link>https://www.flyn.org/patches/xawtv-3.24-quicktime/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/xawtv-3.24-quicktime/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;xawtv-3.24-quicktime.patch.gz&#34;&gt;xawtv-3.24-quicktime&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Gerd Knorr&#39;s &lt;a href=&#34;http://bytesex.org/xawtv/&#34;&gt;xawtv&lt;/a&gt;.  When applied,
streamer will be able to save captured video
using the QuickTime format.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>xawtv-3.48-yuv2</title>
      <link>https://www.flyn.org/patches/xawtv-3.48-yuv2/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/xawtv-3.48-yuv2/</guid>
      <description>&lt;dt&gt;&lt;a href=&#34;xawtv-3.48-yuv2.patch.gz&#34;&gt;xawtv-3.48-yuv2&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;
A patch for Gerd Knorr&amp;apos;s &lt;a href=&#34;http://bytesex.org/xawtv/&#34;&gt;xawtv&lt;/a&gt;.
When applied, streamer will
be able to save YUV2 captured video using the QuickTime
format.  YUV2 is 16 bits per pixel, rather than 24 like
QuickTime&amp;apos;s raw encoding.  I can capture 30 frames per second
at a resolution of 640x480 pixels when using YUV2 and &lt;a href=&#34;http://www.sgi.com&#34;&gt;SGI&lt;/a&gt;&amp;apos;s &lt;a href=&#34;http://oss.sgi.com/projects/xfs/&#34;&gt;XFS&lt;/a&gt;
filesystem on my machine.
&lt;/dd&gt;
</description>
    </item>
    
    <item>
      <title>xawtv-3.55-time</title>
      <link>https://www.flyn.org/patches/xawtv-3.55-time/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/xawtv-3.55-time/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;xawtv-3.55-time.patch.gz&#34;&gt;xawtv-3.55-time&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Gerd Knorr&#39;s &lt;a href=&#34;http://bytesex.org/xawtv/&#34;&gt;xawtv&lt;/a&gt;.
When applied, streamer will accept a time,
such as 3:52, as the argument to its -t option.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>xawtv-3.64-joystick</title>
      <link>https://www.flyn.org/patches/xawtv-3.64-joystick/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/xawtv-3.64-joystick/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;xawtv-3.64-joystick.patch.gz&#34;&gt;xawtv-3.64-joystick&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Gerd Knorr&#39;s &lt;a href=&#34;http://bytesex.org/xawtv/&#34;&gt;xawtv&lt;/a&gt;.
With this patch applied, fbtv may be controlled
with a joystick.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>xen-4.1.2-xl-command-line-domain-def</title>
      <link>https://www.flyn.org/patches/xen-4.1.2-xl-command-line-domain-def/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/xen-4.1.2-xl-command-line-domain-def/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;xen-4.1.2-xl-command-line-domain-def-4.patch.gz&#34;&gt;xen-4.1.2-xl-command-line-domain-def&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Xen that modifies xl to allow the use of /dev/null as
the domain configuration argument to its create option. xl treats
the configuration argument /dev/null as a special case.  This allows
specifying an entire domain configuration on the command line.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>xen-local-vif-scripts</title>
      <link>https://www.flyn.org/patches/xen-local-vif-scripts/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/xen-local-vif-scripts/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;xen-4.1.0-local-vif-scripts-1.patch.gz&#34;&gt;xen-4.1.0-local-vif-scripts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for Xen that allows the specification of local vif scripts that augment that standard scripts such as vif-bridge.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>xine-lib-0.9.11a-twos</title>
      <link>https://www.flyn.org/patches/xine-lib-0.9.11a-twos/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/xine-lib-0.9.11a-twos/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;xine-lib-0.9.11a-twos.patch.gz&#34;&gt;xine-0.9.11a-twos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A trivial patch for &lt;a href=&#34;http://xine.sourceforge.net&#34;&gt;xine&lt;/a&gt;
which adds support for QuickTime files which contain twos encoded audio.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>xine-lib-1-beta4-openbsd</title>
      <link>https://www.flyn.org/patches/xine-lib-1-beta4-openbsd/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/xine-lib-1-beta4-openbsd/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;xine-lib-1-beta4-openbsd.patch.gz&#34;&gt;xine-lib-1-beta4-openbsd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for xine-lib that allows it to run on OpenBSD.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>xine-ui-0.9.18-openbsd</title>
      <link>https://www.flyn.org/patches/xine-ui-0.9.18-openbsd/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/xine-ui-0.9.18-openbsd/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;xine-ui-0.9.18-openbsd.patch.gz&#34;&gt;xine-ui-0.9.18-openbsd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for xine-ui that allows it to run on OpenBSD.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>xmms-1.2.3-geometry</title>
      <link>https://www.flyn.org/patches/xmms-1.2.3-geometry/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/xmms-1.2.3-geometry/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;xmms-1.2.3-geometry.patch.gz&#34;&gt;xmms-1.2.3-geometry&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A patch for &lt;a href=&#34;http://www.xmms.org&#34;&gt;XMMS&lt;/a&gt;
which adds the standard &amp;ndash;geometry command line option.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>xmovie-1.8-vmscale</title>
      <link>https://www.flyn.org/patches/xmovie-1.8-vmscale/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/xmovie-1.8-vmscale/</guid>
      <description>&lt;dt&gt;&lt;a href=&#34;xmovie-1.8-vmscale.patch.gz&#34;&gt;xmovie-1.8-vmscale&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;
A patch for Adam Williams&amp;apos; &lt;a href=&#34;http://www.heroinewarrior.com/xmovie.php3&#34;&gt;XMovie&lt;/a&gt;.
When applied, &lt;a href=&#34;http://www.heroinewarrior.com/xmovie.php3&#34;&gt;XMovie&lt;/a&gt;
will choose and switch to the most appropriate X video mode when playing
back full screen video.  This can save a lot of CPU cycles, as the CPU
may not need to scale the video to the screen.
&lt;/dd&gt;
</description>
    </item>
    
    <item>
      <title>xmovie-1.9-vmscale</title>
      <link>https://www.flyn.org/patches/xmovie-1.9-vmscale/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/xmovie-1.9-vmscale/</guid>
      <description>&lt;dt&gt;&lt;a href=&#34;xmovie-1.9-vmscale.patch.gz&#34;&gt;xmovie-1.9-vmscale&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;
A patch for Adam Williams&amp;apos; &lt;a href=&#34;http://www.heroinewarrior.com/xmovie.php3&#34;&gt;Xmovie&lt;/a&gt;
that fixes the vidmode scaling code.  As an added bonus, it fixes two
lines in mpeg3io.h that were illegal in C, though fine in C++.
&lt;/dd&gt;
</description>
    </item>
    
    <item>
      <title>XMPP</title>
      <link>https://www.flyn.org/notes/xmpp/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/xmpp/</guid>
      <description>&lt;h2 id=&#34;description-of-empathy-components&#34;&gt;Description of Empathy components&lt;/h2&gt;
&lt;table class=&#34;booktabs&#34; summary=&#34;Description of Empathy components&#34;&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;RFC&lt;/th&gt;&lt;th&gt;Software&lt;/th&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Debugging&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;empathy-debugger&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Call management&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;(libexec) empathy-call&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Streaming&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&#34;https://www.freedesktop.org/wiki/Software/Farstream/&#34;&gt;farstream&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;NAT traversal&lt;/td&gt;&lt;td&gt;&lt;a href=&#34;https://tools.ietf.org/rfc/rfc5245.txt&#34;&gt;5245&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&#34;https://nice.freedesktop.org/&#34;&gt;libnice&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;relevant-bugs&#34;&gt;Relevant bugs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://bugzilla.freedesktop.org/show_bug.cgi?id=93972&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Use custom TURN server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bugzilla.freedesktop.org/show_bug.cgi?id=93969&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GABBLE_PARAMS_DEFAULT_FALLBACK_STUN_SERVER aka stun.telepathy.im unresponsive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bugzilla.gnome.org/show_bug.cgi?id=772623&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Video call not set up properly over OpenVPN/tun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://phabricator.freedesktop.org/T7583&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Empathy/libnice video call not set up properly over OpenVPN/tun&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;patches&#34;&gt;Patches&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;../../patches/libnice-0.1.13-vpn/libnice-0.1.13-vpn.patch.gz&#34;&gt;A kludge which allows the use of libnice on an OpenVPN client&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Debugging&lt;/h2&gt;
&lt;dl&gt;
&lt;dt&gt;Debug empathy-call, which establishes audio and video calls&lt;/dt&gt;
&lt;dd&gt;G_MESSAGES_DEBUG=libnice,libnice-stun,libnice-nice-verbose EMPATHY_PERSIST=1  /usr/libexec/empathy-call&lt;/dd&gt;
&lt;/dl&gt;
</description>
    </item>
    
    <item>
      <title>Zombie</title>
      <link>https://www.flyn.org/notes/zombie/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/notes/zombie/</guid>
      <description>&lt;p&gt;This document describes how to build Zombie, a PXE and other protocol boot server. Zombie runs on
commodity router hardware and provides a number of features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PXE boot server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We build Zombie on top of OpenWrt because of the distribution&amp;rsquo;s simplicity and small size.
Zombie is made up of roughly 80 packages, and its programs and configurations take up less than 125 MB of storage space.
Here we assume that Zombie will run within the confines of a Xen hypervisor.&lt;/p&gt;
&lt;h2 id=&#34;establish-the-zombie-vm&#34;&gt;Establish the Zombie VM&lt;/h2&gt;
&lt;p&gt;Perform the following steps on the Xen Dom0 host to establish the VM which will host Zombie:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Obtain the x86_64 OpenWrt image at &lt;a href=&#34;https://downloads.lede-project.org/releases/17.01.1/targets/x86/64/lede-17.01.1-x86-64-combined-ext4.img.gz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://downloads.lede-project.org/releases/17.01.1/targets/x86/64/lede-17.01.1-x86-64-combined-ext4.img.gz&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Uncompress the image and place it at &lt;code&gt;/var/lib/xen/images/zombie-lede-17.01.1-x86-64-combined-ext4.img&lt;/code&gt; on the Xen Dom0 host.&lt;/li&gt;
&lt;li&gt;Write the following at &lt;code&gt;/etc/xen/vm-zombie.cfg&lt;/code&gt; on the Xen Dom0 host (replace &lt;code&gt;XX:XX:XX:XX:XX:XX&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;zombie&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;n&#34;&gt;memory&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;1024&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;n&#34;&gt;vcpus&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;mi&#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;n&#34;&gt;builder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hvm&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;n&#34;&gt;vif&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;s2&#34;&gt;&amp;#34;model=e1000,script=vif-bridge,bridge=xenbr0,mac=XX:XX:XX:XX:XX:XX&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;disk&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;s2&#34;&gt;&amp;#34;tap2:tapdisk:aio:/var/lib/xen/images/herald-lede-17.01.1-x86-64-combined-ext4.img ,xvda,w&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;serial&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pty&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;software-installation&#34;&gt;Software installation&lt;/h2&gt;
&lt;p&gt;Perform the following steps on Zombie:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set the root password: &lt;code&gt;passwd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Remove unnecessary packages:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg remove \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	kmod-ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	kmod-pppoe \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	kmod-pppox \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	kmod-r8169 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	logd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-app-firewall \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-lib-ip \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-lib-jsonc \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-lib-nixio \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-proto-ipv6 \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-proto-ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-theme-bootstrap \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-mod-admin-full \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci-base \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	luci \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	mtd \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	odhcpd-ipv6only \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	ppp \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	ppp-mod-pppoe \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	r8169-firmware \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	uhttpd-mod-ubus \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	uhttpd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Configure networking by writing &lt;code&gt;/etc/config/network&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config interface loopback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option ifname lo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option proto static
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option ipaddr 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;option netmask 255.0.0.0
&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;config interface lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ifname eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option proto dhcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Install the necessary software:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;opkg install \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        freifunk-watchdog \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	syslog-ng
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Install a public SSH key at &lt;code&gt;/etc/dropbear/authorized_keys&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configuring-tftp&#34;&gt;Configuring TFTP&lt;/h2&gt;
&lt;p&gt;Here we describe how to configure dnsmasq to provide a TFTP service.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/etc/config/dhcp&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config dnsmasq
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option enable_tftp	1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option tftp_root	/usr/libexec/tftpboot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option localservice	1
&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;config dhcp lan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option ignore		1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Create the directory &lt;code&gt;/usr/libexec/tftpboot/pxelinux/bios/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install the &lt;code&gt;syslinux&lt;/code&gt; package on a Fedora host, and copy the files &lt;code&gt;/usr/share/syslinux/{ldlinux.c32,libcom32.c32,libutil.c32,pxelinux.0,vesamenu.c32}&lt;/code&gt; to &lt;code&gt;/usr/libexec/tftpboot/pxelinux/bios/&lt;/code&gt; on Zombie.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;usr/libexec/tftpboot/pxelinux/bios/pxelinux.cfg/default&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default vesamenu.c32
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;prompt 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timeout 600
&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;display boot.msg
&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;label linux
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	menu label ^Install or upgrade an existing system
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	menu default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	kernel vmlinuz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	append initrd=initrd.img inst.repo=https://dl.fedoraproject.org/pub/fedora/linux/releases/35/Everything/x86_64/os/ inst.ks=https://www.flyn.org/kickstart/Fedora-35-x86_64-workstation.ks
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Create the directory &lt;code&gt;/usr/libexec/tftpboot/pxelinux/efi/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install the &lt;code&gt;shim&lt;/code&gt;, &lt;code&gt;grub2-efi&lt;/code&gt;, and &lt;code&gt;grub2-efi-x64&lt;/code&gt; packages on a Fedora host, and copy the file &lt;code&gt;/boot/efi/EFI/fedora/shim.efi&lt;/code&gt; to &lt;code&gt;/usr/libexec/tftpboot/pxelinux/efi/&lt;/code&gt; on Zombie.&lt;/li&gt;
&lt;li&gt;Copy the files &lt;code&gt;/boot/efi/EFI/fedora/grubx64.efi&lt;/code&gt; to &lt;code&gt;/usr/libexec/tftpboot/&lt;/code&gt; on Zombie.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;usr/libexec/tftpboot/grub.cfg&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load_video&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;insmod&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;efi_gop&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;n&#34;&gt;insmod&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;efi_uga&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;n&#34;&gt;insmod&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;video_bochs&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;n&#34;&gt;insmod&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;video_cirrus&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;n&#34;&gt;insmod&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;all_video&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;p&#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;n&#34;&gt;load_video&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;n&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gfxpayload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;keep&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;n&#34;&gt;insmod&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gzio&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;n&#34;&gt;menuentry&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Install Fedora 64-bit&amp;#39;&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fedora&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gnu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gnu&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt; &lt;span class=&#34;p&#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;n&#34;&gt;linuxefi&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pxelinux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bios&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vmlinuz&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dhcp&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;download&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fedoraproject&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pub&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fedora&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;releases&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Everything&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;www&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flyn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kickstart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Fedora&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;workstation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ks&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;n&#34;&gt;initrdefi&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pxelinux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bios&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;initrd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&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;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;9&#34;&gt;
&lt;li&gt;Copy &lt;a href=&#34;https://dl.fedoraproject.org/pub/fedora/linux/releases/35/Everything/x86_64/os/images/pxeboot/vmlinuz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://dl.fedoraproject.org/pub/fedora/linux/releases/35/Everything/x86_64/os/images/pxeboot/vmlinuz&lt;/a&gt; to &lt;code&gt;usr/libexec/tftpboot/pxelinux/bios/vmlinuz&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Copy &lt;a href=&#34;https://dl.fedoraproject.org/pub/fedora/linux/releases/35/Everything/x86_64/os/images/pxeboot/initrd.img&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://dl.fedoraproject.org/pub/fedora/linux/releases/35/Everything/x86_64/os/images/pxeboot/initrd.img&lt;/a&gt; to &lt;code&gt;usr/libexec/tftpboot/pxelinux/bios/initrd.img&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configuring-dhcp&#34;&gt;Configuring DHCP&lt;/h2&gt;
&lt;p&gt;Add the following to &lt;code&gt;/etc/config/dhcp&lt;/code&gt; on the host that provides your network&amp;rsquo;s DHCP service (replace &lt;code&gt;W.X.Y.Z&lt;/code&gt; and &lt;code&gt;example.com&lt;/code&gt; with Zombie&amp;rsquo;s IP address and domain name, respectively):&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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;config boot linux
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option serveraddress &amp;#39;W.X.Y.Z&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option servername &amp;#39;zombie.example.com&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	option filename &amp;#39;pxelinux/bios/pxelinux.0&amp;#39;
&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;# For EFI:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# config boot linux
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#	option serveraddress &amp;#39;W.X.Y.Z&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#	option servername &amp;#39;zombie.example.com&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#	option filename &amp;#39;pxelinux/efi/shim.efi&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>zsnes-1.337-gamepad-quit</title>
      <link>https://www.flyn.org/patches/zsnes-1.337-gamepad-quit/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/patches/zsnes-1.337-gamepad-quit/</guid>
      <description>&lt;dt&gt;&lt;a href=&#34;zsnes-1.337-gamepad-quit.patch.gz&#34;&gt;zsnes-1.337-gamepad-quit&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;
A nasty patch for the &lt;a
href=&#34;http://www.zsnes.com/&#34;&gt;zsnes&lt;/a&gt;
Super Nintendo emulator which allows one to quit the application by
pressing L-R-Start on one&amp;apos;s gamepad.
&lt;/dd&gt;
</description>
    </item>
    
    <item>
      <title>Courseware as Code: Instituting Agile Courseware Collaboration</title>
      <link>https://www.flyn.org/reference/rodriguez-20-courseware-as-code/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/rodriguez-20-courseware-as-code/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Security Engineering: A Guide to Building Dependable Distributed Systems</title>
      <link>https://www.flyn.org/reference/anderson-20-security-engineering/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/anderson-20-security-engineering/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Think Java: How to Think Like a Computer Scientist</title>
      <link>https://www.flyn.org/reference/downey-20-java/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/downey-20-java/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Art, Science, and Engineering of Fuzzing: A Survey</title>
      <link>https://www.flyn.org/reference/manes-19-fuzzing/</link>
      <pubDate>Tue, 01 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/manes-19-fuzzing/</guid>
      <description></description>
    </item>
    
    <item>
      <title>MAX_USERNAME_LEN set too low</title>
      <link>https://www.flyn.org/reference/petullo-19-dropbear-username-len/</link>
      <pubDate>Fri, 01 Mar 2019 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/petullo-19-dropbear-username-len/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Python Tutorial</title>
      <link>https://www.flyn.org/reference/python-37-tutorial/</link>
      <pubDate>Tue, 01 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/python-37-tutorial/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Rust Programming Language</title>
      <link>https://www.flyn.org/reference/klabnik-19-rust/</link>
      <pubDate>Tue, 01 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/klabnik-19-rust/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Strange behaviour [sic] surrounding ``ssh -T ...&#39;&#39; and non-zero exit</title>
      <link>https://www.flyn.org/reference/petullo-18-dropbear-exit-code/</link>
      <pubDate>Thu, 01 Nov 2018 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/petullo-18-dropbear-exit-code/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Operating Systems: Three Easy Pieces</title>
      <link>https://www.flyn.org/reference/arpacidusseau-18-three-pieces/</link>
      <pubDate>Wed, 01 Aug 2018 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/arpacidusseau-18-three-pieces/</guid>
      <description></description>
    </item>
    
    <item>
      <title>PivotWall: SDN-Based Information Flow Control</title>
      <link>https://www.flyn.org/publications/PivotWall-SDN-Based-Information-Flow-Control/</link>
      <pubDate>Thu, 01 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/PivotWall-SDN-Based-Information-Flow-Control/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Using VisorFlow to Control Information Flow without Modifying the Operating System Kernel or its Userspace</title>
      <link>https://www.flyn.org/publications/Using-VisorFlow-to-Control-Information-Flow-without-Modifying-the-Operating-System-Kernel-or-its-Userspace/</link>
      <pubDate>Sun, 01 Oct 2017 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Using-VisorFlow-to-Control-Information-Flow-without-Modifying-the-Operating-System-Kernel-or-its-Userspace/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Lowering the Barriers to Capture The Flag Administration and Participation</title>
      <link>https://www.flyn.org/reference/chung-17-ctfd/</link>
      <pubDate>Tue, 01 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/chung-17-ctfd/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Shell We Play a Game? CTF-as-a-service for Security Education</title>
      <link>https://www.flyn.org/reference/trickel-17-ctf-service/</link>
      <pubDate>Tue, 01 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/trickel-17-ctf-service/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Between-Subjects Design</title>
      <link>https://www.flyn.org/reference/oeldorf-17-between-subjects/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/oeldorf-17-between-subjects/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Counterbalancing</title>
      <link>https://www.flyn.org/reference/corriero-17-counterbalancing/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/corriero-17-counterbalancing/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Within-Subjects Design</title>
      <link>https://www.flyn.org/reference/draeger-17-within-subjects/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/draeger-17-within-subjects/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Studying Naive Users and the Insider Threat with SimpleFlow</title>
      <link>https://www.flyn.org/publications/Studying-Naive-Users-and-the-Insider-Threat-with-SimpleFlow/</link>
      <pubDate>Sat, 01 Oct 2016 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Studying-Naive-Users-and-the-Insider-Threat-with-SimpleFlow/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Use of Cyber-Defense Exercises in Undergraduate Computing Education</title>
      <link>https://www.flyn.org/publications/The-Use-of-Cyber-Defense-Exercises-in-Undergraduate-Computing-Education/</link>
      <pubDate>Mon, 01 Aug 2016 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/The-Use-of-Cyber-Defense-Exercises-in-Undergraduate-Computing-Education/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Build It, Break It, Fix It: Contesting Secure Development</title>
      <link>https://www.flyn.org/reference/ruef-16-build-it/</link>
      <pubDate>Fri, 01 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/ruef-16-build-it/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Infrastructure as Code: Managing Servers in the Cloud</title>
      <link>https://www.flyn.org/reference/morris-16-infra-as-code/</link>
      <pubDate>Fri, 01 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/morris-16-infra-as-code/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Go Programming Language</title>
      <link>https://www.flyn.org/reference/donovan-16-go/</link>
      <pubDate>Fri, 01 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/donovan-16-go/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Think Java: How to Think Like a Computer Scientist</title>
      <link>https://www.flyn.org/reference/downey-16-java/</link>
      <pubDate>Fri, 01 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/downey-16-java/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Improving Application Security Through TLS-Library Redesign</title>
      <link>https://www.flyn.org/publications/Improving-Application-Security-Through-TLS-Library-Redesign/</link>
      <pubDate>Thu, 01 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Improving-Application-Security-Through-TLS-Library-Redesign/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Using CTFs for an Undergraduate Cyber Education</title>
      <link>https://www.flyn.org/reference/carlisle-15-ctf-education/</link>
      <pubDate>Sat, 01 Aug 2015 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/carlisle-15-ctf-education/</guid>
      <description></description>
    </item>
    
    <item>
      <title>On the Generality and Convenience of Etypes</title>
      <link>https://www.flyn.org/publications/On-the-Generality-and-Convenience-of-Etypes/</link>
      <pubDate>Fri, 01 May 2015 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/On-the-Generality-and-Convenience-of-Etypes/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Beej&#39;s Guide to Unix Interprocess Communication</title>
      <link>https://www.flyn.org/reference/beej-15-ipc-programming/</link>
      <pubDate>Thu, 01 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/beej-15-ipc-programming/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Codechella: Multi-user program visualizations for real-time tutoring and collaborative learning</title>
      <link>https://www.flyn.org/reference/guo-15-codechella/</link>
      <pubDate>Thu, 01 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/guo-15-codechella/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Codeopticon: Real-Time, One-To-Many Human Tutoring for Computer Programming</title>
      <link>https://www.flyn.org/reference/guo-15-codeopticon/</link>
      <pubDate>Thu, 01 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/guo-15-codeopticon/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Computer Security: Principles and Practice</title>
      <link>https://www.flyn.org/reference/stallings-15-security/</link>
      <pubDate>Thu, 01 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/stallings-15-security/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Teaching Computer Security</title>
      <link>https://www.flyn.org/publications/Teaching-Computer-Security/</link>
      <pubDate>Sat, 01 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Teaching-Computer-Security/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Learning Obstacles in the Capture The Flag Model</title>
      <link>https://www.flyn.org/reference/chung-14-obstacles-ctf/</link>
      <pubDate>Fri, 01 Aug 2014 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/chung-14-obstacles-ctf/</guid>
      <description></description>
    </item>
    
    <item>
      <title>PicoCTF: A Game-Based Computer Security Competition for High School Students</title>
      <link>https://www.flyn.org/reference/chapman-14-pico-ctf/</link>
      <pubDate>Fri, 01 Aug 2014 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/chapman-14-pico-ctf/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Ethos&#39; Deeply Integrated Distributed Types</title>
      <link>https://www.flyn.org/publications/Ethos-Deeply-Integrated-Distributed-Types/</link>
      <pubDate>Thu, 01 May 2014 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Ethos-Deeply-Integrated-Distributed-Types/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Pro Git</title>
      <link>https://www.flyn.org/reference/chacon-14-git/</link>
      <pubDate>Wed, 01 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/chacon-14-git/</guid>
      <description></description>
    </item>
    
    <item>
      <title>SEI CERT C Coding Standard: 98 Rules for Developing Safe, Reliable, and Secure Systems</title>
      <link>https://www.flyn.org/reference/seacord-6-c-coding-standard/</link>
      <pubDate>Wed, 01 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/seacord-6-c-coding-standard/</guid>
      <description></description>
    </item>
    
    <item>
      <title>MinimaLT: Minimal-latency Networking Through Better Security</title>
      <link>https://www.flyn.org/publications/MinimaLT-Minimal-latency-Networking-Through-Better-Security/</link>
      <pubDate>Fri, 01 Nov 2013 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/MinimaLT-Minimal-latency-Networking-Through-Better-Security/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Learn Programming&#43;&#43;: The Design, Implementation and Deployment of an Intelligent Environment for the Teaching and Learning of Computer Programming</title>
      <link>https://www.flyn.org/reference/hunter-13-learnprogramming/</link>
      <pubDate>Mon, 01 Jul 2013 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/hunter-13-learnprogramming/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Rethinking Operating System Interfaces to Support Robust Network Applications</title>
      <link>https://www.flyn.org/publications/Rethinking-Operating-System-Interfaces-to-Support-Robust-Network-Applications/</link>
      <pubDate>Wed, 01 May 2013 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Rethinking-Operating-System-Interfaces-to-Support-Robust-Network-Applications/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Simple-to-use, Secure-by-design Networking in Ethos</title>
      <link>https://www.flyn.org/publications/Simple-to-use-Secure-by-design-Networking-in-Ethos/</link>
      <pubDate>Mon, 01 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Simple-to-use-Secure-by-design-Networking-in-Ethos/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Lazy Kernel Hacker and Application Programmer</title>
      <link>https://www.flyn.org/publications/The-Lazy-Kernel-Hacker-and-Application-Programmer/</link>
      <pubDate>Fri, 01 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/The-Lazy-Kernel-Hacker-and-Application-Programmer/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Online Python Tutor: Embeddable Web-Based Program Visualization for CS Education</title>
      <link>https://www.flyn.org/reference/guo-13-python-tutor/</link>
      <pubDate>Tue, 01 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/guo-13-python-tutor/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Rethinking SSL Development in an Appified World</title>
      <link>https://www.flyn.org/reference/fahl-13-appified-ssl/</link>
      <pubDate>Tue, 01 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/fahl-13-appified-ssl/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Ethos Project: Security Through Simplification</title>
      <link>https://www.flyn.org/publications/The-Ethos-Project-Security-Through-Simplification/</link>
      <pubDate>Mon, 01 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/The-Ethos-Project-Security-Through-Simplification/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Rethinking Operating System Interfaces to Support Robust Applications</title>
      <link>https://www.flyn.org/publications/Rethinking-Operating-System-Interfaces-to-Support-Robust-Applications/</link>
      <pubDate>Tue, 01 May 2012 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Rethinking-Operating-System-Interfaces-to-Support-Robust-Applications/</guid>
      <description></description>
    </item>
    
    <item>
      <title>R3: Repeatability, Reproducibility and Rigor</title>
      <link>https://www.flyn.org/reference/vitek-12-repeatability/</link>
      <pubDate>Thu, 01 Mar 2012 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/vitek-12-repeatability/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Let&#39;s Help Johnny Write Robust Applications</title>
      <link>https://www.flyn.org/publications/Lets-Help-Johnny-Write-Robust-Applications/</link>
      <pubDate>Sun, 01 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Lets-Help-Johnny-Write-Robust-Applications/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The most dangerous code in the world: validating SSL certificates in non-browser software</title>
      <link>https://www.flyn.org/reference/georgiev-12-non-browser-ssl/</link>
      <pubDate>Sun, 01 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/georgiev-12-non-browser-ssl/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The security impact of a new cryptographic library</title>
      <link>https://www.flyn.org/reference/bernstein-12-nacl/</link>
      <pubDate>Sun, 01 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/bernstein-12-nacl/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Why Eve and Mallory love Android: an analysis of Android SSL (in)security</title>
      <link>https://www.flyn.org/reference/fahl-12-android-ssl/</link>
      <pubDate>Sun, 01 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/fahl-12-android-ssl/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Digital identity security architecture in Ethos</title>
      <link>https://www.flyn.org/publications/Digital-identity-security-architecture-in-Ethos/</link>
      <pubDate>Sat, 01 Oct 2011 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Digital-identity-security-architecture-in-Ethos/</guid>
      <description></description>
    </item>
    
    <item>
      <title>NIST Special Publication 800--145</title>
      <link>https://www.flyn.org/reference/nist-800-145/</link>
      <pubDate>Thu, 01 Sep 2011 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/nist-800-145/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Experiences In Cyber Security Education: The MIT Lincoln Laboratory Capture-the-Flag Exercise</title>
      <link>https://www.flyn.org/reference/werther-11-mit-ctf/</link>
      <pubDate>Mon, 01 Aug 2011 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/werther-11-mit-ctf/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Beej&#39;s Guide to Network Programming Using Internet Sockets</title>
      <link>https://www.flyn.org/reference/beej-11-network-programming/</link>
      <pubDate>Sat, 01 Jan 2011 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/beej-11-network-programming/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Building custom firmware with OpenWrt</title>
      <link>https://www.flyn.org/publications/Building-custom-firmware-with-OpenWrt/</link>
      <pubDate>Sun, 01 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Building-custom-firmware-with-OpenWrt/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Capsicum: practical capabilities in UNIX</title>
      <link>https://www.flyn.org/reference/watson-10-capsicum/</link>
      <pubDate>Sun, 01 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/watson-10-capsicum/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Experiences with practice-focused undergraduate security education</title>
      <link>https://www.flyn.org/reference/fanelli-10-practice-focused/</link>
      <pubDate>Sun, 01 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/fanelli-10-practice-focused/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Webseclab security education workbench</title>
      <link>https://www.flyn.org/reference/bursztein-10-websec-lab/</link>
      <pubDate>Sun, 01 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/bursztein-10-websec-lab/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Browser Security: Lessons from Google Chrome</title>
      <link>https://www.flyn.org/reference/reis-09-chrome/</link>
      <pubDate>Sat, 01 Aug 2009 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/reis-09-chrome/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Pintos Instructional Operating System Kernel</title>
      <link>https://www.flyn.org/reference/pfaff-09-pintos/</link>
      <pubDate>Thu, 01 Jan 2009 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/pfaff-09-pintos/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Nginx: The High-Performance Web Server and Reverse Proxy</title>
      <link>https://www.flyn.org/reference/reese-08-nginx/</link>
      <pubDate>Mon, 01 Sep 2008 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/reese-08-nginx/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Open source telephony: a Fedora-based VoIP server with Asterisk</title>
      <link>https://www.flyn.org/publications/Open-source-telephony-a-Fedora-based-VoIP-server-with-Asterisk/</link>
      <pubDate>Tue, 01 Jul 2008 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Open-source-telephony-a-Fedora-based-VoIP-server-with-Asterisk/</guid>
      <description></description>
    </item>
    
    <item>
      <title>From camera to website: Building an open source video streamer</title>
      <link>https://www.flyn.org/publications/From-camera-to-website-Building-an-open-source-video-streamer/</link>
      <pubDate>Tue, 01 Apr 2008 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/From-camera-to-website-Building-an-open-source-video-streamer/</guid>
      <description></description>
    </item>
    
    <item>
      <title>SEED: A Suite of Instructional Laboratories for Computer Security Education</title>
      <link>https://www.flyn.org/reference/du-08-seed/</link>
      <pubDate>Sat, 01 Mar 2008 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/du-08-seed/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Hacking: The Art of Exploitation</title>
      <link>https://www.flyn.org/reference/erickson-08-hacking/</link>
      <pubDate>Tue, 01 Jan 2008 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/erickson-08-hacking/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Serving Apples: Integrating Mac OS X clients into a Fedora network</title>
      <link>https://www.flyn.org/publications/Serving-Apples-Integrating-Mac-OS-X-clients-into-a-Fedora-network/</link>
      <pubDate>Tue, 01 Jan 2008 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Serving-Apples-Integrating-Mac-OS-X-clients-into-a-Fedora-network/</guid>
      <description></description>
    </item>
    
    <item>
      <title>When Good Instructions Go Bad: Generalizing Return-oriented Programming to RISC</title>
      <link>https://www.flyn.org/reference/buchanan-08-rop/</link>
      <pubDate>Tue, 01 Jan 2008 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/buchanan-08-rop/</guid>
      <description></description>
    </item>
    
    <item>
      <title>How to Read a Paper</title>
      <link>https://www.flyn.org/reference/keshav-07-how-to-read/</link>
      <pubDate>Sun, 01 Jul 2007 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/keshav-07-how-to-read/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Managing RPM-Based Systems with Kickstart and Yum</title>
      <link>https://www.flyn.org/reference/mccallum-07-kickstart/</link>
      <pubDate>Thu, 01 Mar 2007 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/mccallum-07-kickstart/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Disk encryption in Fedora: Past, present and future</title>
      <link>https://www.flyn.org/publications/Disk-encryption-in-Fedora-Past-present-and-future/</link>
      <pubDate>Mon, 01 Jan 2007 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Disk-encryption-in-Fedora-Past-present-and-future/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Some thoughts on security after ten years of qmail 1.0</title>
      <link>https://www.flyn.org/reference/bernstein-07-qmail/</link>
      <pubDate>Mon, 01 Jan 2007 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/bernstein-07-qmail/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Subverting the Fundamentals Sequence: Using Version Control to Enhance Course Management</title>
      <link>https://www.flyn.org/reference/clifton-07-vcs-course-management/</link>
      <pubDate>Mon, 01 Jan 2007 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/clifton-07-vcs-course-management/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Geometry of Innocent Flesh on the Bone: Return-into-libc Without Function Calls (on the x86)</title>
      <link>https://www.flyn.org/reference/shacham-07-flesh-on-bone/</link>
      <pubDate>Mon, 01 Jan 2007 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/shacham-07-flesh-on-bone/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Open Science Grid</title>
      <link>https://www.flyn.org/reference/pordes-07-osg/</link>
      <pubDate>Mon, 01 Jan 2007 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/pordes-07-osg/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Making information flow explicit in HiStar</title>
      <link>https://www.flyn.org/reference/zeldovich-06-histar/</link>
      <pubDate>Wed, 01 Nov 2006 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/zeldovich-06-histar/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Adding encryption support to HAL: A user&#39;s experience with Fedora development</title>
      <link>https://www.flyn.org/publications/Adding-encryption-support-to-HAL-A-users-experience-with-Fedora-development/</link>
      <pubDate>Sat, 01 Oct 2005 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Adding-encryption-support-to-HAL-A-users-experience-with-Fedora-development/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Developing GNOME applications with Java</title>
      <link>https://www.flyn.org/publications/Developing-GNOME-applications-with-Java/</link>
      <pubDate>Fri, 01 Jul 2005 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Developing-GNOME-applications-with-Java/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Encrypt your root filesystem</title>
      <link>https://www.flyn.org/publications/Encrypt-your-root-filesystem/</link>
      <pubDate>Sat, 01 Jan 2005 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Encrypt-your-root-filesystem/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Linux Device Drivers</title>
      <link>https://www.flyn.org/reference/corbet-linux-device-drivers/</link>
      <pubDate>Sat, 01 Jan 2005 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/corbet-linux-device-drivers/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Net-SNMP Programming Guide</title>
      <link>https://www.flyn.org/reference/rockwood-02-snmp/</link>
      <pubDate>Mon, 01 Nov 2004 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/rockwood-02-snmp/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Implementing encrypted home directories</title>
      <link>https://www.flyn.org/publications/Implementing-encrypted-home-directories/</link>
      <pubDate>Fri, 01 Aug 2003 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Implementing-encrypted-home-directories/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Preventing Privilege Escalation</title>
      <link>https://www.flyn.org/reference/provos-03-preventing-privilege-escalation/</link>
      <pubDate>Fri, 01 Aug 2003 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/provos-03-preventing-privilege-escalation/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Defcon Capture the Flag: defending vulnerable code from intense attack</title>
      <link>https://www.flyn.org/reference/cowan-03-defcon/</link>
      <pubDate>Tue, 01 Apr 2003 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/cowan-03-defcon/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Administrator’s Guide to Linux in the Windows Enterprise</title>
      <link>https://www.flyn.org/reference/tech-republic-03-linux-windows-admin/</link>
      <pubDate>Wed, 01 Jan 2003 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/tech-republic-03-linux-windows-admin/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Postfix: The Definitive Guide</title>
      <link>https://www.flyn.org/reference/dent-03-postfix/</link>
      <pubDate>Wed, 01 Jan 2003 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/dent-03-postfix/</guid>
      <description></description>
    </item>
    
    <item>
      <title>OpenLDAP Everywhere</title>
      <link>https://www.flyn.org/reference/swanson-02-openldap/</link>
      <pubDate>Sun, 01 Dec 2002 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/swanson-02-openldap/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Setuid Demystified</title>
      <link>https://www.flyn.org/reference/chen-02-demystified/</link>
      <pubDate>Thu, 01 Aug 2002 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/chen-02-demystified/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Amateur Video Production Using Free Software and Linux</title>
      <link>https://www.flyn.org/publications/Amateur-Video-Production-Using-Free-Software-and-Linux/</link>
      <pubDate>Wed, 01 May 2002 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/publications/Amateur-Video-Production-Using-Free-Software-and-Linux/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Security in Plan 9</title>
      <link>https://www.flyn.org/reference/cox-02-plan-9-security/</link>
      <pubDate>Tue, 01 Jan 2002 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/cox-02-plan-9-security/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Implementing SELinux as a Linux Security Module</title>
      <link>https://www.flyn.org/reference/smalley-02-se-linux-lsm/</link>
      <pubDate>Sat, 01 Dec 2001 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/smalley-02-se-linux-lsm/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Exploiting Format String Vulnerabilities</title>
      <link>https://www.flyn.org/reference/scut-01-format-strings/</link>
      <pubDate>Sat, 01 Sep 2001 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/scut-01-format-strings/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Integrating Flexible Support for Security Policies into the Linux Operating System</title>
      <link>https://www.flyn.org/reference/loscocco-01-flexible/</link>
      <pubDate>Fri, 01 Jun 2001 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/loscocco-01-flexible/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Cathedral and the Bazaar</title>
      <link>https://www.flyn.org/reference/raymond-99-bazaar/</link>
      <pubDate>Fri, 01 Jan 1999 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/raymond-99-bazaar/</guid>
      <description></description>
    </item>
    
    <item>
      <title>StackGuard: Automatic Adaptive Detection and Prevention of Buffer-overflow Attacks</title>
      <link>https://www.flyn.org/reference/cowan-98-stack-guard/</link>
      <pubDate>Thu, 01 Jan 1998 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/cowan-98-stack-guard/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Inevitability of Failure: The Flawed Assumption of Security in Modern Computing Environments</title>
      <link>https://www.flyn.org/reference/loscocco-98-inevitability/</link>
      <pubDate>Thu, 01 Jan 1998 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/loscocco-98-inevitability/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Smashing The Stack For Fun And Profit</title>
      <link>https://www.flyn.org/reference/one-96-smashing-stack/</link>
      <pubDate>Mon, 01 Jan 1996 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/one-96-smashing-stack/</guid>
      <description></description>
    </item>
    
    <item>
      <title>SSH---Secure Login Connections over the Internet</title>
      <link>https://www.flyn.org/reference/tatu-96-ssh/</link>
      <pubDate>Mon, 01 Jan 1996 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/tatu-96-ssh/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Unified Login with Pluggable Authentication Modules (PAM)</title>
      <link>https://www.flyn.org/reference/samar-96-pam/</link>
      <pubDate>Mon, 01 Jan 1996 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/samar-96-pam/</guid>
      <description></description>
    </item>
    
    <item>
      <title>LINUX--a Free Unix-386 Kernel</title>
      <link>https://www.flyn.org/reference/torvalds-91-linux/</link>
      <pubDate>Tue, 01 Oct 1991 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/torvalds-91-linux/</guid>
      <description></description>
    </item>
    
    <item>
      <title>An Evaluation of the Ninth SOSP Submissions or How (and How Not) to Write a Good Systems Paper</title>
      <link>https://www.flyn.org/reference/levin-88-how-to-write/</link>
      <pubDate>Sat, 01 Oct 1988 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/levin-88-how-to-write/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Project Athena Facilities---an Overview for Faculty</title>
      <link>https://www.flyn.org/reference/saltzer-88-athena/</link>
      <pubDate>Tue, 01 Mar 1988 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/saltzer-88-athena/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Development of the Domain Name System</title>
      <link>https://www.flyn.org/reference/mockapetris-88-dns/</link>
      <pubDate>Fri, 01 Jan 1988 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/mockapetris-88-dns/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The C Programming Language</title>
      <link>https://www.flyn.org/reference/kernighan-88-ansi-c/</link>
      <pubDate>Fri, 01 Jan 1988 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/kernighan-88-ansi-c/</guid>
      <description></description>
    </item>
    
    <item>
      <title>A Berkeley Odyssey</title>
      <link>https://www.flyn.org/reference/mckusick-85-odyssey/</link>
      <pubDate>Tue, 01 Jan 1985 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/mckusick-85-odyssey/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Design and implementation of the Sun network filesystem</title>
      <link>https://www.flyn.org/reference/sandberg-85-nfs/</link>
      <pubDate>Tue, 01 Jan 1985 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/sandberg-85-nfs/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The UNIX Programming Environment</title>
      <link>https://www.flyn.org/reference/kernighan-84-unix/</link>
      <pubDate>Sun, 01 Jan 1984 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/kernighan-84-unix/</guid>
      <description></description>
    </item>
    
    <item>
      <title>New Directions in Cryptography</title>
      <link>https://www.flyn.org/reference/diffie-76-new-directions/</link>
      <pubDate>Mon, 01 Nov 1976 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/diffie-76-new-directions/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The Protection of Information in Computer Systems</title>
      <link>https://www.flyn.org/reference/saltzer-75-protection/</link>
      <pubDate>Wed, 01 Jan 1975 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/saltzer-75-protection/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Protection and the Control of Information Sharing in Multics</title>
      <link>https://www.flyn.org/reference/saltzer-74-multics/</link>
      <pubDate>Mon, 01 Jul 1974 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/saltzer-74-multics/</guid>
      <description></description>
    </item>
    
    <item>
      <title>The UNIX time-sharing system</title>
      <link>https://www.flyn.org/reference/ritchie-74-unix/</link>
      <pubDate>Tue, 01 Jan 1974 00:00:00 +0000</pubDate>
      <guid>https://www.flyn.org/reference/ritchie-74-unix/</guid>
      <description></description>
    </item>
    
  </channel>
</rss>
