<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Jaymin Patel</title><link>https://jayminpatel.elemprin.com/posts/</link><description>Recent content in Posts on Jaymin Patel</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 02 Jun 2026 12:00:00 +0530</lastBuildDate><atom:link href="https://jayminpatel.elemprin.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>5 Lessons from Building SD-WAN Products</title><link>https://jayminpatel.elemprin.com/posts/sdwan-lessons/</link><pubDate>Tue, 02 Jun 2026 12:00:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/sdwan-lessons/</guid><description>&lt;p>After 18 years building networking products -- from UTM firewalls at Cyberoam to wireless controllers at Sophos, and now SD-WAN solutions at Elemprin -- here are five lessons that shaped how I think about product development.&lt;/p>
&lt;h2 id="1-the-kernel-is-your-foundation">
 1. The Kernel Is Your Foundation
 &lt;a class="heading-link" href="#1-the-kernel-is-your-foundation">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>At Red Piranha, we upgraded the Linux kernel from 3.10 to a modern version. This wasn't just a version bump -- it required porting years of custom patches, building a unified config across platforms, and repackaging everything as RPMs. The lesson: invest in your kernel strategy early. A clean, maintainable kernel tree pays dividends every release cycle.&lt;/p></description></item><item><title>High Availability on OpenWrt with Keepalived, UCI, and LuCI</title><link>https://jayminpatel.elemprin.com/posts/2022-09-08-keepalived-uci-luci/</link><pubDate>Thu, 08 Sep 2022 00:00:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2022-09-08-keepalived-uci-luci/</guid><description>&lt;p>When a router goes down, the network goes down. For homes, it's an annoyance. For businesses, it's lost revenue. Keepalived solves this by implementing VRRP (Virtual Router Redundancy Protocol) -- two or more routers share a virtual IP. If the master fails, the backup takes over in seconds.&lt;/p>
&lt;p>I contributed Keepalived integration to OpenWrt across three areas: the core package improvements, a UCI configuration layer, and a LuCI web interface.&lt;/p></description></item><item><title>IPSec VPN on OpenWrt: From Config Files to UCI</title><link>https://jayminpatel.elemprin.com/posts/2022-08-22-libreswan-ipsec-uci/</link><pubDate>Mon, 22 Aug 2022 00:00:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2022-08-22-libreswan-ipsec-uci/</guid><description>&lt;p>Setting up an IPSec VPN on OpenWrt used to mean editing &lt;code>/etc/ipsec.conf&lt;/code> by hand -- tracking down the right parameters for your topology, debugging misconfigured secrets, and restarting the service after every change. For site-to-site tunnels between branch offices, or road-warrior access for remote employees, the manual approach worked but didn't scale.&lt;/p>
&lt;p>Libreswan, the IPSec implementation used in OpenWrt, is a battle-tested VPN stack. But until now, it lacked the configuration layer that makes OpenWrt's ecosystem so powerful: UCI (Unified Configuration Interface). With UCI support, Libreswan joins the rest of OpenWrt's services -- configurable through a consistent interface, scriptable for automation, and manageable at scale.&lt;/p></description></item><item><title>Real-Time Network Monitoring with Apinger on OpenWrt</title><link>https://jayminpatel.elemprin.com/posts/2022-07-06-apinger-uci-procd/</link><pubDate>Wed, 06 Jul 2022 00:00:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2022-07-06-apinger-uci-procd/</guid><description>&lt;p>When your network link goes down, every second counts. Whether you're running a home office with a cable modem and cellular backup, or managing a multi-WAN enterprise router, you need to know the moment a connection fails -- and you need the system to respond automatically.&lt;/p>
&lt;p>Apinger gives you that capability. It's a lightweight alive-monitoring daemon that pings multiple targets across different interfaces and triggers configurable alarm actions when links degrade or fail. With the new UCI and LuCI integration, setting it up takes minutes.&lt;/p></description></item><item><title>Persistent SSH Tunnels with Autossh and UCI on OpenWrt</title><link>https://jayminpatel.elemprin.com/posts/2022-07-04-autossh-uci-procd/</link><pubDate>Mon, 04 Jul 2022 00:00:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2022-07-04-autossh-uci-procd/</guid><description>&lt;p>SSH tunnels are the Swiss Army knife of network connectivity. Need to access a device behind NAT? Reverse tunnel. Want to secure traffic over an untrusted network? Local forward. Managing remote routers from a central jump host? Multiple tunnels, multiple ports.&lt;/p>
&lt;p>The problem with SSH tunnels is that they die. Network blips, ISP maintenance, DHCP lease renewals -- any interruption kills the connection and the tunnel goes down. Manually SSH-ing back into a remote router to re-establish tunnels doesn't scale past a handful of devices.&lt;/p></description></item><item><title>English to Gujarati Dictionary in Linux</title><link>https://jayminpatel.elemprin.com/posts/2012-04-15-english-gujarati-dictionary/</link><pubDate>Sun, 15 Apr 2012 12:50:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2012-04-15-english-gujarati-dictionary/</guid><description>&lt;p>This post is for all Linux Desktop users from Gujarat who are looking for an English to Gujarati dictionary in Linux Desktop.&lt;/p>
&lt;p>In Linux, for English to Gujarati dictionary we open up a browser for an online database, but here we achieved it in just one tiny shell script.&lt;/p>
&lt;p>The constraint is that it requires internet connection as it uses an online database, but the good thing about this tool is that it has an updated dictionary database and it supports clipboard capture so we don't have to type a word each time.&lt;/p></description></item><item><title>Linux Boot Loader</title><link>https://jayminpatel.elemprin.com/posts/2011-08-29-linux-boot-loader/</link><pubDate>Mon, 29 Aug 2011 00:02:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2011-08-29-linux-boot-loader/</guid><description>&lt;p>In our last post we covered the basics of Linux System Initialization. Now let's take a deeper look at the Linux Boot Loader.&lt;/p>
&lt;p>There are two possible ways to configure boot loaders:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Primary Boot Loader:&lt;/strong> Install the first stage of the boot loader into the MBR, but the boot loader must be configured to pass control to any other desired OS.&lt;/li>
&lt;li>&lt;strong>Secondary Boot Loader:&lt;/strong> Install the first stage into the boot sector of any partition on disk. Another boot loader must be installed and configured in the MBR to pass control to the OS.&lt;/li>
&lt;/ul>
&lt;p>There are two basic boot loaders used in Linux distributions:&lt;/p></description></item><item><title>Linux System Initialization</title><link>https://jayminpatel.elemprin.com/posts/2011-08-27-linux-system-initialization/</link><pubDate>Sat, 27 Aug 2011 00:00:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2011-08-27-linux-system-initialization/</guid><description>&lt;p>As a technical geek and Linux user we must have a knowledge of the Linux system Initialization process. Let's first start with its basic and will take it to the depth in upcoming articles.&lt;/p>
&lt;p>When Linux system is started, there are few basic steps are involved in process.&lt;/p>
&lt;ol>
&lt;li>Hardware Initialization&lt;/li>
&lt;li>Boot Loader&lt;/li>
&lt;li>Kernel Initialization&lt;/li>
&lt;li>Init Initialization&lt;/li>
&lt;/ol>
&lt;p>Let's have a look at them one by one.&lt;/p>
&lt;h2 id="1-hardware-initialization">
 1. Hardware Initialization
 &lt;a class="heading-link" href="#1-hardware-initialization">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>Everything on system starts with BIOS.&lt;/li>
&lt;li>BIOS runs &lt;a href="http://en.wikipedia.org/wiki/Power-on_self-test" class="external-link" target="_blank" rel="noopener">POST&lt;/a> (Power On Self Test), which checks hardware.&lt;/li>
&lt;li>It then passes control to the boot device.&lt;/li>
&lt;/ul>
&lt;h2 id="2-boot-loader">
 2. Boot Loader
 &lt;a class="heading-link" href="#2-boot-loader">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>Boot loader is responsible for loading and starting OS when computer is powered on.&lt;/li>
&lt;li>It generally invoked in two ways.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>BIOS passes control to an &lt;a href="http://en.wikipedia.org/wiki/Initial_Program_Load#Initial_Program_Load" class="external-link" target="_blank" rel="noopener">IPL&lt;/a> (Initial Program Loader) installed within a drive's &lt;a href="http://en.wikipedia.org/wiki/Master_boot_record" class="external-link" target="_blank" rel="noopener">MBR&lt;/a> (Master Boot Record).&lt;/p></description></item><item><title>Allow Normal User to su Without Password</title><link>https://jayminpatel.elemprin.com/posts/2010-05-16-su-without-password/</link><pubDate>Sun, 16 May 2010 11:45:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2010-05-16-su-without-password/</guid><description>&lt;p>All Unix and Linux system will ship with different default policies. Usually these policies don't match the local policies, such as which users are allowed what kind of access to which resources and when. In addition security policies may require non-default authentication and/or logging.&lt;/p>
&lt;p>A system administrator must examine the system's configuration files and update them if necessary to enforce local policies. On modern systems PAM (Pluggable Authentication Modules) can be used to configure a wide range of security policies, including which databases to use to authenticate users, minimum password length, max login attempts, special permissions for console users (to various commands and devices), and many other policies.&lt;/p></description></item><item><title>Auto Logout in Linux</title><link>https://jayminpatel.elemprin.com/posts/2010-05-16-auto-logout-linux/</link><pubDate>Sun, 16 May 2010 11:41:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2010-05-16-auto-logout-linux/</guid><description>&lt;p>Almost everyone is forgetful and used to leave the Linux/Unix login session open without logging out. So, how to make sure all the Linux systems will automatically logout users after idle for certain minutes?&lt;/p>
&lt;p>In fact, the simplest way is to configure the &lt;strong>TMOUT&lt;/strong> shell variable!&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>export TMOUT&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">60&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This export command will immediately get the Linux OS to automatically logout a user after his/her login session being idle for 60 seconds or 1 minute!&lt;/p></description></item><item><title>Sulogin for Single User Mode</title><link>https://jayminpatel.elemprin.com/posts/2010-05-16-sulogin-single-user/</link><pubDate>Sun, 16 May 2010 11:36:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2010-05-16-sulogin-single-user/</guid><description>&lt;p>By default on Red Hat Linux, user can enter single user mode simply by typing &amp;quot;linux single&amp;quot; at the GRUB boot-editing menu. Some believe that this is left in to ease support of users with lost root passwords.&lt;/p>
&lt;p>In any case, it represents a clear security risk - authentication should always be required for root level access. It should be noted that it is extremely difficult to prevent compromise by any attacker who has knowledge, tools, and full physical access to a system. This kind of measure simply increases the difficulty of compromise by requiring more of each of these factors. These last two items have attempted to address concerns of physical/boot security.&lt;/p></description></item><item><title>Setup Proxy Setting in a Text-Based Linux Machine</title><link>https://jayminpatel.elemprin.com/posts/2010-05-16-proxy-settings-cli/</link><pubDate>Sun, 16 May 2010 11:32:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2010-05-16-proxy-settings-cli/</guid><description>&lt;p>In a generic scenario, internet access is running through a proxy in small offices. In that case, Linux command line utilities that require internet access to work like &lt;code>wget&lt;/code>, &lt;code>curl&lt;/code>, &lt;code>yum&lt;/code>, and &lt;code>apt-get&lt;/code> don't work. The questions that come up:&lt;/p>
&lt;ul>
&lt;li>How to install packages using proxy by yum?&lt;/li>
&lt;li>How to install packages using proxy by apt-get?&lt;/li>
&lt;li>How to download a file from command line using wget?&lt;/li>
&lt;/ul>
&lt;p>All these utilities depend on shell variables &lt;code>http_proxy&lt;/code> and &lt;code>ftp_proxy&lt;/code> to work with a proxy.&lt;/p></description></item><item><title>Argument List Too Long</title><link>https://jayminpatel.elemprin.com/posts/2010-05-16-argument-list-too-long/</link><pubDate>Sun, 16 May 2010 11:25:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2010-05-16-argument-list-too-long/</guid><description>&lt;p>Suppose, there are 1,30,000 files to move from one directory to another, what will happen?&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># mv *.txt test&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Oh!! There is an error:&lt;/p>
&lt;pre tabindex="0">&lt;code>mv: Argument list too long.
&lt;/code>&lt;/pre>&lt;p>What to do? Simple answer is to use find command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># find . -maxdepth 1 -name &amp;#39;*.txt&amp;#39; -exec mv &amp;#39;{}&amp;#39; test \;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here,&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Option&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>.&lt;/code>&lt;/td>
 &lt;td>Defines search directory&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>-maxdepth&lt;/code>&lt;/td>
 &lt;td>Disables recursive search. With &lt;code>-maxdepth 1&lt;/code> it will only search in current directory&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>-name&lt;/code>&lt;/td>
 &lt;td>String to be searched&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>-exec&lt;/code>&lt;/td>
 &lt;td>Applies a command to set of files that have been searched&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>{}&lt;/code>&lt;/td>
 &lt;td>Inserts each found file into given command after &lt;code>-exec&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>\;&lt;/code>&lt;/td>
 &lt;td>Indicates the exec command line has ended&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>The above example searches for &lt;code>*.txt&lt;/code> files in current directory and moves it to the test directory.&lt;/p></description></item><item><title>bad interpreter: No such file or directory</title><link>https://jayminpatel.elemprin.com/posts/2010-05-16-bad-interpreter/</link><pubDate>Sun, 16 May 2010 11:21:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2010-05-16-bad-interpreter/</guid><description>&lt;p>Sometimes shell scripts in Linux give this error:&lt;/p>
&lt;pre tabindex="0">&lt;code>bash: ./t1.sh: /bin/sh^M: bad interpreter: No such file or directory
&lt;/code>&lt;/pre>&lt;p>This happens when files are transferred from a Windows machine to a Linux machine. Different operating systems use different line ending characters:&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>OS&lt;/th>
 &lt;th>Line End&lt;/th>
 &lt;th>Character&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>UNIX/Linux&lt;/td>
 &lt;td>LF&lt;/td>
 &lt;td>&lt;code>\n&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>DOS/Windows&lt;/td>
 &lt;td>CRLF&lt;/td>
 &lt;td>&lt;code>\r&lt;/code> and &lt;code>\n&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Mac&lt;/td>
 &lt;td>CR&lt;/td>
 &lt;td>&lt;code>\r&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>CR&lt;/strong> (Carriage Return): Return cursor to left margin, Ctrl-M (^M) or hex 0D
&lt;strong>LF&lt;/strong> (Linefeed): Move cursor down, Ctrl-J (^J) or hex 0A&lt;/p></description></item><item><title>What Exactly Is Open Source?</title><link>https://jayminpatel.elemprin.com/posts/2010-04-08-what-is-open-source/</link><pubDate>Thu, 08 Apr 2010 00:00:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2010-04-08-what-is-open-source/</guid><description>&lt;p>We hear a lot about Open Source and use Open Source applications. But what is open source? How does it work? How does Open Source business work? At entry point it's like a riddle. Let's clear up what Open Source actually means.&lt;/p>
&lt;p>Open source doesn't just mean access to the source code. The distribution terms of an open-source program must comply with the following criteria -- the Open Source Definition:&lt;/p></description></item><item><title>CV or Resume: Is There a Difference?</title><link>https://jayminpatel.elemprin.com/posts/2010-03-20-cv-vs-resume/</link><pubDate>Sat, 20 Mar 2010 11:02:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2010-03-20-cv-vs-resume/</guid><description>&lt;p>While most of us use the terms 'Curriculum Vitae' (CV) and 'Resume' interchangeably, there is a difference between these two documents.&lt;/p>
&lt;p>All over the world (including India ) except the US, employers ask potential employees for a CV while applying for a position. While both documents are used in the job application process -- there is a difference in what the contents of each should be.&lt;/p>
&lt;p>To understand CV and Resume, let us look at the literal meaning of these two terms:&lt;/p></description></item><item><title>Started Blogging on Google Blogger</title><link>https://jayminpatel.elemprin.com/posts/2010-01-12-started-blogging/</link><pubDate>Tue, 12 Jan 2010 18:45:00 +0530</pubDate><guid>https://jayminpatel.elemprin.com/posts/2010-01-12-started-blogging/</guid><description>&lt;p>After a long time, back to blogging through Google Blogger. It's been more than one and a half years since I started on WordPress.&lt;/p>
&lt;p>Because of my tendency to procrastinate, I was ineffective in keeping it going. Once again, I'm starting with fresh ideas and will try to keep it going with technical and management topics.&lt;/p>
&lt;blockquote>
&lt;p>&lt;em>Originally published January 12, 2010 on jaymspatel.blogspot.com -- the first post on TechnoStab&lt;/em>&lt;/p>&lt;/blockquote></description></item></channel></rss>