Compare commits

...

20 Commits

Author SHA1 Message Date
Brooke Kuhlmann
85c85a5e80 Added version release notes 2021-01-03 16:49:15 -07:00
Brooke Kuhlmann
b83ecf6516 Removed README Startup Security Utility documentation
Added to the macOS Configuration project, instead, since it makes more
sense to keep all pre and post install steps together in one place.
2021-01-03 14:41:57 -07:00
Brooke Kuhlmann
3889930672 Added caffeination to restore process
Restoration from backup can take a while so this ensures the machine
doesn't go to sleep during this process.
2021-01-03 14:41:16 -07:00
Brooke Kuhlmann
856f51422a Updated troubleshooting documentation
Focuses on issues experienced related to the macOS Big Sur upgrade.
2021-01-03 14:31:16 -07:00
Brooke Kuhlmann
433ad04028 Updated boot disk instructions for main disk format
Necessary because installation of Big Sur doesn't seem to like password
protected APFS drives. Disk encryption will have to happen after
installation via FileVault.
2021-01-03 14:31:15 -07:00
Brooke Kuhlmann
605190577f Added version release notes 2020-12-30 10:31:46 -07:00
Brooke Kuhlmann
c9c7f46e4a Updated to Git Lint 2.0.0
Supports Ruby 3.0.0.

[Details](https://www.alchemists.io/projects/git-lint/changes.html).
2020-12-29 19:33:36 -07:00
Brooke Kuhlmann
f8a779e926 Updated to Ruby 3.0.0
Includes temporary disablement of gem dependencies that require
updating to Ruby 3.0.0 first.

[Details](https://chl.li/LdWrE).
2020-12-29 10:35:38 -07:00
Brooke Kuhlmann
e6f991baca Added Circle CI explicit Bundle install configuration
Due to fixing the `vendor/bundle` path earlier (see previous commit),
we need to be explicit with the installation of gems now.
2020-12-20 07:15:38 -07:00
Brooke Kuhlmann
ae6ab46fa7 Fixed Circle CI configuration for Bundler config path
Prevents the following deprecation warning:

    [DEPRECATED] The `--path` flag is deprecated because it relies on
    being remembered across bundler invocations, which bundler will no
    longer do in future versions. Instead please use `bundle config set
    path 'vendor/bundle'`, and stop using this flag.
2020-12-19 17:10:44 -07:00
Brooke Kuhlmann
45a6c5d1b0 Added version release notes 2020-11-15 07:38:09 -07:00
Brooke Kuhlmann
1bb6ef39a5 Added macOS Big Sur support
Necessary to support the latest macOS release.
2020-11-15 07:35:58 -07:00
Brooke Kuhlmann
1416aa2f0a Updated to Git Lint 1.3.0
[Changes](https://www.alchemists.io/projects/git-lint/changes.html).
2020-11-14 17:37:33 -07:00
Brooke Kuhlmann
b6cddae599 Updated project documentation to conform to Rubysmith template
Necessary to match consistency used by the
[Rubysmith](https://www.alchemists.io/projects/rubysmith) when
building/maintaining projects.
2020-10-13 20:07:16 -06:00
Brooke Kuhlmann
e533bf04be Updated to Ruby 2.7.2
Fixes a WEBrick security flaw but also disables deprecation warnings by
default which is sad to see. We'll have to enable these ourselves if we
want to have an early warning sign of future breaking changes. 😢

[Release Notes](https://chl.li/lLaOn)
2020-10-03 08:27:07 -06:00
Brooke Kuhlmann
5455a76d14 Added version release notes 2020-09-12 10:11:23 -06:00
Brooke Kuhlmann
5569fdb345 Refactored utility basename and extension utilities
Minor cleanup to the method names used for less typing.
2020-09-12 09:58:53 -06:00
Brooke Kuhlmann
8f2173c938 Removed unnecessary verifier code comments
These were not adding much value so are safe to remove.
2020-09-12 09:51:40 -06:00
Brooke Kuhlmann
4f1ed26934 Removed Homebrew Mecurial formula verification check
No longer necessary as Mecurial isn't used or required by any
applications in the macOS Configuration project.
2020-09-12 09:45:27 -06:00
Brooke Kuhlmann
b7c89266f6 Fixed Homebrew cask verifier deprecation warning
Resolves the following warning when using Homebrew 2.5.0:

    Warning: Calling brew cask list is deprecated! Use brew list

Removed conditional checks for the Skitch, Witch, and OpenEmu
applications since they are no longer supported.
2020-09-12 09:45:27 -06:00
13 changed files with 92 additions and 111 deletions

View File

@@ -1 +1 @@
2.7.1 3.0.0

View File

@@ -1,5 +1,33 @@
= Changes = Changes
== 11.1.0 (2021-01-03)
* Added caffeination to restore process - Brooke Kuhlmann
* Updated boot disk instructions for main disk format - Brooke Kuhlmann
* Updated troubleshooting documentation - Brooke Kuhlmann
* Removed README Startup Security Utility documentation - Brooke Kuhlmann
== 11.0.0 (2020-12-30)
* Fixed Circle CI configuration for Bundler config path - Brooke Kuhlmann
* Added Circle CI explicit Bundle install configuration - Brooke Kuhlmann
* Updated to Git Lint 2.0.0 - Brooke Kuhlmann
* Updated to Ruby 3.0.0 - Brooke Kuhlmann
== 10.0.0 (2020-11-15)
* Added macOS Big Sur support
* Updated project documentation to conform to Rubysmith template
* Updated to Git Lint 1.3.0
* Updated to Ruby 2.7.2
== 9.0.0 (2020-09-12)
* Fixed Homebrew cask verifier deprecation warning
* Removed Homebrew Mecurial formula verification check
* Removed unnecessary verifier code comments
* Refactored utility basename and extension utilities
== 8.2.0 (2020-07-22) == 8.2.0 (2020-07-22)
* Fixed project requirements * Fixed project requirements

View File

@@ -51,7 +51,8 @@ an appointed representative at an online or offline event.
== Enforcement == Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community
leaders responsible for enforcement at link:mailto:brooke@alchemists.io?subject=Conduct[Alchemists]. leaders responsible for enforcement at link:mailto:brooke@alchemists.io?subject=Conduct[Brooke Kuhlmann].
All complaints will be reviewed and investigated promptly and fairly. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the reporter of any All community leaders are obligated to respect the privacy and security of the reporter of any
@@ -102,7 +103,7 @@ disparagement of classes of individuals.
This Code of Conduct is adapted from the This Code of Conduct is adapted from the
link:https://www.contributor-covenant.org/version/2/0/code_of_conduct.html[Contributor Covenant, link:https://www.contributor-covenant.org/version/2/0/code_of_conduct.html[Contributor Covenant,
version 2.0]. Version 2.0].
Community Impact Guidelines were inspired by link:https://github.com/mozilla/diversity[Mozilla's Community Impact Guidelines were inspired by link:https://github.com/mozilla/diversity[Mozilla's
code of conduct enforcement ladder]. code of conduct enforcement ladder].

View File

@@ -3,4 +3,4 @@
source "https://rubygems.org" source "https://rubygems.org"
gem "rake", "~> 13.0" gem "rake", "~> 13.0"
gem "git-lint", "~> 1.0" gem "git-lint", "~> 2.0"

View File

@@ -150,7 +150,7 @@ additional liability.
END OF TERMS AND CONDITIONS END OF TERMS AND CONDITIONS
Copyright link:https://www.alchemists.io[Alchemists]. Copyright 2016 link:https://www.alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann].
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a link:https://www.apache.org/licenses/LICENSE-2.0[copy] compliance with the License. You may obtain a link:https://www.apache.org/licenses/LICENSE-2.0[copy]

View File

@@ -46,30 +46,18 @@ image::https://www.alchemists.io/images/screencasts/mac_os/cover.svg[Screencast,
== Requirements == Requirements
. link:https://www.apple.com/macos/catalina[macOS] . link:https://www.apple.com/macos/big-sur[macOS Big Sur]
. link:https://developer.apple.com/xcode[Xcode] . link:https://developer.apple.com/xcode[Xcode]
== Setup == Setup
=== Production
To install, run: To install, run:
[source,bash] [source,bash]
---- ----
git clone https://github.com/bkuhlmann/mac_os.git git clone https://github.com/bkuhlmann/mac_os.git
cd mac_os cd mac_os
git checkout 8.2.0 git checkout 11.1.0
----
=== Development
To contribute, run:
[source,bash]
----
git clone https://github.com/bkuhlmann/mac_os.git
cd mac_os
---- ----
== Usage == Usage
@@ -140,8 +128,9 @@ macOS Boot Disk Usage:
2. Reboot the machine. 2. Reboot the machine.
3. Hold down the OPTION key before the Apple logo appears. 3. Hold down the OPTION key before the Apple logo appears.
4. Select the USB boot disk from the menu. 4. Select the USB boot disk from the menu.
5. Use Disk Utility to format the machine's drive as "APFS (Encrypted)". 5. Use Disk Utility to delete and/or erase the hard drive including associated partitions.
6. Install the new operating system. 6. Use Disk Utility to create a single "APFS" drive as a "GUID Partition Table".
7. Install the new operating system.
macOS Reinstall: macOS Reinstall:
1. Click the Apple icon from the operating system main menu. 1. Click the Apple icon from the operating system main menu.
@@ -151,32 +140,6 @@ macOS Reinstall:
5. Use the dialog options to launch Disk Utility, reinstall the system, etc. 5. Use the dialog options to launch Disk Utility, reinstall the system, etc.
.... ....
Depending on your security settings, you might need to use the Startup
Security Utility before using the Boot Disk (see below).
=== https://support.apple.com/en-us/HT208198[Startup Security Utility]
With newer hardware, you should be running with the Apple T2 Security Chip (found via  → About This
Mac → Overview → System Report → Controller). In order to boot your machine using the Boot Disk,
youll need to _temporarily_ disable the default security settings as follows:
* Turn on or restart your Mac, then press and hold `COMMAND + R` immediately after seeing the Apple
logo.
* Select Utilities → Startup Security Utility from the main menu.
* Click _Turn Off Firmware Password_.
* Select _Secure Boot: No Security_.
* Select _External Boot: Allow booting from external media_.
* Quit the utility and restart the machine.
Youll now be able to boot your system with the Boot Disk (see above).
After the new operating system has been installed via the Boot Disk, _ensure you return to the
Startup Security Utility and re-enable the following settings_:
* Click _Turn On Firmware Password_.
* Select _Secure Boot: Full Security_.
* Select _External Boot: Disallow booting from external or removable media_.
=== Customization === Customization
All executable scripts can be found in the `bin` folder: All executable scripts can be found in the `bin` folder:
@@ -206,6 +169,12 @@ link:https://www.alchemists.io/projects/mac_os-config[macOS Config] project for
== Troubleshooting == Troubleshooting
* When using link:https://pi-hole.net[Pi-hole], make sure to temporarily disable prior to upgrading
as you might experience various errors with Apple not able to detect an internet connection which
prevents the installer from working.
* When using the boot disk and the installer fails in some catestrophic manner, reboot the machine
into recovery mode (i.e. `COMMAND + R`) to download and install the last operating system used.
You can also use `COMMAND + OPTION + R` to attemp to download the latest operating system.
* When using the boot disk, you might experience a situation where you see a black screen with a * When using the boot disk, you might experience a situation where you see a black screen with a
white circle and diagonal line running through it. This means macOS lost or cant find the boot white circle and diagonal line running through it. This means macOS lost or cant find the boot
disk for some reason. To correct this, shut down and boot up the system again while holding down disk for some reason. To correct this, shut down and boot up the system again while holding down
@@ -213,13 +182,16 @@ link:https://www.alchemists.io/projects/mac_os-config[macOS Config] project for
happen a few times before releasing the keys. This will clear the system NVRAM/PRAM. At this point happen a few times before releasing the keys. This will clear the system NVRAM/PRAM. At this point
you can shut down and restart the system following the boot disk instructions (the boot disk will you can shut down and restart the system following the boot disk instructions (the boot disk will
be recognized now). be recognized now).
* Sometimes, when installing XCode development tools (i.e. the `t` option), not all of the macOS
headers will be installed. This can cause issues with compiling and building native packages. For == Development
example: `fatal error: 'stdio.h' file not found`. This can happen due to an intermittent bug with
the XCode installer. To fix this, youll need to install this package: To contribute, run:
`/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg`. Depending on
your system, the version might differ, so look for a `*.pkg` in the [source,bash]
`/Library/Developer/CommandLineTools/Packages` folder. ----
git clone https://github.com/bkuhlmann/mac_os.git
cd mac_os
----
== Versioning == Versioning

View File

@@ -11,8 +11,9 @@ printf " 1. Insert the USB boot disk into the machine to be upgraded.\n"
printf " 2. Reboot the machine.\n" printf " 2. Reboot the machine.\n"
printf " 3. Hold down the OPTION key before the Apple logo appears.\n" printf " 3. Hold down the OPTION key before the Apple logo appears.\n"
printf " 4. Select the USB boot disk from the menu.\n" printf " 4. Select the USB boot disk from the menu.\n"
printf " 5. Use Disk Utility to format the machine's drive as \"APFS (Encrypted)\".\n" printf " 5. Use Disk Utility to delete and/or erase the hard drive including associated partitions.\n"
printf " 6. Install the new operating system.\n" printf " 6. Use Disk Utility to create a single \"APFS\" drive as a \"GUID Partition Table\".\n"
printf " 7. Install the new operating system.\n"
printf "\nmacOS Reinstall:\n" printf "\nmacOS Reinstall:\n"
printf " 1. Click the Apple icon from the operating system main menu.\n" printf " 1. Click the Apple icon from the operating system main menu.\n"
printf " 2. Select the \"Restart...\" menu option.\n" printf " 2. Select the \"Restart...\" menu option.\n"

View File

@@ -24,9 +24,9 @@ jobs:
- run: - run:
name: Ruby Install name: Ruby Install
command: | command: |
curl https://cache.ruby-lang.org/pub/ruby/${CI_RUBY_VERSION::-2}/ruby-$CI_RUBY_VERSION.tar.bz2 > ../ruby-$CI_RUBY_VERSION.tar.gz
cd .. cd ..
tar --extract --bzip2 --verbose --file ruby-$CI_RUBY_VERSION.tar.gz curl https://cache.ruby-lang.org/pub/ruby/${CI_RUBY_VERSION::-2}/ruby-$CI_RUBY_VERSION.tar.gz > ruby-$CI_RUBY_VERSION.tar.gz
tar --extract --gzip --verbose --file ruby-$CI_RUBY_VERSION.tar.gz
cd ruby-$CI_RUBY_VERSION cd ruby-$CI_RUBY_VERSION
./configure ./configure
make make
@@ -48,7 +48,8 @@ jobs:
name: Bundler Install name: Bundler Install
command: | command: |
gem update --system gem update --system
bundle install --path vendor/bundle bundle config set path "vendor/bundle"
bundle install
- type: cache-save - type: cache-save
name: Bundler Store name: Bundler Store

View File

@@ -136,7 +136,7 @@ export -f install_program
# Parameters: $1 (required) - Repository URL, $2 (required) - Install path, $3 (optional) - Git clone options. # Parameters: $1 (required) - Repository URL, $2 (required) - Install path, $3 (optional) - Git clone options.
install_git_app() { install_git_app() {
local repository_url="$1" local repository_url="$1"
local app_name=$(get_file_name "$2") local app_name=$(get_basename "$2")
local install_path="$2" local install_path="$2"
local options="--quiet" local options="--quiet"
@@ -175,7 +175,7 @@ export -f install_git_project
# Parameters: $1 (required) - URL, $2 (required) - Install path. # Parameters: $1 (required) - URL, $2 (required) - Install path.
install_file() { install_file() {
local file_url="$1" local file_url="$1"
local file_name=$(get_file_name "$1") local file_name=$(get_basename "$1")
local install_path="$2" local install_path="$2"
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
@@ -206,7 +206,7 @@ export -f download_file
# Parameters: $1 (required) - Application source path, $2 (required) - Application name. # Parameters: $1 (required) - Application source path, $2 (required) - Application name.
install_app() { install_app() {
local install_root=$(get_install_root "$2") local install_root=$(get_install_root "$2")
local file_extension=$(get_file_extension "$2") local file_extension=$(get_extension "$2")
printf "Installing: $install_root/$2...\n" printf "Installing: $install_root/$2...\n"

View File

@@ -39,6 +39,7 @@ process_option() {
bin/setup_software bin/setup_software
clean_work_path;; clean_work_path;;
'R') 'R')
caffeinate_machine
bin/restore_backup;; bin/restore_backup;;
'c') 'c')
verify_homebrew_formulas verify_homebrew_formulas

View File

@@ -5,7 +5,7 @@ set -o errexit
set -o pipefail set -o pipefail
IFS=$'\n\t' IFS=$'\n\t'
export MAC_OS_BOOT_DISK_CREATOR="/Applications/Install macOS Catalina.app/Contents/Resources/createinstallmedia" export MAC_OS_BOOT_DISK_CREATOR="/Applications/Install macOS Big Sur.app/Contents/Resources/createinstallmedia"
export MAC_OS_BOOT_DISK_PATH="/Volumes/Untitled" export MAC_OS_BOOT_DISK_PATH="/Volumes/Untitled"
export MAC_OS_WORK_PATH=/tmp/downloads export MAC_OS_WORK_PATH=/tmp/downloads
export MAC_OS_CONFIG_PATH="../mac_os-config" export MAC_OS_CONFIG_PATH="../mac_os-config"

View File

@@ -2,6 +2,19 @@
# Defines general utility functions. # Defines general utility functions.
# Caffeinate machine.
caffeinate_machine() {
local pid=$(pgrep -x caffeinate)
if [[ -n "$pid" ]]; then
printf "Machine is already caffeinated!\n"
else
caffeinate -s -u -d -i -t 3153600000 > /dev/null &
printf "Machine caffeinated.\n"
fi
}
export -f caffeinate_machine
# Answers the full install path (including file name) for file name. # Answers the full install path (including file name) for file name.
# Parameters: $1 (required) - The file name. # Parameters: $1 (required) - The file name.
get_install_path() { get_install_path() {
@@ -17,24 +30,11 @@ clean_work_path() {
} }
export -f clean_work_path export -f clean_work_path
# Caffeinate machine.
caffeinate_machine() {
local pid=$(pgrep -x caffeinate)
if [[ -n "$pid" ]]; then
printf "Whoa, tweaker, machine is already caffeinated!\n"
else
caffeinate -s -u -d -i -t 3153600000 > /dev/null &
printf "Machine caffeinated.\n"
fi
}
export -f caffeinate_machine
# Answers the root install path for file name. # Answers the root install path for file name.
# Parameters: $1 (required) - The file name. # Parameters: $1 (required) - The file name.
get_install_root() { get_install_root() {
local file_name="$1" local file_name="$1"
local file_extension=$(get_file_extension "$file_name") local file_extension=$(get_extension "$file_name")
# Dynamically build the install path based on file extension. # Dynamically build the install path based on file extension.
case $file_extension in case $file_extension in
@@ -52,10 +52,17 @@ get_install_root() {
} }
export -f get_install_root export -f get_install_root
# Answers the file or directory basename.
# Parameters: $1 (required) - The file path.
get_basename() {
printf "${1##*/}" # Answers file or directory name.
}
export -f get_basename
# Answers the file extension. # Answers the file extension.
# Parameters: $1 (required) - The file name. # Parameters: $1 (required) - The file name.
get_file_extension() { get_extension() {
local name=$(get_file_name "$1") local name=$(get_basename "$1")
local extension="${1##*.}" # Excludes dot. local extension="${1##*.}" # Excludes dot.
if [[ "$name" == "$extension" ]]; then if [[ "$name" == "$extension" ]]; then
@@ -64,11 +71,4 @@ get_file_extension() {
printf "$extension" printf "$extension"
fi fi
} }
export -f get_file_extension export -f get_extension
# Answers the file name.
# Parameters: $1 (required) - The file path.
get_file_name() {
printf "${1##*/}" # Answers file or directory name.
}
export -f get_file_name

View File

@@ -9,7 +9,6 @@ verify_homebrew_formulas() {
local applications="$(brew list)" local applications="$(brew list)"
while read line; do while read line; do
# Skip blank or comment lines.
if [[ "$line" == "brew install"* ]]; then if [[ "$line" == "brew install"* ]]; then
local application=$(printf "$line" | awk '{print $3}') local application=$(printf "$line" | awk '{print $3}')
@@ -18,11 +17,6 @@ verify_homebrew_formulas() {
application="gnupg" application="gnupg"
fi fi
# Exception: "hg" is the binary but is listed as "mercurial".
if [[ "$application" == "hg" ]]; then
application="mercurial"
fi
verify_listed_application "$application" "${applications[*]}" verify_listed_application "$application" "${applications[*]}"
fi fi
done < "$MAC_OS_CONFIG_PATH/bin/install_homebrew_formulas" done < "$MAC_OS_CONFIG_PATH/bin/install_homebrew_formulas"
@@ -35,23 +29,11 @@ export -f verify_homebrew_formulas
verify_homebrew_casks() { verify_homebrew_casks() {
printf "\nChecking Homebrew casks...\n" printf "\nChecking Homebrew casks...\n"
local applications="$(brew cask list)" local applications="$(brew list --cask)"
while read line; do while read line; do
# Skip blank or comment lines.
if [[ "$line" == "brew cask install"* ]]; then if [[ "$line" == "brew cask install"* ]]; then
local application=$(printf "$line" | awk '{print $4}') local application=$(printf "$line" | awk '{print $4}')
# Skip: Only necessary for the purpose of licensing system preference.
if [[ "$application" == "witch" ]]; then
continue
fi
# Skip: Bug with Homebrew Cask as these apps never show up as installed.
if [[ "$application" == "skitch" || "$application" == "openemu" ]]; then
continue
fi
verify_listed_application "$application" "${applications[*]}" verify_listed_application "$application" "${applications[*]}"
fi fi
done < "$MAC_OS_CONFIG_PATH/bin/install_homebrew_casks" done < "$MAC_OS_CONFIG_PATH/bin/install_homebrew_casks"
@@ -67,7 +49,6 @@ verify_app_store_applications() {
local applications="$(mas list)" local applications="$(mas list)"
while read line; do while read line; do
# Skip blank or comment lines.
if [[ "$line" == "mas install"* ]]; then if [[ "$line" == "mas install"* ]]; then
local application=$(printf "$line" | awk '{print $3}') local application=$(printf "$line" | awk '{print $3}')
verify_listed_application "$application" "${applications[*]}" verify_listed_application "$application" "${applications[*]}"
@@ -99,7 +80,6 @@ verify_applications() {
# For each application name, check to see if the application is installed. Otherwise, skip. # For each application name, check to see if the application is installed. Otherwise, skip.
for name in $file_names; do for name in $file_names; do
# Pass the key value to verfication.
verify_application "${!name}" verify_application "${!name}"
done done
@@ -111,8 +91,6 @@ export -f verify_applications
# Parameters: $1 (required) - The file name. # Parameters: $1 (required) - The file name.
verify_application() { verify_application() {
local file_name="$1" local file_name="$1"
# Display the missing install if not found.
local install_path=$(get_install_path "$file_name") local install_path=$(get_install_path "$file_name")
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
@@ -143,7 +121,6 @@ export -f verify_extensions
verify_path() { verify_path() {
local path="$1" local path="$1"
# Display the missing path if not found.
if [[ ! -e "$path" ]]; then if [[ ! -e "$path" ]]; then
printf " - Missing: $path\n" printf " - Missing: $path\n"
fi fi