<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ryan Brown</title>
    <description>The latest articles on DEV Community by Ryan Brown (@ryencode).</description>
    <link>https://dev.to/ryencode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1764%2FlfLs7LQU.jpg</url>
      <title>DEV Community: Ryan Brown</title>
      <link>https://dev.to/ryencode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ryencode"/>
    <language>en</language>
    <item>
      <title>A Mermaid to the rescue - visualizing complex problems</title>
      <dc:creator>Ryan Brown</dc:creator>
      <pubDate>Fri, 24 Mar 2023 16:55:02 +0000</pubDate>
      <link>https://dev.to/ryencode/a-mermaid-to-the-rescue-3hcn</link>
      <guid>https://dev.to/ryencode/a-mermaid-to-the-rescue-3hcn</guid>
      <description>&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;As a developer there are fewer things more frightening than an ask or requirement phrased similar to the following:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I have this excel spreadsheet, but we need it as an application.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Invariably the spreadsheet has a convoluted sequence of functions and back-references, look-ups and unexplainable inconsistencies in format and display.&lt;/p&gt;

&lt;p&gt;Ideally sometime before a developer is handed a spreadsheet and the the above “requirement” there could be a detailed analysis of business requirements including data sources, and all transformations expected of that data including test cases and example data. However in a fast paced modern working environment that is a lofty luxury indeed.&lt;/p&gt;

&lt;p&gt;So what is our hard-working, indefatigable developer to do? Trying to suss out the hierarchy of column formulas extending up to and possibly column AX, some referencing sums of other formula derived columns, is a head scratchier indeed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Situation
&lt;/h2&gt;

&lt;p&gt;In a recent exercise the (nearly) exact situation described above was encountered. The resulting artifact was to be in the form of a Database View. The data was (or would be) available in tables in the target database so that was at least covered. Still, I needed to map out the column inter-relationships and devise which structure of nested select statements would be appropriate to capture the same functionality of the Excel spreadsheet.&lt;/p&gt;

&lt;p&gt;I first considered mapping out the column relationships on paper, but quickly realized that doing so would need a substantial amount of erasing as I moved on to the next column and had to re-draw a portion of my map. Clearly a more automatic solution was needed and being a developer... I had an idea for a tool to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Search
&lt;/h2&gt;

&lt;p&gt;A few months ago I stumbled across a diagramming tool that could take diagram descriptions in a markup language and produce decent quality graphical outputs. This was an amazing discovery as I’ve always struggled with the visual documentation tools such as draw.io or Visio. I much prefer to construct things like this in a declarative way rather than using visual tools. For me the benefits of declarative ways include being able to copy-paste easier, check into source control and even programmatically create the declarative statements.&lt;/p&gt;

&lt;p&gt;The tooling I found is called &lt;a href="https://mermaid.live/" rel="noopener noreferrer"&gt;Mermaid&lt;/a&gt; and it has a really nifty live editor for quick work and learning: Since discovering Mermaid, I’ve used it for some light documentation of processes, data-flows and... some unorthodox things.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;Back to our problem of trying to get a handle on the rat’s nest of excel formulas. Let’s look at one...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffy0luv3bqjx74dl0asji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffy0luv3bqjx74dl0asji.png" alt="an excel formula" width="461" height="39"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Doesn’t look too bad... bet let’s look again.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$AA$1&lt;/code&gt; is a “constant” to be provided from fairly static table. Not doing too bad so far.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;P7&lt;/code&gt; is another formula&lt;code&gt;=SUM(M7:O7)&lt;/code&gt; OK so now referencing another formula. Now we're getting more complicated.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$P$19&lt;/code&gt; is &lt;code&gt;=SUM(P6:P18)&lt;/code&gt; Now things are interesting... a sum of the set of data.&lt;/p&gt;

&lt;p&gt;The whole sheet is littered with things like this. Very often the results of one formula are used in later or earlier formulas.&lt;/p&gt;

&lt;p&gt;I figured I could use a type diagram to help me understand these relationships.flowchart&lt;br&gt;
So to start with....&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart TD
    AA7 --&amp;gt; $AA$1 &amp;amp; P7 &amp;amp; $P$19
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Line 1 &lt;code&gt;Flowchart&lt;/code&gt; tells Mermaid that this is a type diagram.&lt;/p&gt;

&lt;p&gt;Line 2 is indented for readability. Let’s take it piece by piece&lt;br&gt;
&lt;code&gt;AA7&lt;/code&gt; This is the first node in the diagram. This is the simplest way to define a node, just an identifier.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;--&amp;gt;&lt;/code&gt; This is a line, in this case an arrow line. It indicates a directional relationship. In this case, that the identifier (column) to the left is related (references) the identifiers (columns) the right.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$AA$1&lt;/code&gt; The next identifier (column) that is the referenced item of the relationship.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;amp; P7&lt;/code&gt; We can indicate that more than 1 thing is related, we could have put the relationship on a separate line as &lt;code&gt;AA7 -&amp;gt; P7&lt;/code&gt; if we wanted to, but I like this one line per referencing column format for clarity.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;amp; $P$19&lt;/code&gt; The next column referenced.&lt;/p&gt;

&lt;p&gt;So far we’ve defined a &lt;code&gt;flowchart&lt;/code&gt; that has a node &lt;code&gt;AA7&lt;/code&gt; that references &lt;code&gt;$AA$1&lt;/code&gt;, &lt;code&gt;P7&lt;/code&gt; and &lt;code&gt;$P$19&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Let’s see what it looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxn2axqvdpdxt3j0ilq7v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxn2axqvdpdxt3j0ilq7v.png" alt="Mermaid Diagram showing 4 nodes" width="297" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can clearly see that &lt;code&gt;AA7&lt;/code&gt; references the other three columns.&lt;/p&gt;

&lt;p&gt;let’s expand on that...&lt;/p&gt;

&lt;p&gt;&lt;code&gt;P7&lt;/code&gt; is &lt;code&gt;=SUM(M7:O7)&lt;/code&gt; and becomes a line in our diagram &lt;code&gt;P7 --&amp;gt; M7 &amp;amp; N7 &amp;amp; O7&lt;/code&gt; Mermaid doesn’t understand Excel range notation, so I manually unrolled this.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$AA$1&lt;/code&gt; is a value so we don’t need to expand it anymore.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$P$19&lt;/code&gt; is &lt;code&gt;=SUM(P6:P18)&lt;/code&gt; I’m really interested at a line-by-line model of this so I can just say that it references back to &lt;code&gt;P7&lt;/code&gt; This becomes a line in the diagram &lt;code&gt;$P$19 --&amp;gt; P7&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;With our full (so far) diagram markup of&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart
    AA7 --&amp;gt; $AA$1 &amp;amp; P7 &amp;amp; $P$19
    P7 --&amp;gt; M7 &amp;amp; N7 &amp;amp; O7
    $P$19 --&amp;gt; P7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The resulting diagram is&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F63ilyzghrd35wksdyquz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F63ilyzghrd35wksdyquz.png" alt="Mermaid diagram showing 7 nodes" width="242" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we can more clearly see the hierarchy of our Excel formulas.&lt;/p&gt;

&lt;p&gt;Using this method I created a flowchart of all the formulas for one row of the “spreadsheet that is a requirement”. Here is what the full markup looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart BT
    H6 --&amp;gt; F6 &amp;amp; G6
    I6 --&amp;gt; AT6
    J6 --&amp;gt; H6 &amp;amp; I6
    KG --&amp;gt; AU6
    P6 --&amp;gt; M6 &amp;amp; N6 &amp;amp; O6
    T6 --&amp;gt; R6 &amp;amp; S6
    AA6 --&amp;gt; P6
    AA6 --&amp;gt; P19_SUM_P6
        P19_SUM_P6 --&amp;gt; P6
    AB6 --&amp;gt; Y6 &amp;amp; Y19_SUM_Y6 &amp;amp; W6 &amp;amp; W19_SUM_W6 &amp;amp; T6 &amp;amp; T19_SUM_T6 &amp;amp; V6 &amp;amp; V19_SUM_V6
        Y19_SUM_Y6 --&amp;gt; Y19
        W19_SUM_W6 --&amp;gt; W6
        T19_SUM_T6 --&amp;gt; T6
        V19_SUM_V6 --&amp;gt; V6
    AC6 --&amp;gt; P6 &amp;amp; T6 &amp;amp; V6 &amp;amp; W6 &amp;amp; Y6 &amp;amp; AA6
    AD6 --&amp;gt; P6 &amp;amp; T6 &amp;amp; V6 &amp;amp; W6 &amp;amp; Y6 &amp;amp; AB6
    AE6 --&amp;gt; AL6
    AF7 --&amp;gt; AL6
    AJ6 --&amp;gt; AG6
    AK6 --&amp;gt; AH6
    AL6 --&amp;gt; AJ6 &amp;amp; AK6
    AM6 --&amp;gt; P6
    AN6 --&amp;gt; AD6 &amp;amp; AM6
    AO6 --&amp;gt; AN6 &amp;amp; AL6
    AP6 --&amp;gt; AO6 &amp;amp; AO19_SUM_AO6
        AO19_SUM_AO6 --&amp;gt; AO6
    AQ6 --&amp;gt; AO6 &amp;amp; AP6 &amp;amp; AN6
    AR6 --&amp;gt; AN6 &amp;amp; H6
    AS6 --&amp;gt; AQ6 &amp;amp; AQ19_SUM_AQ19
    AT6 --&amp;gt; AS6 &amp;amp; AQ6
        AQ19_SUM_AQ19 --&amp;gt; AQ6
    AU6 --&amp;gt; F6 &amp;amp; J6
    AV6 --&amp;gt; J6 &amp;amp; H6
    AW6 --&amp;gt; AU6
    AX6 --&amp;gt; AV6 &amp;amp; AW6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It’s big.&lt;/p&gt;

&lt;p&gt;I did change the direction of the flowchart by adding &lt;code&gt;BT&lt;/code&gt; after the &lt;code&gt;flowchart&lt;/code&gt; definition. This stands for Bottom-to-Top. Other directions supported  are &lt;code&gt;LR&lt;/code&gt; and &lt;code&gt;RL&lt;/code&gt; in addition to &lt;code&gt;TD&lt;/code&gt; the default for Top-Down.&lt;/p&gt;

&lt;p&gt;Here is the resulting diagram:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2pcx0gly3r0jjpzuip8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2pcx0gly3r0jjpzuip8.png" alt="Mermaid diagram showing MANY nodes" width="800" height="810"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Is your mind blown yet?&lt;/p&gt;

&lt;p&gt;This diagram clearly shows me the conceptual layers of the SQL View I’ll be creating. I could now see which columns I needed to have ready for&lt;br&gt;
each following layer.&lt;/p&gt;

&lt;p&gt;At initial count I see 18 layers. I count by horizontal groupings. This a naive count of layers as many of the smaller functions can be in-lined into a sibling layer. In practice the very large functions that include checks for divide by zero were not rolled together with other layers and... the summing columns could not be rolled in without some correlated-sub-query mess. It was much cleaner to have these as separate layers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Summary
&lt;/h2&gt;

&lt;p&gt;Had I not used Mermaid to help me diagram the requirements, it would have taken me multiple times longer than it did with using the diagram to assist in understanding the chain of data formulas.&lt;/p&gt;

&lt;p&gt;That I don’t need to manually adjust the positions of nodes or connect and draw lines myself, saved me a ton of time. Being able to save the&lt;br&gt;
markup to a text file for later editing or adding to this very same blog-post... priceless (insert appropriate credit-card commercial here💳).&lt;/p&gt;

&lt;p&gt;I plan on using Mermaid diagrams in this manner in the future to better capture the true nature of requirements.&lt;/p&gt;

&lt;p&gt;I strongly encourage you to check out the &lt;a href="https://mermaid.live/" rel="noopener noreferrer"&gt;Live Editor&lt;/a&gt; and &lt;a href="https://mermaid.js.org/intro/" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt; to learn more about how you can use Mermaid diagrams.&lt;/p&gt;

&lt;p&gt;Of note, in this task we used just ONE type of Mermaid diagram out of many... and more are being added. Mermaid is open-source and being constantly improved on.&lt;/p&gt;

&lt;p&gt;Here are the diagram types that Mermaid has as of this writing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flowchart&lt;/li&gt;
&lt;li&gt;Sequence Diagram&lt;/li&gt;
&lt;li&gt;Class Diagram&lt;/li&gt;
&lt;li&gt;State Diagram&lt;/li&gt;
&lt;li&gt;Entity Relationship Diagram&lt;/li&gt;
&lt;li&gt;User Journey&lt;/li&gt;
&lt;li&gt;Gantt&lt;/li&gt;
&lt;li&gt;Pie Chart&lt;/li&gt;
&lt;li&gt;Gitgraph (Git) Diagram&lt;/li&gt;
&lt;li&gt;C4C Diagram (Context) Diagram&lt;/li&gt;
&lt;li&gt;Mindmaps&lt;/li&gt;
&lt;li&gt;Timeline&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mermaid</category>
      <category>requirements</category>
      <category>excel</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>shift+Insert, when did this become my goto for paste</title>
      <dc:creator>Ryan Brown</dc:creator>
      <pubDate>Wed, 19 Jan 2022 16:10:53 +0000</pubDate>
      <link>https://dev.to/ryencode/shiftinsert-when-did-this-become-my-goto-for-paste-3epn</link>
      <guid>https://dev.to/ryencode/shiftinsert-when-did-this-become-my-goto-for-paste-3epn</guid>
      <description>&lt;p&gt;My computing history (where a clipboard existed) began on old school Macintosh's. For past from clipboard &lt;code&gt;⌘+v&lt;/code&gt; was how it was, &lt;code&gt;ctl+v&lt;/code&gt; on Windows when that system became my usual OS.&lt;br&gt;
Dabbling in Unix and Linux necessitated the learning of &lt;code&gt;shift+insert&lt;/code&gt; (and middle click in most window managers.)&lt;/p&gt;

&lt;p&gt;I still use Windows the most due to work and gaming, but usually have a terminal open to a Linux system for various uses. I'm glad that many windows interfaces support the &lt;code&gt;shift+insert&lt;/code&gt; variant for pasting copied or cut content.&lt;/p&gt;

&lt;p&gt;What do you use most now? Did you change your default paste command? What triggered that change?&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>Photon OS &amp; Octopus Tentacles: Installation and Setup</title>
      <dc:creator>Ryan Brown</dc:creator>
      <pubDate>Sun, 07 Feb 2021 16:12:50 +0000</pubDate>
      <link>https://dev.to/ryencode/photon-os-octopus-tentacles-installation-and-setup-54aj</link>
      <guid>https://dev.to/ryencode/photon-os-octopus-tentacles-installation-and-setup-54aj</guid>
      <description>&lt;p&gt;&lt;br&gt;
I've updated some things with recent developments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Switch off VMWare&lt;/li&gt;
&lt;li&gt;
Switch off Octopus
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  What is it?
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://vmware.github.io/photon/" rel="noopener noreferrer"&gt;Photon OS&lt;/a&gt; is a purpose built Linux flavor by VMware specially tuned for running in a VM and hosting container products such as &lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; containers.&lt;br&gt;
&lt;a href="https://octopus.com/" rel="noopener noreferrer"&gt;Octopus&lt;/a&gt; is a Continuous Delivery platform that is great for managing deployments and run-books via it's agents called Tentacles - Octopus has a strong commitment to their naming metaphors 🐙.&lt;/p&gt;
&lt;h1&gt;
  
  
  But Why?
&lt;/h1&gt;

&lt;p&gt;Octopus Deploy simplifies and allows repeatable, stable self documenting, institutionalized deployments and release management. Marrying the Strengths of Octopus with Docker deployments seems a natural Win-Win. Also I wanted to create, for myself, an easy to deploy-to, stable Docker environment to experiment and play with &amp;amp; learn Docker.&lt;/p&gt;
&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Both at work and at home I use VMware's ESXi vSphere for hosting and managing virtual machines. At work we've started using Docker containers for some projects and have Photon OS running these containers. We also use Octopus Deploy to manage our CD infrastructure. Our at-work setup uses the SSH model for communication to the Photon OS, this is because Octopus Tentacles (Octopus's name for their software agents) are not supported on Photon OS at this time. However, I'm a little determined and doggedly set out to find out if we could run an Octopus Tentacle as a Listening Tentacle on Photon OS.&lt;/p&gt;
&lt;h1&gt;
  
  
  Assumptions
&lt;/h1&gt;

&lt;p&gt;First let's establish some assumptions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We have a functioning VMware ESXi Host

&lt;ul&gt;
&lt;li&gt; &lt;a&gt;&lt;/a&gt;&lt;del&gt;There is a $0 licensing tier, &lt;a href="https://www.vmware.com/ca/products/vsphere-hypervisor.html" rel="noopener noreferrer"&gt;vSphere Hypervisor ESXi&lt;/a&gt;&lt;/del&gt;&lt;strong&gt;Use &lt;a href="https://www.proxmox.com/en/" rel="noopener noreferrer"&gt;Proxmox instead&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;We've installed a base Photon OS OVA downloaded from VMware and it starts as expected. &lt;a href="https://vmware.github.io/photon/" rel="noopener noreferrer"&gt;Photon OS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;We've done the &lt;code&gt;tdnf distro-sync&lt;/code&gt; to bring that Photon OS Host up-to-date&lt;/li&gt;
&lt;li&gt;We have an Octopus Deploy on-premises or cloud instance running and we have the required permissions to add machines in the infrastructure config.

&lt;ul&gt;
&lt;li&gt; &lt;a&gt;&lt;/a&gt;&lt;del&gt;If you've not used Octopus Deploy, they offer a $0 pricing tier for their Cloud Instance. I use this to manage my personal servers and laugh a little each time they send me a $0 invoice. &lt;a href="https://octopus.com/pricing/overview" rel="noopener noreferrer"&gt;Octopus Deploy Pricing&lt;/a&gt;&lt;/del&gt; *&lt;em&gt;Octopus Deploy has recently (edit date is Aug 8 2024) let me know that they have discontinued their free tier pricing entirely due to costs and bla, bla, bla, even on their non-cloud plans; further they have altered their pricing to be focused by project and effectively priced themselves out of my consideration for personal and professional use except within a very small subset of deployment scenarios that I'm unlikely to encounter in the wild.  I No longer recommend octopus, and am currently investigating alternatives, like shell scripts and so on. *&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;You have SSH or other terminal access into the Photon OS host.&lt;/li&gt;
&lt;li&gt;I did a bad thing and performed all these actions as root, being too lazy at this time to set up a proper user account added to the sudo group. For a production environment, and even non-production, security best practices should be followed! Don't do &lt;em&gt;exactly&lt;/em&gt; as I have done! 😉 &lt;a href="https://www.google.com/search?q=%22linux%22+security+best+practices" rel="noopener noreferrer"&gt;I googled it for you&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Optional: Naive attempt: Following the instructions
&lt;/h1&gt;

&lt;p&gt;Skip to things that work&lt;br&gt;
I joke about this being the naive way to do it, but in most cases following this listed instructions is the best way to get a handled on how it should work... and where your setup doesn't match expectations.&lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://octopus.com/docs/infrastructure/deployment-targets/linux/tentacle#installing-and-configuring-linux-tentacle" rel="noopener noreferrer"&gt;the documentation&lt;/a&gt; we should be able to use the RPM install method (Photon OS's package manager tdnf uses RPM packages):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;wget https://rpm.octopus.com/tentacle.repo &lt;span class="nt"&gt;-O&lt;/span&gt; /etc/yum.repos.d/tentacle.repo
&lt;span class="nv"&gt;$ &lt;/span&gt;yum &lt;span class="nb"&gt;install &lt;/span&gt;tentacle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;results in&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;-bash&lt;/span&gt;: wget: &lt;span class="nb"&gt;command &lt;/span&gt;not found
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So we can see that Photon OS doesn't come canned with some of the common tools we expect in a base Linux install, but we can get them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;tdnf &lt;span class="nb"&gt;install &lt;/span&gt;wget

Installing:
wget                     x86_64       1.20.3-1.ph3     photon-updates   2.80M 2936976

Total installed size:   2.80M 2936976
Is this ok &lt;span class="o"&gt;[&lt;/span&gt;y/N]: y

Downloading:
wget                                   1128116   100%
Testing transaction
Running transaction
Installing/Updating: wget-1.20.3-1.ph3.x86_64

Complete!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ok, Let's try that original again... one line at a time&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;wget https://rpm.octopus.com/tentacle.repo &lt;span class="nt"&gt;-O&lt;/span&gt; /etc/yum.repos.d/tentacle.repo
&lt;span class="nt"&gt;--2021-01-27&lt;/span&gt; 15:39:45--  https://rpm.octopus.com/tentacle.repo
Resolving rpm.octopus.com... 104.20.11.14, 104.20.10.14, 2606:4700:10::6814:a0e, ...
Connecting to rpm.octopus.com|104.20.11.14|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 156 &lt;span class="o"&gt;[&lt;/span&gt;application/octet-stream]
Saving to: ‘/etc/yum.repos.d/tentacle.repo’

/etc/yum.repos.d/te 100%[&lt;span class="o"&gt;===================&amp;gt;]&lt;/span&gt;     156  &lt;span class="nt"&gt;--&lt;/span&gt;.-KB/s    &lt;span class="k"&gt;in &lt;/span&gt;0s

2021-01-27 15:39:46 &lt;span class="o"&gt;(&lt;/span&gt;34.0 MB/s&lt;span class="o"&gt;)&lt;/span&gt; - ‘/etc/yum.repos.d/tentacle.repo’ saved &lt;span class="o"&gt;[&lt;/span&gt;156/156]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That worked and now we have the octopus tentacle repo added. We should be able to install next.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;yum &lt;span class="nb"&gt;install &lt;/span&gt;tentacle
Refreshing metadata &lt;span class="k"&gt;for&lt;/span&gt;: &lt;span class="s1"&gt;'Octopus Tentacle'&lt;/span&gt;
Error: 403 when downloading https://rpm.octopus.com/x86_64//repodata/repomd.xml
&lt;span class="nb"&gt;.&lt;/span&gt; Please check repo url.
Error&lt;span class="o"&gt;(&lt;/span&gt;1622&lt;span class="o"&gt;)&lt;/span&gt; : Invalid argument
Error: Failed to synchronize cache &lt;span class="k"&gt;for &lt;/span&gt;repo &lt;span class="s1"&gt;'Octopus Tentacle'&lt;/span&gt; from &lt;span class="s1"&gt;'https://rpm.octopus.com/x86_64/'&lt;/span&gt;
Disabling Repo: &lt;span class="s1"&gt;'Octopus Tentacle'&lt;/span&gt;
Error&lt;span class="o"&gt;(&lt;/span&gt;1011&lt;span class="o"&gt;)&lt;/span&gt; : No matching packages
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Oops, the tentacle repo seems to not work right. Looks like the URL is malformed (note the double / in there.) We will need to modify that repository entry.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;vi /etc/yum.repos.d/tentacle.repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and change the line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;baseurl=https://rpm.octopus.com/$basearch/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;baseurl=https://rpm.octopus.com/$basearch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Removing the trailing slash should allow it to work right.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;yum &lt;span class="nb"&gt;install &lt;/span&gt;tentacle
Refreshing metadata &lt;span class="k"&gt;for&lt;/span&gt;: &lt;span class="s1"&gt;'Octopus Tentacle'&lt;/span&gt;
1. nothing provides openssl-libs needed by tentacle-6.0.390-1.x86_64
Found 1 problem&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;while &lt;/span&gt;resolving
Error&lt;span class="o"&gt;(&lt;/span&gt;1301&lt;span class="o"&gt;)&lt;/span&gt; : Solv general runtime error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Well this one is a problem. OpenSSL is installed in the base build of Photon OS, but nothing allows OpenSSL-Libs to be installed.&lt;/p&gt;

&lt;p&gt;I can tell you from my experience, as best as I know, installing the Octopus Tentacle via RPM is a dead end for now. I've added an issue to the Photon OS' GitHub issue list requesting the OpenSSL-Libs package be included.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we learned
&lt;/h2&gt;

&lt;p&gt;We learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Photon OS comes out of the box, very, very lean and thus needs the following packages installed from the Photon Repositories.

&lt;ul&gt;
&lt;li&gt;wget - to get things from the web&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;I'm not clear on which party is at fault, but adding the Tentacle Repository resulted in the malformed URL being tried. We needed to modify the repo URL manually to remove the extra slash.&lt;/li&gt;

&lt;li&gt;Photon OS's package repositories don't include a OpenSSL-Libs package to satisfy the Tentacle's RPM Dependencies.&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;Lets skip some of the rest of the trial and error...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;del&gt;Install OpenSSL from source&lt;/del&gt; This was a false result!

&lt;ul&gt;
&lt;li&gt;I had originally believed this was the case, but in the process of writing this post, I tried the steps and couldn't replicate the results. Somewhere along the line I did something I didn't document that was the real cause of success. I started over and, with some more diligent tracking, discovered what really works.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Setup remaining dependencies&lt;/li&gt;

&lt;li&gt;Use the Archive method from &lt;a href="https://octopus.com/docs/infrastructure/deployment-targets/linux/tentacle" rel="noopener noreferrer"&gt;the documentation&lt;/a&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Non-Optional: Things that actually work
&lt;/h1&gt;

&lt;p&gt;OK, if you didn't skip the optional stuff, you know that Photon OS is very lean and doesn't come with some quality of life things like &lt;code&gt;wget&lt;/code&gt; preinstalled. We also learned there is some packages we would expect to be able to install but just aren't available on the provided repositories. OpenSSL-libs for example.&lt;/p&gt;

&lt;h2&gt;
  
  
  Actual Steps that allow the Octopus Tentacle to function on Photon OS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;install libstdc++ tar sudo zlib-devel and icu packages&lt;/li&gt;
&lt;li&gt;create/copy a lsb_release script&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  lsb_release
&lt;/h2&gt;

&lt;p&gt;The Octopus Tentacle calls lsb_release and uses the output during its Health Checks. Thus if it is missing the Health Check will result in a warning. Photon OS doesn't provide lsb_release. I looked into lsb_release on &lt;a href="https://archlinux.org/" rel="noopener noreferrer"&gt;Arch Linux&lt;/a&gt; (my current go-to flavor) and found it to be a script. I copied it from an Arch Linux install and it seems to satisfy the Octopus Tentacles.&lt;br&gt;
I'll leave this step as an exercise to the reader. I couldn't find a good way to provide the lsb_release script that I used. I literally copied the text of the script into a new &lt;code&gt;/usr/bin/lsb_release&lt;/code&gt; file, then set its executable flag.&lt;br&gt;
I've not looked into better alternatives. I'm excited to see the recommendations of people with more knowledge in this area!&lt;/p&gt;
&lt;h2&gt;
  
  
  Installing &amp;amp; Configuring the Tentacle
&lt;/h2&gt;

&lt;p&gt;The Linux Octopus Tentacle requires a few things to get started so let's get those installed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;RUN tdnf &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;libstdc++ &lt;span class="nb"&gt;tar sudo &lt;/span&gt;zlib-devel icu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: the libstdc++ was needed when I was testing this in with the photon Docker image, but appears to be already installed in VMware's downloadable VMs.&lt;/p&gt;

&lt;p&gt;Next let's get the Tentacle archive installer (again from the documentation, also modified to be more succinct):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;span class="nv"&gt;$ &lt;/span&gt;wget https://octopus.com/downloads/latest/Linux_x64TarGz/OctopusTentacle &lt;span class="nt"&gt;-O&lt;/span&gt; tentacle-linux_x64.tar.gz

&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /opt/octopus
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;tar &lt;/span&gt;xvzf tentacle-linux_x64.tar.gz &lt;span class="nt"&gt;-C&lt;/span&gt; /opt/octopus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point, the instructions at Octopus tell you to execute &lt;code&gt;configure-tentacle.sh&lt;/code&gt; but that doesn't work right away as it doesn't have the executable flag set.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x /opt/octopus/tentacle/configure-tentacle.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Great, now we can configure the tentacle service&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;/opt/octopus/tentacle/configure-tentacle.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will ask you several questions related to configuring the Octopus tentacle.  If you've not already, now is the time to get into your Octopus Instance and start getting ready there...&lt;/p&gt;

&lt;h2&gt;
  
  
  Octopus and Tentacles
&lt;/h2&gt;

&lt;p&gt;Octopus Deploy acts through agents called Tentacles. The Octopus server instance, either on-premises or their Cloud offering can do Polling Tentacles that reach out periodically to the server to see if there are any instructions, Listening Tentacles that wait for a communication from the server as needed and SSH targets that communicated over SSH on demand. We'll be configuring our tentacle as a Listening Tentacle.  If your network has a firewall and/or router between the Octopus Server and the Tentacle, you will likely need to add some port forwarding or other firewall rules to allow communication to work as expected.&lt;/p&gt;

&lt;p&gt;Octopus Tentacles by default use the TCP port 10933 to communicate but it configurable and often required. I use those ports plus others to communicate between Octopus Cloud and my tentacles though my firewall, each tentacle has an assigned port number and paired port forwarding at the router.&lt;/p&gt;

&lt;p&gt;Let's now start configuring the Tentacle in Octopus,&lt;br&gt;
In your Octopus Dashboard, under the Infrastructure Deployment Targets area, there is a big, handy button for Add Development Target.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsutwc7buifouvmyvn8lo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsutwc7buifouvmyvn8lo.png" alt="Octopus new tentacle choices" width="800" height="204"&gt;&lt;/a&gt;&lt;br&gt;
This launches a short wizard that walks you through registering the Tentacle.&lt;br&gt;
Select the Linux and Listening Tentacle options:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F48jr4xmr6mhutgc7gild.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F48jr4xmr6mhutgc7gild.png" alt="Octopus infrastructure header menus" width="299" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next screen has many options that instruct Octopus how to connect to and communicate with your Tentacle:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffj70rdqwjkv2nzubgy2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffj70rdqwjkv2nzubgy2k.png" alt="Octopus tentacle configuration" width="800" height="771"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Octopus Server Thumbprint, used as part of the secure communication between Server and Tentacle. You will use this code when configuring the Tentacle.&lt;/li&gt;
&lt;li&gt;The DNS Hostname or IP Address of the server. If you are behind a router, this will be your router IP/Hostname or the machine hostname if on the same network as the server. I use a dynamic DNS setup.&lt;/li&gt;
&lt;li&gt;The Port number to be used for communication. This will need to be the port as available to the Octopus Server if you've configured a port change during port forwarding setup.&lt;/li&gt;
&lt;li&gt;Proxy configuration. Hopefully you will know if you need to configure the proxy and be able to get that information from your network admin.&lt;/li&gt;
&lt;li&gt;The Next button will initiate Discovery (trying to talk to the tentacle, so just hold tight)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Configure the tentacle
&lt;/h2&gt;

&lt;p&gt;If you've not yet started the config utility for your tentacle, run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;/opt/octopus/tentacle/configure-tentacle.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your first prompt will be&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Name of Tentacle instance &lt;span class="o"&gt;(&lt;/span&gt;default Tentacle&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will give you a chance to give the Tentacle instance a specific name if you choose. I'm using the default.&lt;br&gt;
Next prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;What kind of Tentacle would you like to configure: 1&lt;span class="o"&gt;)&lt;/span&gt; Listening or 2&lt;span class="o"&gt;)&lt;/span&gt; Polling &lt;span class="o"&gt;(&lt;/span&gt;default 1&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case, we are using a Listening Tentacle so the default is fine.&lt;br&gt;
The next two options relate to log files and artifact deployment locations. Again I used the defaults.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Where would you like Tentacle to store log files? &lt;span class="o"&gt;(&lt;/span&gt;/etc/octopus&lt;span class="o"&gt;)&lt;/span&gt;:
Where would you like Tentacle to &lt;span class="nb"&gt;install &lt;/span&gt;applications to? &lt;span class="o"&gt;(&lt;/span&gt;/home/Octopus/Applications&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The next prompt is the Port number to listen on. Be sure this matches up with the Port number as assigned in Octopus OR the port number on the private side of your port forwarding configuration. Today I'm using port 10939:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Enter the port that this Tentacle will listen on &lt;span class="o"&gt;(&lt;/span&gt;10933&lt;span class="o"&gt;)&lt;/span&gt;:10939
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next is the very important Octopus Thumbprint mentioned earlier. If possible copy-paste this to prevent errors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Enter the thumbprint of the Octopus Server: 25------------------------------------EC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then a note will be displayed informing you of the configurations that will be run. As instructed, press enter to continue!&lt;/p&gt;

&lt;p&gt;Hopefully when all is done, you will see this message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tentacle instance 'Tentacle' is now installed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One thing we have yet to do is allow port access at the OS level. This will be done with an addition to iptables&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;iptables &lt;span class="nt"&gt;-A&lt;/span&gt; INPUT &lt;span class="nt"&gt;-p&lt;/span&gt; tcp &lt;span class="nt"&gt;--dport&lt;/span&gt; 10939 &lt;span class="nt"&gt;-j&lt;/span&gt; ACCEPT
&lt;span class="nv"&gt;$ &lt;/span&gt;iptables-save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;At first glance, running an Octopus Tentacle on Photon OS is not easily accomplished. However after a few false starts, based on some faulty assumptions, I did find a fairly simple path to success. They key missing pieces are the zlib-devel and icu packages along with a functioning lsb_release script.&lt;br&gt;
A properly functioning Octopus Deploy Target provides may benefits such as Machine Health alerts and monitoring. Being able to orchestrate your Docker container activities with Octopus has smoothed out several of my own personal project's infrastructure considerations.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftn6p8uqv7yf2u4k5ys10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftn6p8uqv7yf2u4k5ys10.png" alt="Octopus Project Dashboard" width="556" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Recent Updates (as of 2022-01-06)
&lt;/h1&gt;

&lt;p&gt;Recently, it seems Octopus's method of tentacle self update has changed to try to use the host's package managers. Unfortunately this isn't method still doesn't work well on Photon OS. I had to re-perform the download and tar extraction steps and restart the service with &lt;code&gt;systemctl&lt;/code&gt;. I don't yet know if this was a one-time or every-time change to behaviour but I will add an update here after I find out.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>linux</category>
      <category>devops</category>
      <category>howto</category>
    </item>
    <item>
      <title>DISCUSS: What scale is your CI/CD and Which tools/platforms do you use?</title>
      <dc:creator>Ryan Brown</dc:creator>
      <pubDate>Thu, 04 Feb 2021 18:18:27 +0000</pubDate>
      <link>https://dev.to/ryencode/discuss-what-scale-is-your-ci-cd-and-which-tools-platforms-do-you-use-6l2</link>
      <guid>https://dev.to/ryencode/discuss-what-scale-is-your-ci-cd-and-which-tools-platforms-do-you-use-6l2</guid>
      <description>&lt;p&gt;The company I work for is looking to migrate CI/CD tool and platforms. We have a large number of individually deployable assets built from (300+) of various kinds. We are NOT a software company and most of the projects are tiny.&lt;/p&gt;

&lt;p&gt;I'm curious about other people's setups:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What kind of organization is it (Mostly is your core business making software or technology products or support the core business)&lt;/li&gt;
&lt;li&gt;About how many projects/pipelines etc does your org maintain&lt;/li&gt;
&lt;li&gt;Which platforms you use, why and does it work well at the scale you operate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks, and I'll start!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I work for a resource extraction company and we use technology to support the core business.&lt;/li&gt;
&lt;li&gt;We have about 350 "active" projects that are deployed to production, most common types are web apps, database projects (scripts etc), reporting and Business Intelligence assets along with a smattering of think-apps and other more exotic items.&lt;/li&gt;
&lt;li&gt;Currently we use TeamCity and Octopus Deploy to great effect and have great tie-ins with our tracking system of Atlassian JIRA&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Looking forward to hear from you!&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
  </channel>
</rss>
