Welcome to my website. I am always posting links to photo albums, art, technology and other creations. Everything that you will see on my numerous personal sites is powered by the formVistaTM Website Management Engine.

icon.linkedin.jpgicon.twitter.jpg

  • [SOLVED] Configuring chrooted bind and rndc-confgen Hangs Not Generating a Key
    12/02/2015 12:47PM

    I am putting together a chrooted installation of named and ran into a problem whereby attempting to generate an rndc.key with rndc-confgen just hangs, never returning and not generating a key.

    After doing some searching I discovered that I needed to run the command as follows:

    # rndc-confgen -a -r /dev/urandom  -t /var/named/chroot
    wrote key file "/etc/rndc.key"
    wrote key file "/var/named/chroot/etc/rndc.key"

    Which generated the key file that I expected.

  • Using the Eclipse Memory Analyzer (MAT) Remotely on Large Heap Dumps
    11/23/2015 10:42AM

    Sometime your java applilcation will fail and generate an enormous heap dump.  One that may be too large to be able to transfer to your local machine and to analyze for lack of RAM, time or both.

    One solution is to install the MAT tool on the remote server and generate an HTML output of the analysis to download and view locally.  This saves the headache of attempting to get X Windows installed on the remote machine and get all of the ssh tunneling sorted out (which is of course an option as well).

    First, download and install the stand-alone Eclipse RCP Application.  Then transfer to your server and unpack.  Then determine how large the heap dump is and, if necessary, modify the MemoryAnalyzer.ini file to instantiate a JVM with enough RAM for your heap dump.

    In this example, I have an 11GB heap dump and have modified the last two lines (adding -Xms)

    -startup
    plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
    --launcher.library
    plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.300.v20150602-1417
    -vmargs
    -Xmx16g
    -Xms16g

    Do an initial run to parse the heap dump.  This will generate intermediary data that can be used by subsequent runs to make future analysis faster.

    ./ParseHeapDump.sh /path/to/heap-dump

    After that completes, you can run any of a number of different analysis on the data.  The following is an illustration of how to search for memory leak suspects.

    ./ParseHeapDump.sh /path/to/heap-dump org.eclipse.mat.api:suspects

    Additional reports:

    org.eclipse.mat.api:suspects
    org.eclipse.mat.api:overview
    org.eclipse.mat.api:top_components

    To give creadit where it is due, this is basically a copy of a post by Ashwin Jayaprakash, but I wanted to capture it here as well.

  • Quick-Start and Minimal Cheat Sheet for Chef and Test Kitchen
    11/16/2015 3:30PM

    Following is a quick-start for getting a Chef and Test Kitchen environment set up to start writing and testing Chef cookbooks.  This is an work in progress, so please if you find something that is incorrect or does not work as expected, send me an e-mail.

    Development Environment Set-up:

    Unless you are a Ruby developer and already have a complete environmenet set-up the easiest thing to do is to install the Chef Development Kit, https://downloads.chef.io/chef-dk/.

    After downloading and installing the package add a CHEF_HOME and RUBY_HOME var pointed to the embedded version of Ruby that comes with the Chef SDK.

      export CHEF_HOME=/opt/chefdk
      export RUBY_HOME=/opt/chefdk/embedded
      PATH="$CHEF_HOME/bin:$RUBY_HOME/bin:$PATH"


    Building Cookbooks:

    Generate the cookbook skeleton:

    $ chef generate cookbook <name-of-cookbook>


    Then cd into that directory and initialize the cookbook:

    $ kitchen init --create-gemfile

    You will also want to run bundle install, which will require your user to have sudo permissions.

    $ bundle install

    Run kitchen converge to verify before starting dev.

    $ kitchen converge <name-of-vm>

    Create a recipe

    $ chef generate recipe <name-of-recipe>

    [Optional] To use attributes, first create the attributes directory structure

    $ chef generate attribute default

    Some helpful Tips:

    1.  Answer the following questions for each new cookbook you are going to create.  It will help you focus the purpose of the cookbook:

    . Name
    . Purpose
    . Success criteria
    . App/Service
    . Required steps

    2.  Creating template files:

    $ chef generate template <name-of-file>


        . Sample variable to be added to a template:
          <%= node['hostname'] %>

    3.  Available host variables.  You can see all of the variables available to be used in templates by logging in to a chef managed VM and issuing the following command:

    $ kitchen login <name-of-vm>

    $ ohia | less

    4.  Add a IP to a kitchen VM so that additional kitchen VMs can talk to each other.  Add the following to your .kitchen.yml file.

    platforms:
      - name: centos-7.1
        driver:
          network:
          - ["private_network", {type: "dhcp"}]

    or

    platforms:
      - name: centos-7.1
        driver:
          network:
          - ["private_network", {ip: "192.168.33.10"}]

    When specifying an IP, check the vboxnet0 interface on the host machine to see what network the VirtualBox host is configured and pick an IP in that range.

    In my case, I had to make sure that only one machine was configured under 'platform', or that each had a network configuration.

    Also, I had to have 'require_chef_omnibus: true' under the vagrant driver as follows:

    driver:
      name: vagrant
      require_chef_omnibus: true


    5.  Debugging Attributes:  Using the 'pp' module you can format the output of the node.debug('<attribute-name>').

    Add the following to a recipe, and run it with kitchen converge:

    require 'pp'

    node.default['ipaddress'] = '1.1.1.1'
    pp node.debug_value('ipaddress')


  • Perl One-Liner for Replacing Multiple Lines of a Text file With Multiple Lines of Text
    10/27/2015 2:47PM

    When executing 'search-and-replace' commands on ASCII under Linux, Unix (or *nix) operating systems, sed works or most cases and makes for reasonably straightforward reading of the script.

    If  you want to replace multiple lines of text with multiple lines of text, following is a perl one-liner that does the trick and is much easier to wrangle than trying to do it in sed.

    perl -i -pe "BEGIN{undef $/;} s:${EXISTING_LINES}:${REPLACEMENT_TEXT}:smg" file.txt

  • Adding the Contents of a Source File to the Beginning of a Target File
    10/26/2015 4:49PM

    Following is *nix a command that you can use to add the contents of a source text file to the start of another text file (the source file).

    $ echo -e '0r <source_file_name>\nw' | ed -s <target_file_name>

  • 1 2 3 4 5 >>
Advanced Search

Categories

Archives