Compare commits

...

40 Commits
5.0.0 ... 8.0.0

Author SHA1 Message Date
Brooke Kuhlmann
006593b402 Added version release notes. 2019-10-12 10:52:38 -06:00
Brooke Kuhlmann
f989334a11 Updated to macOS Catalina.
[Features](https://www.apple.com/macos/catalina).
2019-10-12 10:49:42 -06:00
Brooke Kuhlmann
b2949b0b7b Updated to Rake 13.0.0.
Provides future support for Ruby 2.7.0 and drops support for Ruby
versions older than 2.2.0.

[Details](https://github.com/ruby/rake/blob/master/History.rdoc).
2019-10-01 20:22:12 -06:00
Brooke Kuhlmann
40bd5dea2d Updated to Ruby 2.6.5.
Resolves several security vulnerabilities:

- CVE-2019-16255: A code injection vulnerability of Shell#[] and
  Shell#test
- CVE-2019-16254: HTTP response splitting in WEBrick (Additional fix)
- CVE-2019-15845: A NUL injection vulnerability of File.fnmatch and
  File.fnmatch?
- CVE-2019-16201: Regular Expression Denial of Service vulnerability of
  WEBrick’s Digest access authentication

[Details](https://is.gd/qWSrzR)
2019-10-01 17:51:03 -06:00
Brooke Kuhlmann
f8619eedc8 Added version release notes. 2019-09-01 09:02:55 -06:00
Brooke Kuhlmann
3b5fc4e36f Updated to Ruby 2.6.4.
Resolves issues with jQuery vulnerabilities in RDoc.

- [Ruby 2.6.4 Release Notes](https://is.gd/dNIrnn).
- [Multiple jQuery vulnerabilities in RDoc](https://is.gd/RNRZHr).
2019-08-28 07:23:15 -06:00
Brooke Kuhlmann
dde21b5bef Updated README screencast tutorial.
Provides improved descriptions, examples, and new theming.

[ci skip]
2019-08-18 11:16:37 -06:00
Brooke Kuhlmann
eb286cd150 Added version release notes. 2019-08-01 06:53:28 -06:00
Brooke Kuhlmann
c2c9ebf14e Added file install function.
Was originally removed in this commit (a895090ca9) and has been
restored in order to handle situations where we have only a single file
install.

For example, the MacOS Config project needs this function in order to
properly install the Pathogem (Vim) file.
2019-07-20 10:43:13 -06:00
Brooke Kuhlmann
6992d11d1c Added version release notes. 2019-06-01 11:49:58 -06:00
Brooke Kuhlmann
f6428c7245 Updated to Git Cop 3.5.0.
[Changes](https://github.com/bkuhlmann/git-cop/releases/tag/3.5.0).
2019-06-01 10:15:33 -06:00
Brooke Kuhlmann
5e26d111c1 Updated contributing documentation.
Minor wording and sentence structure clean up.

[ci skip]
2019-05-18 12:00:36 -06:00
Brooke Kuhlmann
b45af77b5c Added version release notes. 2019-05-01 20:53:27 -06:00
Brooke Kuhlmann
41f6fae742 Added project icon to README.
Further stylizes the project.

[ci skip]
2019-04-28 10:00:45 -06:00
Brooke Kuhlmann
3ee1d855bf Updated to Ruby 2.6.3.
[Details](https://is.gd/wKUEHw).
2019-04-17 17:43:02 -06:00
Brooke Kuhlmann
a77af9c21f Added version release notes. 2019-04-01 10:38:23 -06:00
Brooke Kuhlmann
4b7c940850 Updated to Ruby 2.6.2.
Addresses serveral bug and security fixes.

[Details](https://is.gd/lIVAFn)
2019-03-13 12:43:28 -06:00
Brooke Kuhlmann
295578875f Added XCode installer fix to troubleshooting section.
I've not experienced this yet but others have so adding to the
troubleshooting section in case it is of help.

[ci skip]
2019-03-13 07:07:24 -06:00
Brooke Kuhlmann
1ae3ae1134 Updated to Ruby 2.6.1.
Fixed major issue with `Net::Protocol::BufferedIO#write` raising
`NoMethodError` when sending large multi-byte strings.

[Details](https://is.gd/cQ8wcl).
2019-01-30 06:50:09 -07:00
Brooke Kuhlmann
d78eb3063d Added version release notes. 2019-01-01 12:16:07 -07:00
Brooke Kuhlmann
a547d061b2 Updated to Git Cop 3.0.0.
Includes enhanced support for XDG environment variables which don't
require support of additional tools like [direnv](https://direnv.net).

[Changes](https://github.com/bkuhlmann/git-cop/releases/tag/3.0.0).
2019-01-01 10:21:29 -07:00
Brooke Kuhlmann
f58f146074 Added Circle CI Bundler cache.
Speeds up the builds by pulling from the Bundler cache (when Gemfile
has not changed).
2018-12-30 10:45:52 -07:00
Brooke Kuhlmann
6c2de5a5bb Fixed Circle CI cache for Ruby version.
Was missing the checksum which would cause Ruby to be downloaded and
rebuilt each time.

The Docker image has been updated to use an unspecified version to
reduce version maintenance.

The `CI_RUBY_VERSION` environment variable was introduced to be
dynamically set based on value in the `.ruby-version` for improved
maintainability.
2018-12-30 10:01:44 -07:00
Brooke Kuhlmann
4d9ad7315d Removed download file function.
No longer used or recommended now that the `install_*` functions
consistently install applications in the correct location based on
application name.
2018-12-29 15:13:36 -07:00
Brooke Kuhlmann
a895090ca9 Fixed program installs.
Modifies and renames the original `install_file` function so it
calculates install path based on application name. This ensures
`install_program` has the same behavior as found with similar install
functions:
  - `install_dmg_app`
  - `install_dmg_pkg`
  - `install_zip_app`
  - `install_zip_pkg`
  - `install_tar_app`
2018-12-29 15:13:36 -07:00
Brooke Kuhlmann
0c7ae2ba4e Added README boot disk documentation.
Provides an additional reference for convenience when the scripts for
creating the boot disk are no longer available.
2018-12-29 14:06:03 -07:00
Brooke Kuhlmann
caa2adb45c Removed Java development tools from setup.
These tools were originally necessary for some of the Homebrew
applications to install successfully (especially Elasticsearch) but
those requirements are no longer necessary. This also reduces the setup
friction by requiring less manual work on behalf of the installer.
2018-12-29 14:06:03 -07:00
Brooke Kuhlmann
cc75094d5f Added README troubleshooting section.
Discovered this situation while wanting to rebuild a recently rebuilt
machine of the same operation system version. At first, thought the
original bootdisk was corrupted but turns out the system NVRAM/PRAM was
causing the issue.
2018-12-29 14:06:03 -07:00
Brooke Kuhlmann
d03762425a Fixed installation of apps with no extension.
Some apps are binaries packaged within a DMG, zip, etc. that have no
extension but are executable. These are meant to go in the
`/usr/local/bin` folder.

This corresponds with the code found in the `installers.sh` file (see
the `install_app` function).
2018-12-29 14:06:03 -07:00
Brooke Kuhlmann
2d58c953e1 Updated to Ruby 2.6.0.
[Changes](https://is.gd/MuTHWG).
2018-12-25 11:29:03 -07:00
Brooke Kuhlmann
bb329535c7 Added version release changes. 2018-11-01 20:01:55 -06:00
Brooke Kuhlmann
72f5fcb03e Removed unnecessary source code comments.
Reduced stating the obvious (in many cases) in order to improve
readability and reduce lines of code.
2018-10-28 13:35:51 -06:00
Brooke Kuhlmann
7da69e543f Updated to Java SE Development Kit 11.
Links to latest release of Java SE SDK.
2018-10-27 11:59:21 -06:00
Brooke Kuhlmann
0b5c5a6cd8 Updated to Ruby 2.5.3.
Fixes development packaging issues absent in Ruby 2.5.2.

[Details](https://is.gd/tYAZvF).
2018-10-21 09:47:23 -06:00
Brooke Kuhlmann
450c04e126 Updated to Ruby 2.5.2.
Includes important security patches. [Details](https://is.gd/60JxWj).
2018-10-17 12:54:37 -06:00
Brooke Kuhlmann
8305d07ffb Added version release changes. 2018-10-01 19:56:56 -06:00
Brooke Kuhlmann
ff09e25ea5 Added XCode install tip.
Helpful for first-time installers not familar with XCode. Also reduces
confusion with license window which always seems to appear behind
current window.
2018-09-30 10:34:17 -06:00
Brooke Kuhlmann
be396b9581 Updated to Java SE Development Kit 10.
Provides a link to the latest JDK.
2018-09-25 17:35:28 -06:00
Brooke Kuhlmann
6dd6d93bb8 Updated boot disk creation to macOS Mojave.
Provides support for the latest
[macOS](https://www.apple.com/macos/mojave) release.
2018-09-25 17:35:28 -06:00
Brooke Kuhlmann
98d921527c Updated to Contributor Covenant Code of Conduct 1.4.1.
The biggest change is the links all use HTTPS now. Formatting was
corrected to wrap at the 100th column as well.

[ci skip]
2018-08-12 07:10:08 -06:00
27 changed files with 257 additions and 178 deletions

View File

@@ -1 +1 @@
2.5.1 2.6.5

View File

@@ -1,3 +1,61 @@
# 8.0.0 (2019-10-12)
- Updated to Rake 13.0.0.
- Updated to Ruby 2.6.5.
- Updated to macOS Catalina.
# 7.2.1 (2019-09-01)
- Updated README screencast tutorial.
- Updated to Ruby 2.6.4.
# 7.2.0 (2019-08-01)
- Added file install function.
# 7.1.2 (2019-06-01)
- Updated contributing documentation.
- Updated to Git Cop 3.5.0.
# 7.1.1 (2019-05-01)
- Added project icon to README.
- Updated to Ruby 2.6.3.
# 7.1.0 (2019-04-01)
- Added XCode installer fix to troubleshooting section.
- Updated to Ruby 2.6.1.
- Updated to Ruby 2.6.2.
# 7.0.0 (2019-01-01)
- Fixed Circle CI cache for Ruby version.
- Fixed installation of apps with no extension.
- Fixed program installs.
- Added Circle CI Bundler cache.
- Added README boot disk documentation.
- Added README troubleshooting section.
- Updated to Git Cop 3.0.0.
- Updated to Ruby 2.6.0.
- Removed Java development tools from setup.
- Removed download file function.
# 6.1.0 (2018-11-01)
- Updated to Java SE Development Kit 11.
- Updated to Ruby 2.5.2.
- Updated to Ruby 2.5.3.
- Removed unnecessary source code comments.
# 6.0.0 (2018-10-01)
- Added XCode install tip.
- Updated boot disk creation to macOS Mojave.
- Updated to Contributor Covenant Code of Conduct 1.4.1.
- Updated to Java SE Development Kit 10.
# 5.0.0 (2018-08-01) # 5.0.0 (2018-08-01)
- Fixed Markdown ordered list numbering. - Fixed Markdown ordered list numbering.

View File

@@ -2,10 +2,11 @@
## Our Pledge ## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making In the interest of fostering an open and welcoming environment, we as contributors and maintainers
participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, pledge to making participation in our project and our community a harassment-free experience for
disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity
religion, or sexual identity and orientation. and expression, level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards ## Our Standards
@@ -22,40 +23,43 @@ Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances * The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks * Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment * Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission * Publishing others' private information, such as a physical or electronic address, without explicit
permission
* Other conduct which could reasonably be considered inappropriate in a professional setting * Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities ## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take Project maintainers are responsible for clarifying the standards of acceptable behavior and are
appropriate and fair corrective action in response to any instances of unacceptable behavior. expected to take appropriate and fair corrective action in response to any instances of unacceptable
behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, Project maintainers have the right and responsibility to remove, edit, or reject comments, commits,
issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or
contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope ## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the This Code of Conduct applies both within project spaces and in public spaces when an individual is
project or its community. Examples of representing a project or community include using an official project e-mail representing the project or its community. Examples of representing a project or community include
address, posting via an official social media account, or acting as an appointed representative at an online or offline using an official project e-mail address, posting via an official social media account, or acting as
event. Representation of a project may be further defined and clarified by project maintainers. an appointed representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement ## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting
[brooke@alchemists.io](mailto:brooke@alchemists.io). All complaints will be reviewed and investigated and will result in the project team at [Brooke Kuhlmann](mailto:brooke@alchemists.io). All complaints will be reviewed
a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain and investigated and will result in a response that is deemed necessary and appropriate to the
confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be circumstances. The project team is obligated to maintain confidentiality with regard to the reporter
posted separately. of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent Project maintainers who do not follow or enforce the Code of Conduct in good faith may face
repercussions as determined by other members of the project's leadership. temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution ## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [http://contributor-covenant.org/version/1/4][version] available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: http://contributor-covenant.org [homepage]: https://www.contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

View File

@@ -1,22 +1,22 @@
# Contributing # Contributing
Thanks for taking an interest in this open source project. Your support and involvement is greatly Thanks for taking an interest in this open source project. Your support and involvement is greatly
appreciated. The following sections detail what you need to know in order to contribute. appreciated. The following details what you need to know in order to contribute.
## Code ## Code
1. Read the project README before starting. 1. Read the project README before starting.
1. Fork the `master` branch of this repository and clone the fork locally. 1. Fork and clone the `master` branch of this repository locally.
1. Ensure there are no setup, usage, and/or test issues. 1. Ensure there are no local setup, usage, and/or test issues.
1. Add tests for new functionality and ensure they pass. 1. Add tests for new functionality and ensure they pass.
1. Submit a pull request, follow the instructions it provides, and ensure the build passes. 1. Submit a pull request, follow the instructions provided, and ensure the build passes.
## Issues ## Issues
- Submit an issue via the GitHub Issues tab (assuming one does not - Submit an issue via the GitHub Issues tab (assuming one does not already exist) and follow the
already exist) and follow the instructions it provides. instructions provided.
## Feedback ## Feedback
- Expect a response within one to three business days. - Expect a response within one to three business days.
- Changes, alternatives, and/or improvements might be suggested upon review. - Changes, alternatives, and/or improvements may be suggested upon review.

View File

@@ -2,5 +2,5 @@
source "https://rubygems.org" source "https://rubygems.org"
gem "rake", "~> 12.0" gem "rake", "~> 13.0"
gem "git-cop", "~> 2.2" gem "git-cop", "~> 3.5"

View File

@@ -1,3 +1,7 @@
<p align="center">
<img src="mac_os.png" alt="MacOS Icon"/>
</p>
# macOS # macOS
[![Circle CI Status](https://circleci.com/gh/bkuhlmann/mac_os.svg?style=svg)](https://circleci.com/gh/bkuhlmann/mac_os) [![Circle CI Status](https://circleci.com/gh/bkuhlmann/mac_os.svg?style=svg)](https://circleci.com/gh/bkuhlmann/mac_os)
@@ -26,7 +30,9 @@ the two projects are meant to be used:
- [Requirements](#requirements) - [Requirements](#requirements)
- [Setup](#setup) - [Setup](#setup)
- [Usage](#usage) - [Usage](#usage)
- [Boot Disk](#boot-disk)
- [Customization](#customization) - [Customization](#customization)
- [Troubleshooting](#troubleshooting)
- [Versioning](#versioning) - [Versioning](#versioning)
- [Code of Conduct](#code-of-conduct) - [Code of Conduct](#code-of-conduct)
- [Contributions](#contributions) - [Contributions](#contributions)
@@ -41,9 +47,7 @@ the two projects are meant to be used:
- Provides a command line interface, written in Bash, with no additional dependencies for - Provides a command line interface, written in Bash, with no additional dependencies for
installation and management of a macOS machine. installation and management of a macOS machine.
- Supports macOS boot disk creation for fresh install of operating system. - Supports macOS boot disk creation for fresh install of operating system.
- Downloads and installs development tools (required by Homebrew): - Downloads and installs [Xcode Command Line Tools](https://developer.apple.com/xcode).
- [Xcode Command Line Tools](https://developer.apple.com/xcode)
- [Java SE Development Kit](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
- Downloads, installs, and configures [Homebrew Formulas](http://brew.sh). - Downloads, installs, and configures [Homebrew Formulas](http://brew.sh).
- Downloads, installs, and configures [Homebrew Casks](https://caskroom.github.io). - Downloads, installs, and configures [Homebrew Casks](https://caskroom.github.io).
- Downloads, installs, and configures - Downloads, installs, and configures
@@ -56,11 +60,11 @@ the two projects are meant to be used:
## Screencast ## Screencast
[![asciicast](https://asciinema.org/a/155990.png)](https://asciinema.org/a/155990) [![asciicast](https://asciinema.org/a/263059.svg)](https://asciinema.org/a/263059)
## Requirements ## Requirements
1. [macOS High Sierra](https://www.apple.com/macos) (with latest software updates applied) 1. [macOS Catalina](https://www.apple.com/macos/catalina) (with latest software updates applied)
1. [Xcode](https://developer.apple.com/xcode) (with accepted license agreement) 1. [Xcode](https://developer.apple.com/xcode) (with accepted license agreement)
## Setup ## Setup
@@ -72,7 +76,7 @@ Current Version (stable):
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 5.0.0 git checkout 8.0.0
Master Version (unstable): Master Version (unstable):
@@ -125,6 +129,31 @@ been loaded.
It is recommended that the `mac_os` project directory not be deleted and kept on the local machine It is recommended that the `mac_os` project directory not be deleted and kept on the local machine
in order to manage installed software and benefit from future upgrades. in order to manage installed software and benefit from future upgrades.
### Boot Disk
When attempting to create a boot disk via `bin/run B`, you'll be presented with the following
documentation (provided here for reference):
macOS Boot Disk Tips
- Use a USB drive (8GB or higher).
- Use Disk Utility to format the USB drive as "Mac OS Extended (Journaled)".
- Use Disk Utility to label the USB drive as "Untitled".
macOS Boot Disk Usage:
1. Insert the USB boot disk into the machine to be upgraded.
2. Reboot the machine.
3. Hold down the OPTION key before the Apple logo appears.
4. Select the USB boot disk from the menu.
5. Use Disk Utility to format the machine's drive as "APFS (Encrypted)".
6. Install the new operating system.
macOS Reinstall:
1. Click the Apple icon from the operating system main menu.
2. Select the "Restart..." menu option.
3. Hold down the COMMAND+R keys before the Apple logo appears.
4. Wait for the macOS installer to load from the recovery partition.
5. Use the dialog options to launch Disk Utility, reinstall the system, etc.
### Customization ### Customization
All executable scripts can be found in the `bin` folder: All executable scripts can be found in the `bin` folder:
@@ -152,6 +181,23 @@ project is built upon the functions found in the `lib` folder. See the
- `lib/settings.sh`: Defines global settings for software applications, extensions, etc. - `lib/settings.sh`: Defines global settings for software applications, extensions, etc.
## Troubleshooting
- 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 can't find the boot
disk for some reason. To correct this, shut down and boot up the system again while holding down
the `OPTION+COMMAND+R+P` keys simultaneously. You might want to wait for the system boot sound to
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
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
example: `fatal error: 'stdio.h' file not found`. This can happen due to an intermittent bug with
the XCode installer. To fix this, you'll need to install this package:
`/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
`/Library/Developer/CommandLineTools/Packages` folder.
## Versioning ## Versioning
Read [Semantic Versioning](https://semver.org) for details. Briefly, it means: Read [Semantic Versioning](https://semver.org) for details. Briefly, it means:

View File

@@ -1,16 +1,13 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Applies basic system settings. # Applies basic system settings.
# SETTINGS
set -o nounset set -o nounset
set -o errexit set -o errexit
set -o pipefail set -o pipefail
IFS=$'\n\t' IFS=$'\n\t'
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/apply_basic_settings" SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/apply_basic_settings"
# EXECUTION
if [[ -x "$SCRIPT_PATH" ]]; then if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH" "$SCRIPT_PATH"
else else

View File

@@ -1,16 +1,13 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Applies default settings. # Applies default settings.
# SETTINGS
set -o nounset set -o nounset
set -o errexit set -o errexit
set -o pipefail set -o pipefail
IFS=$'\n\t' IFS=$'\n\t'
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/apply_default_settings" SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/apply_default_settings"
# EXECUTION
if [[ -x "$SCRIPT_PATH" ]]; then if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH" "$SCRIPT_PATH"
else else

View File

@@ -1,9 +1,7 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Creates macOS boot disk. # Creates macOS boot disk.
# EXECUTION
printf "macOS Boot Disk Tips\n" printf "macOS Boot Disk Tips\n"
printf " - Use a USB drive (8GB or higher).\n" printf " - Use a USB drive (8GB or higher).\n"
printf " - Use Disk Utility to format the USB drive as \"Mac OS Extended (Journaled)\".\n" printf " - Use Disk Utility to format the USB drive as \"Mac OS Extended (Journaled)\".\n"
@@ -24,8 +22,8 @@ printf " 5. Use the dialog options to launch Disk Utility, reinstall the system
printf "\nCreating macOS boot disk...\n" printf "\nCreating macOS boot disk...\n"
if [[ ! -d "$MAC_OS_INSTALLER_PATH" ]]; then if [[ ! -e "$MAC_OS_BOOT_DISK_CREATOR" ]]; then
printf "ERROR: macOS installer does not exist: $MAC_OS_INSTALLER_PATH. Use the App Store to download.\n" printf "ERROR: macOS installer does not exist: $MAC_OS_BOOT_DISK_CREATOR. Use System Preferences → Software Update to download.\n"
exit 1 exit 1
fi fi
@@ -34,4 +32,4 @@ if [[ ! -d "$MAC_OS_BOOT_DISK_PATH" ]]; then
exit 1 exit 1
fi fi
sudo "$MAC_OS_BOOT_DISK_CREATOR" --volume "$MAC_OS_BOOT_DISK_PATH" --applicationpath "$MAC_OS_INSTALLER_PATH" --nointeraction sudo "$MAC_OS_BOOT_DISK_CREATOR" --volume "$MAC_OS_BOOT_DISK_PATH" --downloadassets --nointeraction

View File

@@ -1,16 +1,13 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Installs App Store software. # Installs App Store software.
# SETTINGS
set -o nounset set -o nounset
set -o errexit set -o errexit
set -o pipefail set -o pipefail
IFS=$'\n\t' IFS=$'\n\t'
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_app_store" SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_app_store"
# EXECUTION
if [[ -x "$SCRIPT_PATH" ]]; then if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH" "$SCRIPT_PATH"
else else

View File

@@ -1,16 +1,13 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Installs applications. # Installs applications.
# SETTINGS
set -o nounset set -o nounset
set -o errexit set -o errexit
set -o pipefail set -o pipefail
IFS=$'\n\t' IFS=$'\n\t'
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_applications" SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_applications"
# EXECUTION
if [[ -x "$SCRIPT_PATH" ]]; then if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH" "$SCRIPT_PATH"
else else

View File

@@ -1,23 +1,13 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Installs development tooling requirements. # Installs development tooling requirements.
printf "Installing Xcode CLI tools...\n" printf "Installing Xcode CLI tools...\n"
xcode-select --install xcode-select --install
printf "%s\n" "💡 ALT+TAB to view and accept Xcode license window."
read -p "Have you completed the Xcode CLI tools install (y/n)? " xcode_response read -p "Have you completed the Xcode CLI tools install (y/n)? " xcode_response
if [[ "$xcode_response" != "y" ]]; then if [[ "$xcode_response" != "y" ]]; then
printf "ERROR: Xcode CLI tools must be installed before proceeding.\n" printf "ERROR: Xcode CLI tools must be installed before proceeding.\n"
exit 1 exit 1
fi fi
printf "Installing $JAVA_LABEL...\n"
printf "%s\n" "You must manually accept the license and download the $JAVA_LABEL: $JAVA_DOWNLOAD_URL."
open $JAVA_DOWNLOAD_URL
read -p "Have you completed the $JAVA_LABEL install (y/n)? " java_response
if [[ "$java_response" != "y" ]]; then
printf "ERROR: $JAVA_LABEL must be installed before proceeding.\n"
exit 1
fi

View File

@@ -1,16 +1,13 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Installs application extensions. # Installs application extensions.
# SETTINGS
set -o nounset set -o nounset
set -o errexit set -o errexit
set -o pipefail set -o pipefail
IFS=$'\n\t' IFS=$'\n\t'
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_extensions" SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_extensions"
# EXECUTION
if [[ -x "$SCRIPT_PATH" ]]; then if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH" "$SCRIPT_PATH"
else else

View File

@@ -1,16 +1,13 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Installs Homebrew Cask software. # Installs Homebrew Cask software.
# SETTINGS
set -o nounset set -o nounset
set -o errexit set -o errexit
set -o pipefail set -o pipefail
IFS=$'\n\t' IFS=$'\n\t'
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_homebrew_casks" SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_homebrew_casks"
# EXECUTION
if [[ -x "$SCRIPT_PATH" ]]; then if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH" "$SCRIPT_PATH"
else else

View File

@@ -1,16 +1,13 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Installs Homebrew Formula software. # Installs Homebrew Formula software.
# SETTINGS
set -o nounset set -o nounset
set -o errexit set -o errexit
set -o pipefail set -o pipefail
IFS=$'\n\t' IFS=$'\n\t'
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_homebrew_formulas" SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_homebrew_formulas"
# EXECUTION
if [[ -x "$SCRIPT_PATH" ]]; then if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH" "$SCRIPT_PATH"
else else

View File

@@ -1,16 +1,13 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Performs restoration of backup data. # Performs restoration of backup data.
# SETTINGS
set -o nounset set -o nounset
set -o errexit set -o errexit
set -o pipefail set -o pipefail
IFS=$'\n\t' IFS=$'\n\t'
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/restore_backup" SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/restore_backup"
# EXECUTION
if [[ -x "$SCRIPT_PATH" ]]; then if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH" "$SCRIPT_PATH"
else else

View File

@@ -1,12 +1,7 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Executes the command line interface. # Executes the command line interface.
# USAGE
# ./run.sh OPTION
# LIBRARY
source lib/installers.sh source lib/installers.sh
source lib/options.sh source lib/options.sh
source lib/reinstallers.sh source lib/reinstallers.sh
@@ -28,7 +23,6 @@ else
exit 1 exit 1
fi fi
# EXECUTION
while true; do while true; do
if [[ $# == 0 ]]; then if [[ $# == 0 ]]; then
printf "\nUsage: run OPTION\n" printf "\nUsage: run OPTION\n"

View File

@@ -1,16 +1,13 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Sets up and launches (if necessary) installed software. # Sets up and launches (if necessary) installed software.
# SETTINGS
set -o nounset set -o nounset
set -o errexit set -o errexit
set -o pipefail set -o pipefail
IFS=$'\n\t' IFS=$'\n\t'
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/setup_software" SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/setup_software"
# EXECUTION
if [[ -x "$SCRIPT_PATH" ]]; then if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH" "$SCRIPT_PATH"
else else

View File

@@ -3,7 +3,7 @@ jobs:
build: build:
working_directory: ~/project working_directory: ~/project
docker: docker:
- image: circleci/ruby:2.5 - image: circleci/ruby
environment: environment:
BUNDLE_JOBS: 3 BUNDLE_JOBS: 3
BUNDLE_RETRY: 3 BUNDLE_RETRY: 3
@@ -12,19 +12,47 @@ jobs:
steps: steps:
- checkout - checkout
- run:
name: Environment Setup
command: |
printf "%s\n" 'export CI_RUBY_VERSION=$(cat ".ruby-version" | tr -d "\n")' >> $BASH_ENV
- type: cache-restore - type: cache-restore
name: Bundler Cache Restore name: Ruby Restore
key: bundle-{{ checksum "Gemfile" }} key: ruby-{{checksum ".ruby-version"}}
- run:
name: Ruby Install
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 ..
tar --extract --bzip2 --verbose --file ruby-$CI_RUBY_VERSION.tar.gz
cd ruby-$CI_RUBY_VERSION
./configure
make
make update-gems
make extract-gems
sudo make install
- type: cache-save
name: Ruby Store
key: ruby-{{checksum ".ruby-version"}}
paths:
- ../ruby-$CI_RUBY_VERSION
- type: cache-restore
name: Bundler Restore
key: bundler-{{checksum "Gemfile"}}
- run: - run:
name: Bundler Install name: Bundler Install
command: | command: |
gem update --system gem update --system
bundle check || bundle install bundle install --path vendor/bundle
- type: cache-save - type: cache-save
name: Bundler Cache Store name: Bundler Store
key: bundle-{{ checksum "Gemfile" }} key: bundler-{{checksum "Gemfile"}}
paths: paths:
- vendor/bundle - vendor/bundle

View File

@@ -1,6 +1,5 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Defines software installer functions. # Defines software installer functions.
# Installs an application via a DMG file. # Installs an application via a DMG file.
@@ -10,11 +9,11 @@ install_dmg_app() {
local mount_point="/Volumes/$2" local mount_point="/Volumes/$2"
local app_name="$3" local app_name="$3"
local install_path=$(get_install_path "$app_name") local install_path=$(get_install_path "$app_name")
local download_file="download.dmg" local work_file="download.dmg"
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_installer "$url" "$download_file" download_file "$url" "$work_file"
mount_image "$MAC_OS_WORK_PATH/$download_file" mount_image "$MAC_OS_WORK_PATH/$work_file"
install_app "$mount_point" "$app_name" install_app "$mount_point" "$app_name"
unmount_image "$mount_point" unmount_image "$mount_point"
verify_application "$app_name" verify_application "$app_name"
@@ -29,11 +28,11 @@ install_dmg_pkg() {
local mount_point="/Volumes/$2" local mount_point="/Volumes/$2"
local app_name="$3" local app_name="$3"
local install_path=$(get_install_path "$app_name") local install_path=$(get_install_path "$app_name")
local download_file="download.dmg" local work_file="download.dmg"
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_installer "$url" "$download_file" download_file "$url" "$work_file"
mount_image "$MAC_OS_WORK_PATH/$download_file" mount_image "$MAC_OS_WORK_PATH/$work_file"
install_pkg "$mount_point" "$app_name" install_pkg "$mount_point" "$app_name"
unmount_image "$mount_point" unmount_image "$mount_point"
printf "Installed: $app_name.\n" printf "Installed: $app_name.\n"
@@ -48,15 +47,15 @@ install_zip_app() {
local url="$1" local url="$1"
local app_name="$2" local app_name="$2"
local install_path=$(get_install_path "$app_name") local install_path=$(get_install_path "$app_name")
local download_file="download.zip" local work_file="download.zip"
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_installer "$url" "$download_file" download_file "$url" "$work_file"
( (
printf "Preparing...\n" printf "Preparing...\n"
cd "$MAC_OS_WORK_PATH" cd "$MAC_OS_WORK_PATH"
unzip -q "$download_file" unzip -q "$work_file"
find . -type d -name "$app_name" -print -exec cp -pR {} . > /dev/null 2>&1 \; find . -type d -name "$app_name" -print -exec cp -pR {} . > /dev/null 2>&1 \;
) )
@@ -67,6 +66,30 @@ install_zip_app() {
} }
export -f install_zip_app export -f install_zip_app
# Installs a package via a zip file.
# Parameters: $1 (required) - URL, $2 (required) - Application name.
install_zip_pkg() {
local url="$1"
local app_name="$2"
local install_path=$(get_install_path "$app_name")
local work_file="download.zip"
if [[ ! -e "$install_path" ]]; then
download_file "$url" "$work_file"
(
printf "Preparing...\n"
cd "$MAC_OS_WORK_PATH"
unzip -q "$work_file"
)
install_pkg "$MAC_OS_WORK_PATH" "$app_name"
printf "Installed: $app_name.\n"
verify_application "$app_name"
fi
}
export -f install_zip_pkg
# Installs an application via a tar file. # Installs an application via a tar file.
# Parameters: $1 (required) - URL, $2 (required) - Application name, $3 (required) - Decompress options. # Parameters: $1 (required) - URL, $2 (required) - Application name, $3 (required) - Decompress options.
install_tar_app() { install_tar_app() {
@@ -74,15 +97,15 @@ install_tar_app() {
local app_name="$2" local app_name="$2"
local options="$3" local options="$3"
local install_path=$(get_install_path "$app_name") local install_path=$(get_install_path "$app_name")
local download_file="download.tar" local work_file="download.tar"
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_installer "$url" "$download_file" download_file "$url" "$work_file"
( (
printf "Preparing...\n" printf "Preparing...\n"
cd "$MAC_OS_WORK_PATH" cd "$MAC_OS_WORK_PATH"
tar "$options" "$download_file" tar "$options" "$work_file"
) )
install_app "$MAC_OS_WORK_PATH" "$app_name" install_app "$MAC_OS_WORK_PATH" "$app_name"
@@ -92,29 +115,22 @@ install_tar_app() {
} }
export -f install_tar_app export -f install_tar_app
# Installs a package via a zip file. # Installs program (single file).
# Parameters: $1 (required) - URL, $2 (required) - Application name. # Parameters: $1 (required) - URL, $2 (required) - Program name.
install_zip_pkg() { install_program() {
local url="$1" local url="$1"
local app_name="$2" local program_name="$2"
local install_path=$(get_install_path "$app_name") local install_path=$(get_install_path "$program_name")
local download_file="download.zip"
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_installer "$url" "$download_file" download_file "$url" "$program_name"
mv "$MAC_OS_WORK_PATH/$program_name" "$install_path"
( chmod 755 "$install_path"
printf "Preparing...\n" printf "Installed: $program_name.\n"
cd "$MAC_OS_WORK_PATH" verify_application "$program_name"
unzip -q "$download_file"
)
install_pkg "$MAC_OS_WORK_PATH" "$app_name"
printf "Installed: $app_name.\n"
verify_application "$app_name"
fi fi
} }
export -f install_zip_pkg export -f install_program
# Installs application code from a Git repository. # Installs application code from a Git repository.
# 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.
@@ -155,9 +171,26 @@ install_git_project() {
} }
export -f install_git_project export -f install_git_project
# Downloads an installer to local disk. # Installs a single file.
# Parameters: $1 (required) - URL, $2 (required) - File name, $3 (required) - HTTP header. # Parameters: $1 (required) - URL, $2 (required) - Install path.
download_installer() { install_file() {
local file_url="$1"
local file_name=$(get_file_name "$1")
local install_path="$2"
if [[ ! -e "$install_path" ]]; then
download_file "$file_url" "$file_name"
mkdir -p $(dirname "$install_path")
mv "$MAC_OS_WORK_PATH/$file_name" "$install_path"
printf "Installed: $file_name.\n"
verify_path "$install_path"
fi
}
export -f install_file
# Downloads remote file to local disk.
# Parameters: $1 (required) - URL, $2 (required) - File name, $3 (optional) - HTTP header.
download_file() {
local url="$1" local url="$1"
local file_name="$2" local file_name="$2"
local http_header="$3" local http_header="$3"
@@ -167,38 +200,7 @@ download_installer() {
mkdir $MAC_OS_WORK_PATH mkdir $MAC_OS_WORK_PATH
curl --header "$http_header" --location --retry 3 --retry-delay 5 --fail --silent --show-error "$url" >> "$MAC_OS_WORK_PATH/$file_name" curl --header "$http_header" --location --retry 3 --retry-delay 5 --fail --silent --show-error "$url" >> "$MAC_OS_WORK_PATH/$file_name"
} }
export -f download_installer export -f download_file
# Downloads an installer to the $HOME/Downloads folder for manual use.
# Parameters: $1 (required) - URL, $2 (required) - File name.
download_only() {
if [[ -e "$HOME/Downloads/$2" ]]; then
printf "Downloaded: $2.\n"
else
printf "Downloading $1...\n"
download_installer "$1" "$2"
mv "$MAC_OS_WORK_PATH/$2" "$HOME/Downloads"
fi
}
export -f download_only
# Installs a single file.
# Parameters: $1 (required) - URL, $2 (required) - Install path.
install_file() {
local file_url="$1"
local file_name=$(get_file_name "$1")
local install_path="$2"
if [[ ! -e "$install_path" ]]; then
printf "Installing: $install_path...\n"
download_installer "$file_url" "$file_name"
mkdir -p $(dirname "$install_path")
mv "$MAC_OS_WORK_PATH/$file_name" "$install_path"
printf "Installed: $file_name.\n"
verify_path "$install_path"
fi
}
export -f install_file
# Installs an application. # Installs an application.
# Parameters: $1 (required) - Application source path, $2 (required) - Application name. # Parameters: $1 (required) - Application source path, $2 (required) - Application name.
@@ -209,6 +211,8 @@ install_app() {
printf "Installing: $install_root/$2...\n" printf "Installing: $install_root/$2...\n"
case $file_extension in case $file_extension in
'')
cp -a "$1/$2" "$install_root";;
'app') 'app')
cp -a "$1/$2" "$install_root";; cp -a "$1/$2" "$install_root";;
'prefPane') 'prefPane')

View File

@@ -1,6 +1,5 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Defines command line prompt options. # Defines command line prompt options.
# Process option selection. # Process option selection.

View File

@@ -1,6 +1,5 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Defines reinstall functions. # Defines reinstall functions.
# Reinstall application. # Reinstall application.

View File

@@ -1,22 +1,11 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Defines global settings.
# SETTINGS
# General
set -o nounset set -o nounset
set -o errexit set -o errexit
set -o pipefail set -o pipefail
IFS=$'\n\t' IFS=$'\n\t'
# Globals export MAC_OS_BOOT_DISK_CREATOR="/Applications/Install macOS Catalina.app/Contents/Resources/createinstallmedia"
export MAC_OS_BOOT_DISK_CREATOR="/Applications/Install macOS High Sierra.app/Contents/Resources/createinstallmedia"
export MAC_OS_BOOT_DISK_PATH="/Volumes/Untitled" export MAC_OS_BOOT_DISK_PATH="/Volumes/Untitled"
export MAC_OS_INSTALLER_PATH="/Applications/Install macOS High Sierra.app"
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"
# Java
export JAVA_LABEL="Java SE Development Kit"
export JAVA_DOWNLOAD_URL="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html"

View File

@@ -1,6 +1,5 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Defines uninstall functions. # Defines uninstall functions.
# Uninstalls selected application. # Uninstalls selected application.

View File

@@ -1,6 +1,5 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Defines general utility functions. # Defines general utility functions.
# Answers the full install path (including file name) for file name. # Answers the full install path (including file name) for file name.

View File

@@ -1,6 +1,5 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# DESCRIPTION
# Defines verification/validation functions. # Defines verification/validation functions.
# Checks for missing Homebrew formulas. # Checks for missing Homebrew formulas.

BIN
mac_os.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB