{"id":761,"date":"2009-08-05T06:17:02","date_gmt":"2009-08-04T20:17:02","guid":{"rendered":"http:\/\/nsrd.wordpress.com\/?p=761"},"modified":"2009-08-05T06:17:02","modified_gmt":"2009-08-04T20:17:02","slug":"using-the-networker-software-distribution-functionality","status":"publish","type":"post","link":"https:\/\/nsrd.info\/blog\/2009\/08\/05\/using-the-networker-software-distribution-functionality\/","title":{"rendered":"Using the NetWorker Software Distribution Functionality"},"content":{"rendered":"<p>There&#8217;s an old saying, &#8220;Be careful what you wish for; you may get it.&#8221;<\/p>\n<p>Many would say that&#8217;s an apt description of the NetWorker software distribution functionality. When it first appeared, it was inadequately documented and error prone. Fast forward to now, and it&#8217;s less error prone but still reasonably inadequately documented.<\/p>\n<p>I would suggest that unless you&#8217;re currently running NetWorker 7.4.4 or NetWorker 7.5.1 (as of time of writing), you will probably find the software distribution functionality too problematic to work with. Any 7.4.x version higher than 7.4.4, and any version of NetWorker higher than 7.5.1 should continue to show improvements. Versions lower than these in either the 7.4.x tree or 7.5 tree should generally be avoided.<\/p>\n<p>A few of the known problems with the software distribution functionality include:<\/p>\n<ul>\n<li>Works very poorly in a heterogenous environment, where heterogenous means operating systems <em>outside of what can be updated<\/em>.<\/li>\n<li>Works very poorly when large numbers of clients are included in an operation at once.<\/li>\n<li>Gives inadequate progress updates during GUI operations.<\/li>\n<li>Can fail in an undesirable state on clients, leaving NetWorker either uninstalled or shutdown.<\/li>\n<\/ul>\n<p>That being said, you might think that it&#8217;s somewhat of an oxymoron for the title of this post to be &#8220;<em>Using<\/em> &#8230;&#8221;, but I do think it&#8217;s now at the point where it can be <em>used<\/em>, but just with more caution than you might otherwise expect.<\/p>\n<p>(NB: For simplicity here on in, I&#8217;m going to call the &#8220;NetWorker Software Distribution Functionality&#8221; the &#8220;NetWorker repository&#8221;, since that&#8217;s the term for the storage area for the distribution system, and less cumbersome to type or read!)<\/p>\n<p>Here&#8217;s some key tips on using the repository successfully:<\/p>\n<ol>\n<li>Do <strong>not<\/strong> use NMC. Forget about it. Maybe in another v7.x release, or a v8 release, NMC might catch up.<\/li>\n<li>Do <strong>not<\/strong> target multiple operating systems in any activity.<\/li>\n<li>Do <strong>not<\/strong> run software updates in parallel.<\/li>\n<\/ol>\n<p>You might wonder then, what&#8217;s the point? If you can&#8217;t use the GUI, and you can&#8217;t operate against the entire environment at once, or indeed against more than one client at once, where is it better than manual operations?<\/p>\n<p>If you&#8217;re prepared to spend the time to get the repository working, it&#8217;s better than entirely manual operations because of the following factors:<\/p>\n<ol>\n<li>Centralised storage of NetWorker software.<\/li>\n<li>Push updates are still very worthwhile, particularly in environments where you may not always have easy access to the clients of the datazone.<\/li>\n<li>Activities can be scripted with minimum effort, allowing for centralised yet granular operations.<\/li>\n<\/ol>\n<p>Despite the limitations described previously, there are still some key activities that you can do with the repository. These are:<\/p>\n<ol>\n<li>Inventory the existing software install state of clients.<\/li>\n<li>Query the current state of repository software.<\/li>\n<li>Add software to the repository.<\/li>\n<li>Remove software from the repository.<\/li>\n<li>Update client software.<\/li>\n<\/ol>\n<p>Here&#8217;s some examples of how to go about doing these operations, from the command line.<\/p>\n<h3>Inventorying clients<\/h3>\n<p>When inventorying clients, ensure that you <em>don&#8217;t<\/em> include in the client inventory list unsupported operating systems. For the average environment, this particularly applies to <em>Mac OS X<\/em> clients, <em>NetWare<\/em> clients and <em>OpenVMS<\/em> clients. The inventory operation has a long history of failure when these clients are thrown into the mix.<\/p>\n<p>To inventory clients, you use one of two commands:<\/p>\n<pre># nsrpush -i clients<\/pre>\n<p>or<\/p>\n<pre># nsrpush -i -all<\/pre>\n<p>However, as I&#8217;ve pointed out, doing operations against all clients isn&#8217;t the best idea, so the second option there is really only presented for completeness.<\/p>\n<p>Here&#8217;s an example of inventorying 3 clients, &#8216;nox&#8217;, &#8216;nimrod&#8217; and &#8216;asgard&#8217;:<\/p>\n<pre>[root@nox ~]# nsrpush -i asgard nox nimrod\nStarting Inventory Operation on selected clients\nCreating client type job for client asgard.\nCopying inventory scripts to client asgard.\nSuccessfully copied inventory scripts to client asgard.\nStarting inventory of client asgard.\nSuccessfully ran inventory scripts on client asgard.\nCleaning up client asgard.\nSuccessfully cleaned up client asgard.\nCreating client type job for client nox.\nCopying inventory scripts to client nox.\nSuccessfully copied inventory scripts to client nox.\nStarting inventory of client nox.\nSuccessfully ran inventory scripts on client nox.\nCleaning up client nox.\nSuccessfully cleaned up client nox.\nCreating client type job for client nimrod.\nCopying inventory scripts to client nimrod.\nSuccessfully copied inventory scripts to client nimrod.\nStarting inventory of client nimrod.\nSuccessfully ran inventory scripts on client nimrod.\nCleaning up client nimrod.\nSuccessfully cleaned up client nimrod.\n\nInventory status: succeeded<\/pre>\n<p>Perhaps one of the sillier parts of inventorying is that while it updates the database of client versions, it actually doesn&#8217;t <em>report<\/em> those versions to you in the same output \u2013 you have to run another command for that.<\/p>\n<p>To show the versions, you want to invoke one of:<\/p>\n<pre># nsrpush -s -all<\/pre>\n<p>or<\/p>\n<pre># nsrpush -s clients<\/pre>\n<p>Now, in this case, the &#8220;show&#8221; option only runs against the local database, so it&#8217;s reasonably safe to use the &#8216;-all&#8217; option. To reduce the amount of output though, I&#8217;ll show the output for just those three clients inventoried before:<\/p>\n<pre>[root@nox ~]# nsrpush -s asgard nimrod nox\n\n nox\u00a0 linux_x86_64\n     NetWorker 7.5.1\n                Client\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                Man Pages\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                Server\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                Storage Node\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n\n nimrod\u00a0 linux_x86\n     NetWorker 7.5.1\n                Management Console\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                Man Pages\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                Client\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n\n asgard\u00a0 linux_x86\n     NetWorker 7.4.2\n                Man Pages\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                Client<\/pre>\n<p>As you can see in the above, the output is reasonably comprehensive, covering for each host, all three of:<\/p>\n<ul>\n<li>Version<\/li>\n<li>Platform<\/li>\n<li>Packages<\/li>\n<\/ul>\n<p>Note that you can&#8217;t <em>show<\/em> before you <em>inventory<\/em>, so don&#8217;t start by trying to show the state of all systems \u2013 it just won&#8217;t work.<\/p>\n<h3>Querying software in the repository<\/h3>\n<p>To get a list of the software currently held in the repository, you&#8217;d run the command:<\/p>\n<pre># nsrpush -l<\/pre>\n<p>For instance, here&#8217;s the (abridged) output from one of my lab servers:<\/p>\n<pre>[root@nox ~]# nsrpush -l\n\nProducts in the repository\n================================\n\n   NetWorker 7.5.1\n     linux_x86\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Korean Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Chinese Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Japanese Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         French Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Server\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         License Manager\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Storage Node\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Man Pages\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Client\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Management Console\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n     linux_x86_64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Chinese Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Japanese Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         French Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Server\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         License Manager\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Storage Node\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Man Pages\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Client\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Management Console\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Korean Language Pack\n   NetWorker 7.5.0\n     win_x64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Management Console\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         English Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         License Manager\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Server\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Storage Node\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Client\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n     win_x86\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Management Console\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         English Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Language Packs\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         License Manager\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Server\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Storage Node\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n         Client<\/pre>\n<p>Note that both Windows and Unix versions of NetWorker are stored in the same repository. (Due to restrictions with copy\/paste in WordPress not all spacing has been preserved in the above.)<\/p>\n<h3>Adding software to the repository<\/h3>\n<p>Adding software to the repository is <em>reasonably<\/em> straight forward. There are two different techniques for this \u2013 one for adding the software designated as the same platform of the backup server, and one for adding software designated as the different platform of the backup server.<\/p>\n<p>By &#8220;same&#8221; I mean:<\/p>\n<ul>\n<li>Adding Unix\/Linux software to a Unix\/Linux backup server<\/li>\n<li>Adding Windows software to a Windows backup server<\/li>\n<\/ul>\n<p>By &#8220;different&#8221; I mean:<\/p>\n<ul>\n<li>Adding Windows software to a Unix backup server<\/li>\n<li>Adding Unix software to a Windows backup server<\/li>\n<\/ul>\n<h4>Adding software from the same platform<\/h4>\n<p>Let&#8217;s say I&#8217;ve got a Unix NetWorker server, and I want to add software from a supported Unix platform to the repository. Here&#8217;s the steps:<\/p>\n<ol>\n<li>Download the package from EMC PowerLink.<\/li>\n<li>Uncompress and untar the downloaded package into a directory.<\/li>\n<li>Run nsrpush against that directory with the appropriate arguments.<\/li>\n<\/ol>\n<p>So, let&#8217;s assume that I want to add NetWorker 7.4.4 for Linux 32-bit to a software repository. I&#8217;d start with getting the software into a known directory.<\/p>\n<pre>[root@nox tmp]# mkdir \/tmp\/repo\n[root@nox tmp]# cd repo\n[root@nox repo]# gunzip -c \/d\/03\/share-a\/Downloads\/NetWorker\/v7_4\/\nNetWorker 7.4 SP4\/nw74sp4_linux_x86.tar.gz | tar xvpf -\nLGTO_METAFILE.linuxx86\njre-1_5_0_15-linux-i586.bin\nlgtoclnt-7.4.4-1.i686.rpm\nlgtofr-7.4.4-1.i686.rpm\nlgtoja-7.4.4-1.i686.rpm\nlgtoko-7.4.4-1.i686.rpm\nlgtolicm-7.4.4-1.i686.rpm\nlgtoman-7.4.4-1.i686.rpm\nlgtonmc-3.4.4-1.i686.rpm\nlgtonode-7.4.4-1.i686.rpm\nlgtoserv-7.4.4-1.i686.rpm\nlgtozh-7.4.4-1.i686.rpm\nsd_products.res<\/pre>\n<p>Now, the command we want to use in this case is:<\/p>\n<pre># nsrpush -a -p product -v version -P platform -m path -U<\/pre>\n<p>(NB: The &#8220;-U&#8221; is for &#8220;Unix&#8221;; obviously if you&#8217;re running a like-for-like installation on Windows, using &#8220;-U&#8221; here isn&#8217;t going to be a good idea &#8211; instead, use &#8220;-W&#8221;.)<\/p>\n<p>Now, to work out what we need to put into the <em>product<\/em>, <em>version<\/em> and <em>platform<\/em> strings, we want to check the LGTO_METAFILE.linuxx86 file that was included in the distribution. If you look at the start of the file, you&#8217;ll find a section detailing this, and for the file specified above on my lab server, this section looks like the following:<\/p>\n<pre># Client Push metafile to be included in linux_x86 NetWorker distributions\n\nOPERATING_SYSTEM=Linux\n\nOS_PLATFORM=linux_x86\n\nPRODUCT_NAME=NetWorker\n\nPRODUCT_VERSION=7.4.4\n\nDESCRIPTION=Networker 7.4.4<\/pre>\n<p>So, that means our nsrpush command will look like this:<\/p>\n<pre># nsrpush -a -p NetWorker -v 7.4.4 -P linux_x86 -m \/tmp\/repo -U\nSuccess adding product from:\n\/tmp\/repo\n\nAdd to repository status: succeeded<\/pre>\n<p>That&#8217;s all there is to it! That software is now in the repository and ready to be rolled out to a client.<\/p>\n<h4>Adding software from the other platform<\/h4>\n<p>If you need to add Windows software to a Unix server, or Unix software to a Windows server, you&#8217;ll need a <em>helper<\/em> client. This is a client of the same platform as the software you are adding, with NetWorker already running, and a copy of the software extracted on the client. The procedure works along the lines of the following:<\/p>\n<ol>\n<li>Unpack the alternate platform software onto a &#8216;like&#8217; client.<\/li>\n<li>Unpack the alternate platform software onto the backup server.<\/li>\n<li>Run nsrpush to add the software.<\/li>\n<\/ol>\n<p>So in this case, I&#8217;m going to use a Windows client called &#8216;medusa&#8217; as a helper\/proxy to allow me to add NetWorker 7.5.1 64-bit for Windows to a Unix server&#8217;s repository. On my Windows client, I&#8217;ve got a directory called &#8220;C:temp751&#8221;:<\/p>\n<figure id=\"attachment_793\" aria-describedby=\"caption-attachment-793\" style=\"width: 500px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-793\" title=\"Adding alternate platform software\" src=\"http:\/\/nsrd.files.wordpress.com\/2009\/08\/windows-repository.png\" alt=\"Adding alternate platform software - folder where software can be found on client\" width=\"500\" height=\"409\" srcset=\"https:\/\/nsrd.info\/blog\/wp-content\/uploads\/2009\/08\/windows-repository.png 548w, https:\/\/nsrd.info\/blog\/wp-content\/uploads\/2009\/08\/windows-repository-300x245.png 300w, https:\/\/nsrd.info\/blog\/wp-content\/uploads\/2009\/08\/windows-repository-366x300.png 366w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><figcaption id=\"caption-attachment-793\" class=\"wp-caption-text\">Adding alternate platform software - folder where software can be found on client<\/figcaption><\/figure>\n<p>Now, I also need the software unpacked on the backup server, so I flush out the contents of my \/tmp\/repo directory, and unzip the Windows 64-bit NetWorker 7.5.1 archive. This gives me a path to the LGTO_METAFILE.winx64 file of:<\/p>\n<pre>\/tmp\/repo\/win_x64\/LGTO_METAFILE.xinx64<\/pre>\n<p>Now, I need to add &#8211; the command will be:<\/p>\n<pre># nsrpush -a -p product -v version -P platform -m path -c client -C path -W<\/pre>\n<p>Where:<\/p>\n<ul>\n<li>Product, version and platform will be extracted from the LGTO_METAFILE as per usual.<\/li>\n<li>-m path will refer to the <em>local<\/em> copy, on the backup server, of the software.<\/li>\n<li>-c client will refer to the helper\/proxy client (in this case, &#8216;medusa&#8217;),<\/li>\n<li>-C path will refer to the path on the helper\/proxy client where the software has also been extracted on<\/li>\n<li>-W tells NetWorker we need to add Windows software.<\/li>\n<\/ul>\n<p>The relevant product\/version\/platform details of the LGTO_METAFILE.winx64 looks like the following:<\/p>\n<pre>#########################\n# Product Definition\n#########################\n\nOPERATING_SYSTEM=Windows\nOS_PLATFORM=win_x64\nPRODUCT_NAME=NetWorker\nPRODUCT_PLATFORM_NAME=NetWorker\nPRODUCT_VERSION=7.5.1\nDESCRIPTION=Networker 7.5.1<\/pre>\n<p>So, our command will therefore be:<\/p>\n<pre>[root@nox repo]# nsrpush -a -p NetWorker -P win_x64 -v 7.5.1 -m \/tmp\/repo\n-c medusa -C 'C:temp751' -W\nHostname and mount point recorded.\nSuccess adding product from:\n\/tmp\/repo\/win_x64\n\nAdd to repository status: succeeded<\/pre>\n<p>We can subsequently confirm successful addition to the repository with our trusty nsrpush -l command:<\/p>\n<pre>[root@nox repo]# nsrpush -l\n\nProducts in the repository\n================================\n\n   NetWorker 7.5.1\n            win_x64\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                 Client\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                 Management Console\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                 Chinese Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                 Korean Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                 Japanese Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                 French Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                 English Language Pack\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                 Language Packs\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                 License Manager\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                 Server\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\n                 Storage Node<\/pre>\n<p>There you have it &#8211; software for an alternate platform added to the repository, with very little work.<\/p>\n<h3>Updating client software<\/h3>\n<p>Finally, there wouldn&#8217;t be much use for the repository without being able to push out updates.<\/p>\n<p>The upgrade command is reasonably straight forward:<\/p>\n<pre># nsrpush -u -p product -v version clients<\/pre>\n<p>Where &#8216;clients&#8217; is a space separated list of one or more clients. (Note that while you can in theory use the &#8216;-all&#8217; option for all clients, I&#8217;d <em>really, really<\/em> strongly recommend against it.)<\/p>\n<p>Now, our client &#8216;asgard&#8217; from before was still running NetWorker 7.4.2 for Linux, and I&#8217;d like to upgrade it to 7.4.4. The command and upgrade process is as follows:<\/p>\n<pre>[root@nox tmp]# nsrpush -u -p NetWorker -v 7.4.4 asgard\nStarting upgrade operation on selected clients.\nCreating client type job for client asgard.\nCopying upgrade scripts to client asgard.\nSuccessfully copied upgrade scripts to client asgard.\nChecking tmp space on client asgard.\nSuccessfully issued a tmp space check command to client asgard.\nCopying upgrade packages to client asgard.\nSuccessfully copied upgrade packages to client asgard.\nStarting upgrade of client asgard.\nSuccessfully issued an upgrade command to client asgard.\nWaiting for upgrade status for client asgard.\nStill waiting for the upgrade to complete on client asgard.\nWaiting for upgrade status for client asgard.\nSuccessfully retrieved and processed the package upgrade status data for client asgard\nStarting cleanup phase on client asgard.\nCleaning up client asgard.\nSuccessfully issued the cleanup command to client asgard.\n\nUpgrade status: succeeded<\/pre>\n<p>Pushing out software to alternate platforms (i.e., Windows from Unix or vice versa) is exactly the same command as above.<\/p>\n<h4>Cautions for upgrades<\/h4>\n<p>When you run upgrades, here&#8217;s what I&#8217;d suggest should be your cautions:<\/p>\n<ol>\n<li><strong>Always<\/strong> capture the output and confirm you get an &#8220;Upgrade status: succeeded&#8221; message for each client that you upgrade.<\/li>\n<li><strong>Don&#8217;t<\/strong> run the command against more than say, 5 clients at once.<\/li>\n<li><strong>Don&#8217;t<\/strong> run the command for Windows and Unix clients at the same time.<\/li>\n<li><strong>If<\/strong> the upgrade fails, confirm from the output whether NetWorker was able to restart on the client before attempting another push. If it doesn&#8217;t look like it did, you may have to install manually.<\/li>\n<\/ol>\n<p>Many errors that can come out of <em>nsrpush<\/em> are currently undocumented. Thus, if you run an nsrpush operation and get an error that you can&#8217;t find in PowerLink from a casual search, you probably need to log a case with EMC. (For instance, in tests today I got an error &#8220;client X has products installed that prevent upgrade&#8221;. There&#8217;s no publically visible documentation on this error, and despite the seeming logic of it, after checking the client, I don&#8217;t understand why the error came about.)<\/p>\n<p style=\"padding-left:30px;\"><em>[Edit &#8211; 2009-08-19 &#8211; While reviewing the 7.4.5 release notes I stumbled across the reason for the &#8220;client X has products installed that prevent upgrade&#8221; error; while I had been aware that you couldn&#8217;t use the repository to update hosts with the NetWorker server software installed, I wasn&#8217;t aware that you also can&#8217;t use it for hosts with NMC or Legato License Manager installed. The client I experienced an issue on was running LLM.]<\/em><\/p>\n<h3>Why would you use the repository?<\/h3>\n<p>It&#8217;s worth revisiting this \u2013 obviously I&#8217;ve couched all of the above in quite a few caveats and thrown in some curly comments (&#8220;many errors &#8230; are currently undocumented&#8221;). With this in mind, you may be wondering now that you&#8217;ve read to the bottom of the post why you would want to risk using the repository and running into problems.<\/p>\n<p>To me the most obvious reason is that the software repository is going to continue to improve. For instance, between 7.4.4 and 7.5.1 many known issues were sorted out, making 7.5.1 much more stable to use. It&#8217;s already, say, useful now, if you&#8217;re careful with it, and thus keeping abreast of it is going to allow you to continue to save time as each successive version comes out. It is already in a position to save you time and to help you keep clients (and modules) up to date \u2013 so this in itself, I believe, is reason enough to use it.<\/p>\n<p><em>[Edit 2009-08-21 Erroneous information left from a draft removed. Thanks Rolf for pointing this out.]<\/em><\/p>\n<p>Finally, even as the GUI continues to improve, I have been and always will be a fan of command line functionality <em>because it allows for scripting<\/em>. So even when there are limitations with what you can do in NMC, using <em>nsrpush<\/em> on the command line isn&#8217;t rocket science once you get used to the syntax.<\/p>\n<p>Much as there are parts of the repository that I find a bit curmudgeonly at the moment, I&#8217;m genuinely happy with where it has (finally) got to, and I&#8217;m equally genuinely looking forward to increased functionality and stability as newer versions of NetWorker come out. Over time it&#8217;s going to evolve from something which is a &#8220;partial time saver&#8221; to something that&#8217;s a <em>real<\/em> time saver.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There&#8217;s an old saying, &#8220;Be careful what you wish for; you may get it.&#8221; Many would say that&#8217;s an apt&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[15,16,27],"tags":[634,635,673],"class_list":["post-761","post","type-post","status-publish","format-standard","hentry","category-linux","category-networker","category-windows","tag-networker-repository","tag-networker-software-distribution","tag-nsrpush"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pKpIN-ch","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/posts\/761","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/comments?post=761"}],"version-history":[{"count":0,"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/posts\/761\/revisions"}],"wp:attachment":[{"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/media?parent=761"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/categories?post=761"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/tags?post=761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}