Thursday, February 6, 2014

Let's Talk About Software Repackaging. Mmmm kay?

For some unknown reason, there seems to be a noticeable uptick with regards to business interest in this thing called "software packaging".  It's often bundled with "/software deployment" or "software repackaging".  The problem seems (to me, anyway) that the more I talk with folks, the more it seems they have it wrong.  Really wrong.


Why?

Part of the problem is that, akin to software development, the aspects of the job role involve a VERY broad set of skills and experience.  Many of which are unrealistic to expect in a typical "IT" role.  The folks that do this work rarely planned to do it.  They fell into it.  Some like it.  Some do not.  But it is one rare place in the contemporary IT engineering world that crosses almost every discipline from tier 1 level to network engineering, Infosec, application development, systems administration, Active Directory, imaging, and years of basic troubleshooting injected with steroids and caffeine.

The other part, and it's a crucial one: There are NO certifications to quantify this role whatsoever.  Having an MCTS or MCP helps.  So does MCITP/MCSA/MCSE or MCSD or even MCSE/Desktop.  So does A+, Network+ and Security+.  So does a VMware VCP.  But if you're thinking of listing all of those under the "Required" or "Preferred" skills section: good luck.

I bet you may be thinking: "But, Dave, most modern apps are easy to deploy."  That's true.  Usually.  But the problems are not with most modern apps.  It's with dragging along the suitcase of legacy crap that most large-scale enterprise organizations still contend with.  They have oddball requirements that require an assortment of oddball products.  Those oddball products range from obscure garage-ware, to in-house "home-grown" crap, to stuff retired or replaced years ago by a vendor that no longer exists.  Add to that many products which were developed for Windows NT or Windows XP, but have no modern counterpart to use for running on Windows 8.

That leaves you with app-virtualization (App-V, ThinApp, XenApp, etc.) or some VDI infrastructure muscle (Remote App, Citrix and XenApp, etc.).  If you have those tools to use, great.  If not, you may be cracking open this dusty old book of repackaging.  Eye of newt. Tongue of toad.  Mmmm.

Clarification Time:  To Package or Repackage?

Software Packaging is the process and practice of building a new installation bundle for a software application.  The most common result is the age-old "setup.exe", but is more commonly being produced as a .MSI package file.  It may also include accompanying binaries, either compressed internally, or provided in sub-folders, etc.  A vendor-provided installation is one of the most common examples of a "software package".

Software Repackaging is the process and practice of taking a software package and modifying it to provide a reconfigured/customized installation package.  Examples include creating a MST (transform), a setup wrapper, a script, task sequence, Group Policy Object, or even embedding it within an OS image.

Why do I bother trying to explain these stupidly-confusing terms?  Because 99.99999999% of recruiters, IT managers, and housewives don't have a clue about what the differences are.

In short:  A Software Package is like a car bought from a local dealership lot.  A Software Repackage is like taking that car to the chop shop to install custom NOS, traction control, dash controls, roll cages and cloaking devices (okay, I made that up).  Hopefully, that makes it more understandable for you.



Skills?  What Skills?

What ingredients does a decent software packager/repackager require to cook up a good career soup?

  • Experience with Windows Installer (command syntax, logging, exit codes, troubleshooting, etc.)
  • Experience with InstallShield EXE packages (silent commands, answer files, etc.)
  • Experience with a repackaging product like AdminStudio, InstallShield or Wise Installer (if that's still around).  Familiarity with other, similar products doesn't hurt, but those AdminStudio and InstallShield are the most desired.
  • Windows Event Logs.  The ins and outs. Exporting.  Searching. Filtering, etc.
  • Windows Environment Variables (%username%, %computername%, blah blah)
  • Windows Path Assignments (%windir%, %appdata%, all that mess)
  • NTFS File System aspects: ACLs, SACLs, DACLs, etc.
  • ACLs with regards to the Registry
  • The Registry (know it.  love it.  live it.)
  • Windows Services (configuration, status monitoring, troubleshooting)
  • Familiarity with Security Contexts (what accounts are running what things, etc.)
  • Lot's and Lot's and Lot's of scripting experience: BAT, VBscript, Javascript, KiXtart or PowerShell.  Others will help, but mostly BAT, VBscript and PowerShell.
  • Familiarity with Group Policy Objects and how they are processed on a computer.
  • STRONG familiarity with Windows command-line tools: REG, REGSVR32, CACLS/XCACLS, REGINI, SET, SHUTDOWN, LOGOFF, SC, NETSH, PING, NSLOOKUP, and START.  All the newer stuff helps too, like WMIC, WEVTUTIL, DSQUERY/DSGET
  • PSTools.  In fact, if you don't know who Mark Russinovich is, you're not getting hired. Sorry.
  • Orca
  • ROBOCOPY and all of it's drippy goodness.
  • Familiarity with Virtual Machines (VMware Workstation, Hyper-V, Xen, blah blah) for testing and rollback, etc.
Absolutely Most-Basic Skills:
  • Making a Windows Installer Transform
  • Making a SETUP.EXE response file (.iss file)
  • Basic script skills:  If/then/else, loops, etc.
  • Command Tools:
    • Querying and modifying folders, files and Registry keys and values
    • Manipulating security permissions on files, folders and Registry values
    • Stopping and starting Services
    • Restarting a computer (local or remote)
  • Using Process Monitor (and why)
  • Using TASKLIST or PSLIST effectively (and why)
  • MSIEXEC command syntax (seriously!  double-seriously actually)
Double Extra Bonus
  • Familiarity with deployment automation products like Microsoft System Center Configuration Manager. Particularly: the creating, maintaining and troubleshooting of:
    • Collections (and queries)
    • Packages and Programs
    • Applications (SCCM 2012)
    • Advertisements
    • Maintenance Windows
  • Group Policy Preferences. Item-Level Targeting (aka WMI Filtering). Blocking and Inheritance, sequence ordering, RSOP, blah blah.
  • Deep understanding of the differences between snapshot capturing and snapshot/monitoring captures.
  • MDT (Microsoft Deployment Toolkit) and ADK tools
  • Logon, Logoff, Startup and Shutdown scripts
  • Active Setup
  • Application Compatibility Toolkit (ACT) and building shims (know what shims are also)
  • DISM
  • Using and Mounting ISO and WIM files
Will you have to use all of these all of the time?  No.  Will you need to use these a lot?  Maybe.  But the more familiar you are with this list the better you will be at planning, preparing, developing, testing and deploying application packages.

Triple Extra Double Bonus
  • Great customer relation skills.
  • Being able to have a sincere conversation with users who have almost zero understanding of the effort you put into making things work for them which appear to be effortless.
  • Great note-taking skills
  • Patience, especially when sitting through long meetings
  • Following-up on things (customer responses, meetings, reports, etc.)
  • Prioritizing (projects, tasks and personal tasks)
  • Scheduling (personal and group/team events)
  • Sticking to your guns
  • Developing a deep and loving relationship with coffee or tea
  • Developing a deep and loving relationship with beer, wine and/or liquor
  • Being consistent, dependable, and on-time
  • Focusing on documentation and organization of notes and materials
  • Having the ability to calm down panicked users/managers during a crisis and methodically gathering the facts to diagnose the problem properly.
Toughest Challenges?
  • User Acceptance Testing (UAT)
  • Vendor Tech Support discussions (or email threads).  Especially the kind where you ask for help and they promise to "get back to you" and never do.
  • Customers who insist they CANNOT function without that MS-Access 2003 "application" or the entire company will fold and close. (bonus points for FoxPro 9 apps)
  • Hours and hours of reading the most excruciatingly boring manuals.
  • Hours and hours of searching web sites for troubleshooting tips for that one niche app "Fubar 1997" that won't seem to work on Windows 8.1
  • Decaf coffee, and Ice Cream-flavored store brand coffee.
  • Bowls of sugary junk food sitting around for weeks on end.
  • Hours of conversation with coworkers who are either (A) uber-religious or (B) uber-atheist, and neither can wait to remind you just how awesomely correct their views are.
  • Recaps of last nights sports event or draft picks, especially those incredibly important fantasy league trade discussions.
  • Listening to arguments over which sport is the toughest or which TV show is best, or which car is fastest or which asshole has the toughest job and most difficult customers.
  • Tearing off in a panic to the closest restroom, ripping off your clothes quickly, sitting down, letting loose, closing your eyes, exhaling slowly, and then opening your eyes to discover there's no toilet tissue.
  • Traffic (except for you lucky assholes that work from home)
  • Cold, stale coffee... but only if it already has that white fuzzy mold on it.  Otherwise it's just fine.
The Yellow Brick Road

I've tried several times to get an effort off the ground to offer training in this regard, but there doesn't seem to be much public interest.  Developing a cohesive and coherent training outline is a challenge, but my colleague Chris DeCarlo and I have worked pretty hard to build a decent syllabus.  We've even developed a faux exam to cross-exam hapless victims (aka prospective applicants).  Maybe things will change.  But for now it seems there's a nail waiting for the right hammer to come along.

No comments: