<!DOCTYPE html>
<html>
  <head>
    <title>Rob Petti – DevOps Developer and Build Engineer</title>

        <meta charset="utf-8" />
    <meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0'>

    
    <meta name="description" content="DevOps Developer and Build Engineer">
    <meta property="og:description" content="DevOps Developer and Build Engineer" />
    
    <meta name="author" content="Rob Petti" />

    

    <!-- Begin Jekyll SEO tag v2.8.0 -->
<meta name="generator" content="Jekyll v3.10.0" />
<meta property="og:title" content="Rob Petti" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="DevOps Developer and Build Engineer" />
<meta property="og:description" content="DevOps Developer and Build Engineer" />
<link rel="canonical" href="http://robpetti.com/" />
<meta property="og:url" content="http://robpetti.com/" />
<meta property="og:site_name" content="Rob Petti" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="Rob Petti" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebSite","description":"DevOps Developer and Build Engineer","headline":"Rob Petti","name":"Rob Petti","url":"http://robpetti.com/"}</script>
<!-- End Jekyll SEO tag -->


    <link rel="stylesheet" type="text/css" href="/style.css" />
    <link rel="alternate" type="application/rss+xml" title="Rob Petti - DevOps Developer and Build Engineer" href="/feed.xml" />

    <!-- Created with Jekyll Now - http://github.com/barryclark/jekyll-now -->
  </head>

  <body>
    <div class="wrapper-masthead">
      <div class="container">
        <header class="masthead clearfix">
          <a href="/" class="site-avatar"><img src="https://www.gravatar.com/avatar/fd63c55f558091c2027388ff356058cb" /></a>

          <div class="site-info">
            <h1 class="site-name"><a href="/">Rob Petti</a></h1>
            <p class="site-description">DevOps Developer and Build Engineer</p>
          </div>

          <nav>
            <a href="/">Blog</a>
            <a href="/about">About</a>
          </nav>
        </header>
      </div>
    </div>

    <div id="main" role="main" class="container">
      <div class="posts">
  
    <article class="post">

      <h1><a href="/xray-dbsync-v3/">JFrog Xray dbsync will not migrate to v3</a></h1>

      <div class="entry">
        <p>Ran into this issue while trying to migrate JFrog Xray to v3: <code class="language-plaintext highlighter-rouge">dbsync_v1_to_v3 migration prerequisites are not fulfilled: Custom vulnerabilities or components exist</code></p>


      </div>

      <a href="/xray-dbsync-v3/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/p4-invalid-date-1/">Perforce oddities: "Invalid date '-1'"</a></h1>

      <div class="entry">
        <p>Recently a user had some issues submitting files to perforce. When they’d do so, they’d get the following error:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlights"><code>Librarian checkin ... failed.
Invalid date '-1'.
</code></pre></div></div>

<p>Apparently this is caused by the client not sending the server a valid file modification time. This can happen if the date is out of the range that can be expressed by a unix timestamp (1901-2038) or, as in this case, the client version is far too old.</p>

<p>As always, remember to keep your clients up to date. Backwards compatibility in p4 is fairly good, but only to a point, so best practice (IMO) is still to use the same version of the client as what is running on the server.</p>

      </div>

      <a href="/p4-invalid-date-1/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/perforce-security-levels/">Perforce Security Levels are a Lie</a></h1>

      <div class="entry">
        <p>Specifically security level 1. Here’s the problem and how to work around it.</p>


      </div>

      <a href="/perforce-security-levels/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/perforce-cannot-remove-shelve/">Perforce cannot remove shelved changelist: 'needs tofile'</a></h1>

      <div class="entry">
        <p>After recently upgrading to 2020.1, we began encountering users that have somehow created broken shelved changelists.</p>


      </div>

      <a href="/perforce-cannot-remove-shelve/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/perforce-sync-pads-file-with-zeroes/">Perforce sync padding file with zeroes</a></h1>

      <div class="entry">
        <p>I encountered an issue with a Windows build machine padding an otherwise correctly synced file with zeroes.</p>


      </div>

      <a href="/perforce-sync-pads-file-with-zeroes/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/compiling-openjdk11-solaris/">Building OpenJDK 11.0.4 on Solaris 11.4 Sparc</a></h1>

      <div class="entry">
        <p>This is a follow up to my previous post on compiling OpenJDK on Solaris. Things have changed in the OpenJDK build requirements, so the process is slightly different.</p>


      </div>

      <a href="/compiling-openjdk11-solaris/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/compiling-openjdk11-solaris/">Building OpenJDK <=11.0.3 on Solaris 11.4 Sparc</a></h1>

      <div class="entry">
        <p><em>Note: These instructions don’t seem to work for 11.0.4.</em></p>


      </div>

      <a href="/compiling-openjdk11-solaris/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/disabling-perforce-swarm-reviews/">How to Disable P4V Reviews in Perforce Swarm</a></h1>

      <div class="entry">
        <p>With Perforce’s deprecation of P4Web, you might be in the market for a new web tool for viewing code and diffs. If you don’t want to fork up the cash for Fisheye, Perforce’s new Swarm product will likely fit your needs.</p>


      </div>

      <a href="/disabling-perforce-swarm-reviews/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/deep-renaming-perforce-depots/">(Deep) Renaming Perforce Depots</a></h1>

      <div class="entry">
        <p>If you have ever tried to rename anything in Perforce, you know that it’s rarely an easy thing to do. Depots especially are practically impossible to rename without crippling any current development.</p>


      </div>

      <a href="/deep-renaming-perforce-depots/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/perforce-parallel-garbled-output/">Perforce Parallel Sync Causes Garbled Log Output</a></h1>

      <div class="entry">
        <p>We recently upgraded our perforce client from 2015.1 to 2018.1, and immediately ran into a strange issue where running <code class="language-plaintext highlighter-rouge">p4 -s sync</code> with parallel syncing enabled would cause strange output.</p>


      </div>

      <a href="/perforce-parallel-garbled-output/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/fortify-breaks-regsvr32/">Fortify breaks DLL/OCX registration with regsvr32</a></h1>

      <div class="entry">
        <p>HPE’s Fortify security scanning solution has always been a pain to deal with, but this takes it to a new level. When running our builds with their msbuild wrapper, we encountered this error:</p>


      </div>

      <a href="/fortify-breaks-regsvr32/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/nfs-read-only-filesystem/">NFS accesses randomly causing 'Read-only filesystem' errors</a></h1>

      <div class="entry">
        <p>I’m currently setting up some new systems in a remote datacenter, and ran into random write failures on an NFS server I just set up. Surprisingly, the issue appeared to be with DNS resolution of the client’s hostname, which makes perfect sense when you realize that we are limiting write access to specific <em>hostnames</em>.</p>


      </div>

      <a href="/nfs-read-only-filesystem/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/p4dctl-hangs/">p4dctl hangs on startup</a></h1>

      <div class="entry">
        <p>Perforce has introduced a rather neat utility called <a href="https://www.perforce.com/perforce/r17.1/manuals/p4dist/Content/P4Dist/appendix.p4dctl.html">p4dctl</a> that assists with managing the various services (p4d, p4p, p4broker) that you might want to run on a linux machine. They even provide deb and rpm packages for it. Unfortunately, their RPM contains an init.d script that is incompatible with systemd, which is what comes with RHEL/CentOS &gt;= 7. This may also be an issue in modern Debian based systems, but I haven’t tested it.</p>


      </div>

      <a href="/p4dctl-hangs/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/scopecppsdk/">What the heck is ScopeCppSDK?</a></h1>

      <div class="entry">
        <p>When trying to upgrade our build infrastructure to use Microsoft’s new Visual Studio 2017, I got a strange request from a developer: They needed include paths from an SDK called “ScopeCppSDK”, which they claimed that this was installed with VS2017 within it’s installation folder, and that this was the new location for some standard libraries.</p>


      </div>

      <a href="/scopecppsdk/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/perforce-double-tickets/">p4 login creates two tickets when using a replica</a></h1>

      <div class="entry">
        <p>I do a lot of Perforce automation, both manually using scripts, and using Jenkins plugins like the <a href="https://wiki.jenkins-ci.org/display/JENKINS/P4+Plugin">p4-plugin</a> and <a href="https://wiki.jenkins-ci.org/display/JENKINS/Perforce+Plugin">perforce-plugin</a>, the latter of which I supported for many years. All of these methods (usually) use perforce tickets so it doesn’t pass the password around plaintext.</p>


      </div>

      <a href="/perforce-double-tickets/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/vmount-not-owner/">'vmount: Not owner' when mounting Linux NFS export on AIX</a></h1>

      <div class="entry">
        <p>I recently ran into this issue while trying to mount an NFS export on a linux server on an AIX server.</p>


      </div>

      <a href="/vmount-not-owner/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/selinux-and-samba/">SELinux and Samba Woes</a></h1>

      <div class="entry">
        <p>I understand why SELinux exists, but I still hate working with it sometimes… You’d think that after years of running into bizarre issues with nonsensical error messages I’d learn to check SELinux first, but apparently I’m a slow learner.</p>


      </div>

      <a href="/selinux-and-samba/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/ancient-nfs/">Value too large for defined data type</a></h1>

      <div class="entry">
        <p>I recently ran into an issue (on Christmas Day, in fact) with certain binaries being unable to access files over NFS.</p>


      </div>

      <a href="/ancient-nfs/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/moved-site/">Moved site to GitHub Pages!</a></h1>

      <div class="entry">
        <p>Super quick update: I just migrated off of wordpress and onto Jekyll hosted on GitHub Pages!</p>

      </div>

      <a href="/moved-site/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/perforce-oddities-already-opened-on-this-client/">Perforce Oddities: "already opened on this client"</a></h1>

      <div class="entry">
        <p>One of my users recently ran into a situation in which they couldn’t open a file for editing because perforce thought the file was already opened on their client:</p>


      </div>

      <a href="/perforce-oddities-already-opened-on-this-client/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/perforce-rcs-files-out-of-sync/">Perforce RCS files out of sync</a></h1>

      <div class="entry">
        <p>During a server move relatively recently, we decided to go about it by setting up a replica in the new site, then switching it to a master once everything has been replicated over.</p>


      </div>

      <a href="/perforce-rcs-files-out-of-sync/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/permission-denied-when-accessing-some-files-on-linux-even-as-root/">"Permission Denied" when accessing some files on linux, even as root</a></h1>

      <div class="entry">
        <p>This was a pain. Our backup software was unable to read certain Perforce versioned files from the P4ROOT (mostly .gz files). Obviously this is a fairly big issue, as it prevented us from creating any useful backups.</p>


      </div>

      <a href="/permission-denied-when-accessing-some-files-on-linux-even-as-root/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/perforce-oddities-errors-while-restoring-from-a-journal-and-what-you-shouldnt-do/">Perforce Oddities: errors while restoring from a journal, and what you shouldn't do</a></h1>

      <div class="entry">
        <p>Twice this month I’ve run into the situation where one of our db.* files got corrupted, and started throwing “BTree is corrupt!” errors on various commands. The first instance was caused by our system running out of main memory, and reaping p4d processes while they were writing to the database tables. The second instance was caused by exhausted disk space.</p>


      </div>

      <a href="/perforce-oddities-errors-while-restoring-from-a-journal-and-what-you-shouldnt-do/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/resizing-solaris-partitions/">Resizing Solaris Partitions</a></h1>

      <div class="entry">
        <p>I’m currently in the process of resizing a partition in Solaris 10. So far, the instructions that I’ve found have been quite incorrect, so I’m documenting the steps I’m taking here. In my particular case, I’m resizing a single partition on a non-root disk after increasing it’s size through VMWare.</p>


      </div>

      <a href="/resizing-solaris-partitions/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/perforce-oddities-cannot-submit-unicode-type-file-using-non-unicode-server/">Perforce Oddities: cannot submit unicode type file using non-unicode server</a></h1>

      <div class="entry">
        <p>Ran into this little gem today… I’ve got a project that I’m currently trying to branch. It’s a very simple integration operation from one location to another, nothing crazy. Of course Perforce needs to make it as complicated as possible by throwing me this error for a couple of our files:</p>


      </div>

      <a href="/perforce-oddities-cannot-submit-unicode-type-file-using-non-unicode-server/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/perfmerge-warnings-are-not-actually-warnings/">Perfmerge++ Warnings are not actually warnings!</a></h1>

      <div class="entry">
        <p>I recently did a migration of source code from one perforce server to another. During the merge process, I ran into an odd warning:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlights"><code>perfmerge++ warning:
        No mapping for change 293174 in database /x/sourceserver/server/. Rejecting.
</code></pre></div></div>


      </div>

      <a href="/perfmerge-warnings-are-not-actually-warnings/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/adding-a-windows-slave-to-jenkins-the-hard-way/">Adding a Windows slave to Jenkins the hard way</a></h1>

      <div class="entry">
        <p>Jenkins makes adding slaves really easy. For unix machines, the preferred method is to use SSHD, which only requires that the master be able to contact the slave. On windows, however, you are stuck using a JNLP based solution, which requires that the slave be able to access master over the network.</p>


      </div>

      <a href="/adding-a-windows-slave-to-jenkins-the-hard-way/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/quick-script-email-all-recent-perforce-users/">Quick Script: Email all recent Perforce users</a></h1>

      <div class="entry">
        <p>Here’s a script I whipped up in order to send an email to all recent Perforce users. I needed this because my company uses a shared license, so all user accounts are shared between our perforce servers. When a server needs to go down for maintenance, I like to email only those people who actually use it. This uses python, but it does not require the p4python api (though I imagine it would be quite simpler using it). I’m sure there are some imports that need to be cleaned up, but whatever, it’s just a quickie.</p>


      </div>

      <a href="/quick-script-email-all-recent-perforce-users/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/reverting-all-files-in-perforce/">Reverting All Files In Perforce</a></h1>

      <div class="entry">
        <p>I often find myself in the situation where I need to delete the perforce account of a user who has left the company. Unfortunately I’m usually unable to do so because they have left files open, resulting in this error:</p>


      </div>

      <a href="/reverting-all-files-in-perforce/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/100-cpu-usage-in-oneiric-ubuntu-11-10/">100% cpu usage in Oneiric (Ubuntu 11.10)</a></h1>

      <div class="entry">
        <p>I recently upgraded my work PC from Natty to Oneiric, and discovered that whenever I had a window open that <strong>wasn’t</strong> maximized, it’s backend process and xorg would use up 100% of the cpu.</p>


      </div>

      <a href="/100-cpu-usage-in-oneiric-ubuntu-11-10/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/dual-booting-ubuntu-and-chromiumos/">Dual booting Ubuntu and ChromiumOS</a></h1>

      <div class="entry">
        <p>Yes, I know there is a handy and rather well thought out guide <a href="http://chromeos.hexxeh.net/wiki/doku.php?id=multiboot">here</a>, but I thought I would post my experiences, especially given that blindly following the aforementioned tutorial resulted in my existing Ubuntu installation being wiped…
First, go read the tutorial so you know what I’m talking about. Essentially you will need to make room on your hard disk for the C-STATE and C-ROOT ChromiumOS partitions, create them, and copy them from your USB stick using dd.</p>


      </div>

      <a href="/dual-booting-ubuntu-and-chromiumos/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/mounting-nfs-results-in-nobodynobody-owned-files/">Mounting NFS results in nobody:nobody owned files</a></h1>

      <div class="entry">
        <p>So I ran into this problem earlier this week. Basically we have a Solaris 10 server hosting files over NFS. The NFS server that comes with Solaris 10 supports NFSv4, but doesn’t seem to include idmapd, which is responsible for mapping user and group ids. Everything I’ve read suggests that idmapd is required on both the client and server in order for it to work correctly. Since I had no real desire to screw with the server configuration (and since other machines could mount it correctly) I kept searching.</p>


      </div>

      <a href="/mounting-nfs-results-in-nobodynobody-owned-files/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/moving-on-to-jenkins/">Moving on to Jenkins</a></h1>

      <div class="entry">
        <p>So in case you haven’t heard, there was some drama between the Hudson community and Oracle. I won’t go into detail as there are <a href="http://jenkins-ci.org/content/hudsons-future">plenty</a> of <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=317610">articles</a> about what went on.</p>


      </div>

      <a href="/moving-on-to-jenkins/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/deploying-a-third-party-artifact-to-a-maven-repository/">Deploying a third party artifact to a Maven Repository</a></h1>

      <div class="entry">
        <p>Specifically, I’m attempting today to deploy the Perforce P4Java api to the Sonatype core Maven repository. Sonatype has plenty of documentation on this process, but most of them make the assumption that you are building the artifacts from source, and that you are already familiar with maven. I’m a maven newbie and I obviously don’t have the source. Here’s a quick rundown of how I did.
My primary resources was actually <a href="https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven">this</a> page (A shout out to Brian Jackson for pointing me in the right direction!)</p>


      </div>

      <a href="/deploying-a-third-party-artifact-to-a-maven-repository/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/calling-dynamically-loaded-java-classes-with-groovy/">Calling dynamically loaded Java classes with Groovy</a></h1>

      <div class="entry">
        <p>So I’ve got this ridiculous task ahead of me… I somehow need to call a Spring Bean data access object (DAO) from InstallAnywhere using groovy scripting. The idea is that the webapp being installed has all the code in order to set up the database, but there are certain things that need to be done by the installer. Part of getting this working is dynamically loading jars from a directory, and using reflection to grab the class and method I need to call…
Instead of duplicating code and having to maintain it in multiple places, I asked the dev team to provide me a singular class member function that I can call externally. Needless to say, they failed to deliver, and blindly pointed me towards the spring DAOs they were using to access the database. This requires a whole bunch of additional setup in order to get working, since it was written to work in the webapp context.</p>


      </div>

      <a href="/calling-dynamically-loaded-java-classes-with-groovy/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/partitioning-dasd-in-yast-hangs/">Partitioning DASD in Yast Hangs</a></h1>

      <div class="entry">
        <p>I ran into this obsurd issue today. Apparently Suse 11 zLinux doesn’t handle partition creation properly on DASD disks. When it gets to actually running the <code class="language-plaintext highlighter-rouge">fdasd</code> command (zLinux version of <code class="language-plaintext highlighter-rouge">fdisk</code>, as near as I can tell) it simply hangs there forever.</p>


      </div>

      <a href="/partitioning-dasd-in-yast-hangs/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/clock-running-fast-in-centosredhat-virtualbox-guest/">Clock running fast in CentOS/RedHat VirtualBox Guest</a></h1>

      <div class="entry">
        <p>Just ran into this issue while setting up a CentOS 4.7 test virtual machine for some debugging work. After some digging around on the webernets, I found this little <a href="http://www.virtualbox.org/manual/ch12.html#id497868">gem.</a></p>


      </div>

      <a href="/clock-running-fast-in-centosredhat-virtualbox-guest/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/conditionally-launching-downstream-jobs-in-hudson/">Conditionally launching downstream jobs in Hudson</a></h1>

      <div class="entry">
        <p>This recently came up in the hudson users mailing list, so I figured I’d post it here.</p>


      </div>

      <a href="/conditionally-launching-downstream-jobs-in-hudson/" class="read-more">Read More</a>
    </article>
  
    <article class="post">

      <h1><a href="/installing-suse-sles-11-zlinux-in-hercules/">Installing Suse SLES 11 zLinux in Hercules</a></h1>

      <div class="entry">
        <p>What follows is a chronicle of my efforts in getting Suse SLES 11 installed in Hercules. Hopefully it will be of use to others who need to deal with this ridiculous 31 bit platform.</p>


      </div>

      <a href="/installing-suse-sles-11-zlinux-in-hercules/" class="read-more">Read More</a>
    </article>
  
</div>
    </div>

    <div class="wrapper-footer">
      <div class="container">
        <footer class="footer">
          



<a href="https://github.com/rpetti/"><i class="svg-icon github"></i></a>

<a href="https://www.linkedin.com/in/robert-petti-b33aa821"><i class="svg-icon linkedin"></i></a>






<a rel="me" href="https://hachyderm.io/@rpetti"><i class="svg-icon mastodon"></i></a>
        </footer>
      </div>
    </div>

    

    <script>if(navigator.getEnvironmentIntegrity!==undefined)document.querySelector('body').innerHTML='<h1>Your browser contains Google DRM</h1>"Web Environment Integrity" is a Google euphemism for a DRM that is designed to prevent ad-blocking. In support of an open web, this website does not function with this DRM. Please install a browser such as <a href="https://mozilla.org/en-US/firefox/new/">Firefox</a> that respects your freedom and supports ad blockers.';</script>
  </body>
</html>
