Welcome to the Panopto Community

Please note: All new registrants to the Panopto Community Forum must be approved by a forum moderator or admin. As such, if you navigate to a feature that is members-only, you may receive an error page if your registration has not yet been approved. We apologize for any inconvenience and are approving new members as quickly as possible.

A script to install Panopto via Jamf Pro

I use this script to install Panopto on Mac from our Jamf Pro MDM, so that the server preferred version of Panopto Recorder is installed, and due to PPPC/TCC you will notice it uses jamf createAccount to create the panopto_upload account before the installer runs so that we do not have to find a way to give installer permissions we probably shouldn't. This was also simpler than the quite large script I found from MacAdmins Slack channel #jamfnation that was attempting to manage the dscl command that the Panopto installer was using to create the account.


#!/usr/bin/php

<?php

#####################################################################################################

#

# ABOUT THIS PROGRAM

#

# NAME

# PanoptoInstall.php -- Installs the latest Panopto version per the server (works for on premise or cloud)

#

# SYNOPSIS

# sudo PanoptoInstall.php

#

####################################################################################################

#

# HISTORY

#

# Version: 5.1

#

# - Richard Smith, 26 January 2021

#

# IMPORTANT:

# It is possible to create a config profile to allow installer to create the user account.

# However, it comes with the possible security risk of allowing non-admin requiring packages

# to add/remove user accounts.

#

####################################################################################################


$PanoptoServer = "your.server.name.or.cloud.name";

$installFile = "PanoptoRecorder.pkg";

$getVersion = explode("'", explode('/', trim(`curl -Ls http://$PanoptoServer/ | grep cacheRoot`))[3]);

$myURL = "http://$PanoptoServer/Panopto/Cache/$getVersion[0]/Software/Panopto%20Recorder.pkg?arch=None&useCustomBinary=True";

# Add panopto_upload via jamf createAccount so installer doesn't ask for permissions to manage accounts

echo `/usr/local/bin/jamf createAccount -username panopto_upload -realname panopto_upload -home /var/panopto -shell /sbin/nologin -hiddenUser`;

echo "URL = $myURL\n";

echo `curl -Ls -o /tmp/$installFile $myURL`;

echo `rm -rf /Applications/Panopto.app`;

echo `sleep 10`;

echo `defaults write /Library/Preferences/com.panopto.mac.plist Server $PanoptoServer`;

echo `installer -pkg /tmp/$installFile -target /`;

echo `rm -rf /tmp/$installFile`;


exit(0);


?>

Comments

  • edited January 26

    @Richard Smith This script is erroring for me lately. Possibly since the last Panopto upgrade in November.

    Script result: No log handling enabled - using stderr logging

    Created directory: /var/db/net-snmp Created directory: /var/db/net-snmp/mib_indexes Creating user panopto_upload... URL = http://butler.hosted.panopto.com/Panopto/Cache//Software/Panopto%20Recorder.pkg?arch=None&useCustomBinary=True installer: Error - the package path specified was invalid: '/tmp/PanoptoRecorder.pkg'.

    It appears $getVersion is not working?

  • edited January 26

    Thanks for the report, it turns out Panopto has secured the website with https, replacing http, so simple fix, however I have two options for fixing it, either change the lines containing http://, replacing the http with https (essentially add an s), or here is a full script replacement for macOS 12 Monterey, as Monterey does not have PHP:

    #!/bin/sh

    #####################################################################################################

    #

    # ABOUT THIS PROGRAM

    #

    # NAME

    # PanoptoInstall.php -- Installs the latest Panopto version per the server (works for on premise or cloud)

    #

    # SYNOPSIS

    #    sudo PanoptoInstall.sh

    #

    ####################################################################################################

    #

    # HISTORY

    #

    #    Version: 7.1

    #

    #    - Converted to Shell

    #    - Added s, to make http:// into https:// for secure http.

    #

    #    - Richard Smith, 27 January 2022

    #

    #    IMPORTANT:

    #        It is possible to create a config profile to allow installer to create the user account.

    #        However, it comes with the possible security risk of allowing non-admin requiring packages

    #        to add/remove user accounts.

    #

    ####################################################################################################


     PanoptoServer="your.server.name.or.cloud.name"

     installFile="PanoptoRecorder.pkg"

     myURL="https://$PanoptoServer$(curl -Ls https://$PanoptoServer/ | grep cacheRoot | cut -d "'" -f 2)/Software/Panopto%20Recorder.pkg?arch=None&useCustomBinary=True"


     /usr/local/bin/jamf createAccount -username panopto_upload -realname panopto_upload -home /var/panopto -shell /sbin/nologin -hiddenUser

     echo "URL = $myURL"

     curl -Ls -o /tmp/$installFile "$myURL"

     rm -rf /Applications/Panopto.app

     sleep 10

     defaults write /Library/Preferences/com.panopto.mac.plist Server $PanoptoServer

     installer -pkg /tmp/$installFile -target /

     rm -rf /tmp/$installFile


    exit 0

  • I can't get this script to work, still says "Error - the package path specified was invalid: '/tmp/PanoptoRecorder.pkg'."

    It looks like curl can't follow the redirects or something. If I add the -v verbose flag to the curl command it says "could not resolve host" although the initial URL generated is valid and copying it straight into a browser will download the client.

  • Here is my output with the verbose turned on.


    URL = https://butler.hosted.panopto.com/Panopto/Cache/12.0.7.00001/Software/Panopto%20Recorder.pkg?arch=None&useCustomBinary=True

     % Total   % Received % Xferd Average Speed  Time   Time    Time Current

                                    Dload Upload  Total  Spent   Left Speed

     0    0   0    0   0    0     0     0 --:--:-- --:--:-- --:--:--    0

    * Could not resolve host: butler.hosted.panopto.com\x2fPanopto\x2fCache\x2f12.0.7.00001

    * Closing connection 0

    curl: (6) Could not resolve host: butler.hosted.panopto.com\x2fPanopto\x2fCache\x2f12.0.7.00001

    installer: Error - the package path specified was invalid: '/tmp/PanoptoRecorder.pkg'.

  • edited January 27

    Looks like issue is this statement

    curl -Ls https://$PanoptoServer/ | grep cacheRoot | cut -d "'" -f 2

    returns:

    \x2fPanopto\x2fCache\x2f12.0.0.7.00001

  • I have it working by setting:

    #!/bin/zsh

    ..at the top of the script and making the following changes:


    echo "URL = $myURL"

    cleanURL=$(print $myURL) 

    curl -Ls -o /tmp/$installFile "$cleanURL"


    Though I'm sure this is a very clunky solution.

Sign In or Register to comment.