<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Enterprise IT on shocksolution.com</title><link>https://shocksolution.com/tags/enterprise-it/</link><description>Recent content in Enterprise IT on shocksolution.com</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 29 Apr 2022 18:57:01 +0000</lastBuildDate><atom:link href="https://shocksolution.com/tags/enterprise-it/index.xml" rel="self" type="application/rss+xml"/><item><title>Google Cloud Build for Cloud Functions</title><link>https://shocksolution.com/posts/google-cloud-build-for-cloud-functions/</link><pubDate>Fri, 29 Apr 2022 18:57:01 +0000</pubDate><guid>https://shocksolution.com/posts/google-cloud-build-for-cloud-functions/</guid><description>&lt;p&gt;This post aims to add some missing information to Google&amp;rsquo;s docs about setting up CI/CD for Cloud Functions with Cloud Build.&lt;/p&gt;&#10;&lt;h2 id="global-vs-regional"&gt;Global vs Regional&lt;/h2&gt;&#10;&lt;p&gt;Cloud Build triggers are &lt;strong&gt;global&lt;/strong&gt;by default. You can create a regional trigger in the Cloud Console by changing the location when editing or creating a trigger.&lt;strong&gt;NOTE:&lt;/strong&gt; I can&amp;rsquo;t find any way at all to create a regional trigger with Terraform.&lt;/p&gt;&#10;&lt;p&gt;However, functions must be &lt;strong&gt;regional&lt;/strong&gt;. The &lt;a href="https://cloud.google.com/build/docs/deploying-builds/deploy-functions"&gt;Google docs&lt;/a&gt; indicate that you must specify a region in your cloud build config file. If you&amp;rsquo;re using a global trigger, the &lt;code&gt;`$LOCATION`&lt;/code&gt; &lt;a href="https://cloud.google.com/build/docs/configuring-builds/substitute-variable-values"&gt;substitution variable&lt;/a&gt; is set to &lt;code&gt;global&lt;/code&gt;, and you&amp;rsquo;ll get a permission error when trying to deploy to a regional function. There are two options that I know of, and neither is great:&lt;/p&gt;</description></item><item><title>Terraform: for_each on a list of resources</title><link>https://shocksolution.com/posts/terraform-for_each-on-a-list-of-resources/</link><pubDate>Thu, 10 Mar 2022 18:25:02 +0000</pubDate><guid>https://shocksolution.com/posts/terraform-for_each-on-a-list-of-resources/</guid><description>&lt;p&gt;Terraform provides a very simply way to use for_each to iterate over a list of resources. If you have a list of strings, use the toset() function to convert the list to a set of strings.&lt;/p&gt;&#10;&lt;h2 id="example-assign-a-unique-role-on-each-resource"&gt;Example: assign a unique role on each resource&lt;/h2&gt;&#10;&lt;p&gt;My use case is setting up a number of dev environments in Google Cloud Platform. The number may change as the size of the dev team increases, so I don&amp;rsquo;t want to hard-code the number of resources anywhere in my Terraform code. The number of environments is stored in the &lt;code&gt;num_envs&lt;/code&gt; variable. For this example, I want to create a group of resources (Google Cloud Storage buckets). Each environment has its own service account, and I want each environment&amp;rsquo;s service account to have a specific role on that environment&amp;rsquo;s bucket. I also want to leverage official Google-supported Terraform modules whenever possible.&lt;/p&gt;</description></item><item><title>Using SSL Certificates with the Apache Tomcat Web Server</title><link>https://shocksolution.com/posts/using-ssl-certificates-with-the-apache-tomcat-web-server/</link><pubDate>Tue, 30 Nov 2021 03:20:26 +0000</pubDate><guid>https://shocksolution.com/posts/using-ssl-certificates-with-the-apache-tomcat-web-server/</guid><description>&lt;h2 id="creating-pkcs12-files"&gt;Creating PKCS12 Files&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/PKCS_12"&gt;PKCS #12&lt;/a&gt; is a format for storing multiple cryptography objects in a single archive file. You can store arbitrarily complex objects within a PKCS #12 archive, but the most common use is to store a single private key and its certificate chain. Create a PKCS12 file from PEM files:&lt;/p&gt;&#10;&lt;div class="code-block"&gt;&#10; &lt;button class="code-copy" type="button" hidden aria-label="Copy code to clipboard"&gt;&#10; &lt;span class="code-copy-label" aria-hidden="true"&gt;Copy&lt;/span&gt;&#10; &lt;/button&gt;&#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;openssl pkcs12 -export -in ssl_cert.pem -inkey key.pem -certfile bundle.crt -name &amp;#34;*.example.com&amp;#34; -out example.com.p12&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&lt;p&gt;Depending on the product you&amp;rsquo;re working with, the documentation may call for a .pfx file instead of a .p12 file. PFX is an older format that was a predecessor to PKCS #12. In most modern systems, A PFX FILE AND A P12 FILE ARE EXACTLY THE SAME THING! You can just change the extension if needed and that will generally work. For example, the &lt;a href="https://shocksolution.com/2020/11/11/use-an-ssl-tls-certificate-with-eset-security-management-center-appliance/" title="Use%20an%20SSL/TLS%20Certificate%20with%20ESET%20Security%20Management%20Center%20Appliance"&gt;docs for ESET Security Management Center call for a pfx file, but a PKCS12 file will work just fine&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Auto-Create Multiple Blocks in a Terraform Resource</title><link>https://shocksolution.com/posts/auto-create-multiple-blocks-in-a-terraform-resource/</link><pubDate>Fri, 12 Nov 2021 16:35:50 +0000</pubDate><guid>https://shocksolution.com/posts/auto-create-multiple-blocks-in-a-terraform-resource/</guid><description>&lt;p&gt;Learn how to automatically create multiple Terraform resources, and multiple blocks within one Terraform resource, using the for_each meta-argument and dynamic blocks.&lt;/p&gt;&#10;&lt;h2 id="creating-multiple-resources"&gt;Creating Multiple Resources&lt;/h2&gt;&#10;&lt;p&gt;When using Terraform in a realistic environment (e.g. not a lab or tutorial), you often need to create automatically create multiple resources based on a list or map of data. This article reviews the options for creating resources based on data.There are two general methods to choose from when creating multiple resources:&lt;/p&gt;</description></item><item><title>The Best Mental Model for Writing Terraform Code</title><link>https://shocksolution.com/posts/the-best-mental-model-for-writing-terraform-code/</link><pubDate>Tue, 19 Oct 2021 03:48:29 +0000</pubDate><guid>https://shocksolution.com/posts/the-best-mental-model-for-writing-terraform-code/</guid><description>&lt;p&gt;This article explains my current mental model of Terraform, in the hope that it will save you some time in your learning process. The foundation of using any programming language or software tool correctly is to develop a valid mental model for it, and refine your model as you learn more. There isn&amp;rsquo;t one correct mental model, and your mental model must evolve as your understanding grows.&lt;/p&gt;&#10;&lt;p&gt;Your introduction to writing Terraform code is usually through a very simple example. Unfortunately, simple examples can obscure some of the fundamental concepts of the language. For example, when I first started with Terraform, I did not understand the difference between a variable and a local. Variables need to be declared in a .tf file and defined (assigned a value) in a .tfstate file (or through other means). Variables seem complicated compared to locals. You can just assign a variable to a local and start using it, like a variable in Python. Why use variables when locals seem so much easier?&lt;/p&gt;</description></item><item><title>Define a Google Load Balancer and Cloud Storage bucket with Terraform</title><link>https://shocksolution.com/posts/define-a-google-load-balancer-and-cloud-storage-bucket-with-terraform/</link><pubDate>Thu, 30 Sep 2021 18:11:54 +0000</pubDate><guid>https://shocksolution.com/posts/define-a-google-load-balancer-and-cloud-storage-bucket-with-terraform/</guid><description>&lt;p&gt;Here&amp;rsquo;s an example of using Terraform to define resources to host static content in a Google Cloud Storage bucket, fronted by a Cloud Load Balancer with a custom URL and SSL certificate. This example uses some other advanced features, such as Google Secrets and a map variable to define the SSL certificates. It&amp;rsquo;s pulled from a larger project, so this block of code isn&amp;rsquo;t guaranteed to run as-is. At a minimum, you&amp;rsquo;ll need to define the variables and set values.&lt;/p&gt;</description></item><item><title>Multi-Page Blueprints for Confluence</title><link>https://shocksolution.com/posts/multi-page-blueprints-for-confluence/</link><pubDate>Wed, 05 May 2021 20:37:05 +0000</pubDate><guid>https://shocksolution.com/posts/multi-page-blueprints-for-confluence/</guid><description>&lt;p&gt;A free demo app is available in the Atlassian Marketplace which supports multi-page blueprints for Confluence. This app works around numerous bugs in the official Atlassian blueprint tutorials and a key Atlassian API bug.&lt;/p&gt;&#10;&lt;h2 id="background-on-confluence"&gt;Background on Confluence&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://%3Cwww.atlassian.com/software/confluence%3E"&gt;Confluence&lt;/a&gt; is one of the leading enterprise wiki products. Its built-in feature set is already very powerful, and it can be extended with &lt;a href="https://marketplace.atlassian.com/addons/app/confluence"&gt;applications available in the Atlassian Marketplace&lt;/a&gt;. You can also write your own applications for private, internal use. Atlassian provides the &lt;a href="https://bitbucket.org/atlassian/atlassian-connect-express/src/master/"&gt;atlassian-connect-express toolkit for building apps with Node.js&lt;/a&gt;, which reduces development time and effort. They also provide a number of &lt;a href="https://bitbucket.org/atlassianlabs/workspace/projects/ATL"&gt;sample projects for Jira and Confluence apps&lt;/a&gt; on Bitbucket. Unfortunately, many of these examples are obsolete or deprecated, and do not function correctly with the latest version of atlassian-connect-express or the latest release of Confluence and Jira.&lt;/p&gt;</description></item><item><title>Enable Port Statistics on a Netgear M4200/M4300 Switch</title><link>https://shocksolution.com/posts/enable-port-statistics-on-netgear-m4200-m4300-switch/</link><pubDate>Mon, 18 Jan 2021 20:12:08 +0000</pubDate><guid>https://shocksolution.com/posts/enable-port-statistics-on-netgear-m4200-m4300-switch/</guid><description>&lt;p&gt;You can enable detailed port statistics via the command-line interface (CLI) on switches in the Netgear M4200/M4300 family. I will explain how to set up a time range and port group, and apply them to a port or range of ports to gather throughput data. This post will make up for some shortcomings in &lt;a href="https://%3Cwww.downloads.netgear.com/files/GDC/M4200/M4200-M4300_CLI_EN.pdf%3E"&gt;Netgear&amp;rsquo;s CLI documentation&lt;/a&gt; about enabling and gathering switching statistics.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;NOTE: you must enter commands &lt;code&gt;enable&lt;/code&gt; and &lt;code&gt;configure&lt;/code&gt; to enter administrative configuration mode prior to setting a time range or port statistics.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Use an SSL/TLS Certificate with ESET Security Management Center Appliance</title><link>https://shocksolution.com/posts/use-an-ssl-tls-certificate-with-eset-security-management-center-appliance/</link><pubDate>Wed, 11 Nov 2020 21:19:29 +0000</pubDate><guid>https://shocksolution.com/posts/use-an-ssl-tls-certificate-with-eset-security-management-center-appliance/</guid><description>&lt;p&gt;ESET Security Management Center (ESMC) is the replacement for the ESET Remote Administrator (ERA) Server. You can install ESMC as a &amp;ldquo;virtual appliance&amp;rdquo; which will run on hosts such as VMWare or Linux/KVM/QEMU. Under the hood, this appliance is a CentOS 7 server running the Apache Tomcat web server. ESMC is implemented as a Java application that runs as a systemd service. In my experience, ESET is a solid security product, and the free ERA/ESMC provides some rudimentary endpoint management capabilities. Unfortunately, everything about ESET is confusing, from the naming of their products to their documentation. The documentation is thorough&amp;hellip;it&amp;rsquo;s just hard to find what you&amp;rsquo;re looking for, which is usually in multiple overlapping documents that each contain part of the puzzle.&lt;/p&gt;</description></item><item><title>Alert Policies for Log Metrics on Google Stackdriver Monitoring</title><link>https://shocksolution.com/posts/alert-policies-for-log-metrics-on-google-stackdriver-monitoring/</link><pubDate>Tue, 08 Sep 2020 16:31:08 +0000</pubDate><guid>https://shocksolution.com/posts/alert-policies-for-log-metrics-on-google-stackdriver-monitoring/</guid><description>&lt;p&gt;Google Cloud Operations, formerly known as Stackdriver Logging and Monitoring, can be very confusing to set up. It&amp;rsquo;s easy to monitor something simple, but more complex cases quickly get confusing. One of the more flexible but confusing types of alert policies in Stackdriver Monitoring is a Logs-Based Metrics policy, which gives you the ability to monitor entries in Stackdriver Logging.&lt;/p&gt;&#10;&lt;h2 id="create-a-logs-based-metric"&gt;Create a Logs-Based Metric&lt;/h2&gt;&#10;&lt;p&gt;The first step is to go to Stackdriver (Operations) Logging and create a user-defined metric. Go to the Logs Viewer and build a query to return the subset of log entries that you want to monitor (the details of query building are beyond the scope of this article). As of Sept. 2020, I highly recommend enabling the Preview Mode of the Logs Viewer interface, which is much better at guiding you through the process of building the query. If you must use the Classic interface, click the little black arrow at the right side of the filter box, near the top of the Logs Viewer screen. Select &amp;ldquo;Convert to advanced filter&amp;rdquo; from the drop-down menu, and &lt;a href="https://cloud.google.com/logging/docs/view/advanced-queries"&gt;create an advanced filter using the query language&lt;/a&gt;. Once you have created the right filter (query) that selects the log entries that you want to monitor, proceed to the next step:&lt;/p&gt;</description></item><item><title>Dynamic node groups with Salt</title><link>https://shocksolution.com/posts/dynamic-node-groups-with-salt/</link><pubDate>Mon, 13 Apr 2020 12:53:00 +0000</pubDate><guid>https://shocksolution.com/posts/dynamic-node-groups-with-salt/</guid><description>&lt;p&gt;Salt is a great choice for a configuration management system. I have found that it scales well, both in terms of number of nodes, and complexity of configurations. However, I have found one aspect of Salt that remains under-developed: Salt doesn&amp;rsquo;t have great support for custom groupings of minions. Minion groups (which could also be called node groups, host groups, instance groups, etc.) allow you to target a predefined group of minions.&lt;/p&gt;</description></item><item><title>How to use SSL/TLS certificates on a Netgear M4200/4300 switch</title><link>https://shocksolution.com/posts/ssl-tls-certificates-netgear-m4200-4300-switch/</link><pubDate>Fri, 03 Apr 2020 03:50:18 +0000</pubDate><guid>https://shocksolution.com/posts/ssl-tls-certificates-netgear-m4200-4300-switch/</guid><description>&lt;p&gt;If you operate a Netgear switch in an environment that is subject to compliance requirements such as PCI or HIPAA, you are probably doing vulnerability scans, and the HTTP management interface of your switches will generate medium vulnerabilities (at least from Nessus):&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;SSL Self-Signed Certificate&lt;/em&gt;SSL Certificate Cannot Be Trusted* SSL Certificate Expiry&lt;/p&gt;&#10;&lt;p&gt;It &lt;strong&gt;IS&lt;/strong&gt; possible to use signed certificates to secure the HTTPS interface on a Netgear switch, but the process to do so is insanely obscure. I do not know how someone had time to figure this out! Apparently, even Netgear tech support didn&amp;rsquo;t have any idea.&lt;/p&gt;</description></item><item><title>2020 Ubiquiti Wireless Access Point (WAP) Roundup</title><link>https://shocksolution.com/posts/2020-ubiquiti-wireless-access-point-wap-roundup/</link><pubDate>Tue, 21 Jan 2020 18:05:28 +0000</pubDate><guid>https://shocksolution.com/posts/2020-ubiquiti-wireless-access-point-wap-roundup/</guid><description>&lt;p&gt;Ubiquiti publishes detailed data sheets for all of their products, but it&amp;rsquo;s hard to find all the information you need in one place for comparison purposes. That&amp;rsquo;s the purpose of this article.&lt;/p&gt;&#10;&lt;h2 id="first-generation-access-points"&gt;First Generation Access Points&lt;/h2&gt;&#10;&lt;p&gt;It can be confusing to distinguish between the &lt;a href="https://help.ubnt.com/hc/en-us/articles/360012192813#3"&gt;generations of UniFi access points&lt;/a&gt;; you have to look at the access point label, or access it via the UniFi software to see the version. The performance difference between generations are significant. The &lt;a href="https://dl.ubnt.com/datasheets/unifi/UniFi_AP_DS.pdf"&gt;datasheet for first generation Ubiquiti UAP wireless access points&lt;/a&gt; is still available.&lt;/p&gt;</description></item><item><title>Monitoring a switch or router port via SNMP</title><link>https://shocksolution.com/posts/monitoring-a-switch-or-router-port-via-snmp/</link><pubDate>Mon, 16 Dec 2019 20:19:52 +0000</pubDate><guid>https://shocksolution.com/posts/monitoring-a-switch-or-router-port-via-snmp/</guid><description>&lt;p&gt;Most business-class switches and routers support monitoring via SNMP. The main barrier to implementing SNMP monitoring is that so many parameters can be monitored, and it can be very hard to isolate the most important parameters. This example shows how to monitor the status of a specific port. Note that the term &amp;ldquo;port&amp;rdquo; includes link aggregation groups (LAGs) or other logical groups of ports like VLANs.&lt;/p&gt;&#10;&lt;h2 id="use-case"&gt;Use Case&lt;/h2&gt;&#10;&lt;p&gt;A top-of-rack switch has several important link aggregation groups (LAGs). For example, one LAG has connections to two identical routers in a VRRP cluster. Other LAGs provide redundant network paths to independent NICs on the same server. I want to be alerted if the port status changes on any critical LAG. The ISP delivers Internet to a single port on the switch, which I also want to monitor.&lt;/p&gt;</description></item><item><title>openssl unable to read/load/import SSL private key from GoDaddy</title><link>https://shocksolution.com/posts/openssl-unable-to-read-load-import-ssl-private-key-from-godaddy/</link><pubDate>Mon, 02 Dec 2019 13:24:00 +0000</pubDate><guid>https://shocksolution.com/posts/openssl-unable-to-read-load-import-ssl-private-key-from-godaddy/</guid><description>&lt;p&gt;&lt;a href="https://%3C%3Cwww.openssl.org/&amp;amp;gt%3E;"&gt;openssl&lt;/a&gt; is the standard open-source, command-line tool for manipulating SSL/TLS certificates on Linux, MacOS, and other UNIX-like systems. I recently ran into an interesting problem using openssl to convert a private key obtained from GoDaddy. Someone else used GoDaddy&amp;rsquo;s &amp;ldquo;wizard&amp;rdquo; interface to generate a certificate signing request (CSR) and private key, and saved the files on their Windows workstation. They purchased an SSL cert from GoDaddy, and shared all the files with me for installation on servers. GoDaddy saved the private key in the newer &lt;a href="https://en.wikipedia.org/wiki/PKCS_8"&gt;PKCS #8 format (pkcs8)&lt;/a&gt;, and one system required the key in the older &lt;a href="https://en.wikipedia.org/wiki/PKCS_1"&gt;PKCS #1 (pkcs1) format&lt;/a&gt;. It&amp;rsquo;s easy to tell the difference.&lt;/p&gt;</description></item><item><title>Nginx default user changed in RedHat/CentOS package nginx-1.16.1-1.el7</title><link>https://shocksolution.com/posts/nginx-default-user-changed-in-redhat-centoos-package/</link><pubDate>Tue, 12 Nov 2019 02:58:34 +0000</pubDate><guid>https://shocksolution.com/posts/nginx-default-user-changed-in-redhat-centoos-package/</guid><description>&lt;p&gt;The &lt;a href="https://centos.pkgs.org/7/epel-x86_64/nginx-1.16.1-1.el7.x86_64.rpm.html"&gt;latest Nginx rpm (nginx-1.16.1-1.el7) from EPEL&lt;/a&gt; for CentOS/Redhat is a &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=1750857"&gt;fairly major update, from version 1.12 to 1.16, and includes some very important fixes to address multiple CVE&lt;/a&gt;s. There is another small but critical change in the latest RPM that isn&amp;rsquo;t mentioned in the bug report. RedHat had configured nginx to run as user &amp;ldquo;apache&amp;rdquo; in past releases, but in the EPEL release on 19 October 2019, the configuration was changed to run as user &amp;ldquo;nginx&amp;rdquo;. If you ran &amp;ldquo;yum upgrade&amp;rdquo; recently (which you really need to do on a regular basis) on any system with nginx installed, you probably have a system that is affected.&lt;/p&gt;</description></item><item><title>mount.cifs error 13 after update (CentOS/RedHat Linux 7.6)</title><link>https://shocksolution.com/posts/mount-cifs-error-13-after-update-centos-redhat-linux-7-6/</link><pubDate>Wed, 23 Oct 2019 16:23:48 +0000</pubDate><guid>https://shocksolution.com/posts/mount-cifs-error-13-after-update-centos-redhat-linux-7-6/</guid><description>&lt;figure class="ma0 w-75"&gt;&lt;img src="https://shocksolution.com/images/hidde-van-esch-m4N7onAg1oE-unsplash.jpg"&#10;&#9;&#9;&#9;alt="PERMISSION DENIED"&gt;&lt;figcaption&gt;&#10;&#9;&#9;&#9;&lt;p&gt;PERMISSION DENIED&lt;/p&gt;&#10;&#9;&#9;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;PERMISSION DENIED (Photo by &lt;a href="https://unsplash.com/@holoz?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Hidde van Esch&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/denied?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;)&lt;/p&gt;&#10;&lt;p&gt;If you recently updated your RedHat or CentOS 7.6 system, you may suddenly start getting &amp;ldquo;Permission Denied&amp;rdquo; errors when attempting to mount SMB shares via CIFS. Typical error messages in syslog look like this:&lt;/p&gt;&#10;&lt;div class="code-block"&gt;&#10; &lt;button class="code-copy" type="button" hidden aria-label="Copy code to clipboard"&gt;&#10; &lt;span class="code-copy-label" aria-hidden="true"&gt;Copy&lt;/span&gt;&#10; &lt;/button&gt;&#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kernel: Status code returned 0xc000006d STATUS_LOGON_FAILURE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kernel: CIFS VFS: Send error in SessSetup = -13&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kernel: CIFS VFS: cifs_mount failed w/return code = -13&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&lt;h2 id="configuration-that-triggered-the-problem"&gt;Configuration that triggered the problem&lt;/h2&gt;&#10;&lt;p&gt;&lt;em&gt;Synology NAS with latest operating system shares a volume via SMB&lt;/em&gt;CentOS 7 Linux server mounts SMB share using a local username and password (NOT domain credentials)&lt;em&gt;cifs-utils version 6.2 installed in May of 2019 (this by itself worked fine)&lt;em&gt;libsmbclient just updated to 4.9.1-6&lt;/em&gt;libmount just updated to 2.23.2-61&lt;/em&gt;CIFS mount options: vers=3.0,credentials=/root/credentials.txt,sec=ntlmsspi* File /root/credentials.txt contained a username and password that are LOCAL to the SMB server&lt;/p&gt;</description></item><item><title>Secure, Automated Network Device Backups</title><link>https://shocksolution.com/posts/secure-automated-network-device-backups/</link><pubDate>Tue, 03 Sep 2019 16:38:30 +0000</pubDate><guid>https://shocksolution.com/posts/secure-automated-network-device-backups/</guid><description>&lt;p&gt;You probably have at least a few business-class switches and routers silently do their job, year after year. Network devices can be so reliable that we configure them once, and then forget that they exist. However, forgetting them is a really bad idea, since they require regular OS or firmware updates to patch vulnerabilities, and at some point, they will become unreliable and fail. If your device fails, do you have the configuration available to apply to its replacement? Are you sure the configuration that&amp;rsquo;s in your archive or documentation is up to date? This post deals with automating backups from Netgear switches and Ubiquiti EdgeRouters (and possibly switches, if they run EdgeOS). Please check out the accompanying repo at &lt;a href="https://github.com/craigafinch/network-backup-scripts"&gt;&lt;a href="https://github.com/craigafinch/network-backup-scripts"&gt;https://github.com/craigafinch/network-backup-scripts&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Another Reason to Enable Private IP Addresses on Google Cloud SQL</title><link>https://shocksolution.com/posts/another-reason-to-enable-private-ip-addresses-on-google-cloud-sql/</link><pubDate>Wed, 26 Jun 2019 18:16:22 +0000</pubDate><guid>https://shocksolution.com/posts/another-reason-to-enable-private-ip-addresses-on-google-cloud-sql/</guid><description>&lt;p&gt;Google Cloud SQL recently introduced the capability for an instance to have an IP address within the private address space of your VPC network. Previously, all Cloud SQL instances had IP addresses within the address space of the public Internet. Obviously, the public IP was a security and privacy concern, as well as a potential violation of some compliance and governance frameworks. Now, each instance may have a public IP, private IP, or both. There&amp;rsquo;s another potential benefit to using a private IP address: performance!&lt;/p&gt;</description></item><item><title>QNAP NAS: Backup &amp; Sync to Google Cloud Storage</title><link>https://shocksolution.com/posts/qnap-nas-backup-sync-to-google-cloud-storage/</link><pubDate>Sat, 01 Jun 2019 21:17:40 +0000</pubDate><guid>https://shocksolution.com/posts/qnap-nas-backup-sync-to-google-cloud-storage/</guid><description>&lt;p&gt;I have a QNAP NAS at home which I use for file storage. It shares several folders with the family&amp;rsquo;s Mac, Linux, and Windows computers. Many of these files are are irreplaceable, especially our digital photos, so I back them up to the cloud. &lt;a href="https://%3C%3Cwww.qnap.com/solution/hbs3/en/&amp;amp;gt%3E;"&gt;QNAP provides the Hybrid Backup and Sync application&lt;/a&gt;, which supports multiple cloud storage endpoints. QNAP also provides specific documentation for &lt;a href="https://%3C%3Cwww.qnap.com/en/how-to/tutorial/article/how-to-connect-to-google-cloud-storage-with-cloud-backup-sync/&amp;amp;gt%3E;"&gt;backing up and syncing to Google Cloud Storage&lt;/a&gt;. However, QNAP&amp;rsquo;s instructions don&amp;rsquo;t explain how to set up a Google Cloud Storage bucket destination, so here is the procedure I used to set up Google Cloud Storage to back up my QNAP NAS.&lt;/p&gt;</description></item><item><title>Disk space utilization monitoring in Google StackDriver</title><link>https://shocksolution.com/posts/disk-space-utilization-monitoring-in-google-stackdriver/</link><pubDate>Tue, 28 May 2019 18:22:43 +0000</pubDate><guid>https://shocksolution.com/posts/disk-space-utilization-monitoring-in-google-stackdriver/</guid><description>&lt;p&gt;Setting up disk space utilization alerts in Google Stackdriver is almost unbelievably tricky. It&amp;rsquo;s easy to think that you can just choose the metric &amp;ldquo;Disk Utilization&amp;rdquo; and add a condition to alert when disk utilization crosses some threshold for some length of time (such as over 55% for 1 hour).&lt;/p&gt;&#10;&lt;h2 id="file-system-type-filter"&gt;File System Type Filter&lt;/h2&gt;&#10;&lt;p&gt;Your first problem is that a Linux system has many types of file systems, even if it only has one disk. You probably want to alert when your root disk is running out of space; therefore, you need to filter out non-disk filesystems like &lt;a href="https://en.wikipedia.org/wiki/Procfs"&gt;procfs&lt;/a&gt; or tmpfs. Add a device filter to select exactly which devices you want to alert on; in my case, with only one disk per server, I match only on device rootfs.&lt;/p&gt;</description></item><item><title>Managing remote servers with salt-ssh</title><link>https://shocksolution.com/posts/managing-remote-servers-with-salt-ssh/</link><pubDate>Mon, 13 May 2019 21:20:37 +0000</pubDate><guid>https://shocksolution.com/posts/managing-remote-servers-with-salt-ssh/</guid><description>&lt;p&gt;I love using &lt;a href="https://docs.saltstack.com/en/latest/"&gt;Salt&lt;/a&gt; to configure and manage servers at scale. Typically, a Salt master server manages an army of servers which are on the same private network. A salt-minion daemon runs on each client server and communicates with the master. Sometimes you need to manage a server which is outside of your internal network, such as a marketing web server running on a service like AWS LightSail, Linode, or Digital Ocean. That&amp;rsquo;s when salt-ssh comes in handy.&lt;/p&gt;</description></item><item><title>MySQL replication fails with WSREP error after restart</title><link>https://shocksolution.com/posts/mysql-replication-fails-with-wsrep-error-after-restart/</link><pubDate>Mon, 11 Mar 2019 12:16:20 +0000</pubDate><guid>https://shocksolution.com/posts/mysql-replication-fails-with-wsrep-error-after-restart/</guid><description>&lt;h2 id="scenario"&gt;Scenario&lt;/h2&gt;&#10;&lt;p&gt;A single Percona MySQL 5.7 server replicates asynchronously with a cluster of Percona MySQL 5.7 servers. After rebooting the single server, replication failed with the following symptoms:&lt;/p&gt;&#10;&lt;div class="code-block"&gt;&#10; &lt;button class="code-copy" type="button" hidden aria-label="Copy code to clipboard"&gt;&#10; &lt;span class="code-copy-label" aria-hidden="true"&gt;Copy&lt;/span&gt;&#10; &lt;/button&gt;&#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mysql&amp;gt; show slave status \G**************************** 1. row ************** Slave_IO_State: Waiting to reconnect after a failed registration on master Master_Host: my-replication-partner Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000120 Read_Master_Log_Pos: 3848512 Relay_Log_File: my-host-hame-relay-bin.000012 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000120 Slave_IO_Running: Connecting Slave_SQL_Running: Yes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&lt;p&gt;I checked my MySQL text log (/var/log/mysql.log in my case, but the path may vary, or messages may go to syslog) and found the following error:&lt;/p&gt;</description></item><item><title>Netgear GS728TS, GS728TPS, GS752TS, and GS752TPS Switch Configuration Guide</title><link>https://shocksolution.com/posts/netgear-gs728ts-gs728tps-gs752ts-and-gs752tps-switch-configuration-guide/</link><pubDate>Sun, 30 Dec 2018 20:05:41 +0000</pubDate><guid>https://shocksolution.com/posts/netgear-gs728ts-gs728tps-gs752ts-and-gs752tps-switch-configuration-guide/</guid><description>&lt;h2 id="overview-of-the-netgear-gs-switch-series"&gt;Overview of the Netgear GS Switch Series&lt;/h2&gt;&#10;&lt;p&gt;Netgear switch models GS728TS, GS728TPS, GS752TS, and GS752TPS (Gigabit Smart Switches) are value-priced edge switches (about $1000 on Amazon for the GS752TPS 48-port model with PoE) with limited Layer 3 routing capabilities. These switches are best deployed as edge switches in a small office environment with a limited budget. The fan noise is annoying but not deafening, so they should be located in a network closet or noise-insulated rack. In the case of budget constraints, the GS7 series could be used as core switches. They can be stacked for high availability, and they support LAGs and bonding to allow equipment with multiple NICs to run one cable to each switch, allowing the equipment to stay up even if one switch unit dies. However, these switches are not really designed for &amp;ldquo;enterprise&amp;rdquo; use as core switches.&lt;/p&gt;</description></item><item><title>Creating Kubernetes Secrets Using TLS/SSL as an Example</title><link>https://shocksolution.com/posts/creating-kubernetes-secrets-using-tls-ssl-as-an-example/</link><pubDate>Fri, 14 Dec 2018 16:15:11 +0000</pubDate><guid>https://shocksolution.com/posts/creating-kubernetes-secrets-using-tls-ssl-as-an-example/</guid><description>&lt;p&gt;Creating Kubernetes secrets isn&amp;rsquo;t intuitive the first time you do it. A common reason to use a secret is to add a SSL/TLS certificate to a cluster. Kubernetes provides two ways to add a secret: directly on the command line, and from a YAML source file. First, let&amp;rsquo;s generate a test certificate to work with and select our cluster.&lt;/p&gt;&#10;&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;&#10;&lt;div class="code-block"&gt;&#10; &lt;button class="code-copy" type="button" hidden aria-label="Copy code to clipboard"&gt;&#10; &lt;span class="code-copy-label" aria-hidden="true"&gt;Copy&lt;/span&gt;&#10; &lt;/button&gt;&#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj &amp;#34;/CN=foo.bar.com&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&lt;p&gt;This command produces two files: tls.key and tls.cert. In production, you&amp;rsquo;d generate a key file and use it to obtain a certificate from a certificate authority.&lt;/p&gt;</description></item><item><title>New Relic APM on Fedora/CentOS/RedHat with SELinux Enforcing: Solved</title><link>https://shocksolution.com/posts/new-relic-apm-on-fedora-centos-redhat-with-selinux-enforcing-solved/</link><pubDate>Thu, 14 Jun 2018 03:27:28 +0000</pubDate><guid>https://shocksolution.com/posts/new-relic-apm-on-fedora-centos-redhat-with-selinux-enforcing-solved/</guid><description>&lt;p&gt;I found the solution for getting the New Relic APM Agent to run on a CentOS 7 system with SELinux Enforcing. The only SELinux modification you have to make is to change the context of the log file directory &lt;strong&gt;/var/log/newrelic&lt;/strong&gt;. You can temporarily make these changes with the chcon command: [code lang=&amp;ldquo;bash&amp;rdquo;] chcon -R -t httpd_log_t /var/log/newrelic/ [/code] Kill any running instances of newrelic-daemon. If you&amp;rsquo;re using New Relic&amp;rsquo;s recommended default setup, make sure that the file /etc/newrelic/newrelic.cfg does &lt;strong&gt;not&lt;/strong&gt; exist. Verify that all required values in /etc/php.d/newrelic.ini are correct (especially the license key and the application name). Finally, restart httpd: [code lang=&amp;ldquo;bash&amp;rdquo;] systemctl restart httpd [/code] If that works, you should see output in both /var/log/newrelic/newrelic-daemon.log and /var/log/newrelic/php_agent.log. Now, make this file context change persistent, and verify the result: [code lang=&amp;ldquo;bash&amp;rdquo;] semanage fcontext &amp;ndash;add &amp;ndash;type httpd_log_t &amp;ldquo;/var/log/newrelic(/.*)?&amp;rdquo; restorecon -RF /var/log/newrelic/ ls -laZ /var/log/newrelic/ [/code] When you restart Apache, it spawns the newrelic-daemon processes, which communicate with APM via the socket file /tmp/.newrelic.sock. You really don&amp;rsquo;t want to run the newrelic-daemon processes via systemd if you can avoid it. The resulting process tree should look like this:&lt;/p&gt;</description></item><item><title>Internet Service Comparison: Spectrum Cable Modem vs AT&amp;amp;T Fiber</title><link>https://shocksolution.com/posts/internet-service-comparison-spectrum-cable-modem-vs-att-fiber/</link><pubDate>Tue, 05 Jun 2018 13:24:10 +0000</pubDate><guid>https://shocksolution.com/posts/internet-service-comparison-spectrum-cable-modem-vs-att-fiber/</guid><description>&lt;p&gt;I&amp;rsquo;m moving to a new address in Central Florida which has multiple Internet Service Providers (ISPs) available. Spectrum (formerly BrightHouse) provides speeds up to 100Mbps via cable modem. AT&amp;amp;T just installed fiber in the neighborhood, so I was excited to find out what they would offer.&lt;/p&gt;&#10;&lt;h2 id="spectrum-cable-internet"&gt;Spectrum Cable Internet&lt;/h2&gt;&#10;&lt;p&gt;Here&amp;rsquo;s a cost breakdown by service:&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Lightning Internet (200Mbps download data rate, 30Mbps upload): $90/month&lt;/em&gt; Static IP address: $10/month&#10;&lt;em&gt;Modem rental: $4/month  (you &lt;em&gt;must&lt;/em&gt; rent a modem to get a static IP)&lt;/em&gt; Taxes: $0.26&lt;/p&gt;</description></item><item><title>Configure CentOS/RedHat VMs with Kickstart files on Virtualbox</title><link>https://shocksolution.com/posts/configure-centos-redhat-vms-with-kickstart-files-on-virtualbox/</link><pubDate>Sat, 05 May 2018 18:54:50 +0000</pubDate><guid>https://shocksolution.com/posts/configure-centos-redhat-vms-with-kickstart-files-on-virtualbox/</guid><description>&lt;p&gt;&lt;a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/installation_guide/chap-kickstart-installations"&gt;Kickstart&lt;/a&gt; is a type of file that&amp;rsquo;s used to automatically install RedHat or CentOS Linux on a physical or virtual server. If you are managing more than a few servers, it&amp;rsquo;s a good idea to configure the servers via kickstart files instead of logging in and configuring each one manually. However, some unfortunate choices were made when defining the &lt;a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/installation_guide/sect-kickstart-syntax"&gt;Kickstart file format&lt;/a&gt;, and it&amp;rsquo;s not the easiest thing to use. When creating a new Kickstart or making major changes, it&amp;rsquo;s good to have way to quickly iterate and test your changes. Iterating on a Kickstart file is slow and inconvenient in an enterprise environment in which a freshly booted server obtains an image and Kickstarter file via PXEboot. To speed up Kickstart testing and debugging, I&amp;rsquo;ve developed a simple way to use Kickstart files with CentOS/RedHat guest virtual machines that run in VirtualBox on my Mac. This process should also work with Windows or Linux hosts. When the RedHat installer is booting, it looks for a file called ks.cfg on a volume with label OEMDRV. First, we will create this volume as a small virtual disk image. On a Mac, you can create this image with Disk Utility as shown below. Note that the Name needs to be OEMDRV (though you can make the filename anything you want). &lt;figure class="ma0 w-75"&gt;&lt;img src="https://shocksolution.com/images/create-oemdrv-disk-image-osx-disk-utility.png"&#10;&#9;&#9;&#9;alt="Create OEMDRV disk image OSX Disk Utility"&gt;&lt;figcaption&gt;&#10;&#9;&#9;&#9;&lt;p&gt;Create OEMDRV disk image OSX Disk Utility&lt;/p&gt;</description></item><item><title>Protecting a RESTful JSON API from a CSRF attack</title><link>https://shocksolution.com/posts/protecting-a-restful-json-api-from-a-csrf-attack/</link><pubDate>Sun, 07 Jan 2018 13:40:57 +0000</pubDate><guid>https://shocksolution.com/posts/protecting-a-restful-json-api-from-a-csrf-attack/</guid><description>&lt;p&gt;&amp;ldquo;Cross-Site Request Forgery (CSRF) is an attack that forces an end user to execute unwanted actions on a web application in which they&amp;rsquo;re currently authenticated&amp;rdquo; (&lt;a href="https://%3Cwww.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF%3E)"&gt;OWASP definition&lt;/a&gt;)&lt;/p&gt;&#10;&lt;p&gt;CSRF is related to Cross-Site Scripting (XSS), but does not require the execution of Javascript or any other front-end code. In fact, APIs are increasingly vulnerable to CSRF attacks due to the emergence of single-page web applications. A single-page web application is a Javascript &amp;ldquo;client&amp;rdquo; application that executes in the user&amp;rsquo;s browser. The client application interchanges data with the server via API calls. There are many advantages to this architecture, but it does increase the attack surface for CSRF attacks. When the user authenticates, they receive a unique token with a limited lifetime, which is usually stored as a cookie. The token is passed to the server as a header on every API call, and the server may return a new token with an updated expiration time with every response.&lt;/p&gt;</description></item><item><title>Upgrade Ubiquiti UniFi Access Points (WAP) now to avoid KrackAttack</title><link>https://shocksolution.com/posts/upgrade-ubiquiti-unifi-access-points-wap-now-to-avoid-krackattack/</link><pubDate>Tue, 17 Oct 2017 15:39:10 +0000</pubDate><guid>https://shocksolution.com/posts/upgrade-ubiquiti-unifi-access-points-wap-now-to-avoid-krackattack/</guid><description>&lt;p&gt;On October 15, 2017, &lt;a href="https://%3Cwww.krackattacks.com/%3E"&gt;security researcher Mathy Vanhoef announced the discovery of KrackAttacks&lt;/a&gt;, a serious flaw in the WPA2 encryption protocol that encrypts most WiFi connections. Using this method, an attacker can decrypt traffic from almost any wireless access point (WAP) and clients. Every WiFi access point will need to be upgraded with patch that prevents this attack. &lt;a href="https://%3Cwww.ubnt.com/%3E"&gt;Ubiquiti&lt;/a&gt; has already &lt;a href="https://community.ubnt.com/t5/UniFi-Updates-Blog/FIRMWARE-3-9-3-7537-for-UAP-USW-has-been-released/ba-p/2099365"&gt;released a patch for UniFi access points&lt;/a&gt; that addresses this vulnerability. However, the upgrade process may not be straightforward, depending on the age of your access points. The following process will ensure that you are running a safe version of the firmware (3.9.3.7537 or later). Note that any upgrade will result in downtime for each access point as it is upgraded, so you will want to perform a rolling upgrade if you have multiple devices that will be upgraded while people are using them.&lt;/p&gt;</description></item><item><title>Warning: CentOS/RedHat 7.4 installs FreeRADIUS 3 with breaking changes</title><link>https://shocksolution.com/posts/warning-centosredhat-7-4-installs-freeradius-3-with-breaking-changes/</link><pubDate>Sun, 01 Oct 2017 17:24:01 +0000</pubDate><guid>https://shocksolution.com/posts/warning-centosredhat-7-4-installs-freeradius-3-with-breaking-changes/</guid><description>&lt;p&gt;When you run yum upgrade on a CentOS/RedHat 7 instance, you will be upgraded to 7.4. If you have a &lt;a href="https://freeradius.org/"&gt;FreeRADIUS&lt;/a&gt; server, you will be upgraded from version 2 to 3, and &lt;strong&gt;your server will likely stop authenticating!&lt;/strong&gt; Good times! Fortunately, the solution was not complicated for us, because we had good documentation.&lt;/p&gt;&#10;&lt;h2 id="symptoms"&gt;Symptoms&lt;/h2&gt;&#10;&lt;p&gt;Your radius server suddenly starts denying logins.&lt;/p&gt;&#10;&lt;h3 id="diagnosis"&gt;Diagnosis&lt;/h3&gt;&#10;&lt;p&gt;The configuration file &lt;code&gt;/etc/raddb/radiusd.conf&lt;/code&gt; has changed enough between versions 2 and 3 that you cannot re-use the old version. To get radius debugging output, stop the radiusd service, and run (as root):&lt;/p&gt;</description></item><item><title>Managing persistent disks on Google Compute Engine</title><link>https://shocksolution.com/posts/managing-persistent-disks-on-google-compute-engine/</link><pubDate>Tue, 19 Sep 2017 12:19:24 +0000</pubDate><guid>https://shocksolution.com/posts/managing-persistent-disks-on-google-compute-engine/</guid><description>&lt;p&gt;It can confusing when you have multiple persistent disks on an instance running on Google Compute Engine. For example, a server may have separate disks for the filesystem root, MySQL data, logs, and /tmp. Once you&amp;rsquo;ve created the Compute Engine disks and attached each one to the instance, how do you know which Compute Engine disk maps to each volume on the instance? First, describe the instance to see a list of the attached disks:&lt;/p&gt;</description></item><item><title>Is there a "Primary Domain Controller" in Active Directory?</title><link>https://shocksolution.com/posts/is-there-a-primary-domain-controller-in-active-directory/</link><pubDate>Thu, 29 Jun 2017 14:08:52 +0000</pubDate><guid>https://shocksolution.com/posts/is-there-a-primary-domain-controller-in-active-directory/</guid><description>&lt;h2 id="the-historical-answer"&gt;The Historical Answer&lt;/h2&gt;&#10;&lt;p&gt;With Windows NT, prior to the advent of Active Directory, there was one Primary Domain Controller (DC) per domain, and every other DC was a Backup.&lt;/p&gt;&#10;&lt;h2 id="the-modern-answer"&gt;The Modern Answer&lt;/h2&gt;&#10;&lt;p&gt;When Active Directory was introduced with Windows 2000, domain controllers became fully multi-master. There is no primary domain controller. However, there are two caveats that may confuse you.&lt;/p&gt;&#10;&lt;h3 id="fsmo-operations-masters"&gt;FSMO Operations Masters&lt;/h3&gt;&#10;&lt;p&gt;Though Active Directory is multi-master, certain operations must take place in a way that ensure consistency across the domain controllers. For this reason, one DC will be designated as the Operations Master for each role. This is &lt;strong&gt;not&lt;/strong&gt;the same thing as a Primary Domain Controller, because there are currently 5 master roles, and a different DC could hold each role. To view the current Operations Masters, run the following at a Windows command prompt: &lt;code&gt;NetDOM /query FSMO&lt;/code&gt; In Powershell, you have to run two commands: &lt;code&gt;Get-ADDomain | Select-Object InfrastructureMaster, RIDMaster, PDCEmulator&lt;/code&gt; &lt;code&gt;Get-ADForest | Select-Object DomainNamingMaster, SchemaMaster&lt;/code&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Making Windows work for Linux and OS X admins</title><link>https://shocksolution.com/posts/making-windows-work-for-linux-and-os-x-admins/</link><pubDate>Wed, 25 May 2016 04:10:17 +0000</pubDate><guid>https://shocksolution.com/posts/making-windows-work-for-linux-and-os-x-admins/</guid><description>&lt;p&gt;If you are a Linux or OS X power user, then you&amp;rsquo;re used to having all the necessary tools built into your OS. When you log into a Windows system (What! No command line?) you may feel lost. These tools and shortcuts will help you be productive on Windows systems.&lt;/p&gt;&#10;&lt;h2 id="windows-shortcuts"&gt;Windows Shortcuts&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Alt-x is a magic shortcut key on Windows 8 and Server 2012. It pops up a little menu in the lower right corner of the screen which contains just the items that an admin needs. Try it!&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="windows-programs"&gt;Windows Programs&lt;/h3&gt;&#10;&lt;p&gt;If you want Windows to work a little bit like Linux or OS X, you need to install a few of these free programs. Some are &lt;em&gt;gratis&lt;/em&gt;, and some are &lt;em&gt;libre&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Monitoring with SNMP, Part 2: Command-line tools for active SNMP</title><link>https://shocksolution.com/posts/monitoring-with-snmp-part-2-command-line-tools-for-active-snmp/</link><pubDate>Fri, 02 May 2014 18:27:02 +0000</pubDate><guid>https://shocksolution.com/posts/monitoring-with-snmp-part-2-command-line-tools-for-active-snmp/</guid><description>&lt;p&gt;&lt;a href="https://shocksolution.com/2014/03/monitoring-with-snmp-part-1-fundamentals-of-snmp/" title="Monitor%20with%20SNMP:%20Fundamentals%20of%20SNMP"&gt;In Part 1, I summarized the basic concepts of SNMP&lt;/a&gt; and defined the terms and acronyms used in this post. Now, I will show how to use SNMP to monitor actual devices. As an example, I will monitor an enterprise-grade uninterruptible power supply (UPS) and power distribution unit (PDUs) from &lt;a href="http://%3Cwww.tripplite.com/%3E" title="Tripp-Lite"&gt;Tripp-Lite&lt;/a&gt;. These devices have an &lt;a href="http://%3Cwww.tripplite.com/sku/SNMPWEBCARD/%3E" title="Tripp-Lite%20SNMPWEBCARD"&gt;SNMPWEBCARD&lt;/a&gt; installed to support communication over Ethernet. Command-line tools for SNMP communication should be available for any Linux distribution (or any other UNIX-derived OS). &lt;a href="http://%3Cwww.net-snmp.org/docs/man/%3E" title="SNMP%20Tool%20Documentation"&gt;Documentation for the basic SNMP tools is available online&lt;/a&gt;. The challenge with SNMP is figuring out what parameters are supported by a particular device. Most devices support a set of standard OIDs that return basic information such as device name, uptime, etc.&lt;/p&gt;</description></item><item><title>Monitoring with SNMP, Part 1: Fundamentals of SNMP</title><link>https://shocksolution.com/posts/monitoring-with-snmp-part-1-fundamentals-of-snmp/</link><pubDate>Wed, 05 Mar 2014 16:14:49 +0000</pubDate><guid>https://shocksolution.com/posts/monitoring-with-snmp-part-1-fundamentals-of-snmp/</guid><description>&lt;p&gt;SNMP is a protocol for conveying information and controlling devices over a network. SNMP can be used in two ways:&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Active: a device sends a command to set a parameter or request information for another device&lt;/em&gt; Passive: a device sends an alert (called a trap) to another device, which is configured to receive traps and do something with the information.&lt;/p&gt;&#10;&lt;p&gt;The &amp;ldquo;payload&amp;rdquo; of an SNMP message is called an Object Identifier, or OID. An OID is an ordered list of non-negative numbers, such as:&lt;/p&gt;</description></item></channel></rss>