Building on the Tech Journal post “Enable SNMP On Multiple Mac Workstations Using A Script“, let’s take the
snmpd.conf file and put it into an Apple Installer package for easier deployment.
Most any packaging tool for Mac OS X, such as Apple’s PackageMaker, JAMF Software’s Composer, Absolute Software’s InstallEase or Stéphane Sudre’s Iceberg, can create a simple package combining a couple of scripts with a payload file. For this example, the payload will be the
snmpd.conf file itself and the scripts will be preflight and postflight scripts to protect existing data and start the SNMP service.
First, create the
snmpd.conf file using the instructions in the Create the snmpd.conf file section from the prior post.
Next, create the preflight and postflight scripts using a plain text editor such as TextEdit.app or BBEdit.app. Save each script as “preflight” or “postflight” without any file extensions.
The preflight script stops the SNMP service if it’s running and renames any existing
/usr/share/snmp/snmpd.conf file to
snmpd.bak followed by a unique date and time.
#!/bin/sh # Preflight # Stop the SNMP service if it's running /bin/launchctl list | /usr/bin/grep org.net-snmp.snmpd if [ $? = 0 ] ; then /bin/launchctl unload -w /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist /usr/bin/logger SNMP service stopped. # Appears in /private/var/log/system.log fi # Rename the snmpd.conf file if it exists if [ -f /usr/share/snmp/snmpd.conf ] ; then /bin/mv /usr/share/snmp/snmpd.conf /usr/share/snmp/snmpd.bak$( /bin/date "+%Y%m%d%H%M%S" ) fi exit 0
The postflight script starts the SNMP service
#!/bin/sh # Postflight # Start the SNMP service if it's running /bin/launchctl load -w /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist if [ $? = 0 ] ; then /usr/bin/logger SNMP service started. # Appears in /private/var/log/system.log fi exit 0
The elements are ready to add to the packaging application. Using Iceberg as an example, create a new new project and select Package from the Core Templates. Name the project “Enable SNMP” and select a location to store the project files such as
~/Iceberg. Copy the
snmpd.conf file and preflight and postflight scripts to the
~/Iceberg/Enable SNMP folder for easier access.
Edit any information in the Settings pane to add clarity or leave the defaults automatically populated.
Select the Scripts pane and drag the preflight and postflight scripts into the Installation Scripts window being sure to match the preflight script to the preflight script file and the postflight script to the postflight script file.
Select the Files pane. Right-click the top-level root folder in the files list and select New Folder. Name this new folder “usr”. It should appear at the same level as the Applications, Library and System folders. Continue creating new folders until the
/usr/share/snmp folder hierarchy is complete. Then drag in the
snmpd.conf file so that it falls under the
Select Archive menu –> Show Info to display each folder’s ownership and permissions. Adjust ownership of the new folders and the
snmpd.conf file to owner:root and group:wheel. Adjust permissions to 755 for folders and 644 for the file (see screenshot).
The package is ready. Select Build menu –> Build to create the package. Iceberg places new packages into the project folder:
~/Iceberg/Enable SNMP/build/Enable SNMP.pkg.
Copy the newly created package to a test machine and double-click to run it. Verify that everything worked correctly by running the
snmpget -c talkingmoose-read localhost system.sysDescr.0
It should return something like:
SNMPv2-MIB::sysDescr.0 = STRING: Darwin TMI 12.2.0 Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64 x86_64