From 0aefdf3f1a0c9abb9fc456d8cb3ec91a199a9f65 Mon Sep 17 00:00:00 2001
From: 2Shirt <2xShirt@gmail.com>
Date: Thu, 1 Apr 2021 22:54:36 -0600
Subject: [PATCH] Add support to build live macOS Catalina images
* Had to drop iTerm due to a library incompatibilty
---
setup/macos/Catalina/Utilities.plist | 56 +++++++++++++++
setup/macos/{ => High Sierra}/Utilities.plist | 0
setup/macos/com.apple.Terminal.plist | Bin 0 -> 24418 bytes
setup/macos/live-macos-startup | 29 ++++----
setup/macos/update-base-image | 64 +++++++++---------
setup/macos/{zshrc => zshenv} | 0
6 files changed, 104 insertions(+), 45 deletions(-)
create mode 100644 setup/macos/Catalina/Utilities.plist
rename setup/macos/{ => High Sierra}/Utilities.plist (100%)
create mode 100644 setup/macos/com.apple.Terminal.plist
rename setup/macos/{zshrc => zshenv} (100%)
diff --git a/setup/macos/Catalina/Utilities.plist b/setup/macos/Catalina/Utilities.plist
new file mode 100644
index 00000000..b66d8ea1
--- /dev/null
+++ b/setup/macos/Catalina/Utilities.plist
@@ -0,0 +1,56 @@
+
+
+
+
+ Buttons
+
+
+ BundlePath
+ /System/Applications/Utilities/Terminal.app
+ DescriptionKey
+ Hardware Diagnostics
+ Path
+ /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal
+ TitleKey
+ WizardKit: Hardware Diagnostics
+
+
+ BundlePath
+ /System/Applications/Utilities/Disk Utility.app
+ DescriptionKey
+ Repair or erase a volume.
+ Path
+ /System/Applications/Utilities/Disk Utility.app/Contents/MacOS/Disk Utility
+ TitleKey
+ Disk Utility
+
+
+ Menu
+
+
+ BundlePath
+ /System/Applications/Utilities/Startup Security Utility.app
+ Path
+ /System/Applications/Utilities/Startup Security Utility.app/Contents/MacOS/Startup Security Utility
+ TitleKey
+ Startup Security Utility
+
+
+ BundlePath
+ /System/Library/CoreServices/Applications/Network Utility.app
+ Path
+ /System/Library/CoreServices/Applications/Network Utility.app/Contents/MacOS/Network Utility
+ TitleKey
+ Network Utility
+
+
+ BundlePath
+ /System/Applications/Utilities/Terminal.app
+ Path
+ /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal
+ TitleKey
+ Terminal
+
+
+
+
diff --git a/setup/macos/Utilities.plist b/setup/macos/High Sierra/Utilities.plist
similarity index 100%
rename from setup/macos/Utilities.plist
rename to setup/macos/High Sierra/Utilities.plist
diff --git a/setup/macos/com.apple.Terminal.plist b/setup/macos/com.apple.Terminal.plist
new file mode 100644
index 0000000000000000000000000000000000000000..f5150110f87a6876c82e1bbe12db1f0addeeef4d
GIT binary patch
literal 24418
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
literal 0
HcmV?d00001
diff --git a/setup/macos/live-macos-startup b/setup/macos/live-macos-startup
index ac0f2b93..7a5d5ff5 100755
--- a/setup/macos/live-macos-startup
+++ b/setup/macos/live-macos-startup
@@ -2,21 +2,19 @@
#
## Init macOS env
-# Set Locale
-LC_ALL=en_US.UTF-8; export LC_ALL
-LANG=en_US.UTF-8; export LANG
-
-# Set PATH
-echo "Updating PATH..."
-for p in /usr{/local/opt/{e2fsprogs,ruby,util-linux},/local,}/{bin,sbin}; do
+# Update PATH
+for p in /usr/local/{,opt/{e2fsprogs,ruby,util-linux}/}{bin,sbin}; do
PATH="${p}:${PATH}"
done
-export PATH
# Create and mount RAMDisk
-if ! [ -d /Volumes/RAM_Disk ]; then
+if ! [[ -d /Volumes/RAM_Disk ]]; then
echo "Creating RAM Disk..."
- diskutil erasevolume HFS+ RAM_Disk $(hdiutil attach -nomount ram://524288)
+ RAM_DEV="$(hdiutil attach -nomount ram://524288)"
+ diskutil quiet erasevolume HFS+ RAM_Disk ${RAM_DEV}
+ diskutil unmount ${RAM_DEV}
+ mkdir /Volumes/RAM_Disk
+ mount -t hfs -o owners ${RAM_DEV} /Volumes/RAM_Disk
fi
cd /Volumes/RAM_Disk
@@ -25,10 +23,13 @@ echo "Getting caffeinated..."
caffeinate -id &
# Set time
-echo "Updating clock..."
-if ! sntp -Ss us.pool.ntp.org 2>/dev/null; then
- # Assuming we're running under an older version of macOS
- sntp -s us.pool.ntp.org 2>/dev/null
+if ! [[ -e /Volumes/RAM_Disk/.time_set ]]; then
+ echo "Updating clock..."
+ if ! sntp -Ss us.pool.ntp.org >/dev/null 2>&1; then
+ # Assuming we're running under an older version of macOS
+ sntp -s us.pool.ntp.org >/dev/null 2>&1
+ fi
+ touch /Volumes/RAM_Disk/.time_set
fi
# Run cmd
diff --git a/setup/macos/update-base-image b/setup/macos/update-base-image
index 59015015..f0cc50dd 100755
--- a/setup/macos/update-base-image
+++ b/setup/macos/update-base-image
@@ -10,18 +10,21 @@ set -o pipefail
# Prep
echo "Initializing..."
BASE_IMAGE="$1"
-IMAGE_DEV="$(hdiutil attach "${BASE_IMAGE}" | grep -Eo '(/dev/disk[0-9]+)\b')"
-OS_VERSION="$(ls /Volumes/*Base\ System | grep -E 'OS X|macOS' | sed -E 's/Install (OS X|macOS) (.*)\.app/\2/')"
-OUT_NAME="${HOME}/Desktop/WK ${OS_VERSION} ($(date +"%Y-%m-%d"))"
-WK_PATH="/Volumes/WK_UFD"
+IMAGE_DEV="$(hdiutil attach -mountpoint /Volumes/BaseSystem "${BASE_IMAGE}" -nobrowse | grep -Eo '(/dev/disk[0-9]+)\b')"
+OS_NAME="$(ls /Volumes/BaseSystem | grep -E 'OS X|macOS' | sed -E 's/Install (OS X|macOS) (.*)\.app/\2/')"
+OS_VERSION="$(defaults read /Volumes/BaseSystem/System/Library/CoreServices/SystemVersion ProductVersion)"
+OUT_NAME="${HOME}/Desktop/WK ${OS_NAME} ($(date +"%Y-%m-%d"))"
+WK_PATH="/Volumes/1201_UFD"
# Convert to a 4 GB R/W image
-echo "Creating read-write copy of the ${OS_VERSION} Base System image..."
+echo "Creating read-write copy of the ${OS_NAME} Base System image..."
hdiutil create -srcdevice "${IMAGE_DEV}s1" -format UDSB "${OUT_NAME}.sparsebundle"
hdiutil detach "${IMAGE_DEV}"
hdiutil resize -size 4g "${OUT_NAME}.sparsebundle"
-hdiutil attach "${OUT_NAME}.sparsebundle"
-diskutil rename "OS X Base System" "WK_UFD"
+WK_IMAGE_DEV="$(hdiutil attach "${OUT_NAME}.sparsebundle" -nobrowse | grep -Eo '(/dev/disk[0-9]+)\b')"
+if ! diskutil rename "OS X Base System" "1201_UFD"; then
+ diskutil rename "macOS Base System" "1201_UFD"
+fi
# Remove Install app
echo "Removing Install app..."
@@ -29,10 +32,12 @@ rm -R "${WK_PATH}"/Install*.app
# Update Utilities menu
echo "Updating Utilities menu..."
-if [[ "${OS_VERSION}" == "El Capitan" ]]; then
+if [[ "${OS_VERSION:0:5}" == "10.11" ]]; then
cp -a "El Capitan/Utilities.plist" "${WK_PATH}/System/Installation/CDIS/OS X Utilities.app/Contents/Resources/Utilities.plist"
-else
- cp -a Utilities.plist "${WK_PATH}/System/Installation/CDIS/macOS Utilities.app/Contents/Resources/Utilities.plist"
+elif [[ "${OS_VERSION:0:5}" == "10.13" ]]; then
+ cp -a "High Sierra/Utilities.plist" "${WK_PATH}/System/Installation/CDIS/macOS Utilities.app/Contents/Resources/Utilities.plist"
+elif [[ "${OS_VERSION:0:5}" == "10.15" ]]; then
+ cp -a "Catalina/Utilities.plist" "${WK_PATH}/System/Installation/CDIS/macOS Utilities.app/Contents/Resources/Utilities.plist"
fi
# Homebrew
@@ -40,61 +45,58 @@ echo "Installing Hombrew..."
mkdir -p "${WK_PATH}/usr/local/bin"
ln -s python3 "${WK_PATH}/usr/local/bin/python"
rsync -aS /opt/ "${WK_PATH}/opt"/
-rsync -aS --exclude='.git*' /usr/local/{Cellar,Frameworks,Homebrew,bin,etc,include,lib,libexec,opt,sbin,share,var} "${WK_PATH}/usr/local"/
+rsync -aS --exclude='.git*' /usr/local/{Cellar,Frameworks,Homebrew,bin,etc,include,lib,opt,sbin,share,var} "${WK_PATH}/usr/local"/
+if [[ "${OS_VERSION:3:2}" -lt "15" ]]; then
+ rsync -aS --exclude='*.git' /usr/local/libexec "${WK_PATH}/usr/local"/
+fi
# Fonts
echo "Installing Fonts..."
cp -a /Library/Fonts/Inconsolata*ttf "${WK_PATH}/System/Library/Fonts"/
-# iTerm2
-echo "Installing iTerm2..."
-if [[ "${OS_VERSION}" == "El Capitan" ]]; then
- rsync -aS /Applications/iTerm.app "${WK_PATH}/Applications"/
- rsync -aS "El Capitan/com.googlecode.iterm2.plist" "${WK_PATH}/var/root/Library/Preferences"/
-else
- rsync -aS /Applications/iTerm-2.app "${WK_PATH}/Applications"/
- rsync -aS com.googlecode.iterm2.plist "${WK_PATH}/var/root/Library/Preferences"/
- rsync -aS /usr/lib/lib{apr,expat,ffi}* /Volumes/WK_UFD/usr/lib/
- rsync -aS /System/Library/Frameworks/{MetalKit,Quartz*}.framework "${WK_PATH}/System/Library/Frameworks"/
-fi
-cp -a ../linux/include/airootfs/etc/skel/.tmux.conf "${WK_PATH}/etc/tmux.conf"
-rsync -aS /System/Library/Colors/System.clr "${WK_PATH}/System/Library/Colors"/
-rsync -aS /System/Library/Frameworks/{Scripting,ScriptingBridge,LocalAuthentication}.framework "${WK_PATH}/System/Library/Frameworks"/
-rsync -aS /usr/bin/locale "${WK_PATH}/usr/bin"/
-rsync -aLS /usr/share/locale/en_US.UTF-8 "${WK_PATH}/usr/share/locale"/
-
# pipes-sh
echo "Installing pipes.sh..."
cp -a /usr/bin/tput "${WK_PATH}/usr/bin"/
+# Terminal
+echo "Installing Terminal Preferences..."
+rsync -aS com.apple.Terminal.plist "${WK_PATH}/var/root/Library/Preferences"/
+
# Timezones
-if [[ ! -d "/var/db/timezone" ]]; then
+if [[ ! -d "${WK_PATH}/var/db/timezone" ]]; then
echo "Installing timezones..."
rsync -aS /var/db/timezone "${WK_PATH}/var/db"/
fi
+ln -sf /var/db/timezone/zoneinfo/US/Pacific "${WK_PATH}/etc/localtime"
# zsh
echo "Installing zsh..."
cp -a /bin/zsh "${WK_PATH}/bin"/
+cp -a zshenv "${WK_PATH}/etc"/
rsync -aS /usr/lib/zsh "${WK_PATH}/usr/lib"/
rsync -aS /usr/share/zsh "${WK_PATH}/usr/share"/
rsync -aS /usr/local/share/zsh "${WK_PATH}/usr/local/share"/
+sed -Ei '' 's!^(root.*)/bin/sh!\1/bin/zsh!' "${WK_PATH}/etc/passwd"
# Misc
+cp -a /bin/rsync "${WK_PATH}/bin"/
cp -a aliases "${WK_PATH}/.aliases"
cp -a bashrc "${WK_PATH}/etc/profile"
cp -a vimrc "${WK_PATH}/.vimrc"
-cp -a zshrc "${WK_PATH}/etc/zshenv"
# WizardKit
echo "Installing WizardKit env..."
touch "${WK_PATH}/.wk-live-macos"
ln -s /Volumes/RAM_Disk/Logs "${WK_PATH}/var/root/Logs"
+cp -a ../linux/profile_base/airootfs/etc/skel/.tmux.conf "${WK_PATH}/etc/tmux.conf"
cp -a ../../images/macOS.png "${WK_PATH}/usr/local/wallpaper.png"
rsync -aS /usr/bin/{env,killall} "${WK_PATH}/usr/bin"/
rsync -aS live-macos-startup ../../scripts/ "${WK_PATH}/usr/local/bin"/
+# Unmount sparsebundle
+hdiutil detach "${WK_IMAGE_DEV}"
+
# Convert to compressed read-only image
+# TODO
#echo "Converting to read-only image..."
#hdiutil convert -format UDZO -o "${OUT_NAME}.sparsebundle" "${OUT_NAME}.dmg"
-# TODO
diff --git a/setup/macos/zshrc b/setup/macos/zshenv
similarity index 100%
rename from setup/macos/zshrc
rename to setup/macos/zshenv