9 Commits

Author SHA1 Message Date
Buster Collings
c6ea0556bc 5.0.0 2019-10-10 11:33:46 -05:00
Buster Collings
8e3699e8b1 Merge branch 'erdnussflips-feature/macOS-Catalina-Support'
Adds Catalina version support.
2019-10-10 11:06:04 -05:00
Philipp S. aka. erdnussflips
aa035d5cc4 Added support for macOS Catalina
Updated readme

Fixed ISO size for mac OS Catalina
2019-10-10 12:39:30 +02:00
Buster Collings
50ce5ae0f3 4.0.0 2018-09-26 15:15:48 -05:00
Buster Collings
be08c30937 Remove bpkg install instructions
I <3'd bpkg but it's a pretty stale project; so, I'm removing it
as a suggested installer.
2018-09-26 15:13:29 -05:00
Buster Collings
1702928982 Add Mojave
yup
2018-09-26 15:12:06 -05:00
Buster Collings
a5fbdabf89 Add Mojave
- added to v2 installable apps list
2018-09-26 15:09:41 -05:00
Buster Collings
59d063bfd0 🍺 Add Homebrew tap installation instructions
if you don't have homebrew installed, you prolly should; cheers.
2017-12-14 15:14:09 -06:00
Buster Collings
e7775b8c22 Refactor
Lil cleaner, clearer and easier to use.
2017-12-08 10:52:26 -06:00
3 changed files with 134 additions and 118 deletions

View File

@@ -4,9 +4,11 @@
## Prerequisites
The appropriate installation file(s) must be located in `/Applications` i.e.
The appropriate installation app file(s) must be located in `/Applications` i.e.
```
/Applications/Install macOS Catalina.app
/Applications/Install macOS Mojave.app
/Applications/Install macOS High Sierra.app
/Applications/Install macOS Sierra.app
/Applications/Install OS X El Capitan.app
@@ -16,23 +18,30 @@ The appropriate installation file(s) must be located in `/Applications` i.e.
Mac users can download theses files from the App Store.
## Install with [bpkg](https://github.com/bpkg/bpkg)
## Install with [Homebrew](https://brew.sh)
```sh
$ bpkg install busterc/osx-iso
$ brew tap busterc/tap
$ brew install osx-iso
```
## Usage
```sh
$ osxiso <"High Sierra"|Sierra|"El Capitan"|Yosemite|Mavericks>
$ osxiso
1) macOS Catalina 4) macOS Sierra 7) OS X Mavericks
2) macOS Mojave 5) OS X El Capitan 8) Quit
3) macOS High Sierra 6) OS X Yosemite
Select OS or Quit:
```
## License
ISC License (ISC)
Copyright &copy; 2015-2017, Buster Collings
Copyright &copy; 2015-2018, Buster Collings
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

229
osxiso
View File

@@ -1,111 +1,81 @@
#!/bin/bash
#!/usr/bin/env bash
function osxiso() {
PS3="
Select OS or Quit: "
temp="$PWD/temp"
dist="$PWD/dist"
base_mount="/Volumes/OS X Base System"
build_mount="/Volumes/install_build"
app_mount="/Volumes/install_app"
apps_v1="|macOS Sierra|OS X El Capitan|OS X Yosemite|OS X Mavericks|"
apps_v2="|macOS High Sierra|macOS Mojave|macOS Catalina|"
apps=(
"macOS Catalina"
"macOS Mojave"
"macOS High Sierra"
"macOS Sierra"
"OS X El Capitan"
"OS X Yosemite"
"OS X Mavericks"
)
apps_available=()
local app # path for "Install OS X <version>.app"
function usage() {
cat <<EOF
Create a bootable ISO of OS X / macOS, from the installation app file.
Usage:
$ ${0##*/} <"High Sierra"|Sierra|"El Capitan"|Yosemite|Mavericks>
Prerequisites:
The installation app file(s) must be unaltered and located at:
"/Applications/Install macOS High Sierra.app"
"/Applications/Install macOS Sierra.app"
"/Applications/Install OS X El Capitan.app"
"/Applications/Install OS X Yosemite.app"
"/Applications/Install OS X Mavericks.app"
EOF
exit 1
function log_warning() {
echo "$(tput setab 3)$(tput setaf 0)>> $* $(tput sgr0)"
}
local temp="$PWD/temp"
local dist="$PWD/dist"
local iso="$dist/$1.iso"
local app_mount="/Volumes/install_app"
local build_mount="/Volumes/install_build"
local base_mount="/Volumes/OS X Base System"
local highsierra_mount="/Volumes/Install macOS High Sierra"
function log_error() {
>&2 echo "$(tput setab 1)$(tput setaf 7)>> $* $(tput sgr0)"
}
function log_success() {
echo "$(tput setab 2)$(tput setaf 7)$*$(tput sgr0)"
}
function detach_mounts() {
# Unmount OS
[[ ! -d "/Volumes/Install $1" ]] || hdiutil detach "/Volumes/Install $1"
# Unmount the installer image
[[ ! -d "$app_mount" ]] || hdiutil detach "$app_mount"
# Unmount the sparse bundle
[[ ! -d "$base_mount" ]] || hdiutil detach "$base_mount"
# Unmount the High Sierra specific
[[ ! -d "$highsierra_mount" ]] || hdiutil detach "$highsierra_mount"
# Unmount temporary build path
[[ ! -d "$build_mount" ]] || hdiutil detach "$build_mount"
}
function cleanup() {
detach_mounts
detach_mounts "$1"
# Remove temp directory
rm -rf "$temp"
}
function abort() {
printf "\nCommand returned with error, aborting ...\n\n"
echo
log_error "Command returned with error, aborting ..."
echo
exit 2
}
function prep_build() {
# Attempt cleanup of any previous attempts
cleanup
# Attempt cleanup of any failed previous attempts
cleanup "$1"
# Prepare to do work
mkdir -p "$temp"
mkdir -p "$dist"
}
function build_v2() {
function build_v1() {
trap cleanup EXIT
trap abort ERR
prep_build
# Create a blank ISO of 7316MB with a Single Partition
hdiutil create -o "$temp/$1.cdr" -size 7316m -layout SPUD -fs HFS+J
# Mount the blank ISO
hdiutil attach "$temp/$1.cdr.dmg" -noverify -nobrowse -mountpoint "$build_mount"
printf "<sudo> "
sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume "$build_mount"
# Detach mounts
detach_mounts
# Convert the sparse bundle to ISO/CD master
hdiutil convert "$temp/$1.cdr.dmg" -format UDTO -o "$temp/$1.iso"
# Rename the ISO and move it to the distribution "dist" dir
mv "$temp/$1.iso.cdr" "$iso"
cleanup
printf "\n========== FINISHED ==========\n\n"
printf "ISO is located at '%s'\n\n" "$iso"
}
function build() {
trap cleanup EXIT
trap abort ERR
local app_file="/Applications/Install $1.app"
prep_build
# Mount the installer image
hdiutil attach "$app/Contents/SharedSupport/InstallESD.dmg" -noverify -nobrowse -mountpoint "$app_mount"
hdiutil attach "$app_file/Contents/SharedSupport/InstallESD.dmg" -noverify -nobrowse -mountpoint "$app_mount"
# Create a blank ISO of 7316MB with a Single Partition
hdiutil create -o "$temp/$1.cdr" -size 7316m -layout SPUD -fs HFS+J
@@ -124,66 +94,103 @@ EOF
cp -rp "$app_mount/BaseSystem.chunklist" "$base_mount/BaseSystem.chunklist"
cp -rp "$app_mount/BaseSystem.dmg" "$base_mount/BaseSystem.dmg"
# Detach mounts
detach_mounts
detach_mounts "$1"
# Convert the sparse bundle to ISO/CD master
hdiutil convert "$temp/$1.cdr.dmg" -format UDTO -o "$temp/$1.iso"
# Rename the ISO and move it to the distribution "dist" dir
mv "$temp/$1.iso.cdr" "$iso"
# Rename the ISO and move it to the distribution dir
mv "$temp/$1.iso.cdr" "$dist/$1.iso"
cleanup
printf "\n========== FINISHED ==========\n\n"
printf "ISO is located at '%s'\n\n" "$iso"
echo
log_success "========== FINISHED =========="
echo
printf "ISO is located at: '%s'\n\n" "$dist/$1.iso"
}
# Verify OS X Version
[[ $# -ne 0 ]] || usage
local versions=(
Yosemite
Mavericks
"El Capitan"
Sierra
"High Sierra"
)
for version in "${versions[@]}"; do
if [[ "$1" = "$version" ]]; then
if [[ "$1" == *"Sierra"* ]]; then
app="/Applications/Install macOS $1.app"
function build_v2() {
trap cleanup EXIT
trap abort ERR
local app_file="/Applications/Install $1.app"
prep_build "$1"
# Create a blank ISO of 8121MB (7,93 GiB) with a Single Partition
hdiutil create -o "$temp/$1.cdr" -size 8121m -layout SPUD -fs HFS+J
# Mount the blank ISO
hdiutil attach "$temp/$1.cdr.dmg" -noverify -nobrowse -mountpoint "$build_mount"
# Let createinstallmedia populate the blank ISO
printf "$(tput setab 3)$(tput setaf 0)%s$(tput sgr0) " "<sudo>"
sudo "$app_file"/Contents/Resources/createinstallmedia --volume "$build_mount" --nointeraction
detach_mounts "$1"
# Convert the sparse bundle to ISO/CD master
hdiutil convert "$temp/$1.cdr.dmg" -format UDTO -o "$temp/$1.iso"
# Rename the ISO and move it to the distribution dir
mv "$temp/$1.iso.cdr" "$dist/$1.iso"
cleanup
echo
log_success "========== FINISHED =========="
echo
printf "ISO is located at: '%s'\n\n" "$dist/$1.iso"
}
function choose() {
echo
select app in "${apps_available[@]}"; do
case "$app" in
"Quit")
break
;;
*)
if [[ "$apps_v2" == *"|$app|"* ]]; then
log_success "** Building ISO for $app **"
build_v2 "$app"
elif [[ "$apps_v1" == *"|$app|"* ]]; then
log_success "** Building ISO for $app **"
build_v1 "$app"
else
app="/Applications/Install OS X $1.app"
log_error "You must select a valid option *number* from the list."
choose
fi
break
;;
esac
done
}
if [[ ! -e "$app" ]]; then
cat <<EOF
Missing: $app
* You can download it from the App Store
EOF
exit 1
fi
# Do Work
if [[ "$1" == "High Sierra" ]]; then
build_v2 "$1"
function main() {
for app in "${apps[@]}"; do
if [[ -d "/Applications/Install $app.app" ]]; then
apps_available+=("$app")
else
build "$1"
fi
exit $?
log_warning "Missing /Applications/Install $app.app"
fi
done
# Invalid version provided
usage
[[ ${#apps_available[@]} -eq 0 ]] && log_error "You do not have any installer apps available. You can download them from the App Store and try again!" && exit 1
apps_available+=("Quit")
choose
}
main
}
## Export or run
if [[ ${BASH_SOURCE[0]} != $0 ]]; then
if [[ "${BASH_SOURCE[0]}" != "$0" ]]; then
export -f osxiso
else
osxiso "$@"
osxiso
fi

View File

@@ -1,6 +1,6 @@
{
"name": "osxiso",
"version": "2.0.0",
"version": "5.0.0",
"description": "Create a bootable ISO of OS X / macOS, from the installation app file.",
"global": "1",
"install": "install -c osxiso ${PREFIX:-/usr/local}/bin",