NI Package Manager (NIPM)

cancel
Showing results for 
Search instead for 
Did you mean: 

NIPM available on Chocolatey

Hello,

We are currently automating the configuration of our computers/VMs.
We are using Chocolatey to install multiple softwares. (https://chocolatey.org/)

Would it be possible to release the last NIPM on this platform?

 

That way, we could always download the latest NIPM.

 

If you don't plan to do it, our current solution is to have a fixed nipm.exe installer in our zip. And to update it from the command line before starting any other installations. Please let us know if that's the solution you would recommend.
Thank you so much for your collaboration on this matter,

Valerie

Message 1 of 12
(1,089 Views)

NI does not have any current plans to release NIPM on the Chocolatey platform. I am not technically up on the platform to have any recommendations for implementing a solution for including NIPM. What you suggest sounds reasonable.

Scott Richardson
National Instruments
0 Kudos
Message 2 of 12
(1,053 Views)

Hi Scott,

 

We are spinning our wheels trying to figure out feed URLs.

This is a problem for us because this means we will have to install every new packages NI will release to get the URLs.

Is there a way to simply call "nipm.exe --install labview-core" and get the latest version?


Same with ni-visa, ni-dmm, etc.?


Valerie

0 Kudos
Message 3 of 12
(1,018 Views)

Valerie, there is currently no simple way to ask NIPM to install the latest version of software. NI creates separate feeds for each version of its software, so NIPM needs to know the feed and then the package name to install will need to specify a version in some form.

 

There are a few options that you can take:

1) Creating a Chocolaty package around each NIPM online installer EXE is what I'd recommend for the customer, and host those in a local repository. Here is their quick start guide. The syntax for the script seems straightforward:

Scott_Richardson_0-1638998643281.jpeg

 

Seems like it can reference the URL for the installer on ni.com, and each Choco package could be tiny. For example to fully install DMM you could have $url:
and use $silentArgs:
--quiet --accept-eulas --prevent-reboot
 
Of the various options above, this seems the lowest in effort.
 
2) Creating a Chocolaty package that installs NIPM and then Creating a Chocolaty package for a specific version of software to call nipkg.exe to register its feed, install the the top-level package, and then optionally remove feed. Our feed names are fairly consistent, e.g. 
https://download.ni.com/support/nipkg/products/ni-l/ni-labview-2021/21.0/released
https://download.ni.com/support/nipkg/products/ni-l/ni-labview-2021/21.0/released-critical 

3) NIPM CLI with --install command offers similar options to install software like (2)

 

4) NIPM CLI use --uri command to install NI store items. Looking at the /? help for NIPackageManager.exe it lists the following:

NIPackageManager.exe [option ...]
OPTIONS:
    --uri="<URI>"
        Given that <URI> represents the URI of a store item action, the following URIs are possible:
            --uri=nipkg://store/[controllerVersion]/install-item/[GUID]/
        NI Package Manager launches an installation wizard and installs the item that [GUID] represents.

 

To use this option, you need to know the GUID. You can generally guess the GUID because by default our build tools set it to [top-level package name]_[majorversion.minorversion], but there's no guarantee.

 

The controllerVersion value used should be 2.

 

So for example...

The following command will install NI Package Builder 20.6 silently:

start /wait NIPackageManager.exe --uri=nipkg://store/2/install-item/ni-package-builder_20.6 --quiet
LabVIEW by itself is not exported from the NI store, but the LabVIEW and Drivers Suite is, so the following command will install the default products in the suite which include LabVIEW 2021:
start /wait NIPackageManager.exe --uri=nipkg://store/2/install-item/ni-labview-2021_21.0_suite --quiet
Scott Richardson
National Instruments
0 Kudos
Message 4 of 12
(997 Views)

Hello Scott,

 

I am working with Valerie on this problem and I have a question for you.

 

If I use the following command line, I am capable of installing LabVIEW 2019: 

 

NIPackageManager.exe install ni-labview-2019-core-en --temp-feeds=https://download.ni.com/support/nipkg/products/ni-l/ni-labview-2019/19.1/released 

 

Now, we would like to do the same but for different packages ((TestStand, NI-DMM, NI-Visa...).

 

I know where to find the names (ni-labview-2019-core-en) but struggle to find the URLs. The URL above (https://download.ni.com/support/nipkg/products/ni-l/ni-labview-2019/19.1/released) was given on a different NI forum and that's why I was able to use it.

 

So my question here is how can you get to the URLs? 

 

Thanks for your help.

 

Maxime 

0 Kudos
Message 5 of 12
(926 Views)

So my question here is how can you get to the URLs? 


If you have a PC with the products/packages installed, you get the feeds from NIPM. From the Settings gear icon in the upper right corner, check Show available packages and feed management tools. After that is enabled, there is a FEEDS tab in the settings dropdown, which will have the NI feeds for all the products. You can also get the feeds from the nipkg command line and also see which feeds a given package is available from.

__________________________________
Bill Eisenhower
Certified LabVIEW & TestStand Developer
0 Kudos
Message 6 of 12
(921 Views)

I don't have a good solution to the question you've asked (how to find feel URLs) but I do have these scripts that might be helpful/at least give some examples:

For 2019:

 

# This script adds feeds to nipkg for a specific build set
# Here we focus on LabVIEW 2019, SP1, 32-bit.

$daqmx_version = "19-5"
$daqmx_urlvers = "19.5"
$pkg_root = "https://download.ni.com/support/nipkg/products"
$pkg_root_l = "https://download.ni.com/support/nipkg/products/ni-l"

$feeds = @(
	[pscustomobject]@{name = "ni-labview-2019-core-x86-en-2019 SP1-released"; url = "$($pkg_root_l)/ni-labview-2019-x86/19.1/released"}
	[pscustomobject]@{name = "ni-labview-2019-core-x86-en-2019 SP1-released-critical"; url = "$($pkg_root_l)/ni-labview-2019-x86/19.1/released-critical"}
	[pscustomobject]@{name = "ni-labview-2019-rt-module-x86-en-2019-released"; url = "$($pkg_root_l)/ni-labview-2019-rt-module-x86/19.0/released"}
	[pscustomobject]@{name = "ni-labview-2019-rt-module-x86-en-2019-released-critical"; url = "$($pkg_root_l)/ni-labview-2019-rt-module-x86/19.0/released-critical"}
	[pscustomobject]@{name = "ni-labview-2019-fpga-module-x86-en-2019-released"; url = "$($pkg_root_l)/ni-labview-2019-fpga-module-x86/19.0/released"}
	[pscustomobject]@{name = "ni-labview-2019-vi-analyzer-toolkit-x86-2019-released"; url = "$($pkg_root_l)/ni-labview-2019-vi-analyzer-toolkit-x86/19.0/released"}
	[pscustomobject]@{name = "ni-labview-2019-aspt-toolkit-x86-2019-released"; url = "$($pkg_root_l)/ni-labview-2019-aspt-toolkit-x86/19.0/released"}
	[pscustomobject]@{name = "ni-sv-toolkit-2019-x86-2019-released"; url = "$($pkg_root)/ni-s/ni-sv-toolkit-2019-x86/19.0/released"}
	[pscustomobject]@{name = "ni-sv-toolkit-2019-x86-2019-released-critical"; url = "$($pkg_root)/ni-s/ni-sv-toolkit-2019-x86/19.0/released-critical"}
	[pscustomobject]@{name = "ni-compactrio-19-5-released"; url = "$($pkg_root)/ni-c/ni-compactrio/19.5/released"}
	[pscustomobject]@{name = "ni-daqmx-$($daqmx_version)-released"; url = "$($pkg_root)/ni-d/ni-daqmx/$($daqmx_urlvers)/released"}
	[pscustomobject]@{name = "ni-visa-19-5-released"; url = "$($pkg_root)/ni-v/ni-visa/19.5/released"}
)

#	[pscustomobject]@{name = ""; url = ""}

ForEach($pair in $feeds)
{
	nipkg.exe feed-add --name="""$($pair.name)""" --system $($pair.url)
}

 

 

For 2021:

 

# This script adds feeds to nipkg for a specific build set
# Here we focus on LabVIEW 2021, 32-bit.

$year = "2021"
$pkg_root = "https://download.ni.com/support/nipkg/products"

$lv_modules = "rt-module", "fpga-module", "vi-analyzer-toolkit", "aspt-toolkit", "cdsim-module", "mathscript-module"

# The "core" modules don't include core in the URL
nipkg.exe feed-add --name="""ni-labview-$year-core-x86-en-$year-released""" --system $("$pkg_root/ni-l/ni-labview-$year-x86/21.0/released")
nipkg.exe feed-add --name="""ni-labview-$year-core-x86-en-$year-released-critical""" --system $("$pkg_root/ni-l/ni-labview-$year-x86/21.0/released-critical")

# The other ni-l/ni-labview-... packages have a shared pattern
ForEach($module in $lv_modules)
{
	nipkg.exe feed-add --name="""ni-labview-$year-$module-x86-en-$year-released""" --system $("$pkg_root/ni-l/ni-labview-$year-$module-x86/21.0/released")
	nipkg.exe feed-add --name="""ni-labview-$year-$module-x86-en-$year-released-critical""" --system $("$pkg_root/ni-l/ni-labview-$year-$module-x86/21.0/released-critical")
}

$feeds = @(
	[pscustomobject]@{name = "ni-daqmx-21-0-released"; url = "$($pkg_root)/ni-d/ni-daqmx/21.0/released"}
	[pscustomobject]@{name = "ni-visa-21-0-released"; url = "$($pkg_root)/ni-v/ni-visa/21.0/released"}
	[pscustomobject]@{name = "ni-compactrio-21-0-released"; url = "$($pkg_root)/ni-c/ni-compactrio/21.0/released"}
)

ForEach($pair in $feeds)
{
	nipkg.exe feed-add --name="""$($pair.name)""" --system $($pair.url)
	nipkg.exe feed-add --name="""$($pair.name)-critical""" --system $($pair.url + "-critical")
}

 

 

These code samples are formatted using the "Python" setting, but are for Powershell, which might make the format highlighting not perfect, but it looks ok-ish...

Once I've run those scripts, I can then use something like the following to get more information (I use this in a tool I'm working on to simplify use of NIPM in Dockerfiles and containers/images).

 

GetPackageInfo.ps1

 

param (
	[string]$PackageName,
	[switch]$Installed
)

$operation = If ($Installed) { "info-installed" } Else { "info" }

$data = (nipkg $operation $PackageName | Out-String) -split '(\r?\n){4,}' | Where-Object { $_ -match '\S' } | ForEach-Object {
	# convert the resulting data into Hashtables and cast to PsCustomObject
	# Need at least 2 CRLF because some strings are multiline (e.g. see the FPGA module package)
	$lines = ($_ -split '(\r?\n){2,}' ) | Where-Object { $_ -match '\S' }
	$hash = @{}
	foreach ($line in $lines) {
		$name, $value = ($line -split ':', 2).Trim()
		 # now just overwrite the property if already present without error or add a new one.
		$hash[$name] = $value
	}
	[PsCustomObject] $hash
}

# next, complete the objects in the data array to all have the same properties
$properties = $data | ForEach-Object {($_.PSObject.Properties).Name} | Sort-Object -Unique
# update the items in the collection to contain all properties
$result = foreach($item in $data) {
    $item | Select-Object $properties
}

$result

 


 which can be used as follows:

 

 $(.\GetPackageInfo.ps1 -PackageName *daqmx*) | Where-Object { $_.version -like '19*' } | Select 'Package', 'DisplayName', 'Version'

 

cbutcher_1-1641568940810.png

 

 

You can 'Select' any of the information that pops up out of 'nipkg info', which I've used mainly for the Package, Depends, and Provides entries.

 

Presumably some set of commands exists to find the feed URLs based on information in the NIPM application or the default Feeds, but I haven't spent too much time investigating this, nor do I currently plan to - instead I have done as Bill wrote at simply looked up the feed URLs on a computer with NIPM installed (and a visible GUI!)


(Edit, there's also the -Installed flag in my script, not so useful for installation steps but potentially for looking stuff up, see below, including the ni-daqmx package which didn't match the $_.version check above)

cbutcher_0-1641569219755.png

 


GCentral
0 Kudos
Message 7 of 12
(912 Views)

Command line way to get the full list of feeds

"c:\Program Files\National Instruments\NI Package Manager\nipkg.exe" feed-list

__________________________________
Bill Eisenhower
Certified LabVIEW & TestStand Developer
0 Kudos
Message 8 of 12
(906 Views)

I think this


@CL_eisenwr wrote:

Command line way to get the full list of feeds

"c:\Program Files\National Instruments\NI Package Manager\nipkg.exe" feed-list


will only give the feeds registered on the current installation (i.e., not all NI feeds).

 

"nipkg.exe list-source-feeds" is also promising for some of this stuff, but has the following response to an invalid package:

cbutcher_0-1641569682440.png

which to me suggests it also only searches registered feeds (I mean, how would it do otherwise... I suppose)

The help reads:

PS C:\LabVIEW Sources\LabVIEW_Dockerfiles> nipkg help list-source-feeds

list-source-feeds - Show the list of feeds that contain the specified package names

nipkg list-source-feeds PKG-NAMES...

   Show the list of feeds that contain the specified packages. You can search
   for multiple packages by using a space-delimited list of package names, and
   it will return all feeds that contain any of the specified packages. By
   default, Package Manager reports the source feed for any matching package
   name regardless of version, architecture, or whether it is installable on
   the current system (for example, due to conflicts or missing dependencies).
   You can optionally filter this source list by including a :bitness specifier
   and/or a =version specifier on each package name.
   (Example: list-source-feeds ni-daqmx:windows_x64=18.0)

   PKG-NAMES
      A list of packages for which you want to find the source feeds.


and executing "nipkg list-source-feeds ni-daqmx" returns:

$ nipkg list-source-feeds ni-daqmx
ni-daqmx-20-0-released  https://download.ni.com/support/nipkg/products/ni-d/ni-daqmx/20.0/released

which might be useful in some cases?


GCentral
0 Kudos
Message 9 of 12
(902 Views)

Wow I didn't think that this subject would bring that much enthusiasm 😄

 

Thanks to the both of you for your very interesting replies!

 

I was able to find the feeds and install the desired packages.

 

I have another concern now, let's say that I have installed NI-Visa 19.0 on my computer. I would like to upgrade my package to the latest version available on the NI website (which is currently version 21.0). I have tried with the command line: 

nipkg.exe upgrade --accept-eulas ni-visa

 

But as a result, I get the following: 

ni-visa is not installed or is not upgradable. No operation will be performed.

 

Any workaround that you could think of?

 

Thanks again. 

0 Kudos
Message 10 of 12
(890 Views)