<?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 Avinash Ramana</title>
    <link>http://www.gent00.com/posts/</link>
    <description>Recent content in Posts on Avinash Ramana</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <copyright>Avinash Ramana &lt;kbd&gt;|&#43;_&#43;|&lt;/kbd&gt; is @codev @gent00</copyright>
    <lastBuildDate>Sat, 21 Mar 2026 10:18:22 -0400</lastBuildDate>
    <atom:link href="http://www.gent00.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>IDEA Legacy SSE MCP ... :)</title>
      <link>http://www.gent00.com/posts/java/llm/idea-legacy-mcp/</link>
      <pubDate>Sat, 21 Mar 2026 10:18:22 -0400</pubDate>
      <guid>http://www.gent00.com/posts/java/llm/idea-legacy-mcp/</guid>
      <description>&lt;h1 id=&#34;idea-legacy-sse-mcp-&#34;&gt;IDEA Legacy SSE MCP &amp;hellip;&lt;/h1&gt;&#xA;&lt;p&gt;SSE is deprecated in favor of WebSockets, but it is still supported by most browsers and can be used for simple real-time applications.&#xA;SSE is a simple and efficient way to push updates from the server to the client.&lt;/p&gt;&#xA;&lt;p&gt;May have to exploit this for my purpose - here&amp;rsquo;s a good starting point.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Enable MCP in IDEA: &lt;a href=&#34;https://www.jetbrains.com/help/idea/mcp.html&#34;&gt;https://www.jetbrains.com/help/idea/mcp.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;connect-to-idea&#34;&gt;Connect to IDEA&lt;/h2&gt;&#xA;&lt;p&gt;You&amp;rsquo;ll establish SSE socket and &lt;code&gt;wait&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>TCP Proxy</title>
      <link>http://www.gent00.com/posts/java/tcpproxy/</link>
      <pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate>
      <guid>http://www.gent00.com/posts/java/tcpproxy/</guid>
      <description>&lt;h1 id=&#34;tcp-proxy-in-java&#34;&gt;TCP Proxy in Java&lt;/h1&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been using this for general purpose spying when I need to do formatting and it&amp;rsquo;s too cumbersome with Wireshark/Ethereal&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package com.gent00.proxy;&#xA;&#xA;import java.io.IOException;&#xA;import java.io.InputStream;&#xA;import java.io.OutputStream;&#xA;import java.net.InetSocketAddress;&#xA;import java.net.ServerSocket;&#xA;import java.net.Socket;&#xA;import java.nio.charset.StandardCharsets;&#xA;import java.time.LocalDateTime;&#xA;import java.time.format.DateTimeFormatter;&#xA;import java.util.concurrent.ExecutorService;&#xA;import java.util.concurrent.Executors;&#xA;&#xA;public class TcpProxy implements AutoCloseable {&#xA;private static final DateTimeFormatter TS = DateTimeFormatter.ofPattern(&amp;#34;yyyy-MM-dd HH:mm:ss.SSS&amp;#34;);&#xA;&#xA;    private final String targetHost;&#xA;    private final int targetPort;&#xA;    private final int listenPort;&#xA;&#xA;    private final ExecutorService executor = Executors.newCachedThreadPool();&#xA;    private volatile boolean running;&#xA;    private ServerSocket serverSocket;&#xA;&#xA;    public TcpProxy(int listenPort, String targetHost, int targetPort) {&#xA;        this.listenPort = listenPort;&#xA;        this.targetHost = targetHost;&#xA;        this.targetPort = targetPort;&#xA;    }&#xA;&#xA;    public void start() throws IOException {&#xA;        if (running) {&#xA;            return;&#xA;        }&#xA;&#xA;        serverSocket = new ServerSocket();&#xA;        serverSocket.bind(new InetSocketAddress(listenPort));&#xA;        running = true;&#xA;        log(&amp;#34;Listening on port %d, forwarding to %s:%d&amp;#34;, listenPort, targetHost, targetPort);&#xA;&#xA;        while (running) {&#xA;            try {&#xA;                Socket client = serverSocket.accept();&#xA;                log(&amp;#34;Accepted client %s&amp;#34;, client.getRemoteSocketAddress());&#xA;                executor.submit(() -&amp;gt; handleClient(client));&#xA;            } catch (IOException e) {&#xA;                if (running) {&#xA;                    throw e;&#xA;                }&#xA;            }&#xA;        }&#xA;    }&#xA;&#xA;    private void handleClient(Socket client) {&#xA;        String clientAddress = String.valueOf(client.getRemoteSocketAddress());&#xA;        try (client;&#xA;             Socket target = new Socket(targetHost, targetPort)) {&#xA;&#xA;            log(&amp;#34;Connected %s -&amp;gt; %s:%d&amp;#34;, clientAddress, targetHost, targetPort);&#xA;&#xA;            executor.submit(() -&amp;gt; pipe(client, target, &amp;#34;client-&amp;gt;target&amp;#34;, clientAddress));&#xA;            pipe(target, client, &amp;#34;target-&amp;gt;client&amp;#34;, clientAddress);&#xA;&#xA;        } catch (IOException e) {&#xA;            log(&amp;#34;Connection failed for %s: %s&amp;#34;, clientAddress, e.getMessage());&#xA;        } finally {&#xA;            log(&amp;#34;Closed connection for %s&amp;#34;, clientAddress);&#xA;        }&#xA;    }&#xA;&#xA;    private void pipe(Socket from, Socket to, String direction, String clientAddress) {&#xA;        try (InputStream in = from.getInputStream();&#xA;             OutputStream out = to.getOutputStream()) {&#xA;&#xA;            byte[] buffer = new byte[8192];&#xA;            int read;&#xA;            while ((read = in.read(buffer)) != -1 &amp;amp;&amp;amp; running) {&#xA;                out.write(buffer, 0, read);&#xA;                out.flush();&#xA;                log(&amp;#34;%s %s bytes for %s&amp;#34;, direction, read, clientAddress);&#xA;                String payload = new String(buffer, 0, read, StandardCharsets.UTF_8);&#xA;                log(&amp;#34;%s payload: %s&amp;#34;, direction, payload);&#xA;            }&#xA;        } catch (IOException e) {&#xA;            log(&amp;#34;%s ended for %s: %s&amp;#34;, direction, clientAddress, e.getMessage());&#xA;        } finally {&#xA;            try {&#xA;                to.shutdownOutput();&#xA;            } catch (IOException ignored) {&#xA;                // Ignore shutdown issues.&#xA;            }&#xA;        }&#xA;    }&#xA;&#xA;    private void log(String format, Object... args) {&#xA;        System.out.printf(&amp;#34;[%s] %s%n&amp;#34;, LocalDateTime.now().format(TS), String.format(format, args));&#xA;    }&#xA;&#xA;    public void stop() {&#xA;        running = false;&#xA;        try {&#xA;            if (serverSocket != null &amp;amp;&amp;amp; !serverSocket.isClosed()) {&#xA;                serverSocket.close();&#xA;            }&#xA;        } catch (IOException ignored) {&#xA;            // Ignore shutdown issues.&#xA;        }&#xA;        executor.shutdownNow();&#xA;        log(&amp;#34;Proxy stopped&amp;#34;);&#xA;    }&#xA;&#xA;    @Override&#xA;    public void close() {&#xA;        stop();&#xA;    }&#xA;&#xA;    public static void main(String[] args) throws Exception {&#xA;        if (args.length != 3) {&#xA;            System.out.println(&amp;#34;Usage: java TcpProxy &amp;lt;listenPort&amp;gt; &amp;lt;targetHost&amp;gt; &amp;lt;targetPort&amp;gt;&amp;#34;);&#xA;            return;&#xA;        }&#xA;&#xA;        int listenPort = Integer.parseInt(args[0]);&#xA;        String targetHost = args[1];&#xA;        int targetPort = Integer.parseInt(args[2]);&#xA;&#xA;        try (TcpProxy proxy = new TcpProxy(listenPort, targetHost, targetPort)) {&#xA;            proxy.start();&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Thorntail Fraction Loading</title>
      <link>http://www.gent00.com/posts/osi/thorntail_deep/</link>
      <pubDate>Mon, 16 Mar 2020 00:00:00 +0000</pubDate>
      <guid>http://www.gent00.com/posts/osi/thorntail_deep/</guid>
      <description>&lt;h1 id=&#34;thorntail-fraction-loading&#34;&gt;Thorntail Fraction Loading&lt;/h1&gt;&#xA;&lt;h2 id=&#34;what-is-a-fraction&#34;&gt;What is a Fraction?&lt;/h2&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what &lt;code&gt;thorntail&lt;/code&gt; says about it&amp;hellip;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Thorntail is defined by an unbounded set of capabilities. Each piece of functionality is called a fraction. Some fractions provide only access to APIs, such as JAX-RS or CDI; other fractions provide higher-level capabilities, such as integration with RHSSO (Keycloak).&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I guess I can do anything, after all, it&amp;rsquo;s &lt;code&gt;unbounded&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;source-code&#34;&gt;Source code&lt;/h2&gt;&#xA;&lt;p&gt;Start it up in debug mode - &lt;code&gt;~/apps/apache-maven-3.6.3/bin/mvn thorntail:run -Dthorntail.debug.port=5005 -Dswarm.logging=DEBUG -Dthorntail.logging=DEBUG&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>LXC and LXD Cheat Sheet</title>
      <link>http://www.gent00.com/posts/osi/lxd_oracle/</link>
      <pubDate>Sat, 01 Feb 2020 00:00:00 +0000</pubDate>
      <guid>http://www.gent00.com/posts/osi/lxd_oracle/</guid>
      <description>&lt;h1 id=&#34;lxd-commands&#34;&gt;LXD Commands&lt;/h1&gt;&#xA;&lt;h2 id=&#34;profile&#34;&gt;Profile&lt;/h2&gt;&#xA;&lt;h3 id=&#34;list-profiles&#34;&gt;List profiles&lt;/h3&gt;&#xA;&lt;h3 id=&#34;add-a-network-profile&#34;&gt;Add a network profile&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;root@trs2:/snap# lxc network attach-profile lxdbr0 storage-nas&#xA;root@trs2:/snap# lxc profile show storage-nas&#xA;config: {}&#xA;description: &amp;#34;&amp;#34;&#xA;devices:&#xA;  lxdbr0:&#xA;    nictype: bridged&#xA;    parent: lxdbr0&#xA;    type: nic&#xA;  root:&#xA;    path: /&#xA;    pool: codesnap&#xA;    type: disk&#xA;name: storage-nas&#xA;used_by:&#xA;- /1.0/instances/tough-dinosaur&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;ensure-you-have-a-good-profile-for-diskio&#34;&gt;Ensure you have a good profile for disk/io&lt;/h2&gt;&#xA;&lt;p&gt;I have created a special profile that uses a &lt;code&gt;codesnap&lt;/code&gt; disk array. This is backed by 32x12g SAS drives.&#xA;We will still have to bind mount the NVMe for later&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>iscsi in Linux for VMWare ESXi</title>
      <link>http://www.gent00.com/posts/linux/iscsi-create/</link>
      <pubDate>Thu, 02 Jan 2020 00:00:00 +0000</pubDate>
      <guid>http://www.gent00.com/posts/linux/iscsi-create/</guid>
      <description>&lt;h2 id=&#34;provision-disks&#34;&gt;Provision Disks&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m going to grab all the empty SATA drives. ST2**&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex; background-color:#dfdfdf&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 1&lt;/span&gt;&lt;span&gt;root@trs2:/home/avinash# lsblk -o NAME,SIZE,TYPE,MODEL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 2&lt;/span&gt;&lt;span&gt;NAME                        SIZE TYPE  MODEL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 3&lt;/span&gt;&lt;span&gt;loop0                      89.1M loop  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 4&lt;/span&gt;&lt;span&gt;loop1                      89.1M loop  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 5&lt;/span&gt;&lt;span&gt;loop2                      64.5M loop  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 6&lt;/span&gt;&lt;span&gt;loop3                      64.5M loop  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#dfdfdf&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 7&lt;/span&gt;&lt;span&gt;sda                         1.8T disk  ST2000NM0055-1V4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#dfdfdf&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 8&lt;/span&gt;&lt;span&gt;sdb                         1.8T disk  ST2000NM0055-1V4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#dfdfdf&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 9&lt;/span&gt;&lt;span&gt;sdc                         1.8T disk  ST2000NM0055-1V4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#dfdfdf&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;10&lt;/span&gt;&lt;span&gt;sdd                         1.8T disk  ST2000NM0055-1V4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#dfdfdf&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;11&lt;/span&gt;&lt;span&gt;sde                         1.8T disk  ST2000NM0055-1V4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#dfdfdf&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;12&lt;/span&gt;&lt;span&gt;sdf                         1.8T disk  ST2000NM0055-1V4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#dfdfdf&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;13&lt;/span&gt;&lt;span&gt;sdg                         1.8T disk  ST2000NM0055-1V4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#dfdfdf&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;14&lt;/span&gt;&lt;span&gt;sdh                         1.8T disk  ST2000NM0055-1V4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;15&lt;/span&gt;&lt;span&gt;sdi                         1.8T disk  WDC_WD20EARX-00P&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;16&lt;/span&gt;&lt;span&gt;└─sdi1                      1.8T part  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;17&lt;/span&gt;&lt;span&gt;  └─md0                     1.8T raid1 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;18&lt;/span&gt;&lt;span&gt;    ├─cluster-Xq            1.5T lvm   &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;19&lt;/span&gt;&lt;span&gt;    ├─cluster-Xq            100G lvm   &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;20&lt;/span&gt;&lt;span&gt;    └─cluster-Xq            200G lvm   &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;21&lt;/span&gt;&lt;span&gt;sdj                         1.8T disk  WDC_WD20EARX-00P&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;22&lt;/span&gt;&lt;span&gt;└─sdj1                      1.8T part  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;23&lt;/span&gt;&lt;span&gt;  └─md0                     1.8T raid1 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;24&lt;/span&gt;&lt;span&gt;    ├─cluster-Xq            1.5T lvm   &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;25&lt;/span&gt;&lt;span&gt;    ├─cluster-Xq            100G lvm   &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;26&lt;/span&gt;&lt;span&gt;    └─cluster-Xq            200G lvm   &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;27&lt;/span&gt;&lt;span&gt;sdk                       232.9G disk  Samsung_SSD_850&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;28&lt;/span&gt;&lt;span&gt;sdl                       232.9G disk  Samsung_SSD_850&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;29&lt;/span&gt;&lt;span&gt;sdm                        55.9G disk  OCZ-AGILITY3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;30&lt;/span&gt;&lt;span&gt;├─sdm1                        1M part  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;31&lt;/span&gt;&lt;span&gt;├─sdm2                        1G part  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;32&lt;/span&gt;&lt;span&gt;└─sdm3                     54.9G part  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;33&lt;/span&gt;&lt;span&gt;  └─ubuntu--vg-ubuntu--lv    24G lvm   &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;34&lt;/span&gt;&lt;span&gt;nvme0n1                     477G disk  Samsung SSD &lt;span style=&#34;color:#666&#34;&gt;960&lt;/span&gt; PRO 512GB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;35&lt;/span&gt;&lt;span&gt;└─md127                     1.9T raid0 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;36&lt;/span&gt;&lt;span&gt;nvme1n1                     477G disk  Samsung SSD &lt;span style=&#34;color:#666&#34;&gt;960&lt;/span&gt; PRO 512GB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;37&lt;/span&gt;&lt;span&gt;└─md127                     1.9T raid0 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;38&lt;/span&gt;&lt;span&gt;nvme3n1                     477G disk  Samsung SSD &lt;span style=&#34;color:#666&#34;&gt;960&lt;/span&gt; PRO 512GB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;39&lt;/span&gt;&lt;span&gt;└─md127                     1.9T raid0 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;40&lt;/span&gt;&lt;span&gt;nvme2n1                     477G disk  Samsung SSD &lt;span style=&#34;color:#666&#34;&gt;960&lt;/span&gt; PRO 512GB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;41&lt;/span&gt;&lt;span&gt;└─md127                     1.9T raid0 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;identify-the-drives-to-provision&#34;&gt;Identify the drives to provision&lt;/h3&gt;&#xA;&lt;p&gt;We can re-use this var for later. Saves us some typing, but&#xA;&lt;strong&gt;verify these drives are correct!&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>NVMe Performance on Zen TR4 Architecture</title>
      <link>http://www.gent00.com/posts/linux/asus_nvme_4_way/</link>
      <pubDate>Tue, 02 Apr 2019 00:00:00 +0000</pubDate>
      <guid>http://www.gent00.com/posts/linux/asus_nvme_4_way/</guid>
      <description>&lt;p&gt;The original objective was to observe and understand performance characteristics of nvme within&#xA;early Linux kernels. We&amp;rsquo;ll be investigating the new polling mechanism&#xA;, as opposed to the interrupt model.&lt;/p&gt;&#xA;&lt;h1 id=&#34;tldr&#34;&gt;TLDR;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;4-x-nvme-random-write-4k---samsung-pro&#34;&gt;4 x NVMe Random Write 4K - Samsung Pro&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;1.4 million IOPS @ sub-millisecond latency&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://www.gent00.com/img/blog/nvme/nvme_4_way_write_4k_randw.png&#34; alt=&#34;NVMe-4-way Random Write 4K&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-x-nvme-sequential-write-4k---samsung-pro&#34;&gt;1 x NVMe Sequential Write 4K - Samsung Pro&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;1.2 GB/s with 4K record size&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://www.gent00.com/img/blog/nvme/nvme_single_4k_write_queue_size_vs_mb.png&#34; alt=&#34;NVMe-1-way Sequential Write 4K&#34;&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;12012019&#34;&gt;12/01/2019&lt;/h1&gt;&#xA;&lt;p&gt;I couldn&amp;rsquo;t even get that far. My priorities recently were fixing some KVM and LXC issues that would allow us to&#xA;get off of early Xen architecture on SPARC. Unfortunately, will have to get back to this in a Part 2, to explain the changes&#xA;required to the kernel to get NVMe devices to stop driving up the &lt;code&gt;sys&lt;/code&gt; due to MSI-X interrupting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PCIE Theoretical Bandwidth</title>
      <link>http://www.gent00.com/posts/linux/pcie3_r/</link>
      <pubDate>Tue, 02 Apr 2019 00:00:00 +0000</pubDate>
      <guid>http://www.gent00.com/posts/linux/pcie3_r/</guid>
      <description>&lt;h2 id=&#34;how-to-calculate-pcie-throughput&#34;&gt;How to calculate PCIe throughput&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; gigatransfer bits bits.per.xfer GB.s       enc   enc.GB.s&#xA; 1            8    1    8000000000    1 0.9846154  0.9846154&#xA; 2            8    2   16000000000    2 0.9846154  1.9692308&#xA; 3            8    4   32000000000    4 0.9846154  3.9384615&#xA; 4            8    8   64000000000    8 0.9846154  7.8769231&#xA; 5            8   16  128000000000   16 0.9846154 15.7538462&#xA; 6            8   32  256000000000   32 0.9846154 31.5076923&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;options&lt;/span&gt;(scipen&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;999&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;df&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;data.frame&lt;/span&gt;(gigatransfer&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;rep&lt;/span&gt;(&lt;span style=&#34;color:#00a000&#34;&gt;c&lt;/span&gt;(&lt;span style=&#34;color:#666&#34;&gt;8&lt;/span&gt;),times&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;6&lt;/span&gt;),bits&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;^c&lt;/span&gt;(&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;5&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;df&lt;span style=&#34;color:#666&#34;&gt;$&lt;/span&gt;bits.per.xfer&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;(df&lt;span style=&#34;color:#666&#34;&gt;$&lt;/span&gt;gigatransfer&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;10&lt;/span&gt;^9)&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;df&lt;span style=&#34;color:#666&#34;&gt;$&lt;/span&gt;bits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;df&lt;span style=&#34;color:#666&#34;&gt;$&lt;/span&gt;GB.s&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;df&lt;span style=&#34;color:#666&#34;&gt;$&lt;/span&gt;bits.per.xfer&lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;8&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1000&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1000&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;df&lt;span style=&#34;color:#666&#34;&gt;$&lt;/span&gt;enc&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;(&lt;span style=&#34;color:#666&#34;&gt;128&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;130&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;df&lt;span style=&#34;color:#666&#34;&gt;$&lt;/span&gt;enc.GB.s&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;df&lt;span style=&#34;color:#666&#34;&gt;$&lt;/span&gt;GB.s&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;df&lt;span style=&#34;color:#666&#34;&gt;$&lt;/span&gt;enc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00a000&#34;&gt;print&lt;/span&gt;(df)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Forked docker-hugo</title>
      <link>http://www.gent00.com/posts/docker-hugo-forked/</link>
      <pubDate>Sun, 02 Apr 2017 00:00:00 +0000</pubDate>
      <guid>http://www.gent00.com/posts/docker-hugo-forked/</guid>
      <description>&lt;h1 id=&#34;docker-bind-mount-permission-or-user-someguy&#34;&gt;Docker bind mount permission or USER someguy&lt;/h1&gt;&#xA;&lt;p&gt;As part of a &lt;a href=&#34;https://github.com/jojomi/docker-hugo/issues/20&#34;&gt;root-escalation defect&lt;/a&gt;,&#xA;hugo needs to support a non-root user. There&amp;rsquo;s some &amp;ldquo;official&amp;rdquo; documentation&#xA;from Docker ala &lt;a href=&#34;https://docs.docker.com/engine/security/security/#conclusions&#34;&gt;Docker - Security Conclusions&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Docker concludes&amp;hellip;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Docker containers are, by default, quite secure; especially if you take care of running your processes inside the containers as non-privileged users (i.e., non-root).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You can add an extra layer of safety by enabling AppArmor, SELinux, GRSEC, or your favorite hardening solution.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dell DRAC5 HakPak</title>
      <link>http://www.gent00.com/posts/drac/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>http://www.gent00.com/posts/drac/</guid>
      <description>&lt;h1 id=&#34;hack-drac5&#34;&gt;Hack DRAC5&lt;/h1&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;DRAC uses deprecated SSL procotols and also tries to execute unsigned code from Dell. I&amp;rsquo;m going to run it straight with Java instead of WebStart, because we can bypass many issues&#xA;and get debugging turned on as well.&lt;/p&gt;&#xA;&lt;h2 id=&#34;running-idrac5-in-standalone&#34;&gt;Running iDRAC5 in Standalone&lt;/h2&gt;&#xA;&lt;h3 id=&#34;pre-requisites&#34;&gt;Pre-requisites&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;32-bit JVM&lt;/li&gt;&#xA;&lt;li&gt;Modify Java&amp;rsquo;s security files to enable disabled cipher suites&lt;/li&gt;&#xA;&lt;li&gt;Download your DRAC instance&amp;rsquo;s connection JAR and native lib.&lt;/li&gt;&#xA;&lt;li&gt;Ensure you have all dependencies for your OS (Linux, or Windows)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;running-drac-console&#34;&gt;Running DRAC Console&lt;/h3&gt;&#xA;&lt;p&gt;If you want to run things directly, try this script. You&amp;rsquo;ll need to grab the JARs right off your DRAC instance and stash them somewhere locally.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
