<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>networking | Chris Titus Tech</title><description>Recent content from Chris Titus Tech</description><link>https://christitus.com/categories/networking/</link><language>en-US</language><item><title>Best NFS Network Drive Settings for Linux</title><link>https://christitus.com/fix-nfs-network-drives/</link><guid isPermaLink="true">https://christitus.com/fix-nfs-network-drives/</guid><description>&lt;p&gt;Most people mount NFS shares with a short line and move on. That works, but if you use network storage heavily (media libraries, VMs, homelab backups, project files), your mount options directly affect reliability, boot behavior, and performance.&lt;/p&gt;
&lt;p&gt;This guide breaks down a practical high-reliability NFS option set and compares it to a basic mount setup, using Linux &lt;code&gt;nfs-utils&lt;/code&gt; mount documentation (&lt;code&gt;man 5 nfs&lt;/code&gt;) and systemd mount behavior (&lt;code&gt;man 5 systemd.mount&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;Quick Comparison: Basic vs Tuned&lt;/h2&gt;
&lt;h3&gt;Basic fstab entry&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Tuned fstab entry (example)&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs nfsvers=4.1,bg,hard,nofail,noatime,rsize=1048576,wsize=1048576,timeo=600,retrans=5,x-systemd.automount,x-systemd.mount-timeout=90,_netdev 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;What changes?&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Basic (&lt;code&gt;defaults&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Tuned Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NFS protocol version&lt;/td&gt;
&lt;td&gt;Auto-negotiate&lt;/td&gt;
&lt;td&gt;Pinned to &lt;code&gt;4.1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure behavior&lt;/td&gt;
&lt;td&gt;Default retry behavior&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;hard&lt;/code&gt; retries forever (safer for data integrity)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boot experience&lt;/td&gt;
&lt;td&gt;May block depending on environment&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nofail&lt;/code&gt; + &lt;code&gt;x-systemd.automount&lt;/code&gt; helps avoid boot hangs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network timing&lt;/td&gt;
&lt;td&gt;Generic defaults&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;timeo=600,retrans=5&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Throughput tuning&lt;/td&gt;
&lt;td&gt;Negotiated defaults&lt;/td&gt;
&lt;td&gt;Forces &lt;code&gt;rsize/wsize&lt;/code&gt; up to 1 MiB cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access-time writes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;relatime&lt;/code&gt; typically&lt;/td&gt;
&lt;td&gt;&lt;code&gt;noatime&lt;/code&gt; to reduce metadata writes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network ordering&lt;/td&gt;
&lt;td&gt;Auto-detected for NFS&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;_netdev&lt;/code&gt; dependency&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Option-by-Option Breakdown&lt;/h2&gt;
&lt;p&gt;Reference base: &lt;code&gt;man 5 nfs&lt;/code&gt; and &lt;code&gt;man 5 systemd.mount&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;nfsvers=4.1&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Pins the client to NFSv4.1.&lt;/li&gt;
&lt;li&gt;Official behavior: Without &lt;code&gt;nfsvers&lt;/code&gt; (or &lt;code&gt;vers&lt;/code&gt;), Linux clients typically try newer NFS versions first and negotiate down.&lt;/li&gt;
&lt;li&gt;Why use it: Predictability. If server and clients are known-good on 4.1, pinning avoids surprises after updates.&lt;/li&gt;
&lt;li&gt;Tradeoff: You lose automatic use of newer protocol features (for example, if 4.2 is supported and useful).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;bg&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: If mount fails/timeouts, mount helper retries in the background.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): Parent returns success while child keeps retrying.&lt;/li&gt;
&lt;li&gt;systemd detail (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): &lt;code&gt;systemd-fstab-generator&lt;/code&gt; translates &lt;code&gt;bg&lt;/code&gt; semantics and effectively applies behavior similar to long retries plus &lt;code&gt;fg,nofail&lt;/code&gt; handling under systemd job control.&lt;/li&gt;
&lt;li&gt;Why use it: Better boot resilience when NAS/network is slow.&lt;/li&gt;
&lt;li&gt;Tradeoff: Failure may be less obvious immediately because retries continue in background.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;hard&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: NFS operations retry indefinitely after timeout.&lt;/li&gt;
&lt;li&gt;Official behavior: &lt;code&gt;hard&lt;/code&gt; is default and strongly preferred for data integrity; &lt;code&gt;soft&lt;/code&gt; can return I/O errors and may risk silent corruption in some workflows.&lt;/li&gt;
&lt;li&gt;Why use it: Correctness and durability over convenience.&lt;/li&gt;
&lt;li&gt;Tradeoff: Apps can hang waiting for server recovery.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;nofail&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Mount is wanted, not required, during boot.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): Boot continues even if mount is unavailable; unit is not ordered to block boot target completion.&lt;/li&gt;
&lt;li&gt;Why use it: Prevent boot failures when NAS is down.&lt;/li&gt;
&lt;li&gt;Tradeoff: Service depending on that path may fail later unless you handle dependency checks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;noatime&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Disables access-time updates on reads.&lt;/li&gt;
&lt;li&gt;Why use it: Reduces metadata traffic and write amplification on busy shares.&lt;/li&gt;
&lt;li&gt;Tradeoff: Loses accurate &lt;code&gt;atime&lt;/code&gt; semantics for tools/workflows that rely on access timestamps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;rsize=1048576&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Sets max read request payload to 1,048,576 bytes (1 MiB).&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): Linux NFS client max read payload is 1 MiB; unsupported values are clamped/rounded according to rules.&lt;/li&gt;
&lt;li&gt;Why use it: High-throughput sequential read workloads can benefit.&lt;/li&gt;
&lt;li&gt;Tradeoff: If network/server path can’t handle large I/O well, negotiated defaults may perform more consistently.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;wsize=1048576&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Sets max write request payload to 1 MiB.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): Same cap/rounding behavior as &lt;code&gt;rsize&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Why use it: Helps throughput for large sequential writes.&lt;/li&gt;
&lt;li&gt;Tradeoff: Same caution as &lt;code&gt;rsize&lt;/code&gt;; test with your server/network.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;timeo=600&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Sets RPC timeout in deciseconds.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): For TCP, &lt;code&gt;600&lt;/code&gt; means 60 seconds; TCP uses linear backoff and this value is already the standard default for TCP/RDMA.&lt;/li&gt;
&lt;li&gt;Why use it: Mainly explicitness/documentation in your &lt;code&gt;fstab&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Tradeoff: Usually redundant for TCP NFS because it matches default behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;retrans=5&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Number of retries before the client escalates recovery behavior.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): TCP default retry count is lower by default; with &lt;code&gt;hard&lt;/code&gt;, the client still continues broader recovery even after retry cycles.&lt;/li&gt;
&lt;li&gt;Why use it: More tolerance for transient network stalls before warning/recovery transitions.&lt;/li&gt;
&lt;li&gt;Tradeoff: Longer delay before surfacing responsiveness issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;x-systemd.automount&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Creates an automount unit so the share mounts on first access rather than during early boot.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): Generates an automount unit from &lt;code&gt;fstab&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Why use it: Excellent for laptops/desktops/homelabs where network readiness timing is inconsistent.&lt;/li&gt;
&lt;li&gt;Tradeoff: First access to the path incurs mount latency.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;x-systemd.mount-timeout=90&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Limits how long systemd waits for mount command completion.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): &lt;code&gt;fstab&lt;/code&gt;-only option that maps to mount job timeout behavior.&lt;/li&gt;
&lt;li&gt;Why use it: Prevents very long hangs on dead endpoints.&lt;/li&gt;
&lt;li&gt;Tradeoff: Too short a timeout can fail mounts on slow links/startup races.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;_netdev&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Explicitly marks mount as network-dependent.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): Pulls in network-online ordering and treats mount as remote fs.&lt;/li&gt;
&lt;li&gt;Why use it: Makes dependency intent explicit, especially in complex setups/VPN/overlay networks.&lt;/li&gt;
&lt;li&gt;Tradeoff: Usually redundant for plain NFS, but helpful for clarity and edge cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Final &lt;code&gt;0 0&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;First &lt;code&gt;0&lt;/code&gt;: dump backup utility field (commonly unused, usually &lt;code&gt;0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Second &lt;code&gt;0&lt;/code&gt;: &lt;code&gt;fsck&lt;/code&gt; order. NFS is network fs and not checked via local &lt;code&gt;fsck&lt;/code&gt;, so &lt;code&gt;0&lt;/code&gt; is correct.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Is the Tuned Line Always Better?&lt;/h2&gt;
&lt;p&gt;No. A basic entry is fine for light use:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is often enough for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Home media shares&lt;/li&gt;
&lt;li&gt;Occasional backups&lt;/li&gt;
&lt;li&gt;Non-critical personal files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use the tuned profile when you care about predictable behavior under failure and want stricter control over boot/mount characteristics.&lt;/p&gt;
&lt;h2&gt;Practical Recommended Profiles&lt;/h2&gt;
&lt;h3&gt;1) Balanced desktop/laptop&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs nfsvers=4.1,hard,nofail,_netdev,x-systemd.automount,x-systemd.mount-timeout=90 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2) Throughput-focused LAN workstation&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs nfsvers=4.1,hard,noatime,rsize=1048576,wsize=1048576,timeo=600,retrans=5,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3) Minimal and safe&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Verify What Is Actually Active&lt;/h2&gt;
&lt;p&gt;After mounting, validate effective options (especially negotiated &lt;code&gt;rsize/wsize&lt;/code&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;findmnt -t nfs,nfs4
nfsstat -m
cat /proc/mounts | grep &apos; /mnt/data &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The value in &lt;code&gt;fstab&lt;/code&gt; is your request. The effective value can differ after client/server negotiation.&lt;/p&gt;
&lt;h2&gt;Official Documentation Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;man 5 nfs&lt;/code&gt; (from nfs-utils package on Linux)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;man 8 mount.nfs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;man 5 systemd.mount&lt;/code&gt; (for &lt;code&gt;x-systemd.*&lt;/code&gt;, &lt;code&gt;_netdev&lt;/code&gt;, and &lt;code&gt;nofail&lt;/code&gt; behavior)&lt;/li&gt;
&lt;li&gt;Upstream nfs-utils project: &lt;a href=&quot;https://github.com/stefanha/nfs-utils&quot;&gt;https://github.com/stefanha/nfs-utils&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;If you just want a stable setup, start with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you want stronger control over reliability and behavior under failures, your advanced line is a strong baseline, especially with &lt;code&gt;hard&lt;/code&gt;, &lt;code&gt;nofail&lt;/code&gt;, and &lt;code&gt;x-systemd.automount&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The best NFS config is not the longest one. It is the one you can explain, verify, and maintain.&lt;/p&gt;
</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Most people mount NFS shares with a short line and move on. That works, but if you use network storage heavily (media libraries, VMs, homelab backups, project files), your mount options directly affect reliability, boot behavior, and performance.&lt;/p&gt;
&lt;p&gt;This guide breaks down a practical high-reliability NFS option set and compares it to a basic mount setup, using Linux &lt;code&gt;nfs-utils&lt;/code&gt; mount documentation (&lt;code&gt;man 5 nfs&lt;/code&gt;) and systemd mount behavior (&lt;code&gt;man 5 systemd.mount&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;Quick Comparison: Basic vs Tuned&lt;/h2&gt;
&lt;h3&gt;Basic fstab entry&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Tuned fstab entry (example)&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs nfsvers=4.1,bg,hard,nofail,noatime,rsize=1048576,wsize=1048576,timeo=600,retrans=5,x-systemd.automount,x-systemd.mount-timeout=90,_netdev 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;What changes?&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Basic (&lt;code&gt;defaults&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Tuned Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NFS protocol version&lt;/td&gt;
&lt;td&gt;Auto-negotiate&lt;/td&gt;
&lt;td&gt;Pinned to &lt;code&gt;4.1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure behavior&lt;/td&gt;
&lt;td&gt;Default retry behavior&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;hard&lt;/code&gt; retries forever (safer for data integrity)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boot experience&lt;/td&gt;
&lt;td&gt;May block depending on environment&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nofail&lt;/code&gt; + &lt;code&gt;x-systemd.automount&lt;/code&gt; helps avoid boot hangs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network timing&lt;/td&gt;
&lt;td&gt;Generic defaults&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;timeo=600,retrans=5&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Throughput tuning&lt;/td&gt;
&lt;td&gt;Negotiated defaults&lt;/td&gt;
&lt;td&gt;Forces &lt;code&gt;rsize/wsize&lt;/code&gt; up to 1 MiB cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access-time writes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;relatime&lt;/code&gt; typically&lt;/td&gt;
&lt;td&gt;&lt;code&gt;noatime&lt;/code&gt; to reduce metadata writes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network ordering&lt;/td&gt;
&lt;td&gt;Auto-detected for NFS&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;_netdev&lt;/code&gt; dependency&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Option-by-Option Breakdown&lt;/h2&gt;
&lt;p&gt;Reference base: &lt;code&gt;man 5 nfs&lt;/code&gt; and &lt;code&gt;man 5 systemd.mount&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;nfsvers=4.1&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Pins the client to NFSv4.1.&lt;/li&gt;
&lt;li&gt;Official behavior: Without &lt;code&gt;nfsvers&lt;/code&gt; (or &lt;code&gt;vers&lt;/code&gt;), Linux clients typically try newer NFS versions first and negotiate down.&lt;/li&gt;
&lt;li&gt;Why use it: Predictability. If server and clients are known-good on 4.1, pinning avoids surprises after updates.&lt;/li&gt;
&lt;li&gt;Tradeoff: You lose automatic use of newer protocol features (for example, if 4.2 is supported and useful).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;bg&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: If mount fails/timeouts, mount helper retries in the background.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): Parent returns success while child keeps retrying.&lt;/li&gt;
&lt;li&gt;systemd detail (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): &lt;code&gt;systemd-fstab-generator&lt;/code&gt; translates &lt;code&gt;bg&lt;/code&gt; semantics and effectively applies behavior similar to long retries plus &lt;code&gt;fg,nofail&lt;/code&gt; handling under systemd job control.&lt;/li&gt;
&lt;li&gt;Why use it: Better boot resilience when NAS/network is slow.&lt;/li&gt;
&lt;li&gt;Tradeoff: Failure may be less obvious immediately because retries continue in background.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;hard&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: NFS operations retry indefinitely after timeout.&lt;/li&gt;
&lt;li&gt;Official behavior: &lt;code&gt;hard&lt;/code&gt; is default and strongly preferred for data integrity; &lt;code&gt;soft&lt;/code&gt; can return I/O errors and may risk silent corruption in some workflows.&lt;/li&gt;
&lt;li&gt;Why use it: Correctness and durability over convenience.&lt;/li&gt;
&lt;li&gt;Tradeoff: Apps can hang waiting for server recovery.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;nofail&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Mount is wanted, not required, during boot.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): Boot continues even if mount is unavailable; unit is not ordered to block boot target completion.&lt;/li&gt;
&lt;li&gt;Why use it: Prevent boot failures when NAS is down.&lt;/li&gt;
&lt;li&gt;Tradeoff: Service depending on that path may fail later unless you handle dependency checks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;noatime&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Disables access-time updates on reads.&lt;/li&gt;
&lt;li&gt;Why use it: Reduces metadata traffic and write amplification on busy shares.&lt;/li&gt;
&lt;li&gt;Tradeoff: Loses accurate &lt;code&gt;atime&lt;/code&gt; semantics for tools/workflows that rely on access timestamps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;rsize=1048576&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Sets max read request payload to 1,048,576 bytes (1 MiB).&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): Linux NFS client max read payload is 1 MiB; unsupported values are clamped/rounded according to rules.&lt;/li&gt;
&lt;li&gt;Why use it: High-throughput sequential read workloads can benefit.&lt;/li&gt;
&lt;li&gt;Tradeoff: If network/server path can’t handle large I/O well, negotiated defaults may perform more consistently.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;wsize=1048576&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Sets max write request payload to 1 MiB.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): Same cap/rounding behavior as &lt;code&gt;rsize&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Why use it: Helps throughput for large sequential writes.&lt;/li&gt;
&lt;li&gt;Tradeoff: Same caution as &lt;code&gt;rsize&lt;/code&gt;; test with your server/network.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;timeo=600&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Sets RPC timeout in deciseconds.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): For TCP, &lt;code&gt;600&lt;/code&gt; means 60 seconds; TCP uses linear backoff and this value is already the standard default for TCP/RDMA.&lt;/li&gt;
&lt;li&gt;Why use it: Mainly explicitness/documentation in your &lt;code&gt;fstab&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Tradeoff: Usually redundant for TCP NFS because it matches default behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;retrans=5&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Number of retries before the client escalates recovery behavior.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): TCP default retry count is lower by default; with &lt;code&gt;hard&lt;/code&gt;, the client still continues broader recovery even after retry cycles.&lt;/li&gt;
&lt;li&gt;Why use it: More tolerance for transient network stalls before warning/recovery transitions.&lt;/li&gt;
&lt;li&gt;Tradeoff: Longer delay before surfacing responsiveness issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;x-systemd.automount&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Creates an automount unit so the share mounts on first access rather than during early boot.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): Generates an automount unit from &lt;code&gt;fstab&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Why use it: Excellent for laptops/desktops/homelabs where network readiness timing is inconsistent.&lt;/li&gt;
&lt;li&gt;Tradeoff: First access to the path incurs mount latency.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;x-systemd.mount-timeout=90&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Limits how long systemd waits for mount command completion.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): &lt;code&gt;fstab&lt;/code&gt;-only option that maps to mount job timeout behavior.&lt;/li&gt;
&lt;li&gt;Why use it: Prevents very long hangs on dead endpoints.&lt;/li&gt;
&lt;li&gt;Tradeoff: Too short a timeout can fail mounts on slow links/startup races.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;_netdev&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Explicitly marks mount as network-dependent.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): Pulls in network-online ordering and treats mount as remote fs.&lt;/li&gt;
&lt;li&gt;Why use it: Makes dependency intent explicit, especially in complex setups/VPN/overlay networks.&lt;/li&gt;
&lt;li&gt;Tradeoff: Usually redundant for plain NFS, but helpful for clarity and edge cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Final &lt;code&gt;0 0&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;First &lt;code&gt;0&lt;/code&gt;: dump backup utility field (commonly unused, usually &lt;code&gt;0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Second &lt;code&gt;0&lt;/code&gt;: &lt;code&gt;fsck&lt;/code&gt; order. NFS is network fs and not checked via local &lt;code&gt;fsck&lt;/code&gt;, so &lt;code&gt;0&lt;/code&gt; is correct.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Is the Tuned Line Always Better?&lt;/h2&gt;
&lt;p&gt;No. A basic entry is fine for light use:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is often enough for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Home media shares&lt;/li&gt;
&lt;li&gt;Occasional backups&lt;/li&gt;
&lt;li&gt;Non-critical personal files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use the tuned profile when you care about predictable behavior under failure and want stricter control over boot/mount characteristics.&lt;/p&gt;
&lt;h2&gt;Practical Recommended Profiles&lt;/h2&gt;
&lt;h3&gt;1) Balanced desktop/laptop&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs nfsvers=4.1,hard,nofail,_netdev,x-systemd.automount,x-systemd.mount-timeout=90 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2) Throughput-focused LAN workstation&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs nfsvers=4.1,hard,noatime,rsize=1048576,wsize=1048576,timeo=600,retrans=5,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3) Minimal and safe&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Verify What Is Actually Active&lt;/h2&gt;
&lt;p&gt;After mounting, validate effective options (especially negotiated &lt;code&gt;rsize/wsize&lt;/code&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;findmnt -t nfs,nfs4
nfsstat -m
cat /proc/mounts | grep &apos; /mnt/data &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The value in &lt;code&gt;fstab&lt;/code&gt; is your request. The effective value can differ after client/server negotiation.&lt;/p&gt;
&lt;h2&gt;Official Documentation Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;man 5 nfs&lt;/code&gt; (from nfs-utils package on Linux)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;man 8 mount.nfs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;man 5 systemd.mount&lt;/code&gt; (for &lt;code&gt;x-systemd.*&lt;/code&gt;, &lt;code&gt;_netdev&lt;/code&gt;, and &lt;code&gt;nofail&lt;/code&gt; behavior)&lt;/li&gt;
&lt;li&gt;Upstream nfs-utils project: &lt;a href=&quot;https://github.com/stefanha/nfs-utils&quot;&gt;https://github.com/stefanha/nfs-utils&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;If you just want a stable setup, start with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you want stronger control over reliability and behavior under failures, your advanced line is a strong baseline, especially with &lt;code&gt;hard&lt;/code&gt;, &lt;code&gt;nofail&lt;/code&gt;, and &lt;code&gt;x-systemd.automount&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The best NFS config is not the longest one. It is the one you can explain, verify, and maintain.&lt;/p&gt;
</content:encoded></item><item><title>Securing Your Network: A Comprehensive Guide to Checking and Enhancing Network Security</title><link>https://christitus.com/check-network-security/</link><guid isPermaLink="true">https://christitus.com/check-network-security/</guid><description>&lt;p&gt;This article explains how to check to see if your network is secure, and if you have any open ports or services that could be vulnerable to attack. It covers both Windows and Linux operating systems, and provides step-by-step instructions for using various tools to scan your network for vulnerabilities.&lt;/p&gt;

&lt;h2&gt;Basic Network Scan&lt;/h2&gt;
&lt;p&gt;To check your network you can use &lt;a href=&quot;http://grc.com&quot;&gt;grc.com&lt;/a&gt; to perform a basic network scan. It will show if you have any open ports or services that could be exposed to the internet. You can also use tools like Nmap or Wireshark to perform more in-depth scans and analysis of your network traffic.&lt;/p&gt;
&lt;p&gt;GRC&apos;s ShieldsUP! service is a popular tool for checking the security of your network. It tests for open ports and vulnerabilities that could be exploited by attackers. You can access it at &lt;a href=&quot;https://www.grc.com/shieldsup&quot;&gt;https://www.grc.com/shieldsup&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: You should see something like this below&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/grc.webp&quot; alt=&quot;grc&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Windows Scan&lt;/h3&gt;
&lt;p&gt;On Windows, you can use the built-in Command Prompt or PowerShell to check for open ports. The &lt;code&gt;netstat&lt;/code&gt; command is commonly used for this purpose. Open Command Prompt and run the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;netstat -an
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will display a list of all active connections and listening ports on your system. Look for any entries that show &quot;LISTENING&quot; to identify open ports.&lt;/p&gt;
&lt;h3&gt;Linux Scan&lt;/h3&gt;
&lt;p&gt;On Linux, you can use the &lt;code&gt;netstat&lt;/code&gt; command as well, or you can use &lt;code&gt;ss&lt;/code&gt; which is a more modern tool. Open a terminal and run the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo netstat -tuln
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: netstat package is in the net-tools package, which may not be installed by default on some Linux distributions. You can install it using your package manager (e.g., &lt;code&gt;sudo apt install net-tools&lt;/code&gt; on Debian-based systems).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Newer Systems use &lt;code&gt;ss&lt;/code&gt; instead of &lt;code&gt;netstat&lt;/code&gt;. You can run the following command to check for open ports:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ss -tuln
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will show you all the TCP and UDP ports that are currently listening on your system. Look for any entries that indicate open ports.&lt;/p&gt;
&lt;h3&gt;Check for Outside Addresses&lt;/h3&gt;
&lt;p&gt;From your netstat or ss output, you can identify any external IP addresses that are connected to your system. This can help you detect unauthorized access or potential security threats.&lt;/p&gt;
&lt;h3&gt;Find what is Running on the Open Ports&lt;/h3&gt;
&lt;p&gt;Windows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# PowerShell — replace 8080 with your port
netstat -ano | findstr :8080

# Then look up the PID
tasklist | findstr &amp;lt;PID&amp;gt;

# PowerShell one-liner (shows process name directly)
Get-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Linux:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ss (modern, preferred)
ss -tulnp | grep :8080

# netstat (older systems)
netstat -tulnp | grep :8080

# lsof — shows process name + PID
lsof -i :8080

# fuser — just the PID
fuser 8080/tcp
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Securing a Network&lt;/h2&gt;
&lt;h3&gt;Routers&lt;/h3&gt;
&lt;p&gt;If you are using a router your ISP provided, I&apos;d recommend getting something like a Ubiquiti unifi gateway or a pfSense box. These devices provide better security features and allow you to have more control over your network. You can set up firewalls, VPNs, and other security measures to protect your network from potential threats.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubiquiti = easy to setup and manage but expensive&lt;/li&gt;
&lt;li&gt;pfSense = more complex to setup and manage but much cheaper with build your own hardware setups. Or buy a pre-built appliance from Netgate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other 3rd party routers like Asus, TP-Link, etc. can be decent but they often have security vulnerabilities and may not receive regular updates. They probably are better than the ISP provided router but I would recommend going with a more reputable brand if you want better security.&lt;/p&gt;
&lt;p&gt;Resources for pfSense:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLjGQNuuUzvmsuXCoj6g6vm1N-ZeLJso6o&quot;&gt;Lawerence PC Security&apos;s pfSense Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.netgate.com/pfsense/en/latest/&quot;&gt;Netgate&apos;s pfSense Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Firewall&lt;/h3&gt;
&lt;p&gt;DO NOT buy a firewall or internet suite... they are terrible.&lt;/p&gt;
&lt;p&gt;Check your windows firewall with &lt;code&gt;wf.msc&lt;/code&gt; and make sure it is enabled and properly configured. You can create rules to block incoming connections on specific ports or from specific IP addresses.&lt;/p&gt;
&lt;p&gt;For linux I&apos;d recommned using &lt;code&gt;ufw&lt;/code&gt; (Uncomplicated Firewall) which is a user-friendly interface for managing iptables. You can enable it with the following commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or configure with a gui like &lt;code&gt;gufw&lt;/code&gt; or &lt;code&gt;firewall-config&lt;/code&gt; depending on your linux distribution.&lt;/p&gt;
&lt;h4&gt;3rd Party Firewall Software&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;simplewall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Lightweight WFP-based per-app firewall, no background service required&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/henrypp/simplewall&quot;&gt;github.com/henrypp/simplewall&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Windows Firewall Control (WFC)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;GUI front-end for the built-in Windows Firewall by Malwarebytes, free tier available&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.binisoft.org/wfc&quot;&gt;binisoft.org/wfc&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TinyWall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Lightweight wrapper around Windows Firewall, whitelist-based, very low resource usage&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://tinywall.pados.hu&quot;&gt;tinywall.pados.hu&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenSnitch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-FCC624?logo=linux&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Application-level outbound firewall, prompts on first connection per app&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/evilsocket/opensnitch&quot;&gt;github.com/evilsocket/opensnitch&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ufw / gufw&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-FCC624?logo=linux&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Uncomplicated Firewall with optional GUI, default on many distros&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://launchpad.net/ufw&quot;&gt;launchpad.net/ufw&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;firewalld&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-FCC624?logo=linux&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Dynamic firewall manager used on Fedora/RHEL/Arch, supports zones&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://firewalld.org&quot;&gt;firewalld.org&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;VPN&lt;/h3&gt;
&lt;p&gt;VPN is a bandaid and can fix some issues but it is not a replacement for proper network security. It can help protect your data from being intercepted by encrypting your internet traffic, but it does not protect you from vulnerabilities in your network or devices. If you have a VPN, make sure to use a reputable provider.&lt;/p&gt;
&lt;p&gt;All &quot;security&quot; influencers pushing VPNs are just trying to make a quick buck. A VPN can be useful in certain situations, but it is not a silver bullet for network security. Focus on securing your network and devices first, and use a VPN as an additional layer of protection if needed.&lt;/p&gt;
&lt;h2&gt;Check Devices on Your Network&lt;/h2&gt;
&lt;p&gt;You need to login to your router and check the list of connected devices. This will show you all the devices that are currently connected to your network, including their IP addresses and MAC addresses. Look for any devices that you do not recognize or that should not be on your network. If you find any suspicious devices, you can block them from accessing your network through your router&apos;s settings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ABOVE IS ACTIVE PROTECTION AND YOU MUST KEEP DOING IT TO MAINTAIN SECURITY&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Other than above, you can use software like Angry IP Scanner or Advanced IP Scanner to scan your network for connected devices. These tools will show you all the devices that are currently connected to your network, along with their IP addresses and other information. You can use this information to identify any unauthorized devices and take action to secure your network.&lt;/p&gt;
&lt;p&gt;Links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://angryip.org/&quot;&gt;Angry IP Scanner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.advanced-ip-scanner.com/&quot;&gt;Advanced IP Scanner&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Closing Thoughts&lt;/h2&gt;
&lt;p&gt;Security is a journey, not a destination. You need to continuously monitor and maintain your network security to protect yourself from potential threats. Regularly check for open ports, update your software and firmware, and be vigilant about any suspicious activity on your network. By taking these steps, you can help ensure that your network remains secure and protected from potential attacks.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/n7cjd5E_nsc&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This article explains how to check to see if your network is secure, and if you have any open ports or services that could be vulnerable to attack. It covers both Windows and Linux operating systems, and provides step-by-step instructions for using various tools to scan your network for vulnerabilities.&lt;/p&gt;

&lt;h2&gt;Basic Network Scan&lt;/h2&gt;
&lt;p&gt;To check your network you can use &lt;a href=&quot;http://grc.com&quot;&gt;grc.com&lt;/a&gt; to perform a basic network scan. It will show if you have any open ports or services that could be exposed to the internet. You can also use tools like Nmap or Wireshark to perform more in-depth scans and analysis of your network traffic.&lt;/p&gt;
&lt;p&gt;GRC&apos;s ShieldsUP! service is a popular tool for checking the security of your network. It tests for open ports and vulnerabilities that could be exploited by attackers. You can access it at &lt;a href=&quot;https://www.grc.com/shieldsup&quot;&gt;https://www.grc.com/shieldsup&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: You should see something like this below&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/grc.webp&quot; alt=&quot;grc&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Windows Scan&lt;/h3&gt;
&lt;p&gt;On Windows, you can use the built-in Command Prompt or PowerShell to check for open ports. The &lt;code&gt;netstat&lt;/code&gt; command is commonly used for this purpose. Open Command Prompt and run the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;netstat -an
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will display a list of all active connections and listening ports on your system. Look for any entries that show &quot;LISTENING&quot; to identify open ports.&lt;/p&gt;
&lt;h3&gt;Linux Scan&lt;/h3&gt;
&lt;p&gt;On Linux, you can use the &lt;code&gt;netstat&lt;/code&gt; command as well, or you can use &lt;code&gt;ss&lt;/code&gt; which is a more modern tool. Open a terminal and run the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo netstat -tuln
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: netstat package is in the net-tools package, which may not be installed by default on some Linux distributions. You can install it using your package manager (e.g., &lt;code&gt;sudo apt install net-tools&lt;/code&gt; on Debian-based systems).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Newer Systems use &lt;code&gt;ss&lt;/code&gt; instead of &lt;code&gt;netstat&lt;/code&gt;. You can run the following command to check for open ports:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ss -tuln
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will show you all the TCP and UDP ports that are currently listening on your system. Look for any entries that indicate open ports.&lt;/p&gt;
&lt;h3&gt;Check for Outside Addresses&lt;/h3&gt;
&lt;p&gt;From your netstat or ss output, you can identify any external IP addresses that are connected to your system. This can help you detect unauthorized access or potential security threats.&lt;/p&gt;
&lt;h3&gt;Find what is Running on the Open Ports&lt;/h3&gt;
&lt;p&gt;Windows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# PowerShell — replace 8080 with your port
netstat -ano | findstr :8080

# Then look up the PID
tasklist | findstr &amp;lt;PID&amp;gt;

# PowerShell one-liner (shows process name directly)
Get-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Linux:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ss (modern, preferred)
ss -tulnp | grep :8080

# netstat (older systems)
netstat -tulnp | grep :8080

# lsof — shows process name + PID
lsof -i :8080

# fuser — just the PID
fuser 8080/tcp
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Securing a Network&lt;/h2&gt;
&lt;h3&gt;Routers&lt;/h3&gt;
&lt;p&gt;If you are using a router your ISP provided, I&apos;d recommend getting something like a Ubiquiti unifi gateway or a pfSense box. These devices provide better security features and allow you to have more control over your network. You can set up firewalls, VPNs, and other security measures to protect your network from potential threats.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubiquiti = easy to setup and manage but expensive&lt;/li&gt;
&lt;li&gt;pfSense = more complex to setup and manage but much cheaper with build your own hardware setups. Or buy a pre-built appliance from Netgate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other 3rd party routers like Asus, TP-Link, etc. can be decent but they often have security vulnerabilities and may not receive regular updates. They probably are better than the ISP provided router but I would recommend going with a more reputable brand if you want better security.&lt;/p&gt;
&lt;p&gt;Resources for pfSense:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLjGQNuuUzvmsuXCoj6g6vm1N-ZeLJso6o&quot;&gt;Lawerence PC Security&apos;s pfSense Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.netgate.com/pfsense/en/latest/&quot;&gt;Netgate&apos;s pfSense Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Firewall&lt;/h3&gt;
&lt;p&gt;DO NOT buy a firewall or internet suite... they are terrible.&lt;/p&gt;
&lt;p&gt;Check your windows firewall with &lt;code&gt;wf.msc&lt;/code&gt; and make sure it is enabled and properly configured. You can create rules to block incoming connections on specific ports or from specific IP addresses.&lt;/p&gt;
&lt;p&gt;For linux I&apos;d recommned using &lt;code&gt;ufw&lt;/code&gt; (Uncomplicated Firewall) which is a user-friendly interface for managing iptables. You can enable it with the following commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or configure with a gui like &lt;code&gt;gufw&lt;/code&gt; or &lt;code&gt;firewall-config&lt;/code&gt; depending on your linux distribution.&lt;/p&gt;
&lt;h4&gt;3rd Party Firewall Software&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;simplewall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Lightweight WFP-based per-app firewall, no background service required&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/henrypp/simplewall&quot;&gt;github.com/henrypp/simplewall&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Windows Firewall Control (WFC)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;GUI front-end for the built-in Windows Firewall by Malwarebytes, free tier available&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.binisoft.org/wfc&quot;&gt;binisoft.org/wfc&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TinyWall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Lightweight wrapper around Windows Firewall, whitelist-based, very low resource usage&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://tinywall.pados.hu&quot;&gt;tinywall.pados.hu&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenSnitch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-FCC624?logo=linux&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Application-level outbound firewall, prompts on first connection per app&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/evilsocket/opensnitch&quot;&gt;github.com/evilsocket/opensnitch&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ufw / gufw&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-FCC624?logo=linux&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Uncomplicated Firewall with optional GUI, default on many distros&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://launchpad.net/ufw&quot;&gt;launchpad.net/ufw&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;firewalld&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-FCC624?logo=linux&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Dynamic firewall manager used on Fedora/RHEL/Arch, supports zones&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://firewalld.org&quot;&gt;firewalld.org&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;VPN&lt;/h3&gt;
&lt;p&gt;VPN is a bandaid and can fix some issues but it is not a replacement for proper network security. It can help protect your data from being intercepted by encrypting your internet traffic, but it does not protect you from vulnerabilities in your network or devices. If you have a VPN, make sure to use a reputable provider.&lt;/p&gt;
&lt;p&gt;All &quot;security&quot; influencers pushing VPNs are just trying to make a quick buck. A VPN can be useful in certain situations, but it is not a silver bullet for network security. Focus on securing your network and devices first, and use a VPN as an additional layer of protection if needed.&lt;/p&gt;
&lt;h2&gt;Check Devices on Your Network&lt;/h2&gt;
&lt;p&gt;You need to login to your router and check the list of connected devices. This will show you all the devices that are currently connected to your network, including their IP addresses and MAC addresses. Look for any devices that you do not recognize or that should not be on your network. If you find any suspicious devices, you can block them from accessing your network through your router&apos;s settings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ABOVE IS ACTIVE PROTECTION AND YOU MUST KEEP DOING IT TO MAINTAIN SECURITY&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Other than above, you can use software like Angry IP Scanner or Advanced IP Scanner to scan your network for connected devices. These tools will show you all the devices that are currently connected to your network, along with their IP addresses and other information. You can use this information to identify any unauthorized devices and take action to secure your network.&lt;/p&gt;
&lt;p&gt;Links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://angryip.org/&quot;&gt;Angry IP Scanner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.advanced-ip-scanner.com/&quot;&gt;Advanced IP Scanner&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Closing Thoughts&lt;/h2&gt;
&lt;p&gt;Security is a journey, not a destination. You need to continuously monitor and maintain your network security to protect yourself from potential threats. Regularly check for open ports, update your software and firmware, and be vigilant about any suspicious activity on your network. By taking these steps, you can help ensure that your network remains secure and protected from potential attacks.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/n7cjd5E_nsc&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Prioritize Ipv4 Over Ipv6 Linux</title><link>https://christitus.com/prioritize-ipv4-over-ipv6-linux/</link><guid isPermaLink="true">https://christitus.com/prioritize-ipv4-over-ipv6-linux/</guid><description>&lt;p&gt;On many Linux systems, IPv6 is prioritized over IPv4 by default. This can lead to connectivity issues if the network or services you are trying to reach are not fully compatible with IPv6. To prioritize IPv4 over IPv6, you can modify the system&apos;s address selection policy.&lt;/p&gt;

&lt;h2&gt;Setting /etc/gai.conf&lt;/h2&gt;
&lt;p&gt;gai.conf is the best and in my opinion, the ONLY method you should use for pushing ipv4 ahead of ipv6. Most methods online show &lt;code&gt;sysctl&lt;/code&gt; which DISABLES ipv6 and not a recommended way because ipv6 is so integrated in to many networks these days.&lt;/p&gt;
&lt;p&gt;Instead change the following file by editing &lt;code&gt;/etc/gai.conf&lt;/code&gt; and no restart or systemctl restart commands are needed.&lt;/p&gt;
&lt;p&gt;Here is the line to uncomment&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;precedence ::ffff:0:0/96  100
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&apos;s it! Your system will now using ipv4 when it is availible, but can use ipv6 if it isn&apos;t.&lt;/p&gt;
&lt;h2&gt;Verify ipv4 priority&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;getent ahosts google.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or simply &lt;code&gt;ping google.com&lt;/code&gt; and you will see that ipv4 is shown instead of a ipv6 address at the top. &lt;code&gt;getent&lt;/code&gt; is a nice way of verifying that it will default back to ipv6 as it will show ipv6 addresses towards the bottom.&lt;/p&gt;
</description><pubDate>Fri, 03 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;On many Linux systems, IPv6 is prioritized over IPv4 by default. This can lead to connectivity issues if the network or services you are trying to reach are not fully compatible with IPv6. To prioritize IPv4 over IPv6, you can modify the system&apos;s address selection policy.&lt;/p&gt;

&lt;h2&gt;Setting /etc/gai.conf&lt;/h2&gt;
&lt;p&gt;gai.conf is the best and in my opinion, the ONLY method you should use for pushing ipv4 ahead of ipv6. Most methods online show &lt;code&gt;sysctl&lt;/code&gt; which DISABLES ipv6 and not a recommended way because ipv6 is so integrated in to many networks these days.&lt;/p&gt;
&lt;p&gt;Instead change the following file by editing &lt;code&gt;/etc/gai.conf&lt;/code&gt; and no restart or systemctl restart commands are needed.&lt;/p&gt;
&lt;p&gt;Here is the line to uncomment&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;precedence ::ffff:0:0/96  100
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&apos;s it! Your system will now using ipv4 when it is availible, but can use ipv6 if it isn&apos;t.&lt;/p&gt;
&lt;h2&gt;Verify ipv4 priority&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;getent ahosts google.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or simply &lt;code&gt;ping google.com&lt;/code&gt; and you will see that ipv4 is shown instead of a ipv6 address at the top. &lt;code&gt;getent&lt;/code&gt; is a nice way of verifying that it will default back to ipv6 as it will show ipv6 addresses towards the bottom.&lt;/p&gt;
</content:encoded></item><item><title>VPN Tier List 2024</title><link>https://christitus.com/vpn-tier-list-2024/</link><guid isPermaLink="true">https://christitus.com/vpn-tier-list-2024/</guid><description>&lt;p&gt;Did you know most VPNs are owned by only a few companies? Those companies can even sell your data on top of charging you a subscription fee.&lt;/p&gt;
&lt;p&gt;In this post, we&apos;ll be looking at the best VPNs for 2024.&lt;/p&gt;

&lt;h2&gt;Why Use a VPN?&lt;/h2&gt;
&lt;p&gt;If you are looking for &lt;strong&gt;privacy&lt;/strong&gt; or an &lt;strong&gt;encrypted connection on the go&lt;/strong&gt;, setting up a wireguard or openvpn server is a great way to do that. This established a secure connection to your home network and helps block attacks that could happen on the host network providing you internet in a hotel, coffee shop, or other public setting. Setting these up are free and the best way to protect your privacy while helping your maintain a secure connection.&lt;/p&gt;
&lt;p&gt;The next use case for a VPN is torrenting or streaming media from another country (geo-unlock). All VPNs generally are advertised as being able to do this, but make sure the VPN does not LOG any user activities and has servers in the country you want to watch streaming from.&lt;/p&gt;
&lt;h2&gt;Corporate VPNs and the Big Tech Companies&lt;/h2&gt;
&lt;p&gt;Kape Technology&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ExpressVPN&lt;/li&gt;
&lt;li&gt;CyberGhost&lt;/li&gt;
&lt;li&gt;Private Internet Access&lt;/li&gt;
&lt;li&gt;Intego Privacy Protection&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ziff Davis&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IPVanish&lt;/li&gt;
&lt;li&gt;StrongVPN&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://Encrypt.me&quot;&gt;Encrypt.me&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SaferVPN&lt;/li&gt;
&lt;li&gt;Perimeter 81&lt;/li&gt;
&lt;li&gt;FastVPN&lt;/li&gt;
&lt;li&gt;Internet Shield VPN by VIPRE&lt;/li&gt;
&lt;li&gt;SpeedtestVPN&lt;/li&gt;
&lt;li&gt;netDNA&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nord Security&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NordVPN&lt;/li&gt;
&lt;li&gt;NordLayer&lt;/li&gt;
&lt;li&gt;Surfshark VPN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I could go on, but these are the heavy hitters in the market. Most other VPN conglomerates own 5-10 different VPN brands each.&lt;/p&gt;
&lt;h2&gt;The Best VPNs&lt;/h2&gt;
&lt;p&gt;These are independent VPNs that are owned by a single company and outside the 14-eyes countries. Mullvad is hosted in Sweden which doesn&apos;t have laws to intercept traffic. Likewise, ProtonVPN is hosted in Switzerland which also doesn&apos;t have these laws.&lt;/p&gt;
&lt;h2&gt;Final Tier List&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2024/vpn-tier-list-2024/vpns.webp&quot; alt=&quot;vpn-tier-list-2024&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/sPf1q_YLaKQ&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Fri, 19 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Did you know most VPNs are owned by only a few companies? Those companies can even sell your data on top of charging you a subscription fee.&lt;/p&gt;
&lt;p&gt;In this post, we&apos;ll be looking at the best VPNs for 2024.&lt;/p&gt;

&lt;h2&gt;Why Use a VPN?&lt;/h2&gt;
&lt;p&gt;If you are looking for &lt;strong&gt;privacy&lt;/strong&gt; or an &lt;strong&gt;encrypted connection on the go&lt;/strong&gt;, setting up a wireguard or openvpn server is a great way to do that. This established a secure connection to your home network and helps block attacks that could happen on the host network providing you internet in a hotel, coffee shop, or other public setting. Setting these up are free and the best way to protect your privacy while helping your maintain a secure connection.&lt;/p&gt;
&lt;p&gt;The next use case for a VPN is torrenting or streaming media from another country (geo-unlock). All VPNs generally are advertised as being able to do this, but make sure the VPN does not LOG any user activities and has servers in the country you want to watch streaming from.&lt;/p&gt;
&lt;h2&gt;Corporate VPNs and the Big Tech Companies&lt;/h2&gt;
&lt;p&gt;Kape Technology&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ExpressVPN&lt;/li&gt;
&lt;li&gt;CyberGhost&lt;/li&gt;
&lt;li&gt;Private Internet Access&lt;/li&gt;
&lt;li&gt;Intego Privacy Protection&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ziff Davis&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IPVanish&lt;/li&gt;
&lt;li&gt;StrongVPN&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://Encrypt.me&quot;&gt;Encrypt.me&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SaferVPN&lt;/li&gt;
&lt;li&gt;Perimeter 81&lt;/li&gt;
&lt;li&gt;FastVPN&lt;/li&gt;
&lt;li&gt;Internet Shield VPN by VIPRE&lt;/li&gt;
&lt;li&gt;SpeedtestVPN&lt;/li&gt;
&lt;li&gt;netDNA&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nord Security&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NordVPN&lt;/li&gt;
&lt;li&gt;NordLayer&lt;/li&gt;
&lt;li&gt;Surfshark VPN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I could go on, but these are the heavy hitters in the market. Most other VPN conglomerates own 5-10 different VPN brands each.&lt;/p&gt;
&lt;h2&gt;The Best VPNs&lt;/h2&gt;
&lt;p&gt;These are independent VPNs that are owned by a single company and outside the 14-eyes countries. Mullvad is hosted in Sweden which doesn&apos;t have laws to intercept traffic. Likewise, ProtonVPN is hosted in Switzerland which also doesn&apos;t have these laws.&lt;/p&gt;
&lt;h2&gt;Final Tier List&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2024/vpn-tier-list-2024/vpns.webp&quot; alt=&quot;vpn-tier-list-2024&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/sPf1q_YLaKQ&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Drivers in Windows</title><link>https://christitus.com/drivers-in-windows/</link><guid isPermaLink="true">https://christitus.com/drivers-in-windows/</guid><description>&lt;p&gt;In the vast ecosystem of Windows, managing device drivers can be a complex task, especially when dealing with third-party drivers. Tools like &lt;strong&gt;Driver Store Explorer&lt;/strong&gt; (also known as &lt;strong&gt;RAPR&lt;/strong&gt;), &lt;a href=&quot;https://github.com/lostindark/DriverStoreExplorer&quot;&gt;hosted on GitHub&lt;/a&gt;, offer a streamlined approach to handling drivers in the Windows driver store.&lt;/p&gt;
&lt;h2&gt;What is Driver Store Explorer?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Driver Store Explorer [RAPR]&lt;/strong&gt; is a user-friendly application designed to simplify interactions with the Windows driver store. It supports a range of operations including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Listing&lt;/li&gt;
&lt;li&gt;Adding&lt;/li&gt;
&lt;li&gt;Installing&lt;/li&gt;
&lt;li&gt;Deleting third-party driver packages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This tool is invaluable for both casual users looking to clean up their driver store and professionals managing multiple systems.&lt;/p&gt;
&lt;h2&gt;Key Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Driver Enumeration:&lt;/strong&gt; Lists all third-party driver packages stored in the driver store, along with the devices associated with each driver. It also allows exporting this list as a CSV file for further analysis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Driver Management:&lt;/strong&gt; Facilitates adding new driver packages to the store and deleting old or unused ones, helping in maintaining an optimal system performance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline and Online Store Management:&lt;/strong&gt; Works with both online (local machine) and offline driver stores, providing flexibility in various scenarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Efficiency:&lt;/strong&gt; Identifies old and potentially unused drivers for deletion, making it easier to free up space and keep the driver store tidy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Interface:&lt;/strong&gt; Features a full-fledged GUI that supports grouping, sorting, and selecting specific columns for a customized view.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Getting Started&lt;/h3&gt;
&lt;p&gt;To start using Driver Store Explorer, download the latest version from the &lt;a href=&quot;https://github.com/lostindark/DriverStoreExplorer/releases&quot;&gt;releases page on GitHub&lt;/a&gt;. Once downloaded, the application does not require installation and can be run directly, making it a portable tool for various uses.&lt;/p&gt;
&lt;h2&gt;Practical Applications&lt;/h2&gt;
&lt;p&gt;Driver Store Explorer is particularly useful in scenarios such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;System Cleanup:&lt;/strong&gt; Removing old and unused drivers to free up disk space.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Driver Updates:&lt;/strong&gt; Adding new driver packages to the store before installation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Troubleshooting:&lt;/strong&gt; Identifying and managing drivers associated with problematic devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Alternative Driver Management Tools&lt;/h2&gt;
&lt;p&gt;I personally do NOT recommend any tools if you have internet access and download the OFFICIAL drivers from your manufactures website. I use DriverStoreExplorer to export my drivers and import them into my windows image. However, if you don&apos;t have the drivers or can&apos;t find them all for your system, use the tools below.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SDIO - Snappy Driver Installer&lt;/strong&gt; (&lt;a href=&quot;https://www.snappy-driver-installer.org/&quot;&gt;visit website&lt;/a&gt;) is a freeware tool that simplifies the process of installing drivers from the Windows driver store. Its user-friendly interface supports both online and offline driver stores, offering an efficient solution for managing drivers on Windows systems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3DP Chip Net Downloader&lt;/strong&gt; (&lt;a href=&quot;https://www.3dpchip.com/3dpchip/3dp/net_down_en.php&quot;&gt;visit website&lt;/a&gt;) use an ad-blocker and ONLY grab the NET download to get network driver bundle. &lt;strong&gt;This should only be used as a LAST RESORT!&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DriverPack Solution&lt;/strong&gt; (&lt;a href=&quot;https://driverpack.io/en/foradmin&quot;&gt;visit website&lt;/a&gt;) This is a popular tool that was made in Russia. &lt;strong&gt;I do not trust it&lt;/strong&gt;, but in a pinch it can also do network driver installs. Only use the DriverPack Offline Network Driver Installer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Driver Store Explorer is a powerful and user-friendly tool that simplifies the management of Windows drivers. Its ability to handle both online and offline driver stores, coupled with a comprehensive set of features, makes it an essential utility for anyone looking to manage drivers on Windows systems efficiently.&lt;/p&gt;
&lt;p&gt;Whether you&apos;re a professional IT administrator or a casual user wanting to keep your system lean, Driver Store Explorer offers the functionality needed to manage your drivers effectively.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/R5RAgqB6YxM&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Thu, 11 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In the vast ecosystem of Windows, managing device drivers can be a complex task, especially when dealing with third-party drivers. Tools like &lt;strong&gt;Driver Store Explorer&lt;/strong&gt; (also known as &lt;strong&gt;RAPR&lt;/strong&gt;), &lt;a href=&quot;https://github.com/lostindark/DriverStoreExplorer&quot;&gt;hosted on GitHub&lt;/a&gt;, offer a streamlined approach to handling drivers in the Windows driver store.&lt;/p&gt;
&lt;h2&gt;What is Driver Store Explorer?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Driver Store Explorer [RAPR]&lt;/strong&gt; is a user-friendly application designed to simplify interactions with the Windows driver store. It supports a range of operations including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Listing&lt;/li&gt;
&lt;li&gt;Adding&lt;/li&gt;
&lt;li&gt;Installing&lt;/li&gt;
&lt;li&gt;Deleting third-party driver packages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This tool is invaluable for both casual users looking to clean up their driver store and professionals managing multiple systems.&lt;/p&gt;
&lt;h2&gt;Key Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Driver Enumeration:&lt;/strong&gt; Lists all third-party driver packages stored in the driver store, along with the devices associated with each driver. It also allows exporting this list as a CSV file for further analysis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Driver Management:&lt;/strong&gt; Facilitates adding new driver packages to the store and deleting old or unused ones, helping in maintaining an optimal system performance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline and Online Store Management:&lt;/strong&gt; Works with both online (local machine) and offline driver stores, providing flexibility in various scenarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Efficiency:&lt;/strong&gt; Identifies old and potentially unused drivers for deletion, making it easier to free up space and keep the driver store tidy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Interface:&lt;/strong&gt; Features a full-fledged GUI that supports grouping, sorting, and selecting specific columns for a customized view.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Getting Started&lt;/h3&gt;
&lt;p&gt;To start using Driver Store Explorer, download the latest version from the &lt;a href=&quot;https://github.com/lostindark/DriverStoreExplorer/releases&quot;&gt;releases page on GitHub&lt;/a&gt;. Once downloaded, the application does not require installation and can be run directly, making it a portable tool for various uses.&lt;/p&gt;
&lt;h2&gt;Practical Applications&lt;/h2&gt;
&lt;p&gt;Driver Store Explorer is particularly useful in scenarios such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;System Cleanup:&lt;/strong&gt; Removing old and unused drivers to free up disk space.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Driver Updates:&lt;/strong&gt; Adding new driver packages to the store before installation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Troubleshooting:&lt;/strong&gt; Identifying and managing drivers associated with problematic devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Alternative Driver Management Tools&lt;/h2&gt;
&lt;p&gt;I personally do NOT recommend any tools if you have internet access and download the OFFICIAL drivers from your manufactures website. I use DriverStoreExplorer to export my drivers and import them into my windows image. However, if you don&apos;t have the drivers or can&apos;t find them all for your system, use the tools below.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SDIO - Snappy Driver Installer&lt;/strong&gt; (&lt;a href=&quot;https://www.snappy-driver-installer.org/&quot;&gt;visit website&lt;/a&gt;) is a freeware tool that simplifies the process of installing drivers from the Windows driver store. Its user-friendly interface supports both online and offline driver stores, offering an efficient solution for managing drivers on Windows systems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3DP Chip Net Downloader&lt;/strong&gt; (&lt;a href=&quot;https://www.3dpchip.com/3dpchip/3dp/net_down_en.php&quot;&gt;visit website&lt;/a&gt;) use an ad-blocker and ONLY grab the NET download to get network driver bundle. &lt;strong&gt;This should only be used as a LAST RESORT!&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DriverPack Solution&lt;/strong&gt; (&lt;a href=&quot;https://driverpack.io/en/foradmin&quot;&gt;visit website&lt;/a&gt;) This is a popular tool that was made in Russia. &lt;strong&gt;I do not trust it&lt;/strong&gt;, but in a pinch it can also do network driver installs. Only use the DriverPack Offline Network Driver Installer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Driver Store Explorer is a powerful and user-friendly tool that simplifies the management of Windows drivers. Its ability to handle both online and offline driver stores, coupled with a comprehensive set of features, makes it an essential utility for anyone looking to manage drivers on Windows systems efficiently.&lt;/p&gt;
&lt;p&gt;Whether you&apos;re a professional IT administrator or a casual user wanting to keep your system lean, Driver Store Explorer offers the functionality needed to manage your drivers effectively.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/R5RAgqB6YxM&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Remove Youtube Shorts</title><link>https://christitus.com/remove-youtube-shorts/</link><guid isPermaLink="true">https://christitus.com/remove-youtube-shorts/</guid><description>&lt;p&gt;Remove YouTube shorts from your video browsing experience with the following blocklists!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2024/remove-youtube-shorts/youtube.webp&quot; alt=&quot;Youtube&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Blocklist&lt;/h2&gt;
&lt;p&gt;Install ublock origin and use the following filter under &quot;My Filters&quot; in settings.&lt;/p&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/gijsdev/ublock-hide-yt-shorts&quot;&gt;https://github.com/gijsdev/ublock-hide-yt-shorts&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;! Title: Hide YouTube Shorts
! Description: Hide all traces of YouTube shorts videos on YouTube
! Version: 1.8.0
! Last modified: 2023-01-08 20:02
! Expires: 2 weeks (update frequency)
! Homepage: https://github.com/gijsdev/ublock-hide-yt-shorts
! License: https://github.com/gijsdev/ublock-hide-yt-shorts/blob/master/LICENSE.md

! Hide all videos containing the phrase &quot;#shorts&quot;
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#shorts))
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#Shorts))
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#short))
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#Short))

! Hide all videos with the shorts indicator on the thumbnail
youtube.com##ytd-grid-video-renderer:has([overlay-style=&quot;SHORTS&quot;])
youtube.com##ytd-rich-item-renderer:has([overlay-style=&quot;SHORTS&quot;])
youtube.com##ytd-video-renderer:has([overlay-style=&quot;SHORTS&quot;])
youtube.com##ytd-item-section-renderer.ytd-section-list-renderer[page-subtype=&quot;subscriptions&quot;]:has(ytd-video-renderer:has([overlay-style=&quot;SHORTS&quot;]))

! Hide shorts button in sidebar
youtube.com##ytd-guide-entry-renderer:has-text(Shorts)
youtube.com##ytd-mini-guide-entry-renderer:has-text(Shorts)

! Hide shorts section on homepage
youtube.com##ytd-rich-section-renderer:has(#rich-shelf-header:has-text(Shorts))
youtube.com##ytd-reel-shelf-renderer:has(.ytd-reel-shelf-renderer:has-text(Shorts))

! Hide shorts tab on channel pages
! Old style
youtube.com##tp-yt-paper-tab:has(.tp-yt-paper-tab:has-text(Shorts))
! New style (2023-10)
youtube.com##yt-tab-shape:has-text(/^Shorts$/)

! Hide shorts in video descriptions
youtube.com##ytd-reel-shelf-renderer.ytd-structured-description-content-renderer:has-text(&quot;Shorts remixing this video&quot;)

! Remove empty spaces in grid
youtube.com##ytd-rich-grid-row,#contents.ytd-rich-grid-row:style(display: contents !important)


!!! MOBILE !!!

! Hide all videos in home feed containing the phrase &quot;#shorts&quot;
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#shorts))
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#Shorts))
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#short))
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#Short))

! Hide all videos in subscription feed containing the phrase &quot;#shorts&quot;
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#shorts))
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#Shorts))
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#short))
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#Short))

! Hide shorts button in the bottom navigation bar
m.youtube.com##ytm-pivot-bar-item-renderer:has(.pivot-shorts)

! Hide all videos with the shorts indicator on the thumbnail
m.youtube.com##ytm-video-with-context-renderer:has([data-style=&quot;SHORTS&quot;])

! Hide shorts sections
m.youtube.com##ytm-rich-section-renderer:has(ytm-reel-shelf-renderer:has(.reel-shelf-title-wrapper:has-text(Shorts)))
m.youtube.com##ytm-reel-shelf-renderer.item:has(.reel-shelf-title-wrapper:has-text(Shorts))

! Hide shorts tab on channel pages
m.youtube.com##.single-column-browse-results-tabs&amp;gt;a:has-text(Shorts)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/Nfr0uIU2lDI&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Mon, 08 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Remove YouTube shorts from your video browsing experience with the following blocklists!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2024/remove-youtube-shorts/youtube.webp&quot; alt=&quot;Youtube&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Blocklist&lt;/h2&gt;
&lt;p&gt;Install ublock origin and use the following filter under &quot;My Filters&quot; in settings.&lt;/p&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/gijsdev/ublock-hide-yt-shorts&quot;&gt;https://github.com/gijsdev/ublock-hide-yt-shorts&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;! Title: Hide YouTube Shorts
! Description: Hide all traces of YouTube shorts videos on YouTube
! Version: 1.8.0
! Last modified: 2023-01-08 20:02
! Expires: 2 weeks (update frequency)
! Homepage: https://github.com/gijsdev/ublock-hide-yt-shorts
! License: https://github.com/gijsdev/ublock-hide-yt-shorts/blob/master/LICENSE.md

! Hide all videos containing the phrase &quot;#shorts&quot;
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#shorts))
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#Shorts))
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#short))
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#Short))

! Hide all videos with the shorts indicator on the thumbnail
youtube.com##ytd-grid-video-renderer:has([overlay-style=&quot;SHORTS&quot;])
youtube.com##ytd-rich-item-renderer:has([overlay-style=&quot;SHORTS&quot;])
youtube.com##ytd-video-renderer:has([overlay-style=&quot;SHORTS&quot;])
youtube.com##ytd-item-section-renderer.ytd-section-list-renderer[page-subtype=&quot;subscriptions&quot;]:has(ytd-video-renderer:has([overlay-style=&quot;SHORTS&quot;]))

! Hide shorts button in sidebar
youtube.com##ytd-guide-entry-renderer:has-text(Shorts)
youtube.com##ytd-mini-guide-entry-renderer:has-text(Shorts)

! Hide shorts section on homepage
youtube.com##ytd-rich-section-renderer:has(#rich-shelf-header:has-text(Shorts))
youtube.com##ytd-reel-shelf-renderer:has(.ytd-reel-shelf-renderer:has-text(Shorts))

! Hide shorts tab on channel pages
! Old style
youtube.com##tp-yt-paper-tab:has(.tp-yt-paper-tab:has-text(Shorts))
! New style (2023-10)
youtube.com##yt-tab-shape:has-text(/^Shorts$/)

! Hide shorts in video descriptions
youtube.com##ytd-reel-shelf-renderer.ytd-structured-description-content-renderer:has-text(&quot;Shorts remixing this video&quot;)

! Remove empty spaces in grid
youtube.com##ytd-rich-grid-row,#contents.ytd-rich-grid-row:style(display: contents !important)


!!! MOBILE !!!

! Hide all videos in home feed containing the phrase &quot;#shorts&quot;
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#shorts))
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#Shorts))
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#short))
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#Short))

! Hide all videos in subscription feed containing the phrase &quot;#shorts&quot;
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#shorts))
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#Shorts))
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#short))
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#Short))

! Hide shorts button in the bottom navigation bar
m.youtube.com##ytm-pivot-bar-item-renderer:has(.pivot-shorts)

! Hide all videos with the shorts indicator on the thumbnail
m.youtube.com##ytm-video-with-context-renderer:has([data-style=&quot;SHORTS&quot;])

! Hide shorts sections
m.youtube.com##ytm-rich-section-renderer:has(ytm-reel-shelf-renderer:has(.reel-shelf-title-wrapper:has-text(Shorts)))
m.youtube.com##ytm-reel-shelf-renderer.item:has(.reel-shelf-title-wrapper:has-text(Shorts))

! Hide shorts tab on channel pages
m.youtube.com##.single-column-browse-results-tabs&amp;gt;a:has-text(Shorts)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/Nfr0uIU2lDI&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>5 Essential Terminal Utilities</title><link>https://christitus.com/5-terminal-commands/</link><guid isPermaLink="true">https://christitus.com/5-terminal-commands/</guid><description>
&lt;h2&gt;TLDR&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/tldr.webp&quot; alt=&quot;Tldr&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Too long didn&apos;t read? The perfect solution for long man pages that we just want some quick examples and basic syntax for a command. TLDR is a vital tool to save you time when learning the terminal.&lt;/p&gt;
&lt;h2&gt;CMatrix&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/cmatrix.webp&quot; alt=&quot;Cmatrix&quot; /&gt;&lt;/p&gt;
&lt;p&gt;How can you use Linux without using CMatrix... It&apos;s hard to be cool without it.&lt;/p&gt;
&lt;h2&gt;Trash-CLI&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/trash-cli.webp&quot; alt=&quot;Trash Cli&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is a life saver after you delete a directory or files in terminal and need to get them back. I highly recommend making the following alias in your &lt;code&gt;~/.bashrc&lt;/code&gt; file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alias rm=&apos;trash -v&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Delete a file and send it to the trash:
&lt;code&gt;trash path/to/file&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;List all files in the trash:
&lt;code&gt;trash-list&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Interactively restore a file from the trash:
&lt;code&gt;trash-restore&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Empty the trash:
&lt;code&gt;trash-empty&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Permanently delete all files in the trash which are older than 10 days:
&lt;code&gt;trash-empty 10&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove all files in the trash, which match a specific blob pattern:
&lt;code&gt;trash-rm &quot;*.o&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove all files with a specific original location:
&lt;code&gt;trash-rm /path/to/file_or_directory&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Autojump&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/autojump.webp&quot; alt=&quot;Autojump&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is my most used terminal utility that saves me the most amount of time. The catch to this program is you must have navigated to the directory at least once in terminal first.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jump to a directory that contains the given pattern:
&lt;code&gt;j pattern&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jump to a sub-directory (child) of the current directory that contains the given pattern:
&lt;code&gt;jc pattern&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open a directory that contains the given pattern in the operating system file manager:
&lt;code&gt;jo pattern&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove non-existing directories from the autojump database:
&lt;code&gt;j --purge&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Show the entries in the autojump database:
&lt;code&gt;j -s&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Progress&lt;/h2&gt;
&lt;p&gt;Tired of wondering how much longer the cp, mv, dd, tar, cat, and other Linux coreutil functions take? Progress will tell you!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Show the progress of running coreutils:
&lt;code&gt;progress&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Launch and monitor a single long-running command:
&lt;code&gt;command &amp;amp; progress --monitor --pid $!&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Include an estimate of time remaining for completion:
&lt;code&gt;progress --wait --command rsync&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/HKB8RUWZIQA&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Fri, 18 Nov 2022 00:00:00 GMT</pubDate><content:encoded>
&lt;h2&gt;TLDR&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/tldr.webp&quot; alt=&quot;Tldr&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Too long didn&apos;t read? The perfect solution for long man pages that we just want some quick examples and basic syntax for a command. TLDR is a vital tool to save you time when learning the terminal.&lt;/p&gt;
&lt;h2&gt;CMatrix&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/cmatrix.webp&quot; alt=&quot;Cmatrix&quot; /&gt;&lt;/p&gt;
&lt;p&gt;How can you use Linux without using CMatrix... It&apos;s hard to be cool without it.&lt;/p&gt;
&lt;h2&gt;Trash-CLI&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/trash-cli.webp&quot; alt=&quot;Trash Cli&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is a life saver after you delete a directory or files in terminal and need to get them back. I highly recommend making the following alias in your &lt;code&gt;~/.bashrc&lt;/code&gt; file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alias rm=&apos;trash -v&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Delete a file and send it to the trash:
&lt;code&gt;trash path/to/file&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;List all files in the trash:
&lt;code&gt;trash-list&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Interactively restore a file from the trash:
&lt;code&gt;trash-restore&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Empty the trash:
&lt;code&gt;trash-empty&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Permanently delete all files in the trash which are older than 10 days:
&lt;code&gt;trash-empty 10&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove all files in the trash, which match a specific blob pattern:
&lt;code&gt;trash-rm &quot;*.o&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove all files with a specific original location:
&lt;code&gt;trash-rm /path/to/file_or_directory&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Autojump&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/autojump.webp&quot; alt=&quot;Autojump&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is my most used terminal utility that saves me the most amount of time. The catch to this program is you must have navigated to the directory at least once in terminal first.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jump to a directory that contains the given pattern:
&lt;code&gt;j pattern&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jump to a sub-directory (child) of the current directory that contains the given pattern:
&lt;code&gt;jc pattern&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open a directory that contains the given pattern in the operating system file manager:
&lt;code&gt;jo pattern&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove non-existing directories from the autojump database:
&lt;code&gt;j --purge&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Show the entries in the autojump database:
&lt;code&gt;j -s&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Progress&lt;/h2&gt;
&lt;p&gt;Tired of wondering how much longer the cp, mv, dd, tar, cat, and other Linux coreutil functions take? Progress will tell you!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Show the progress of running coreutils:
&lt;code&gt;progress&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Launch and monitor a single long-running command:
&lt;code&gt;command &amp;amp; progress --monitor --pid $!&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Include an estimate of time remaining for completion:
&lt;code&gt;progress --wait --command rsync&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/HKB8RUWZIQA&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>How I Setup My Website</title><link>https://christitus.com/how-i-setup-my-website/</link><guid isPermaLink="true">https://christitus.com/how-i-setup-my-website/</guid><description>&lt;p&gt;This shows you have I automate my workflows and setup my website for maximum productivity and search&lt;/p&gt;
&lt;p&gt;The best part is this is FREE and will produce a website faster than anything on the web. Netlify, my host, didn&apos;t charge anything until I was breaking 100GB of bandwidth and 100,000 active users PER MONTH! Now with double those numbers I pay only $19 a month and have 1 TB (Terabyte) of data per month.&lt;/p&gt;
&lt;h2&gt;The Workflow and Overview&lt;/h2&gt;
&lt;p&gt;Typically before I start recording any video, I write an outline and publish it on my website. It&apos;s almost like a video script, but also a copy paste guide for either a viewer or just someone searching google.&lt;/p&gt;
&lt;p&gt;This is done by using a static site generator. There are bunch on the market, but the one that suited my needs the best is &lt;a href=&quot;https://gohugo.io&quot;&gt;Hugo&lt;/a&gt;. It has a bunch of themes ready to use out of the box @ &lt;a href=&quot;https://themes.gohugo.io/&quot;&gt;https://themes.gohugo.io/&lt;/a&gt; and is extremely modular.&lt;/p&gt;
&lt;p&gt;Then there are the annoyances of other website platforms like WordPress. You need to go on the web and use some terrible web based editor that just is slow and takes a long time. Hugo fixes this by using both GitHub and Netlify for deployment. Netlify will &quot;host, build, and distribute&quot; the content automatically and GitHub will be where you publish when it&apos;s ready for the publish stage that Netlify controls.&lt;/p&gt;
&lt;p&gt;What this looks like in practice is I issue a &lt;code&gt;hugo new posts/new-post.md&lt;/code&gt;, edit it with &lt;code&gt;vim posts/new-post.md&lt;/code&gt;, and post it with git commit and push. This allows me to create a page in seconds if I wanted.&lt;/p&gt;
&lt;h2&gt;The Setup&lt;/h2&gt;
&lt;p&gt;Install Hugo (I recommend &lt;a href=&quot;/nix-package-manager&quot;&gt;NIX Package Manager&lt;/a&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nix-env -iA nixpkgs.hugo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do a quick setup that creates the &lt;code&gt;website&lt;/code&gt; folder and the needed HUGO framework files with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;hugo new site website
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then we will initialize it with a HUGO theme like so:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd website
git init
git submodule add https://github.com/zzossig/hugo-theme-zzo.git themes/zzo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I absolutely love the ZZO theme as a beginner. It has some of the best instructions and documentation you will find! &lt;a href=&quot;https://zzo-docs.vercel.app/zzo/gettingstarted/installation/&quot;&gt;https://zzo-docs.vercel.app/zzo/gettingstarted/installation/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Usage and First Steps&lt;/h2&gt;
&lt;p&gt;The first thing you want to do is look over the sample post in &lt;code&gt;/themes&lt;/code&gt; under &lt;code&gt;/themes/examplesite&lt;/code&gt;. Under here you will see the structure that HUGO uses and how most of the content ends up in the &lt;code&gt;content&lt;/code&gt; directory off of root.&lt;/p&gt;
&lt;p&gt;The second thing to note is the &lt;code&gt;/content/posts/&lt;/code&gt; and seeing the examples here. This will show you the sample markdown file and how it&apos;s laid out. Change these and make your first post. Once you figure out a good structure for your posts, you can then edit the default template.&lt;/p&gt;
&lt;p&gt;For previewing the changes you can open up a new terminal and just type &lt;code&gt;hugo server&lt;/code&gt; from the root &lt;code&gt;website&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;Now I have three different windows that I&apos;m using for the bulk of my workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Chrome Window with &lt;a href=&quot;https://localhost:1313&quot;&gt;https://localhost:1313&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IDE for editing my markdown files (vs code, vim, etc.)&lt;/li&gt;
&lt;li&gt;Extra terminal window running &lt;code&gt;hugo server&lt;/code&gt; for real time updates for the chrome window&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Note: You can use terminal inside vs code and with the auto save feature you can see the code get updated on the webpage for every change you make!&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Your First Modifications&lt;/h2&gt;
&lt;p&gt;Remember the big thing with HUGO is everything is modular and everything can be changed, because at the end it is simply outputting a static html file.&lt;/p&gt;
&lt;p&gt;Once you figure out how you want your posts structured, change the &lt;code&gt;/archtypes/default.md&lt;/code&gt;. This template is what each new post will use. This is where you really increase your efficiency as we often find ourselves writing the same few things on each new post we make.&lt;/p&gt;
&lt;p&gt;The next modification will probably comes from adding widgets or sidebar components. Instead of directly modifying the &lt;code&gt;/theme/zzo&lt;/code&gt; files you can actually look through the partials directory and create your own &lt;code&gt;/layouts/partials&lt;/code&gt; in your root that will take precedence over the ones in the theme directory. More in-depth explanation from the official site &lt;a href=&quot;https://gohugo.io/functions/partials/include/&quot;&gt;https://gohugo.io/functions/partials/include/&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Complex Theme Modifications&lt;/h2&gt;
&lt;p&gt;In my past Hugo Guide I went into some pretty big theme modifications (adding search, tags, etc.) Read more about that @ &lt;a href=&quot;https://christitus.com/hugo-guide/&quot;&gt;https://christitus.com/hugo-guide/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also if you see something you want to copy from my website, everything is on my public GitHub @ &lt;a href=&quot;https://github.com/christitustech/website&quot;&gt;https://github.com/christitustech/website&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adding comments can be done in a multitude of ways, but my absolute favorite instead of using Disqus or &lt;a href=&quot;http://commento.io&quot;&gt;commento.io&lt;/a&gt; is simply using GitHub to host the comments directly on your website repository! There is an amazing &quot;plugin&quot; that you can add called &lt;a href=&quot;https://github.com/utterance/utterances&quot;&gt;https://github.com/utterance/utterances&lt;/a&gt; which does all the spam filtering and integrates comments BETTER!&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/xMv10E561WQ&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Fri, 07 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This shows you have I automate my workflows and setup my website for maximum productivity and search&lt;/p&gt;
&lt;p&gt;The best part is this is FREE and will produce a website faster than anything on the web. Netlify, my host, didn&apos;t charge anything until I was breaking 100GB of bandwidth and 100,000 active users PER MONTH! Now with double those numbers I pay only $19 a month and have 1 TB (Terabyte) of data per month.&lt;/p&gt;
&lt;h2&gt;The Workflow and Overview&lt;/h2&gt;
&lt;p&gt;Typically before I start recording any video, I write an outline and publish it on my website. It&apos;s almost like a video script, but also a copy paste guide for either a viewer or just someone searching google.&lt;/p&gt;
&lt;p&gt;This is done by using a static site generator. There are bunch on the market, but the one that suited my needs the best is &lt;a href=&quot;https://gohugo.io&quot;&gt;Hugo&lt;/a&gt;. It has a bunch of themes ready to use out of the box @ &lt;a href=&quot;https://themes.gohugo.io/&quot;&gt;https://themes.gohugo.io/&lt;/a&gt; and is extremely modular.&lt;/p&gt;
&lt;p&gt;Then there are the annoyances of other website platforms like WordPress. You need to go on the web and use some terrible web based editor that just is slow and takes a long time. Hugo fixes this by using both GitHub and Netlify for deployment. Netlify will &quot;host, build, and distribute&quot; the content automatically and GitHub will be where you publish when it&apos;s ready for the publish stage that Netlify controls.&lt;/p&gt;
&lt;p&gt;What this looks like in practice is I issue a &lt;code&gt;hugo new posts/new-post.md&lt;/code&gt;, edit it with &lt;code&gt;vim posts/new-post.md&lt;/code&gt;, and post it with git commit and push. This allows me to create a page in seconds if I wanted.&lt;/p&gt;
&lt;h2&gt;The Setup&lt;/h2&gt;
&lt;p&gt;Install Hugo (I recommend &lt;a href=&quot;/nix-package-manager&quot;&gt;NIX Package Manager&lt;/a&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nix-env -iA nixpkgs.hugo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do a quick setup that creates the &lt;code&gt;website&lt;/code&gt; folder and the needed HUGO framework files with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;hugo new site website
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then we will initialize it with a HUGO theme like so:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd website
git init
git submodule add https://github.com/zzossig/hugo-theme-zzo.git themes/zzo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I absolutely love the ZZO theme as a beginner. It has some of the best instructions and documentation you will find! &lt;a href=&quot;https://zzo-docs.vercel.app/zzo/gettingstarted/installation/&quot;&gt;https://zzo-docs.vercel.app/zzo/gettingstarted/installation/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Usage and First Steps&lt;/h2&gt;
&lt;p&gt;The first thing you want to do is look over the sample post in &lt;code&gt;/themes&lt;/code&gt; under &lt;code&gt;/themes/examplesite&lt;/code&gt;. Under here you will see the structure that HUGO uses and how most of the content ends up in the &lt;code&gt;content&lt;/code&gt; directory off of root.&lt;/p&gt;
&lt;p&gt;The second thing to note is the &lt;code&gt;/content/posts/&lt;/code&gt; and seeing the examples here. This will show you the sample markdown file and how it&apos;s laid out. Change these and make your first post. Once you figure out a good structure for your posts, you can then edit the default template.&lt;/p&gt;
&lt;p&gt;For previewing the changes you can open up a new terminal and just type &lt;code&gt;hugo server&lt;/code&gt; from the root &lt;code&gt;website&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;Now I have three different windows that I&apos;m using for the bulk of my workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Chrome Window with &lt;a href=&quot;https://localhost:1313&quot;&gt;https://localhost:1313&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IDE for editing my markdown files (vs code, vim, etc.)&lt;/li&gt;
&lt;li&gt;Extra terminal window running &lt;code&gt;hugo server&lt;/code&gt; for real time updates for the chrome window&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Note: You can use terminal inside vs code and with the auto save feature you can see the code get updated on the webpage for every change you make!&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Your First Modifications&lt;/h2&gt;
&lt;p&gt;Remember the big thing with HUGO is everything is modular and everything can be changed, because at the end it is simply outputting a static html file.&lt;/p&gt;
&lt;p&gt;Once you figure out how you want your posts structured, change the &lt;code&gt;/archtypes/default.md&lt;/code&gt;. This template is what each new post will use. This is where you really increase your efficiency as we often find ourselves writing the same few things on each new post we make.&lt;/p&gt;
&lt;p&gt;The next modification will probably comes from adding widgets or sidebar components. Instead of directly modifying the &lt;code&gt;/theme/zzo&lt;/code&gt; files you can actually look through the partials directory and create your own &lt;code&gt;/layouts/partials&lt;/code&gt; in your root that will take precedence over the ones in the theme directory. More in-depth explanation from the official site &lt;a href=&quot;https://gohugo.io/functions/partials/include/&quot;&gt;https://gohugo.io/functions/partials/include/&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Complex Theme Modifications&lt;/h2&gt;
&lt;p&gt;In my past Hugo Guide I went into some pretty big theme modifications (adding search, tags, etc.) Read more about that @ &lt;a href=&quot;https://christitus.com/hugo-guide/&quot;&gt;https://christitus.com/hugo-guide/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also if you see something you want to copy from my website, everything is on my public GitHub @ &lt;a href=&quot;https://github.com/christitustech/website&quot;&gt;https://github.com/christitustech/website&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adding comments can be done in a multitude of ways, but my absolute favorite instead of using Disqus or &lt;a href=&quot;http://commento.io&quot;&gt;commento.io&lt;/a&gt; is simply using GitHub to host the comments directly on your website repository! There is an amazing &quot;plugin&quot; that you can add called &lt;a href=&quot;https://github.com/utterance/utterances&quot;&gt;https://github.com/utterance/utterances&lt;/a&gt; which does all the spam filtering and integrates comments BETTER!&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/xMv10E561WQ&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Macos on Linux</title><link>https://christitus.com/macos-on-linux/</link><guid isPermaLink="true">https://christitus.com/macos-on-linux/</guid><description>&lt;p&gt;This shows you all the steps to install a MacOS VM in Linux QEMU using Virtual Machine Manager or virt-manager.&lt;/p&gt;

&lt;p&gt;Newer Source, but not as polished: &lt;a href=&quot;https://github.com/kholia/OSX-KVM&quot;&gt;https://github.com/kholia/OSX-KVM&lt;/a&gt;
Mac KVM Repository: &lt;a href=&quot;https://github.com/foxlet/macOS-Simple-KVM&quot;&gt;https://github.com/foxlet/macOS-Simple-KVM&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Requirements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A modern Linux distribution. E.g. Ubuntu 20.04 LTS 64-bit or later.&lt;/li&gt;
&lt;li&gt;QEMU &amp;gt;= 4.2.0&lt;/li&gt;
&lt;li&gt;A CPU with Intel VT-x / AMD SVM support is required (&lt;code&gt;grep -e vmx -e svm /proc/cpuinfo&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation Preparation&lt;/h2&gt;
&lt;p&gt;Install QEMU and modify your user using &lt;a href=&quot;https://christitus.com/vm-setup-in-linux&quot;&gt;https://christitus.com/vm-setup-in-linux&lt;/a&gt; Guide.&lt;/p&gt;
&lt;p&gt;Clone this repository on your QEMU system. Files from this repository are used in the following steps.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~
git clone --depth 1 --recursive https://github.com/foxlet/macOS-Simple-KVM
cd macOS-Simple-KVM
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Installation Media&lt;/h2&gt;
&lt;p&gt;This downloads our installation media and I&apos;d recommend using Catalina for compatibility and performance.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./jumpstart.sh --catalina
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Modern NVIDIA GPUs are supported on HighSierra but not on later
versions of macOS. Recommended PCI Passthrough GPU is 5700XT as this works on Catalina and above. If you go with a 6000 Series Card only certain ones will work on Big Sur and Monterey, but not earlier releases.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Virtual Machine Setup&lt;/h2&gt;
&lt;p&gt;I recommend using Virtual Machine Manager (virt-manager) as it has a fantastic interface and Simple-KVM does a great job with their setup script. Simply type the following to get the macOS VM setup:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ./make.sh --add
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;VM Modification&lt;/h3&gt;
&lt;p&gt;Before we can start out VM we have to have a hard drive to load it. You have two options: physical hard drive passthrough or qcow2 file.&lt;/p&gt;
&lt;p&gt;Obviously, the physical drive is considerably faster, but not possible in some instances such as laptops or if you can&apos;t afford a secondary drive.&lt;/p&gt;
&lt;h4&gt;Physical Hard Drive Passthrough&lt;/h4&gt;
&lt;p&gt;This is pretty simple as you just click Add Hardware -&amp;gt; Storage and then specify your hard drive.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/qemu/hdd.webp&quot; alt=&quot;hdd&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: while you can use drive short names &lt;code&gt;/dev/sda&lt;/code&gt; I&apos;d recommend using &lt;code&gt;/dev/disk/by-id/HARDDRIVESERIAL&lt;/code&gt; as this doesn&apos;t ever change.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;QCOW2 File for Hard Drive&lt;/h4&gt;
&lt;p&gt;This is even simpler as you just click Add Hardware -&amp;gt; Storage and create new file. Just make sure you put it on at least a SSD or a nvme drive as it will be super slow if you don&apos;t.&lt;/p&gt;
&lt;h2&gt;Install Process&lt;/h2&gt;
&lt;p&gt;Boot your machine and select the OS Install Partition on startup.&lt;/p&gt;
&lt;p&gt;Use the &lt;code&gt;Disk Utility&lt;/code&gt; tool within the macOS installer to partition, and
format the virtual disk attached to the macOS VM.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TIP: Using a non-APFS filesystem is recommended.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Go ahead, and install macOS&lt;/p&gt;
&lt;h3&gt;Post-Installation&lt;/h3&gt;
&lt;h4&gt;Bridge Networking&lt;/h4&gt;
&lt;p&gt;*First_ find your card interface name&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ip a
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Example: (Interface name is enp7s0)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp7s0: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 24:bb:ee:55:22:33 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.99/24 brd 10.0.0.255 scope global
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Second&lt;/em&gt; Update &lt;code&gt;/etc/network/interfaces&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;source /etc/network/interfaces.d/*
 
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface - old entry
# allow-hotplug enp7s0
# iface enp7s0 inet dhcp

# The primary network interface - new entry
# DEVICENAME = enp7so for this pc and MYUSERNAME need to be $(whoami)
auto br0
iface br0 inet dhcp
  bridge_ports DEVICENAME tap0

auto tap0
iface tap0 inet dhcp
  pre-up tunctl -u MYUSERNAME -t tap0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Lastly&lt;/em&gt; Restart the networking service or reboot computer. Then change your VM NIC (Network Hardware) to &lt;code&gt;br0&lt;/code&gt; interface.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl restart networking
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Other Considerations&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;GPU Passthrough (Requires two Graphics Cards) - &lt;a href=&quot;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-passthrough.md&quot;&gt;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-passthrough.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Changing Screen Resolution - &lt;a href=&quot;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-screen-resolution.md&quot;&gt;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-screen-resolution.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Optimizing System Performance - &lt;a href=&quot;https://github.com/sickcodes/osx-optimizer&quot;&gt;https://github.com/sickcodes/osx-optimizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sound - Two methods, Pass the audio through HDMI if using GPU Passthrough OR Pass through a USB sound card that is macOS compatible
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Note: There is a way to use Voodoo kext or AppleALC, but it will crackle and sound terrible&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/dMLNP6FfhkI&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Mon, 03 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This shows you all the steps to install a MacOS VM in Linux QEMU using Virtual Machine Manager or virt-manager.&lt;/p&gt;

&lt;p&gt;Newer Source, but not as polished: &lt;a href=&quot;https://github.com/kholia/OSX-KVM&quot;&gt;https://github.com/kholia/OSX-KVM&lt;/a&gt;
Mac KVM Repository: &lt;a href=&quot;https://github.com/foxlet/macOS-Simple-KVM&quot;&gt;https://github.com/foxlet/macOS-Simple-KVM&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Requirements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A modern Linux distribution. E.g. Ubuntu 20.04 LTS 64-bit or later.&lt;/li&gt;
&lt;li&gt;QEMU &amp;gt;= 4.2.0&lt;/li&gt;
&lt;li&gt;A CPU with Intel VT-x / AMD SVM support is required (&lt;code&gt;grep -e vmx -e svm /proc/cpuinfo&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation Preparation&lt;/h2&gt;
&lt;p&gt;Install QEMU and modify your user using &lt;a href=&quot;https://christitus.com/vm-setup-in-linux&quot;&gt;https://christitus.com/vm-setup-in-linux&lt;/a&gt; Guide.&lt;/p&gt;
&lt;p&gt;Clone this repository on your QEMU system. Files from this repository are used in the following steps.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~
git clone --depth 1 --recursive https://github.com/foxlet/macOS-Simple-KVM
cd macOS-Simple-KVM
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Installation Media&lt;/h2&gt;
&lt;p&gt;This downloads our installation media and I&apos;d recommend using Catalina for compatibility and performance.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./jumpstart.sh --catalina
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Modern NVIDIA GPUs are supported on HighSierra but not on later
versions of macOS. Recommended PCI Passthrough GPU is 5700XT as this works on Catalina and above. If you go with a 6000 Series Card only certain ones will work on Big Sur and Monterey, but not earlier releases.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Virtual Machine Setup&lt;/h2&gt;
&lt;p&gt;I recommend using Virtual Machine Manager (virt-manager) as it has a fantastic interface and Simple-KVM does a great job with their setup script. Simply type the following to get the macOS VM setup:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ./make.sh --add
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;VM Modification&lt;/h3&gt;
&lt;p&gt;Before we can start out VM we have to have a hard drive to load it. You have two options: physical hard drive passthrough or qcow2 file.&lt;/p&gt;
&lt;p&gt;Obviously, the physical drive is considerably faster, but not possible in some instances such as laptops or if you can&apos;t afford a secondary drive.&lt;/p&gt;
&lt;h4&gt;Physical Hard Drive Passthrough&lt;/h4&gt;
&lt;p&gt;This is pretty simple as you just click Add Hardware -&amp;gt; Storage and then specify your hard drive.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/qemu/hdd.webp&quot; alt=&quot;hdd&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: while you can use drive short names &lt;code&gt;/dev/sda&lt;/code&gt; I&apos;d recommend using &lt;code&gt;/dev/disk/by-id/HARDDRIVESERIAL&lt;/code&gt; as this doesn&apos;t ever change.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;QCOW2 File for Hard Drive&lt;/h4&gt;
&lt;p&gt;This is even simpler as you just click Add Hardware -&amp;gt; Storage and create new file. Just make sure you put it on at least a SSD or a nvme drive as it will be super slow if you don&apos;t.&lt;/p&gt;
&lt;h2&gt;Install Process&lt;/h2&gt;
&lt;p&gt;Boot your machine and select the OS Install Partition on startup.&lt;/p&gt;
&lt;p&gt;Use the &lt;code&gt;Disk Utility&lt;/code&gt; tool within the macOS installer to partition, and
format the virtual disk attached to the macOS VM.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TIP: Using a non-APFS filesystem is recommended.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Go ahead, and install macOS&lt;/p&gt;
&lt;h3&gt;Post-Installation&lt;/h3&gt;
&lt;h4&gt;Bridge Networking&lt;/h4&gt;
&lt;p&gt;*First_ find your card interface name&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ip a
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Example: (Interface name is enp7s0)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp7s0: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 24:bb:ee:55:22:33 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.99/24 brd 10.0.0.255 scope global
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Second&lt;/em&gt; Update &lt;code&gt;/etc/network/interfaces&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;source /etc/network/interfaces.d/*
 
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface - old entry
# allow-hotplug enp7s0
# iface enp7s0 inet dhcp

# The primary network interface - new entry
# DEVICENAME = enp7so for this pc and MYUSERNAME need to be $(whoami)
auto br0
iface br0 inet dhcp
  bridge_ports DEVICENAME tap0

auto tap0
iface tap0 inet dhcp
  pre-up tunctl -u MYUSERNAME -t tap0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Lastly&lt;/em&gt; Restart the networking service or reboot computer. Then change your VM NIC (Network Hardware) to &lt;code&gt;br0&lt;/code&gt; interface.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl restart networking
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Other Considerations&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;GPU Passthrough (Requires two Graphics Cards) - &lt;a href=&quot;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-passthrough.md&quot;&gt;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-passthrough.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Changing Screen Resolution - &lt;a href=&quot;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-screen-resolution.md&quot;&gt;https://github.com/foxlet/macOS-Simple-KVM/blob/master/docs/guide-screen-resolution.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Optimizing System Performance - &lt;a href=&quot;https://github.com/sickcodes/osx-optimizer&quot;&gt;https://github.com/sickcodes/osx-optimizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sound - Two methods, Pass the audio through HDMI if using GPU Passthrough OR Pass through a USB sound card that is macOS compatible
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Note: There is a way to use Voodoo kext or AppleALC, but it will crackle and sound terrible&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/dMLNP6FfhkI&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Auto Mount with SystemD</title><link>https://christitus.com/auto-mount-systemd/</link><guid isPermaLink="true">https://christitus.com/auto-mount-systemd/</guid><description>&lt;p&gt;This shows how to automount remote network drives using systemd and fstab&lt;/p&gt;

&lt;h2&gt;Automount using systemd&lt;/h2&gt;
&lt;p&gt;Sometimes partitions can fail to mount on startup and some options are needed to fix this. I&apos;ve had two instances where it was needed. One was on a slow 6 TB drive that timed out on occation during boot and I had to &lt;code&gt;sudo mount -a&lt;/code&gt; to get it to mount&lt;/p&gt;
&lt;p&gt;For this a simple option addition in fstab on a local disk looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;x-systemd.after=network-online.target,x-systemd.automount
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, I had problems with NFS shares not mounting and I had to expand these option to:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;x-systemd.after=network-online.target,x-systemd.automount,x-systemd.mount-timeout=30,_netdev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This makes the &lt;code&gt;/etc/fstab&lt;/code&gt; entry look like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10.0.0.10:/volume2/Images  /media/images nfs x-systemd.after=network-online.target,x-systemd.automount,x-systemd.mount-timeout=30,_netdev 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href=&quot;https://wiki.archlinux.org/title/Fstab#Automount_with_systemd&quot;&gt;https://wiki.archlinux.org/title/Fstab#Automount_with_systemd&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description><pubDate>Thu, 22 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This shows how to automount remote network drives using systemd and fstab&lt;/p&gt;

&lt;h2&gt;Automount using systemd&lt;/h2&gt;
&lt;p&gt;Sometimes partitions can fail to mount on startup and some options are needed to fix this. I&apos;ve had two instances where it was needed. One was on a slow 6 TB drive that timed out on occation during boot and I had to &lt;code&gt;sudo mount -a&lt;/code&gt; to get it to mount&lt;/p&gt;
&lt;p&gt;For this a simple option addition in fstab on a local disk looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;x-systemd.after=network-online.target,x-systemd.automount
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, I had problems with NFS shares not mounting and I had to expand these option to:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;x-systemd.after=network-online.target,x-systemd.automount,x-systemd.mount-timeout=30,_netdev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This makes the &lt;code&gt;/etc/fstab&lt;/code&gt; entry look like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10.0.0.10:/volume2/Images  /media/images nfs x-systemd.after=network-online.target,x-systemd.automount,x-systemd.mount-timeout=30,_netdev 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href=&quot;https://wiki.archlinux.org/title/Fstab#Automount_with_systemd&quot;&gt;https://wiki.archlinux.org/title/Fstab#Automount_with_systemd&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Robocopy - Copying files the right way in Windows</title><link>https://christitus.com/robocopy/</link><guid isPermaLink="true">https://christitus.com/robocopy/</guid><description>&lt;p&gt;This guide shows how to copy files in windows when dealing with large volumes of files and very long file paths past 255 characters.&lt;/p&gt;

&lt;h2&gt;What is Robocopy and Why use it?&lt;/h2&gt;
&lt;p&gt;Robocopy is a build in command line program that is fantastic at copying files quickly and bypasses many of the downsides of the standard copy process of windows.&lt;/p&gt;
&lt;p&gt;The downsides of Window&apos;s standard file copy are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Has to read ALL files being copied BEFORE it will copy the first file&lt;/li&gt;
&lt;li&gt;Artificial character limit of 255 that includes the filename and filepath.&lt;/li&gt;
&lt;li&gt;GUI limitations for LARGE amounts of files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How to use Robocopy&lt;/h2&gt;
&lt;p&gt;Launch into the Command Prompt or Powershell by right-clicking Start Menu&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/01-robocopy/start-menu.webp&quot; alt=&quot;start-menu&quot; /&gt;&lt;/p&gt;
&lt;p&gt;From this interface you can now run Robocopy.&lt;/p&gt;
&lt;p&gt;Basic Syntax:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;C:\&amp;gt; robocopy &quot;Source Directory&quot; &quot;Destination Directory&quot; /e /w:5 /r:2 /COPY:DATSOU /DCOPY:DAT /MT
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Full syntax can be shown with &lt;code&gt;robocopy /?&lt;/code&gt; but be careful with /MIR and move style copies as this can overwrite and erase existing files in the destination directory.&lt;/p&gt;
&lt;p&gt;Notable Options with Robocopy&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/e - Copy all folders including empty ones&lt;/li&gt;
&lt;li&gt;/r - Retry times /r:0 means no retry on failed copy&lt;/li&gt;
&lt;li&gt;/w - Wait time /w:0 means no wait between retry on failed copy&lt;/li&gt;
&lt;li&gt;/COPYALL OR /COPY:DATSOU - Copy Data, Attributes, Timestamps, Security, Owner, and Auditing Info for files&lt;/li&gt;
&lt;li&gt;/DCOPY:DAT - Copy Data,Attributes and Timestamps for Directories (Other Options are E=EAs-Extended Attributes, X=Skip alt data streams, but are almost never used)&lt;/li&gt;
&lt;li&gt;/MT:n - Multithread transfer with n threads. Example /MT:4 - Use 4 threads to copy files. If no threads set, it will default to 8.&lt;/li&gt;
&lt;li&gt;/MIR - Mirror Source to Destination - WARNING: WILL DELETE ANY FILES THAT DO NOT MATCH IN DESTINATION!&lt;/li&gt;
&lt;li&gt;/MOVE - Moves from Source to Destination - WARNING: WILL DELETE ALL FILES FROM SOURCE AFTER COPY!&lt;/li&gt;
&lt;li&gt;/LFSM:100M - Operate in Low Free Space Mode with 100 Megabytes. 10M = 10 Megabytes 1G = 1 Gigabyte&lt;/li&gt;
&lt;li&gt;/B - Backup Mode - Great for system backups if you are part of Administrator or Backup Users group - NOT RECOMMENDED - Use 3rd party backup software&lt;/li&gt;
&lt;li&gt;/ZB - Restartable Backup Mode - Tries to copy files with restartable and if it fails it restarts in backup mode - NOT RECOMMENDED - Use 3rd party backup software&lt;/li&gt;
&lt;li&gt;/RH:1700-0900 - Scheduled run between 5PM and 9AM and will pause if it is during &quot;business hours of 9AM-5PM&quot;&lt;/li&gt;
&lt;li&gt;/LOG+:C:\robocopy.log - Outputs everything to C:\robocopy.log (Note: if NOT running as admin you need to put this in your user folder C:\Users\username\robocopy.log) the + adds to the file.&lt;/li&gt;
&lt;li&gt;/TEE - If using LOG and you also want console output, put the /TEE option in.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I don&apos;t recommend using backup, restartable mode, or jobs. Jobs typically miss options and 3rd party solution like veeam are FAR better for backups than robocopy EVER will be.&lt;/p&gt;
&lt;h3&gt;Walkthrough Video&lt;/h3&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/0q3rGK_IMZg&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Wed, 19 Jan 2022 23:39:34 GMT</pubDate><content:encoded>&lt;p&gt;This guide shows how to copy files in windows when dealing with large volumes of files and very long file paths past 255 characters.&lt;/p&gt;

&lt;h2&gt;What is Robocopy and Why use it?&lt;/h2&gt;
&lt;p&gt;Robocopy is a build in command line program that is fantastic at copying files quickly and bypasses many of the downsides of the standard copy process of windows.&lt;/p&gt;
&lt;p&gt;The downsides of Window&apos;s standard file copy are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Has to read ALL files being copied BEFORE it will copy the first file&lt;/li&gt;
&lt;li&gt;Artificial character limit of 255 that includes the filename and filepath.&lt;/li&gt;
&lt;li&gt;GUI limitations for LARGE amounts of files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How to use Robocopy&lt;/h2&gt;
&lt;p&gt;Launch into the Command Prompt or Powershell by right-clicking Start Menu&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/01-robocopy/start-menu.webp&quot; alt=&quot;start-menu&quot; /&gt;&lt;/p&gt;
&lt;p&gt;From this interface you can now run Robocopy.&lt;/p&gt;
&lt;p&gt;Basic Syntax:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;C:\&amp;gt; robocopy &quot;Source Directory&quot; &quot;Destination Directory&quot; /e /w:5 /r:2 /COPY:DATSOU /DCOPY:DAT /MT
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Full syntax can be shown with &lt;code&gt;robocopy /?&lt;/code&gt; but be careful with /MIR and move style copies as this can overwrite and erase existing files in the destination directory.&lt;/p&gt;
&lt;p&gt;Notable Options with Robocopy&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/e - Copy all folders including empty ones&lt;/li&gt;
&lt;li&gt;/r - Retry times /r:0 means no retry on failed copy&lt;/li&gt;
&lt;li&gt;/w - Wait time /w:0 means no wait between retry on failed copy&lt;/li&gt;
&lt;li&gt;/COPYALL OR /COPY:DATSOU - Copy Data, Attributes, Timestamps, Security, Owner, and Auditing Info for files&lt;/li&gt;
&lt;li&gt;/DCOPY:DAT - Copy Data,Attributes and Timestamps for Directories (Other Options are E=EAs-Extended Attributes, X=Skip alt data streams, but are almost never used)&lt;/li&gt;
&lt;li&gt;/MT:n - Multithread transfer with n threads. Example /MT:4 - Use 4 threads to copy files. If no threads set, it will default to 8.&lt;/li&gt;
&lt;li&gt;/MIR - Mirror Source to Destination - WARNING: WILL DELETE ANY FILES THAT DO NOT MATCH IN DESTINATION!&lt;/li&gt;
&lt;li&gt;/MOVE - Moves from Source to Destination - WARNING: WILL DELETE ALL FILES FROM SOURCE AFTER COPY!&lt;/li&gt;
&lt;li&gt;/LFSM:100M - Operate in Low Free Space Mode with 100 Megabytes. 10M = 10 Megabytes 1G = 1 Gigabyte&lt;/li&gt;
&lt;li&gt;/B - Backup Mode - Great for system backups if you are part of Administrator or Backup Users group - NOT RECOMMENDED - Use 3rd party backup software&lt;/li&gt;
&lt;li&gt;/ZB - Restartable Backup Mode - Tries to copy files with restartable and if it fails it restarts in backup mode - NOT RECOMMENDED - Use 3rd party backup software&lt;/li&gt;
&lt;li&gt;/RH:1700-0900 - Scheduled run between 5PM and 9AM and will pause if it is during &quot;business hours of 9AM-5PM&quot;&lt;/li&gt;
&lt;li&gt;/LOG+:C:\robocopy.log - Outputs everything to C:\robocopy.log (Note: if NOT running as admin you need to put this in your user folder C:\Users\username\robocopy.log) the + adds to the file.&lt;/li&gt;
&lt;li&gt;/TEE - If using LOG and you also want console output, put the /TEE option in.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I don&apos;t recommend using backup, restartable mode, or jobs. Jobs typically miss options and 3rd party solution like veeam are FAR better for backups than robocopy EVER will be.&lt;/p&gt;
&lt;h3&gt;Walkthrough Video&lt;/h3&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/0q3rGK_IMZg&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>Hugo Static Site Guide</title><link>https://christitus.com/hugo-guide/</link><guid isPermaLink="true">https://christitus.com/hugo-guide/</guid><description>&lt;p&gt;This article goes over the basics of hugo and guides you through the process of using a static site generator.&lt;/p&gt;

&lt;h2&gt;Installing Hugo&lt;/h2&gt;
&lt;p&gt;Arch-Based Users: &lt;code&gt;yay -S hugo&lt;/code&gt;&lt;br /&gt;
Debian-Based Users: &lt;code&gt;sudo apt install hugo&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: Debian packages are old and I recommend downloading the latest version of hugo from github&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Github Repo for Hugo (Latest Versions and Notes)&lt;br /&gt;
&lt;a href=&quot;https://github.com/gohugoio/hugo&quot;&gt;Hugo GitHub&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://gohugo.io&quot;&gt;Official Site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Create your first site and install a theme using the &lt;a href=&quot;https://gohugo.io/getting-started/quick-start/&quot;&gt;Quick Start&lt;/a&gt; Page.&lt;/p&gt;
&lt;h2&gt;Common Hugo Commands&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hugo&lt;/code&gt; - builds static files in the &lt;code&gt;siteroot/public&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hugo server&lt;/code&gt; - runs a test site so you can login to &lt;a href=&quot;http://127.0.0.1:1313&quot;&gt;http://127.0.0.1:1313&lt;/a&gt; and see your changes before pushing live&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hugo new posts/dir/newpost.md&lt;/code&gt; - you can make new posts on the fly with all your templates (see below)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The First Changes&lt;/h2&gt;
&lt;p&gt;I made several changes when I first switched to HUGO and these were the changes I made.&lt;/p&gt;
&lt;h3&gt;Theme Modification&lt;/h3&gt;
&lt;p&gt;I downloaded the the &lt;a href=&quot;https://github.com/vimux/mainroad&quot;&gt;Mainroad&lt;/a&gt; Theme and installed it during the Quick Start. &lt;em&gt;Note: My Debian system had an old version of HUGO 0.40 and I had to update before the theme worked.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;Changing Theme Widgets&lt;/h4&gt;
&lt;h5&gt;Social Widget&lt;/h5&gt;
&lt;p&gt;I first started to change the &lt;em&gt;social widget&lt;/em&gt; by adding YouTube and Twitch from the following file &lt;code&gt;siteroot/themes/mainroad/layouts/partials/widgets/social.html&lt;/code&gt;.&lt;br /&gt;
The Most challengeing Part of this was the SVG files used by mainroad. However, once I figured out the SVG format can be edited in a simple text editor and I mirrored the size and types from the existing SVG files they showed up.&lt;/p&gt;
&lt;p&gt;Here are the Edits I made to &lt;em&gt;social.html&lt;/em&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{- with .Site.Params.widgets.social.twitch }}
  &amp;lt;div class=&quot;widget-social__item widget__item&quot;&amp;gt;
   &amp;lt;a class=&quot;widget-social__link widget__link btn&quot; title=&quot;Twitch&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://twitch.tv/{{ . }}&quot; target=&quot;_blank&quot;&amp;gt;
    {{ partial &quot;svg/twitch.svg&quot; (dict &quot;class&quot; &quot;widget-social__link-icon&quot;) }}
    &amp;lt;span&amp;gt;Twitch Live Streams&amp;lt;/span&amp;gt;
   &amp;lt;/a&amp;gt;
  &amp;lt;/div&amp;gt;
  {{- end }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Basically after getting the SVG setup and putting the twitch.svg and youtube.svg in this path &lt;code&gt;siteroot/mainroad/layouts/partials/svg&lt;/code&gt; I was able to get the Social widget exactly how I wanted.&lt;/p&gt;
&lt;h5&gt;Tags Widget&lt;/h5&gt;
&lt;p&gt;Next up was fixing the tags on the sidebar. They were blocky and quite ugly, where I wanted a traditional tag cloud that you see on many other sites to help users navigate your content. So I began looking at other projects that had the proper code. I found the following code snippit:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ if not (eq (len $.Site.Taxonomies.tags) 0) }}
    {{ $fontUnit := &quot;rem&quot; }}
    {{ $largestFontSize := 2.0 }}
    {{ $largestFontSize := 2.5 }}
    {{ $smallestFontSize := 1.0 }}
    {{ $fontSpread := sub $largestFontSize $smallestFontSize }}
    {{ $max := add (len (index $.Site.Taxonomies.tags.ByCount 0).Pages) 1 }}
    {{ $min := len (index $.Site.Taxonomies.tags.ByCount.Reverse 0).Pages }}
    {{ $spread := sub $max $min }}
    {{ $fontStep := div $fontSpread $spread }}
&amp;lt;div class=&quot;widget-taglist widget&quot;&amp;gt;
  &amp;lt;h4 class=&quot;widget__title&quot;&amp;gt;{{ T &quot;tags_title&quot; }}&amp;lt;/h4&amp;gt;
   &amp;lt;div class=&quot;widget__content&quot;&amp;gt;
    &amp;lt;div id=&quot;tag-cloud&quot; style=&quot;padding: 5px 15px&quot;&amp;gt;
        {{ range $name, $taxonomy := $.Site.Taxonomies.tags }}
            {{ $currentTagCount := len $taxonomy.Pages }}
            {{ $currentFontSize := (add $smallestFontSize (mul (sub $currentTagCount $min) $fontStep) ) }}
            {{ $count := len $taxonomy.Pages }}
            {{ $weigth := div (sub (math.Log $count) (math.Log $min)) (sub (math.Log $max) (math.Log $min)) }}
            {{ $currentFontSize := (add $smallestFontSize (mul (sub $largestFontSize $smallestFontSize) $weigth) ) }}
            &amp;lt;!--Current font size: {{$currentFontSize}}--&amp;gt;
            &amp;lt;a href=&quot;{{ &quot;/tags/&quot; | relLangURL }}{{ $name | urlize }}&quot; style=&quot;font-size:{{$currentFontSize}}{{$fontUnit}}&quot;&amp;gt;{{ $name }}&amp;lt;/a&amp;gt;
        {{ end }}
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{{ end }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After replacing &lt;code&gt;siteroot/themes/mainroad/layouts/partials/widgets/taglist.html&lt;/code&gt; with the following code. The tag cloud was complete.&lt;/p&gt;
&lt;h4&gt;Header/Footer Modification&lt;/h4&gt;
&lt;p&gt;Replacing the Header and footer was extremely easy as it is just plain HTML. The files are located in &lt;code&gt;siteroot/themes/mainroad/layouts/partials/header.html or footer.html&lt;/code&gt;. You can leave the stock, but I wanted to add a privacy policy and terms of service to be compliant.&lt;/p&gt;
&lt;h4&gt;Table of Contents Changes&lt;/h4&gt;
&lt;p&gt;I replaced the title &quot;PAGE CONTENTS&quot; with share buttons using a share-buttons.html I created. This could all be done in the post-toc.html file, but I wanted to keep it modular and not make too many edits to the theme. Here were my changes:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;siteroot/themes/mainroad/layouts/partials/post-toc.html&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ if .Param &quot;toc&quot; }}
&amp;lt;div class=&quot;post__toc toc&quot;&amp;gt;
 &amp;lt;div class=&quot;toc__title&quot;&amp;gt;{{ partial &quot;share-buttons.html&quot; . }}&amp;lt;/div&amp;gt;
 &amp;lt;div class=&quot;toc__menu&quot;&amp;gt;
  {{ .TableOfContents }}
 &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{{ end }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: I added the &lt;code&gt;{{ partial &quot;share-buttons.html&quot; . }}&lt;/code&gt; to this and removed PAGE CONTENTS text&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;/siteroot/layouts/partials/share-buttons.html&lt;/em&gt; - NEW FILE&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ $pageurl := .Permalink }}

&amp;lt;style&amp;gt;
#share-buttons {display: inline-block; vertical-align: middle; }
#share-buttons:after {content: &quot;&quot;; display: block; clear: both;}
#share-buttons &amp;gt; div {
position: relative;
text-align: left; 
height: 36px; 
width: 32px; 
float: left; 
text-align: center;
}
#share-buttons &amp;gt; div &amp;gt; svg {height: 16px; fill: #d5d5d5; margin-top: 10px;}
#share-buttons &amp;gt; div:hover {cursor: pointer;}
#share-buttons &amp;gt; div.facebook:hover &amp;gt; svg {fill: #3B5998;}
#share-buttons &amp;gt; div.twitter:hover &amp;gt; svg {fill: #55ACEE;}
#share-buttons &amp;gt; div.linkedin:hover &amp;gt; svg {fill: #0077b5;}
#share-buttons &amp;gt; div.pinterest:hover &amp;gt; svg {fill: #CB2027;}
#share-buttons &amp;gt; div.mail:hover &amp;gt; svg {fill: #7D7D7D;}
#share-buttons &amp;gt; div.instagram:hover &amp;gt; svg {fill: #C73B92;}
#share-buttons &amp;gt; div.facebook &amp;gt; svg {height: 18px; margin-top: 9px;}
#share-buttons &amp;gt; div.twitter &amp;gt; svg {height: 20px; margin-top: 8px;}
#share-buttons &amp;gt; div.linkedin &amp;gt; svg {height: 19px; margin-top: 7px;}
#share-buttons &amp;gt; div.pinterest &amp;gt; svg {height: 20px; margin-top: 9px;}
#share-buttons &amp;gt; div.mail &amp;gt; svg {height: 14px; margin-top: 11px;}
&amp;lt;/style&amp;gt;

&amp;lt;span style=&quot;color: silver;&quot;&amp;gt;Share on: &amp;lt;/span&amp;gt;&amp;lt;div id=&quot;share-buttons&quot;&amp;gt;
&amp;lt;div class=&quot;facebook&quot; title=&quot;Share this on Facebook&quot; onclick=&quot;window.open(&apos;http://www.facebook.com/share.php?u={{ $pageurl }}&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M1343 12v264h-157q-86 0-116 36t-30 108v189h293l-39 296h-254v759h-306v-759h-255v-296h255v-218q0-186 104-288.5t277-102.5q147 0 228 12z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;twitter&quot; title=&quot;Share this on Twitter&quot; onclick=&quot;window.open(&apos;http://twitter.com/home?status={{ $pageurl }}&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M1684 408q-67 98-162 167 1 14 1 42 0 130-38 259.5t-115.5 248.5-184.5 210.5-258 146-323 54.5q-271 0-496-145 35 4 78 4 225 0 401-138-105-2-188-64.5t-114-159.5q33 5 61 5 43 0 85-11-112-23-185.5-111.5t-73.5-205.5v-4q68 38 146 41-66-44-105-115t-39-154q0-88 44-163 121 149 294.5 238.5t371.5 99.5q-8-38-8-74 0-134 94.5-228.5t228.5-94.5q140 0 236 102 109-21 205-78-37 115-142 178 93-10 186-50z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;linkedin&quot; title=&quot;Share this on Linkedin&quot; onclick=&quot;window.open(&apos;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url={{ $pageurl }}&amp;amp;title=&amp;amp;summary=&amp;amp;source=&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M477 625v991h-330v-991h330zm21-306q1 73-50.5 122t-135.5 49h-2q-82 0-132-49t-50-122q0-74 51.5-122.5t134.5-48.5 133 48.5 51 122.5zm1166 729v568h-329v-530q0-105-40.5-164.5t-126.5-59.5q-63 0-105.5 34.5t-63.5 85.5q-11 30-11 81v553h-329q2-399 2-647t-1-296l-1-48h329v144h-2q20-32 41-56t56.5-52 87-43.5 114.5-15.5q171 0 275 113.5t104 332.5z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
{{ if .Params.image }}&amp;lt;div class=&quot;pinterest&quot; title=&quot;Share this on Pinterest&quot; onclick=&quot;window.open(&apos;https://pinterest.com/pin/create/button/?url=&amp;amp;media={{ .Params.image }}&amp;amp;description=&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M256 597q0-108 37.5-203.5t103.5-166.5 152-123 185-78 202-26q158 0 294 66.5t221 193.5 85 287q0 96-19 188t-60 177-100 149.5-145 103-189 38.5q-68 0-135-32t-96-88q-10 39-28 112.5t-23.5 95-20.5 71-26 71-32 62.5-46 77.5-62 86.5l-14 5-9-10q-15-157-15-188 0-92 21.5-206.5t66.5-287.5 52-203q-32-65-32-169 0-83 52-156t132-73q61 0 95 40.5t34 102.5q0 66-44 191t-44 187q0 63 45 104.5t109 41.5q55 0 102-25t78.5-68 56-95 38-110.5 20-111 6.5-99.5q0-173-109.5-269.5t-285.5-96.5q-200 0-334 129.5t-134 328.5q0 44 12.5 85t27 65 27 45.5 12.5 30.5q0 28-15 73t-37 45q-2 0-17-3-51-15-90.5-56t-61-94.5-32.5-108-11-106.5z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;{{ end }}
&amp;lt;div class=&quot;mail&quot; title=&quot;Share this through Email&quot; onclick=&quot;window.open(&apos;mailto:?&amp;amp;body={{ $pageurl }}&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M1792 710v794q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-794q44 49 101 87 362 246 497 345 57 42 92.5 65.5t94.5 48 110 24.5h2q51 0 110-24.5t94.5-48 92.5-65.5q170-123 498-345 57-39 100-87zm0-294q0 79-49 151t-122 123q-376 261-468 325-10 7-42.5 30.5t-54 38-52 32.5-57.5 27-50 9h-2q-23 0-50-9t-57.5-27-52-32.5-54-38-42.5-30.5q-91-64-262-182.5t-205-142.5q-62-42-117-115.5t-55-136.5q0-78 41.5-130t118.5-52h1472q65 0 112.5 47t47.5 113z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Adding AdSense and Custom Scripts to All Pages&lt;/h4&gt;
&lt;p&gt;To add specific scripts to all pages, such as AdSense, you will need to modify &lt;code&gt;siteroot/themes/mainroad/_defaults/baseof.html&lt;/code&gt;. I added the following before the &lt;code&gt;&amp;lt;/head&amp;gt;&lt;/code&gt; of this file to populate AdSense. You could put Analytics in here as well, but it isn&apos;t needed since mainroad theme has the option in &lt;code&gt;config.toml&lt;/code&gt;. Here are my modifications:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;baseof.html&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{- if not .Site.IsServer }}
  {{ template &quot;_internal/google_analytics_async.html&quot; . }}
  {{ partial &quot;adsense-auto.html&quot; . }}
 {{- end }}
&amp;lt;/head&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;*siteroot/layouts/partials/adsense-auto.html_ - NEW FILE&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script data-ad-client=&quot;ca-pub-000000000000000&quot; async src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;_Note: Make sure to use your &lt;em&gt;ca-pub-IDGOESHERE&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Configuration of config.toml&lt;/h3&gt;
&lt;p&gt;In your siteroot you will see this file that you will need to configure. Most users will simply edit this and away they go. Everything in this file worked pretty darn well. There was a couple spots that tripped me up which I will go over now.&lt;/p&gt;
&lt;h4&gt;BaseURL&lt;/h4&gt;
&lt;p&gt;Make sure you fill this out completely. I messed up the automated sitemap.xml because I simply put / instead of my entire address. This is what I have in the file now: &lt;code&gt;baseURL = &quot;https://christitus.com/&quot;&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Analytics, Social, and Title/Description&lt;/h4&gt;
&lt;p&gt;All of these options worked perfectly and I had no issues.&lt;/p&gt;
&lt;h4&gt;Menu&lt;/h4&gt;
&lt;p&gt;The last problem I had was the menu at the top of my theme. I soon learned there was a syntax to the config.toml file that I missed. I simply added this to the bottom and changed the weight to sort the menu properly. Here is that code snippit:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[menu]

  [[menu.main]]
    identifier = &quot;home&quot;
    name = &quot;Home&quot;
    pre = &quot;&amp;lt;i class=&apos;fa fa-heart&apos;&amp;gt;&amp;lt;/i&amp;gt;&quot;
    url = &quot;/&quot;
    weight = -110

  [[menu.main]]
    name = &quot;Donate&quot;
    post = &quot;&quot;
    pre = &quot;&amp;lt;i class=&apos;fa fa-road&apos;&amp;gt;&amp;lt;/i&amp;gt;&quot;
    url = &quot;https://www.patreon.com/christitustech&quot;
    weight = -105

  [[menu.main]]
    name = &quot;Remote Support&quot;
    post = &quot;&quot;
    pre = &quot;&amp;lt;i class=&apos;fa fa-road&apos;&amp;gt;&amp;lt;/i&amp;gt;&quot;
    url = &quot;https://download.teamviewer.com/download/TeamViewerQS.exe&quot;
    weight = -100
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: I added external site links and a proper home button&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Templates to Optimze My Workflow&lt;/h3&gt;
&lt;p&gt;This is where HUGO really shines and saves me a TON of time compared to WordPress and the like. Simply modifying the &lt;code&gt;siteroot/archetypes/default.md&lt;/code&gt; file to put all the things I normally have in a post. Here is what I use:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://default.md&quot;&gt;default.md&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;{{ replace .Name &quot;-&quot; &quot; &quot; | title }}&quot;

date: {{ .Date }}
url: /{{ .Name }}/
image: images/2020-thumbs/{{ .Name }}.webp
categories:
  - Linux
  - Windows
  - Networking
tags:
  - Ubuntu
draft: true
---
&amp;lt;!--more--&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now everytime I run &lt;code&gt;hugo new posts/newpost.md&lt;/code&gt; it will fill in the Title, date, custom url, thumbnail, add the more directive for list view, and my closing phrase.&lt;/p&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/6JaBian3vgI&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This has changed my life and has made it so I can make posts like this one for people to follow. This entire post took me about an hour to write and would have take twice as long if I were to do it in WordPress.&lt;/p&gt;
</description><pubDate>Wed, 08 Jan 2020 21:59:19 GMT</pubDate><content:encoded>&lt;p&gt;This article goes over the basics of hugo and guides you through the process of using a static site generator.&lt;/p&gt;

&lt;h2&gt;Installing Hugo&lt;/h2&gt;
&lt;p&gt;Arch-Based Users: &lt;code&gt;yay -S hugo&lt;/code&gt;&lt;br /&gt;
Debian-Based Users: &lt;code&gt;sudo apt install hugo&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: Debian packages are old and I recommend downloading the latest version of hugo from github&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Github Repo for Hugo (Latest Versions and Notes)&lt;br /&gt;
&lt;a href=&quot;https://github.com/gohugoio/hugo&quot;&gt;Hugo GitHub&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://gohugo.io&quot;&gt;Official Site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Create your first site and install a theme using the &lt;a href=&quot;https://gohugo.io/getting-started/quick-start/&quot;&gt;Quick Start&lt;/a&gt; Page.&lt;/p&gt;
&lt;h2&gt;Common Hugo Commands&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hugo&lt;/code&gt; - builds static files in the &lt;code&gt;siteroot/public&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hugo server&lt;/code&gt; - runs a test site so you can login to &lt;a href=&quot;http://127.0.0.1:1313&quot;&gt;http://127.0.0.1:1313&lt;/a&gt; and see your changes before pushing live&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hugo new posts/dir/newpost.md&lt;/code&gt; - you can make new posts on the fly with all your templates (see below)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The First Changes&lt;/h2&gt;
&lt;p&gt;I made several changes when I first switched to HUGO and these were the changes I made.&lt;/p&gt;
&lt;h3&gt;Theme Modification&lt;/h3&gt;
&lt;p&gt;I downloaded the the &lt;a href=&quot;https://github.com/vimux/mainroad&quot;&gt;Mainroad&lt;/a&gt; Theme and installed it during the Quick Start. &lt;em&gt;Note: My Debian system had an old version of HUGO 0.40 and I had to update before the theme worked.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;Changing Theme Widgets&lt;/h4&gt;
&lt;h5&gt;Social Widget&lt;/h5&gt;
&lt;p&gt;I first started to change the &lt;em&gt;social widget&lt;/em&gt; by adding YouTube and Twitch from the following file &lt;code&gt;siteroot/themes/mainroad/layouts/partials/widgets/social.html&lt;/code&gt;.&lt;br /&gt;
The Most challengeing Part of this was the SVG files used by mainroad. However, once I figured out the SVG format can be edited in a simple text editor and I mirrored the size and types from the existing SVG files they showed up.&lt;/p&gt;
&lt;p&gt;Here are the Edits I made to &lt;em&gt;social.html&lt;/em&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{- with .Site.Params.widgets.social.twitch }}
  &amp;lt;div class=&quot;widget-social__item widget__item&quot;&amp;gt;
   &amp;lt;a class=&quot;widget-social__link widget__link btn&quot; title=&quot;Twitch&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://twitch.tv/{{ . }}&quot; target=&quot;_blank&quot;&amp;gt;
    {{ partial &quot;svg/twitch.svg&quot; (dict &quot;class&quot; &quot;widget-social__link-icon&quot;) }}
    &amp;lt;span&amp;gt;Twitch Live Streams&amp;lt;/span&amp;gt;
   &amp;lt;/a&amp;gt;
  &amp;lt;/div&amp;gt;
  {{- end }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Basically after getting the SVG setup and putting the twitch.svg and youtube.svg in this path &lt;code&gt;siteroot/mainroad/layouts/partials/svg&lt;/code&gt; I was able to get the Social widget exactly how I wanted.&lt;/p&gt;
&lt;h5&gt;Tags Widget&lt;/h5&gt;
&lt;p&gt;Next up was fixing the tags on the sidebar. They were blocky and quite ugly, where I wanted a traditional tag cloud that you see on many other sites to help users navigate your content. So I began looking at other projects that had the proper code. I found the following code snippit:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ if not (eq (len $.Site.Taxonomies.tags) 0) }}
    {{ $fontUnit := &quot;rem&quot; }}
    {{ $largestFontSize := 2.0 }}
    {{ $largestFontSize := 2.5 }}
    {{ $smallestFontSize := 1.0 }}
    {{ $fontSpread := sub $largestFontSize $smallestFontSize }}
    {{ $max := add (len (index $.Site.Taxonomies.tags.ByCount 0).Pages) 1 }}
    {{ $min := len (index $.Site.Taxonomies.tags.ByCount.Reverse 0).Pages }}
    {{ $spread := sub $max $min }}
    {{ $fontStep := div $fontSpread $spread }}
&amp;lt;div class=&quot;widget-taglist widget&quot;&amp;gt;
  &amp;lt;h4 class=&quot;widget__title&quot;&amp;gt;{{ T &quot;tags_title&quot; }}&amp;lt;/h4&amp;gt;
   &amp;lt;div class=&quot;widget__content&quot;&amp;gt;
    &amp;lt;div id=&quot;tag-cloud&quot; style=&quot;padding: 5px 15px&quot;&amp;gt;
        {{ range $name, $taxonomy := $.Site.Taxonomies.tags }}
            {{ $currentTagCount := len $taxonomy.Pages }}
            {{ $currentFontSize := (add $smallestFontSize (mul (sub $currentTagCount $min) $fontStep) ) }}
            {{ $count := len $taxonomy.Pages }}
            {{ $weigth := div (sub (math.Log $count) (math.Log $min)) (sub (math.Log $max) (math.Log $min)) }}
            {{ $currentFontSize := (add $smallestFontSize (mul (sub $largestFontSize $smallestFontSize) $weigth) ) }}
            &amp;lt;!--Current font size: {{$currentFontSize}}--&amp;gt;
            &amp;lt;a href=&quot;{{ &quot;/tags/&quot; | relLangURL }}{{ $name | urlize }}&quot; style=&quot;font-size:{{$currentFontSize}}{{$fontUnit}}&quot;&amp;gt;{{ $name }}&amp;lt;/a&amp;gt;
        {{ end }}
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{{ end }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After replacing &lt;code&gt;siteroot/themes/mainroad/layouts/partials/widgets/taglist.html&lt;/code&gt; with the following code. The tag cloud was complete.&lt;/p&gt;
&lt;h4&gt;Header/Footer Modification&lt;/h4&gt;
&lt;p&gt;Replacing the Header and footer was extremely easy as it is just plain HTML. The files are located in &lt;code&gt;siteroot/themes/mainroad/layouts/partials/header.html or footer.html&lt;/code&gt;. You can leave the stock, but I wanted to add a privacy policy and terms of service to be compliant.&lt;/p&gt;
&lt;h4&gt;Table of Contents Changes&lt;/h4&gt;
&lt;p&gt;I replaced the title &quot;PAGE CONTENTS&quot; with share buttons using a share-buttons.html I created. This could all be done in the post-toc.html file, but I wanted to keep it modular and not make too many edits to the theme. Here were my changes:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;siteroot/themes/mainroad/layouts/partials/post-toc.html&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ if .Param &quot;toc&quot; }}
&amp;lt;div class=&quot;post__toc toc&quot;&amp;gt;
 &amp;lt;div class=&quot;toc__title&quot;&amp;gt;{{ partial &quot;share-buttons.html&quot; . }}&amp;lt;/div&amp;gt;
 &amp;lt;div class=&quot;toc__menu&quot;&amp;gt;
  {{ .TableOfContents }}
 &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{{ end }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: I added the &lt;code&gt;{{ partial &quot;share-buttons.html&quot; . }}&lt;/code&gt; to this and removed PAGE CONTENTS text&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;/siteroot/layouts/partials/share-buttons.html&lt;/em&gt; - NEW FILE&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ $pageurl := .Permalink }}

&amp;lt;style&amp;gt;
#share-buttons {display: inline-block; vertical-align: middle; }
#share-buttons:after {content: &quot;&quot;; display: block; clear: both;}
#share-buttons &amp;gt; div {
position: relative;
text-align: left; 
height: 36px; 
width: 32px; 
float: left; 
text-align: center;
}
#share-buttons &amp;gt; div &amp;gt; svg {height: 16px; fill: #d5d5d5; margin-top: 10px;}
#share-buttons &amp;gt; div:hover {cursor: pointer;}
#share-buttons &amp;gt; div.facebook:hover &amp;gt; svg {fill: #3B5998;}
#share-buttons &amp;gt; div.twitter:hover &amp;gt; svg {fill: #55ACEE;}
#share-buttons &amp;gt; div.linkedin:hover &amp;gt; svg {fill: #0077b5;}
#share-buttons &amp;gt; div.pinterest:hover &amp;gt; svg {fill: #CB2027;}
#share-buttons &amp;gt; div.mail:hover &amp;gt; svg {fill: #7D7D7D;}
#share-buttons &amp;gt; div.instagram:hover &amp;gt; svg {fill: #C73B92;}
#share-buttons &amp;gt; div.facebook &amp;gt; svg {height: 18px; margin-top: 9px;}
#share-buttons &amp;gt; div.twitter &amp;gt; svg {height: 20px; margin-top: 8px;}
#share-buttons &amp;gt; div.linkedin &amp;gt; svg {height: 19px; margin-top: 7px;}
#share-buttons &amp;gt; div.pinterest &amp;gt; svg {height: 20px; margin-top: 9px;}
#share-buttons &amp;gt; div.mail &amp;gt; svg {height: 14px; margin-top: 11px;}
&amp;lt;/style&amp;gt;

&amp;lt;span style=&quot;color: silver;&quot;&amp;gt;Share on: &amp;lt;/span&amp;gt;&amp;lt;div id=&quot;share-buttons&quot;&amp;gt;
&amp;lt;div class=&quot;facebook&quot; title=&quot;Share this on Facebook&quot; onclick=&quot;window.open(&apos;http://www.facebook.com/share.php?u={{ $pageurl }}&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M1343 12v264h-157q-86 0-116 36t-30 108v189h293l-39 296h-254v759h-306v-759h-255v-296h255v-218q0-186 104-288.5t277-102.5q147 0 228 12z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;twitter&quot; title=&quot;Share this on Twitter&quot; onclick=&quot;window.open(&apos;http://twitter.com/home?status={{ $pageurl }}&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M1684 408q-67 98-162 167 1 14 1 42 0 130-38 259.5t-115.5 248.5-184.5 210.5-258 146-323 54.5q-271 0-496-145 35 4 78 4 225 0 401-138-105-2-188-64.5t-114-159.5q33 5 61 5 43 0 85-11-112-23-185.5-111.5t-73.5-205.5v-4q68 38 146 41-66-44-105-115t-39-154q0-88 44-163 121 149 294.5 238.5t371.5 99.5q-8-38-8-74 0-134 94.5-228.5t228.5-94.5q140 0 236 102 109-21 205-78-37 115-142 178 93-10 186-50z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;linkedin&quot; title=&quot;Share this on Linkedin&quot; onclick=&quot;window.open(&apos;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url={{ $pageurl }}&amp;amp;title=&amp;amp;summary=&amp;amp;source=&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M477 625v991h-330v-991h330zm21-306q1 73-50.5 122t-135.5 49h-2q-82 0-132-49t-50-122q0-74 51.5-122.5t134.5-48.5 133 48.5 51 122.5zm1166 729v568h-329v-530q0-105-40.5-164.5t-126.5-59.5q-63 0-105.5 34.5t-63.5 85.5q-11 30-11 81v553h-329q2-399 2-647t-1-296l-1-48h329v144h-2q20-32 41-56t56.5-52 87-43.5 114.5-15.5q171 0 275 113.5t104 332.5z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
{{ if .Params.image }}&amp;lt;div class=&quot;pinterest&quot; title=&quot;Share this on Pinterest&quot; onclick=&quot;window.open(&apos;https://pinterest.com/pin/create/button/?url=&amp;amp;media={{ .Params.image }}&amp;amp;description=&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M256 597q0-108 37.5-203.5t103.5-166.5 152-123 185-78 202-26q158 0 294 66.5t221 193.5 85 287q0 96-19 188t-60 177-100 149.5-145 103-189 38.5q-68 0-135-32t-96-88q-10 39-28 112.5t-23.5 95-20.5 71-26 71-32 62.5-46 77.5-62 86.5l-14 5-9-10q-15-157-15-188 0-92 21.5-206.5t66.5-287.5 52-203q-32-65-32-169 0-83 52-156t132-73q61 0 95 40.5t34 102.5q0 66-44 191t-44 187q0 63 45 104.5t109 41.5q55 0 102-25t78.5-68 56-95 38-110.5 20-111 6.5-99.5q0-173-109.5-269.5t-285.5-96.5q-200 0-334 129.5t-134 328.5q0 44 12.5 85t27 65 27 45.5 12.5 30.5q0 28-15 73t-37 45q-2 0-17-3-51-15-90.5-56t-61-94.5-32.5-108-11-106.5z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;{{ end }}
&amp;lt;div class=&quot;mail&quot; title=&quot;Share this through Email&quot; onclick=&quot;window.open(&apos;mailto:?&amp;amp;body={{ $pageurl }}&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M1792 710v794q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-794q44 49 101 87 362 246 497 345 57 42 92.5 65.5t94.5 48 110 24.5h2q51 0 110-24.5t94.5-48 92.5-65.5q170-123 498-345 57-39 100-87zm0-294q0 79-49 151t-122 123q-376 261-468 325-10 7-42.5 30.5t-54 38-52 32.5-57.5 27-50 9h-2q-23 0-50-9t-57.5-27-52-32.5-54-38-42.5-30.5q-91-64-262-182.5t-205-142.5q-62-42-117-115.5t-55-136.5q0-78 41.5-130t118.5-52h1472q65 0 112.5 47t47.5 113z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Adding AdSense and Custom Scripts to All Pages&lt;/h4&gt;
&lt;p&gt;To add specific scripts to all pages, such as AdSense, you will need to modify &lt;code&gt;siteroot/themes/mainroad/_defaults/baseof.html&lt;/code&gt;. I added the following before the &lt;code&gt;&amp;lt;/head&amp;gt;&lt;/code&gt; of this file to populate AdSense. You could put Analytics in here as well, but it isn&apos;t needed since mainroad theme has the option in &lt;code&gt;config.toml&lt;/code&gt;. Here are my modifications:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;baseof.html&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{- if not .Site.IsServer }}
  {{ template &quot;_internal/google_analytics_async.html&quot; . }}
  {{ partial &quot;adsense-auto.html&quot; . }}
 {{- end }}
&amp;lt;/head&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;*siteroot/layouts/partials/adsense-auto.html_ - NEW FILE&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script data-ad-client=&quot;ca-pub-000000000000000&quot; async src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;_Note: Make sure to use your &lt;em&gt;ca-pub-IDGOESHERE&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Configuration of config.toml&lt;/h3&gt;
&lt;p&gt;In your siteroot you will see this file that you will need to configure. Most users will simply edit this and away they go. Everything in this file worked pretty darn well. There was a couple spots that tripped me up which I will go over now.&lt;/p&gt;
&lt;h4&gt;BaseURL&lt;/h4&gt;
&lt;p&gt;Make sure you fill this out completely. I messed up the automated sitemap.xml because I simply put / instead of my entire address. This is what I have in the file now: &lt;code&gt;baseURL = &quot;https://christitus.com/&quot;&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Analytics, Social, and Title/Description&lt;/h4&gt;
&lt;p&gt;All of these options worked perfectly and I had no issues.&lt;/p&gt;
&lt;h4&gt;Menu&lt;/h4&gt;
&lt;p&gt;The last problem I had was the menu at the top of my theme. I soon learned there was a syntax to the config.toml file that I missed. I simply added this to the bottom and changed the weight to sort the menu properly. Here is that code snippit:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[menu]

  [[menu.main]]
    identifier = &quot;home&quot;
    name = &quot;Home&quot;
    pre = &quot;&amp;lt;i class=&apos;fa fa-heart&apos;&amp;gt;&amp;lt;/i&amp;gt;&quot;
    url = &quot;/&quot;
    weight = -110

  [[menu.main]]
    name = &quot;Donate&quot;
    post = &quot;&quot;
    pre = &quot;&amp;lt;i class=&apos;fa fa-road&apos;&amp;gt;&amp;lt;/i&amp;gt;&quot;
    url = &quot;https://www.patreon.com/christitustech&quot;
    weight = -105

  [[menu.main]]
    name = &quot;Remote Support&quot;
    post = &quot;&quot;
    pre = &quot;&amp;lt;i class=&apos;fa fa-road&apos;&amp;gt;&amp;lt;/i&amp;gt;&quot;
    url = &quot;https://download.teamviewer.com/download/TeamViewerQS.exe&quot;
    weight = -100
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: I added external site links and a proper home button&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Templates to Optimze My Workflow&lt;/h3&gt;
&lt;p&gt;This is where HUGO really shines and saves me a TON of time compared to WordPress and the like. Simply modifying the &lt;code&gt;siteroot/archetypes/default.md&lt;/code&gt; file to put all the things I normally have in a post. Here is what I use:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://default.md&quot;&gt;default.md&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;{{ replace .Name &quot;-&quot; &quot; &quot; | title }}&quot;

date: {{ .Date }}
url: /{{ .Name }}/
image: images/2020-thumbs/{{ .Name }}.webp
categories:
  - Linux
  - Windows
  - Networking
tags:
  - Ubuntu
draft: true
---
&amp;lt;!--more--&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now everytime I run &lt;code&gt;hugo new posts/newpost.md&lt;/code&gt; it will fill in the Title, date, custom url, thumbnail, add the more directive for list view, and my closing phrase.&lt;/p&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/6JaBian3vgI&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This has changed my life and has made it so I can make posts like this one for people to follow. This entire post took me about an hour to write and would have take twice as long if I were to do it in WordPress.&lt;/p&gt;
</content:encoded></item><item><title>How To Setup a VPN Kill Switch Server</title><link>https://christitus.com/vpn-kill-switch/</link><guid isPermaLink="true">https://christitus.com/vpn-kill-switch/</guid><description>&lt;p&gt;This will show you how to set up a VPN Kill Switch so all traffic will come from that server. For this server, I am using CentOS, but you can easily use Ubuntu server if you are more familiar with that. &lt;/p&gt;
&lt;h2&gt;Install packages&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/instal.webp&quot; alt=&quot;install image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt install openvpn ufw -y&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*Note: use apt instead of dnf on Ubuntu or Debian Servers&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Set Static IP&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo nmtuisudo nmcli connection down eth0 &amp;amp;&amp;amp; sudo nmcli connection up eth0&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Download OVPN Files&lt;/h2&gt;
&lt;p&gt;My recommendation for a public VPN provider at the time of writing was &lt;a href=&quot;https://www.expressvpn.com/&quot;&gt;ExpressVPN&lt;/a&gt;.
&lt;strong&gt;However, you can use these instructions on ANY VPN that provides ovpn files which any reputable VPN provider has.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mv ~/Downloads/client.ovpn /etc/openvpn/test.conf&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;Service creation&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/sysinstall.webp&quot; alt=&quot;sysinstall image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ls /lib/systemd/system/&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*Check for openvpn-client@ or openvpn@&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo systemctl start openvpn@test&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Disable ipv6 and Secure System&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/sysctl.webp&quot; alt=&quot;sysctl&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo nano /etc/sysctl.conf&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;sudo sysctl -p&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verify Ipv6 is disabled&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;cat /proc/sys/net/ipv6/conf/all/disable_ipv6&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo sysctl --all | grep disable_ipv6&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Firewall ufw blocks – VPN Kill Switch&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/vpnsetup.webp&quot; alt=&quot;install image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo nano /etc/default/ufw&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;IPV6=no&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Whitelist Local Area Network&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow in to 192.168.1.0/24&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow out to 192.168.1.0/24&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Block All Incoming and Outgoing Traffic by Default&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw default deny outgoing&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw default deny incoming&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Whitelist VPN Port for VPN Establishment&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow out to any port 1194 proto udp&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*check port by doing head /etc/openvpn/expressvpn.conf&lt;/em&gt;&lt;br /&gt;
&lt;strong&gt;Whitelist VPN Tunnel&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow out on tun0 from any to any&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow in on tun0 from any to any&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Enable Firewall&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw enable&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;External Program Setup on Server&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/transmission.webp&quot; alt=&quot;install image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;X11 Forwarding&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/auePeI8vZA8&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;p&gt;&lt;strong&gt;Transmission daemon&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo apt install transmission-daemon&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo systemctl stop transmission-daemon&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo nano /etc/transmission-daemon/settings.json&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*enable rpc and whitelist, add blocklist&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo systemctl start transmission-daemon&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Full Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/wc-Ti8UoPoA&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Mon, 02 Dec 2019 05:31:59 GMT</pubDate><content:encoded>&lt;p&gt;This will show you how to set up a VPN Kill Switch so all traffic will come from that server. For this server, I am using CentOS, but you can easily use Ubuntu server if you are more familiar with that. &lt;/p&gt;
&lt;h2&gt;Install packages&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/instal.webp&quot; alt=&quot;install image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt install openvpn ufw -y&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*Note: use apt instead of dnf on Ubuntu or Debian Servers&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Set Static IP&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo nmtuisudo nmcli connection down eth0 &amp;amp;&amp;amp; sudo nmcli connection up eth0&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Download OVPN Files&lt;/h2&gt;
&lt;p&gt;My recommendation for a public VPN provider at the time of writing was &lt;a href=&quot;https://www.expressvpn.com/&quot;&gt;ExpressVPN&lt;/a&gt;.
&lt;strong&gt;However, you can use these instructions on ANY VPN that provides ovpn files which any reputable VPN provider has.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mv ~/Downloads/client.ovpn /etc/openvpn/test.conf&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;Service creation&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/sysinstall.webp&quot; alt=&quot;sysinstall image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ls /lib/systemd/system/&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*Check for openvpn-client@ or openvpn@&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo systemctl start openvpn@test&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Disable ipv6 and Secure System&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/sysctl.webp&quot; alt=&quot;sysctl&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo nano /etc/sysctl.conf&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;sudo sysctl -p&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verify Ipv6 is disabled&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;cat /proc/sys/net/ipv6/conf/all/disable_ipv6&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo sysctl --all | grep disable_ipv6&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Firewall ufw blocks – VPN Kill Switch&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/vpnsetup.webp&quot; alt=&quot;install image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo nano /etc/default/ufw&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;IPV6=no&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Whitelist Local Area Network&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow in to 192.168.1.0/24&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow out to 192.168.1.0/24&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Block All Incoming and Outgoing Traffic by Default&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw default deny outgoing&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw default deny incoming&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Whitelist VPN Port for VPN Establishment&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow out to any port 1194 proto udp&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*check port by doing head /etc/openvpn/expressvpn.conf&lt;/em&gt;&lt;br /&gt;
&lt;strong&gt;Whitelist VPN Tunnel&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow out on tun0 from any to any&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow in on tun0 from any to any&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Enable Firewall&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw enable&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;External Program Setup on Server&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/transmission.webp&quot; alt=&quot;install image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;X11 Forwarding&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/auePeI8vZA8&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;p&gt;&lt;strong&gt;Transmission daemon&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo apt install transmission-daemon&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo systemctl stop transmission-daemon&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo nano /etc/transmission-daemon/settings.json&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*enable rpc and whitelist, add blocklist&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo systemctl start transmission-daemon&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Full Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/wc-Ti8UoPoA&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>How to Secure A Web Server</title><link>https://christitus.com/secure-web-server/</link><guid isPermaLink="true">https://christitus.com/secure-web-server/</guid><description>&lt;p&gt;In this article, I show you all the steps needed to secure a web server and improve your security. I recommend doing all of these things on every installation. Also, just because you secure your server doesn’t mean you can neglect it. I highly recommend monitoring it and adjusting security as needed. Monitoring is required for proper security in my opinion. &lt;/p&gt;
&lt;h2&gt;Secure A Web Server Steps&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/firewall-png-577x359.webp&quot; alt=&quot;firewall-png-577359&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Install UFW&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get update  
sudo apt-get install ufw  
sudo ufw limit 22/tcp  
sudo ufw allow 80/tcp  
sudo ufw allow 443/tcp  
sudo ufw enable
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Verify&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw status&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do Global blocks&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw default deny incoming  
sudo ufw default allow outgoing
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/ssh.webp&quot; alt=&quot;ssh&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Change SSH to Key&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Remote Machine&lt;/strong&gt;: &lt;code&gt;ssh-keygen -t rsa&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Transfer to Server&lt;/h3&gt;
&lt;h4&gt;Method 1&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Transfer pub ssh key to server&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scp ~/.ssh/id_rsa.pub user@server.com:~
cat ~/id_rsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Method 2&lt;/h4&gt;
&lt;p&gt;Copy key and place in authorized_key file in one command&lt;br /&gt;
&lt;code&gt;ssh-copy-id -i ~/.ssh/id_rsa.pub user@server.com&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Secure a Web Server Disabling Password Auth through SSH&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Change the following lines in /etc/sshd_config&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
PermitRootLogin no
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Edit /etc/sysctl.conf&lt;/h2&gt;
&lt;p&gt;Enable security features&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/settings.webp&quot; alt=&quot;settings&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Prevent IP Spoof /etc/host.conf&lt;/h2&gt;
&lt;p&gt;Change File to mirror below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;​order bind,hosts
multi on
nospoof on
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Install Fail2Ban&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Check Listening Ports&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;netstat -tunlp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You will now have completed the basics of a secure web server!&lt;/p&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/7pJKBL9x6bY&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Thu, 10 Oct 2019 13:37:49 GMT</pubDate><content:encoded>&lt;p&gt;In this article, I show you all the steps needed to secure a web server and improve your security. I recommend doing all of these things on every installation. Also, just because you secure your server doesn’t mean you can neglect it. I highly recommend monitoring it and adjusting security as needed. Monitoring is required for proper security in my opinion. &lt;/p&gt;
&lt;h2&gt;Secure A Web Server Steps&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/firewall-png-577x359.webp&quot; alt=&quot;firewall-png-577359&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Install UFW&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get update  
sudo apt-get install ufw  
sudo ufw limit 22/tcp  
sudo ufw allow 80/tcp  
sudo ufw allow 443/tcp  
sudo ufw enable
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Verify&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw status&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do Global blocks&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw default deny incoming  
sudo ufw default allow outgoing
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/ssh.webp&quot; alt=&quot;ssh&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Change SSH to Key&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Remote Machine&lt;/strong&gt;: &lt;code&gt;ssh-keygen -t rsa&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Transfer to Server&lt;/h3&gt;
&lt;h4&gt;Method 1&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Transfer pub ssh key to server&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scp ~/.ssh/id_rsa.pub user@server.com:~
cat ~/id_rsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Method 2&lt;/h4&gt;
&lt;p&gt;Copy key and place in authorized_key file in one command&lt;br /&gt;
&lt;code&gt;ssh-copy-id -i ~/.ssh/id_rsa.pub user@server.com&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Secure a Web Server Disabling Password Auth through SSH&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Change the following lines in /etc/sshd_config&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
PermitRootLogin no
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Edit /etc/sysctl.conf&lt;/h2&gt;
&lt;p&gt;Enable security features&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/settings.webp&quot; alt=&quot;settings&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Prevent IP Spoof /etc/host.conf&lt;/h2&gt;
&lt;p&gt;Change File to mirror below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;​order bind,hosts
multi on
nospoof on
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Install Fail2Ban&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Check Listening Ports&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;netstat -tunlp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You will now have completed the basics of a secure web server!&lt;/p&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/7pJKBL9x6bY&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>How to Setup a VPN Server and Clients Using OpenVPN</title><link>https://christitus.com/openvpn-server/</link><guid isPermaLink="true">https://christitus.com/openvpn-server/</guid><description>&lt;p&gt;In this article, I go over how to setup a VPN Server and clients using OpenVPN. this will cover the setup process of the remote machine and then connecting to it via both Linux and Windows client machines. &lt;/p&gt;
&lt;h2&gt;OpenVPN Server Setup&lt;/h2&gt;
&lt;p&gt;This is the Installation script I use to setup a secure OpenVPN Server&lt;br /&gt;
&lt;a href=&quot;https://github.com/angristan/openvpn-install&quot;&gt;https://github.com/angristan/openvpn-install&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Run the following script as root or add sudo to the &lt;a href=&quot;http://install.sh&quot;&gt;install.sh&lt;/a&gt; script&lt;br /&gt;
&lt;code&gt;curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;chmod +x openvpn-install.sh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AUTO_INSTALL=y ./openvpn-install.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;you will need to enable the OpenVPN service to auto-start so the VPN stays up after reboot.&lt;br /&gt;
&lt;code&gt;sudo systemctl enable openvpn&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Troubleshooting&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/tun-isnot-available.webp&quot; alt=&quot;tun-isnot-available&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TUN is not available&lt;/strong&gt;&lt;br /&gt;
-Certain VPS servers do not have TUN enabled by default. Create the follow script and run it on startup to fix this issue.&lt;/p&gt;
&lt;p&gt;-Create /usr/sbin/enabletun.sh&lt;br /&gt;
&lt;code&gt;#!/bin/bash&lt;/code&gt;
&lt;code&gt;mkdir /dev/net&lt;/code&gt;
&lt;code&gt;mknod /dev/net/tun c 10 200&lt;/code&gt;
&lt;code&gt;chmod 0666 /dev/net/tun&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;-Mark /usr/sbin/enabletun.sh executable&lt;br /&gt;
&lt;code&gt;chmod +x /usr/sbin/enabletun.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;-Run this script on startup by adding the following to /etc/rc.local&lt;br /&gt;
&lt;code&gt;/usr/sbin/tunscript.sh || exit 1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;exit 0&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Client Setup&lt;/h2&gt;
&lt;h3&gt;Linux Client Setup&lt;/h3&gt;
&lt;p&gt;Install OpenVPN for Network Manager&lt;br /&gt;
&lt;strong&gt;Debian-Based&lt;/strong&gt; &lt;code&gt;sudo apt install network-manager-openvpn&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Arch-Based&lt;/strong&gt; &lt;code&gt;sudo pacman -S networkmanager-openvpn&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Gnome-Based DEs&lt;/strong&gt; &lt;code&gt;sudo apt install network-manager-openvpn-gnome&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Copy OVPN file to /etc/openvpn/client/client.ovpn&lt;br /&gt;
Test client configuration in Terminal:&lt;br /&gt;
&lt;code&gt;sudo openvpn /etc/openvpn/client/client.ovpn&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/import-vpn.webp&quot; alt=&quot;import-vpn&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Network manager Import VPN Connection: client.ovpn&lt;br /&gt;
Note: &lt;em&gt;Certificates stored in ~/.local/share/networkmanagement/certificates&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Connect via your Network Manager&lt;/p&gt;
&lt;h3&gt;Linux Client Troubleshooting&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/tls-issue.webp&quot; alt=&quot;tls-issue&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Verify TLS key file is enabled and created. This is a known issue on KDE desktops. If it isn’t make sure to create it using the last TLS portion of the ovpn file.&lt;/p&gt;
&lt;h3&gt;Windows Client Setup&lt;/h3&gt;
&lt;p&gt;Download OpenVPN client for your Windows @ &lt;a href=&quot;https://openvpn.net/community-downloads/&quot;&gt;https://openvpn.net/community-downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/clientovpn-winscp.webp?fit=1024%2C451&amp;amp;ssl=1&quot; alt=&quot;clientovpn-winscp&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Copy your client.ovpn from the server (WinSCP to connect and copy) and place the file in C:\Program Files\OpenVPN\config&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/openvpnconnect.webp&quot; alt=&quot;openvpnconnect&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Run the program and right click the icon in the tray and connect&lt;/p&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/CBJMl9MILbg&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><pubDate>Sat, 21 Sep 2019 04:45:08 GMT</pubDate><content:encoded>&lt;p&gt;In this article, I go over how to setup a VPN Server and clients using OpenVPN. this will cover the setup process of the remote machine and then connecting to it via both Linux and Windows client machines. &lt;/p&gt;
&lt;h2&gt;OpenVPN Server Setup&lt;/h2&gt;
&lt;p&gt;This is the Installation script I use to setup a secure OpenVPN Server&lt;br /&gt;
&lt;a href=&quot;https://github.com/angristan/openvpn-install&quot;&gt;https://github.com/angristan/openvpn-install&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Run the following script as root or add sudo to the &lt;a href=&quot;http://install.sh&quot;&gt;install.sh&lt;/a&gt; script&lt;br /&gt;
&lt;code&gt;curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;chmod +x openvpn-install.sh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AUTO_INSTALL=y ./openvpn-install.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;you will need to enable the OpenVPN service to auto-start so the VPN stays up after reboot.&lt;br /&gt;
&lt;code&gt;sudo systemctl enable openvpn&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Troubleshooting&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/tun-isnot-available.webp&quot; alt=&quot;tun-isnot-available&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TUN is not available&lt;/strong&gt;&lt;br /&gt;
-Certain VPS servers do not have TUN enabled by default. Create the follow script and run it on startup to fix this issue.&lt;/p&gt;
&lt;p&gt;-Create /usr/sbin/enabletun.sh&lt;br /&gt;
&lt;code&gt;#!/bin/bash&lt;/code&gt;
&lt;code&gt;mkdir /dev/net&lt;/code&gt;
&lt;code&gt;mknod /dev/net/tun c 10 200&lt;/code&gt;
&lt;code&gt;chmod 0666 /dev/net/tun&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;-Mark /usr/sbin/enabletun.sh executable&lt;br /&gt;
&lt;code&gt;chmod +x /usr/sbin/enabletun.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;-Run this script on startup by adding the following to /etc/rc.local&lt;br /&gt;
&lt;code&gt;/usr/sbin/tunscript.sh || exit 1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;exit 0&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Client Setup&lt;/h2&gt;
&lt;h3&gt;Linux Client Setup&lt;/h3&gt;
&lt;p&gt;Install OpenVPN for Network Manager&lt;br /&gt;
&lt;strong&gt;Debian-Based&lt;/strong&gt; &lt;code&gt;sudo apt install network-manager-openvpn&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Arch-Based&lt;/strong&gt; &lt;code&gt;sudo pacman -S networkmanager-openvpn&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Gnome-Based DEs&lt;/strong&gt; &lt;code&gt;sudo apt install network-manager-openvpn-gnome&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Copy OVPN file to /etc/openvpn/client/client.ovpn&lt;br /&gt;
Test client configuration in Terminal:&lt;br /&gt;
&lt;code&gt;sudo openvpn /etc/openvpn/client/client.ovpn&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/import-vpn.webp&quot; alt=&quot;import-vpn&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Network manager Import VPN Connection: client.ovpn&lt;br /&gt;
Note: &lt;em&gt;Certificates stored in ~/.local/share/networkmanagement/certificates&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Connect via your Network Manager&lt;/p&gt;
&lt;h3&gt;Linux Client Troubleshooting&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/tls-issue.webp&quot; alt=&quot;tls-issue&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Verify TLS key file is enabled and created. This is a known issue on KDE desktops. If it isn’t make sure to create it using the last TLS portion of the ovpn file.&lt;/p&gt;
&lt;h3&gt;Windows Client Setup&lt;/h3&gt;
&lt;p&gt;Download OpenVPN client for your Windows @ &lt;a href=&quot;https://openvpn.net/community-downloads/&quot;&gt;https://openvpn.net/community-downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/clientovpn-winscp.webp?fit=1024%2C451&amp;amp;ssl=1&quot; alt=&quot;clientovpn-winscp&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Copy your client.ovpn from the server (WinSCP to connect and copy) and place the file in C:\Program Files\OpenVPN\config&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/openvpnconnect.webp&quot; alt=&quot;openvpnconnect&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Run the program and right click the icon in the tray and connect&lt;/p&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/CBJMl9MILbg&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded></item><item><title>The Ultimate SSH Guide</title><link>https://christitus.com/ssh-guide/</link><guid isPermaLink="true">https://christitus.com/ssh-guide/</guid><description>&lt;p&gt;This is an SSH guide to help you set up, configure, connect, and transfer files using SSH. &lt;/p&gt;
&lt;h2&gt;Setup SSH&lt;/h2&gt;
&lt;h2&gt;Install SSH on your system&lt;/h2&gt;
&lt;h3&gt;Debian-Based&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo apt install openssh-server -y&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;CentOS/Fedora&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo yum -y install openssh-server&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Arch&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo pacman -S openssh&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Run SSH server on startup&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl start ssh
sudo systemctl enable ssh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;**Note: sshd instead of ssh for arch&lt;/p&gt;
&lt;h2&gt;Configure SSH&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Make sure ufw isn’t blocking ssh and enable it for passthrough.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw allow ssh
sudo ufw limit ssh
sudo ufw enable  
sudo ufw status
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Options for /etc/ssh/sshd_config&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;PasswordAuthentication yes/no&lt;/code&gt;
&lt;em&gt;* No should be used when facing the internet and key authentication must be used for security&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AllowTcpForwarding yes&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;X11Forwarding yes&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;* This is used to forward GUI programs (Xming required for Windows)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AllowUsers Fred Wilma&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;DenyUsers Dino Pebbles&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;* Block and Allow certain users&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Security of a SSH Server&lt;/h3&gt;
&lt;p&gt;It should be noted that if you open up your firewall and port forward port 22 on a standard SSH server install… you will probably be hacked. This is extremely reckless and should never be done. I highly recommend doing &lt;strong&gt;ALL&lt;/strong&gt; of the following measures if opening up SSH to the outside world.&lt;/p&gt;
&lt;p&gt;First, obscure the SSH port by changing it in the sshd_config file&lt;br /&gt;
&lt;code&gt;# Change Default port 22 to 2222&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Port 2222&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Second, disable Password Authentication and use ssh keys instead. This is a complex procedure and recommend using the following script to optimize the encryption and setup process.&lt;br /&gt;
&lt;a href=&quot;https://github.com/angristan/openvpn-install&quot;&gt;https://github.com/angristan/openvpn-install&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Third, verify you are using tar-pitting or rate limiting on your SSH port. This will prevent brute force attacks&lt;br /&gt;
&lt;code&gt;ufw limit proto tcp from any port 2222&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*Note this can also be done via iptables and it needs to be modified to your SSH port.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Connect via SSH&lt;/h2&gt;
&lt;h2&gt;Linux terminal&lt;/h2&gt;
&lt;p&gt;ssh username@serverip&lt;/p&gt;
&lt;h2&gt;Windows&lt;/h2&gt;
&lt;p&gt;PuTTY &lt;a href=&quot;https://putty.org/&quot;&gt;https://putty.org/&lt;/a&gt; (ssh program)&lt;/p&gt;
&lt;p&gt;Xming required for X11 forwarding &lt;a href=&quot;https://sourceforge.net/projects/xming/&quot;&gt;https://sourceforge.net/projects/xming/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Verify X11 Forwarding in PuTTY options&lt;/p&gt;
&lt;h2&gt;Video Walkthrough SSH Access&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/w_OwmqjAcn0&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;h2&gt;Transfer Files via SSH&lt;/h2&gt;
&lt;p&gt;The difference between SFTP and SCP by default are one is interactive and the other isn’t. SCP is faster, but can’t be resumed where SFTP and slower and can be.&lt;/p&gt;
&lt;h2&gt;Linux&lt;/h2&gt;
&lt;p&gt;Use the native file browser, in the location bar type the following:&lt;br /&gt;
&lt;code&gt;sftp://192.168.1.10&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Using the terminal&lt;/h3&gt;
&lt;p&gt;Syntax: &lt;strong&gt;&lt;code&gt;scp&lt;/code&gt;&lt;/strong&gt; &lt;code&gt;source destination&lt;/code&gt;&lt;br /&gt;
Remote PC Syntax: &lt;code&gt;username@serverip:/path/to/file&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Example: &lt;code&gt;scp localfile username@serverip:/remote/server/path&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Windows File Transfer&lt;/h2&gt;
&lt;p&gt;WinSCP is my recommended transfer tool.
&lt;a href=&quot;https://winscp.net/eng/index.php&quot;&gt;https://winscp.net/eng/index.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;pscp.exe for command line. &lt;a href=&quot;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html&quot;&gt;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Wed, 18 Sep 2019 21:55:20 GMT</pubDate><content:encoded>&lt;p&gt;This is an SSH guide to help you set up, configure, connect, and transfer files using SSH. &lt;/p&gt;
&lt;h2&gt;Setup SSH&lt;/h2&gt;
&lt;h2&gt;Install SSH on your system&lt;/h2&gt;
&lt;h3&gt;Debian-Based&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo apt install openssh-server -y&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;CentOS/Fedora&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo yum -y install openssh-server&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Arch&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo pacman -S openssh&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Run SSH server on startup&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl start ssh
sudo systemctl enable ssh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;**Note: sshd instead of ssh for arch&lt;/p&gt;
&lt;h2&gt;Configure SSH&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Make sure ufw isn’t blocking ssh and enable it for passthrough.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw allow ssh
sudo ufw limit ssh
sudo ufw enable  
sudo ufw status
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Options for /etc/ssh/sshd_config&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;PasswordAuthentication yes/no&lt;/code&gt;
&lt;em&gt;* No should be used when facing the internet and key authentication must be used for security&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AllowTcpForwarding yes&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;X11Forwarding yes&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;* This is used to forward GUI programs (Xming required for Windows)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AllowUsers Fred Wilma&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;DenyUsers Dino Pebbles&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;* Block and Allow certain users&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Security of a SSH Server&lt;/h3&gt;
&lt;p&gt;It should be noted that if you open up your firewall and port forward port 22 on a standard SSH server install… you will probably be hacked. This is extremely reckless and should never be done. I highly recommend doing &lt;strong&gt;ALL&lt;/strong&gt; of the following measures if opening up SSH to the outside world.&lt;/p&gt;
&lt;p&gt;First, obscure the SSH port by changing it in the sshd_config file&lt;br /&gt;
&lt;code&gt;# Change Default port 22 to 2222&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Port 2222&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Second, disable Password Authentication and use ssh keys instead. This is a complex procedure and recommend using the following script to optimize the encryption and setup process.&lt;br /&gt;
&lt;a href=&quot;https://github.com/angristan/openvpn-install&quot;&gt;https://github.com/angristan/openvpn-install&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Third, verify you are using tar-pitting or rate limiting on your SSH port. This will prevent brute force attacks&lt;br /&gt;
&lt;code&gt;ufw limit proto tcp from any port 2222&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*Note this can also be done via iptables and it needs to be modified to your SSH port.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Connect via SSH&lt;/h2&gt;
&lt;h2&gt;Linux terminal&lt;/h2&gt;
&lt;p&gt;ssh username@serverip&lt;/p&gt;
&lt;h2&gt;Windows&lt;/h2&gt;
&lt;p&gt;PuTTY &lt;a href=&quot;https://putty.org/&quot;&gt;https://putty.org/&lt;/a&gt; (ssh program)&lt;/p&gt;
&lt;p&gt;Xming required for X11 forwarding &lt;a href=&quot;https://sourceforge.net/projects/xming/&quot;&gt;https://sourceforge.net/projects/xming/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Verify X11 Forwarding in PuTTY options&lt;/p&gt;
&lt;h2&gt;Video Walkthrough SSH Access&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/w_OwmqjAcn0&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;h2&gt;Transfer Files via SSH&lt;/h2&gt;
&lt;p&gt;The difference between SFTP and SCP by default are one is interactive and the other isn’t. SCP is faster, but can’t be resumed where SFTP and slower and can be.&lt;/p&gt;
&lt;h2&gt;Linux&lt;/h2&gt;
&lt;p&gt;Use the native file browser, in the location bar type the following:&lt;br /&gt;
&lt;code&gt;sftp://192.168.1.10&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Using the terminal&lt;/h3&gt;
&lt;p&gt;Syntax: &lt;strong&gt;&lt;code&gt;scp&lt;/code&gt;&lt;/strong&gt; &lt;code&gt;source destination&lt;/code&gt;&lt;br /&gt;
Remote PC Syntax: &lt;code&gt;username@serverip:/path/to/file&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Example: &lt;code&gt;scp localfile username@serverip:/remote/server/path&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Windows File Transfer&lt;/h2&gt;
&lt;p&gt;WinSCP is my recommended transfer tool.
&lt;a href=&quot;https://winscp.net/eng/index.php&quot;&gt;https://winscp.net/eng/index.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;pscp.exe for command line. &lt;a href=&quot;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html&quot;&gt;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Disable Windows Firewall Properly</title><link>https://christitus.com/disable-windows-firewall-properly/</link><guid isPermaLink="true">https://christitus.com/disable-windows-firewall-properly/</guid><description>&lt;p&gt;This walkthrough goes over how to Disable Windows Firewall while not affecting other programs that rely on this service. It’s important that you &lt;strong&gt;DO NOT&lt;/strong&gt;disable the service, due to the fact it can cause issues with Microsoft Office and other products.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/10/windows-firewall.webp&quot; alt=&quot;win-firewall&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Steps to bypass firewall&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Launch Windows Defender Firewall with Advanced Security (Start -&amp;gt; Run -&amp;gt; wf.msc)&lt;/li&gt;
&lt;li&gt;Click Inbound Rules&lt;/li&gt;
&lt;li&gt;Select “New Rule”&lt;/li&gt;
&lt;li&gt;Custom rule&lt;/li&gt;
&lt;li&gt;All Programs&lt;/li&gt;
&lt;li&gt;Leave Any and All Ports&lt;/li&gt;
&lt;li&gt;Any IP Address for both&lt;/li&gt;
&lt;li&gt;Allow the connection&lt;/li&gt;
&lt;li&gt;Check Domain, Private, and Public&lt;/li&gt;
&lt;li&gt;Name “Allow All”&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Video Guide&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/fvFWFrN-MZQ&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;h3&gt;Finishing Up&lt;/h3&gt;
&lt;p&gt;By doing this you allow all traffic inbound to this computer, consequently, all outbound traffic is already allowed by default. Therefore, certain programs and services that depend on windows firewall can function properly. In conclusion, this is a far superior way of disabling the built-in firewall in windows without affecting other programs.&lt;/p&gt;
</description><pubDate>Sat, 06 Oct 2018 17:20:22 GMT</pubDate><content:encoded>&lt;p&gt;This walkthrough goes over how to Disable Windows Firewall while not affecting other programs that rely on this service. It’s important that you &lt;strong&gt;DO NOT&lt;/strong&gt;disable the service, due to the fact it can cause issues with Microsoft Office and other products.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/10/windows-firewall.webp&quot; alt=&quot;win-firewall&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Steps to bypass firewall&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Launch Windows Defender Firewall with Advanced Security (Start -&amp;gt; Run -&amp;gt; wf.msc)&lt;/li&gt;
&lt;li&gt;Click Inbound Rules&lt;/li&gt;
&lt;li&gt;Select “New Rule”&lt;/li&gt;
&lt;li&gt;Custom rule&lt;/li&gt;
&lt;li&gt;All Programs&lt;/li&gt;
&lt;li&gt;Leave Any and All Ports&lt;/li&gt;
&lt;li&gt;Any IP Address for both&lt;/li&gt;
&lt;li&gt;Allow the connection&lt;/li&gt;
&lt;li&gt;Check Domain, Private, and Public&lt;/li&gt;
&lt;li&gt;Name “Allow All”&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Video Guide&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/fvFWFrN-MZQ&quot; title=&quot;YouTube video player&quot; loading=&quot;lazy&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;  
&lt;h3&gt;Finishing Up&lt;/h3&gt;
&lt;p&gt;By doing this you allow all traffic inbound to this computer, consequently, all outbound traffic is already allowed by default. Therefore, certain programs and services that depend on windows firewall can function properly. In conclusion, this is a far superior way of disabling the built-in firewall in windows without affecting other programs.&lt;/p&gt;
</content:encoded></item><item><title>Moving Unifi Access Point to another Unifi Controller</title><link>https://christitus.com/moving-unifi-access-point/</link><guid isPermaLink="true">https://christitus.com/moving-unifi-access-point/</guid><description>&lt;p&gt;This walkthrough goes over moving Unifi access point to another Unifi controller. To remove APs from a Unifi Controller you need to reset the APs and then either discover them or manually SSH set-inform the devices.&lt;/p&gt;
&lt;h2&gt;First Reset the AP&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use Terminal or SSH (Either in existing Controller -&amp;gt; Manage Device -&amp;gt; Open Terminal or Putty)
&lt;ul&gt;
&lt;li&gt;Type: &lt;code&gt;syswrapper.sh restore-default&lt;/code&gt;&lt;br /&gt;
OR&lt;/li&gt;
&lt;li&gt;Reset the Unifi AP by the old paperclip method if you can’t putty or use existing controller&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/06/reset-unifi.webp&quot; alt=&quot;unifi reset&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Second discover device or manually set-inform&lt;/h3&gt;
&lt;p&gt;On the new controller try to discover the now factory reset APs and with any luck they will show up. However in big environments I typically can never get them to be discovered so I will show you the manual method.&lt;/p&gt;
&lt;p&gt;Find the IP of the AP (You can easily grab this by looking at old controller OR using advanced IP Scanner. Note: match MAC address if scanning)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Putty into the AP (Launch Putty type IP, and Username/Password is factory ubnt/ubnt)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;set-inform http://ip-of-controller:8080/inform&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adopt AP in new controller webpage&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Type AGAIN: &lt;code&gt;set-inform http://ip-of-controller:8080/inform&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/06/unifi-set-inform.webp&quot; alt=&quot;unifi set-inform&quot; /&gt;&lt;/p&gt;
&lt;p&gt;We are now done moving Unifi access point on to the new Controller, and as a result, will be in the device list. From here you will be able to manage it, upgrade firmware, and do all the configuration options needed.&lt;/p&gt;
</description><pubDate>Thu, 21 Jun 2018 15:57:35 GMT</pubDate><content:encoded>&lt;p&gt;This walkthrough goes over moving Unifi access point to another Unifi controller. To remove APs from a Unifi Controller you need to reset the APs and then either discover them or manually SSH set-inform the devices.&lt;/p&gt;
&lt;h2&gt;First Reset the AP&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use Terminal or SSH (Either in existing Controller -&amp;gt; Manage Device -&amp;gt; Open Terminal or Putty)
&lt;ul&gt;
&lt;li&gt;Type: &lt;code&gt;syswrapper.sh restore-default&lt;/code&gt;&lt;br /&gt;
OR&lt;/li&gt;
&lt;li&gt;Reset the Unifi AP by the old paperclip method if you can’t putty or use existing controller&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/06/reset-unifi.webp&quot; alt=&quot;unifi reset&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Second discover device or manually set-inform&lt;/h3&gt;
&lt;p&gt;On the new controller try to discover the now factory reset APs and with any luck they will show up. However in big environments I typically can never get them to be discovered so I will show you the manual method.&lt;/p&gt;
&lt;p&gt;Find the IP of the AP (You can easily grab this by looking at old controller OR using advanced IP Scanner. Note: match MAC address if scanning)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Putty into the AP (Launch Putty type IP, and Username/Password is factory ubnt/ubnt)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;set-inform http://ip-of-controller:8080/inform&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adopt AP in new controller webpage&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Type AGAIN: &lt;code&gt;set-inform http://ip-of-controller:8080/inform&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/06/unifi-set-inform.webp&quot; alt=&quot;unifi set-inform&quot; /&gt;&lt;/p&gt;
&lt;p&gt;We are now done moving Unifi access point on to the new Controller, and as a result, will be in the device list. From here you will be able to manage it, upgrade firmware, and do all the configuration options needed.&lt;/p&gt;
</content:encoded></item><item><title>How to choose DNS Server by benchmarking them</title><link>https://christitus.com/benchmark-dns-server/</link><guid isPermaLink="true">https://christitus.com/benchmark-dns-server/</guid><description>&lt;p&gt;By default, your DNS Server is set to your ISP’s DNS and this SLOWS down your internet, due to the fact, they are poorly managed and have horrid performance. This shows you how to choose the fastest DNS Server, but results will vary depending on the location. Running this benchmark will tell you which ones are the best to use.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Finding the Fastest&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Go to &lt;a href=&quot;https://www.grc.com/dns/benchmark.htm&quot;&gt;https://www.grc.com/dns/benchmark.htm&lt;/a&gt; and download the benchmark tool. From the list make sure you put in all your DNS Servers you want to test. Level3, Google, OpenDNS, and the usual suspects are already in there. I also recommend right-clicking and removing the dead or stale DNS Server. I tossed in free DNS Filtering servers like Norton ConnectSafe and Comodo Secure DNS as well. These performed the worst in speed tests and I recommend not using them in a business environment. If you need DNS filtering and have the budget using OpenDNS (Cisco Umbrella) is going to be your best bet.&lt;/p&gt;
&lt;p&gt;Here are my results, Enjoy!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2017/03/dnsresults.webp&quot; alt=&quot;DNS Results&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Red = Cached Time, Green = Uncached Time, and Blue = dotcom Time&lt;/li&gt;
&lt;li&gt;Grey Dots = Filters bad domain names by default, Green Dots = No filtering&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Thu, 09 Mar 2017 17:35:18 GMT</pubDate><content:encoded>&lt;p&gt;By default, your DNS Server is set to your ISP’s DNS and this SLOWS down your internet, due to the fact, they are poorly managed and have horrid performance. This shows you how to choose the fastest DNS Server, but results will vary depending on the location. Running this benchmark will tell you which ones are the best to use.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Finding the Fastest&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Go to &lt;a href=&quot;https://www.grc.com/dns/benchmark.htm&quot;&gt;https://www.grc.com/dns/benchmark.htm&lt;/a&gt; and download the benchmark tool. From the list make sure you put in all your DNS Servers you want to test. Level3, Google, OpenDNS, and the usual suspects are already in there. I also recommend right-clicking and removing the dead or stale DNS Server. I tossed in free DNS Filtering servers like Norton ConnectSafe and Comodo Secure DNS as well. These performed the worst in speed tests and I recommend not using them in a business environment. If you need DNS filtering and have the budget using OpenDNS (Cisco Umbrella) is going to be your best bet.&lt;/p&gt;
&lt;p&gt;Here are my results, Enjoy!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2017/03/dnsresults.webp&quot; alt=&quot;DNS Results&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Red = Cached Time, Green = Uncached Time, and Blue = dotcom Time&lt;/li&gt;
&lt;li&gt;Grey Dots = Filters bad domain names by default, Green Dots = No filtering&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Updating LDAP Credentials for Netscaler VPX 1000</title><link>https://christitus.com/update-netscaler-vpx/</link><guid isPermaLink="true">https://christitus.com/update-netscaler-vpx/</guid><description>&lt;p&gt;This article shows you how to update LDAP credentials on the Netscaler VPX 1000. It goes over logging in, editing virtual server, and applying settings.&lt;/p&gt;
&lt;h2&gt;Login to the NetScaler Device&lt;/h2&gt;
&lt;p&gt;Default User: nsroot Pass: nsroot (or password you changed it to)&lt;/p&gt;
&lt;h3&gt;Go to Netscaler gateway virtual server controlling your logins&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2016/11/netscaler1.webp&quot; alt=&quot;Netscaler1&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Click on LDAP Policy and select Edit Server&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2016/11/netscaler2.webp&quot; alt=&quot;Netscaler2&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Update the credentials under connection settings, and also test the new settings&lt;/h3&gt;
</description><pubDate>Sat, 12 Nov 2016 15:13:18 GMT</pubDate><content:encoded>&lt;p&gt;This article shows you how to update LDAP credentials on the Netscaler VPX 1000. It goes over logging in, editing virtual server, and applying settings.&lt;/p&gt;
&lt;h2&gt;Login to the NetScaler Device&lt;/h2&gt;
&lt;p&gt;Default User: nsroot Pass: nsroot (or password you changed it to)&lt;/p&gt;
&lt;h3&gt;Go to Netscaler gateway virtual server controlling your logins&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2016/11/netscaler1.webp&quot; alt=&quot;Netscaler1&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Click on LDAP Policy and select Edit Server&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2016/11/netscaler2.webp&quot; alt=&quot;Netscaler2&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Update the credentials under connection settings, and also test the new settings&lt;/h3&gt;
</content:encoded></item><item><title>Encore Bandit II/III Connection Instructions</title><link>https://christitus.com/encore-bandit-connection/</link><guid isPermaLink="true">https://christitus.com/encore-bandit-connection/</guid><description>&lt;p&gt;These steps will show you how to connect to the encore bandit devices. I recently configured both a bandit II and a bandit III device for using a VPN over satellite. The devices are configured through a 9-pin serial port they call the “Supervisory Port”. I use a basic serial to USB adapter and putty to connect. All the white papers for this device are good, but the setup and login are not as clear as you would think, that said, below are the following steps I used to connect. Refer to Encore&apos;s &lt;a href=&quot;https://www.encorenetworks.com/wp-content/uploads/2021/04/cfg-main-1.pdf&quot;&gt;BANDIT II/III Expanded Configuration Guide&lt;/a&gt; for the complete device documentation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Steps for connection&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hook Serial Adapter to your PC &lt;em&gt;Please Note the COM port&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Run Putty and select Serial for Connection&lt;/li&gt;
&lt;li&gt;Type default username and password (encore!1) for both&lt;/li&gt;
&lt;li&gt;Configure Device according to Quick Setup&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Thu, 17 Mar 2016 14:52:31 GMT</pubDate><content:encoded>&lt;p&gt;These steps will show you how to connect to the encore bandit devices. I recently configured both a bandit II and a bandit III device for using a VPN over satellite. The devices are configured through a 9-pin serial port they call the “Supervisory Port”. I use a basic serial to USB adapter and putty to connect. All the white papers for this device are good, but the setup and login are not as clear as you would think, that said, below are the following steps I used to connect. Refer to Encore&apos;s &lt;a href=&quot;https://www.encorenetworks.com/wp-content/uploads/2021/04/cfg-main-1.pdf&quot;&gt;BANDIT II/III Expanded Configuration Guide&lt;/a&gt; for the complete device documentation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Steps for connection&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hook Serial Adapter to your PC &lt;em&gt;Please Note the COM port&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Run Putty and select Serial for Connection&lt;/li&gt;
&lt;li&gt;Type default username and password (encore!1) for both&lt;/li&gt;
&lt;li&gt;Configure Device according to Quick Setup&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Ideas</title><link>https://christitus.com/ideas/</link><guid isPermaLink="true">https://christitus.com/ideas/</guid><description>&lt;p&gt;Current Ideas for Videos and Articles&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] ZFS, couple that with Sanoid and Syncoid&lt;/li&gt;
&lt;li&gt;[ ] Tiling Window Manager for Windows - &lt;a href=&quot;https://github.com/LGUG2Z/komorebi&quot;&gt;https://github.com/LGUG2Z/komorebi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] TrueNAS Scale&lt;/li&gt;
&lt;li&gt;[ ] Hyprland Window Manager for Wayland - &lt;a href=&quot;https://github.com/hyprwm/Hyprland&quot;&gt;https://github.com/hyprwm/Hyprland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] Setting Up Linux Gaming&lt;/li&gt;
&lt;li&gt;[ ] Live Stream Radio Browser Program (Strimio)&lt;/li&gt;
&lt;li&gt;[ ] DSTask - &lt;a href=&quot;https://github.com/naggie/dstask&quot;&gt;https://github.com/naggie/dstask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://Portainer.io&quot;&gt;Portainer.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] PiKVM (&lt;a href=&quot;https://pikvm.org/&quot;&gt;https://pikvm.org/&lt;/a&gt;)&lt;a href=&quot;https://pikvm.org/&quot;&gt;https://pikvm.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] KVM / QEMU full tutorial&lt;/li&gt;
&lt;li&gt;[ ] Zerotier - BestVPN&lt;/li&gt;
&lt;li&gt;[ ] Darling - MacOS Emulation &lt;a href=&quot;https://www.darlinghq.org/&quot;&gt;https://www.darlinghq.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] plex server setup linux&lt;/li&gt;
&lt;li&gt;[ ] Enable GPO in Win 10 Home &lt;a href=&quot;https://www.itechtics.com/enable-gpedit-windows-10-home/#Method_1_Enable_Group_Policy_Editor_in_Windows_10_Home_using_GPEdit_Installer&quot;&gt;https://www.itechtics.com/enable-gpedit-windows-10-home/#Method_1_Enable_Group_Policy_Editor_in_Windows_10_Home_using_GPEdit_Installer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] automount drives systemd&lt;/li&gt;
&lt;li&gt;[ ] rEFInd Bootloader&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://snapdrop.net/&quot;&gt;snapdrop.net&lt;/a&gt; - Share files between devices&lt;/li&gt;
&lt;li&gt;[ ] WinGet and Windows Terminal&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;https://mycroft.ai&quot;&gt;https://mycroft.ai&lt;/a&gt; - Open Source Home Assistant&lt;/li&gt;
&lt;li&gt;[ ] Samba Advanced Video&lt;/li&gt;
&lt;li&gt;[ ] Github config save&lt;/li&gt;
&lt;li&gt;[ ] systemd-services on startup cleanup&lt;/li&gt;
&lt;li&gt;[ ] debtap install deb packages on arch - rpm2cpio - alien&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;https://github.com/dreamer/luxtorpeda/&quot;&gt;https://github.com/dreamer/luxtorpeda/&lt;/a&gt; - Gaming native&lt;/li&gt;
&lt;li&gt;[ ] OpenHABian&lt;/li&gt;
&lt;li&gt;[ ] Startup Programs and managing them&lt;/li&gt;
&lt;li&gt;[ ] Live USB Environments&lt;/li&gt;
&lt;li&gt;[ ] jellyfin&lt;/li&gt;
&lt;li&gt;[ ] Adding Android Libraries / Davik Virtualization&lt;/li&gt;
&lt;li&gt;[ ] Quibble Windows Bootloader - &lt;a href=&quot;https://github.com/maharmstone/quibble&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/maharmstone/quibble&quot;&gt;https://github.com/maharmstone/quibble&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] Kodachi&lt;/li&gt;
&lt;li&gt;[ ] Linux Users and Groups&lt;/li&gt;
&lt;li&gt;[ ] Grafana Zabbix Monitoring&lt;/li&gt;
&lt;li&gt;[ ] Alienvault OSSIM&lt;/li&gt;
&lt;li&gt;[ ] resize filesystem&lt;/li&gt;
&lt;li&gt;[ ] URXVT&lt;/li&gt;
&lt;li&gt;[ ] Ranger&lt;/li&gt;
&lt;li&gt;[ ] Vagrant&lt;/li&gt;
&lt;li&gt;[ ] Arch CHROOT Repair&lt;/li&gt;
&lt;li&gt;[ ] alpine linux - The 100MB Linux&lt;/li&gt;
&lt;li&gt;[ ] Kubernetes Initial Setup&lt;/li&gt;
&lt;li&gt;[ ] DEX Linux&lt;/li&gt;
&lt;li&gt;[ ] Making a workstation to load images on PCs - FOG Project&lt;/li&gt;
&lt;li&gt;[ ] Linux Screen Command&lt;/li&gt;
&lt;li&gt;[ ] Firejail&lt;/li&gt;
&lt;li&gt;[ ] Chroot from USB drive&lt;/li&gt;
&lt;li&gt;[ ] Debloat Linux&lt;/li&gt;
&lt;li&gt;[ ] Linux Firewall - UFW&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://privacytools.io/&quot;&gt;Privacytools.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] Add SSD or Hard Drive to VM&lt;/li&gt;
&lt;li&gt;[ ] pulse effects and pulse equalizer&lt;/li&gt;
&lt;li&gt;[ ] PxE and TFTP Servers&lt;/li&gt;
&lt;li&gt;[ ] Update MOTD for on Servers&lt;/li&gt;
&lt;li&gt;[ ] Using the grep command&lt;/li&gt;
&lt;li&gt;[ ] LAMP Stack on Ubuntu&lt;/li&gt;
&lt;li&gt;[ ] SMB4k&lt;/li&gt;
&lt;li&gt;[ ] Docker&lt;/li&gt;
&lt;li&gt;[ ] Redhat Line of Products (Insights / Ansible / OpenShift)&lt;/li&gt;
&lt;li&gt;[ ] Snaps and Flatpacks&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Wed, 14 Nov 2012 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Current Ideas for Videos and Articles&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] ZFS, couple that with Sanoid and Syncoid&lt;/li&gt;
&lt;li&gt;[ ] Tiling Window Manager for Windows - &lt;a href=&quot;https://github.com/LGUG2Z/komorebi&quot;&gt;https://github.com/LGUG2Z/komorebi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] TrueNAS Scale&lt;/li&gt;
&lt;li&gt;[ ] Hyprland Window Manager for Wayland - &lt;a href=&quot;https://github.com/hyprwm/Hyprland&quot;&gt;https://github.com/hyprwm/Hyprland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] Setting Up Linux Gaming&lt;/li&gt;
&lt;li&gt;[ ] Live Stream Radio Browser Program (Strimio)&lt;/li&gt;
&lt;li&gt;[ ] DSTask - &lt;a href=&quot;https://github.com/naggie/dstask&quot;&gt;https://github.com/naggie/dstask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://Portainer.io&quot;&gt;Portainer.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] PiKVM (&lt;a href=&quot;https://pikvm.org/&quot;&gt;https://pikvm.org/&lt;/a&gt;)&lt;a href=&quot;https://pikvm.org/&quot;&gt;https://pikvm.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] KVM / QEMU full tutorial&lt;/li&gt;
&lt;li&gt;[ ] Zerotier - BestVPN&lt;/li&gt;
&lt;li&gt;[ ] Darling - MacOS Emulation &lt;a href=&quot;https://www.darlinghq.org/&quot;&gt;https://www.darlinghq.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] plex server setup linux&lt;/li&gt;
&lt;li&gt;[ ] Enable GPO in Win 10 Home &lt;a href=&quot;https://www.itechtics.com/enable-gpedit-windows-10-home/#Method_1_Enable_Group_Policy_Editor_in_Windows_10_Home_using_GPEdit_Installer&quot;&gt;https://www.itechtics.com/enable-gpedit-windows-10-home/#Method_1_Enable_Group_Policy_Editor_in_Windows_10_Home_using_GPEdit_Installer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] automount drives systemd&lt;/li&gt;
&lt;li&gt;[ ] rEFInd Bootloader&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://snapdrop.net/&quot;&gt;snapdrop.net&lt;/a&gt; - Share files between devices&lt;/li&gt;
&lt;li&gt;[ ] WinGet and Windows Terminal&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;https://mycroft.ai&quot;&gt;https://mycroft.ai&lt;/a&gt; - Open Source Home Assistant&lt;/li&gt;
&lt;li&gt;[ ] Samba Advanced Video&lt;/li&gt;
&lt;li&gt;[ ] Github config save&lt;/li&gt;
&lt;li&gt;[ ] systemd-services on startup cleanup&lt;/li&gt;
&lt;li&gt;[ ] debtap install deb packages on arch - rpm2cpio - alien&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;https://github.com/dreamer/luxtorpeda/&quot;&gt;https://github.com/dreamer/luxtorpeda/&lt;/a&gt; - Gaming native&lt;/li&gt;
&lt;li&gt;[ ] OpenHABian&lt;/li&gt;
&lt;li&gt;[ ] Startup Programs and managing them&lt;/li&gt;
&lt;li&gt;[ ] Live USB Environments&lt;/li&gt;
&lt;li&gt;[ ] jellyfin&lt;/li&gt;
&lt;li&gt;[ ] Adding Android Libraries / Davik Virtualization&lt;/li&gt;
&lt;li&gt;[ ] Quibble Windows Bootloader - &lt;a href=&quot;https://github.com/maharmstone/quibble&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/maharmstone/quibble&quot;&gt;https://github.com/maharmstone/quibble&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] Kodachi&lt;/li&gt;
&lt;li&gt;[ ] Linux Users and Groups&lt;/li&gt;
&lt;li&gt;[ ] Grafana Zabbix Monitoring&lt;/li&gt;
&lt;li&gt;[ ] Alienvault OSSIM&lt;/li&gt;
&lt;li&gt;[ ] resize filesystem&lt;/li&gt;
&lt;li&gt;[ ] URXVT&lt;/li&gt;
&lt;li&gt;[ ] Ranger&lt;/li&gt;
&lt;li&gt;[ ] Vagrant&lt;/li&gt;
&lt;li&gt;[ ] Arch CHROOT Repair&lt;/li&gt;
&lt;li&gt;[ ] alpine linux - The 100MB Linux&lt;/li&gt;
&lt;li&gt;[ ] Kubernetes Initial Setup&lt;/li&gt;
&lt;li&gt;[ ] DEX Linux&lt;/li&gt;
&lt;li&gt;[ ] Making a workstation to load images on PCs - FOG Project&lt;/li&gt;
&lt;li&gt;[ ] Linux Screen Command&lt;/li&gt;
&lt;li&gt;[ ] Firejail&lt;/li&gt;
&lt;li&gt;[ ] Chroot from USB drive&lt;/li&gt;
&lt;li&gt;[ ] Debloat Linux&lt;/li&gt;
&lt;li&gt;[ ] Linux Firewall - UFW&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://privacytools.io/&quot;&gt;Privacytools.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] Add SSD or Hard Drive to VM&lt;/li&gt;
&lt;li&gt;[ ] pulse effects and pulse equalizer&lt;/li&gt;
&lt;li&gt;[ ] PxE and TFTP Servers&lt;/li&gt;
&lt;li&gt;[ ] Update MOTD for on Servers&lt;/li&gt;
&lt;li&gt;[ ] Using the grep command&lt;/li&gt;
&lt;li&gt;[ ] LAMP Stack on Ubuntu&lt;/li&gt;
&lt;li&gt;[ ] SMB4k&lt;/li&gt;
&lt;li&gt;[ ] Docker&lt;/li&gt;
&lt;li&gt;[ ] Redhat Line of Products (Insights / Ansible / OpenShift)&lt;/li&gt;
&lt;li&gt;[ ] Snaps and Flatpacks&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item></channel></rss>