Mac Operations https://macops.ca/ Recent content on Mac Operations Hugo -- gohugo.io en Mon, 09 Dec 2024 00:00:00 +0000 Talking about EC2 Mac at AWS re:Invent 2024 https://macops.ca/reinvent-2024/ Mon, 09 Dec 2024 00:00:00 +0000 https://macops.ca/reinvent-2024/ <p>In 2020, I was in a cab leaving the Square office in SF, where I&rsquo;d just completed interviewing for a &ldquo;macOS CI Site Reliability Engineer&rdquo; role. In that cab, I was told that AWS was secretly developing a product that would allow running Apple hardware directly in EC2. Just a couple of hours prior, my soon-to-be manager and I had discussed the possibility of shifting Square&rsquo;s self-hosted datacenter Mac CI cluster to some other colo vendor or cloud provider.</p> MacDevOpsYVR 2023 "Stories and learnings from macOS Continuous Integration at Scale" Session Links https://macops.ca/macdevopsyvr-2023/ Wed, 21 Jun 2023 08:40:37 -0400 https://macops.ca/macdevopsyvr-2023/ <p>This week is the MacDevOpsYVR 2023 conference in Vancouver. I was thrilled to have the opportunity to speak this year about some of the Mac CI infrastructure at Block and our in-progress migration to EC2 Mac!</p> <p>Here&rsquo;s a list of various articles, tools, documentation and videos that have been referenced throughout this talk. Hopefully more to come on this blog as well on some other details I didn&rsquo;t have time to go into.</p> Xcode 14's New Simulators Platforms Packaging Format https://macops.ca/xcode-14-new-platforms-packaging-format/ Tue, 20 Sep 2022 08:21:03 -0400 https://macops.ca/xcode-14-new-platforms-packaging-format/ <p>Nearly <em>ten years ago</em>, I <a href="https://macops.ca/xcode-deployment-the-dvtdownloadableindex-and-ios-simulators/">published a post</a> about how to download and deploy the iOS simulator runtimes independently of the Xcode app bundle. This is certainly the oldest post on the blog that I could say was still useful and accurate!</p> <p>Prior to Xcode 14, one could navigate to the &lsquo;Components&rsquo; section of the app preferences and download previous simulators. Under the hood, a &ldquo;dvtdownloadableindex&rdquo; plist file would be downloaded from Apple, containing metadata and templated URLs to download installer packages containing the full simulator runtime operating system packages, and then installed directly to the host&rsquo;s filesystem inside <code>/Library/Developer/CoreSimulator/Profiles/Runtimes</code>. This resulted in a lengthy installation time due to the huge number of files (watchOS 9 simulator <em>alone</em> is over 180K files), and Xcode&rsquo;s interface provided no method (that I could find, at least) to remove these large runtime packages, leaving you to figure out where they&rsquo;d been installed and remove them yourself.</p> Apple Silicon macOS Guest Virtualization Updates, June 2022 https://macops.ca/virtualization-updates-2022-06/ Sun, 12 Jun 2022 10:03:24 -0500 https://macops.ca/virtualization-updates-2022-06/ <p>It&rsquo;s been eight months since I published a <a href="https://macops.ca/macos-monterey-apple-silicon-vms/">post</a> with some early experiments and digging into the capabilities of Apple&rsquo;s new macOS guest VM support on Apple Silicon as of Monterey.</p> <p>Since then, we&rsquo;ve seen:</p> <ul> <li>Improved documentation and a sample project from Apple</li> <li>Lots of new developments in both commercial and open source projects using the framework</li> <li>New APIs revealed during WWDC week with macOS 13 Ventura and Xcode 14</li> </ul> <p>As with the previous post, since my interest in macOS virtualization is always in the context of continuous integration and ephemeral build/test environments, this article is framed around that particular use case. Let&rsquo;s dive in!</p> Changes to Screen Sharing / Remote Desktop Management in macOS Monterey 12.1 https://macops.ca/managing-screen-sharing-in-monterey-12.1/ Fri, 17 Dec 2021 10:45:44 -0400 https://macops.ca/managing-screen-sharing-in-monterey-12.1/ <p>During the beta cycle for macOS Monterey 12.1, a new change was added that&rsquo;s relevant for anyone administering macOS systems and using its built-in Screen Sharing / Remote Management service. Now that 12.1 is publicly available, it&rsquo;s the 2nd bullet entry in the <a href="https://support.apple.com/en-us/HT212586">What&rsquo;s new for enterprise support document</a>:</p> <div class="image-wrapper" > <a href="https://macops.ca/images/2021/12/12-1-relnotes.png" title="" target="_blank"> <img src="https://macops.ca/images/2021/12/12-1-relnotes.png" alt="" /> </a> </div> <p>I spent the last several days being confused by (1) how the change would impact my environment, (2) Apple&rsquo;s documentation, (3) mixed reports from others about whether their prior methods for enabling Screen Sharing / Remote Management were still working as usual for them on Monterey 12.1, and (4) disagreement over what components of their <em>existing</em> solutions were even required to have functional Screen Sharing. I came across multiple Slack threads where people were confused by Apple&rsquo;s documentation not matching their observations about existing solutions involving <code>kickstart</code> and PPPC configuration profiles.</p> Apple Silicon macOS Virtual Machines in Monterey's Virtualization Framework https://macops.ca/macos-monterey-apple-silicon-vms/ Thu, 14 Oct 2021 01:45:44 -0400 https://macops.ca/macos-monterey-apple-silicon-vms/ <p><strong>Note</strong>: Since this article was originally published, there have been exciting new developments. Check out the follow-up article from June 2022 <a href="https://macops.ca/macos-monterey-apple-silicon-vms/">here</a>.</p> <hr> <p>When Apple released the first macOS 12 Monterey betas in June 2021, some interesting new APIs were added to the <a href="https://developer.apple.com/documentation/virtualization">Virtualization framework developer docs</a>. Here&rsquo;s the new APIs below (at time of writing, where Monterey&rsquo;s latest version is beta 10). In particular, notice the <code>VZMac*</code> APIs:</p> <pre tabindex="0"><code>VZAudioDeviceConfiguration VZAudioInputStreamSource VZAudioOutputStreamSink VZDirectoryShare VZDirectorySharingDevice VZDirectorySharingDeviceConfiguration VZGenericPlatformConfiguration VZGraphicsDeviceConfiguration VZHostAudioInputStreamSource VZHostAudioOutputStreamSink VZKeyboardConfiguration VZMacAuxiliaryStorage VZMacGraphicsDeviceConfiguration VZMacGraphicsDisplayConfiguration VZMacHardwareModel VZMacMachineIdentifier VZMacOSBootLoader VZMacOSConfigurationRequirements VZMacOSInstaller VZMacOSRestoreImage VZMacPlatformConfiguration VZMultipleDirectoryShare VZNetworkDevice VZPlatformConfiguration VZPointingDeviceConfiguration VZSharedDirectory VZSingleDirectoryShare VZUSBKeyboardConfiguration VZUSBScreenCoordinatePointingDeviceConfiguration VZVirtioFileSystemDevice VZVirtioFileSystemDeviceConfiguration VZVirtioSoundDeviceConfiguration VZVirtioSoundDeviceInputStreamConfiguration VZVirtioSoundDeviceOutputStreamConfiguration VZVirtioSoundDeviceStreamConfiguration VZVirtualMachineView </code></pre><p>What&rsquo;s interesting here is that (I think) it&rsquo;s the first time we see <em>native Apple APIs</em> for macOS guest virtual machines.</p> MacDevOpsYVR 2020 "Shipping Python to Mac Clients in 2020" Session Links https://macops.ca/macdevopsyvr-2020/ Fri, 12 Jun 2020 08:40:37 -0400 https://macops.ca/macdevopsyvr-2020/ <p>I&rsquo;m proud to have attended <em>all but one</em> of the six <a href="https://mdoyvr.com/">MacDevOpsYVR</a> conferences, normally held in Vancouver, Canada. I was looking forward to being there in person this year but am grateful that the crew has kept it going virtually this year!</p> <p>Today I&rsquo;m giving a talk on Python delivery to Mac clients. You can grab the slides and video recording on the <a href="https://macops.ca/talks/">talks</a> page. Here are links to things referenced in the talk:</p> MacSysAdmin 2018 "Riding Your Next Mac Admin Wave" Session Links https://macops.ca/new-wave/ Mon, 08 Oct 2018 01:00:20 -0700 https://macops.ca/new-wave/ <p>On October 5, I gave a presentation at my favourite conference - <a href="https://www.macsysadmin.se/">MacSysAdmin</a> in Göteborg, Sweden - titled &ldquo;Riding Your Next Mac Admin Wave.&rdquo;</p> <p>It was the last day and the first talk of the morning after the beer bash event, so bonus points to all of you who made it! This page is a list of references from the talk&rsquo;s contents.</p> <p>Links to the slides and video recording can be found on the <a href="https://macops.ca/talks/">talks</a> page.</p> Using VMware Fusion 10 on "old" Mac Pro Intel CPUs https://macops.ca/using-vmware-fusion-10-on-old-mac-pro-intel-cpus/ Wed, 12 Sep 2018 16:18:35 -0400 https://macops.ca/using-vmware-fusion-10-on-old-mac-pro-intel-cpus/ <p>VMware Fusion 10 was released in August 2017. One interesting change is that its <a href="https://kb.vmware.com/s/article/2005196">minimum system hardware requirements</a> are more discerning in terms of the Intel CPU families supported. Notably, Mac Pro models from earlier than 2010 (i.e. earlier than <code>MacPro5,1</code>) are not supported. Attempting to start a VM on such Mac hardware results in the following dialog (screenshot is of version 10.1.2):</p> <div class="image-wrapper" > <a href="https://macops.ca/images/2018/09/fusion-macpro41.png" title="VMware Fusion 10" target="_blank"> <img src="https://macops.ca/images/2018/09/fusion-macpro41.png" alt="VMware Fusion 10" /> </a> </div> <h3 id="unrestricted-guest">Unrestricted guest</h3> <p>Earlier versions had a more ambiguous dialog wording which didn&rsquo;t explain the incompatible features, however it seems as though currently they seem to be providing more detailed info, mentioning the &ldquo;unrestricted guest&rdquo; capability.</p> Syntax highlighting in Apple Keynote Using highlight https://macops.ca/syntax-highlighting-in-apple-keynote-using-highlight/ Sun, 29 Jul 2018 08:00:20 -0700 https://macops.ca/syntax-highlighting-in-apple-keynote-using-highlight/ <p>My presentations often include code examples where having fixed-width fonts and code syntax highlighting is desirable, and Apple Keynote remains my presentation tool of choice for a variety of reasons. I&rsquo;m still interested to give some other presentation tools a try, but I often find that tools which are Markdown-centric (and seem commonly used for showing code in presentations) lack a lot of the traditional editing, layout, and animation features I use in Keynote. So, I continue to use (and love using) Keynote.</p> Installing WebDriver as a Feature on Demand in Windows Redstone 5 https://macops.ca/installing-webdriver-as-a-feature-on-demand-in-windows-redstone-5/ Tue, 10 Jul 2018 08:00:20 -0700 https://macops.ca/installing-webdriver-as-a-feature-on-demand-in-windows-redstone-5/ <p>Historically, Microsoft WebDriver, used for supporting automated testing of Microsoft Edge, has been a <a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/">separate download</a> that should be matched to the major Edge version used in the OS.</p> <p>In <a href="https://www.techradar.com/news/windows-10-redstone-5-rumors-release-date">Windows 10 Redstone 5</a>, WebDriver is <a href="https://windowsreport.com/microsoft-webdriver-edge/">now a Feature on Demand</a>. The details in the linked article are helpful to explain where the binary will end up after it is installed as an optional feature (<code>%SystemRoot%\system32</code>), however I was still looking for a way to automatically install the binary without needing to navigate to the Settings app and find the right sub-menu. Windows now has several places where something that could be named an &ldquo;optional feature&rdquo; can be added or installed, and as someone who doesn&rsquo;t administer Windows as a full-time job, I never find the right location on my first try.</p> MacDevOps 2018 "Owning Your Stuff" Session Links https://macops.ca/dependencies/ Thu, 07 Jun 2018 08:00:20 -0700 https://macops.ca/dependencies/ <p>Here are links to my talk today at <a href="https://mdoyvr.com/">MacDevOps 2018</a>, for the session: &ldquo;Owning Your Stuff: Escaping from Development Dependency Hell.&rdquo; Thanks to all attendees, and thanks to Mat X and the entire MacDevOps crew for hosting this conference for a fourth year!</p> <p>You can also download the slides <a href="https://macops.ca/images/2018/06/MacDevOpsYVR2018_TimSutton.pdf">here</a>.</p> <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/4hj9I1J43xM?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe> </div> <p>&nbsp;</p> Using Safari Technology Preview with Selenium WebDriver https://macops.ca/using-safari-technology-preview-with-selenium-webdriver/ Sat, 02 Dec 2017 12:08:30 -0800 https://macops.ca/using-safari-technology-preview-with-selenium-webdriver/ <p>I recently was attempting to diagnose an issue with the <a href="https://webkit.org/blog/6900/webdriver-support-in-safari-10/">Safari Driver</a>, the component of Safari which allows remote automation using the <a href="https://www.w3.org/TR/webdriver/">WebDriver protocol</a>. In order to confirm whether my issue was a bug, I wanted to run the same test using a current Safari Technology Preview build and compare the results to Apple&rsquo;s released Safari versions. I wasn&rsquo;t able to find very clear examples or documentation about this, however, and wanted to be able to test it both with a local <code>safaridriver</code> as well as via Selenium.</p> MacSysAdmin 2017 'Apple's Unified Logging for Sysadmins' Session Links https://macops.ca/logging/ Thu, 05 Oct 2017 00:00:00 +0000 https://macops.ca/logging/ <p>Here are links and resources related to my <a href="http://www.macsysadmin.se/2017/">MacSysAdmin 2017</a> talk: &lsquo;Apple&rsquo;s Unified Logging for Sysadmins&rsquo;. Enjoying another fantastic conference here in Göteborg, Sweden, and thanks to all who attended! You can find the slides and video recording for this session and all the others at the <a href="http://documentation.macsysadmin.se">MacSysAdmin documentation site</a>.</p> <div class="image-wrapper" > <a href="https://www.instagram.com/p/BZxuE0EgB-a4p7YafQel0KqdSpT_ZjeF3EqW5Q0/" title="MacSysAdmin 2017" target="_blank"> <img src="https://macops.ca/images/2017/10/ventiskimchai_2017-Oct-03.jpg" alt="MacSysAdmin 2017" height="70%" width="70%" /> </a> <p class="image-caption">New conference location at Chalmers. Photo courtesy of Mats Schwieger.</p> </div> <h2 id="apple-documentation">Apple Documentation</h2> <ul> <li><a href="https://developer.apple.com/documentation/os/logging?language=objc">Developer Documentation: Logging</a></li> <li><a href="https://developer.apple.com/bug-reporting/profiles-and-logs/">Bug Reporting: Profiles and Logs</a> (Exhaustive list of logging-related configuration profiles for all Apple OSes)</li> <li><a href="https://developer.apple.com/videos/play/wwdc2016/721/">WWDC 2016: Unified Logging and Activity Tracing</a></li> <li><a href="https://developer.apple.com/videos/play/wwdc2014/714/">WWDC 2014: Fix Bugs Faster using Activity Tracing</a></li> </ul> <h2 id="blog-posts">Blog posts</h2> <ul> <li>krypted.com - <a href="http://krypted.com/mac-os-x/logs-logging-logger-oh/">Logs, Logging and Logger (Oh My!)</a></li> <li>Eclectic Light Company - <a href="https://eclecticlight.co/tag/logs/">Many Sierra logging-related articles</a></li> <li>Emily Kausalik - <a href="http://www.modtitan.com/2017/04/finding-shutdown-causes-in-macos.html">Finding Shutdown Causes in macOS Sierra&rsquo;s Mind-boggling New Logging</a></li> <li>Blackbag Technologies Blog - <a href="https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/">Accessing Unified Logs from an Image</a></li> <li>Henry Stamerjohann and Éric Falconnier - <a href="http://www.amsys.co.uk/2017/01/state-of-logging/">State of logging (for Amsys blog)</a></li> <li>Michael Tsai - <a href="https://mjtsai.com/blog/tag/console/">Log/Console-related articles</a></li> <li>Daniel Jalkut - <a href="http://bitsplitting.org/2016/10/26/log-littering/">Log Littering</a></li> <li>Airbnb Engineering Blog - <a href="https://medium.com/airbnb-engineering/introducing-syslog-to-aws-kinesis-via-osquery-da4fc19de5ce">Introducing Syslog to AWS Kinesis via Osquery</a></li> </ul> <h2 id="other-presentations">Other presentations</h2> <ul> <li>Joe Chilcote - <a href="https://www.youtube.com/watch?v=SQ_pWLgY6pU">Peeling Back the Bark: Demystifying &rsquo;log&rsquo; (PSUMAC 2017)</a></li> <li>Sarah Edwards (mac4n6 blog) - <a href="https://www.mac4n6.com/blog/2017/4/1/new-presentation-logs-unite-forensic-analysis-of-apple-unified-logs">Logs Unite! Forensic Analysis of Apple Unified Logs</a></li> <li>Nic Scott - <a href="https://stream.lib.utah.edu/index.php?c=details&amp;id=12848">macOS Logs (U of Utah Mac Managers Meeting)</a></li> <li>Ed Marczak - <a href="https://www.youtube.com/watch?v=dnMnpLsYmxA">Logs, Damn Logs, and Statistics (PSUMAC 2012)</a></li> </ul> <h2 id="tools">Tools</h2> <ul> <li>Eclectic Light Company: <a href="https://eclecticlight.co/tag/makelogarchive/">MakeLogarchive</a>, <a href="https://eclecticlight.co/tag/consolation/">Consolation</a></li> <li><a href="https://github.com/CocoaLumberjack/CocoaLumberjack/pull/850">Unified Logging Support in CocoaLumberjack</a></li> </ul> <h2 id="misc">Misc</h2> <ul> <li>Zachary Waldowski - <a href="https://gist.github.com/zwaldowski/f9c82dfe1595506a36bd71f55cbb7538">Apple Configuration Profile for Logging in iOS 10 and macOS Sierra</a> (Well-annotated configuration profile for logging configuration options)</li> <li>MacAdmins Podcast - <a href="https://podcast.macadmins.org/2017/09/22/episode-52-digital-forensics-with-sarah-edwards/">Episode 52: Digital Forensics on the Mac with Sarah Edwards</a></li> <li><a href="http://www.openradar.me/radar?id=5002109015556096">Radar #34351855 - re: Apple&rsquo;s logging documentation website</a></li> </ul> What macOS Version Did I Just Download? https://macops.ca/what-macos-version/ Wed, 26 Jul 2017 00:00:00 +0000 https://macops.ca/what-macos-version/ <p>When downloading the latest macOS Installer from the App Store, there&rsquo;s no obvious way to confirm the exact macOS version in the installer from looking at the install assistant application itself. It&rsquo;s been my experience that while the version of the <em>installer app itself</em> always increments, its version number is in no way related to the version of the macOS install image contained within (even though sometimes Apple seems to follow a certain pattern for a few point releases..)</p> University of Utah, MacAdmins Meeting April 2017 'Adobe CC - Lost in Translation' https://macops.ca/mac-mgrs-april-2017/ Thu, 20 Apr 2017 00:00:00 +0000 https://macops.ca/mac-mgrs-april-2017/ <p>The University of Utah, MacAdmins meeting is a monthly meeting with guest (mostly remote) presenters, and this month I gave a talk titled &lsquo;Adobe Creative Cloud: Lost in Translation&rsquo;, to cover a handful of the current issues I&rsquo;ve seen with deploying Adobe Creative Cloud applications.</p> <p>The recorded presentation can be found on the University&rsquo;s Marriott Library <a href="https://stream.lib.utah.edu/index.php?c=details&amp;id=12884">archives here</a>, where the slides can also be downloaded.</p> <p>Here are links to items referenced in the presentation:</p> MacADUK 2017 'Advanced Mac Software Deployment and Configuration' Session Links https://macops.ca/macaduk2017/ Tue, 07 Feb 2017 00:00:00 +0000 https://macops.ca/macaduk2017/ <p>Today I&rsquo;m giving a session at the <a href="http://www.macad.uk/">Mac Admin and Developer UK 2017</a> conference, called &ldquo;Advanced Mac Software Deployment and Configuration: Just Make It Work!&rdquo; This post is a collection of links and resources from the session. Big thanks to Amsys for organizing this great conference!</p> <p>You can also download the slides <a href="https://macops.ca/images/2017/02/MacADUK2017_TimSutton.pdf">here</a>. Now that the recording is available, you can watch it here:</p> <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/pD6Pze1zQ4c?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe> </div> <p>&nbsp;</p> Enabling HiDPI macOS guest VMs in VMware Fusion https://macops.ca/macos-vms-hidpi/ Mon, 23 Jan 2017 00:00:00 +0000 https://macops.ca/macos-vms-hidpi/ <p>There are often times when I&rsquo;d like to take a retina-quality screenshot of something on a macOS system (for this blog, or a presentation, for example), but I&rsquo;d like to screenshot something that I&rsquo;ve got running in a virtual machine. macOS VMs by default run at a standard resolution that&rsquo;s upscaled to the retina screen, making it look blocky by comparison - and more importantly, any screenshots taken within the guest VM will not be retina-resolution.</p> Stalling HTTP(S) downloads with VMware Fusion 8 and NAT https://macops.ca/fusion-8-nat-stalling/ Sat, 21 Jan 2017 00:00:00 +0000 https://macops.ca/fusion-8-nat-stalling/ <p><strong>Update</strong>: This issue has been resolved in the VMware Fusion 8.5.7 update, <a href="http://pubs.vmware.com/Release_Notes/en/fusion/8/fusion-857-release-notes.html">released in May 2017</a>. The workaround below is no longer necessary. The release notes linked above don&rsquo;t sufficiently scope the issue, however: it&rsquo;s not only <code>git clone</code> commands which stall, it&rsquo;s any HTTPS transfer. <code>git clone</code> just happened to be an easy way to reproduce this with large repositories such as <a href="http://blog.cocoapods.org/Master-Spec-Repo-Rate-Limiting-Post-Mortem/">CocoaPods</a>.</p> <p>VMware Fusion 8 is a great general-purpose virtual machine hypervisor which shares a lot of the same infrastructure as the VMware ESX platform, and is my preferred choice for running macOS guest VMs (on Apple hardware). It has great support for NetBoot, FileVault 2, and some additional advanced configuration support useful for testing Mac-based infrastructure projects.</p> Preview to Mac Software Deployment Session at MacADUK 2017 https://macops.ca/macaduk-2017-preview/ Tue, 17 Jan 2017 00:00:00 +0000 https://macops.ca/macaduk-2017-preview/ <p>This year I&rsquo;m very excited to be attending and speaking at the <a href="http://www.macad.uk/">Mac Admin &amp; Developer Conference UK 2017</a> in London, with a session called <a href="http://www.macad.uk/speaker/tim-sutton-advanced-mac-software-deployment-configuration/">&ldquo;Advanced Mac Software Deployment and Configuration: Just Make It Work!&rdquo;</a></p> <p><a href="http://www.amsys.co.uk/">Amsys</a> have just published a preview post about this session which you can read about <a href="http://www.amsys.co.uk/2017/01/advanced-mac-software-deployment-configuration/">here on their blog</a>, to get more of an idea of what I plan to cover.</p> <p>Though I wasn&rsquo;t able to attend this conference last year, I heard great things about it. <a href="http://www.macad.uk/buy-passes/">Get a ticket</a> before it sells out!</p> macOS Installers on the Mac App Store Now Show Date Updated https://macops.ca/macos-installers-update-field/ Fri, 16 Dec 2016 00:00:00 +0000 https://macops.ca/macos-installers-update-field/ <p>Since 2011, it&rsquo;s been possible to obtain the OS installer from the Mac App Store, and one that&rsquo;s been updated to the latest point version of macOS / OS X. For example, after OS X El Capitan was released on September 30, 2015, it was possible over the subsequent months to download an installer that was updated for versions 10.11.1, 10.11.2, and so on.</p> <p>Whenever a new point version is officially released, Apple generally updates the Mac App Store version within a few hours, and many admins who are anxious to inspect it, or build new and test new images or installers, begin downloading and checking the build number to see if they&rsquo;ve got the new version. Sometimes the updated HTML has been posted, but CDNs have not propogated the actual installers. Sometimes the App Store takes longer (a day or two) to post a new build.</p> Squirrel Updates, the Slack Mac App and User Environment Variables https://macops.ca/disabling-squirrel-updates/ Fri, 02 Dec 2016 00:00:00 +0000 https://macops.ca/disabling-squirrel-updates/ <p><strong>Update</strong>: The workaround described below for disabling Squirrel updates <em>specifically for Slack</em> no longer works, as Slack&rsquo;s Mac app as of 2.5.1 includes code to <a href="https://github.com/Squirrel/Squirrel.Mac/issues/192#issuecomment-285703068">actively</a> disable it. If you disagree (as I do), you can use the Slack <a href="https://get.slack.help/hc/en-us/articles/201259356-Slash-commands">/feedback command</a> to send feedback to the developers.</p> <p>Today in the <a href="https://macadmins.herokuapp.com/">Macadmins Slack</a> #autopkg channel, my friend <a href="https://twitter.com/fuzzylogiq">Ben</a> mentioned he was seeing this update prompt for the non-Mac-App-Store version of Slack. It probably looked something like this:</p> MacSysAdmin 2016 'Tools and Process for Streamlining Mac Management' Session Links https://macops.ca/macsysadmin2016/ Fri, 07 Oct 2016 00:00:00 +0000 https://macops.ca/macsysadmin2016/ <p>Here are links and resources I refer to in my MacSysAdmin 2016 talk, &lsquo;Tools and Process for Streamlining Mac Management&rsquo; in Göteborg, Sweden. Thanks to Tycho for another great conference!</p> <p>The video recording and PDF of the slides for this presentation are also now available, along with all the other talks, at the <a href="http://documentation.macsysadmin.se/">MacSysAdmin documentation site</a>.</p> <h3 id="macos-builds">macOS builds</h3> <ul> <li><a href="https://github.com/MagerValp/AutoDMG/wiki/Command-Line-Interface">AutoDMG CLI</a></li> <li><a href="https://github.com/munki/createOSXinstallPkg/blob/master/README.md">createOSXInstallPkg</a></li> <li><a href="https://github.com/MagerValp/CreateUserPkg">CreateUserPkg</a></li> <li><a href="http://cdn.macdevops.ca/MDO2016/jenkins/Default.html">MacDevOps 2016 Jenkins CI presentation</a></li> <li><a href="https://jenkins.io">Jenkins CI</a></li> </ul> <h3 id="nbi-creation-tools">NBI creation tools</h3> <ul> <li><a href="https://github.com/MagerValp/AutoDSNBI">AutoDSNBI</a> - Per Olofsson</li> <li><a href="https://github.com/grahamgilbert/imagr/wiki/Automatic-Creation">Imagr NBI creation docs</a> - Graham Gilbert</li> <li><a href="https://bitbucket.org/bruienne/autonbi">AutoNBI</a> - Pepijn Bruienne</li> <li><a href="https://github.com/NBICreator/NBICreator">NBICreator</a> - Erik Berglund</li> <li><a href="https://github.com/macmule/AutoImagrNBI">AutoImagrNBI</a> and <a href="https://github.com/macmule/AutoCasperNBI">AutoCasperNBI</a> - Ben Toms</li> </ul> <h3 id="packaging">Packaging</h3> <ul> <li><a href="https://github.com/munki/munki-pkg">munkipkg</a> - Greg Neagle</li> <li><a href="https://github.com/unixorn/luggage">The Luggage</a> - Joe Block</li> <li><a href="http://s.sudre.free.fr/Software/Packages/about.html">Packages</a> - Stéphane Sudre</li> <li><a href="http://enterprisemac.bruienne.com/2015/11/17/installing-os-x-pkgs-using-an-mdm-service/">Blog post</a> by Pepijn Bruienne on signing packages for MDM InstallApplication</li> <li><a href="https://hub.docker.com/r/bruienne/pkgsign/">bruienne/pkgsign Docker image</a></li> </ul> <h3 id="other">Other</h3> <ul> <li><a href="http://heeris.id.au/2013/this-is-why-you-shouldnt-interrupt-a-programmer/">This Is Why You Shouldn&rsquo;t Distract a Programmer</a></li> <li><a href="https://github.com/timsutton/munki-conditions">Munki conditions</a></li> <li><a href="https://github.com/munki/munki-facts">munki-facts</a></li> <li>Toyota Production System - <a href="https://en.wikipedia.org/wiki/Toyota_Production_System">Wikipedia</a>, <a href="http://www.toyota-global.com/company/vision_philosophy/">Toyota Global website</a></li> <li><a href="https://github.com/autopkg/autopkg/blob/master/Scripts/setup_new_recipe_repo.py">AutoPkg recipe repo setup script</a></li> <li><a href="http://www.davidpashley.com/articles/writing-robust-shell-scripts/">Writing Robust Bash Shell Scripts</a> - David Pashley</li> <li>Calling external commands in <a href="http://stackoverflow.com/questions/2232/calling-shell-commands-from-ruby">Ruby</a> and <a href="http://stackoverflow.com/questions/89228/calling-an-external-command-in-python">Python</a></li> </ul> MacDevOps:YVR 2016 'Jenkins CI for MacDevOps' slides and references https://macops.ca/macdevopsyvr-2016/ Mon, 20 Jun 2016 00:00:00 +0000 https://macops.ca/macdevopsyvr-2016/ <p>Today I&rsquo;m presenting on the Jenkins CI project for the <a href="http://www.macdevops.ca">MacDevOps:YVR 2016</a> conference in Vancouver, Canada. This post contains links and references from the talk, and you can find the slides <a href="https://macops.ca/images/2016/06/MacDevOpsYVR2016.pdf">here</a>. Here&rsquo;s a link to the video:</p> <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/f4384UJhlxA?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe> </div> <h4 id="macadmin-projects-mentioned">MacAdmin projects mentioned</h4> <ul> <li><a href="https://github.com/grahamgilbert/Imagr">Imagr</a></li> <li><a href="https://github.com/MagerValp/AutoDMG">AutoDMG</a></li> <li><a href="https://github.com/facebook/IT-CPE/tree/master/legacy/autodmg_cache_builder">AutoDMG Cache Builder</a></li> </ul> <h4 id="jenkins-job-and-config-management">Jenkins job and config management</h4> <ul> <li><a href="https://github.com/jenkinsci/job-dsl-plugin/wiki">Job DSL Plugin</a></li> <li><a href="http://www.groovy-lang.org">Groovy scripting language</a></li> <li><a href="https://github.com/timsutton/autopkg-ci">AutoPkg-CI project code</a></li> <li><a href="http://docs.openstack.org/infra/jenkins-job-builder/">Jenkins Job Builder</a></li> <li>Jenkins Job Builder and Jenkins DSL Plugin compared: <a href="http://www.jeeatwork.com/?p=182">Part 1</a>, <a href="http://www.jeeatwork.com/?p=194">Part 2</a></li> </ul> <h4 id="jenkins-plugins">Jenkins plugins</h4> <ul> <li><a href="https://wiki.jenkins-ci.org/display/JENKINS/GitHub+Plugin">GitHub</a></li> <li><a href="https://wiki.jenkins-ci.org/display/JENKINS/Active+Directory+plugin">Active Directory auth</a></li> </ul> <h4 id="jenkins-api-wrappers">Jenkins API wrappers</h4> <ul> <li><a href="https://pypi.python.org/pypi/jenkinsapi">Python</a></li> <li><a href="http://github.arangamani.net/jenkins_api_client/">Ruby</a></li> <li><a href="https://github.com/yosida95/golang-jenkins">Go</a></li> <li><a href="https://github.com/jansepar/node-jenkins-api">Node</a></li> <li><a href="https://github.com/colinnewell/Jenkins-API">Perl</a></li> </ul> <h4 id="pipelines">Pipelines</h4> <ul> <li><a href="https://jenkins.io/doc/pipeline/">Jenkins &lsquo;Getting Started with Pipeline&rsquo; documentation</a></li> <li><a href="https://github.com/jenkinsci/pipeline-examples">Pipeline examples</a></li> <li><a href="https://concourse-ci.org/pipelines.html">Concourse CI pipelines</a></li> <li><a href="https://jenkins.io/blog/2016/05/26/introducing-blue-ocean/">Jenkins Blue Ocean UI project</a></li> </ul> <h4 id="other-ci-projects-and-platforms">Other CI projects and platforms</h4> <h5 id="standalone-tools">Standalone tools</h5> <ul> <li><a href="http://buildbot.net">Buildbot</a></li> <li><a href="https://www.thoughtworks.com/go/">Go</a></li> <li><a href="https://concourse-ci.org/">Concourse</a></li> </ul> <h5 id="hosted-byo-runner-for-some">Hosted (BYO runner for some)</h5> <ul> <li><a href="https://buildkite.com/">Buildkite</a></li> <li><a href="https://travis-ci.com/">Travis CI</a></li> <li><a href="https://www.appveyor.com/">Appveyor</a></li> <li><a href="https://about.gitlab.com/gitlab-ci/">GitLab CI</a></li> <li><a href="https://bitbucket.org/product/features/pipelines">Bitbucket Pipelines</a></li> <li><a href="https://www.atlassian.com/software/bamboo">Bamboo</a></li> <li><a href="https://www.buddybuild.com">buddybuild</a></li> </ul> <h4 id="some-other-public-jenkins-instances">Some other public Jenkins instances</h4> <ul> <li><a href="http://bot.brew.sh">Homebrew</a></li> <li><a href="https://ci.swift.org">Swift</a></li> </ul> MacDeployment 2016 'Managing the User Experience' slides and references https://macops.ca/macdeploy2016/ Thu, 16 Jun 2016 00:00:00 +0000 https://macops.ca/macdeploy2016/ <p>Here are some references from my &ldquo;Managing the User Experience&rdquo; session at the <a href="http://macdeployment.ca">MacDeployment 2016 conference</a> in Calgary, June 2016. Thanks to everyone who attended!</p> <p>Slides can be downloaded <a href="http://macdeployment.ca/sites/macdeployment.ca/files/macdeploy_2016.pdf">here</a>.</p> <h4 id="third-party-app-preferences">Third-party app preferences</h4> <ul> <li><a href="https://sparkle-project.org/documentation/customization/">Sparkle documentation</a></li> <li><a href="http://www.chromium.org/administrators/mac-quick-start">Google Chrome preferences using MCX</a></li> <li><a href="http://www.adobe.com/devnet/scripting.html">Adobe Scripting Center</a></li> </ul> <h4 id="apple-native-preferences">Apple-native Preferences</h4> <ul> <li><a href="https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/UserPreferences.html#//apple_ref/doc/uid/20002092-120915-TPXREF104">Preferences domains</a></li> <li><a href="https://github.com/apple/swift-corelibs-foundation/blob/cfff4135acfbbfe9ac4f280be21ca0a13ddfdb0d/CoreFoundation/Preferences.subproj/CFApplicationPreferences.c#L379-L403">Exhaustive domain search order from CoreFoundation</a></li> <li><a href="https://ss64.com/osx/defaults.html">defaults(1) manpage</a></li> <li><a href="http://apps.tempel.org/PrefsEditor/">PrefsEditor</a></li> </ul> <h4 id="configuration-profiles">Configuration Profiles</h4> <ul> <li><a href="http://docs.macsysadmin.se/2015/video/Day2Session2.mp4">Preferences Management with Profiles</a> - Greg Neagle, MacSysAdmin 2015</li> <li><a href="https://help.apple.com/profilemanager/mac/5.1.5/#/apd574B481D-3499-491A-8A18-EBDC44E0E0EB">Apple Profile Manager documentation</a></li> <li><a href="https://github.com/timsutton/mcxToProfile">mcxToProfile</a></li> <li><a href="https://github.com/timsutton/make-profile-pkg">make-profile-pkg</a></li> <li><a href="https://github.com/ProfileCreator/ProfileCreator">ProfileCreator</a> - Erik Berglund</li> <li><a href="https://github.com/Error-freeIT/Dock-Master">Dock-Master</a> - Michael Page</li> </ul> <h4 id="older-but-great-resources-on-managed-preferences">Older (but great) resources on Managed Preferences</h4> <ul> <li><a href="http://www.apress.com/9781430229377">Enterprise Mac Managed Preferences</a> - Ed Marczak, Greg Neagle</li> <li><a href="http://www.peachpit.com/store/apple-training-series-mac-os-x-server-essentials-v10-9780321635334">OS X Server Essentials 10.6</a></li> </ul> <h4 id="other-items">Other items</h4> <ul> <li><a href="https://github.com/chilcote/outset">outset</a> - Joe Chilcote</li> <li><a href="https://github.com/MagerValp/LoginScriptPlugin">LoginScriptPlugin</a> - Per Olofsson</li> <li><a href="https://github.com/munki/munki/blob/master/code/client/munkilib/FoundationPlist.py">FoundationPlist Pyton module</a> - Greg Neagle</li> <li><a href="https://www.unix.com/man-page/osx/1/plutil/">plutil(1) manpage</a></li> <li><a href="http://xyproblem.info">XY Problem</a></li> </ul> New Adventures in Automating OS X Installs with startosinstall https://macops.ca/new-adventures-in-automating-os-x-installs-with-startosinstall/ Mon, 04 Apr 2016 00:00:00 +0000 https://macops.ca/new-adventures-in-automating-os-x-installs-with-startosinstall/ <p>OS X El Capitan&rsquo;s installer includes a nifty new command-line tool called <code>startosinstall</code>, which can be used to automate installations and upgrades of OS X El Capitan via the command line. Since you may be already familiar with the <a href="https://github.com/munki/createOSXinstallPkg">createOSXInstallPkg</a> tool that can also help automate OS X installations, you might be wondering why you should care.</p> <p>I&rsquo;ll go into some technical detail about what this tool does and how, but first let&rsquo;s go back a few years to provide more (and more) context.</p> Developer Binaries on OS X, xcode-select and xcrun https://macops.ca/developer-binaries-on-os-x-xcode-select-and-xcrun/ Sun, 07 Feb 2016 00:00:00 +0000 https://macops.ca/developer-binaries-on-os-x-xcode-select-and-xcrun/ <p><code>xcode-select</code> is a command-line utility on OS X that facilitates switching between different sets of command line developer tools provided by Apple. Its primary function is to be a &ldquo;master switch&rdquo; for the actual paths resolved when invoking the commands for tools like <code>make</code>, <code>xcodebuild</code>, <code>otool</code>, etc.</p> <p>From the manpage:</p> <blockquote> <p>The tool xcode-select(1) is used to set a system default for the active developer directory, and may be overridden by the <code>DEVELOPER_DIR</code> environment variable.</p> Deploying Xcode - The Trick With Accepting License Agreements https://macops.ca/deploying-xcode-the-trick-with-accepting-license-agreements/ Thu, 26 Nov 2015 20:44:54 +0000 https://macops.ca/deploying-xcode-the-trick-with-accepting-license-agreements/ <p>If you&rsquo;ve ever gone through the process of automating Xcode installations, you&rsquo;ve no doubt run across the issue of making sure that the license for Xcode and included SDKs has been accepted. An unlicensed Xcode looks like this on first launch, and asks for admin privileges:</p> <div class="image-wrapper" > <a href="https://macops.ca/images/2015/11/xcode-eula.png" title="" target="_blank"> <img src="https://macops.ca/images/2015/11/xcode-eula.png" alt="" /> </a> </div> <p>Or, try and run a command line utility and get:</p> <pre tabindex="0"><code>➜ ~ strings Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo. </code></pre><p>For a number of years the <a href="https://github.com/munki/munki/wiki">Munki wiki</a> has been maintaining a list of actions to &ldquo;finalize&rdquo; an Xcode installation. See the script posted <a href="https://github.com/munki/munki/wiki/Xcode#xcode-5">here on the Munki wiki</a>, notably this part:</p> <pre tabindex="0"><code># accept Xcode license /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -license accept </code></pre><p>This useful trick with <code>xcodebuild</code> works if you have only a single Xcode app to deploy, but the situation becomes less clear if you maintain several on a single machine. And, you may have seen from time to time that you install a different version of Xcode (or a Beta version) on your own machine, that you need to re-accept the license again. What exactly is going on here?</p> Easy Version Comparisons with Python https://macops.ca/easy-version-comparisons-with-python/ Thu, 05 Nov 2015 18:52:11 +0000 https://macops.ca/easy-version-comparisons-with-python/ <p>This is just a little taste of why sysadmins find Python so approachable. If you&rsquo;ve managed systems for long enough, you&rsquo;ve probably had a need to compare two versions of something. For example, you want to do one thing if a given application or package is less than <code>2.0</code>, and another thing if it&rsquo;s greater. (For example, upgrade the application or package, or configure it differently in either case.)</p> <p>If you&rsquo;ve ever tried to do this in Bash, it&rsquo;s terrible. And you may have seen various installer scripts that attempt to do this. Or even doing this <a href="https://blog.frd.mn/java-7-on-os-x-yosemite/">within Installer distribution scripts</a>, despite there being <a href="https://developer.apple.com/library/mac/documentation/DeveloperTools/Reference/DistributionDefinitionRef/Chapters/Distribution_XML_Ref.html#//apple_ref/doc/uid/TP40005370-CH100-SW34">more robust mechanisms</a> already provided by the OS that require no scripting.</p> The Office for Mac 2016 Volume License Installer, Two Months Later https://macops.ca/the-office-for-mac-2016-volume-license-installer-two-months-later/ Wed, 07 Oct 2015 15:24:37 +0000 https://macops.ca/the-office-for-mac-2016-volume-license-installer-two-months-later/ <!-- [![pkg_office](images/2015/10/pkg_office-300x298.png)](images/2015/10/pkg_office.png) --> <p>It is now over two months since Microsoft has made the Office for Mac 2016 Volume License installer available for customers in the VLSC (Volume Licensing Service Center) portal. I have <a href="http://macops.ca/whats-wrong-with-the-office-2016-volume-license-installer/">previously documented</a> a couple major issues with the installer that impact those who deploy Office 2016 using automated means (meaning anything that doesn&rsquo;t involve a user manually running the GUI installer).</p> <p>In this post I&rsquo;ll summarize two of the major issues and talk a bit about a conference session that was presented just this past week at MacSysAdmin 2015 by Duncan McCracken.</p> MacSysAdmin Tools Smörgåsbord https://macops.ca/smorgasbord/ Tue, 29 Sep 2015 10:59:30 +0000 https://macops.ca/smorgasbord/ <p>The MacSysAdmin 2015 conference is taking place this week in Göteborg, Sweden. In a session titled <em>MacSysAdmin Tools Smörgåsbord</em>, I&rsquo;ll be going through a selection of tools that I&rsquo;ve either written or contributed to and which are available <a href="https://github.com/timsutton">on my GitHub repo</a>.</p> <div class="image-wrapper" > <a href="https://www.flickr.com/photos/16782093@N03/8288809277" title="Folkets Hus" target="_blank"> <img src="https://macops.ca/images/2015/09/8288809277_e2fa3945ea_z.jpg" alt="Folkets Hus" /> </a> <p class="image-caption">Theatre entrance to the Folkets Hus. CC Image courtesy of Metro Centric on Flickr.</p> </div> <p>Here you can find the various links to tools, posts, etc. that appear in the session slides.</p> What's Wrong with the Office 2016 Volume License Installer? https://macops.ca/whats-wrong-with-the-office-2016-volume-license-installer/ Wed, 26 Aug 2015 14:19:19 +0000 https://macops.ca/whats-wrong-with-the-office-2016-volume-license-installer/ <p>Office 2016 for Mac comes in an installer package that has been causing several issues for Mac sysadmins deploying it in their organizations. At least a <a href="https://derflounder.wordpress.com/2015/08/05/creating-an-office-2016-15-12-3-installer">couple</a> <a href="http://www.richard-purves.com/?p=79">posts</a> exist already for how to &ldquo;fix&rdquo; the installer and deploy the software, but I haven&rsquo;t seen anyone actually detail some of these issues publicly. The best way to &ldquo;fix&rdquo; the installer is to have Microsoft fix it so that it can be deployed the same way we deploy any other software. Office is probably the most common software suite deployed in organizations, and so it&rsquo;s a very bad sign that 2016 for Mac has begun its life as an installer that cannot be deployed without workarounds and/or repackaging.</p> <p>In this post, as usual I&rsquo;ll go into some detail about this installer&rsquo;s problems, review some known workarounds and propose some solutions.</p> Disabling First-run Dialogs in Office 2016 for Mac https://macops.ca/disabling-first-run-dialogs-in-office-2016-for-mac/ Thu, 06 Aug 2015 21:03:56 +0000 https://macops.ca/disabling-first-run-dialogs-in-office-2016-for-mac/ <p>This post is part useful tidbit and part lesson in interacting with application preferences on OS X.</p> <p>Office 2016 for Mac presents &ldquo;first run&rdquo; dialogs to the user to market some of its new features. Sysadmins often want to find ways to disable these for certain scenarios. I actually think these are often helpful for individual users, but may be less desirable on shared workstations or kiosk-like machines where users may use Office applications frequently from a &ldquo;clean&rdquo; profile that has never launched Office, and the repeated dialog becomes a nuisance.</p> Python For Mac Admins session resources https://macops.ca/python-for-mac-admins-session-resources/ Thu, 18 Jun 2015 00:19:53 +0000 https://macops.ca/python-for-mac-admins-session-resources/ <p>On June 18 and 19, I&rsquo;ll be giving a talk at the <a href="http://macdeployment.ca">MacDeploy</a> and <a href="http://www.macdevops.ca">MacDevOpsYVR</a> conferences, respectively in Calgary and Vancouver. The talk is a whirlwind introduction to &ldquo;Python for Mac Admins&rdquo; and is mostly based on code snippets and examples that I&rsquo;ll be talking through in an interactive Python environment.</p> <p>If you&rsquo;d like to follow along, I&rsquo;m putting the <a href="https://github.com/timsutton/python-macadmins-2015">code resources up on GitHub</a>, which you can clone or download a zip archive of from the website. I&rsquo;d recommend cloning it with Git (<code>git clone https://github.com/timsutton/python-macadmins-2015</code>) so that you can pull any changes I add after this post has been published.</p> Adobe Creative Cloud Deployment - Pushing Installers with Munki https://macops.ca/adobe-creative-cloud-deployment-pushing-installers-with-munki/ Tue, 02 Jun 2015 20:23:23 +0000 https://macops.ca/adobe-creative-cloud-deployment-pushing-installers-with-munki/ <!-- [![munki_transparent](images/2015/05/munki_transparent.png)](images/2015/05/munki_transparent.png) --> <p>We <a href="https://macops.ca/adobe-creative-cloud-licensing-and-deployment/">previously</a> <a href="https://macops.ca/adobe-creative-cloud-deployment-packaging-a-license-file/">covered</a> a few <a href="https://macops.ca/adobe-creative-cloud-licensing-and-deployment-managing-licenses-with-munki/">aspects</a> of Adobe Creative Cloud from the perspective of deploying it to OS X clients. We spent the whole time dealing with the licensing aspects but never talked about the actual installers and updates.</p> <h3 id="adobe-installers-are-spoiled">Adobe installers are spoiled</h3> <p>There is a single option available to you for getting the installers: you must use the Adobe Creative Cloud Packager application (CCP for short) to fetch and build OS X installer packages. Because Adobe has reinvented the wheel and opted to use their own custom installer framework, the installer packages that CCP outputs do not use any of OS X&rsquo;s native installer features - instead the packages simply provide just enough of a mechanism to bundle up Adobe&rsquo;s own installer tooling (which have actually grown substantially in size in proportion to the actual applications they install) and run them as &ldquo;preinstall&rdquo; scripts.</p> Adobe Creative Cloud Deployment - Managing Licenses with Munki https://macops.ca/adobe-creative-cloud-licensing-and-deployment-managing-licenses-with-munki/ Fri, 29 May 2015 16:11:09 +0000 https://macops.ca/adobe-creative-cloud-licensing-and-deployment-managing-licenses-with-munki/ <!-- [![munki_transparent](images/2015/05/munki_transparent.png)](images/2015/05/munki_transparent.png) --> <p><a href="https://macops.ca/adobe-creative-cloud-licensing-and-deployment/">Previously</a> we covered some boring details about Adobe Creative Cloud licensing and how this impacts deploying it to managed clients. We <a href="https://macops.ca/adobe-creative-cloud-deployment-packaging-a-license-file/">also covered</a> a process and script I came up with that makes it slightly less painful to package up device and serial licenses for distribution to clients. Now, how to we manage these in a software management system? Since I use Munki, I&rsquo;ll use that as a model for how you might manage this license from an administrative standpoint. This is Munki-specific, but the principles should apply elsewhere.</p> Adobe Creative Cloud Deployment - Packaging a License File https://macops.ca/adobe-creative-cloud-deployment-packaging-a-license-file/ Thu, 28 May 2015 14:45:36 +0000 https://macops.ca/adobe-creative-cloud-deployment-packaging-a-license-file/ <p>In the <a href="https://macops.ca/adobe-creative-cloud-licensing-and-deployment/">previous post</a>, we covered the scenarios in which you might want to deploy a Creative Cloud device license or serial number separate from the actual applications, as a &ldquo;License File Package&rdquo;. Although the <a href="https://helpx.adobe.com/creative-cloud/packager.html">Creative Cloud Packager app</a> supports this as a workflow, the problem is that it doesn&rsquo;t help you out much with regards to the files it outputs.</p> <div class="image-wrapper" > <a href="https://macops.ca/images/2015/05/ccp_create_license_file.png" title="" target="_blank"> <img src="https://macops.ca/images/2015/05/ccp_create_license_file.png" alt="" /> </a> </div> <p>Adobe has had the APTEE tool around for a while, as a command-line interface to the Creative Suite licensing tools, to aid with deployment automation - it&rsquo;s a single executable which confusingly does not include &ldquo;APTEE&rdquo; anywhere in the name of the binary: <code>adobe_prtk</code>.</p> Adobe Creative Cloud Deployment - Overview https://macops.ca/adobe-creative-cloud-licensing-and-deployment/ Wed, 27 May 2015 05:42:23 +0000 https://macops.ca/adobe-creative-cloud-licensing-and-deployment/ <!-- [![EnterpriseApp_256.png](images/2015/05/EnterpriseApp_256.png)](images/2015/05/EnterpriseApp_256.png) --> <p>Adobe&rsquo;s Creative Cloud licensing models add some new layers of complexity surrounding large-scale deployment in organizations. As I&rsquo;ve been planning and testing our rollout in areas with managed, shared workstations I&rsquo;m routinely uncovering new information, and the parts of this I think might be useful to others I will cover in several posts. There are several aspects here: 1) simply wrapping one&rsquo;s head around the different licensing models, 2) understanding differences in the mechanisms with which these licenses can be deployed to machines, and 3) how to maintain all of all this using a software management system such as Munki or Casper. While I can only speak with experience with a subset of the licensing types and my management tool of choice (Munki), this may be useful if you have some of these in common, or you may also be able to port some specifics to another management system.</p> Upcoming conference talks for 2015 https://macops.ca/upcoming-conference-talks-for-2015/ Wed, 06 May 2015 13:08:28 +0000 https://macops.ca/upcoming-conference-talks-for-2015/ <p>Pepijn Bruienne just posted a <a href="http://enterprisemac.bruienne.com/2015/05/05/conference-news/">nice summary</a> of the Apple administration-focused conferences coming up in 2015. I&rsquo;m also happy to be a small part of several of those coming up:</p> <p><a href="http://jazzace.ca">Anthony Reimer</a> has organized for its second year the <a href="http://arts.ucalgary.ca/macdeployment/">MacDeployment workshop</a>, hosted at the University of Calgary&rsquo;s <a href="http://www.ucalgary.ca/iaml/">Integrated Arts Media Labs</a>. I&rsquo;m looking forward to visiting as the IAML seems similar to the environment I support at Concordia University&rsquo;s Faculty of Fine Arts, and the <a href="http://calgary.ctvnews.ca/ndp-wins-alberta-provincial-election-ending-pc-reign-1.2360866">Prairies</a> are one of the only parts of Canada I&rsquo;ve not yet visited.</p> Reclaiming inodes from Jenkins https://macops.ca/reclaiming-inodes-from-jenkins/ Tue, 05 May 2015 18:19:58 +0000 https://macops.ca/reclaiming-inodes-from-jenkins/ <!-- [![Jenkins.sh-600x600](images/2015/05/Jenkins.sh-600x600-232x300.png)](images/2015/05/Jenkins.sh-600x600.png) --> <p>A pet project I maintain is <a href="http://ci.autopkg.org">ci.autopkg.org</a>, a Jenkins instance that runs all <a href="https://github.com/autopkg/autopkg">AutoPkg</a> recipes in the <a href="https://github.com/autopkg/recipes">autopkg/recipes</a> repo on a schedule, and reports any cases where recipes are failing. There are currently 126 jobs, for the 126 recipes in the repo.</p> <p>These AutoPkg recipes must be run on OS X, so there is always at least one OS X slave connected to by the master, which runs Ubuntu on the <a href="https://www.digitalocean.com/pricing/">cheapest</a> Digital Ocean droplet available. Every time a job runs on a slave (currently about every eight hours), Jenkins logs the results on the master in a set of files on disk, known as a &ldquo;build.&rdquo; By default, when a new Jenkins job is created, it is configured for builds to be kept forever, even though they can be deleted manually. Builds may also include &ldquo;artifacts&rdquo; - binaries or other output from a job - but in my case a build is mostly just state and console output saved from the build run.</p> Experiments with AutoDMG, System Image Utility and OS version compatibility https://macops.ca/experiments-with-autodmg-system-image-utility-and-os-version-compatibility/ Thu, 09 Apr 2015 14:05:09 +0000 https://macops.ca/experiments-with-autodmg-system-image-utility-and-os-version-compatibility/ <!-- [![SystemImageUtility_128.png](images/2015/04/SystemImageUtility_128.png)](images/2015/04/SystemImageUtility_128.png) --> <p>I use <a href="https://github.com/MagerValp/AutoDMG">AutoDMG</a> to build restorable system images for OS X, which uses a technique similar to System Image Utility&rsquo;s NetRestore: run the OS X installer on one machine, but targeted at a disk image which is later converted to a read-only disk image, which can be restored to a Mac.</p> <p>While running the 10.10.3 developer seeds on my build machine I noticed my AutoDMG builds seemed to never complete. After looking more closely at what processes were running, I noticed a suspicious process: <code>/System/Library/Frameworks/Automator.framework/Versions/A/Support/update_automator_cache --system --force</code>, which was called by a postinstall script in the <code>com.apple.pkg.Essentials</code> package. The process wasn&rsquo;t actually hung - upon inspection using the <a href="https://ss64.com/osx/opensnoop.html"><code>opensnoop</code></a> DTrace script, it was continuously re-indexing Automator bundles in an infinite loop.</p> Security Updates leaving mach_kernel visible https://macops.ca/security-updates-leaving-mach_kernel-visible/ Wed, 11 Mar 2015 14:33:42 +0000 https://macops.ca/security-updates-leaving-mach_kernel-visible/ <p>In the past, there have been cases where system updates for 10.8.5 (and possibly earlier versions) leave the OS X kernel (at <code>/mach_kernel</code>) visible to users in the Finder. This file has since moved to <code>/System/Library/Kernels/kernel</code> in OS X Yosemite, but previously to Yosemite it is located at <code>/</code>, and included in the package payload for system updates like OS X Combo/Delta and Security Updates.</p> <p>OS X installers and updaters typically keep this file hidden in the Finder using a tool called <code>SetFile</code>, which is able to set miscellaneous file flags including the &ldquo;hidden&rdquo; flag. The Security Update 2015-002 for Mavericks, released on March 9, 2015, does not include any of the postinstall &ldquo;actions&rdquo; (miscellaneous scripts and tools executed by a master script) in the installer that were present in the 2015-001 update.</p> darwinup, Apple's Darwin Update utility https://macops.ca/darwinup-apples-darwin-update-utility/ Wed, 21 Jan 2015 19:46:53 +0000 https://macops.ca/darwinup-apples-darwin-update-utility/ <p>Yesterday in <a href="https://botbot.me/freenode/osx-server/">##osx-server</a>, <a href="https://twitter.com/bruienne">Pepijn Bruienne</a> mentioned having stumbled upon an OS X system binary he&rsquo;d never seen before, which was new to me as well: <code>darwinup</code>. This tool is used (or <em>was</em> used - public development of it seems to have stopped around OS X 10.7) for the purpose of managing versions of OS X system components by installing &ldquo;roots&rdquo; distributed in a variety of ways. It abstracts several different archive formats and wraps tools like curl, tar, rsync to perform its tasks.</p> OS X admins: your clients are not getting background security updates https://macops.ca/os-x-admins-your-clients-are-not-getting-background-security-updates/ Thu, 18 Dec 2014 16:50:48 +0000 https://macops.ca/os-x-admins-your-clients-are-not-getting-background-security-updates/ <p>Have I got your attention? The more accurate (and longer) qualifier for this title should actually be: &ldquo;admins who configure clients to not automatically check for software updates.&rdquo;</p> <p>From recent discussions in <a href="https://botbot.me/freenode/osx-server">##osx-server</a>, some of us have determined that OS X&rsquo;s &ldquo;system data files and security updates&rdquo; will only install automatically <em>if a client is already configured to automatically check for updates</em>. Many sysadmins managing OS X clients tend to disable this setting so that they can control the distribution of these updates, but aren&rsquo;t aware that their clients are now no longer receiving Apple&rsquo;s background updates for at several of its built-in security mechanisms, including <a href="http://www.thesafemac.com/tag/xprotect/">XProtect</a> and <a href="http://support.apple.com/en-us/HT202491">Gatekeeper</a>.</p> <p>Rich Trouton beat me to this post <a href="https://derflounder.wordpress.com/2014/12/17/forcing-xprotect-blacklist-updates-on-mavericks-and-yosemite/">with his post yesterday</a>, but it prompted me to do a bit more digging into trying to reproduce an issue that comes up when attempting the most obvious workarounds for this issue, which I&rsquo;ll outline after giving some more context.</p> <p><strong>Update:</strong> Greg Neagle has come up with a simple but flexible workaround for the issue described below, which he&rsquo;s implemented in Reposado and documented <a href="https://managingosx.wordpress.com/2015/01/30/gatekeeper-configuration-data-and-xprotectplistconfigdata-and-munki-and-reposado-oh-my/">here</a>. If you use Reposado (and you really should), look into the new <code>--remove-config-data</code> option that can be applied selectively to SUS updates you&rsquo;re mirroring.</p> Keeping your OS X VM guest tools current with Munki https://macops.ca/keeping-your-os-x-vm-guest-tools-current-with-munki/ Wed, 19 Nov 2014 16:36:31 +0000 https://macops.ca/keeping-your-os-x-vm-guest-tools-current-with-munki/ <!-- [![fusion_256.png](images/2014/11/fusion_256.png)](images/2014/11/fusion_256.png) --> <p>I use VMware Fusion to test client software, deployment workflows, and using virtual machines allows me to frequently take and roll back snapshots. Over time, the VMware guest OS tools tend to drift out of date with the version of Fusion, and are reported to need updates/reinstalling. Sometimes when this happens, things like pasteboard synchronization, automatic window resolution resizing and drag-and-drop file transfers stop working. I&rsquo;d like to not have to manually click &ldquo;Update VMware tools..&rdquo; and go install the tools manually every time I notice the tools are out of date between snapshots (which on my system seems to be frequently).</p> <p>Luckily, I use Munki to manage OS X clients, and it&rsquo;s great at updating software. In this post I&rsquo;ll walk through the few steps I did to have all my test machines configured to automatically keep their VMware tools up to date. The same logic should apply for other software management platforms like Casper, Absolute Manage or Puppet, using their respective mechanisms for customizable discoverable attributes. This technique should work for users of Parallels, if they use a sane OS X installer for their tools. VirtualBox has yet to ship with any OS X guest tools.</p> More about suppressing diagnostics submissions popups in OS X Yosemite https://macops.ca/diagnostics-prompt-yosemite/ Tue, 18 Nov 2014 19:35:17 +0000 https://macops.ca/diagnostics-prompt-yosemite/ <p>With OS X Yosemite, Apple added an additional phase to the Setup Assistant: the offer to submit diagnostics info to Apple and third-party developers, which is displayed either as part of a initial setup or upon first login (similar to the <a href="http://managingosx.wordpress.com/2012/07/26/mountain-lion-suppress-apple-id-icloud-prompt">iCloud prompt</a>).</p> <div class="image-wrapper" > <a href="https://macops.ca/images/2014/11/yosemite_diagnostics.png" title="" target="_blank"> <img src="https://macops.ca/images/2014/11/yosemite_diagnostics.png" alt="" /> </a> </div> <p>Those who administer OS X clients typically look to disable such prompts on managed machines, either to avoid annoying users in shared workstation environments or because the organization may not (or may) wish to provide diagnostics information to Apple and third-party developers.</p> MacTech Deployment Discussion/BOF/Q&A Notes https://macops.ca/mactech-deployment-discussionbofqa-notes/ Fri, 07 Nov 2014 18:46:23 +0000 https://macops.ca/mactech-deployment-discussionbofqa-notes/ <p>At MacTech Conference 2014 in Los Angeles, <a href="http://grahamgilbert.com/">Graham Gilbert</a> and myself conducted a discussion / birds-of-a-feather session on the broad topic of OS and software deployment for OS X and iOS.</p> <p><a href="http://resume.aru-b.com">Allister Banks</a> was present and dutifully took notes and reference URLs of specifics that were mentioned - solutions, blog posts, and other resources. We thought these would be great to share:</p> <script src="https://gist.github.com/timsutton/ba309d5ab61004ddd039.js"></script> How Do I Contribute? MacTech 2014 presentation links https://macops.ca/how-do-i-contribute-mactech-2014-presentation-links/ Wed, 05 Nov 2014 22:20:44 +0000 https://macops.ca/how-do-i-contribute-mactech-2014-presentation-links/ <p>For everyone at the MacTech Conference in Los Angeles this year, here are links to various resources that are linked and referred to in my talk today on Git and source code collaboration.</p> <!-- TODO: add link to slides --> <p>Source Control Management:</p> <ul> <li><a href="http://git-scm.com">Git</a></li> <li><a href="http://mercurial.selenic.com">Mercurial</a></li> </ul> <p>Learning resources:</p> <ul> <li><a href="http://git-scm.com/book/en/v2">Pro Git 2nd edition</a></li> <li><a href="https://try.github.io">Try Git</a></li> <li><a href="http://stackoverflow.com/questions/tagged/git">StackOverflow</a></li> <li><a href="http://onlywei.github.io/explain-git-with-d3/">Explain Git with D3</a></li> </ul> <p>GUI Applications:</p> <ul> <li><a href="https://www.atlassian.com/software/sourcetree">SourceTree</a> (Atlassian)</li> <li><a href="http://www.git-tower.com">Tower</a> (fournova)</li> <li><a href="https://mac.github.com">GitHub for Mac</a> (GitHub)</li> <li><a href="http://rowanj.github.io/gitx">GitX-dev by rowanj</a></li> </ul> <p>GitHub:</p> Yosemite deployment images and (Beta) Feedback Assistant https://macops.ca/yosemite-deployment-images-and-beta-feedback-assistant/ Fri, 17 Oct 2014 13:50:39 +0000 https://macops.ca/yosemite-deployment-images-and-beta-feedback-assistant/ <!-- [![fbasst_256x256](http://macops.ca/wp-content/uploads/2014/10/fbasst_256x256.png)](http://macops.ca/wp-content/uploads/2014/10/fbasst_256x256.png) --> <p>Yosemite was released yesterday, October 16, as OS X 10.10 build 14A389. One of the first thing a lot of Mac admins do with new OS releases is build never-booted disk images for deployment using the mighty <a href="https://github.com/MagerValp/AutoDMG">AutoDMG</a> tool written by Per Olofsson.</p> <p>While I still wait to see if Apple will offer my machine running the latest Yosemite Public Beta to upgrade to the exact same build number, I yesterday built an image of 14A389 on this system and added my usual handful of packages: creating an admin user, disabling the Setup Assistant and disabling the iCloud welcome dialog for new users.</p> AutoPkg: Crowd-sourcing Mac packaging and deployment https://macops.ca/autopkg-msa2014/ Wed, 17 Sep 2014 13:53:57 +0000 https://macops.ca/autopkg-msa2014/ <p>Thanks to everyone who attended Greg&rsquo;s and my talk today at <a href="http://macsysadmin.se">MacSysAdmin 2014</a> in Göteborg! Again, I give my sincere thanks to Tycho and all those who organize the fantastic MacSysAdmin conference every year. I&rsquo;m honoured to be among such great company, speakers and attendees.</p> <p>Here are the links for resources that were mentioned in the slides:</p> <p>AutoPkg:</p> <ul> <li><a href="http://autopkg.github.io/autopkg">AutoPkg home page</a></li> <li><a href="https://github.com/autopkg/autopkg/wiki">AutoPkg Wiki documentation</a></li> <li><a href="https://github.com/autopkg/recipes">AutoPkg &lsquo;recipes&rsquo; repo</a></li> </ul> <p>Getting support:</p> <ul> <li><a href="https://groups.google.com/group/autopkg-discuss">AutoPkg Google Group</a></li> <li><a href="http://webchat.freenode.net/?channels=##osx-server">irc.freenode.net: ##osx-server</a></li> </ul> <p>Other tools:</p> A Tour of Charles, Your HTTP(S) Swiss Army Knife https://macops.ca/charles/ Tue, 22 Apr 2014 13:29:33 +0000 https://macops.ca/charles/ <!-- [![Charles_256.png](images/2014/04/Charles_256.png)](images/2014/04/Charles_256.png) --> <p>There are times when it&rsquo;s helpful to be able to know exactly what HTTP traffic is being sent or received on your Macs. Perhaps you&rsquo;re auditing a 3rd-party application to see what connections it makes to outside servers, or maybe you&rsquo;re interacting with – or writing – a <a href="http://en.wikipedia.org/wiki/RESTful_API_Modeling_Language#Applied_to_web_services">REST API</a>. Perhaps you just want to see every transaction between you and Apple&rsquo;s servers when you use the Mac App Store to download apps, or use Internet Recovery.</p> <p>Anyone doing systems administration long enough will have eventually used the <a href="http://en.wikipedia.org/wiki/Pcap">packet capture library</a> in some form, usually in the form of tcpdump and/or the <a href="http://www.wireshark.org/">Wireshark</a> application, a powerful set of tools for analyzing all types of network traffic. This is very useful if you&rsquo;re writing a <a href="https://bitbucket.org/bruienne/bsdpy">NetBoot server replacement</a> and need to inspect at the packet level, but if we&rsquo;re only interested in HTTP(S) traffic, there are better, more specialized tools available. In this post I&rsquo;ll introduce <a href="https://www.charlesproxy.com/">Charles</a>, a web proxy and GUI tool for inspecting and diagnosing HTTP traffic. Since I&rsquo;m <a href="http://github.com/autopkg/recipes">often</a> <a href="http://github.com/autopkg/timsutton-recipes">interested</a> in knowing how software performs update checks, I&rsquo;ll use this as an example.</p> Building native extensions since LLVM 5.1 https://macops.ca/building-native-extensions-since-llvm-5-1/ Tue, 15 Apr 2014 16:22:36 +0000 https://macops.ca/building-native-extensions-since-llvm-5-1/ <p>With LLVM / clang 5.1, Apple introduced a change where any unrecognized command option causes a hard failure. Unfortunately, there are many packages in the <a href="https://pypi.python.org">Python package index</a> that have not yet adapted to this change when building on OS X and include unsupported flags (in my experience it&rsquo;s usually been <code>-mno-fused-madd</code>). I first started running into this frequently when installing some Python packages using <code>pip</code>. This can also be an issue for other package managers like <a href="http://rubygems.org/">RubyGems</a>.</p> How to Package Profiles https://macops.ca/how-to-package-profiles/ Thu, 10 Apr 2014 20:51:38 +0000 https://macops.ca/how-to-package-profiles/ <!-- [![Pkg_256.png](images/2014/04/Pkg_256.png)](images/2014/04/Pkg_256.png) --> <p>Part of a managed Mac&rsquo;s configuration is often one or more Profiles, either Configuration Profiles, or an Enrollment Profile for an MDM server like <a href="http://www.apple.com/ca/support/osxserver/profilemanager/">Apple&rsquo;s Profile Manager</a> or <a href="https://meraki.cisco.com/products/systems-manager">Cisco Meraki Systems Manager</a>.</p> <p>There are multiple ways to install these. You can have users double-click and install these .mobileconfig files themselves via a website or e-mail if they have administrative rights on their machines. You can have <a href="http://www.deploystudio.com/">DeployStudio</a> install them as part of a workflow and not care how it&rsquo;s done, or have a management service like the <a href="http://www.jamfsoftware.com/products/casper-suite/">Casper Suite</a> configure and manage them for clients (and again, not need to care how it&rsquo;s done).</p> Installing Command Line Tools automatically on Mavericks https://macops.ca/installing-command-line-tools-automatically-on-mavericks/ Wed, 23 Oct 2013 13:01:01 +0000 https://macops.ca/installing-command-line-tools-automatically-on-mavericks/ <p>In Mavericks, the Xcode Command Line Tools can be downloaded from the ADC downloads page like with previous versions. Now, though, they can be also be installed on-demand in a similar fashion to how Java has been installed since Lion, by simply invoking a command installed by them such as <code>otool</code>, or a new option in the <code>xcode-select</code> utility: <code>--install</code>.</p> <div class="image-wrapper" > <a href="https://macops.ca/images/2013/10/xcodeselect-install@2x.png" title="" target="_blank"> <img src="https://macops.ca/images/2013/10/xcodeselect-install@2x.png" alt="" /> </a> </div> <p>In this post we&rsquo;ll look at how you can trigger and run this installation in an automated way, eliminating the need for any user interaction.</p> Deploying Xcode and CLI tools: what's new in Xcode 5 https://macops.ca/deploying-xcode-and-cli-tools-whats-new-in-xcode-5/ Thu, 19 Sep 2013 19:17:22 +0000 https://macops.ca/deploying-xcode-and-cli-tools-whats-new-in-xcode-5/ <!-- [![ApplicationLoader_128.png](images/2013/09/ApplicationLoader_128.png)](images/2013/09/ApplicationLoader_128.png) --> <p>Xcode 5 was released to the public on September 18 along with iOS 7. If you deploy Xcode and the command-line tools, a few things have changed since 4.x. There&rsquo;ve been a couple other posts on this blog in the past about the steps required to successfully deploy <a href="https://macops.ca/xcode-deployment-the-dvtdownloadableindex-and-ios-simulators/">Xcode</a> and/or <a href="https://macops.ca/managing-xcode-cli-tools/">CLI tools</a>.</p> <p>In this post we&rsquo;ll look at what&rsquo;s new with Xcode 5.</p> Java 7 web plugin deployment: redux https://macops.ca/java-7-web-plugin-deployment-redux/ Wed, 18 Sep 2013 13:56:02 +0000 https://macops.ca/java-7-web-plugin-deployment-redux/ <!-- [![JavaCupLogo-161](images/2013/02/JavaCupLogo-161.png)](images/2013/02/JavaCupLogo-161.png) --> <p>The Oracle Java 7 JRE (a web plugin) began shipping last year, and has grown a small maze of clever mechanisms to maintain a schedule of checking for updates. It&rsquo;s a sad tale of the misuse and abuse of launchd schedule re-writes and re-loads, the Sparkle Framework, storing Java properties-like prefs in OS X defaults, and having two different systems that actually check for updates implemented in two different languages and runtimes.</p> <p>I covered this earlier this year in a <a href="http://macops.ca/everything-youll-wish-you-didnt-know-about-disabling-java-7-updates/">couple</a> <a href="http://macops.ca/java-7-how-not-to-use-launchd-for-your-app/">posts</a>. It also prompted me to write an <a href="https://github.com/autopkg/recipes/blob/78f07357c58142b2732f997d326ec204ee6c4506/OracleJava7/OracleJava7.munki.recipe#L41-L65">overly-opinionated recipe for AutoPkg</a>.</p> <div class="image-wrapper" > <a href="https://macops.ca/images/2013/09/j7u40_panel@2x.png" title="" target="_blank"> <img src="https://macops.ca/images/2013/09/j7u40_panel@2x.png" alt="" /> </a> <p class="image-caption">Update-checking control in the Java Control Panel</p> </div> <p>The takeaway from those previous two posts is that the plugin has a mechanism triggered by the applet to check for updates, but because this only runs once the plugin is loaded via a browser, there is also a background-check LaunchAgent that prompts the user to install the latest version via a Sparkle dialog (a process which later goes and re-loads LaunchAgents as root instead of you, but read the earlier blog posts if you care.)</p> <p>Now that Update 40 has been out for over a week, I&rsquo;ve taken some time to look at the changes to the installation that should be of interest to anyone deploying it en masse.</p> Configuring ColorSync display profiles using the command-line https://macops.ca/configuring-colorsync-display-profiles-using-the-command-line/ Fri, 16 Aug 2013 13:45:10 +0000 https://macops.ca/configuring-colorsync-display-profiles-using-the-command-line/ <!-- [![ColorSyncUtility_128.png](images/2013/08/ColorSyncUtility_128.png)](images/2013/08/ColorSyncUtility_128.png) --> <p>Managing ColorSync ICC profiles for displays is something I do for certain workstations via MCX, and it&rsquo;s always been a pain. Typically I would manually configure a profile for a display, then open up that user&rsquo;s ByHost .GlobalPreferences preference stored on disk, extract the keys for the hardware-specific GUID that corresponds to that monitor (something like <code>Device.mntr.00000610-0000-9C6B-0000-000004271AC0</code>), and import them into MCX, ending up with a blob like this:</p> Java 7: How not to use launchd for your app https://macops.ca/java-7-how-not-to-use-launchd-for-your-app/ Fri, 15 Mar 2013 22:03:06 +0000 https://macops.ca/java-7-how-not-to-use-launchd-for-your-app/ <!-- [![JavaCupLogo-161_tint](images/2013/03/JavaCupLogo-161.png)](images/2013/03/JavaCupLogo-161.png) --> <p>The Oracle Java 7 package contains launchd items to support its Sparkle-based background update check app that I complained about previously. In this post we&rsquo;ll go through its logic exhaustively and use it as an example of how to not deploy a LaunchAgent, and issues when trying clever things in LaunchDaemon scripts.</p> <p>For some, there should be new information about how launchd works in general, as I think for many admins its behavior is somewhat opaque. Along the way I also learned some new launchctl command options.</p> Managing Xcode CLI tools https://macops.ca/managing-xcode-cli-tools/ Fri, 15 Mar 2013 14:54:43 +0000 https://macops.ca/managing-xcode-cli-tools/ <p>In a previous post on <a href="https://macops.ca/xcode-deployment-the-dvtdownloadableindex-and-ios-simulators/">deploying Xcode components</a>, I showed how the iOS Simulators are defined in a metadata file used by Apple, called <code>dvtdownloadableindex</code>, which is a binary plist containing information about all the &ldquo;Components&rdquo; available in the Downloads preference area.</p> <p>What&rsquo;s useful about this file is that it describes in a human-readable way what Xcode uses to determine what component updates are available and what&rsquo;s already installed. Up until yesterday, the CLI tools used only SHA-1 sums on specific binaries and libraries to determine whether the package was installed, which was somewhat frustrating to those of us deploying it, because it meant the actual package receipt version numbers were next to useless. Munki, for example, couldn&rsquo;t use these to determine installed status, but one could at least use these to know what files to use to track the installation. Munki can use MD5 checksums to specify a file&rsquo;s contents.</p> Everything you'll wish you didn't know about disabling Java 7 updates https://macops.ca/everything-youll-wish-you-didnt-know-about-disabling-java-7-updates/ Mon, 25 Feb 2013 01:11:38 +0000 https://macops.ca/everything-youll-wish-you-didnt-know-about-disabling-java-7-updates/ <!-- [![JavaCupLogo-161](images/2013/02/JavaCupLogo-161.png)](images/2013/02/JavaCupLogo-161.png) --> <p>Oracle&rsquo;s Java 7 JRE for OS X was first officially released in October 2012. As expected, there have been issues deploying and testing it, amidst confusion about Apple&rsquo;s Java 6 updates and it disabling symlinks to the web plugin, the pre-emptive disabling of Java with XProtect, and more.</p> <p>And of course, the first thing administrators need to verify is that deployed software won&rsquo;t periodically nag the user to install an update that they don&rsquo;t have sufficient rights to install, or that they shouldn&rsquo;t install for other reasons. I&rsquo;ll cover a few ideas in this post specifically about the updater mechanisms and approaches to disabling it, and focus on other specific issues with this package in future posts.</p> New utility: XProtect Packager https://macops.ca/new-utility-xprotect-packager/ Mon, 11 Feb 2013 17:13:58 +0000 https://macops.ca/new-utility-xprotect-packager/ <p>Roughly a week after the first widespread panic with the XProtect mechanism disabling Java on OS X, the same thing happened with the Flash plugin, with Apple issuing a definition update blocking all old versions about 3 hours after the latest Flash was available. (At least this time a newer version <em>was</em> available.)</p> <p>It&rsquo;s clear that a management strategy could be very useful in environments where users aren&rsquo;t admins on their computers and can&rsquo;t install updates themselves. One such strategy is to simply disable the updater, but the definitions should still be pushed to clients as you roll out new plugin versions, to enforce minimum security requirements as well as be able to protect against known malware.</p> Monitoring Apple's XProtect meta feed for changes https://macops.ca/monitoring-apples-xprotect-meta-feed-for-changes/ Sat, 02 Feb 2013 20:22:30 +0000 https://macops.ca/monitoring-apples-xprotect-meta-feed-for-changes/ <!-- [![java-webstart_256.png](images/2013/02/java-webstart_256.png)](images/2013/02/java-webstart_256.png) --> <p>Greg had an <a href="http://managingosx.wordpress.com/2013/02/01/more-thoughts-on-xprotect-updater/">interesting blog post</a> yesterday on handling Apple&rsquo;s XProtect Updater mechanism for managed environments, as admins were still scrambling to resolve clients that suddenly had their Java Web Plugin disabled and no newer version available to install that would satisfy Apple&rsquo;s minimum version requirements defined in its XProtect blacklist (new versions of <a href="http://support.apple.com/kb/DL1573">Java 6 from Apple</a> for OS X 10.6 and <a href="http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html">Java 7 from Oracle</a> have since been posted).</p> Introducing Brigadier, a tool for automated Boot Camp driver download and installation https://macops.ca/introducing-brigadier-a-tool-for-automated-boot-camp-driver-download-and-installation/ Tue, 29 Jan 2013 20:15:10 +0000 https://macops.ca/introducing-brigadier-a-tool-for-automated-boot-camp-driver-download-and-installation/ <!-- [![bootcamp_drives_128.png](images/2013/01/bootcamp_drives_128.png)](http://macops.ca/introducing-brigadier-a-tool-for-automated-boot-camp-driver-download-and-installation/bootcamp_drives_128-png/) --> <p>Anyone doing Windows deployment on Macs, and dealing with getting and installing the Boot Camp drivers, has probably found it to be a pain point. I recently wrote a small tool called Brigadier that I&rsquo;m now testing in my environment, that will fetch Boot Camp ESD packages for any model from either OS X or Windows.. and even install them automatically on Windows. You can point it to your internal SUS for fast download speeds.</p> Rolling OS X packages with FPM and Homebrew https://macops.ca/rolling-os-x-packages-with-fpm-and-homebrew/ Sat, 19 Jan 2013 20:15:54 +0000 https://macops.ca/rolling-os-x-packages-with-fpm-and-homebrew/ <p>Two cool open-source package managers, FPM and Homebrew, recently got some new OS X Installer Package capabilities.</p> <h2 id="fpm--t-osxpkg">fpm -t osxpkg</h2> <p>Jordan Sissel&rsquo;s <a href="https://github.com/jordansissel/fpm">FPM</a> packaging tool was designed for systems administrators to very easily roll packages for RedHat, Debian and other platforms and abstract away the obscure details of the package formats themselves.</p> <p>FPM is written in Ruby, and I decided (somehow) it could be a fun learning exercise to look at implementing support in it for building OS X packages. FPM version 0.4.27 was released a few days ago, available as a <code>gem install</code>, and now supports OS X package input and output, at least on OS X platforms with pkgbuild installed (built-in on OS X 10.8 and 10.7, for 10.6 requires an installation of Xcode 3.2.6 or later).</p> Flat packages: persisting obsolescence https://macops.ca/flat-packages-persisting-obsolescence/ Tue, 18 Dec 2012 00:22:20 +0000 https://macops.ca/flat-packages-persisting-obsolescence/ <!-- [![pkg_256](images/2012/12/pkg_256.png)](http://macops.ca/flat-packages-persisting-obsolescence/pkg_256/) --> <p>Packaging is somewhat of a black art on OS X. The Flat Package format has been in existence since 10.5, but only recently are more 3rd-party packaging tools like <a href="http://www.jamfsoftware.com/products/composer">JAMF Composer</a> starting to move to this format by default. PackageMaker&rsquo;s days as a hidden download in the Apple Developer Center Auxiliary Downloads package are <a href="https://developer.apple.com/library/mac/#documentation/developertools/conceptual/PackageMakerUserGuide/RevisionHistory.html#//apple_ref/doc/uid/TP40005371-CH999-SW1">numbered</a>. In this post I&rsquo;ll look at one aspect of the package system that&rsquo;s perhaps less widely known, the &ldquo;ownership&rdquo; of a file to a package, and how this affects behaviour that can be tweaked when building flat packages, using <a href="https://www.unix.com/man-page/osx/1/pkgbuild/">pkgbuild</a> as the reference package-building tool.</p> Customizing hardware model filters for NetBoot https://macops.ca/customizing-hardware-model-filters-for-netboot/ Fri, 07 Dec 2012 02:19:03 +0000 https://macops.ca/customizing-hardware-model-filters-for-netboot/ <!-- [![](images/2012/12/XSNetInstall_256_crush.png)](images/2012/12/XSNetInstall_256_crush.png) --> <p>Until the release of Lion, differentiating NetBoot images for DeployStudio Runtime to support different models was fairly simple. You&rsquo;d have a Universal 10.5 image for booting PowerPC machines, and a 10.6 Intel image for Intel machines.</p> <p>Then Lion was released, and supported <em>nearly</em> every Intel Mac, leaving only the first generation models with <a href="http://en.wikipedia.org/wiki/Intel_Core#Enhanced_Pentium_M_based">32-bit Core</a> processors behind. Then Mountain Lion was released, and the compatibility matrix became more complex. With Apple announcing at the same time that they would be releasing a major new version of OS X every year, we can expect this trend to continue, and that we&rsquo;ll need to know exactly which models can boot which versions of OS X. We&rsquo;ll take a look at how we can offload this decision to the NetBoot server to make the process as simple as possible on the client end.</p> Interfacing with DeployStudio using HTTP https://macops.ca/interfacing-with-deploystudio-using-http/ Sun, 02 Dec 2012 23:51:22 +0000 https://macops.ca/interfacing-with-deploystudio-using-http/ <!-- [![DSAdmin-256](images/2012/12/DSAdmin-256.png)](http://macops.ca/interfacing-with-deploystudio-using-http/dsadmin-256/) --> <p><a href="http://deploystudio.com">DeployStudio</a> is frequently a starting place for deploying and configuring Mac systems. It has a computer database that can store information like computer/host names, default workflows, management settings and custom properties that can be leveraged by workflow scripts and inventory systems.</p> <p>It&rsquo;s well-known that all this database information is stored in plain XML plist files in the DeployStudio repository, one per computer, named after the value of the computer&rsquo;s primary key (serial number or MAC address). Sometimes people have wanted to manage this data from an external source like a web form or script that can be used by technicians deploying new hardware, but run up against the fact that changes to these files can only be loaded by restarting the DeployStudioServer service. That&rsquo;s by design. These plists are DeployStudio&rsquo;s database, and we don&rsquo;t directly interact with an applications&rsquo;s database if we can ever help it; that&rsquo;s what APIs are for, and DeployStudio has a basic <a href="http://en.wikipedia.org/wiki/Representational_state_transfer">REST</a>-style API which it uses to perform all its communications between the server, admin client and runtime instances. This post will show some basic examples of how simple it is to interact with DeployStudio via command-line tools, and a Python example for setting arbitrary properties in the computer database.</p> Xcode deployment: The dvtdownloadableindex and iOS Simulators/SDKs https://macops.ca/xcode-deployment-the-dvtdownloadableindex-and-ios-simulators/ Mon, 19 Nov 2012 13:45:19 +0000 https://macops.ca/xcode-deployment-the-dvtdownloadableindex-and-ios-simulators/ <!-- ![](images/2012/11/xcode_IDEDownloadsIcon_64.png) --> <p>Around the time of the release of OS X Mountain Lion, Xcode moved to a single drag &rsquo;n drop .dmg model to simplify the user installation experience, and Apple was nice enough to make the Command Line tools a separate download. Unfortunately, this hasn&rsquo;t simplified the process of mass deployment, and we now have more moving pieces to keep track of than ever before. Anyone who&rsquo;s deployed Xcode recently may be familiar with its laundry list of post-installation tasks.</p> <p>Some downloads, like the Command-Line Tools and earlier iOS Simulator/SDK versions, show up in a new &ldquo;Components&rdquo; download area located in Xcode&rsquo;s Preferences. We&rsquo;ll look at where this index comes from, how we can inspect it to get the iOS simulator .dmg download URLs, and one method of modifying the simulator installer packages so that they install to the correct location via any standard package distribution method like Munki or Casper. If you manage installing the Command-Line Tools as well, you&rsquo;ll find metadata here that will help with tracking version installs (anyone who&rsquo;s tried to manage deploying/updating them knows they <em>don&rsquo;t</em> use Apple package versioning).</p> <div class="image-wrapper" > <a href="https://macops.ca/images/2012/11/xcode-4.5.2-dvt@2x.png" title="" target="_blank"> <img src="https://macops.ca/images/2012/11/xcode-4.5.2-dvt@2x.png" alt="" /> </a> <p class="image-caption">Xcode Preferences: Downloads</p> </div> <p>We&rsquo;ll also quickly review the other steps typically required to &ldquo;finalize&rdquo; the Xcode installation for most deployment scenarios. Big thanks to <a href="http://afp548.com/author/natewalck">Nate Walck</a> for testing what I&rsquo;d originally documented for the iOS Simulator installation and determining that I&rsquo;d skipped an important step!</p> Modifying the TCC database https://macops.ca/modifying-the-tcc-db/ Sat, 10 Nov 2012 13:27:33 +0000 https://macops.ca/modifying-the-tcc-db/ <!-- [![](images/2012/11/kTCCServiceAddressBook.png)](images/2012/11/kTCCServiceAddressBook.png) --> <p>Mountain Lion introduced a new iOS-like feature to allow users to be notified when an application requests access to that user&rsquo;s contacts:</p> <div class="image-wrapper" > <a href="https://macops.ca/images/2012/11/tcc-fcp-dialog@2x.png" title="" target="_blank"> <img src="https://macops.ca/images/2012/11/tcc-fcp-dialog@2x.png" alt="" /> </a> </div> <p>&hellip;and to be able to modify this access later:</p> <div class="image-wrapper" > <a href="https://macops.ca/images/2012/11/tcc-prefpane@2x.png" title="" target="_blank"> <img src="https://macops.ca/images/2012/11/tcc-prefpane@2x.png" alt="" /> </a> </div> <p>Why does Final Cut Pro 7 want to access contacts? Final Cut Pro 7 introduced a feature that uses iChat (which doesn&rsquo;t even really <em>exist</em> in Mountain Lion), therefore when a user first launches FCP, OS X will ask permission to allow FCP to access that user&rsquo;s contacts.</p> <p>It might be nice to be able to pre-allow or -disallow access for applications without user intervention, especially in scenarios where user Library data isn&rsquo;t persistent across logins in a multi-user environment, where users would otherwise be nagged frequently to access what&rsquo;s likely an empty Contacts database.</p> Disabling updates in Acrobat Pro X: A case study in wasted effort https://macops.ca/disabling-updates-in-acrobat-pro-x/ Sun, 26 Aug 2012 15:32:59 +0000 https://macops.ca/disabling-updates-in-acrobat-pro-x/ <!-- [![](images/2012/11/aprox-updater_128x128.png)](images/2012/11/aprox-updater_128x128.png) --> <p>Adobe&rsquo;s Acrobat family of products has been historically painful for IT to distribute and manage. While this article focuses on a simple management setting – suppressing update checks and notifications for all users – it&rsquo;s an example of how configuring even the simplest, arguably most universally required management setting for an Acrobat-deploying IT department is an exercise in frustration at every turn, largely due to Adobe&rsquo;s Acrobat team insisting on reinventing the wheel for basic functionality already provided by native OS APIs and frameworks, compounded by many technical errors in their documentation.</p> <p>On OS X, Acrobat Pro X and Reader 10 became distributable in the standard Apple pkg format, and this was generally a huge improvement for the deployment and update process. Acrobat Pro 9 currently requires <em>twenty</em> sequential patches required to bring Acrobat Pro 9 to an up-to-date version.</p> <div class="image-wrapper" > <a href="https://macops.ca/images/2012/11/acropro9-20updates.png" title="" target="_blank"> <img src="https://macops.ca/images/2012/11/acropro9-20updates.png" alt="" /> </a> <p class="image-caption">Too many updates.</p> </div> <p>Things are much better now, but configuring a common setting such as disabling update checks for all users has remained unnecessarily complicated, for despite Adobe using a property list to store these parameters, they were per-user only, requiring these to be managed either using MCX/Profiles or a manual script to apply the appropriate preference in every user&rsquo;s Library folder (ie. at login time with a LaunchAgent).</p>