Monday, September 19, 2022

How to Install LabVIEW Community Edition on Linux Mint

Here's how I hacked the installation program to force it to install on Linux Mint. I have Mint version 20.2 with the Cinnamon desktop.

I downloaded the LabVIEW Community Edition (free for non-commercial use)

Download Site: https://www.ni.com/en-us/shop/labview/select-edition/labview-community-edition.html

I found the file lv2022Q3community-linux.iso in my Downloads folder and then right clicked and selected Make bootable USB stick.


I selected an SD card that I had plugged in and wrote the .iso file to it. 

To get to the installation folder, I went to my media folder and typed:

john@X9:/media/john$ ls
ls: cannot open directory '.': Permission denied
john@X9:/media/john$ sudo ls
[sudo] password for john:

And then it listed the folders and I was able to cd to the SD card.

Since Linux Mint is Ubuntu based, I figured it should work just fine. I tried to install from the SD card, but I got this error message:

john@X9:/media/john/2022Q3LVLinPro$ sudo ./INSTALL
Sorry, LabVIEW is not currently available for this O/S and architecture.
Visit http://www.ni.com/support/ to search the knowledge base
or http://www.ni.com/ask/ to obtain e-mail tech. support.
 

I'm not giving up. Let's dig deeper. I needed to be able to edit, so I copied the entire SD card contents to ~/Downloads/LV.

I had to enable execution of the file INSTALL using chmod.

john@X9:~/Downloads/LV$ chmod +x INSTALL

The INSTALL file has a main program toward the end of the file. It quit during the function prereq_check.

main() {
  get_current_directory
  cd "$cd_path"
  prereq_check

I found that the problem was that it looks for the distribution ID and checks it in a case list. If it's not in the list, it quits with the above error message. 

The prereq_check function is in both INSTALL and install_helpers.sh. I tried adding linuxmint as shown below in both files, but it didn't work. 

case "${distro_id}" in
    ubuntu|linuxmint)

So I just forced the code to think it's installing on ubuntu by changing the get_distro function in utils/install_helpers.sh. I added the line in bold below:

get_distro() {
  if [ -z "$distro_id" ]; then
    if [ -f "/etc/os-release" ]; then
      . /etc/os-release
      distro_id=${ID}
      distro_id="ubuntu"
      distro_name=${NAME}
    else

I just added the line distro_id="ubuntu" to force it to "ubuntu" instead of "linuxmint". NI just didn't account for the fact that Linux Mint was Ubuntu based and should have added linuxmint to the list of acceptable distro IDs.

Success!

I ran the modified installation program and here's the complete output:

 

john@X9:~/Downloads/LV$ sudo ./INSTALL
LabVIEW 2022 Q3 for GNU/Linux

Copyright (c) 2022, National Instruments Corporation.  The source code of this
product is unpublished, unlicensed, and a proprietary trade secret of National
Instruments Corporation.  Decompilation or other reduction of this object code
to human-readable form is prohibited by the license agreement between National
Instruments Corporation and the lawful user or possessor of this copy.

                           Restricted Rights Legend

Use, duplication, or disclosure by the United States Government is subject to
restrictions set forth in subparagraph (c)(1)(ii) of the Rights in Technical
Data and Computer Software Clause at DFARS 252.227-7013 and FAR 52.227-19 (c).

                       National Instruments Corporation
                            11500 N. Mopac Expwy.
                             Austin, Texas 78759
                                    U.S.A.

By installing LabVIEW software packages, you agree to the terms of the included
NI Software License Agreement \(LICENSE.txt\). Type 'v' to view the agreement,
'y' to consent to the agreement, or 'n' to decline the agreement and skip
LabVIEW installation.  [Vynq] y

Preparing for installation...
Registering ubuntu Feed
Get:1 file:/home/john/Downloads/LV/deb bionic InRelease [3,436 B]
Get:1 file:/home/john/Downloads/LV/deb bionic InRelease [3,436 B]
Ign:2 http://packages.linuxmint.com uma InRelease
Get:3 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 i386 Packages [1,924 B]
Hit:4 http://packages.linuxmint.com uma Release                                
Get:5 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 Packages [8,591 B]
Hit:6 http://archive.canonical.com/ubuntu focal InRelease                      
Hit:8 https://dl.google.com/linux/chrome/deb stable InRelease                  
Get:9 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Hit:10 http://archive.ubuntu.com/ubuntu focal InRelease               
Get:11 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Get:12 http://security.ubuntu.com/ubuntu focal-security/main amd64 DEP-11 Metadata [40.7 kB]
Get:13 http://archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
Get:14 http://security.ubuntu.com/ubuntu focal-security/universe amd64 DEP-11 Metadata [77.2 kB]
Get:15 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 DEP-11 Metadata [2,464 B]
Get:16 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 DEP-11 Metadata [278 kB]
Get:17 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 DEP-11 Metadata [390 kB]
Get:18 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 DEP-11 Metadata [944 B]
Get:19 http://archive.ubuntu.com/ubuntu focal-backports/main amd64 DEP-11 Metadata [7,984 B]
Get:20 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 DEP-11 Metadata [30.5 kB]
Fetched 1,164 kB in 2s (527 kB/s)                                           
Reading package lists... Done
Building dependency tree       
Reading state information... Done
32 packages can be upgraded. Run 'apt list --upgradable' to see them.
Please indicate whether you would like to install the following components:

ni-labview-2022-community: LabVIEW Community Edition
[Ynasq?] y


Installing...
Install ni-labview-2022-community from Feed
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  labview-2022-community-exe labview-2022-exe-libs labview-2022-rte
  libncurses5 libtinfo5 lvsupport2022-vianalyzer ni-avahi-client ni-ceip
  ni-euladepot ni-example-finder ni-example-finder-base ni-help-launcher
  ni-labview-2022-appbuild ni-labview-2022-core ni-labview-2022-desktop
  ni-labview-2022-example-finder ni-labview-2022-example-finder-lib
  ni-labview-2022-examples ni-labview-2022-help ni-labview-2022-ref
  ni-labview-command-line-interface ni-labview-vicompare ni-labview-vimerge
  ni-networkdiscoverysvc ni-python-interface ni-service-locator
  ni-software-action-services ni-ssl-bin ni-sysapi ni-syscfg-runtime
  ni-targetcfg ni-tdms-bin ni-wine ni-wine-dotnet-runtime-60
  ni-wine-platform-support nicurli nijsonmapi nisslcerts nissli nitdmsi
Suggested packages:
  ni-syscfg-labview-support
The following NEW packages will be installed:
  labview-2022-community-exe labview-2022-exe-libs labview-2022-rte
  libncurses5 libtinfo5 lvsupport2022-vianalyzer ni-avahi-client ni-ceip
  ni-euladepot ni-example-finder ni-example-finder-base ni-help-launcher
  ni-labview-2022-appbuild ni-labview-2022-community ni-labview-2022-core
  ni-labview-2022-desktop ni-labview-2022-example-finder
  ni-labview-2022-example-finder-lib ni-labview-2022-examples
  ni-labview-2022-help ni-labview-2022-ref ni-labview-command-line-interface
  ni-labview-vicompare ni-labview-vimerge ni-networkdiscoverysvc
  ni-python-interface ni-service-locator ni-software-action-services
  ni-ssl-bin ni-sysapi ni-syscfg-runtime ni-targetcfg ni-tdms-bin ni-wine
  ni-wine-dotnet-runtime-60 ni-wine-platform-support nicurli nijsonmapi
  nisslcerts nissli nitdmsi
0 upgraded, 41 newly installed, 0 to remove and 32 not upgraded.
Need to get 180 kB/661 MB of archives.
After this operation, 864 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 labview-2022-exe-libs amd64 22.3.0.49363-0+f211 [2,173 kB]
Get:2 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 labview-2022-community-exe amd64 22.3.0.49364-0+f212 [21.2 MB]
Get:3 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-python-interface amd64 22.3.0.49250-0+f98 [106 kB]
Get:4 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-tdms-bin amd64 22.3.0.49246-0+f94 [217 kB]
Get:5 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 nitdmsi all 22.3.0.49246-0+f94 [758 B]
Get:6 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-ssl-bin amd64 21.3.0.49152-0+f0 [712 kB]
Get:7 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 nissli all 21.3.0.49152-0+f0 [722 B]
Get:8 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 nisslcerts all 21.3.0.49152-0+f0 [2,228 B]
Get:9 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 nicurli amd64 21.3.0.49152-0+f0 [154 kB]
Get:10 http://archive.ubuntu.com/ubuntu focal/universe amd64 libtinfo5 amd64 6.2-0ubuntu2 [83.0 kB]
Get:11 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 labview-2022-rte amd64 22.3.0.49363-0+f211 [36.3 MB]
Get:12 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 lvsupport2022-vianalyzer amd64 22.3.0.49316-0+f164 [8,834 kB]
Get:13 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-avahi-client amd64 22.5.0.49216-0+f64 [7,372 B]
Get:14 http://archive.ubuntu.com/ubuntu focal/universe amd64 libncurses5 amd64 6.2-0ubuntu2 [96.9 kB]
Get:15 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-euladepot all 22.5.0.49285-0+f133 [9,896 kB]
Get:16 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-software-action-services amd64 22.5.0.49218-0+f66 [52.4 kB]
Get:17 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-targetcfg amd64 22.5.0.49215-0+f63 [145 kB]
Get:18 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-sysapi amd64 22.5.0.49218-0+f66 [761 kB]
Get:19 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-networkdiscoverysvc amd64 22.5.0.49218-0+f66 [75.0 kB]
Get:20 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-syscfg-runtime amd64 22.5.0.49218-0+f66 [1,194 kB]
Get:21 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-wine amd64 22.5.0.49176-0+f24 [124 MB]
Get:22 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-wine-dotnet-runtime-60 amd64 22.5.0.49176-0+f24 [49.1 MB]
Get:23 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-wine-platform-support amd64 22.5.0.49175-0+f23 [13.0 kB]
Get:24 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-ceip amd64 22.5.0.49199-0+f47 [1,061 kB]
Get:25 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-example-finder-base all 22.3.0.49363-0+f211 [150 kB]
Get:26 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-example-finder amd64 22.3.0.49363-0+f211 [2,136 kB]
Get:27 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-help-launcher all 22.5.0.49176-0+f24 [2,418 B]
Get:28 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-service-locator amd64 22.3.0.49294-0+f142 [23.9 kB]
Get:29 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-labview-2022-core amd64 22.3.0.49363-0+f211 [352 MB]
Get:30 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-labview-2022-appbuild amd64 22.3.0.49363-0+f211 [14.0 MB]
Get:31 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-labview-vimerge amd64 22.3.0.49363-0+f211 [2,406 B]
Get:32 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-labview-vicompare amd64 22.3.0.49363-0+f211 [43.9 kB]
Get:33 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-labview-2022-desktop amd64 22.3.0.49363-0+f211 [233 kB]
Get:34 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-labview-2022-examples amd64 22.3.0.49363-0+f211 [17.2 MB]
Get:35 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-labview-2022-help amd64 22.3.0.49363-0+f211 [17.0 MB]
Get:36 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-labview-2022-ref amd64 22.3.0.49363-0+f211 [8,354 B]
Get:37 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-labview-2022-example-finder-lib amd64 22.3.0.49363-0+f211 [180 kB]
Get:38 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-labview-2022-example-finder all 22.3.0.49363-0+f211 [265 kB]
Get:39 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 nijsonmapi all 21.0.0.49152-0+f0 [18.7 kB]
Get:40 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-labview-command-line-interface amd64 22.3.0.49247-0+f95 [1,193 kB]
Get:41 file:/home/john/Downloads/LV/deb bionic/ni-labview-2022 amd64 ni-labview-2022-community amd64 22.3.0.49364-0+f212 [1,076 B]
Fetched 180 kB in 7s (24.4 kB/s)                                               
Extracting templates from packages: 100%
Selecting previously unselected package labview-2022-exe-libs.
(Reading database ... 432082 files and directories currently installed.)
Preparing to unpack .../00-labview-2022-exe-libs_22.3.0.49363-0+f211_amd64.deb .
..
Unpacking labview-2022-exe-libs (22.3.0.49363-0+f211) ...
Selecting previously unselected package labview-2022-community-exe.
Preparing to unpack .../01-labview-2022-community-exe_22.3.0.49364-0+f212_amd64.
deb ...
Unpacking labview-2022-community-exe (22.3.0.49364-0+f212) ...
Selecting previously unselected package ni-python-interface.
Preparing to unpack .../02-ni-python-interface_22.3.0.49250-0+f98_amd64.deb ...
Unpacking ni-python-interface (22.3.0.49250-0+f98) ...
Selecting previously unselected package ni-tdms-bin.
Preparing to unpack .../03-ni-tdms-bin_22.3.0.49246-0+f94_amd64.deb ...
Unpacking ni-tdms-bin (22.3.0.49246-0+f94) ...
Selecting previously unselected package nitdmsi.
Preparing to unpack .../04-nitdmsi_22.3.0.49246-0+f94_all.deb ...
Unpacking nitdmsi (22.3.0.49246-0+f94) ...
Selecting previously unselected package ni-ssl-bin.
Preparing to unpack .../05-ni-ssl-bin_21.3.0.49152-0+f0_amd64.deb ...
Unpacking ni-ssl-bin (21.3.0.49152-0+f0) ...
Selecting previously unselected package nissli.
Preparing to unpack .../06-nissli_21.3.0.49152-0+f0_all.deb ...
Unpacking nissli (21.3.0.49152-0+f0) ...
Selecting previously unselected package nisslcerts.
Preparing to unpack .../07-nisslcerts_21.3.0.49152-0+f0_all.deb ...
Unpacking nisslcerts (21.3.0.49152-0+f0) ...
Selecting previously unselected package nicurli.
Preparing to unpack .../08-nicurli_21.3.0.49152-0+f0_amd64.deb ...
Unpacking nicurli (21.3.0.49152-0+f0) ...
Selecting previously unselected package labview-2022-rte.
Preparing to unpack .../09-labview-2022-rte_22.3.0.49363-0+f211_amd64.deb ...
Unpacking labview-2022-rte (22.3.0.49363-0+f211) ...
Selecting previously unselected package libtinfo5:amd64.
Preparing to unpack .../10-libtinfo5_6.2-0ubuntu2_amd64.deb ...
Unpacking libtinfo5:amd64 (6.2-0ubuntu2) ...
Selecting previously unselected package libncurses5:amd64.
Preparing to unpack .../11-libncurses5_6.2-0ubuntu2_amd64.deb ...
Unpacking libncurses5:amd64 (6.2-0ubuntu2) ...
Selecting previously unselected package lvsupport2022-vianalyzer.
Preparing to unpack .../12-lvsupport2022-vianalyzer_22.3.0.49316-0+f164_amd64.de
b ...
Unpacking lvsupport2022-vianalyzer (22.3.0.49316-0+f164) ...
Selecting previously unselected package ni-avahi-client.
Preparing to unpack .../13-ni-avahi-client_22.5.0.49216-0+f64_amd64.deb ...
Unpacking ni-avahi-client (22.5.0.49216-0+f64) ...
Selecting previously unselected package ni-euladepot.
Preparing to unpack .../14-ni-euladepot_22.5.0.49285-0+f133_all.deb ...
Unpacking ni-euladepot (22.5.0.49285-0+f133) ...
Selecting previously unselected package ni-software-action-services.
Preparing to unpack .../15-ni-software-action-services_22.5.0.49218-0+f66_amd64.
deb ...
Unpacking ni-software-action-services (22.5.0.49218-0+f66) ...
Selecting previously unselected package ni-targetcfg.
Preparing to unpack .../16-ni-targetcfg_22.5.0.49215-0+f63_amd64.deb ...
Unpacking ni-targetcfg (22.5.0.49215-0+f63) ...
Selecting previously unselected package ni-sysapi.
Preparing to unpack .../17-ni-sysapi_22.5.0.49218-0+f66_amd64.deb ...
Unpacking ni-sysapi (22.5.0.49218-0+f66) ...
Selecting previously unselected package ni-networkdiscoverysvc.
Preparing to unpack .../18-ni-networkdiscoverysvc_22.5.0.49218-0+f66_amd64.deb .
..
Unpacking ni-networkdiscoverysvc (22.5.0.49218-0+f66) ...
Selecting previously unselected package ni-syscfg-runtime.
Preparing to unpack .../19-ni-syscfg-runtime_22.5.0.49218-0+f66_amd64.deb ...
Unpacking ni-syscfg-runtime (22.5.0.49218-0+f66) ...
Selecting previously unselected package ni-wine.
Preparing to unpack .../20-ni-wine_22.5.0.49176-0+f24_amd64.deb ...
Unpacking ni-wine (22.5.0.49176-0+f24) ...
Selecting previously unselected package ni-wine-dotnet-runtime-60.
Preparing to unpack .../21-ni-wine-dotnet-runtime-60_22.5.0.49176-0+f24_amd64.de
b ...
Unpacking ni-wine-dotnet-runtime-60 (22.5.0.49176-0+f24) ...
Selecting previously unselected package ni-wine-platform-support.
Preparing to unpack .../22-ni-wine-platform-support_22.5.0.49175-0+f23_amd64.deb
 ...
Unpacking ni-wine-platform-support (22.5.0.49175-0+f23) ...
Selecting previously unselected package ni-ceip.
Preparing to unpack .../23-ni-ceip_22.5.0.49199-0+f47_amd64.deb ...
Unpacking ni-ceip (22.5.0.49199-0+f47) ...
Selecting previously unselected package ni-example-finder-base.
Preparing to unpack .../24-ni-example-finder-base_22.3.0.49363-0+f211_all.deb ..
.
Unpacking ni-example-finder-base (22.3.0.49363-0+f211) ...
Selecting previously unselected package ni-example-finder.
Preparing to unpack .../25-ni-example-finder_22.3.0.49363-0+f211_amd64.deb ...
Unpacking ni-example-finder (22.3.0.49363-0+f211) ...
Selecting previously unselected package ni-help-launcher.
Preparing to unpack .../26-ni-help-launcher_22.5.0.49176-0+f24_all.deb ...
Unpacking ni-help-launcher (22.5.0.49176-0+f24) ...
Selecting previously unselected package ni-service-locator.
Preparing to unpack .../27-ni-service-locator_22.3.0.49294-0+f142_amd64.deb ...
Unpacking ni-service-locator (22.3.0.49294-0+f142) ...
Selecting previously unselected package ni-labview-2022-core.
Preparing to unpack .../28-ni-labview-2022-core_22.3.0.49363-0+f211_amd64.deb ..
.
Unpacking ni-labview-2022-core (22.3.0.49363-0+f211) ...
Selecting previously unselected package ni-labview-2022-appbuild.
Preparing to unpack .../29-ni-labview-2022-appbuild_22.3.0.49363-0+f211_amd64.de
b ...
Unpacking ni-labview-2022-appbuild (22.3.0.49363-0+f211) ...
Selecting previously unselected package ni-labview-vimerge.
Preparing to unpack .../30-ni-labview-vimerge_22.3.0.49363-0+f211_amd64.deb ...
Unpacking ni-labview-vimerge (22.3.0.49363-0+f211) ...
Selecting previously unselected package ni-labview-vicompare.
Preparing to unpack .../31-ni-labview-vicompare_22.3.0.49363-0+f211_amd64.deb ..
.
Unpacking ni-labview-vicompare (22.3.0.49363-0+f211) ...
Selecting previously unselected package ni-labview-2022-desktop.
Preparing to unpack .../32-ni-labview-2022-desktop_22.3.0.49363-0+f211_amd64.deb
 ...
Unpacking ni-labview-2022-desktop (22.3.0.49363-0+f211) ...
Selecting previously unselected package ni-labview-2022-examples.
Preparing to unpack .../33-ni-labview-2022-examples_22.3.0.49363-0+f211_amd64.de
b ...
Unpacking ni-labview-2022-examples (22.3.0.49363-0+f211) ...
Selecting previously unselected package ni-labview-2022-help.
Preparing to unpack .../34-ni-labview-2022-help_22.3.0.49363-0+f211_amd64.deb ..
.
Unpacking ni-labview-2022-help (22.3.0.49363-0+f211) ...
Selecting previously unselected package ni-labview-2022-ref.
Preparing to unpack .../35-ni-labview-2022-ref_22.3.0.49363-0+f211_amd64.deb ...
Unpacking ni-labview-2022-ref (22.3.0.49363-0+f211) ...
Selecting previously unselected package ni-labview-2022-example-finder-lib.
Preparing to unpack .../36-ni-labview-2022-example-finder-lib_22.3.0.49363-0+f21
1_amd64.deb ...
Unpacking ni-labview-2022-example-finder-lib (22.3.0.49363-0+f211) ...
Selecting previously unselected package ni-labview-2022-example-finder.
Preparing to unpack .../37-ni-labview-2022-example-finder_22.3.0.49363-0+f211_al
l.deb ...
Unpacking ni-labview-2022-example-finder (22.3.0.49363-0+f211) ...
Selecting previously unselected package nijsonmapi.
Preparing to unpack .../38-nijsonmapi_21.0.0.49152-0+f0_all.deb ...
Unpacking nijsonmapi (21.0.0.49152-0+f0) ...
Selecting previously unselected package ni-labview-command-line-interface.
Preparing to unpack .../39-ni-labview-command-line-interface_22.3.0.49247-0+f95_
amd64.deb ...
Unpacking ni-labview-command-line-interface (22.3.0.49247-0+f95) ...
Selecting previously unselected package ni-labview-2022-community.
Preparing to unpack .../40-ni-labview-2022-community_22.3.0.49364-0+f212_amd64.d
eb ...
Unpacking ni-labview-2022-community (22.3.0.49364-0+f212) ...
Setting up nisslcerts (21.3.0.49152-0+f0) ...
Setting up lvsupport2022-vianalyzer (22.3.0.49316-0+f164) ...
Setting up ni-ssl-bin (21.3.0.49152-0+f0) ...
Setting up ni-tdms-bin (22.3.0.49246-0+f94) ...
Setting up ni-labview-command-line-interface (22.3.0.49247-0+f95) ...
Setting up ni-euladepot (22.5.0.49285-0+f133) ...
Setting up nitdmsi (22.3.0.49246-0+f94) ...
Setting up ni-service-locator (22.3.0.49294-0+f142) ...
Setting up ni-wine-platform-support (22.5.0.49175-0+f23) ...
Setting up ni-targetcfg (22.5.0.49215-0+f63) ...
Setting up ni-labview-vimerge (22.3.0.49363-0+f211) ...
Setting up nissli (21.3.0.49152-0+f0) ...
Setting up ni-labview-vicompare (22.3.0.49363-0+f211) ...
Setting up ni-example-finder-base (22.3.0.49363-0+f211) ...
Setting up nijsonmapi (21.0.0.49152-0+f0) ...
Setting up ni-software-action-services (22.5.0.49218-0+f66) ...
Setting up ni-help-launcher (22.5.0.49176-0+f24) ...
Setting up ni-avahi-client (22.5.0.49216-0+f64) ...
Setting up ni-python-interface (22.3.0.49250-0+f98) ...
Setting up libtinfo5:amd64 (6.2-0ubuntu2) ...
Setting up labview-2022-exe-libs (22.3.0.49363-0+f211) ...
Setting up labview-2022-community-exe (22.3.0.49364-0+f212) ...
Setting up libncurses5:amd64 (6.2-0ubuntu2) ...
Setting up nicurli (21.3.0.49152-0+f0) ...
Setting up ni-wine (22.5.0.49176-0+f24) ...
Setting up ni-sysapi (22.5.0.49218-0+f66) ...
Setting up ni-networkdiscoverysvc (22.5.0.49218-0+f66) ...
Setting up labview-2022-rte (22.3.0.49363-0+f211) ...
Setting up ni-wine-dotnet-runtime-60 (22.5.0.49176-0+f24) ...
Setting up ni-syscfg-runtime (22.5.0.49218-0+f66) ...
Setting up ni-labview-2022-example-finder-lib (22.3.0.49363-0+f211) ...
Setting up ni-ceip (22.5.0.49199-0+f47) ...
gtk-update-icon-cache: Cache file created successfully.
gtk-update-icon-cache: Cache file created successfully.
Setting up ni-example-finder (22.3.0.49363-0+f211) ...
Setting up ni-labview-2022-example-finder (22.3.0.49363-0+f211) ...
Setting up ni-labview-2022-core (22.3.0.49363-0+f211) ...
Setting up ni-labview-2022-appbuild (22.3.0.49363-0+f211) ...
Setting up ni-labview-2022-ref (22.3.0.49363-0+f211) ...
Setting up ni-labview-2022-help (22.3.0.49363-0+f211) ...
Setting up ni-labview-2022-examples (22.3.0.49363-0+f211) ...
Setting up ni-labview-2022-desktop (22.3.0.49363-0+f211) ...
gtk-update-icon-cache: Cache file created successfully.
Error in file "/usr/share/applications/org.kde.kdeconnect_open.desktop": "*/*" i
s an invalid MIME type ("*" is an unregistered media type)
Setting up ni-labview-2022-community (22.3.0.49364-0+f212) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for gnome-menus (3.36.0-1ubuntu1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.9) ...
Processing triggers for desktop-file-utils (0.24+linuxmint1) ...
Un-registering ubuntu Feed


================================================================================

To install the latest NI-VISA and NI-488.2, visit
http://www.ni.com/en-us/support/downloads/drivers/download.ni-linux-device-drivers.html


Please see the LabVIEW Upgrade Notes \(in the labview-2022-ref package\) for
information about new features in LabVIEW 2022 Q3.

Installation complete.
john@X9:~/Downloads/LV$ 

Launch LabVIEW

The LabVIEW program is added to the Programming menu:

 

After launching LabVIEW, I get the activation screen:

After activation, here's the start screen:


Sweet! Here's a screenshot showing LabVIEW running on Mint:




Friday, January 7, 2022

Crank, no start. Wild goose chase diagnostic.

2010 Nissan Pathfinder

4.0 V6, automatic, 2WD

Problem: Cranks, but doesn't start when cold. 

I think the previous owner of this Pathfinder sold it because he couldn't figure out the problem since he did actually disclose that problem before selling it. I saw this Pathfinder shortly after it was bought and the battery wasn't old but was over-filled, so the acid was too diluted. 

After a month or so, I got the opportunity to diagnose the cold no-start problem.

The first thing I wanted to blame it on was the aftermarket alarm system. It was installed with clip-on wire splices. One splice was loose. But I resisted the temptation to blame it on that without any condemning evidence. 

I thought that warming up the security system module would make a difference. It didn't.

My next thought was a bad temperature sensor might be reading hot and the computer wouldn't give it enough fuel when cold. So I scanned the temperature sensors and didn't find that problem. The MAF is combined with the intake air temperature sensor, so if you have the key on and wait a while to start, it'll read 10 or 20 degrees hotter than ambient because the MAF has a hot wire sensor and it'll read hotter than ambient when there's no air flow. 

I sprayed some starting fluid in the intake and it didn't help it start at all.

I checked for spark and the computer wasn't firing the coils.  

I noticed that somebody damaged the relays. Eric O. (South Main Auto Repair) saw the same thing on another Nissan. 

The relays still worked, so I left them as-is. The relay I'm holding in the above picture is for the radiator fan.

I scanned all the modules for codes and came up with a few, but none that would explain the no-start condition.

Codes

ECM

P1564 - automatic speed control device. Improper voltage signal from steering switch sent to ECM. Each cruise control button has a different resistance. The ECM uses the voltage to determine which switch was pressed. No longer an active code. Maybe this code can be triggered by pressing multiple cruise control buttons at the same time.

P0113 because I unplugged the MAF/intake air temp plug.

IPDM - no DTC

Smart key module not present.

Automatic drive positioner not present (not 4WD).

Intelligent master not present.

Body control module - no DTC.

All four tires TPMS read 0psi.

HVAC module not present (manual controls).

Combination meter no DTC

U1000 (historical)

MIL LED not working.

Airbag LED not working.

Rear camera not present.

Airbag module

B1054 – driver airbag module open

B1049 – driver airbag module open

B1015 – Passenger Deploy. Loop Resistance High.

B1220 - manufacturer defined (I can't find this one.) 

It kind of looks like the vehicle was in an accident and they didn't put airbags back in.

ABS module

C1156 – LF wheel speed sensor circuit open

U1000 – communication error

C1163 – steering angle sensor in safe mode

Differential lock module not present.

Automatic transmission module not present. (Not included if no Bose audio system. Weird, I know.)

More Troubleshooting

I connected my battery charger and went to print off some wiring diagrams. The weather got warmer and when I got back, it started right up. So I figured I was done for the day and would try again when it was colder. By the way, the battery was replaced about a month or so ago by the new owner.

I noticed that on the instrument cluster, the SERVICE ENGINE SOON light didn't come on with the ignition in the on position. The airbag and TPMS lights also didn't come on. This instrument cluster doesn't have light bulbs. It uses LEDs without light bulb sockets. So I made sure that the power wire that activates the SERVICE ENGINE SOON light was working. It gets power to connector pin 16 with the ignition on. So that was good. I didn't take apart the cluster to see if the LEDs were sabotaged. 

Next, I needed to make sure the ECM was getting power to pin 109 (IGNSW) with the ignition switch in the on position. That also checked out. 

I checked the resistance between CAN high and CAN low with the battery disconnected. It read 60.9 ohms, right on target. 

Maybe there's a parasitic draw on the battery. I was reading 105mA. 

  • Fuse 21 had a 0.2mV drop, but it didn't have a significant current. 
  • IPDM 50A fuse draws 46mA until the body control module shuts down. 
  • The aftermarket alarm draws about 10mA. 
  • Eventually, the entire system will draw between 27 and 31mA after the modules shut down. I didn't measure the time it took to shut down all the modules. It could be an hour. 

Critical Clue

After a few days of troubleshooting, the vehicle's owner told me that it would start with a jump-start. Wow, I wish I knew that a few days ago. 

So I determined a new direction for troubleshooting. 

  • Peak starter current draw = 271A. This is a new starter. I had my video camera on the current meter, but as luck would have it, I didn't have it set up correctly to show the average current draw.
  • Body to engine voltage during cranking = 44mV
  • Battery negative to body voltage when cranking = 211mV
  • Battery voltage during cranking = 9.9V
  • Scantool voltage during cranking = 8.5 - 9.8V.
  •  ECM voltage during cranking: It does not report data when it won't start. If it sends data, it starts. 

In this graph, the scan tool voltage scale is on the left, in Volts, and the ECM voltage is on the right in mV. This graph is from when it started. Scan tool volts dropped to about 9.6V. The ECM dropped to 10.5V as reported.

So, knowing that it would start with a jump, I turned on the lights for a minute or less and tried again. This time, it didn't start and the ECM would not report anything while cranking. But as soon as I stopped cranking, it would start sending voltage data again.
 

Terminal Cleaning

The fusible link assembly on the positive battery terminal looked ok, but I wanted a closer look. 

When I disconnected the cables, I saw some corrosion.
 


I cleaned these up. 

I then applied anti-corrosion spray. 

There's a body ground connection at the base of the battery. I cleaned that one up too and sprayed it. 

Post-Cleaning Voltage

With a fully charged battery and cleaned terminals, here's what the voltage looked like during cranking. Scan tool went down to 10.2V and the ECM went down to 10.5V during cranking.

The two voltages are also closer together now during cranking. 

Conclusion

The battery with only 550 CCA was insufficient to keep the Voltage high enough for the ECM to function during cranking. I'm recommending a 1000 CCA battery.

When the voltage drops too low and the ECM won't run, further cranking will only drain the battery. It's best to stop and get a jump start.

It took me a week to figure out that the battery was under-sized. 

Cleaning the contacts helped, but I would be nervous about that small battery not starting it when it's super cold outside.

Friday, December 31, 2021

Camry Worse After Reputable Shop "Fixed" it

It all started with a minor accident. 

October 4. Mom was sitting at a red light. The light turned green and she started to go. Just then, a pickup ran the red light and she contacted the side of the pickup as it passed her and it ripped off most of her bumper cover and the styrofoam. (Yes, there's styrofoam underneath that bumper cover.)


She thought maybe she would get a new car. But the insurance said they would fix it, so she thought maybe she'd sell it after it got fixed. So she had me inspect it and find everything wrong with it, not including the damage from the accident. I used my inspection form and created a list of everything I could find that could be a negative when someone does a pre-purchase inspection. 

Here's what I came up with.

I later found out that the steering wheel had to be turned 135 degrees before the steering wheel locked. So that part was ok and didn't need any repair. 

I replaced the rack and pinion since that would be the most devaluing item on the list. I told mom to bring it back so I could do the CV axle later. [Watch my stuck CV axle video to see how I fixed it]. That was the number one priority item on the list. I wasn't sure how long she could drive with that split boot before the joint totally failed. I was worried because if it separated while driving, it could cause more damage.

After a number of weeks went by, on November 15th, I sent her an email saying "We need to get the passenger side CV axle changed out soon." Finally she texted me back on Nov. 29th asking if I had a minute to chat. I called her and she said she was having problems with the steering on her car. The power steering belt was slipping and squealing and the power steering was jerking.

I was confused at why she was having these problems because it was running fine after I finished the rack and pinion replacement.

She said "I have to tell you that I took it to [Redacted repair shop]." 

"Why did you take it there?" I asked.

"Well, I didn't want to bother you with your time", she replied.

I said "Mom, I'm unemployed right now! I have all the time you need. So what did they do to the car?" At this point, she couldn't remember exactly what they did. She said she handed them my list and told them to do the most important items first.

"Oh no!" I gasped.

She got the invoice and read it off to me. 

Mom: "Power steering pump replacement."

Me: "Why did they do that? It wasn't even on the list! What else did they do?"

Mom: "Belts and upper radiator hose."

Me: "Why did they do the upper radiator hose? That wasn't on the list either! Anything else?"

Mom: "That's it."

Me: "How much did they charge you?"

Mom: "I'm embarrassed to say."

Me: "Was it over $500?" (I guessed what I thought was outrageously high.)

Mom: "Yes."

So here's what I've been able to find out. She took the car to Redacted and handed them the list and said she had a budget of $700 and to do the most needed repair items. It just so happened that the bill ended up subtotaling $699. It sounded to me like they wanted to get her $700 rather than fixing her real problems.

I asked Mom and the Redacted garage why they replaced the power steering pump. Mom didn't know. I emailed Redacted garage twice, but they avoided answering the question both times. Their response was "We do Not perform unneeded repairs. 

Side note - actually, good mechanics do unneeded repairs all the time. For example, even if the output shaft seal isn't leaking, they replace it when replacing a CV shaft. It's better to spend the $10 now than find out next month that the seal is leaking and you have to basically do the entire job over again.  

Checking Their Work

Mom brought the car over to my house so I could see what was going on and also replace the CV axle. The first thing I noticed was the puddle of power steering fluid on the driveway right under the power steering pump. The power steering reservoir was nearly empty and the pressure hose was leaking pretty badly. It wasn't leaking like that a month ago when I replaced the rack and pinion.

They replaced the belts, but the power steering belt was super loose. The alternator belt tension was ok. 

If I had done work this poorly, I'd be embarrassed even if I did it for free. 


It appeared that they didn't even replace the upper radiator hose, yet they charged her for it.

Then they charged her an outrageous amount for labor.

Why would they degrease the old power steering pump when they're replacing it? That doesn't make sense. As expected, the parts prices are marked up. Here's what they cost at O'Reilly: 


These prices aren't what the shop pays. They get a discount off these prices. Then they mark them up well above what you can get them for. They probably got that $14 belt for maybe $12 and sold it for $22

The most needed repair was the CV axle. That separated boot was staring them in the face as they did the power steering pump. It appeared to me that they certainly didn't do any "most needed repairs".

Axle Job

I replaced the CV axle, along with the output shaft seal and the rear engine mount bushing. I also did a transmission fluid and filter change. Parts were about $225. I didn't charge her for labor, but she paid me anyway. She gets the Mom discount.

As tempting as it was to just fix the shop's mistakes, I left them alone so I could show them what they did wrong. 

A Visit to the Garage

So we went down to Redacted and talked with the person in charge. She said she remembers every car that comes to her shop, and that my mom said she had a budget of $1000 (I thought it was $700). They wanted to figure out what was most important so that she didn't spend $4000 to fix the entire list. [That's what I was worried about.] 

They said that when the car came in that the power steering fluid was overflowing and the pump was making noise. So I imagine that what happened was that the power steering pump started leaking badly and that when the reservoir got empty, it started sucking air. The pump will then compress the air and send it to the rack and pinion. Then when the fluid returns to the reservoir, it'll force out more fluid and air bubbles into the reservoir and make it overflow. Ok, so I guess that was an ok service. But I could have saved Mom hundreds of dollars if she brought the car to me. 

It turns out it's standard practice for this shop to remove the labels from all new hoses . . . and exhaust pipes. Well, I can totally understand removing everything flammable from exhaust pipes, but I'd rather they left the labels on the hoses so you could tell they were replaced. I mean, the cars from the factory have labels on the hoses. 

I remembered specifically checking the radiator hoses for bulging and it didn't look like it needed to be replaced, but the garage decided it was one of the most important repairs. Ok, so maybe they really did replace the hose.

I really didn't have time to hang out all day while they fixed the leak and loose belt. So I said I'd fix them if they'd give her some money back. They offered $150 and that seemed ok. 

I asked how much they charge per hour for labor. She said $110. In shock, I exclaimed "that's more than Car Wizard charges!" I remembered many years ago being shocked at finding out that labor was $65/hour.

Found More Problems

I tightened the pressure hose on the power steering pump. It needs new copper washers because the joint still has a small leak, but it's not dripping anymore. I'm prepared now because I ordered an assortment of copper washers. I'll never go through all of them in my lifetime, but I'll probably eventually need more than just these two washers.

I set the power steering belt tension. I wasn't done yet because I found that the intake manifold was leaking coolant. Every once in a while while I was under the car a drop of coolant would drip on me. 

And the valve covers were leaking oil. So those three items will be the project next time.

Finished?

Sometimes old cars are never finished. But it runs well now. The body shop fixed the damage and it's looking great again.


The rest of the items on this list are not high priority. We'll just keep watch on some of them. 

The Moral of the Story

I guess the important lesson here is to know what you're asking for. Ask up front what it'll cost. If you say you have a budget of X dollars for the project, assume that they will use the entire budget you just offered them.

If you're doing work for someone else, make sure they know up front what you'll be doing and what it'll cost. Get authorization before starting work.







Tuesday, December 21, 2021

2015 Nissan Rogue S No heat on driver's side.

 2015 Nissan Rogue S

No heat on driver's side.

Sometimes problems like this are super expensive and require removing the dash to fix them. This time we didn't even have to buy any parts. Weird. 

My first step in diagnosing the problem was to check the blend door actuator. Here's how I got to it. 

I removed the two bolts holding the fuel door lever and hood release lever.

  
I removed the fuse panel cover (open driver's side door to access). 
 
 
I pulled off the trim panel next to the gas pedal.  
These pull straight out.
I removed the shin panel by pulling straight out.

 

There were two screws holding in this duct. They were awkward to remove. A 90 degree screwdriver was necessary.

There was a slot on top that was holding this duct in. 
Once that duct was removed, I could access the blend door actuator. Getting this duct back in is much harder than taking it out. You may need to be a yoga expert to accomplish this task.
 
Now that everything is out of the way, you can see where the driver's side blend door actuator is located. It was held in by two screws.

After removing it, I saw that it had some plastic flakes on it, indicating that it was stripping out.  

 
The socket it fits into looked similar. 

I used an 8mm Allen socket to rotate the door by hand. It seemed like there were no obstructions.

With the car on, heater set to high, the door would stay in the hot position by itself. The actuator moved fine, and with it set in the hot position and the door in the hot position, I put the actuator back in place. 

It seems fine now. The temperature control moves the actuator and the door opens and closes and the driver's side temperature control works now.

I wonder if the last guy installed the blend door actuator in the wrong position. 

The entire job took about three hours. With this info, you probably could do it faster.

Comeback!

It worked for a couple days then stayed cold again. So I installed a shrink tube sleeve on the motor shaft to take up some slack. Now it goes hot and cold. Hopefully it stays that way. If not, then I'll have to figure out something else. 

Here's a picture of the driver's side hot/cold blend door actuator part number in case we need it later.

Broke Again!

My questions to Nissan are

"Why do you force the actuator to move beyond the limits of the door?"

"Why do you make the actuator torque strong enough to strip the plastic socket?"

 

Wednesday, November 24, 2021

Dana 44 Speedi-Sleeve, Bearing, and Seal Replacement

This is on the rear axle of a 2008 Jeep Wrangler. 

Required Tools

For this job, you'll need a slide hammer, a press, a rotary cut-off tool, among other common tools. Please don't attempt it without access to these necessary tools. 

The Situation on the Dana 44

If you need to pull the shaft out of this Dana 44 axle, plan on replacing the seal, bearing, and bearing retainer. The bearing and bearing retainer are both pressed on the shaft. The seal can't be replaced without cutting off the bearing and bearing retainer. 

The National 9912 seal has an expanding outer diameter. When the retaining nuts are all torqued down, the seal will be compressed between the retainer and the race and it will expand the outer diameter. Because of this, the seal must be replaced if the axle shaft is ever removed. 

Disassembly

First, I removed the wheel, then the brake caliper, then the rotor/drum. With the parking brake off, it should slide right off. If not, try turning the adjuster. 

Next, I removed the four nuts holding the retainer. Then I removed the bolt holding the wheel speed sensor to get it out of the way so the retainer can slide past it. 

A few light taps on the slide hammer got the axle shaft out. 

To remove the bearing retainer, I used a rotary cut-off tool to cut most of the way through the bearing retainer. It sometimes makes a popping noise when it cracks the rest of the way through where you cut it. If you're getting uncomfortably close to the shaft, try hitting it on the cut with a chisel. That should split it. A similar cut on the opposite side will make it even easier to take off. 

Then cut through the bearing, but don't cut into the seal area. A cut on each side should allow you to pull the bearing cage off. Then you can cut most of the way through the inner race. Try two or three cuts and a chisel to crack it. Then you can tap it on alternating sides to slide it off. 

Now you can slide the seal off. 

Inspect the sealing surface for damage.  If there's only normal wear, you probably can clean it up pretty well with 600 grit sandpaper. 

Speedi-Sleeve

At this point, I realized this wasn't going to be an ordinary job. I needed a Speedi-Sleeve to repair it correctly. Since there wasn't a listing for it in the auto-parts catalogs, I had to verify the dimensions and I saw that the shaft diameter was right in the correct range for Speedi-Sleeve 99187.


NATIONAL 9912 Specifications
FootnoteExpanded O.D.
Housing Bore (Inch)2.877
Housing Bore (MM)73.080
Inside Diameter1.875 In.
Inside Diameter47.630 mm
MaterialNitrile
Outside Diameter2.865 In.
Outside Diameter72.770 mm
Outside Diameter (Inch)2.865
Outside Diameter (MM)72.770
Part DescriptionOil Seal
Series9000
Shaft (Inch)1.875
Shaft (MM)47.630
Type25
Unit of DimensionInch
Width (inch)0.470
Width (MM)11.940


SKF 99187 Speedi-Sleeve

DIMENSIONS

SHAFT DIAMETER RANGE
d1
min. 47.549 mm
Shaft diameter range
d1
max. 47.701 mm
Shaft diameter range


The Last Guy

The last guy that was in here working on this axle did not have the correct tools or know-how to complete the job correctly. It is entirely possible to remove the bearing and retainer without scratching the axle. Here's what the passenger's side axle looked like after he did it the wrong way. 

I didn't do any of this damage. Not buying the correct tools isn't really saving money. I can't imagine the level of frustration and how hard it was doing it the wrong way.

When there is a dent where the seal rides, it will not seal. This will need a Speedi-Sleeve repair.

Driver's side axle:


This side also needs a Speedi-Sleeve. It looks like the guy tried to install the bearing and bearing retainer with a hammer. I think I also see grinder marks. 

 

Here's the driver's side axle with the Speedi-Sleeve installed. It's ok to have the flange there. It won't be in the way even though it doesn't go all the way down. You definitely don't want to press it any farther down than it already is.


The last guy also buggered up the inside of the tube trying to get the race out. It's really simple and easy with a three jaw attachment on a slide hammer. You only have to tap it gently.


When I installed the bearing retainer nuts, I turned each a quarter turn at a time. I alternated between all four, turning each a quarter turn at a time so that there was even pressure on the seal as it got compressed. 

If you want to vicariously experience the thrill of this job, check out the video I made for my youtube channel: https://youtu.be/X-UH6-05nm8



Sunday, October 31, 2021

Rack & Pinion Replacement on a 1998 Camry

The rack & pinion was leaking on both sides and the passenger inner tie rod had play, so it was best to replace the whole rack & pinion assembly. I estimated that I could complete the job in a day and it actually went as expected, except that the included pamphlet said the job would take 2-4 hours. It took me eight hours.

Before starting, I remembered a problem I had on several previous jobs. I don't know if you've ever experienced this, but when you're sitting on the ground working on the car, sometimes you can wear the skin on your tailbone. You don't notice until you're in the shower the next day and it's a little too sensitive. I was careful to avoid that problem this time.

Here's a time-lapse of the entire repair.

 
 
There were only a couple things in the way that needed to be removed to get the rack & pinion assembly out. 
 
I had to remove the oxygen sensor. It sounds simple, but this took some time. Why do they make these electrical connectors so difficult to remove? They're in super awkward places so you can either see it or feel it, but often not at the same time. You need super-human strength to press the button enough to release the catch. So I just used a small slotted screwdriver on the opposite side of the button to release the catch and pulled on the wires (bad, I know) and it came right out, wires still intact.
 
I removed the bolts holding the sway bar mounts on both sides. This should be fairly simple, but there isn't enough room for a socket - just enough room for a box wrench, turning 1/12 of a turn at a time on the back bolts.

 
There's a nut holding the power steering hose to the rack on the passenger side. Here's a photo of that hose and bracket with the rack already removed.

Getting the hoses loosened wasn't too hard. A 17mm crow's foot on a long extension made it pretty easy. 

The inner tie rods weren't hard to remove from the outer tie rod ends. On cars this old, they could be too stuck to remove and you'd need outer tie rods also. Here's a photo of the outer tie rod end still attached to the wheel knuckle. (Rack & pinion already removed)

The most troublesome part of the job was disconnecting the steering shaft. I had to slide the rack toward the passenger side to get it apart or back together. I used a couple ball joint separator wedges to pop it off. The steering linkage seemed to be spring-loaded. Maybe there was something I should have disconnected on the inside to make it easier. But it's done now.

At this point with the steering disconnected, I made sure to keep the steering wheel centered so that the clock spring in the steering wheel wouldn't get hyper-extended. The wheel should only go one and a half turns from center to either side. Much more than that could possibly damage the clock spring. You'll know if the horn or other buttons on the steering wheel stop working.
 
I tilted the rack towards the front of the car and slid it out the driver's side. Here's the new one going in the same way.

Once I re-connected the steering shaft, I checked if the steering was centered. Of course it wasn't and I had to disconnect the shaft and re-adjust a couple times until it was one and a half turns from center either direction. 

Flush

I connected an extension hose to the return line and capped the return line on the reservoir. I filled the reservoir and had my assistant (ok my daughter) run the engine for about two seconds to get some air out. I then had my assistant turn the wheel all the way both directions to get more air out, all while adding fluid as necessary to the reservoir. After flushing and re-connecting the return line, we didn't have a problem with air in the fluid.

Alignment

After everything was put back together, I used a laser level against the wheel to mark the ground and set the correct toe angle for each front wheel.