Mac Packaging Cheatsheet
Create a component pkg from a DMG
pkgbuild --component /Volumes/ApplicationName/*.app --install-location \
/Applications ApplicationName-Version.pkg
pkgbuild --component /Volumes/ApplicationName/*.app --install-location \
/Applications ApplicationName-Version.pkg
sysadminctl is a tool Apple introduced in 10.10 for working with system user accounts. In 10.13, | |
sysadminctl is Apple's recommended tool for working with user accounts in the CLI, replacing functionality | |
that has long been provided by dscl and adds new features available only in 10.13. | |
sysadminctl can be used to change user passwords, create new users (including automatically provisioning | |
the user home folder) or check the status of a new-to-10.13 security feature named SecureToken. | |
SecureToken is a user attribute like password type or user home location. SecureToken is not publicly | |
documented by Apple so it is not possible to provide a full technical description, but in practice one | |
needs only to know if a user has SecureToken or not. Having SecureToken set signifies that a user can | |
unlock a FileVault-encrypted volume. Without the SecureToken bit on a user account, that user will not |
For faster connection speed and more flexibility.
/Applications/Xcode.app/Contents/MacOS/Xcode
#!/usr/bin/python | |
# | |
# getosversionfromdmg.py | |
# | |
# Copyright (c) 2014 The Regents of the University of Michigan | |
# | |
# Retrieves the OS version and build from the InstallESD.dmg contained in | |
# a typical "Install (Mac) OS X <Name>.app" bundle. | |
# | |
# To run: |
#!/usr/bin/python | |
"""Enables location services, allows Maps and Timezone""" | |
import os | |
import platform | |
import subprocess | |
import sys | |
try: | |
sys.path.append('/usr/local/munki/munkilib/') | |
import FoundationPlist | |
except ImportError as error: |
# Tested on 10.11 | |
# Assumes your network is in a state to actually do the discovery | |
# (Generally this means wifi enabled on your device and network stack is up) | |
# | |
# Note: When this code exits, it will generate an error message - this is to be expected! | |
# Error will look like: | |
# Python[3056:158489] PyObjC: Exception during dealloc of proxy: Cannot remove an observer <TimeZonePref 0x7f846b4b6710> | |
# for the key path "enabled" from <ATZAdminPrefererences 0x7f846b502a30> because it is not registered as an observer. | |
# | |
# This is because we're cheating with the initialization of a TimeZonePref class to get cheap access to |
# This code must run as root | |
# We're mixing ObjC and C-style dylibs, so this is really fun | |
# The only reason we're doing this is that the OS is _really really_ picky about trying to do | |
# ANYTHING with the CoreStorage Family Properties CFDictionary that's in-memory EXCEPT for | |
# making a mutable copy of it. | |
# Once we've done that, we can bring it into pyObjC to play nicely with the data. | |
import objc |
###Test Code### | |
### Intention is to figure out what JDK the user has installed. | |
### our current Ext atty reports the JRE, we need to know they have the JDK | |
## thanks to elliotjordon | |
## -00 is just a number to say that JDK is not installed. makes for better smartgroup searches | |
############### | |
if JDKver=$(ls "/Library/Java/JavaVirtualMachines" | awk -F "_|.jdk" '/.jdk/{print $2}' | tail -1) | |
then | |
echo "<result>$JDKver</result>" | |
# else |
#!/usr/bin/python | |
import plistlib, os.path | |
# Based off of https://forums.developer.apple.com/message/6741 | |
def jdk_info_plists(): | |
# Find all the JDK Info.plist files | |
JDK_ROOT = "/Library/Java/JavaVirtualMachines" | |
if (os.path.exists(JDK_ROOT) and os.path.isdir(JDK_ROOT)): | |
# It's present, let's look for installs |
#!/bin/bash | |
# Add the user and group used by Tomcat on your Linux | |
# server. For Casper 9.x running on Red Hat Enterprise | |
# Linux, the user and group are filled in below. | |
linux_tomcat_user="tomcat7" | |
linux_tomcat_group="tomcat7" | |
# Add the user and group used by Tomcat on your Linux |