AppDynamics: Silent Install of Controller on Ubuntu and license directory

For full instructions on installing the AppDynamics Controller on Linux, see the official documentation.  However, when you get to the step for installing in silent mode, it can be confusing because although it shows you how to specify the path to a response file and the keys available, it does not give you a sample AppDynamics: Silent Install of Controller on Ubuntu and license directory

Ubuntu: Decompiling Java classes on Ubuntu using Eclipse and JD-GUI

Decompiling Java classes is sometimes associated with dubious behavior around proprietary and licensed software, but in reality there are many valid reasons why one may find it necessary to dig into Java class files and jar/war archives.  It may be as simple as your development team no longer having the 5 year old version of Ubuntu: Decompiling Java classes on Ubuntu using Eclipse and JD-GUI

Ubuntu: Determine system vulnerability for Dirty COW CVE-2016-5195

The Dirty COW vulnerability affects the kernel of most base Ubuntu versions.  Especially when running an Ubutu HWE stack, it can be a bit confusing to determine if your kernel and Ubuntu version are affected. If you need to validate patching, then you can use a simple C program to exercise this read-only write vulnerability Ubuntu: Determine system vulnerability for Dirty COW CVE-2016-5195

SaltStack: Keeping Salt Pillar data encrypted using GPG

When automating software and infrastructure, it is not uncommon to need to supply a user id and password for installation or other operations.  While it is certainly possible to pass these plaintext credentials directly in the state, this is not best practice. # not best practice!!! testdb_user: mysql_user.present: – name: frank – password: “test3rdb” – SaltStack: Keeping Salt Pillar data encrypted using GPG

SaltStack: Setting a jinja2 variable from an inner block scope

When using jinja2 for SaltStack formulas you may be surprised to find that your global scoped variables do not have ability to be modified inside a loop.  Although this is counter intuitive given the scope behavior of most scripting languages it is unfortunately the case that a jinja2 globally scoped variable cannot be modified from SaltStack: Setting a jinja2 variable from an inner block scope

Syslog: Sending Java log4j2 to rsyslog on Ubuntu

Logging has always been a critical part of application development.  But the rise of OS virtualization, applications containers, and cloud-scale logging solutions has turned logging into something bigger that managing local debug files. Modern applications and services are now expected to feed log aggregation and analysis stacks (ELK, Graylog, Loggly, Splunk, etc).  This can be Syslog: Sending Java log4j2 to rsyslog on Ubuntu

Ubuntu: Using Fiddler to analyze Chrome/Firefox network capture

The prevalence of the long chains of firewall and reverse proxy solutions present in production infrastructure (and made even more popular with the dynamic routing introduced with containers) has made analysis of the end-user side of the network exchange a critical tool in troubleshooting. Fiddler has long been a solid tool for both proxy capture Ubuntu: Using Fiddler to analyze Chrome/Firefox network capture

Ubuntu: HWE Hardware Enablement Stacks, LTS, and the Kernel

If you installed (or upgraded to) a later Ubuntu point release:  >= 12.04.2, >=14.04.2, or >=16.04.2, you may now be wondering why the system is warning you upon every login that you will no longer receive security updates. WARNING: Security updates for your current Hardware Enablement Stack ended on 2016-08-04:  * http://wiki.ubuntu.com/1404_HWE_EOL Although the first Ubuntu: HWE Hardware Enablement Stacks, LTS, and the Kernel

Node.js: Packaging modules for offline deployment using npm-bundle

In a production environment, it is common to have restricted internet access on the production deployment hosts.  This means that using the standard ‘npm install’ and pulling modules from the registry.npmjs.org repository is not an option. Given the breadth of the dependency graph required for most modules, this packaging is something you want automated without Node.js: Packaging modules for offline deployment using npm-bundle

Ubuntu: Pre-Validate Network ACL and Firewall Connectivity with Netcat

Although virtualization has pushed a self-service culture for infrastructure, it is still common in production environments to need your  Network Operations team to open the required ports necessary for any new application deployment. So, while you may be able to create the base virtualized host, you can’t go much further without the network connectivity.  And Ubuntu: Pre-Validate Network ACL and Firewall Connectivity with Netcat

SaltStack: Troubleshooting Basic Network Connectivity of Minion on Ubuntu

When troubleshooting basic connectivity from your SaltStack minions to your Salt master, the first thing to remember is the basic flow – the minions initiate the connection to port 4505/4506 on the Salt master. With this in mind, if you have modified /etc/salt/minion so that the master is explicitly set and logs are set to SaltStack: Troubleshooting Basic Network Connectivity of Minion on Ubuntu

Ubuntu: Ignoring Transitive Trust Domains when using Samba/Winbind

If your Ubuntu host is authenticating against an Active Directory Domain Controller, you may find there are multiple subdomains or transitive trusts visible.  Which is not a problem in most cases – but if your host is in a subnet where a connection to these other subdomain or transitive trust domains is not possible, you Ubuntu: Ignoring Transitive Trust Domains when using Samba/Winbind

OpenWrt: Installing LuCI Web Interface after Deploying latest OpenWrt Image

The stable OpenWrt images are built with LuCI, an OpenWrt web administration interface.  But if you are using the bleeding edge or trunk OpenWrt images, then you won’t get this package. Luckily, it is not difficult to add the LuCI package to the install.  As long as you have Dropbear enabled for ssh access, or OpenWrt: Installing LuCI Web Interface after Deploying latest OpenWrt Image

OpenWrt: Installing a TFTP Server on Ubuntu for OpenWrt Firmware Updates

The Trivial File Transfer Protocol (TFTP) is an extremely simple protocol most often used for network booting strategies, such as PXE and flashing OpenWrt images unto consumer routers. I go over full instructions for flashing OpenWrt using Ubuntu and flashing a sysupgrade in another post, this article will focus specifically on setting up a tftp OpenWrt: Installing a TFTP Server on Ubuntu for OpenWrt Firmware Updates

GIT: Calling git clone using password with special character

It is more popular to use an ssh key instead of a password when automating a git clone from a guest OS.  But if you do need to specify the password directly into the console command, it takes this form: $ git clone https://<user>:<password>@<gitserver>/<path>/<repo>.git Which works fine if the password is plaintext, but if it GIT: Calling git clone using password with special character

Ubuntu: Installing Packages without Public Internet Access

In production data centers, it is not uncommon to have limited public internet access due to security policies.  So while running ‘apt-get’ or adding a repository to sources.list is easy in your development lab, you have to figure out an alternative installation strategy because you need a process that looks the same across both development Ubuntu: Installing Packages without Public Internet Access

Ubuntu: Creating a Samba/CIFS share to quickly share files with Windows

We live in a multi-platform world, and the ability to easily share folders of content between users in the same protected network is a function made very convenient in the Windows world with CIFS shares (e.g. \\mydesktop\sharedfolder). Luckily for Ubuntu users, it is pretty easy to setup CIFS shares to offer that same interoperability with Ubuntu: Creating a Samba/CIFS share to quickly share files with Windows

vRealize Log Insight: Creating your own content pack for field extraction

Content Packs are plugins that allow you you to create pre-packaged knowledge about specific event types. For example, you can create a content pack that knows how to extract fields from one of your custom log sources.  Beyond extracted fields, you can also add saved queries, aggregations, alerts, dashboards, and visualizations. Incoming Events from Agent vRealize Log Insight: Creating your own content pack for field extraction

OpenWrt: Use setenv firmwareName for newer versions of Linksys WRT1900AC/S

When flashing an OpenWrt image to your newer versioned WRT1900AC/S, be aware that instead of using ‘setenv firmware_name’, you should instead use ‘setenv firmwareName’. The command will not fail, but the router will not understand that it should look for a non-default name for the image and your tftp transfer will fail. This change appears OpenWrt: Use setenv firmwareName for newer versions of Linksys WRT1900AC/S

Ubuntu: Extending a virtualized disk using fdisk when not using LVM

It is common for a virtualized Guest OS base image to have a generic minimal storage capacity.  But this capacity can easily be exceeded by production scenarios, performance testing, logging, or even the general cruft of running a machine 24×7. For this reason, extending a virtualized disk can be extremely helpful.  Here is a walk Ubuntu: Extending a virtualized disk using fdisk when not using LVM

Ubuntu: Using a swap file instead of swap partition for virtualized server VMs

Before virtualization, there was a stronger argument for using a swap partition instead of a swap file for servers.  A fragmented swap file could lead to performance issues that a statically sized and placed partition did not have consider. But once virtualization comes into play, unless you go to great lengths to segment your storage Ubuntu: Using a swap file instead of swap partition for virtualized server VMs

Ubuntu: Enabling Media Keys for Spotify

Updated Feb 2019 based on Spotify updates that broke this functionality. If the keyboard media keys do not work from your Ubuntu desktop, you can use D-Bus support to send the proper commands to Spotify.  Validate the following commands from the console: