Deploying the new Fiery Mac Drivers...

williamfaulkner
New Contributor

First post. Be kind, please!

What do you do when when the driver always pops up a window at install to find the ip of the DFE?

The current crop of Fiery drivers for Xerox (looked at both V80 and C70 entry production level machines) are different, I feel, when its time to auto deploy them.

You see, in the .dmg, there's a .pkg. So many will automatically say "Put that in Casper and you're done". Well, close, but no cigar.

When you do put the pkg in casper, it deploys, yet you still get the window appearing to locate the ip of the printer (anyone who installed a Fiery driver will know what I'm talking about).

Thus you exhale a silent curse to the gods, and you proceed to unpack again the dmg to examine it more closely.

What you find is that there's actually two scripts in there, one calling the other.

There is, however, a glimmer of hope in the sense that installer.sh script can apparently be passed arguments.

If you look at the first image below, at line 31 to 35, you get to hope that if you type in the correct ip in there, along with the queue name 'print', locale would be, maybe 'en-US', then ppdname presumably the actual file name and finally printername what is set in the ppd itself I would presume again, then, in the end, after much presumption, you'd hope that would work.

df8d4b8e68b648ea9439c19bf39688df

1ac57c9588e44c9fb4ff3c012cb5acf5

Reinventing the wheel is always a tedious and rather pointless affair, so please allow me to ask if anyone ever actually DID deploy the current fiery drivers using any kind of automation. Any guidance and help for a first timer is appreciated. Just asking for the location of the usual booby traps and that sort of thing.

I'm asking this since EFI failed to provide me any documentation, and I couldn't find anything online that would help. I'm asking anyone here to share with me, us, how they went about deploying Fiery drivers and avoiding any windows from appearing.

Thank you for your time, and if ever you need help for an obtuse problem with Xerox production gear, reach out!

Cheers,

William

19 REPLIES 19

kstrick
Contributor III

It's that "Installer WIzard.app" that is being problematic:

What I basically do is - Extract the contents of thei package with Pacifist
- Create a package that includes the contents of "/Contents/Resources/User Software/OSX/Printer Driver"
- Delete ""Installer Wizard App" from that directory

I usually then just run my own postinstall script that installs "OS X Installer.pkg", but i think you can run their script as long as you remove the "Wizard" first.... (Their script runs that package if the "Wizard" is not found)

bpavlov
Honored Contributor

I ran it into a few months ago and had the same reaction you did, WTF is this $#!% With that said, I can't speak to your particular printer but here's what I do for one our Canon printers that uses a fiery. This may very well be specific to the printer we use though, but hopefully it explains the process and you can adapt it to the driver for your printer.

pkgutil --expand /path/to/package.pkg /path/that/does/not/exist/

In it there is a package called FieryPrinterDriverInstaller.pkg which is not flat. Right-click and select Show Package Contents.
In there you will find a Payload which is where the installer we want is located.

Open up Terminal and run the following command:

tar -xvf /path/to/Payload -C /path/to/extract/contents/to

Go to the folder where you extracted the Payload to. In there we are looking for a folder called Printer Driver. In it will be OS X Installer.pkg which alone is not everything you need. You actually want to copy and move the entire Printer Driver folder because it will contain everything you need basically. The OS X Installer.pkg won't run if it's moved (at least in my situation).

To package it all up,l I used Packages and dropped it in a location I use on all Macs that will store certain files like printer drivers as part of the payload. I also added a postinstall script that runs the installer. The gist of it is this:

#!/bin/sh

PrintDriverPKG="/Path/to/PrinterDriver/OSX installer.pkg"
/usr/sbin/installer -pkg "$PrintDriverPKG" -target $3

You can probably do this all in Composer too but I'll leave that exercise for you.

Again, most of this may be very specific to my situation, but it should give you the idea of what's going on.

dwandro92
Contributor III

I ran into this problem about a week ago with the new Fiery driver for the Canon ColorPass GX400. If you are simply trying to install the driver in a silent fashion, here is how I did it:

1) Download the driver from EFI or the DFE manufacturer.

2) Open the driver DMG and copy "Fiery Printer Driver.pkg" to a temporary location.

3) Open terminal and navigate to your staging directory, then expand the package using the following command: pkgutil --expand "Fiery Printer Driver.pkg" "Fiery Printer Driver"

4) Open the newly created "Fiery Printer Driver" folder in Finder.

5) Right-click (or Control-click, if you like to be difficult) the nested driver package (FieryPrinterDriverInstaller.pkg) and select "Show Package Contents".

6) Open the Scripts folder and modify the postinstall script using your favorite text editor.

The current code should look like this:

#!/bin/sh
##set -u
#set -e
set -x

logger "Postinstall Script: Checking OSX version"
VERSION=`sw_vers -productVersion`
MAJOR=$(echo $VERSION | awk '{split($0,version,"."); print version[1]}')
MINOR=$(echo $VERSION | awk '{split($0,version,"."); print version[2]}')


if [ "$COMMAND_LINE_INSTALL" = "1" ]
then
    logger "command line install through installer cmd"
    /bin/sh  /tmp/efi_wiz_fsu_delete && logger "Postinstall Script: FSU done"
    sudo rm -f /tmp/efi_wiz_fsu_delete
    logger "Postinstall Script: Installing driver only in silent install" && sudo installer -pkg /tmp/Fiery Printer Driver Installer.app/Contents/Resources/User Software/OSX/Printer Driver/OSX installer.pkg -target / && exit 0
fi


#Pkg installs driver and exits in 10.5 since no Wizard is supported below 10.6
if [ "$MAJOR" = "10" ] && [ "$MINOR" = "5" ]
then
    logger "Postinstall Script: Checking for previous driver and printers with FSU and performing system cleanup"
    /bin/sh  /tmp/efi_wiz_fsu_delete && logger "Postinstall Script: FSU done"
    sudo rm -f /tmp/efi_wiz_fsu_delete
    logger "Postinstall Script: Installing driver only for 10.5" && sudo installer -pkg /tmp/Fiery Printer Driver Installer.app/Contents/Resources/User Software/OSX/Printer Driver/OSX installer.pkg -target / && exit 0
fi

if [ ! -d "/tmp/Fiery Printer Driver Installer.app/Contents/Resources/User Software/OSX/Printer Driver/Installer Wizard.app" ]
then
    logger "Postinstall Script: Installer wizard not found, Installing driver only" && sudo installer -pkg /tmp/Fiery Printer Driver Installer.app/Contents/Resources/User Software/OSX/Printer Driver/OSX installer.pkg -target / && exit 0
fi

#Else on 10.6 and above, start the installer wizard in phase one mode
[ "$MAJOR" = "10" ] && [ "$MINOR" > "5" ] && logger "Postinstall Script: Opening Fiery Printer Driver Installer app..." && sudo open /tmp/Fiery Printer Driver Installer.app/Contents/Resources/User Software/OSX/Printer Driver/Installer Wizard.app --args PHASE_ONE

#Give some time for the Wizard to start up
sleep 4;

while [ 1 ]; do

sleep 1

#exit 1 if Installer wizard returns a general failure case
if [ -e "/tmp/efi_wiz_finish_fail" ]; then
logger "Postinstall Script: Installer Wizard was quit with failure, performing efi_wiz_finish_fail cleanup" && sudo rm -f "/tmp/efi_wiz_finish_fail" && logger "Postinstall Script: efi_wiz_finish_fail cleanup successful."
exit 1;
fi

#exit 0 if Installer Wizard returns a general success case
if [ -e "/tmp/efi_wiz_finish_success" ]; then
logger "Postinstall Script: Finish option detected, performing efi_wiz_finish_success clean up" && sudo rm -f "/tmp/efi_wiz_finish_success" && sudo rm -f "/tmp/efi_wiz_install_data" && logger "Postinstall Script: efi_wiz_finish_success clean up successful"
exit 0  
fi

#Installer Wizard passed install driver and create printer request
if [ -e "/tmp/efi_wiz_install" ]; then
logger "Postinstall Script: Installer Wizard gave install command"

logger "Postinstall Script: Checking for previous driver and printers with FSU and performing system cleanup"
/bin/sh  /tmp/efi_wiz_fsu_delete && logger "Postinstall Script: FSU done"
sudo rm -f /tmp/efi_wiz_fsu_delete

logger "Postinstall Script: Installing driver silently via OSX installer.pkg"
sudo installer -pkg /tmp/Fiery Printer Driver Installer.app/Contents/Resources/User Software/OSX/Printer Driver/OSX installer.pkg -target / && logger "Postinstall Script: Driver install successful"
touch "/tmp/efi_wiz_install_done" 
chmod 666 "/tmp/efi_wiz_install_done"
chown $USER "/tmp/efi_wiz_install_done"
logger "Postinstall Script: Performing efi_wiz_install cleanup" && sudo rm -f "/tmp/efi_wiz_install" && logger "Postinstall Script: efi_wiz_install cleanup successful"
fi

#exit 0 after driver only installation
if [ -e "/tmp/efi_wiz_install_drvr_only" ]; then
logger "Postinstall Script: Installing driver only and exit option detected" && sudo installer -pkg /tmp/Fiery Printer Driver Installer.app/Contents/Resources/User Software/OSX/Printer Driver/OSX installer.pkg -target / && logger "Postinstall Script: Driver only install successful"
logger "Postinstall Script: Performing efi_wiz_install_drvr_only cleanup" && sudo rm -f "/tmp/efi_wiz_install_drvr_only" && logger "Postinstall Script: efi_wiz_install_drvr_only cleanup successful"
exit 0  
fi

#exit 1 if FPDI is killed without any notification i.e. none of the above files were produced
ps acx | grep "Fiery Printer Driver Installer" > /dev/null
if [ $? = '1' ] && ! [ -e "/tmp/efi_wiz_finish_fail" ] && ! [ -e "/tmp/efi_wiz_finish_success" ] && ! [ -e "/tmp/efi_wiz_install_drvr_only" ]
then
    logger "Postinstall Script: FPDI was killed without notification! Exiting installer"
    exit 1
fi

done

exit 1

Replace the code with the following script and save your changes.

#!/bin/sh
set -u
#set -e
set -x

logger "Postinstall Script: Checking OSX version"
VERSION=`sw_vers -productVersion`
MAJOR=$(echo $VERSION | awk '{split($0,version,"."); print version[1]}')
MINOR=$(echo $VERSION | awk '{split($0,version,"."); print version[2]}')

#Pkg installs driver and exits in 10.5 since no Wizard is supported below 10.6
if [ "$MAJOR" = "10" ] && [ "$MINOR" = "5" ]; then
    logger "Postinstall Script: Checking for previous driver and printers with FSU and performing system cleanup" && /bin/sh /tmp/efi_wiz_fsu_delete
    logger "Postinstall Script: FSU done" && sudo rm -f /tmp/efi_wiz_fsu_delete
    logger "Postinstall Script: Installing driver only for 10.5" && sudo installer -pkg /tmp/Fiery Printer Driver Installer.app/Contents/Resources/User Software/OSX/Printer Driver/OSX installer.pkg -target /
    exit 0
fi


logger "Postinstall Script: Installing driver only and exit option detected" && sudo installer -pkg /tmp/Fiery Printer Driver Installer.app/Contents/Resources/User Software/OSX/Printer Driver/OSX installer.pkg -target / && logger "Postinstall Script: Driver only install successful"
[ -e "/tmp/efi_wiz_install_drvr_only" ] && logger "Postinstall Script: Performing efi_wiz_install_drvr_only cleanup" && sudo rm -f "/tmp/efi_wiz_install_drvr_only" && logger "Postinstall Script: efi_wiz_install_drvr_only cleanup successful"
exit 0

7) Return to your terminal session inside the Staging directory and flatten the package using the following command: pkgutil --flatten "Fiery Printer Driver" "<Your Desired Package Name>.pkg"

8) Verify that the modified package does what you want it to do, import into Casper Admin, and continue on the never-ending quest of Mac administration.

msemertzides
New Contributor II

dwandro92, thank you so much! Your post saved us many hours of having to walk around and touch computers :-)

More importantly, our two-day project became a two-hour project. Much thanks!

jamest
New Contributor

Does this allow the driver to pick the printer during the install so it puts the correct printer in the scanners and printers under their printers

gabe2385
Contributor

Hey @dwandro92 Thanks for your post (even though it is about 3 years old), I was able to install the Fiery Drivers editing the script. Just want to point out for some reason in Mac OS X 10.13 I did have to change the permission before editing the script and then change the permission back to root as the owner to flatten the packages. After that we were golden! :)

slundy
New Contributor III

@gabe2385 did you have to pull the pkg out of the "Fiery Printer Driver Installer.app' that comes from Fiery now? There's multiple packages in there now so going to try with the "OSX Installer.pkg" file and see if that works with @dwandro92 's script.

stevewood
Honored Contributor II
Honored Contributor II

@slundy there's a much easier, in my opinion, way to do this using autopkg and the driver that comes from Fiery. I have a write up on how to identify the proper driver:

Identify EFI Fiery Driver

And then you can use @foigus excellent Trial By Fiery article on how to use autopkg to build an installer.

I have been using this since he wrote that article and I've probably deployed thousands of Fiery drivers in that time with not a single issue. And it is very, very easy to do.

bradtchapman
Valued Contributor II

Reviving an old thread, because a fellow Mac admin reached out for assistance and I was getting pissed off at the awful composition of their driver package.

It appears that EFI received "several requests from the field" (read: massive complaints from SysAdmins) about their driver packaging, and finally published in late 2016 called "Enterprise Driver Deployment of the Fiery Print Drivers" for Mac and Windows. I found this document by going to EFI's support website and typing "deploy" in the search field. It was the 4th result. The #2 slot was occupied by "How to disable Fiery Driver Updater notifications."

If you run the package from the command line using "installer -pkg" (as would normally be the case with Jamf) then the install wizard will not appear. However, you may still wish to neuter the auto-update LaunchAgent that gets installed afterward.

https://www.efi.com/support-and-downloads/kbarticle/article-details/?knowledgeArticleID=kA039000000P...

From the document:

Mac Drivers
The Mac OS X driver installer package is distributed as a disk image (DMG) file, and is named “<Product Name>.dmg”. When the DMG file is downloaded and the disk image is mounted on the computer, the User Software package contains the following:
- Fiery Printer Driver.pkg –installs the printer driver.
- Fiery Software Uninstaller – uninstalls Fiery printer drivers.

Requirements for remote/silent deployment:
1. The Mac drivers are required to be bundled as a .PKG file in order to be compatible for deployment with 3rd party deployment tools such as KACE and Casper
2. No UI such as the driver installer wizard that expects user input should be displayed during the course of the deployment.

Background information:
When EFI released the drivers for Mac OS 10.7 and 10.8 compatibility, the drivers were packaged as an application bundle (.APP) file. The .APP file format for driver installers did not work as expected with 3rd party remote deployment tools. We received several requests from the field to re-package our Mac drivers according to Apple’s standard .PKG file format. Since then, starting from the Mac OSX10.9 drivers and continuing with the Mac OSX 10.10 and Mac OSX 10.11 Fiery drivers, EFI has been releasing the Mac drivers in the standard PKG file format. This format works as expected with 3rd party remote deployment tools. However, after the Mac OS 10.10 compatible drivers were released, for products that included the installer wizard, we have received requests to remove the installer wizard since a UI that needs user input is not expected to be displayed during remote deployment.

In the Mac OS X 10.11 driver package available for download from EFI.com, we now support silent/command line installation of the driver. The Mac driver installation package will suppress the installer wizard UI if installed from the command line and will display the UI when the PKG installer is double clicked to begin driver installation. Thus both the installer wizard display during installation and silent installation for remote deployment in is supported in the same driver package. The following command can be used for installation of the Mac driver from the ‘Terminal’ on Mac OSX.
installer -pkg “Fiery Driver Installer.pkg" -target "/"

Command Line/Silent Uninstallation of Mac drivers:
The following describes the use the Fiery Software Uninstaller from the Terminal/command line for “silent un-installation/removal” of the Fiery printer and the driver on Mac OS X. This is supported on Mac OS versions 10.7 to 10.11.
Launch ‘Terminal’ from a Macintosh and type the following:
sudo {FSU} -s CurrentUserName flags [options]

  • *CurrentUserName can be provided as ”$USER” or whoami. It is used to get the location of the user specific Library/Preferences folder.
  • FSU = Fiery Software Uninstaller.app/Contents/MacOS/Fiery Software Uninstaller

The list of flags is pretty extensive so I won't list them here. But needless to say, there's enough here for a seasoned Mac admin to work with.

Kyuubi
Contributor

@bradtchapman Thanks for this. One question: how do you input the ip address and server name for the printer without the GUI?

bradtchapman
Valued Contributor II

@Kyuubi : great question! Configuring printers via Self Service or policy requires writing a script.

I recommend creating a generic 'add printer' script in Jamf. Here's one I wrote for Canon printers a while back.

To build a policy, you need to install and configure the printer on one Mac. Then, run the lpoptions -l command to read the list of installed printer options. The output of lpoptions -l includes lines with paper configuration and features (printer accessories like a stapler, sorter, booklet, etc).

The features for your printer should be at the very top of the text output, and the current setting is marked with an *asterisk. Copy the feature name and the selected option for later use. For reference, @bentoms wrote a blog post in 2013 that gives a long list of example options from a Canon ImageRUNNER.

One tiny detail: you should consider creating DNS records for your printers. It's best practice not to refer to them by IP address.

#!/bin/sh
# Canon printer configurator by Brad Chapman
#
# First step: remove existing printer on the local Mac named $4.

/usr/sbin/lpadmin -x "$4"

# Now add the printer using lpadmin
# Script Parameters:
# $4 = printer hostname (not the FQDN, edit this below)
# $5 = user friendly "location" string
# $6 = PPD file location, something like /Library/Printers/PPDs/Contents/Resources/HPLaserJunk1234-MFP
# $7 = list of printer options, i.e.: -o EFGAFeaturesOpt=GA1 -o EFFinisher=Booklet -o EFPaperDeckOpt=Option3

/usr/sbin/lpadmin -p "$4" -v "lpd://$4.corp.pretendco.com" -D "$4" -L "$5" -P "$6" -E -o printer-is-shared=false $7

You should play around with the file location $6. Even though the full path contains .gz, I found that it wasn't needed or implicit.

Hope this helps!

DouglasWard-IA
New Contributor III

@bradtchapman I don't quite see how your response to @Kyuubi answers his question, and I have the same question. I'm looking into this, and the Fiery installer GUI walks you through entering/selecting the IP of the Fiery RIP on the network. Your script just looks like a nice way to add a non-Fiery printer. How does this work in conjunction with the EFI silent installer script?

bradtchapman
Valued Contributor II

@AdminIA : you would need to deploy the drivers to the target computers first. I do it as a policy with two parts: the driver package, and then the script running "After." The script can be used to install any type of printer as long as you can identity the path to the PPD.

FWIW, when I have installed Fiery drivers from Terminal using the 'installer' command, the Install Wizard GUI does not appear. So far this has held true for iPR G100 and G200 fiery controllers.

stevewood
Honored Contributor II
Honored Contributor II

@AdminIA

We deploy a lot of Fiery printers and for as long as I remember, the GUI does not pop-up when using Jamf to push install the driver. My process for a Fiery is:

  1. Identify the right driver for the Fiery. (Shameless plug for my blog) - Identify EFI Fiery Driver
  2. Package the driver for deployment using AutoPKG and @foigus recipe: Trial By Fiery
  3. Upload the driver to Jamf and create a policy.
  4. Create a script to deploy the printer: Deploying Printers via Script and Using lpoptions To Identify Printer Options

As @bradtchapman mentioned, as long as you know the URI of the printer and the driver path, you can deploy any printer via the lpadmin command in Terminal.

The typical URI of a Fiery is: lpd://<ipaddress or DNS>/Print for the print queue or lpd://<ipaddress or DNS>/HOLD for the Hold queue.

Typical path for a Fiery driver, is /Library/Printers/PPDs/Contents/Resources/en.lproj or whatever language you need if deploying to other languages.

DouglasWard-IA
New Contributor III

Hey @stevewood and @bradtchapman , thanks for your responses. I re-re-read them, checked out the links, and got things working finally. I have a gremlin in my script, and the path to the Fiery PPD wrong. Once I straightened that out and tested, it was working as expected. I appreciate the hand-holding.

erichughes
Contributor II

Any tips for getting Monterey compatible drivers? everything for my Xerox XC 560 is 10.14 compatible and when I run them locally outside of Jamf it fails to install.

stevewood
Honored Contributor II
Honored Contributor II

You'll need to get the Fiery upgraded to be compatible. If there's no driver, it's because the Fiery is too old.

Agent75
New Contributor II

How do I remove the quarantine flag from the hcxpcore.framework component after installation of the drivers? I can get everything to install properly but get the malicious software popup after installation due to this resource. Any advice?

bradtchapman
Valued Contributor II

Use this command as a post-install action to recursively remove the quarantine attribute:

/usr/bin/xattr -d -r com.apple.quarantine /path/to/hcxpcore.framework

This *should* work everywhere, but macOS Monterey 12.4 has a problem where the xattr command was inadvertently changed to remove the -r (recursive) flag despite being in the man pages.  This is fixed in 12.6.  I don't know if 12.5 and 12.5.1 also have this problem.